{"version":3,"sources":["utils/environment.ts","settings/settings.ts","utils/resource-id.ts","redux/state/common-store.ts","utils/features.ts","data/models/loading-store-state.ts","utils/hosts.ts","utils/string-comparison.ts","utils/provisioning-state.ts","redux/selectors/lab-account-selectors.ts","utils/power-state.ts","data/models/roles.ts","redux/selectors/template-selectors.ts","utils/common.ts","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/models/index.js","utils/operation-status.ts","common/selectors/lab-latest-operation.ts","redux/selectors/group-selectors.ts","utils/connected-lms.ts","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/models/mappers.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/models/parameters.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/operations.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/labPlans.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/labs.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/users.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/virtualMachines.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/schedules.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/images.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/operationResults.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/usages.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/operations/skus.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/labServicesClient.js","../../Backend/Sdk/TypeScript/Api.Management/v2023-06-07/esm/labServicesClientContext.js","utils/constants.ts","redux/selectors/lti-selectors.ts","utils/decode-base64url.ts","redux/selectors/vnext/lab-selectors.ts","data/models/lab.ts","redux/selectors/lab-selectors.ts","redux/selectors/vnext/lab-plan-selectors.ts","data/models/core-quota-data.ts","common/selectors/usage-selectors.ts","redux/selectors/core-limit-selectors.ts","redux/selectors/vnext/pricing-and-availability-selectors.ts","redux/selectors/vnext/price-selectors.ts","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/models/index.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/models/mappers.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/models/parameters.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/coreUsageOperations.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/labOperations.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/priceAndAvailability.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/register.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/userSettings.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/virtualMachineOperations.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/prices.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/subscriptionPrices.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/operations/operationResults.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/labsApiClient.js","../../Backend/Sdk/TypeScript/Api.Labs/v2023-02-01/esm/labsApiClientContext.js","common/sku-display-name-helper.ts","common/selectors/sku-selectors.ts","redux/selectors/subscription-selector.ts","redux/selectors/vnext/sku-selectors.ts","redux/selectors/lab-parent-resource-selectors.ts","utils/routes.ts","data/models/identity.ts","redux/selectors/identity-selector.ts","redux/selectors/route-selector.ts","redux/selectors/common-selectors.ts","data/ml-client-error.ts","utils/telemetry/1ds-channel.ts","utils/telemetry/ai-channel.ts","utils/telemetry/telemetry-type.ts","utils/telemetry/telemetry-channel.ts","utils/detect-incognito.ts","utils/browser.ts","common/error-codes.ts","utils/storage.ts","language/languages.ts","data/providers/lti-provider.ts","data/providers/msal-provider.ts","data/providers/msal-shim.ts","error-boundary/error-boundary.tsx","redux/actions/common/common-actions.ts","redux/actions/common/common-action-creators.ts","error-boundary/error-boundary-container.tsx","common/themes/custom-themes.ts","common/themes/selectors.ts","full-page-message/full-page-message.tsx","language/common-messages.ts","error-view/error-view.tsx","redux/actions/identity/identity-actions.ts","data/models/user-settings.ts","redux/actions/identity/identity-action-creators.ts","common/page/page-title.tsx","redux/actions/lab-parent-resource/lab-parent-resource-actions.ts","redux/actions/lab/lab-actions.ts","redux/action-context.ts","redux/actions/lab/lab-action-creators.ts","common/page-header/feature-menu.tsx","common/page-header/home-button.tsx","common/page-header/dropdown/loading-item.tsx","common/page-header/dropdown/dropdown-item.tsx","common/page-header/dropdown/page-header-filtered-dropdown.tsx","common/page-header/lab-parent-picker.tsx","common/page-header/lab-picker.tsx","common/linkify.tsx","common/page-header/help-flyout.tsx","common/page-header/user-menu.tsx","data/models/environment-common.ts","common/selectors/vm-connect.ts","common/toggle-tooltip.tsx","common/vm/vm-power-state.tsx","data/models/vnext/operation.ts","vm-list/vm-list-messages.ts","vm-list/vm-operation-error.tsx","vm-list/vm-operation-success.tsx","student-vm-list/student-vm-card.tsx","student-vm-list/student-vm-list-announced.tsx","student-vm-list/student-vm-list-banners.tsx","student-vm-list/student-vm-list-messages.ts","data/models/common.ts","utils/sorting.ts","student-vm-list/student-vm-list-selectors.ts","student-vm-list/student-vm-no-vms-message.tsx","student-vm-list/student-vm-stop-dialog.tsx","common/connect-to-vm/connect-utilities.ts","common/copy-to-clipboard-button/copy-to-clipboard-button.tsx","common/connect-to-vm/rdp-info-dialog.tsx","common/connect-to-vm/ssh-connect-dialog.tsx","common/loading-section.tsx","common/password-field/reserved-passwords.ts","common/password-field/password-validator.ts","common/info-tip.tsx","common/password-field/password-field.tsx","common/reset-password-dialog/reset-password-dialog.tsx","utils/files.ts","vm-list/reset-vms-dialog.tsx","common/troubleshoot-dialog/troubleshoot-dialog.tsx","student-vm-list/student-vm-list.tsx","data/models/register-user.ts","redux/actions/register/register-actions.ts","redux/actions/register/register-action-creators.ts","redux/actions/user-environment/user-environment-actions.ts","redux/actions/user-environment/user-environment-action-creators.ts","common/vm/vm-polling-initial-delay.ts","student-vm-list/student-vm-list-container.tsx","common/page-header/vm-list-flyout.tsx","common/page-header/dropdown/page-header-dropdown.tsx","common/page-header/tenant-picker.tsx","common/submit-button.tsx","redux/selectors/tenant-selectors.ts","redux/selectors/vnext/support-info-selectors.ts","common/page-header/page-header-selectors.ts","common/page-header/lms-lab-plan-settings-flyout.tsx","common/page-header/page-header.tsx","common/page-header/teams-page-header.tsx","redux/actions/lab-parent-resource/lab-parent-resource-action-creators.ts","data/helpers/route-helpers.ts","redux/actions/lab-plan/lab-plan-actions.ts","redux/actions/lab-plan/lab-plan-action-creators.ts","common/page-header/page-header-container.tsx","common/page/page-footer.tsx","common/page/page.tsx","redux/actions/lti/lti-actions.ts","redux/actions/lti/lti-action-creators.ts","error-view/error-view-container.tsx","landing-page/landing-page.tsx","landing-page/landing-page-container.tsx","welcome/loading.tsx","common/request-limit-increase-link.tsx","data/helpers/enum-helpers.ts","common/shutdown-policy/idle-config.ts","common/shutdown-policy/selectors.ts","redux/actions/gallery-image/gallery-image-actions.ts","redux/actions/gallery-image/gallery-image-action-creators.ts","redux/actions/shared-image/shared-image-actions.ts","redux/actions/shared-image/shared-image-action-creators.ts","common/unsaved-changes-dialog.tsx","common/connection-type/linux-rdp-dialog.tsx","lab-list/create-lab/create-lab-messages.ts","lab-list/create-lab/vm-image-info.ts","redux/selectors/pricing-and-availability-selectors.ts","redux/selectors/vnext/image-selectors.ts","lab-list/lab-list-selectors.ts","redux/selectors/vnext/core-usage-selectors.ts","redux/selectors/vnext/usage-selectors.ts","common/selectors/image-selectors.ts","lab-list/create-lab/vm-size-picker-sorter.ts","lab-list/create-lab/create-lab-selectors.ts","lab-list/create-lab/lab-name-validator.ts","lab-list/create-lab/vm-geography-picker-shared.tsx","lab-list/create-lab/vm-geography-picker.tsx","lab-list/create-lab/vm-image-picker.tsx","lab-list/create-lab/vm-size-picker-shared.tsx","lab-list/create-lab/vm-size-picker.tsx","lab-list/create-lab/create-lab-config-page-shared.tsx","lab-list/create-lab/create-lab-config-page.tsx","lab-list/create-lab/username-validator.ts","lab-list/create-lab/create-lab-credentials.tsx","common/password-settings-field.tsx","lab-list/create-lab/create-lab-credentials-page.tsx","common/safe-spin-button.tsx","common/connection-type/connection-type-dropdown.tsx","common/connection-type/validators.ts","common/info-section.tsx","common/shutdown-policy/grace-period-input.tsx","common/shutdown-policy/messages.ts","common/shutdown-policy/tooltips.tsx","common/shutdown-policy/customize-shutdown-dropdown.tsx","common/shutdown-policy/shutdown-policy-group.tsx","common/clock-icon.tsx","common/create-lab-time-estimate.tsx","lab-list/create-lab/create-lab-policies-page.tsx","lab-list/create-lab/create-lab-flyout.tsx","lab-list/create-lab/create-lab-flyout-container.tsx","common/lab-plan-settings-link.tsx","lab-list/create-lab/lab-name-validator-vnext.ts","lab-list/create-lab/lab-plan-picker.tsx","lab-list/create-lab/location-helpers.ts","lab-list/create-lab/vm-location-picker-vnext.tsx","lab-list/create-lab/vm-size-picker-vnext.tsx","lab-list/create-lab/create-lab-config-page-vnext.tsx","lab-list/create-lab/create-lab-template-settings-page.tsx","lab-list/create-lab/create-lab-flyout-vnext.tsx","lab-list/create-lab/create-lab-flyout-container-vnext.tsx","lab-list/delete-lab-dialog.tsx","common/carousel/carousel-cards.tsx","common/carousel/carousel-pagination.tsx","common/carousel/carousel.tsx","lab-list/introduction-messages.ts","lab-list/introduction.tsx","lab-app/lab-app-nav-messages.ts","lab-list/lab-card-footer.tsx","lab-list/lab-list-error-handling.ts","lab-list/lab-card.tsx","lab-list/lab-list-messages.ts","lab-list/no-labs-view.tsx","common/linked-lms-update-errors.tsx","lab-list/retirement-notification-messages.ts","lab-list/retirement-notification.tsx","lab-list/lab-access-dropdown.tsx","lab-list/lab-list.tsx","lab-list/lab-list-container.tsx","redux/actions/vnext/images/image-actions.ts","redux/actions/vnext/images/image-action-creators.ts","redux/actions/template/template-actions.ts","redux/actions/environment/environment-actions.ts","redux/actions/environment/environment-action-creators.ts","redux/actions/schedule/schedule-actions.ts","redux/actions/schedule/schedule-action-creators.ts","redux/actions/template/template-action-creators.ts","redux/actions/user/user-actions.ts","redux/actions/user/user-action-creators.ts","utils/lab-nav-key.ts","common/lab-nav-items.ts","schedule/schedule-messages.ts","schedule/calendar-utilities.ts","schedule/timezone-messages.ts","schedule/flyout-utilities.ts","redux/selectors/vnext/virtual-machine-selectors.ts","vm-list/vm-list-selectors.ts","template/template-selectors.ts","dashboard/dashboard-selectors.ts","dashboard/cost-estimate-tile.tsx","dashboard/dashboard-error-banner.tsx","dashboard/dashboard-error-page.tsx","template/template-messages.ts","dashboard/overview-cards.tsx","dashboard/dashboard.tsx","dashboard/dashboard-messages.ts","dashboard/dashboard-container.tsx","schedule/flyout-footer.tsx","utils/validators.ts","schedule/flyout-shared-controls.tsx","schedule/flyout-form.tsx","schedule/day-picker.tsx","schedule/flyout-recurrence-dialog.tsx","schedule/flyout.tsx","schedule/schedule-delete-dialog.tsx","schedule/schedule-error-handling.ts","schedule/schedule.tsx","schedule/schedule-selectors.ts","schedule/schedule-container.tsx","common/connection-type/connection-type-dropdown-field.tsx","common/condition.tsx","common/shutdown-policy/shutdown-policy-field-group.tsx","settings-page/settings-page-messages.tsx","lab/lab-error-banner.tsx","settings-page/settings-page.tsx","settings-page/settings-page-selectors.ts","settings-page/settings-page-container.tsx","common/lab-size-info.tsx","common/image-and-size-info.tsx","template/creating-view.tsx","template/dismiss-gpu-banner-dialog.tsx","template/clock-info-process-estimate.tsx","template/image-name-validator.ts","template/export-sig-dialog.tsx","common/syncing-spinner.tsx","template/operation-indicator.tsx","template/publish-template-dialog-content.tsx","template/publish-template-dialog.tsx","template/quota-banners.tsx","template/start-warning-dialog.tsx","template/template-error-handling.ts","template/template-banners.tsx","template/customize-dialog.tsx","template/template-command-bar.tsx","template/template-error-page.tsx","template/template-fields.tsx","template/template.tsx","template/template-container.tsx","redux/actions/group/group-actions.ts","redux/actions/group/group-action-creators.ts","common/command-button-tooltip.tsx","common/file-upload-button.tsx","common/vm/vm-usage-column.tsx","utils/emails.ts","common/file-upload-button-flyout.tsx","common/file-upload-link.tsx","user-list/add-users-flyout-messages.ts","user-list/add-users-flyout-new.tsx","common/filtered-dropdown.tsx","user-list/sync-from-group-flyout.tsx","user-list/delete-users-dialog.tsx","user-list/invitation-flyout.tsx","user-list/invite-all-dialog.tsx","user-list/open-access-dialog.tsx","user-list/quota-flyout.tsx","user-list/registration-link-dialog.tsx","user-list/user-list-models.ts","user-list/user-list-messages.ts","user-list/user-quota-flyout.tsx","user-list/sync-users-dialog.tsx","common/selectors/group-sync-time-selectors.ts","common/group-sync-time-info.tsx","user-list/user-list.tsx","user-list/user-list-selectors.ts","user-list/user-list-container.tsx","vm-list/cores-remaining-message.tsx","vm-list/capacity-flyout.tsx","vm-list/start-vms-dialog.tsx","vm-list/vm-list.tsx","vm-list/vm-list-container.tsx","lab-app/lab-app-nav.tsx","lab-app/lab-creating-view.tsx","lab-app/lab-creating-permission-propagating-view.tsx","lab-app/lab-app.tsx","lab-app/lab-app-selectors.ts","lab-app/lab-app-container.tsx","welcome/welcome.tsx","welcome/welcome-selectors.ts","welcome/welcome-container.tsx","redux/actions/teams/teams-actions.ts","redux/actions/teams/teams-action-creators.ts","teams-app/teams-configure-lab-parent-content.tsx","teams-app/teams-get-started-content.tsx","teams-app/teams-config.tsx","teams-app/teams-messages.tsx","data/models/teams.ts","redux/selectors/teams-selectors.ts","teams-app/teams-config-selectors.ts","teams-app/teams-config-container.tsx","professor-app/professor-app.tsx","professor-app/professor-app-container.tsx","sign-in/sign-in-redirect-page.tsx","sign-in/sign-in-redirect-container.tsx","sign-in/sign-in-return-page.tsx","sign-in/sign-in-return-container.tsx","register-user/register-user.tsx","register-user/register-selectors.ts","register-user/register-user-container.tsx","student-app/student-app.tsx","student-app/student-app-container.tsx","user-logged-out/user-logged-out.tsx","user-logged-out/user-logged-out-container.tsx","teams-app/teams-start-mfa-container.tsx","teams-app/teams-complete-mfa-container.tsx","lti-app/lti-start-oidc-container.tsx","app.tsx","root.tsx","serviceWorker.ts","mocks/modes.ts","mocks/mocks.ts","redux/reducers/register-reducer.ts","redux/reducers/user-environment-reducer.ts","utils/themes.ts","redux/reducers/common-reducer.ts","redux/reducers/lab-reducer.ts","redux/actions/lab-account/lab-account-actions.ts","redux/reducers/lab-account-reducer..ts","redux/reducers/identity-reducer.ts","redux/reducers/schedule-reducer.ts","utils/errors.ts","redux/reducers/template-reducer.ts","redux/actions/subscription/subscription-actions.ts","redux/reducers/subscription-reducer.ts","redux/reducers/gallery-image-reducer.ts","redux/reducers/shared-image-reducer.ts","redux/reducers/user-reducer.ts","redux/reducers/environment-reducer.ts","redux/actions/pricing-and-availability/pricing-and-availability-actions.ts","redux/reducers/pricing-and-availability-reducer.ts","redux/actions/core-limit/core-limit-actions.ts","redux/reducers/core-limit-reducer.ts","redux/reducers/group-reducer.ts","redux/reducers/teams-reducers.ts","redux/actions/tenant/tenant-actions.ts","redux/reducers/tenant-reducer.ts","redux/reducers/vnext/pricing-and-availability-reducer.ts","redux/actions/operations/operations-result-actions.ts","redux/reducers/vnext/virtual-machine-reducer.ts","redux/reducers/vnext/user-virtual-machine-reducer.ts","redux/reducers/vnext/register-reducer.ts","redux/reducers/vnext/lab-reducer.ts","redux/reducers/vnext/schedule-reducer.ts","redux/reducers/lab-parent-resource-reducer.ts","redux/reducers/vnext/core-usage-reducer.ts","redux/reducers/vnext/lab-plan-reducer.ts","redux/reducers/vnext/image-reducer.ts","redux/reducers/vnext/user-reducer.ts","redux/reducers/lti-reducer.ts","redux/actions/vnext/sku/sku-actions.ts","redux/reducers/vnext/sku-reducer.ts","redux/actions/vnext/usage/usage-actions.ts","redux/reducers/vnext/usage-reducer.ts","redux/actions/vnext/price/price-actions.ts","redux/reducers/vnext/price-reducer.ts","redux/reducers/combined-reducer.ts","data/providers/arm-data-provider.ts","data/helpers/environment-helpers.ts","data/providers/user-environment-provider.ts","redux/selectors/user-environment-selectors.ts","redux/sagas/common/features.ts","data/providers/teams-provider.ts","redux/sagas/lti/lti-token.ts","redux/sagas/identity/access-tokens.ts","data/providers/vnext/labs-api/labs-api-client-factory.ts","data/providers/vnext/labs-api/user-virtual-machine-provider.ts","redux/effects/feature-based.ts","redux/actions/operations/operations-result-action-creators.ts","redux/selectors/vnext/operations-selector.ts","data/providers/environment-provider.ts","data/providers/vnext/arm-api/virtual-machine-provider.ts","redux/effects/lab-parent-based.ts","redux/sagas/environment/list-environments.ts","redux/sagas/user-environment/list-environments.ts","redux/effects/environment-id-based.ts","redux/selectors/vnext/user-virtual-machine-selectors.ts","redux/sagas/user-environment/modify-environment.ts","redux/sagas/user-environment/reimage-virtual-machine.ts","redux/sagas/user-environment/redeploy-virtual-machine.ts","redux/sagas/user-environment/root-saga.ts","data/providers/register-provider.ts","data/providers/vnext/labs-api/register-provider.ts","utils/guid.ts","common/selectors/registration-code.ts","redux/effects/registration-code-length-based.ts","redux/sagas/register/register-user.ts","redux/sagas/register/root-saga.ts","data/providers/permissions-provider.ts","data/providers/lab-provider.ts","data/providers/vnext/arm-api/lab-provider.ts","redux/sagas/lab/list-labs.ts","redux/sagas/lab/check-permission.ts","redux/sagas/lab/poll-non-terminal-state-lab.ts","redux/sagas/lab/get-lab.ts","redux/sagas/lab/delete-lab.ts","redux/sagas/lab/update-lab.ts","data/providers/lab-account-provider.ts","data/providers/vnext/labs-api/lab-provider.ts","redux/sagas/lab/create-lab.ts","redux/sagas/lab/update-lab-access-mode.ts","redux/sagas/lab/sync-lab-users.ts","redux/sagas/lab/publish-lab.ts","data/providers/vnext/labs-api/resource-metadata-provider.ts","redux/sagas/lab/get-lab-metadata.ts","redux/sagas/lab/root-saga.ts","redux/actions/lab-account/lab-account-action-creators.ts","redux/sagas/lab-account/get-lab-account.ts","redux/sagas/lab-account/list-lab-accounts.ts","redux/sagas/lab-account/remember-lab-account.ts","redux/actions/subscription/subscription-action-creators.ts","redux/sagas/lab-account/refresh-subscriptions-and-lab-accounts.ts","redux/sagas/lab-account/root-saga.ts","redux/sagas/identity/sign-in.ts","redux/sagas/identity/sign-out.ts","data/providers/user-photo-provider.ts","redux/sagas/identity/load-user-photo.ts","redux/sagas/identity/clear-user-session.ts","data/providers/user-settings-provider.ts","data/providers/vnext/labs-api/user-settings-provider.ts","redux/sagas/identity/load-user-settings.ts","redux/sagas/identity/update-user-settings.ts","redux/sagas/identity/request-user-consent.ts","redux/sagas/identity/root-saga.ts","data/helpers/date-helpers.ts","data/providers/schedule-provider.ts","data/providers/vnext/arm-api/schedule-provider.ts","redux/sagas/schedule/list-schedules.ts","redux/sagas/schedule/create-schedule.ts","redux/sagas/schedule/delete-schedule.ts","redux/sagas/schedule/update-schedule.ts","redux/sagas/schedule/root-saga.ts","data/providers/template-provider.ts","redux/sagas/template/list-templates.ts","redux/sagas/template/update-template.ts","redux/sagas/template/reset-password.ts","redux/sagas/template/get-template.ts","redux/sagas/template/publish-template.ts","redux/sagas/template/start-template.ts","redux/sagas/template/stop-template.ts","redux/sagas/template/root-saga.ts","utils/query-params.ts","redux/effects/cancelable.ts","redux/sagas/common/startup.ts","redux/actions/tenant/tenant-action-creators.ts","redux/sagas/common/professor-startup.ts","redux/sagas/common/student-startup.ts","redux/actions/vnext/usage/usage-action-creators.ts","redux/actions/vnext/price/price-action-creators.ts","redux/sagas/common/lab-app-startup.ts","redux/sagas/common/route-change.ts","redux/sagas/common/fatal-error.ts","redux/sagas/common/idle-timeout.ts","common/themes/themes.ts","redux/sagas/common/themes.ts","redux/sagas/common/process-query-params.ts","redux/sagas/common/locale.ts","redux/sagas/common/root-saga.ts","data/providers/subscription-provider.ts","data/models/subscription.ts","data/providers/feature-provider.ts","redux/sagas/subscription/load-subscriptions.ts","redux/sagas/subscription/root-saga.ts","redux/sagas/gallery-image/list-gallery-images.ts","redux/sagas/gallery-image/root-saga.ts","data/providers/shared-image-provider.ts","redux/sagas/shared-image/list-shared-images.ts","data/providers/vnext/arm-api/lab-plan-provider.ts","redux/sagas/shared-image/create-shared-image.ts","redux/sagas/shared-image/update-shared-image.ts","redux/sagas/shared-image/get-shared-gallery.ts","redux/sagas/shared-image/root-saga.ts","data/providers/user-provider.ts","data/providers/vnext/arm-api/user-provider.ts","redux/sagas/user/list-users.ts","redux/selectors/user-selectors.ts","redux/selectors/vnext/user-selectors.ts","redux/sagas/user/add-users.ts","redux/sagas/user/delete-users.ts","redux/sagas/user/invite-users.ts","redux/sagas/user/update-additional-quota.ts","redux/sagas/user/root-saga.ts","redux/sagas/environment/reset-environments.ts","redux/sagas/environment/start-environments.ts","redux/sagas/environment/stop-environments.ts","redux/sagas/environment/get-environment.ts","redux/sagas/environment/redeploy-virtual-machines.ts","redux/sagas/environment/root-saga.ts","data/providers/vnext/labs-api/pricing-and-availability-providers.ts","redux/actions/pricing-and-availability/pricing-and-availability-action-creators.ts","redux/sagas/pricing-and-availability/get-pricing-and-availability.ts","redux/sagas/pricing-and-availability/get-lab-pricing-and-availability.ts","redux/sagas/pricing-and-availability/root-saga.ts","redux/actions/core-limit/core-limit-action-creators.ts","data/providers/vnext/labs-api/core-usage-provider.ts","redux/sagas/core-limit/get-core-limits.ts","redux/sagas/core-limit/root-saga.ts","data/providers/group-provider.ts","redux/sagas/group/get-group-name.ts","redux/sagas/group/get-groups.ts","redux/sagas/group/root-saga.ts","redux/sagas/teams/teams-configure-tab.ts","redux/sagas/teams/teams-disable-save-button.ts","redux/sagas/teams/teams-initialize.ts","redux/sagas/teams/teams-start-mfa.ts","redux/sagas/teams/teams-complete-mfa.ts","redux/sagas/teams/root-saga.ts","data/providers/tenant-provider.ts","redux/sagas/tenant/list-tenant.ts","redux/sagas/tenant/select-tenant.ts","redux/sagas/tenant/root-saga.ts","redux/sagas/lab-plan/list-lab-plan.ts","redux/sagas/lab-parent-resource/list-lab-parent-resources.ts","redux/sagas/lab-parent-resource/refresh-subscriptions-and-lab-parent-resources.ts","redux/sagas/lab-parent-resource/root-saga.ts","data/providers/vnext/arm-api/image-provider.ts","redux/sagas/vnext/image/list-images.ts","redux/sagas/vnext/image/root-saga.ts","redux/sagas/lti/lti-start-oidc.ts","redux/sagas/lti/lti-sign-in.ts","redux/sagas/lti/lti-request-storage-access.ts","redux/sagas/lti/root-saga.ts","data/providers/vnext/arm-api/sku-provider.ts","redux/actions/vnext/sku/sku-action-creators.ts","redux/sagas/vnext/sku/list-skus.ts","redux/sagas/vnext/sku/root-saga.ts","data/providers/vnext/arm-api/usage-provider.ts","redux/sagas/vnext/usage/list-usage.ts","redux/sagas/vnext/usage/root-saga.ts","data/providers/vnext/labs-api/price-provider.ts","redux/sagas/vnext/price/list-price.ts","redux/sagas/vnext/price/root-sage.ts","redux/sagas/lab-plan/get-lab-plan.ts","redux/sagas/lab-plan/update-lab-plans-lms-settings.ts","redux/sagas/lab-plan/root-saga.ts","redux/sagas/root-saga.ts","redux/middleware/action-logger-middleware.ts","redux/middleware/fatal-error-middleware.ts","redux/middleware/vnext-middleware.ts","redux/configureStore.ts","images/icons/svgs/svg-icons.tsx","images/icons/src/fabric-icons.ts","images/icons/src/iconAliases.ts","images/icons/src/IconNames.ts","images/icons/src/index.ts","index.tsx"],"names":["EnvironmentType","hostNames","settings","environmentType","window","location","hostname","toLowerCase","getEnvironmentType","localSettings","devSettings","prodSettings","ResourceId","resourceId","isVNextLabOrLabPlan","this","id","parts","split","filter","n","length","subscriptionId","resourceGroupName","providerNamespace","type","name","parent","slice","join","ancestors","current","push","reverse","fullResourceType","i","labAccountName","labName","labId","isValidResourceId","InitializationState","Feature","Dev","Bastion","LabListIntroCheckbox","SkipTemplate","ReadOnly","TeamsIntegration","VNext","CanvasIntegration","LoadingStoreState","currentLocale","Host","Web","Teams","Canvas","Unknown","setCurrentLocale","locale","caseInsensitiveLocaleCompare","a","b","localeCompare","sensitivity","caseInsensitiveCultureInvariantCompare","ProvisioningState","getStateValue","state","provisioningState","isHealthyState","PowerState","getLabAccounts","memoize","get","getHealthyLabAccounts","o","getLabAccount","store","labAccountId","find","l","getCurrentLabAccount","currentLabAccountId","getCurrentLabAccountId","isValidSupportInfo","info","url","email","phone","instructions","getSupportInfoEmail","labAccount","supportInfo","Roles","loadSubscriptionError","labAccountStore","loadLabAccountLoadError","refreshError","size","defaultLabRoles","newLabRoles","getCurrentTemplateId","getTemplates","getTemplate","templateId","t","getCurrentTemplate","currentTemplateId","getCores","sizeData","coresCount","undefined","getIsGpu","gpu","Ml","GpuType","Gpu","getTemplateCreateError","hasBeenPublished","template","lastPublished","getSshAuthority","resourceSettings","referenceVm","vmStateDetails","sshAuthority","getRdpAuthority","rdpAuthority","isTemplateCreating","isTemplateStarting","lastKnownPowerState","Starting","isTemplateStopping","Stopping","isTemplateResettingPassword","latestOperationResult","status","requestUri","Running","indexOf","isTemplateScaling","publishingState","PublishingState","Scaling","isTemplatePublished","Published","isTemplatePublishing","Publishing","isTemplatePublishingOrScaling","getActionFromUri","split2","hasTemplateCreationFailed","httpMethod","addToListMap","map","itemToAdd","itemsForId","List","some","item","_","isEqual","concat","set","removeFromMap","itemToRemove","newItemsForId","compareByName","compareByText","text","guessTimezone","guess","moment","tz","findWindows","usePrevious","value","ref","React","EnableState","ConnectionType","OsType","OsState","ShutdownOnIdleMode","CreatedByType","ResourceIdentityType","LabState","CreateOption","SkuTier","RegistrationState","InvitationState","VirtualMachineState","VirtualMachineType","RecurrenceFrequency","WeekDay","UsageUnit","LabServicesSkuTier","ScaleType","RestrictionType","RestrictionReasonCode","Origin","ActionType","shortenNumber","num","intl","shortened","startsWith","numeral","format","formatNumber","maximumFractionDigits","e","trackTrace","OperationStatus","Succeeded","Canceled","Failed","isLatestOperation","lab","operation","includes","isLabUserSyncFailed","isLabUserSyncRunning","isLabUserSyncSucceeded","isLabUserSyncing","isSyncPending","getGroupId","getGroupName","getGroups","shouldFilterLabsByGroupId","isLoadingGroupName","isLoadingGroupList","ConnectedLms","CloudError","BaseResource","TrackedResourceUpdate","serializedName","className","modelProperties","tags","element","AutoShutdownProfile","shutdownOnDisconnect","allowedValues","shutdownWhenNotConnected","shutdownOnIdle","disconnectDelay","noConnectDelay","idleDelay","ConnectionProfile","webSshAccess","webRdpAccess","clientSshAccess","clientRdpAccess","ResourceOperationError","timestamp","code","message","action","SystemData","createdBy","createdByType","createdAt","lastModifiedBy","lastModifiedByType","lastModifiedAt","Identity","principalId","readOnly","tenantId","Resource","TrackedResource","required","LabPlan","systemData","defaultConnectionProfile","defaultAutoShutdownProfile","defaultNetworkProfile","allowedRegions","sharedGalleryId","linkedLmsInstance","resourceOperationError","identity","LabPlanNetworkProfile","subnetId","SupportInfo","LabPlanUpdate","SaveImageBody","labVirtualMachineId","LabNetworkProfile","loadBalancerId","publicIpId","Lab","autoShutdownProfile","connectionProfile","virtualMachineProfile","securityProfile","rosterProfile","labPlanId","title","description","networkProfile","ImageReference","offer","publisher","sku","version","exactVersion","Sku","tier","family","capacity","VirtualMachineAdditionalCapabilities","installGpuDrivers","Credentials","username","password","VirtualMachineProfile","createOption","imageReference","osType","additionalCapabilities","usageQuota","useSharedPassword","adminUser","nonAdminUser","SecurityProfile","registrationCode","openAccess","RosterProfile","activeDirectoryGroupId","ltiContextId","lmsInstance","ltiClientId","ltiRosterEndpoint","LabUpdate","ProxyResource","User","additionalUsageQuota","displayName","registrationState","invitationState","invitationSent","totalUsage","UserUpdate","InviteBody","VirtualMachineConnectionProfile","privateIpAddress","sshInBrowserUrl","rdpInBrowserUrl","adminUsername","nonAdminUsername","VirtualMachine","claimedByUserId","vmType","ResetPasswordBody","Schedule","startAt","stopAt","recurrencePattern","timeZoneId","notes","RecurrencePattern","frequency","weekDays","interval","constraints","InclusiveMaximum","InclusiveMinimum","expirationDate","ScheduleUpdate","Image","enabledState","iconUrl","author","plan","termsStatus","availableRegions","osState","ImageUpdate","ErrorAdditionalInfo","ErrorDetail","target","details","additionalInfo","OperationResult","startTime","endTime","percentComplete","error","UsageName","localizedValue","skuInstances","Usage","currentValue","limit","unit","LabServicesSkuCapacity","default","minimum","maximum","scaleType","LabServicesSkuCapabilities","LabServicesSkuCost","meterId","quantity","extendedUnit","LabServicesSkuRestrictions","values","reasonCode","LabServicesSku","resourceType","capabilities","locations","costs","restrictions","OperationDisplay","provider","resource","Operation","isDataAction","display","origin","actionType","OperationListResult","nextLink","PagedLabPlans","PagedLabs","PagedUsers","PagedVirtualMachines","PagedSchedules","PagedImages","ListUsagesResult","PagedLabServicesSkus","acceptLanguage","parameterPath","mapper","defaultValue","apiVersion","isConstant","MaxLength","MinLength","Pattern","nextPageLink","skipEncoding","scheduleName","userName","virtualMachineName","Operations","client","prototype","list","options","callback","sendOperationRequest","listOperationSpec","listNext","listNextOperationSpec","path","queryParameters","headerParameters","responses","200","bodyMapper","serializer","baseUrl","urlParameters","LabPlans","listBySubscription","listBySubscriptionOperationSpec","listByResourceGroup","listByResourceGroupOperationSpec","labPlanName","getOperationSpec","createOrUpdate","body","beginCreateOrUpdate","then","lroPoller","pollUntilFinished","update","beginUpdate","deleteMethod","beginDeleteMethod","saveImage","beginSaveImage","sendLRORequest","beginCreateOrUpdateOperationSpec","beginUpdateOperationSpec","beginDeleteMethodOperationSpec","beginSaveImageOperationSpec","listBySubscriptionNext","listBySubscriptionNextOperationSpec","listByResourceGroupNext","listByResourceGroupNextOperationSpec","requestBody","201","202","204","Labs","publish","beginPublish","syncGroup","beginSyncGroup","beginPublishOperationSpec","beginSyncGroupOperationSpec","Users","listByLab","listByLabOperationSpec","invite","beginInvite","beginInviteOperationSpec","listByLabNext","listByLabNextOperationSpec","VirtualMachines","start","beginStart","stop","beginStop","reimage","beginReimage","redeploy","beginRedeploy","resetPassword","beginResetPassword","beginStartOperationSpec","beginStopOperationSpec","beginReimageOperationSpec","beginRedeployOperationSpec","beginResetPasswordOperationSpec","Schedules","createOrUpdateOperationSpec","updateOperationSpec","Images","listByLabPlan","listByLabPlanOperationSpec","imageName","listByLabPlanNext","listByLabPlanNextOperationSpec","OperationResults","operationResultId","Usages","listByLocation","listByLocationOperationSpec","listByLocationNext","listByLocationNextOperationSpec","Skus","_super","LabServicesClient","credentials","_this","call","operations","labPlans","labs","users","virtualMachines","schedules","images","operationResults","usages","skus","LabServicesClientContext","Error","userAgent","defaultUserAgent","longRunningOperationRetryTimeout","baseUri","requestContentType","Urls","OperationsResult","OperationsResultLabsApi","Subscriptions","Tenants","Permissions","SupportRequestForVmIssues","SupportRequest","CreateLabAccount","AddImages","ExportedImageLink","labPlanComputeGalleryId","DisabledSizesGeo","Privacy","TermsOfUse","PopupHelp","AllFeatureFlags","LinkLabPlan","ProfessorFeedback","StudentFeedback","LabPlanSettings","LabPlanRegions","TechnicalSupportRequest","ApiVersions","LtiClaims","LtiAdministratorRoles","Constants","DefaultDialogSmallWidth","DefaultDialogWidth","DefaultDialogWideWidth","DefaultFlyoutWidth","NoSubscriptionId","NoUsername","Enabled","Disabled","DefaultImageName","DefaultWindows10ImageName","DefaultQuota","DefaultCapacity","DefaultMaxCapacity","LargeTextFieldRows","MaxLabQuota","DefaultNoTemplateMinCapacity","MinAdditionalUserQuota","MaxAdditionalUserQuota","DefaultAdditionalUserQuota","DefaultTemplateName","TemplateTitleMaxLength","TemplateDescriptionMaxLength","WindowsPasswordLength","minLength","maxLength","LinuxPasswordLength","DefaultUserName","DefaultPollingDelayInterval","DefaultPollingInterval","FiveSecondInterval","TenSecondInterval","ThirtySecondInterval","OneMinuteInterval","Regions","SoutheastAsia","CentralUsEuap","EastUs2Euap","WestUs2","WestCentralUs","EastUs2","DevSubscriptionId","NavWidthExpanded","NavWidthCollapsed","DefaultCurrencyCode","ScheduledSyncTimeHour","ScheduledSyncTimeMinute","VCurrentRegistrationCodeLength","V2BastionFeature","isLmsCourseInstructor","isLmsCourseContentDeveloper","isLmsAdministrator","r","isLmsProfessor","shouldSignInAad","isLmsHost","isLmsStudent","getValidatedLtiToken","hash","nonce","params","stateParam","ltiTokenParam","decodeLtiTokenPayload","token","res","payload","decodedPayload","base64Payload","replace","padCount","count","atob","decodeBase64Url","JSON","parse","getLtiContextTitle","ltiContext","getLtiContextId","hasGrantedWebStorageAccess","getCurrentLmsInstance","getResourceGroupLabs","resourceGroupLabs","currentLabParentId","getCurrentLabParentId","key","getVNextLabAccessType","getVNextCurrentLabId","isVNextLabBlocked","endsWith","isVNextLabCreating","LabServicesModels","Creating","isLoadingVNextLabs","loadState","storeIsLoading","getCreateLabPermissionOnLabPlan","labStore","has","getVnextLabPermissionPropagating","getVNextLab","hasTemplateVM","currentLabId","getCurrentLabId","currentVNextLab","TemplateVM","shouldDisableCurrentLabUpdate","labProvisioningState","pendingProvisioningState","isTerminalState","getCurrentLabErrors","errors","isLoadingLabMetadata","labMetadataLoadState","getCurrentLabUpdateError","labUpdateError","getLabState","pendingLabState","isVNextLabScaling","isVNextLabDraft","Draft","getVNextLabGroupName","groupName","isLms","aadGroupName","getCurrentLab","courseTitle","isVNextLabLmsConnected","LabUpdateOperation","LabAccessType","getVCurrentLabs","getVCurrentLab","hasBlockedLabs","getLabs","findIndex","isLabBlocked","hasOldV1Labs","isOldV1Lab","isCurrentLabBlocked","isCurrentLabOldV1Lab","isVNextLab","isOldV1GpuLab","isCurrentLabWriteable","isWriteableLab","isCurrentLabMoving","isLabMoving","isCurrentLabReadOnly","isCurrentLabUserSyncing","Syncing","isVNextLabSyncing","isLabGroupSynced","vNextLab","aadGroupId","isLabConnectedLmsOrTeams","connectedLMS","labStoreIsLoadingOrUpdating","isCurrentLabParentLabAccount","storeIsUpdating","getLabAccessType","getFilteredLabs","resultLabs","sort","labAccessType","isLabParentLabAccount","isReadOnlyEnabled","isFeatureEnabled","shouldFilterByGroupId","doesVCurrentLabGroupIdMatch","doesVNextLabGroupIdMatch","roles","isLabAssistantRole","createdByObjectId","isVCurrentLabBlocked","createdDate","Date","vmSize","isV1GpuTemplate","doesCurrentLabExist","getLabNames","getLabStoreLoadState","isCreatingLab","getSelectableLabs","getLabUsageQuota","currentLab","duration","asHours","isLabUserRestricted","userAccessMode","LabUserAccessMode","Restricted","getLabCapacity","maxUsersInLab","getCurrentLabPlanId","getLabPlans","isLinkedLmsInstanceValid","labPlan","isValidLabPlan","getValidLabPlans","currentLmsInstance","getCurrentResourceGroupLabPlans","labParentId","getResourceGroupId","getLabPlan","getCurrentLabPlan","getLinkableLabPlans","getUpdateLmsErrors","MlCoreFamily","determineVNextLabSkuRemainingVms","coreUsage","currentLabCapacity","coresPerVm","remainingCores","Math","floor","CoreQuotaStatus","convertToRestModel","uiModel","restModel","isExempt","forEach","coreFamily","numberOfCores","getCoreLimits","determineVCurrentQuotaStatus","coreQuotaData","gpuLimit","standardLimit","gpuUsage","standardUsage","determineAdditionalVms","numUsersInLab","remainingVmsInLab","determineVCurrentRemainingVms","isGpu","safeGetRestrictions","safeGetUsages","determineVCurrentOrVNextLabRemainingVms","isVNext","getVNextPricingAndAvailabilityData","getCurrentLabSizeData","imageType","pricingAndAvailabilityData","Linux","linux","windows","sizes","Availability","PriceUnit","getVNextPrice","getVNextPriceLoadError","getVNextProcessedPrice","priceByRegion","processedPrice","Map","region","prices","skuFamilyPrice","price","skuName","CoreInfo","standard","CoreUsage","used","alloted","CreateLab","PublishLab","LocationPriceAndAvailabilityData","availability","currencyCode","SizePriceAndAvailabilityData","ordinal","memoryInGB","cores","discreteGpu","OSPriceAndAvailabilityData","VirtualMachinePriceAndAvailabilityData","quotaUsed","totalQuota","scheduleEndTime","lastStarted","lastStopped","lastPasswordReset","LabServicesPrice","PagedLabServicesPrices","CoreUsageOperations","LabOperations","getMetadata","getMetadataOperationSpec","getMetadata1","getMetadata1OperationSpec","labPlanPut","labPlanPutOperationSpec","labPlanPut1","labPlanPut1OperationSpec","publishOperationSpec","publish1","publish1OperationSpec","PriceAndAvailability","Register","global","globalOperationSpec","regional","regionalOperationSpec","regionalWithSubscription","regionalWithSubscriptionOperationSpec","UserSettings","VirtualMachineOperations","virtualMachineId","startOperationSpec","stopOperationSpec","reimageOperationSpec","redeployOperationSpec","resetPasswordOperationSpec","Prices","SubscriptionPrices","LabsApiClient","priceAndAvailability","register","userSettings","virtualMachine","subscriptionPrices","LabsApiClientContext","getLocalizedSkuFriendlyName","SkuFriendlyName","BasicSmall","formatMessage","skuMessages","basicSmall","StandardSmall","standardSmall","StandardMedium","standardMedium","StandardLarge","standardLarge","ComputeGpuSmall","computeGpuSmall","ComputeGpuMedium","computeGpuMedium","GraphicsGpuSmall","graphicsGpuSmall","GraphicsGpuMedium","graphicsGpuMedium","AltComputeGpuSmall","altComputeGpuSmall","AltComputeGpuMedium","altComputeGpuMedium","AltGraphicsGpuSmall","altGraphicsGpuSmall","AltGraphicsGpuMedium","altGraphicsGpuMedium","MemoryOptimizedSmall","memoryOptimizedSmall","MemoryOptimizedMedium","memoryOptimizedMedium","ClassicSkuFriendlyName","Small","classicSmall","Medium","classicMedium","MediumNestedVirtualization","classicMediumNestedVirtualization","Large","classicLarge","LargeNestedVirtualization","classicLargeNestedVirtualization","SmallGpuCompute","classicSmallGpuCompute","SmallGpuVisualization","classicSmallGpuVisualization","MediumGpuVisualization","classicMediumGpuVisualization","defineMessages","SkuConstants","SkuFamilyName","getSkuCostTargetUnit","isWindows","LabsApiModels","WindowsHourly","LinuxHourly","getSkuCapabilityValue","targetCapability","c","getSkuCapabilityAsNumber","targetValue","targetAsNumber","Number","isNaN","getSkuCapabilityIsGpu","convertSkuCapabilityToVmSzie","memoryGB","storageGB","storageType","sizeFullName","getSkuFriendlyName","isClassic","toUpperCase","getClassicSkuFriendlyName","familyName","trim","getLocalizedSkuDisplayName","localizedName","isClassicSku","getLocalizedLabSkuDisplayName","skuFriendlyName","friendlyName","skuFamilyName","getNumberOfRemainingVms","availableCores","getNumberOfAvailableCores","numberOfVms","usage","isLegacySku","skuFamily","getSubscriptions","subscriptionHasFeature","feature","currentLabParent","currentSubscription","features","x","getVNextSkuData","isPrivatePreview","isAllowedLargeDisks","isAllowedLargeDSv4","isAllowedStandard_NV4as_v4","isAllowedLegacySkus","hasSkuFeature","getVNextSkuLoadState","getCurrentLabSkuInfo","labSkuName","labLocation","oldSizeData","currency","skuData","targetPriceUnit","Windows","currentLabSkuPrice","vmSku","isCurrentVNextLabOldSku","isVNextFeatureEnabledOrLms","getCurrentResourceGroup","resourceGroups","getResourceGroups","isCurrentLabParentResourceGroup","isLabParentResourceGroup","isLoadingLabParents","resourceGroupLabsMap","keySeq","toList","index","resourceGroup","doesCurrentLabParentExist","shouldDisableNewLabCreation","quotaStatus","isRefreshingLabParentResources","hasRefreshLabParentResourcesError","labParentResourcesStore","labParentResourceErrors","hasRefreshedLabParentResources","Routes","Home","LoggedOut","Welcome","StudentView","LabList","encodeURI","VNextLabList","NewLab","NewVNextLab","VNextLab","Template","Dashboard","Settings","SignInReturn","TeamsConfig","TeamsStartMfa","TeamsCompleteMfa","LtiStartOidc","LtiReturnOidc","LabParentRoutes","VNextLabParentRoutes","LabRoutes","AllRoutes","MfaRoutes","RoutePathToRouteNameMap","AuthenticationState","IdentityErrorCode","graphScopes","armScopes","preAuthorizedScopes","labsApiScopes","LabsApiScope","getTenantId","getDisplayId","getLoginHint","getCurrentReturnUrl","isUserAuthenticated","doesSettingsExist","getUserSettings","getAuthenticationState","getLocation","getRoute","pathname","registrationRoute","matchPath","exact","strict","getSearch","getHash","getReturnUrl","returnUrlPath","returnUrlSearch","substring","getLabParentIdFromRoute","route","vNextLabParentMatch","labParentMatch","getLabIdFromRoute","isVNextLabId","labResource","parentId","labIdMatch","labMatch","getLabRoute","getRouteName","routeMatch","isRouteTeamsConfig","isMfaRouteMatch","mfaMatch","isExact","isMfaReturn","returnUrl","isMfaRouteOrRedirect","isLtiOidcRoute","isLtiReturnOidc","isRegisterRoute","registerRoute","isInitialized","isProfessorAppInitialized","initializationState","professorInitializationState","hasFatalError","studentInitializeState","labAppInitializeState","getFatalError","getFatalErrorCode","getResourceProperties","isVCurrent","getRequestedLocale","getHost","getLocale","getLanguage","getMarket","getTimezone","getIanaTimezone","windowsTimeZone","findOneIana","getReferrer","isDevMode","isTeamsHost","isTeamsMode","getFeatures","toArray","storeHasLoadError","isVNextFeatureEnabled","_state","isLmsMode","isTeamsOrLmsMode","isBastionFeatureEnabled","messages","PolicyEnforceAutoShutdown","PolicyAllowedVirtualMachineSKUs","PolicyRequireNonAdminUser","PolicyTemplateLabsNotAllowed","UnknownPolicyViolationError","FailureOperation","MlClientError","failureOperation","policyViolationDefinitionIds","AzurePolicyViolation","getAzurePolicyViolationErrorMessage","errorMessages","errorCount","OneDSChannel","_isInitialized","_analytics","ApplicationInsights","_propertiesPlugin","PropertiesPlugin","_collectorChannelPlugin","PostChannel","_qosPlugin","QosPlugin","telemetryInitializer","config","instrumentationKey","OneDS","InstrumentationKey","endpointUrl","CollectorEndpoint","extensions","channels","extensionConfig","qosPluginIdentifier","enableCorsCorrelation","disableAjaxTracking","disableFetchTracking","enableRequestHeaderTracking","enableResponseHeaderTracking","webAnalyticsConfiguration","autoCapture","scroll","pageView","onLoad","onUnload","click","resize","jsError","shareAuthStatus","autoPopulateParentIdAndParentName","propertyConfiguration","populateBrowserInfo","populateOperatingSystemInfo","enableApplicationInsightsTrace","dropIdentifiers","disableCookiesUsage","enableDebugExceptions","initialize","addTelemetryInitializer","uri","properties","trackPageView","trackEvent","responseCode","success","correlationContext","data","trackDependencyData","exception","severityLevel","trackException","traceProperties","toString","SeverityLevel","Verbose","average","sampleCount","min","max","metricName","authenticatedUserId","accountId","_storeInCookie","setProperty","flush","ApplicationInisightsChannel","emitLineDelimitedJson","enableDebug","isBrowserLinkTrackingEnabled","disableExceptionTracking","isCookieUseDisabled","enableSessionStorageBuffer","isRetryDisabled","isStorageUseDisabled","isBeaconApiDisabled","enableAutoRouteTracking","distributedTracingMode","DistributedTracingModes","W3C","_appInsights","loadAppInsights","context","telemetryTrace","traceID","measurements","trackMetric","storeInCookie","setAuthenticatedUserContext","clearAuthenticatedUserContext","TelemetryType","consolePrefix","logToConsole","enableConsoleLog","disableConsoleLog","setStore","newStore","initializer","baseData","requestHeaders","scrubUri","getState","routeName","requestedLocale","market","language","timezone","host","referrer","groupId","stringify","err","console","telemetryChannels","telemetryType","getTelemetryChannelsFromType","TelemetryChannelsEnabled","handleAppInsightsException","func","addMetadata","truncateProp","truncate","props","truncatedProps","Object","keys","prop","Array","isArray","pop","channel","groupCollapsed","groupEnd","URLSearchParams","delete","trackDependency","scrubbedData","scrubData","mlError","init","TelemetryChannel","isPrivate","detector","BrowsingModeDetector","detectInPrivate","promise","Promise","resolve","_reject","do","browsingInIncognitoMode","browser","detect","browserName","ErrorCode","AuthenticationFailed","AuthorizationFailed","LabAccountAuthorizationFailed","LabAuthorizationFailed","EnvironmentSettingsHasNoResources","GenericError","InvalidPropertyLength","InvalidUploadTargetToOverride","LabFailed","MustBeGreaterThanProperty","NoSharedImageGalleriesAttachedToTheLabAccount","NotFound","OperationAlradyInProgress","ResourceDoesNotExist","ResourceIdNotFound","ResourceInDeletingState","ResourceIsNotInValidState","ResourceNotFound","ResourceGroupNotFound","ResourceNotInSucceededState","ResourceNotReady","ResourceInGroupDoesNotExist","SessionExpired","IdleSessionExpired","SubscriptionNotEnabled","TimeoutException","UnexpectedResourceId","LabCreationExceedsGpuCoresLimit","LabCreationExceedsStandardCoresLimit","PublishExceedsGpuCoresLimit","PublishExceedsStandardCoresLimit","LabCapacityUpdateExceedsGpuCoresLimit","LabCapacityUpdateExceedsStandardCoresLimit","PasswordNotValid","PeerVnetAddressRangeOutOfAddresses","VMAgentStatusCommunicationError","InvalidGrant","InvalidGrantPopupBlocked","PopupWindowBlocked","LtiTokenExpired","CookiesAndDataBlocked","LtiRequestStorageAccessNeeded","AllowedRegionsLimitExceeded","TotalRegionalCoreLimit","Arm64Incompatibility","InvalidDiskSize","InvalidImagePlanInfo","InvalidAdminUsername","LabBeingDeleted","ImageUnavailable","WebAccessVnetNotSupported","InvalidSubnet","SaveImageRegionMismatch","SaveImageAlreadyInProgress","DiskSizeLesserThanExisting","SubnetIsFull","StorageType","deriveStorageType","setItem","shouldThrowError","sessionStorage","localStorage","DOMException","errorName","getItem","Storage","getStorageType","removeItem","clear","defaultLocale","defaultMessages","enUS","localizedMessages","initLocaleData","csCZ","deDE","esES","frFR","huHU","idID","itIT","jaJP","koKR","nlNL","plPL","ptPT","ptBR","ruRU","svSE","trTR","zhCN","zhTW","getAcceptLanguage","lang","getLocaleLanguage","resolveSearchLocale","queryParams","navigator","getLocaleData","tokens","getLocaleMarket","uuid","btoa","oidcAuth","oidcUrl","ltiAuthUrl","URLBuilder","setHost","setQueryParameter","assign","getNonce","setLtiToken","getLtiToken","setLtiItems","document","hasStorageAccess","requestStorageAccess","accessToken","ltiToken","headers","Headers","append","LabsApiUrl","relativeUrl","fetch","method","response","json","errorResponse","RestError","Message","Code","statusText","authRedirectError","LtiProvider","linkLms","isEdgeBrowser","authorityBase","AadAuthority","crossTenantAuthority","configuration","auth","clientId","AadAppClientId","authority","validateAuthority","navigateToLoginRequestUrl","redirectUri","postLogoutRedirectUri","cache","cacheLocation","storeAuthStateInCookie","UserAgentApplication","handleRedirectCallback","authError","_response","wasLoginRequiredAttempt","hasLoginRequiredAttemptState","clearLoginRequiredAttemptState","resolveErrorCode","errorCode","clearUserSession","clearCache","account","ltiState","getLtiState","ltiNonce","getLtiNonce","clearCacheForScope","setReturnUrl","setLoginRequiredAttemptState","getRedirectAuthError","errorMessage","loginSilent","getAccount","isAuthenticated","idTokenClaims","loginRedirect","loginHint","showPrompt","request","scopes","prompt","loginPopup","result","logOut","logout","getAccessToken","shouldOpenPopupWindow","correlationId","getTime","acquireTokenSilent","isRedirecting","fromCache","acquireTokenRedirect","acquireTokenPopup","isMsalIframe","isMsalPopup","opener","search","base64Encode","input","Base64","encode","base64Decode","decode","CryptoUtils","WindowUtils","isInPopup","saveMetadataFromNetwork","authorityInstance","telemetryManager","resolveEndpointsAsync","metadata","AuthorizationEndpoint","CanonicalAuthority","EndSessionEndpoint","Issuer","AuthorityFactory","metadataMap","tenantDiscoveryResponse","ErrorBoundary","_info","setUnhandledError","hasError","children","CommonActionType","INITIALIZE","INITIALIZE_CANCELLED","INITIALIZE_SUCCESS","INITIALIZE_ERROR","PROFESSOR_INITIALIZE","PROFESSOR_INITIALIZE_CANCELLED","PROFESSOR_INITIALIZE_SUCCESS","PROFESSOR_INITIALIZE_ERROR","STUDENT_INITIALIZE","STUDENT_INITIALIZE_CANCELLED","STUDENT_INITIALIZE_SUCCESS","STUDENT_INITIALIZE_ERROR","LAB_APP_INITIALIZE","LAB_APP_INITIALIZE_CANCELLED","LAB_APP_INITIALIZE_SUCCESS","LAB_APP_INITIALIZE_ERROR","SET_HOST","SET_LOCALE","SET_TIMEZONE","SET_THEME","SET_REFERRER","FATAL_ERROR","PROCESS_URL_FEATURES","PROCESS_URL_FEATURES_SUCCESS","PROCESS_URL_FEATURES_ERROR","ENABLE_FEATURE","DISABLE_FEATURE","CLEAR_FATAL_ERROR","IDLE_TIMEOUT","PROCESS_QUERY_PARAMS","CLEAR_USER_SESSION","ENABLE_FEATURE_SUCCESS","ENABLE_FEATURE_ERROR","SELECT_TENANT","fatalError","clearFatalError","shouldSignInInteractively","initializeCancelled","initializeSuccess","initializeError","professorInitialize","professorInitializeCancelled","professorInitializeSuccess","professorInitializeError","studentInitialize","studentInitializeCancelled","studentInitializeSuccess","studentInitializeError","labAppInitialize","labAppInitializeCancelled","labAppInitializeSuccess","labAppInitializeError","setLocale","setTimezone","setTheme","theme","setReferrer","processUrlFeatures","processUrlFeaturesSuccess","processUrlFeaturesError","enableFeature","enableFeatureSuccess","enableFeatureError","disableFeature","idleTimeout","processQueryParams","selectTenant","isRedirect","ErrorBoundaryContainerInjected","bind","mapDispatchToProps","ErrorBoundaryContainer","connect","commandBarSeparatorStyles","backgroundColor","width","height","margin","DefaultCustomTheme","secondaryBackgroundColor","pageTitleStyle","fontSize","lineHeight","fontWeight","color","accessDropdownStyle","smallPageTitleStyle","panelStyles","main","marginTop","borderColor","header","scrollableContent","flexDirection","flexWrap","flexShrink","flexGrow","overflowY","content","paddingTop","footer","borderTop","footerInner","paddingLeft","primaryCommandButtonStyles","root","padding","border","rootHovered","rootPressed","iconPressed","label","whiteSpace","primaryCommandBarStyles","borderBottom","secondaryCommandBarStyles","button","filterBarStyles","marginLeft","marginRight","usageProgressTrackStyles","active","dayPickerButtonStyles","minWidth","maxWidth","minHeight","maxHeight","borderRadius","rootChecked","rootCheckedHovered","shimmeredUserListStyles","backgroundImage","messageBarStyles","pageHeaderStyles","pageHeaderButtonStyles","icon","iconHovered","rootExpanded","TeamsCustomTheme","merge","transitionBackgroundColor","primaryBackgroundColor","primarySet","secondarySet","detailsHeaderStyles","detailsRowStyles","normal","labListCommandBarStyles","LmsBasicsCustomTheme","NeutralColors","gray20","gray30","gray40","CanvasCustomTheme","currentTheme","loadCustomTheme","fluentTheme","getTheme","getCustomTheme","FullPageMessage","image","messageDetails","buttonText","buttonLinkPath","imageSize","styles","buttonOnClick","messageDetailsMaxWidth","stackStyles","Stack","verticalAlign","horizontalAlign","childrenGap","grow","verticalFill","Item","Icon","iconName","selectors","svg","to","PrimaryButton","onClick","commonMessages","signInButtonText","numberOne","numberTwo","numberThree","loadingText","copy","copied","done","cancel","edit","change","schedule","close","continue","ok","yes","no","saving","save","add","send","discard","reset","setContact","none","azure","export","labServices","azureLabServices","filterByName","selectedFormat","clearSelectionCommand","closeFilterCommand","clearFilters","allFilter","nameColumnHeader","usageColumnHeader","usageDisclaimer","vmUsageColumnProgressFormat","vmUsageColumnUsageFormat","usageProgressColumnHeader","creatingState","deletingState","stoppedState","startingState","runningState","stoppingState","failedState","unknownState","resettingPasswordState","reimagingState","redeployingState","sortedAtoZ","sortedZtoA","sortedSmallerToLarger","sortedLargerToSmaller","toggleSelection","toggleAllSelection","genericErrorMessage","creating","starting","deleting","stopping","resettingPassword","settingPassword","vmDownloadRdpFileTitle","vmSshConnectTitle","vmSshBrowserConnectTitle","vmRdpConnectTitle","vmRdpBrowserConnectTitle","apply","help","previous","next","coreUsageExceedsErrorBannerMessage","exportToCsv","myVirtualMachines","showRdpInfoTitle","covidWarning","covidPublishWarning","oldV1GpuLabsGenericWarning","oldV1GpuLabWarning","permissionPropagationText","moreActionsMenu","incrementAriaLabel","decrementAriaLabel","stepGetAnAzureSubscription","stepAddLabAccount","stepAddLabPlan","sync","lastUserListGroupSyncTime","searchLabAccountText","signOutButtonText","retry","troubleshoot","grantAccess","standardSSD","premiumSSD","privacyLink","termsOfUseLink","lmsLabPlanSettings","feedback","ErrorViewInjected","hasMultipleTenants","isLmsHosted","hasWebStorageAccessGranted","imageHeight","popupBlockedMessage","defaultMessage","clearError","signIn","requestUserConsent","Link","chunks","href","ltiRequestWebStorageAccess","ErrorView","injectIntl","IdentityActionType","SIGN_IN","SIGN_IN_SUCCESS","SIGN_IN_REDIRECTING","SIGN_IN_FAILED","SIGN_IN_ERROR","SIGN_OUT","SIGN_OUT_ERROR","RESOLVE_SIGN_IN_RETURN_URL","LOAD_USER_PHOTO","LOAD_USER_PHOTO_SUCCESS","LOAD_USER_PHOTO_FAILED","LOAD_USER_PHOTO_ERROR","LOAD_USER_SETTINGS","LOAD_USER_SETTINGS_SUCCESS","LOAD_USER_SETTINGS_ERROR","UPDATE_USER_SETTINGS","UPDATE_USER_SETTINGS_SUCCESS","UPDATE_USER_SETTINGS_ERROR","UPDATE_USER_SETTINGS_EXISTS","UPDATE_USER_SETTINGS_CANCELLED","GET_ACCESS_TOKEN","GET_ACCESS_TOKEN_SUCCESS","GET_ACCESS_TOKEN_REDIRECTING","GET_ACCESS_TOKEN_FAILED","GET_ACCESS_TOKEN_ERROR","SET_TENANT_ID","SET_LOGIN_HINT","REQUEST_USER_CONSENT","REQUEST_USER_CONSENT_SUCCESS","REQUEST_USER_CONSENT_FAILED","REQUEST_USER_CONSENT_ERROR","SIGN_IN_POPPING_UP","LMS_COMPLETE_SIGN_OUT","defaultSettings","lastUsedParentResource","dismissedLabListFirstRun","showRetirementAlert","disableHints","hasDismissedCovidBanner","hasDismissedOldV1GpuLabBanner","isInteractive","persistUrl","signInSuccess","signInRedirecting","signInPoppingUp","signInFailed","signInError","signOut","signOutError","lmsCompleteSignOut","resolveSignInReturnUrl","loadUserPhoto","loadUserPhotoSuccess","imageUrl","loadUserPhotoFailed","loadUserPhotoError","loadUserSettings","canRedirect","loadUserSettingsSuccess","loadUserSettingsError","cachedSettings","updateUserSettings","toggleDisableHints","dismissLabListFirstRun","dismissRetirementAlert","resetShowRetirementAlert","dismissCovidBanner","resetUserSettings","updateUserSettingsSuccess","updateUserSettingsError","updateUserSettingsExists","updateUserSettingsCancelled","getArmAccessToken","reject","isErrorTerminal","getGraphAccessToken","getLabsApiAccessToken","getAccessTokenSuccess","getAccessTokenRedirecting","getAccessTokenFailed","getAccessTokenError","setTenantId","setLoginHint","requestUserConsentSuccess","requestUserConsentFailed","requestUserConsentError","pageTitleWithSubtitle","PageTitleInjected","subtitle","titleMessage","Helmet","PageTitle","CommonLabParentResourceActionType","SELECT_LAB_PARENT_RESOURCE","CLEAR_SELECTED_LAB_PARENT_RESOURCE","LabParentResourceActionType","LIST_LAB_PARENT_RESOURCES","LIST_LAB_PARENT_RESOURCES_SUCCESS","LIST_LAB_PARENT_RESOURCES_ERROR","REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES","REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_SUCCESS","REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_ERROR","CommonLabActionType","SELECT_LAB","CREATE_LAB_SUCCESS","UPDATE_LAB_SUCCESS","CLEAR_SELECTED_LAB","PUBLISH_LAB","LabActionType","LIST_LABS","LIST_LABS_SUCCESS","LIST_LABS_ERROR","LIST_LABS_CANCELLED","GET_LAB","GET_LAB_SUCCESS","GET_LAB_CANCELLED","GET_LAB_ERROR","FILTER_BY_LAB_ACCESS_TYPE","DELETE_LAB","DELETE_LAB_SUCCESS","DELETE_LAB_ERROR","CHECK_VNEXT_CREATELAB_PERMISSION","UPDATE_VNEXT_CREATELAB_PERMISSION","UPDATE_VNEXT_PERMISSION_PROPAGATION","ADD_VNEXT_PERMISSION_PROPAGATING_LAB","REMOVE_VNEXT_PERMISSION_PROPAGATING_LAB","CREATE_LAB","CREATE_LAB_ERROR","UPDATE_LAB","UPDATE_LAB_ERROR","UPDATE_LAB_ACCESS_MODE","UPDATE_LAB_ACCESS_MODE_SUCCESS","UPDATE_LAB_ACCESS_MODE_ERROR","CLEAR_LAB_ERROR","CLEAR_LAB_UPDATE_ERROR","CLEAR_LAB_CAPACITY_EXCEEDS_CORES_ERROR","CLEAR_PUBLISH_LAB_ERROR","POLL_LAB_START","POLL_LAB_STOP","POLL_LAB_CANCELLED","SYNC_LAB_USERS","SYNC_LAB_USERS_ERROR","POLL_LAB_LIST_START","POLL_LAB_LIST_STOP","POLL_LAB_LIST_CANCELLED","LOAD_SUBSCRIPTION_VNEXT_LABS_ERROR","PUBLISH_LAB_ACCEPTED","PUBLISH_LAB_ERROR","PUBLISH_LAB_CANCELLED","UPDATE_LAB_METADATA","UPDATE_LAB_METADATA_SUCCESS","UPDATE_LAB_METADATA_ERROR","GET_LAB_METADATA","GET_LAB_METADATA_SUCCESS","GET_LAB_METADATA_ERROR","Context","selectLab","filterByLabAccessType","listLabs","filterWriteAccess","listLabsSuccess","listVNextLabsSuccess","listLabsError","listLabsCancelled","getLab","includeRoles","includeMetadata","getLabCancelled","getLabSuccess","getVNextLabSuccess","getLabError","deleteLab","deleteLabSuccess","deleteLabError","createLab","getCompleteRoute","checkVnextCreatelabPermission","updateVnextCreatelabPermission","createLabPermissionOnLabPlan","updateVnextPermissionPropagation","vNextLabPermissionPropagating","addVnextPermissionPropagatingLab","removeVnextPermissionPropagatingLab","createVNextLab","createLabSuccess","createVNextLabSuccess","createLabError","updateLab","updateOperation","updateLabSuccess","updateLabError","updateLabAccessMode","updateVNextLabAccessMode","updateLabAccessModeSuccess","updateLabAccessModeError","clearLabsError","errorIndex","clearPublishLabError","clearLabUpdateError","clearLabCapacityExceedsCoresError","pollLabStart","intervalMs","initialDelayMs","pollLabUntilTerminalStateStart","shouldStopWhenTerminalState","pollLabStop","pollLabCancelled","syncLabUsers","syncLabUsersError","syncUsersError","pollLabListStart","pollLabListCancelled","pollLabListStop","loadSubscriptionVNextLabsError","subscription","updateVNextLab","labUpdate","updateVNextLabSuccess","clearSelectedLab","publishVNextLab","shouldUpdateCapacity","publishVNextLabError","getLabMetadata","getLabMetadataSuccess","labMetadata","getLabMetadataError","featureMenu","FeatureMenu","allFeatures","enabledFeatures","CommandButton","ariaLabel","selectedKeys","Dropdown","caretDown","dropdownWidth","multiSelect","onChange","option","onRenderList","renderProps","defaultRender","DefaultButton","onRenderTitle","onRenderPlaceholder","HomeButton","navigateHome","isLmsIntegrationEnabled","azureSpan","buttonStyles","flexContainer","flex","justifyContent","LoadingItem","useIntl","Spinner","labelPosition","SpinnerSize","medium","alignItems","DropdownItem","onRenderItem","role","PageHeaderFilteredDropdownExpanded","placeholder","menuListProps","style","SearchBox","onRenderFooter","paddingBottom","PageHeaderFilteredDropdown","_updateFilter","setState","items","filterPlaceholder","filterAriaLabel","selected","isLoading","minExpandedWidth","onRenderSelected","onFilterItems","onRenderNoResults","filteredItems","menuItems","onRender","menuItem","dismissMenu","selectedItem","ariaDescription","menuIconProps","menuProps","onMenuDismissed","onRenderMenuList","noLabAccountsInFilterText","Selected","horizontal","Placeholder","NoResults","convertItemToOption","mapItemsToOptions","toJS","getItemFromOption","LabParentPicker","isTeamsOrLmsIntegrationEnabled","labParentItems","selectedOption","filterDropdownOptions","searchLabsText","noLabsFoundFilterText","getDisplayName","Footer","onNewLab","isNewLabCreationDisabled","TooltipHost","ActionButton","disabled","palette","themePrimary","convertLabToOption","mapLabsToOptions","isVNextLabs","getLabFromOption","LabPicker","lowerCaseFilter","filterLabs","newLab","Linkify","_componentDecorator","_key","rel","toASCII","componentDecorator","labDropDownLabel","labAccountSupportCardTitle","needHelpCardTitle","aboutServicesCardTitle","labSupportCardTitle","documentCardStyle","marginBottom","boxShadow","documentCardTitleStyle","stackItemStyle","overflowWrap","SupportSection","isLabAccount","DocumentCard","aria-label","DocumentCardTitle","phoneNumber","NeedHelpSection","NewsAndUpdateSection","PrivacyAndTerms","isGermanLocale","isItalianLocale","HelpFlyout","sections","defaultSection","onDismiss","isStudentVmList","msg","showDropdown","selectedSection","setSelectedSection","currentSection","Panel","PanelType","custom","customWidth","isOpen","isLightDismiss","headerText","closeButtonAriaLabel","selectedKey","userMenu","UserMenu","isAuthenticating","initials","displayId","showNameTitle","setShowNameTitle","showDisplayIdTitle","setShowDisplayIdTitle","divNameRef","node","scrollWidth","offsetWidth","divDisplayIdRef","textContainer","contactCardItem","activityDescription","activityPersonas","imageInitials","coinSize","ActivityItem","activityPersona","calloutProps","minPagePadding","PersonaCoin","PersonaSize","size32","coin","EnvironmentState","VmState","OperatingSystem","VmAssignmentType","getConnectionTypes","isLinuxRdpEnabled","connectionTypes","getVNextConnectionTypes","getConnectionContextMenuItems","canConnect","onConnect","isTeamsIntegrationEnabled","connectionTypeMap","vmConnectSshTitle","vmConnectSshBrowserTitle","vmConnectRdpTitle","vmConnectRdpBrowserTitle","getConnectionTypeStringMap","ToggleToolTip","toolTipHostId","getId","Toggle","aria-describedby","startTooltip","stopTooltip","VmPowerState","vmState","forceDisable","onStart","onStop","stateText","showToggle","showSpinner","isDisabled","inlineLabel","checked","xSmall","small","OperationType","getOperationTypeFromAction","mapResourceErrorToOperation","resourceError","operationType","toDateString","pageTitle","operationResultGenericSuccess","SubmitSupportRequest","StartOperation","StopOperation","ReimageOperation","RedeployOperation","VmOperationError","vmOperationType","redDark","VmAgentError","TroubleshootingGuide","VmHeartbeatError","yellowDark","VmOperationSuccess","green","vmConnectAria","vmResetPasswordTitle","vmQuotaProgressMessage","moreVmActionsAria","vmScheduleInProgressTooltip","vmUnavailableMessage","VmScheduleAndPasswordResetStatus","isResettingPassword","resettingPasswordMessage","settingPasswordMessage","alignContent","isScheduleRunning","isScheduleOnly","hasUnlimitedQuota","VmQuotaProgress","hoursUsed","quotaHours","ProgressIndicator","barHeight","itemProgress","progressBar","background","progressTrack","StudentVmCard","isBastionEnabled","isVCurrentVM","isRdpConnectionInTeams","connectAction","iconProps","buttonType","ButtonType","isSubMenu","moreActions","vmOperation","vmOperationError","isRunning","canResetPassword","onResetPassword","canRedeploy","onShowTroubleshootDialog","onReimage","canReimage","onShowRdpInfo","DocumentCardType","isMoving","isUnavailable","overflow","textOverflow","paddingRight","DocumentCardLogo","logoIcon","shouldTruncate","showAsSecondaryTitle","MessageBar","messageBarType","MessageBarType","dismissButtonAriaLabel","redeploying","reimaging","VmListMessages","directionalHint","DirectionalHint","topLeftEdge","hidden","calloutMaxWidth","canStart","canStop","DocumentCardActions","actions","studentVmListAnnouncedInfomation","StudentVmListAnnounced","vms","announced","setAnnounced","previousVms","updatedVms","vm","vmIndex","announcedItems","Announced","aria-live","ErrorMessage","ErrorMapMessageBars","dismissError","messageBarCloseAria","environmentId","ErrorBanners","listEnvironmentsError","vCurrentStartErrors","vCurrentStopErrors","vCurrentResetPasswordErrors","vNextResetPasswordErrors","vNextStopErrors","vNextStartErrors","redeployErrors","reimageErrors","dismissListEnvironmentsError","dismissStartEnvironmentError","dismissStopEnvironmentError","dismissResetEnvironmentPasswordError","dismissReimageError","dismissRedeployError","ListErrorBanner","isPartial","warning","virtualMachinesPageHeader","OperationResultStatus","objectKeySorter","isSortDescending","stateToLabelMap","aValue","bValue","aLong","ip","toLong","bLong","numberSorter","numberComparer","isString","stringSorter","stringComparer","isNumber","mustResetPasswordBeforeConnect","studentVmList","environments","studentVms","environment","pendingVmState","runningInSchedule","passwordLastReset","vmUsername","vmRdpAuthority","rdpBrowserUrl","vmRdpBrowserUrl","vmSshAuthority","sshBrowserUrl","vmSshBrowserUrl","os","isVmMoving","isStarting","isStopping","isStopped","isCreating","studentVNextVmList","operationsArr","originalState","Deleting","virutalMachineState","Moving","ResettingPassword","Reimaging","Redeploying","Stopped","Updating","convertLabsApiVirtualMachineStateToVmState","isReimaging","isRedeploying","quotaNotExceeded","op","getStudentVmListViewModel","shouldHideUserMenu","registerStore","userEnvironmentStore","sorter","supportSections","vNextRegisterStore","vNextUserVirtualMachineStore","vNextVirtualMachines","vNextListEnvironmentsError","vNextVms","vNextRegistrationState","vNextStoreIsLoading","isVNextFeaureEnabled","getStudentVmListContainerModel","studentVmListViewModel","teamsStudentNoVmsHeading","PanelViewContent","textAlign","NoVmsMessage","isPanelView","createLabLink","registrationLinkExample","wrap","link","dialogTitle","dialogMessage","StopVmDialog","onSubmit","subText","confirmText","cancelText","Dialog","dialogContentProps","DialogType","DialogFooter","autoFocus","getSshConnectData","sshParts","port","getSshCommand","invalidFilenameChars","getRdpConnectData","fileContent","safeTitle","fileName","CopyToClipboardButton","updateCopied","onCopy","RdpInfoDialog","TextField","rdpInfo","multiline","resizable","autoAdjustHeight","connectDialogTitle","connectDialogMessage","inputLabel","ConnectToVmDialog","sshCommand","onDismissed","doneText","modalProps","containerClassName","LoadingContainer","large","lowercaseReservedPasswords","lowerCaseTest","RegExp","upperCaseTest","numericTest","specialCharsTest","defaultIconStyles","cursor","InfoTip","iconStyles","aria-hidden","tabIndex","iconTabIndex","passwordShowHideAriaLabel","passwordFieldLabel","passwordRequiredError","passwordRestrictedError","passwordLengthInvalidError","passwordComplexityInvalidError","getPasswordValidationErrorMessage","lowerCasePassword","LowerCaseReservedPasswords","isPasswordReserved","trimmedPassword","isPasswordLengthIncorrect","requiredComplexity","complexity","test","isPasswordComplex","PasswordField","resolvedProps","canRevealPassword","revealPasswordAriaLabel","suffix","revealButton","calloutContent","infoTipEnabled","customLabel","onGetErrorMessage","isValid","onValidationChange","passwordLabel","gapSpace","rightTopEdge","aria-required","setPasswordDialogTitleAndButtonText","setPasswordDialogContent","resetPasswordDialogContent","ResetPasswordDialog","updatePassword","isValidPassword","updateIsValidPassword","canShowNonLocalizedMessages","isResetting","resetPasswordDialogTitleAndButtonText","cancelButtonLabel","dismiss","Label","htmlFor","Text","_event","newValue","validateOnLoad","createAndDownloadFile","forceUtf8","isAscii","match","blob","Blob","msSaveOrOpenBlob","readBlob","fileData","downloadLink","createElement","setAttribute","visibility","appendChild","removeChild","reader","FileReader","onload","onerror","event","readAsDataURL","studentVMTitle","ResetVmsDialog","numberOfMachines","isStudentVM","cantBeUndoneSpan","troubleshootDialogButtonText","troubleshootDialogContent","TroubleshootDialog","onRedeploy","showCloseButton","StudentVmList","showResetPasswordDialog","resetPasswordDialogVM","showRdpInfoDialog","rdpInfoDialogVm","showConnectDialog","connectDialogSshCommand","showStopVMDialog","stopDialogVM","showReimageDialog","reimageDialogVM","showTroubleshootDialog","troubleshootDialogVm","_renderVm","_renderErrorBanners","_vmStartClicked","_vmStopClicked","_vmStopConfirmedClicked","_vmConnectClicked","_setRdpConnectData","_setSshConnectData","_rdpInBrowser","_sshInBrowser","_setConnectData","_resetPasswordClicked","_showRdpInfoClicked","_changePasswordClicked","_dismissResetPasswordDialog","_dismissRdpInfoDialog","_dismissedResetPasswordDialog","_dismissConnectDialog","_dismissedConnectDialog","_dismissStopDialog","_vmReimageClicked","_vmRedeployClicked","_dismissReimageDialog","_reimageSubmitted","_showTroubleshootDialogClicked","_dismissTroubleshootDialog","_renderListErrorBanner","sortedVms","mustSetPassword","onRenderCell","getItemCountForPage","onClearListError","onClearStartError","onClearStopError","onClearResetPasswordError","onClearRedeployError","onClearReimageError","open","onPasswordReset","RegistrationErrorCode","RegisterActionType","REGISTER_USER","REGISTER_USER_SUCCESS","REGISTER_USER_FAILED","CLEAR_REGISTER_ERRORS","CLEAR_REGISTER_STATE","registerUser","registerUserSuccess","registerUserFailed","UserEnvironmentActionType","POLL_LIST_GLOBAL_USER_ENVIRONMENTS_START","POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP","POLL_LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED","LIST_GLOBAL_USER_ENVIRONMENTS","LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED","LIST_GLOBAL_USER_ENVIRONMENTS_SUCCESS","LIST_GLOBAL_USER_ENVIRONMENTS_ERROR","CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR","START_GLOBAL_USER_ENVIRONMENT","START_GLOBAL_USER_ENVIRONMENT_FAILED","START_GLOBAL_USER_ENVIRONMENT_ACCEPTED","CLEAR_START_USER_ENVIRONMENT_ERROR","STOP_GLOBAL_USER_ENVIRONMENT","STOP_GLOBAL_USER_ENVIRONMENT_FAILED","STOP_GLOBAL_USER_ENVIRONMENT_ACCEPTED","CLEAR_STOP_USER_ENVIRONMENT_ERROR","RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD","RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED","CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR","CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS","REIMAGE_USER_VIRTUAL_MACHINE","REIMAGE_USER_VIRTUAL_MACHINE_ERROR","REIMAGE_USER_VIRTUAL_MACHINE_ACCEPTED","REDEPLOY_USER_VIRTUAL_MACHINE","REDEPLOY_USER_VIRTUAL_MACHINE_ERROR","REDEPLOY_USER_VIRTUAL_MACHINE_ACCEPTED","CLEAR_REIMAGE_USER_VIRTUAL_MACHINE_ERROR","CLEAR_REDEPLOY_USER_VIRTUAL_MACHINE_ERROR","LIST_VNEXT_USER_VIRTUAL_MACHINES","LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS","LIST_VNEXT_USER_VIRTUAL_MACHINES_FAILURE","LIST_VCURRENT_USER_VIRTUAL_MACHINES","LIST_VCURRENT_USER_VIRTUAL_MACHINES_FAILURE","LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS","pollListUserEnvironmentsStart","pollListUserEnvironmentsStop","pollListUserEnvironmentsCancelled","listUserEnvironments","listUserEnvironmentsCancelled","listUserEnvironmentsSuccess","listUserEnvironmentsError","clearListUserEnvironmentError","startEnvironment","startUserEnvironmentFailed","startUserEnvironmentAccepted","operationIds","stopUserEnvironmentAccepted","redeployUserEnvironmentAccepted","reimageUserEnvironmentAccepted","clearStartUserEnvironmentError","stopEnvironment","stopUserEnvironmentFailed","clearStopUserEnvironmentError","resetEnvironmentPassword","resetUserEnvironmentPasswordFailed","clearResetUserEnvironmentPasswordError","reimageUserVirtualMachine","reimageUserVirtualMachineError","redeployUserVirtualMachine","redeployUserVirtualMachineError","clearReimageUserVirtualMachineError","clearRedeployUserVirtualMachineError","listAllUserVirtualMachinesSuccess","listVNextUserVirtualMachines","listVNextUserVirtualMachinesSuccess","listVNextUserVirtualMachinesFailure","listVCurrentUserVirtualMachines","listVCurrentUserVirtualMachinesFailures","determinePollingInitialDelay","isTemplateVM","vmDetails","determinePollingIntervalLength","StudentVmListContainerInjected","_setPollingInterval","initialPollingIntervalMs","_pollingIntervalMs","nextPollingIntervalMs","isScrollable","hideHeader","headerProps","hideLabParentPicker","hideLabPicker","useCurrentPathForHome","hideVmListButton","hideUserMenu","hideFeedback","pollingIntervalMs","shouldListAllVMs","StudentVmListContainer","VmListFlyout","PageHeaderDropdownExpanded","PageHeaderDropdown","tenant","TenantPickerPlaceholder","isSelected","align","gray130","defaultDomain","convertTenantToOption","getTenantFromOption","tenants","TenantPicker","mapTenantsToOptions","bottomRightEdge","SubmitButton","isSubmitting","providedSpinnerStyles","spinnerStyles","providedStyles","mergedProps","getTenants","stateToLabelMaps","objectKeyComparer","objectMultiKeySorter","getCurrentSupportInfo","currentLabAccount","currentSupportInfo","convertResourceGroupToItem","resourceGroupId","convertLabAccountToItem","mapLabParentResourcesToItems","accounts","mapLabAccountsToItems","mapResourceGroupsToItems","getPageHeaderContainerModel","commonStore","identityStore","labPlanStore","identityState","nameParts","idParts","secondPart","getInitials","selectedTenantId","labAccounts","isLoadingLabParentResources","labPath","labLoadState","isLoadingLabs","tenantLoadingState","isLoadingTenants","fatalErrorCode","featureStore","isDevModeEnabled","currentResourceGroup","currentLabParentItem","shouldLoginWithPopupWindow","isLtiStartOidcRoute","isLmsAdmin","labPlanLoadState","isLoadingLabPlans","isUpdatingLms","getOptions","linkedLabPlans","check","uncheck","Checkbox","contains","mapLabPlanToCheckbox","getLinkedLabPlans","toSet","getUnlinkedLabPlans","getAllIds","getLabPlansToLink","linkIds","lp","getLabPlansToUnlink","unlinkedIds","LmsLabPlanSettingsFlyout","selectLabParentItem","Set","setLinkedLabPlans","unlinkedLabPlans","setUnlinkedLabPlans","previousIsSubmitting","labPlansToLink","labPlansToUnlink","shouldDisable","remove","allIds","checkAll","uncheckAll","isEmpty","onRenderFooterContent","SharedColors","red20","numberOfSelectedLabPlans","Separator","PageHeader","homeButtonProps","labParentPickerProps","labPickerProps","userMenuProps","featureMenuProps","tenantPickerProps","helpFlyoutPropsForSupportSection","isVmListEnabled","lmsLabPlanSettingsFlyoutProps","showFeedbackButton","feedbackSurvey","showHelpFlyout","setShowHelpFlyout","showVmListFlyout","setShowVmListFlyout","showLmsLabPlanSettingsFlyout","setShowLmsLabPlanSettingsFlyout","rootExpandedStyle","getPageHeaderRootExpandedColor","rootExpandedBackgroundColor","rootExpandedColor","homeStyles","pickerStyles","itemType","ContextualMenuItemType","Divider","farItems","iconOnly","CommandBar","overflowButtonProps","TeamsPageHeader","selectLabParentResource","clearSelectedLabParentResource","listLabParentResources","selectFirst","selectFirstIfSelectedNotFound","listLabParentResourcesSuccess","listLabParentResourcesError","refreshSubscriptionsAndLabParentResources","refreshSubscriptionsAndLabParentResourcesSuccess","refreshSubscriptionsAndLabParentResourcesError","getLabListRoute","CommonLabPlanActionType","SELECT_LAB_PLAN","LabPlanActionType","LIST_LAB_PLANS","LIST_LAB_PLANS_SUCCESS","LIST_LAB_PLANS_ERROR","LOAD_SUBSCRIPTION_LAB_PLANS_ERROR","GET_LAB_PLAN","GET_LAB_PLAN_SUCCESS","GET_LAB_PLAN_ERROR","UPDATE_LAB_PLANS_LMS_SETTINGS","UPDATE_LAB_PLANS_LMS_SETTINGS_SUCCESS","UPDATE_LAB_PLANS_LMS_SETTINGS_ERROR","CLEAR_UPDATE_LMS_ERROR","listLabPlansSuccess","loadSubscriptionLabPlansError","selectLabPlan","getLabPlanSuccess","getLabPlanError","updateLabPlansLmsSettings","unlinkIds","updateLabPlansLmsSettingsSuccess","updateLabPlansLmsSettingsError","clearUpdateLinkedLmsError","routerActions","PageHeaderContainer","hideTenantPicker","useCurrentPath","defaultSupportSection","onLabParentItemChange","labParentItem","switchingLabParent","switchingLab","firstItem","getOwnPropertyNames","PageFooter","year","getFullYear","textDecoration","Page","showFooter","FocusZone","LtiActionType","ltiStartOidc","ltiStartOidcError","ltiStartOidcRedirecting","ltiSignIn","ltiSignInSuccess","ltiSignInError","setLtiContext","setMembershipUrl","membershipUrl","setLtiRoles","getLtiTokenError","ltiRequestWebStorageAccessSuccess","ltiRequestWebStorageAccessError","setLmsInstance","ErrorViewContainer","isRouteLtiOidc","createFreeAccountButtonText","setupLabPlanButtonText","goToMyLabsButtonText","SectionNumber","numberMessage","LandingPageInjected","numberSpan","LandingPage","LandingPageContainerInjected","LandingPageContainer","Loading","loadingMessage","ariaLive","RequestLimitIncreaseInSentenceLink","RequestLimitIncreaseLink","toConnectionType","Public","None","toEnableState","isEnabled","supportedLinuxImages","unsupportedWindowsImages","isSameImage","left","right","isIdleExtensionSupported","isCustomImage","imageRef","getDefaultIdleConfig","shutdownOnDisconnectSupported","idleShutdownMode","IdleShutdownMode","OnDisconnect","shutdownOnDisconnectGracePeriod","idleGracePeriod","asMinutes","shutdownOnNoConnectSupported","enableNoConnectShutdown","shutdownOnNoConnectGracePeriod","idleNoConnectGracePeriod","disconnectOnIdleSupported","disconnectOnIdleEnabled","enableDisconnectOnIdle","disconnectOnIdleGracePeriod","idleOsGracePeriod","shutdownOnIdleGracePeriod","getImageIdleConfig","defaultConfig","isIdleSupported","isLinuxSIG","idleConfigToAutoShutdownProfile","toISOString","getLabIdleConfig","NotSupported","getVNextLabIdleConfig","isShutdownOnIdleEnabled","GalleryImageActionType","LIST_GALLERY_IMAGES","LIST_GALLERY_IMAGES_SUCCESS","LIST_GALLERY_IMAGES_ERROR","listGalleryImages","listGalleryImagesSuccess","listGalleryImagesError","CommonSharedImageActionType","CREATE_SHARED_IMAGE","CREATE_SHARED_IMAGE_ERROR","UPDATE_SHARED_IMAGE","UPDATE_SHARED_IMAGE_ERROR","SharedImageActionType","LIST_SHARED_IMAGES","LIST_SHARED_IMAGES_SUCCESS","LIST_SHARED_IMAGES_ERROR","GET_SHARED_GALLERY","GET_SHARED_GALLERY_SUCCESS","GET_SHARED_GALLERY_ERROR","UPDATE_SHARED_IMAGE_SUCCESS","listSharedImages","listSharedImagesSuccess","listSharedImagesError","getSharedGallery","getSharedGallerySuccess","sharedGalleries","getSharedGalleryError","createSharedImage","createSharedImageError","updateSharedImageError","UnsavedChangesDialog","onOk","onCancel","LinuxRdpDialog","doesNotInstallSpan","nameLabel","simplifiedNameLabel","namePlaceholder","sizeLabel","imageLabel","simplifiedImageLabel","searchImages","searchImagesResult","locationLabel","rdpLabel","gpuLabel","gpuDriverTooltipText","customizeImageLabel","customizeImageDescription","customizeImageNoSharedPasswordDescription","usernameLabel","usernameAdminLabel","usernameNonAdminLabel","usernamePlaceholder","usernameSpecializedPlaceholder","usernameSpecializedAdminPlaceholder","passwordAdminLabel","passwordNonAdminLabel","passwordPlaceholder","passwordSpecializedPlaceholder","passwordSpecializedAdminPlaceholder","useSharedPasswordEnabledMessage","useSharedPasswordCheckboxLabel","title1","title2","title3","title4","back","finish","quotaLabel","newLabConfigPageIntro","newLabConfigPageModifiedIntro","newLabConfigPageGpuOptOutText","newLabConfigPageTotalPriceFormat","newLabConfigPagePricePerVmFormat","newLabCredentialsPageIntro","newLabCredentialsPageIntroVnextGeneralized","newLabCredentialsPageIntroVnextSpecialized","newLabCredentialsPagePasswordDescription","newLabCredentialsPageNonAdminOption","newLabCredentialsPageNonAdminOptionDescription","newLabCredentialsPageNonAdminOptionBottomDescription","newLabFlyoutProgressFormat","newLabFlyoutLoadError","newLabFlyoutLoadErrorDetails","newLabFlyoutImagesError","newLabFlyoutImagesErrorDetails","newLabFlyoutCapacityErrorDetails","newLabFlyoutDiscardTitle","newLabFlyoutDiscardMessage","newLabPoliciesPageTimeEstimate","newLabPoliciesPageIntro","newLabPoliciesPageTimeMessage","vmSizePickerFormat","templateVmSettingsPageMainMessage","createTemplateVmOption","useVmImageWithoutCustomization","templateVmSettingsMaxVmTitle","customTemplateVmPageTimeEstimate","noTemplateVmPageTimeEstimate","sizesAndGeoNotAvailableCreateLabLinkText","searchSkus","newLabFlyoutLabPlanRegions","newLabFlyoutTechnicalSupportRequest","showUnavailableSimplified","linuxDistributionsInfo","customLinuxImage","customWindowsImage","getPricingAndAvailabilityData","getLabPricingAndAvailabilityData","getLabPricingAndAvailabilityLoadState","getLabPricingAndAvailabilityLoadError","getVNextImages","getVNextSharedImages","getCurrentLabImage","isLabInCurrentResourceGroup","getLabListViewModel","currentLabParentExist","isVnextLabPermissionPropagating","isVnextAuthErrorPermissionPropagationRelated","isIntroCheckboxEnabled","currentTenantId","showBlockedLabsBanner","showOldGpuLabsGenericBanner","hintsEnabled","showIntro","showCovidBanner","updateLinkedLmsErrors","vNextLabStore","vNextSkuStore","isDeleting","skuLoadState","isLoadingSku","coreLimitStore","labStoreLoadState","coreQuotaLoadState","isLoadingCoreQuota","administratorEmailAddress","getLabListContainerModel","labListViewModel","getCoreUsage","getVNextUsageByRegion","getVNextUsageLoadState","getVNextProcessedUsage","usageByRegion","processedUsage","skuFamilyUsage","getCurrentLabCoreUsageInfo","skuInfo","skuUsage","filterImagesByLabplanRegions","skuFamilyOrdinal","FSV2","DSV4","DSV3","NCAST4V3","NCSV3","NC","NVV4","NVV3","NVADSA10V5","NV","ESV4","diskTypeOrdinal","STANDARDSSD","PREMIUMSSD","getVCurrentSizeData","osData","getVCurrentGeographyData","sizeInfo","sizeName","geographies","hasVCurrentAvailableSize","Available","sizeKeys","j","geoKeys","k","isVCurrentSizeDisabled","isSizeDisabledForCores","areAllVCurrentSizesAvailable","every","restriction","getVCurrentMinMaxVmCores","gpuType","minVmCores","maxVmCores","isGeographyAvailable","geo","isUbuntuImage","getDefaultImage","isRegionSelectable","getIsBastionSupported","isV2BastionEnabled","virtualNetworkAddressRange","virtualNetworkResourceId","getDefaultConnectionTypes","enableBastion","combineImages","galleryImages","sharedImages","subTitle","isSpecialized","getGalleryImageInfo","enableState","getSharedImageInfo","isVCurrentGpuSize","getSkuCostFromImageOS","targetUnit","targetCost","getSkuMinCostFromImage","minLocation","MAX_VALUE","cost","isLocationAvailable","getLocationMinCostFromImage","minSku","isSkuLocationAvailable","vmSkuLocation","getSkuAndLocationMinCostFromImage","minSkuLocation","getSkusFromData","skuSettings","usageData","priceData","skuMap","skuLocation","usageByLocation","priceByLocation","usageByLocationSkuFamily","priceByLocationSkuName","loc","tl","newSku","numSorter","aFamilyOrdinal","bFamliyOrdinal","familyResult","coresResult","diskSizeResult","aDiskTypeOrdinal","bDiskTypeOrdinal","vmImageInfo","locationIndex","isLocationAllowedForImage","isSkuAvailable","getDefaultLocationFromSku","getCreateLabViewModel","isSkipTemplateEnabled","labNames","validateNameOnLoad","defaultIdleConfig","galleryImageStore","sharedImageStore","pricingAndAvailabilityStore","labAccountLoadState","galleryImageLoadState","sharedImageLoadState","pricingAndAvailabilityLoadState","coreLimitLoadState","hasLoadError","hasCapacityError","hasImageError","addImagesUrl","imageStore","labParentResourceStore","skuStore","usageStore","priceStore","labParentLoadState","imageLoadState","usageLoadState","priceLoadState","isGettingLabPlan","isLoadingOnSelectLabPlan","hasSelectLabPlanLoadError","rawSkuData","filteredImages","selectedLabPlan","Specialized","convertVNextImageToVmImageInfo","ltiContextTitle","getCreateLabContainerModel","hasLabErrors","isSetGroupIdInQueryString","hasLabPlanLoadError","createLabViewModel","defaultLabName","requiredError","specialCharsError","duplicateNameError","labNameRegex","showUnavailable","simplifiedLocationLabel","Option","getKey","geographyName","getText","localizedDisplayName","VmGeographyPicker","setShowUnavailable","filteredOptions","hasDisabledOptions","dropdownProps","callout","onRenderOption","overflowX","VmImagePicker","searchPlaceholder","setFilter","announce","setAnnounce","itemStyle","filterStr","s","onSearchChange","filterValue","searchResultAnnounce","numResults","renderOption","dropdownItem","dropdownItemSelected","dropdownItemDisabled","dropdownItemSelectedAndDisabled","src","dangerouslySetInnerHTML","__html","leftCenter","simplifiedSizeLabel","minPrice","maxPrice","localizedDescription","memoryInGb","createLabMessages","memorySize","geography","getMinPriceMaxPriceAndCurrency","VmSizePicker","hasDisabledSize","labelShimmer","ShimmerElementsGroup","shimmerElements","ShimmerElementType","line","gap","gapShimmer","LabConfigShimmer","CoresNotAvailableMessage","minGpuVmCores","maxGpuVmCores","minStandardVmCores","maxStandardVmCores","remainingGpuCores","remainingStandardCores","gpuRestriction","standardRestriction","getVCurrentRemainingCores","NewLabConfigPage","shouldShowSizeGeoAvailabilityLink","canSelectGeography","isRdpEnabled","installGpuDriverEnabled","customizeTemplate","isLoadingLabPlanImages","onNameChange","onNameValidation","onImageChange","onSizeChange","onGeographyChange","onRdpEnabledChange","onInstallGpuDriverEnabledChange","onCustomizeTemplateChange","newLabConfigIntro","labNameLabel","vmImagePickerLabel","vmSizePickerLabel","vmGeographyPickerLabel","linuxRdpDialogAcknowledged","setLinuxRdpDialogAcknowledged","showLinuxRdpDialog","setShowLinuxRdpDialog","spellCheck","validateLabName","Shimmer","isDataLoaded","customElementsGroup","geoData","geoNames","reservedError","endsWithPeriodError","windowsSpecialCharsError","startsWithNumberError","linuxSpecialCharsError","unicodeCharsError","reservedUsernames","allowedCharactersRegex","windowsInvalidCharactersRegex","windowsEndsWithPeriodRegex","linuxInvalidCharactersRegex","linuxInvalidStartChars","linuxStartsWithNumberRegex","CreateLabCredentials","isPasswordValid","passwordInfoTipEnabled","headerMessage","onUsernameChange","onPasswordChange","onUsernameValidationChange","onPasswordValidationChange","invalidChars","validateUsername","PasswordSettingsField","showHeader","disabledReason","NewLabCredentialsPage","nonAdminPassword","isNonAdminEnabled","isNonAdminPasswordValid","onUseSharedPasswordChange","onNonAdminUsernameValidationChange","onNonAdminPasswordValidationChange","onNonAdminEnabledChange","onNonAdminUsernameChange","onNonAdminPasswordChange","isUseSharedPasswordEnabled","imageText","setUsernamePlaceholder","setUsernameLabel","setPasswordPlaceholder","setPasswordLabel","setPasswordInfoTipEnabled","useSharedPasswordCheckbox","setUseSharedPasswordCheckbox","isOpened","onUseSharedPasswordOptionChange","SafeSpinButton","validate","delta","String","toFixed","SpinButton","inputProps","Position","top","incrementButtonAriaLabel","decrementButtonAriaLabel","onValidate","onIncrement","onDecrement","sshInBrowser","rdpInBrowser","ssh","rdp","connectionTypeError","getOption","connectionType","labelMap","ConnectionTypeDropdown","clientTypesDisabled","isLinux","isBastionSupported","pristine","valid","toggleOption","splice","getConnectionTypeLabelMap","onRenderLabel","areConnectionTypesValid","InfoIcon","InfoSection","GracePeriodInput","end","spinButtonWrapper","disconnectOnIdleLabel","disconnectOnIdleInputLabel","disconnectOnIdleWarningText","disconnectOnIdleInfoTipAriaLabel","shutdownOnDisconnectLabel","shutdownOnDisconnectInputLabel","shutdownOnDisconnectInfoTipAriaLabel","vNextShutdownOnDisconnectInfoTipAriaLabel","shutdownOnNoConnectLabel","shutdownOnNoConnectInputLabel","shutdownOnIdleLabel","shutdownOnIdleInfoTipAriaLabel","ShutdownOnDisconnectInfoTip","VNextShutdownOnDisconnectInfoTip","DisconnectOnIdleInfoTip","ShutdownOnIdleInfoTip","idleUserAbsenceOption","idleUserAbsenceAndUsageOption","idleCustomizeDropdownAriaLabel","CustomIdleShutdownDropdown","dropdownOptions","LowUsage","UserAbsence","onSelectionChange","_index","ShutdownPolicyGroup","idleConfig","ClockIcon","CreateLabTimeEstimate","timeEstimateMessage","NewLabPoliciesPage","quota","isConnectionTypesValid","onQuotaChange","onConnectionTypesChange","onIdleConfigChange","onConnectionTypesValidationChange","NewLabFlyout","formState","onFormStateChange","page","setPage","showConfirmDialog","setShowConfirmDialog","isLabNameValid","setIsLabNameValid","isUsernameValid","setIsUsernameValid","setIsPasswordValid","setIsConnectionTypesValid","enabledRegionSelection","isGeographySelectable","canSelectRegion","isPageOneValid","isPageTwoValid","isFormValid","onExit","goBack","loadPageTwo","loadPageThree","formSubmit","stepNumber","maxStepNumber","CreateLabFlyoutContainerInjected","_loadLabAccountImages","_onFormStateChange","newState","_updateFormDataOnImageLoaded","shouldInitializeName","defaultGeoName","getLabAccountDefaultGeoName","defaultSize","getVCurrentDefaultSize","defaultGeo","getVCurrentDefaultGeography","isTemplateVmEnabled","_initializeFormData","formStateInitialized","labCapacity","prevProps","_onSubmit","onSelectLabPlan","onCreatedRoute","vCurrentSize","vCurrentGeography","labParameters","galleryImageResourceId","sharedImageResourceId","templateVmState","linuxRdpState","sharedPasswordState","userQuota","connectivityPolicy","rdpEnabled","rdpInBrowserEnabled","sshEnabled","sshInBrowserEnabled","CreateLabFlyoutContainer","LabPlanSettingsInSentenceLink","nameTooLongError","AzureRegions","labPlanLabel","LabPlanPicker","getLocalizedLocationName","centralus","eastus","eastus2","northcentralus","southcentralus","westcentralus","westus","westus2","westus3","australiacentral","australiacentral2","australiaeast","australiasoutheast","brazilsouth","brazilsoutheast","canadacentral","canadaeast","francecentral","francesouth","germanynorth","germanywestcentral","japaneast","japanwest","koreacentral","koreasouth","northeurope","westeurope","norwayeast","norwaywest","southafricanorth","southafricawest","centralindia","southindia","westindia","southeastasia","eastasia","swedencentral","swedensouth","switzerlandnorth","switzerlandwest","uaecentral","uaenorth","uksouth","ukwest","centraluseuap","eastus2euap","unknown","skuCosts","getSkuCostsFromImage","VNextVmLocationPicker","onChangeReset","vNextVmSizePickerTitleMinAndMaxPrice","vNextVmSizePickerTitle","vmSizePickerFormatVNext","skuDisplayName","getSubtitle","storageSize","MIN_VALUE","hasFoundAtLeastOneValidCost","getSkuMinMaxCostFromImage","toLocaleLowerCase","VNextVmSizePicker","vmSizePickerSharedMessages","VNextNewLabConfigPage","onLabPlanChange","onConnectionTypesValidation","locationBeforeSizeChange","setLocationBeforeSizeChange","sizeBeforeLocationChange","setSizeBeforeLocationChange","resetSizeAndLocationChange","handleLabPlanChange","pricePerVm","validateVnextLabName","StackItem","newLocation","previousLocationName","previousSkuName","minSkuSameLoction","minSkuAndLocation","locationName","onLocationChange","previousSize","previousLocation","available","numOfVms","requestLimitIncreaseLink","VmTemplateSettingsPage","onIsTemplateVmEnabledChange","selectedChoice","setSelectedChoice","setTimeEstimateMessage","optionsToCustomizeVmCreation","ChoiceGroup","onSelectedChoiceChange","VNext_NewLabFlyout","isNonAdminUsernameValid","setIsNonAdminUsernameValid","setIsNonAdminPasswordValid","isPageThreeValid","loadPageFour","areAllSkuOptionsDisabled","im","labPlanSettingsLink","labPlanRegionsLink","technicalSupportRequestLink","VNext_CreateLabFlyoutContainerInjected","_selectDefaultLabPlan","getDefaultSku","prevState","isSharedPasswordDisabled","createLabProps","VNext_CreateLabFlyoutContainer","deleteLabTitle","deleteLabMessage","DeleteLabDialog","CarouselCards","UNSAFE_componentWillReceiveProps","nextProps","oldCard","currentCard","previousCard","render","cards","visibleCard","visibleContent","movingBackwards","aria-atomic","TransitionGroup","CSSTransition","classNames","enter","enterActive","exit","timeout","CarouselPagination","handleKeyPress","currentPage","pages","onPageClicked","previousKeyCode","getRTL","nextKeyCode","keyCode","renderDots","dots","isActive","dot","activeDot","aria-valuemin","aria-valuemax","aria-valuenow","onKeyDown","CarouselInjected","onCardChange","cardContent","onClose","numCards","previousClassName","hideButton","nextClassName","nextCard","Modal","isBlocking","IconButton","Carousel","showTipsLabel","initialPageTitle","initialPageContent","templatePageTitle","templatePageContent","labPageTitle","labPageContent","studentPageTitle","studentPageContent","LabListIntroCarouselItem","animationData","headingText","contentText","extraContent","isVisible","loop","autoplay","LabListIntroduction","toggleShowTips","checkboxEnabled","currentSlide","setCurrentSlide","welcomeAnimation","ev","virtualMachineAnimation","createLabAnimation","studentVirtualMachineAnimation","labAppNavMessages","virtualMachinePool","dashboard","labMenuAria","LabCardFooter","isDeletionFailed","isWriteable","onScheduleClicked","onUsersClicked","onVmsClicked","onDeleteClicked","virtualMachinesText","scheduleText","usersText","deleteText","menuIcon","deletionErrorResourceNotFound","deletionErrorResourceNotReady","deletionErrorAuthorizationFailed","deletionErrorTimeout","deleteErrorGeneric","createErrorGeneric","createErrorWebAccesVnetNotSupported","createErrorInvalidSubnet","loadErrorResourceNotFound","loadErrorTimeout","loadErrorGeneric","getErrorMessage","getDeleteErrorMessage","getLoadErrorMessage","getCreateErrorMessage","getFallbackErrorMessage","genericMessageForOperation","readOnlyTitle","LabErrorBanner","LabCard","maxUsers","isCustomizable","onCardClicked","vCurrentlab","isLabDeletionFailed","isBlocked","isLabDeleting","nonClickable","LabCardBody","bodyInfo","quotaTemplate","quotaValue","quotaSpan","iconStyle","titleStyle","gray110","gray160","labTitle","gray70","gray100","myLabsTitle","NoLabsView","isNewLabButtonDisabled","linkLmsError","unlinkLmsError","linkLmsAllError","unlinkLmsAllError","LinkedLmsUpdateErrors","RetirementNotificationPageTitle","RetirementNotificationPageContent","RetirementNotificationPageExtraContent","RetirementNotificationCarouselItem","RetirementNotification","retirementAnimation","labAccessLabel","myLabs","allLabs","LabAccessDropdown","dropdown","returnToLabList","loadDashboard","loadSchedule","loadUsers","loadVirtualMachines","onDismissedIntro","onDismissedRetirementAlert","onDismissedCovidBanner","onDismissedOldV1GpuLabBanner","showNewLabFlyout","setShowNewLabFlyout","showDeleteDialog","setShowDeleteDialog","labToDelete","setLabToDelete","commandBarStyles","severeWarning","RetirementMessageLink","blocked","blogPostLink","gpuOutage","administrator","labListMessages","renderVNextLab","renderLab","isDeletingLabInList","LabListContainerInjected","_returnToLabList","_loadDashboard","_loadSchedule","_loadUsers","_loadVirtualMachines","_deleteLab","_toggleShowTips","_onDismissedIntro","_onDismissedRetirementAlert","_onDismissedCovid19Banner","_onDismissedOldV1GpuLabBanner","enabled","dismissOldV1GpuLabBanner","listProps","LabListContainer","ImageActionType","LIST_IMAGES","LIST_IMAGES_SUCCESS","LIST_IMAGES_ERROR","CREATE_IMAGE_ACCEPTED","listImages","listEnabledOnly","listImagesSuccess","listImagesError","createSharedImageAccepted","CommonTemplateActionType","LIST_TEMPLATES_SUCCESS","GET_TEMPLATE_SUCCESS","PUBLISH_TEMPLATE","RESET_PASSWORD","RESET_PASSWORD_ERROR","TemplateActionType","LIST_TEMPLATES","LIST_TEMPLATES_ERROR","GET_TEMPLATE","GET_TEMPLATE_CANCELLED","GET_TEMPLATE_ERROR","START_TEMPLATE","START_TEMPLATE_ERROR","STOP_TEMPLATE","STOP_TEMPLATE_ERROR","CREATE_TEMPLATE_ERROR","UPDATE_TEMPLATE","UPDATE_TEMPLATE_SUCCESS","UPDATE_TEMPLATE_ERROR","PUBLISH_TEMPLATE_CANCELLED","PUBLISH_TEMPLATE_ERROR","PUBLISH_EXCEEDS_CORES_ERROR","SELECT_TEMPLATE","CLEAR_TEMPLATE_ERROR","CLEAR_LOAD_TEMPLATE_ERROR","CLEAR_PUBLISH_EXCEEDS_CORES_ERROR","POLL_TEMPLATE_START","POLL_TEMPLATE_STOP","POLL_TEMPLATE_CANCELLED","EnvironmentActionType","LIST_ENVIRONMENTS","LIST_ENVIRONMENTS_SUCCESS","LIST_ENVIRONMENTS_CANCELLED","LIST_ENVIRONMENTS_ERROR","START_ENVIRONMENTS","START_ENVIRONMENTS_ACCEPTED","START_ENVIRONMENTS_ERROR","STOP_ENVIRONMENTS","STOP_ENVIRONMENTS_ACCEPTED","STOP_ENVIRONMENTS_ERROR","RESET_ENVIRONMENTS","RESET_ENVIRONMENTS_ACCEPTED","RESET_ENVIRONMENTS_ERROR","GET_ENVIRONMENT","GET_ENVIRONMENT_SUCCESS","GET_ENVIRONMENT_CANCELLED","GET_ENVIRONMENT_ERROR","CLEAR_ENVIRONMENTS_LOAD_ERROR","CLEAR_ENVIRONMENTS_START_ERROR","CLEAR_ENVIRONMENTS_STOP_ERROR","CLEAR_ENVIRONMENTS_RESET_ERROR","POLL_ENVIRONMENTS_START","POLL_ENVIRONMENTS_STOP","POLL_ENVIRONMENTS_CANCELLED","CLEAR_VIRTUAL_MACHINE_GET_ERROR","CLEAR_VIRTUAL_MACHINE_RESET_PASSWORD_ERROR","POLL_VIRTUAL_MACHINE_START","POLL_VIRTUAL_MACHINE_STOP","POLL_VIRTUAL_MACHINE_CANCELLED","DISMISS_EXPORT_STARTED_MESSAGE_BAR","CLEAR_EXPORT_ERROR","REDEPLOY_VIRTUAL_MACHINE","REDEPLOY_VIRTUAL_MACHINE_ERROR","REDEPLOY_VIRTUAL_MACHINE_ACCEPTED","CLEAR_VIRTUAL_MACHINE_REDEPLOY_ERROR","listEnvironments","listEnvironmentsCancelled","listEnvironmentsSuccess","startEnvironments","environmentIds","startEnvironmentsError","stopEnvironments","stopEnvironmentsError","resetEnvironments","resetEnvironmentsError","clearGetError","getEnvironment","includeNetwork","getEnvironmentSuccess","getEnvironmentCancelled","getEnvironmentError","clearLoadError","clearStartError","clearStopError","clearResetError","pollEnvironmentsStart","vmParentId","pollEnvironmentsStop","pollEnvironmentsCancelled","listVNextVirtualMachinesSuccess","getVNextVirtualMachineSuccess","clearStartErrors","ids","clearStopErrors","pollVirtualMachineStart","pollVirtualMachineStop","pollVirtualMachineCancelled","clearResetPasswordError","dismissExportStartedMessageBar","clearExportError","redeployVirtualMachines","redeployVirtualMachinesError","clearRedeployErrors","ScheduleActionType","LIST_SCHEDULES","LIST_SCHEDULES_SUCCESS","LIST_SCHEDULES_ERROR","LOAD_FIRST_LAB_ACCOUNT","DELETE_SCHEDULE","DELETE_SCHEDULE_SUCCESS","DELETE_SCHEDULE_ERROR","CREATE_SCHEDULE","CREATE_SCHEDULE_SUCCESS","CREATE_SCHEDULE_ERROR","UPDATE_SCHEDULE","UPDATE_SCHEDULE_SUCCESS","UPDATE_SCHEDULE_ERROR","CLEAR_LOAD_SCHEDULE_ERROR","CLEAR_SCHEDULE_ERROR","listSchedules","listVNextSchedules","listSchedulesSuccess","listVNextSchedulesSuccess","listSchedulesError","deleteSchedule","scheduleId","deleteScheduleSuccess","deleteScheduleError","createSchedule","createVNextSchedule","createScheduleSuccess","createVNextScheduleSuccess","createScheduleError","updateSchedule","updateVNextSchedule","updateScheduleSuccess","updateVNextScheduleSuccess","updateScheduleError","clearLoadScheduleError","listTemplates","storeFirst","expand","listTemplatesSuccess","templates","listTemplatesError","getTemplateCancelled","getTemplateSuccess","getTemplateError","startTemplate","startTemplateError","stopTemplate","stopTemplateError","createTemplateError","updateTemplate","updateTemplateSuccess","updateTemplateError","publishTemplate","useExistingImage","publishTemplateCancelled","publishTemplateError","resetPasswordError","selectTemplate","clearLoadTemplateError","clearPublishExceedsCoresError","pollTemplateStart","pollTemplateStop","pollTemplateCancelled","UserActionType","LIST_USERS","LIST_USERS_CANCELLED","LIST_USERS_SUCCESS","LIST_USERS_ERROR","DELETE_USERS","DELETE_USERS_SUCCESS","DELETE_USERS_ERROR","ADD_USERS","ADD_USERS_SUCCESS","ADD_USERS_ERROR","INVITE_USERS","INVITE_USERS_SUCCESS","INVITE_USERS_ERROR","CLEAR_LOAD_USERS_ERROR","CLEAR_ADD_USERS_ERROR","CLEAR_DELETE_USERS_ERROR","CLEAR_INVITE_USERS_ERROR","POLL_USERS_START","POLL_USERS_STOP","POLL_USERS_CANCELLED","UPDATE_ADDITIONAL_QUOTA","UPDATE_ADDITIONAL_QUOTA_SUCCESS","UPDATE_ADDITIONAL_QUOTA_ERROR","CLEAR_UPDATE_ADDITIONAL_QUOTA_ERROR","listUsers","listUsersCancelled","listUsersSuccess","listVNextUsersSuccess","listUsersError","deleteUsers","userIds","deleteUsersSuccess","deleteUsersError","addUsers","emailAddresses","addUsersSuccess","addVNextUsersSuccess","addVNextUsersError","addUsersError","failedEmails","inviteUsersSuccess","inviteUsersError","inviteVNextUsersError","clearLoadUsersError","clearAddUsersError","clearDeleteUsersError","clearInviteUsersError","pollUsersStart","pollUsersStop","pollUsersCancelled","updateAdditionalQuotaForUsersSuccess","updateVNextAdditionalQuotaForUsersSuccess","updateAdditionalQuotaForUsersError","LabNavKeys","VirualMachine","getNavigationItems","selectedLabId","navigateRoute","dashboardText","settingsText","templateText","virtualMachinePoolText","dashboardRoute","settingsRoute","templateRoute","virtualMachinesRoute","usersRoute","schedulesRoute","scheduleMessages","todayLabel","addEvent","editEvent","dateLabel","startTimeLabel","stopTimeLabel","timeZoneLabel","notesLabel","selectTimezonePlaceholder","selectedDaysValidationMessage","startTimeValidationMessage","stopTimeValidationMessage","minimumDurationValidationMessage","timezoneValidationMessage","notesValidationMessage","startWithTimeLabel","stopWithTimeLabel","repeatLabel","deleteRecurrenceLabel","occurenceNoEndDateLabel","occurenceWithEndDateLabel","sundayShort","mondayShort","tuesdayShort","wednesdayShort","thursdayShort","fridayShort","saturdayShort","mapWeekday","weekday","getWeekdays","getVNextWeekdays","getFrequency","getInterval","getScheduleStartDate","startAction","getVNextScheduleStartDate","getScheduleRecurrenceEndDate","until","getVNextScheduleRecurrenceEndDate","getUTCDate","date","UTC","getMonth","getDate","getHours","getMinutes","getBrowserOffset","getTimezoneOffset","getEventOffset","zone","startDate","valueOf","getAdjustedDate","browserOffset","eventOffset","isDST","setHours","adjustDate","ianaZone","offset","getStopOnlyEvent","calendarStart","calendarEnd","endTimeFormatted","formatTime","stopTime","setMinutes","extendedProps","getStandardEvent","adjustedStart","adjustedEnd","startTimeFormatted","getAdjustedStart","month","day","hour","minute","getAdjustedEnd","endDate","createIcal","cal","ical","summary","repeating","freq","byDay","createEvent","createIcalVNext","expandEvents","startWindow","endWindow","icalExpander","IcalExpander","ics","maxIterations","earlierStart","setDate","laterEnd","expandedEvents","between","expandedOccurrences","occurrences","uid","isRecurring","onetimeEvents","events","getCalendarEvents","ManagedLabsModels","endAction","getStartOnlyEvent","getEvents","getCalendarEventsVNext","updateDateWindow","currentStartWindow","currentEndWindow","calendarInfo","setStartWindow","setEndWindow","newStartWindow","view","currentStart","newEndWindow","currentEnd","timezoneMessages","datelineStandardTime","uTC11","hawaiianStandardTime","alaskanStandardTime","pacificStandardTimeMexico","pacificStandardTime","uSMountainStandardTime","mountainStandardTimeMexico","mountainStandardTime","centralAmericaStandardTime","centralStandardTime","centralStandardTimeMexico","canadaCentralStandardTime","sAPacificStandardTime","easternStandardTimeMexico","easternStandardTime","uSEasternStandardTime","venezuelaStandardTime","paraguayStandardTime","atlanticStandardTime","centralBrazilianStandardTime","sAWesternStandardTime","pacificSAStandardTime","newfoundlandStandardTime","eSouthAmericaStandardTime","sAEasternStandardTime","argentinaStandardTime","greenlandStandardTime","montevideoStandardTime","bahiaStandardTime","uTC02","azoresStandardTime","capeVerdeStandardTime","moroccoStandardTime","uTC","gMTStandardTime","greenwichStandardTime","wEuropeStandardTime","centralEuropeStandardTime","romanceStandardTime","centralEuropeanStandardTime","wCentralAfricaStandardTime","namibiaStandardTime","jordanStandardTime","gTBStandardTime","middleEastStandardTime","egyptStandardTime","syriaStandardTime","eEuropeStandardTime","southAfricaStandardTime","fLEStandardTime","israelStandardTime","kaliningradStandardTime","libyaStandardTime","arabicStandardTime","turkeyStandardTime","arabStandardTime","belarusStandardTime","russianStandardTime","eAfricaStandardTime","iranStandardTime","arabianStandardTime","azerbaijanStandardTime","russiaTimeZone3","mauritiusStandardTime","georgianStandardTime","caucasusStandardTime","afghanistanStandardTime","westAsiaStandardTime","ekaterinburgStandardTime","pakistanStandardTime","indiaStandardTime","sriLankaStandardTime","nepalStandardTime","centralAsiaStandardTime","bangladeshStandardTime","nCentralAsiaStandardTime","myanmarStandardTime","sEAsiaStandardTime","northAsiaStandardTime","chinaStandardTime","northAsiaEastStandardTime","singaporeStandardTime","wAustraliaStandardTime","taipeiStandardTime","ulaanbaatarStandardTime","tokyoStandardTime","koreaStandardTime","yakutskStandardTime","cenAustraliaStandardTime","aUSCentralStandardTime","eAustraliaStandardTime","aUSEasternStandardTime","westPacificStandardTime","tasmaniaStandardTime","magadanStandardTime","vladivostokStandardTime","russiaTimeZone10","centralPacificStandardTime","russiaTimeZone11","newZealandStandardTime","uTC12","fijiStandardTime","tongaStandardTime","samoaStandardTime","lineIslandsStandardTime","goToTodayCalendarLabel","goToPreviousMonthCalendarLabel","goToNextMonthCalendarLabel","goToPreviousYearCalendarLabel","goToNextYearCalendarLabel","closeDatePickerLabel","dateOutOfBoundsMessage","dateRequiredMessage","dateInvalidMessage","getTimeDropdownOption","time","getMonths","months","getDays","days","getFirstDayOfWeek","localeData","firstDayOfWeek","getRandomScheduleName","randomSubstring","random","substr","dropdownTimezones","timezoneMessage","getDropdownTimezones","dropdownTimes","times","dropdownOption","getTimes","daysShort","daysShortLocaleAware","firstDay","i_locale","longText","dayPickerStrings","shortMonths","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","isOutOfBoundsErrorMessage","sortDays","isoWeekday","mapDayToLocaleDay","translate","dayNumber","mapDayToLocaleDayShort","onFormatDate","firstDayOfWeekForPicker","DayOfWeek","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","getFirstDayForPicker","getDropdownKeyFromDate","hours","minutes","_hours","padStart","_minutes","getDefaultSchedule","defaultStartHour","Start","Stop","getDefaultVNextSchedule","getDefaultWeeklySchedule","getDay","setMonth","Weekly","getDefaultVNextWeeklySchedule","adjustDatesForSchedule","adjustedSchedule","cloneDeep","hoursOffset","trunc","minutesOffset","adjustedStartHours","adjustedStartMinutes","adjustedEndHours","adjustedEndMinutes","adjustedUntilHours","adjustedUntilMinutes","adjustDatesForVNextSchedule","getVNextVirtualMachines","getTemplateVM","getUserVMs","getStartErrors","getStopErrors","getResetErrors","getResetPasswordError","getRedeployErrors","getTemplateErrors","templateVM","startErrors","templateStartError","stopErrors","templateStopError","saveImageError","getSaveImageError","resetErrors","resetTemplateError","templateRedeployError","getUserVMStartErrors","getUserVMStopErrors","getUserVMRedeployErrors","convertVmDetails","gettingEnvironments","env","currentVmState","networkInterface","vmAssignmentType","isExpanding","userForEnvironment","user","claimedByUserPrincipalId","currentUsage","canReset","linuxRdpEnabled","assignedTo","getVmDetails","convertVNextVirtualMachineStateToVmState","convertVNextVmDetails","gettingVirtualMachines","isUpdatePending","vmProvisioningState","getVNextVmDetails","getVmListViewModel","ianaTimezone","isGroupSyncModeEnabled","isReadOnly","isVmActionsEnabled","virtualMachineStore","userStore","labStoreState","virtualMachinesLoadState","userStoreLoadState","coreUsageData","labCapacityExceedsCoresError","isLabUpdating","labSku","shouldDisableLabUpdate","isLabTeamsOrLmsConnected","isDraft","maxCapacity","isLabDraft","templateStore","envStore","coreUsageStore","templateStoreState","environmentsLoadState","coreQuotaStatus","sharedPasswordEnabled","getVmListContainerModel","vmListViewModel","getSshConnectionCommand","getPowerState","getTemplateVmState","isSharedGalleryValid","sharedGallery","isUploadStateFailed","uploadState","UploadState","getLastUploadedRelativeTime","now","lastUploaded","from","getLastPublishedDate","getLastPublishedTime","getLastPublishedDateCorrected","newLastPublished","convertToTemplateVm","isSaving","lastChanged","lastPublishedUtc","galleryImage","sigImage","getImage","getMemorySize","getPrice","getCurrencyCode","getSize","getUsername","powerState","getRdpInBrowserUrl","getSshInBrowserUrl","sharedImage","sharedImageResourceIdForUpload","sharedImageId","getSharedImage","gpuDriverState","getGpuDriverState","isUploadingImage","InProgress","isPublishing","isPublished","isScaling","isTemplateLinuxRdpEnabled","hasEdits","correctedLastPublished","hasNewEdits","hasTemplateVm","getIsTemplateVmPresent","getOsType","convertVNextVirtualMachineToTemplateVm","labSkuInfo","labState","isSyncing","shouldHaveTemplateVM","lastPublishedDate","getTemplateViewModel","loadTemplateError","imagesStore","coreUsgaeStore","loadVirtualMachinesError","getErrors","vNextTemplateVM","getTemplateVirtualMachineError","virtualMachineStoreLoadState","isSharedImagesLoading","templateErrors","labPublishErrors","getLabErrorsByOperation","vNextPublishError","isDismissing","shouldShowExportStartedMessage","exportedImageName","loadError","labPlanSharedGalleryId","templateStoreLoadState","sizeLoadState","currentTemplate","publishExceedsCoresError","galleries","getGallery","dismissedGpuBanner","gpuDriverStateDismissed","DismissState","Dismissed","getDismissedGpuBanner","getTemplateContainerModel","templateViewModel","startOnlyRecurringWithEndDateScheduleMessage","startOnlyRecurringWithNoEndDateScheduleMessage","startOnlyNonRecurringScheduleMessage","stopOnlyRecurringWithEndDateScheduleMessage","stopOnlyRecurringWithNoEndDateScheduleMessage","stopOnlyNonRecurringScheduleMessage","standardRecurringWithEndDateScheduleMessage","standardRecurringWithNoEndDateScheduleMessage","standardNonRecurringScheduleMessage","isFailed","compareByStartDate","compareVNextScheduleByDate","aDate","bDate","hasEndDate","vCurrentschedule","vNextSchedule","isStandard","individualHours","totalIndividualHours","startMom","endMom","diff","as","recurringHours","totalRecurringHours","hasUnlimitedSchedule","numberOfOccurrences","calculateQuotaPerUser","calculateScheduleHoursPerUser","scheduleRecurringHours","startOnlyHours","calculateHoursPerUser","quotaPerUser","scheduleHoursPerUser","calculateNumberOfUsers","calculateTotalHoursPerUser","numberOfUsers","hoursPerUser","calculateTotalIndividualQuota","reduce","calculateTotalHoursForAllUsers","totalHoursPerUser","totalIndividualQuota","calculatePrice","calculateTotalPrice","totalHours","isVCurrentScheduleInfinitelyRecurring","isVNextScheduleInfinitelyRecurring","sortByDate","isAfter","sortByStop","isStartOnly","isVCurrentScheduleStopOnly","isStopOnly","unzipStartAndStopEvents","allExclusiveStarts","allStops","recurringSchedules","individualSchedules","eventsForTimeWindow","starts","stops","hasInfiniteStartOnlySchedule","latestStart","latestStop","_stop","isInMiddleOfStandardSchedule","standardStartTime","isBefore","calculateDiffererenceInHours","hasStartOnlySchedule","totalhours","isScheduleAlreadyEnded","today","pickRelevantSchedules","processedSchedules","pickedSchedules","unshift","pickVCurrentRelevantSchedules","pickVNextRelevantSchedules","getReadableSchedule","adjustedUntil","getDashBoardViewModel","scheduleStore","isEnvironmentsLoading","environmentsLoadError","usersLoadState","isUsersLoading","usersLoadError","isPriceDataLoading","pricingError","vNextTemplate","templateLoadError","schedulesLoadState","isSchedulesLoading","scheduleLoadError","isLabMetadataLoading","isTemplateLoading","templatesLoadState","labPriceLoadState","getDashboardContainerModel","dashboardViewModel","quotaHoursLabel","scheduledHoursLabel","hoursPerUserLabel","maximumUsersLabel","totalHoursPerUserLabel","individualQuotaLabel","CostEstimateLogo","CostEstimateTitle","CostEstimateBreakdownColumns","individualHoursRows","aggregatedHoursRows","getFontWeight","row","isBold","inner","CostEstimateBreakdown","usersLabel","CostEstimateCalculation","CostEstimateTotalCost","totalCost","CostEstimateTotalCostDescription","CostEstimateHeaderShimmer","circle","CostEstimateBreakdownShimmer","CostEstimateTotalCostShimmer","CostEstimateCalculationShimmer","CostEstimateCalculationDescriptionShimmer","CostEstimateTile","hasUnlimitedCost","span","DashboardErrorBanner","clearTemplateError","clearScheduleError","clearUsersError","clearEnvironmentError","closeLabel","dashboardPageErrorMessageDetails","DashboardErrorPage","templateMessages","exportToSharedImageGallery","templateUnpublishedTooltipText","templateUnpublishedStatus","templateGpuDriverInstallationFailed","templateGpuDriverInstallationMissing","templateGpuDriverMoreInfo","templateGpuDriverLearnMore","twentyMinutesFormatted","oneHourFormatted","lastPublishedTemplateDashboard","createdTemplateDashboard","changedSinceLastPublishTemplateDashboard","manageTemplateDashboardButton","viewTemplateDashboardButton","assignedVmsDashboard","unassignedVmsDashboard","manageVirtualMachinesDashboardButton","viewVirtualMachinesDashboardButton","virtualMachinePoolDashboardSectionTitle","registeredUsersDashboard","unregisteredUsersDashboard","manageUsersDashboardButton","teamsManageUsersDashboardButton","viewUsersDashboardButton","usersDashboardSectionTitle","setLabSchedulesButton","viewLabSchedulesButton","schedulesDashboardSectionTitle","scheduleTileNoScheduledEvents","scheduleTileAdditionalScheduledEvents","ScheduleOverviewCard","sortedSchedules","scheduleString","tooltip","summary1","summary2","numEvents","OverviewCard","infoSingleColumn","UsersOverviewCard","registered","unregistered","isRegistered","Registered","isVNextUserRegistered","unregisteredCount","VmPoolOverviewCard","assigned","unassigned","isClaimed","isVNextVmClaimed","unassignedVmCount","TemplateOverviewCard","unpublished","changed","created","warningMessage","UnpublishedTemplate","HeaderShimmer","BodyShimmer","WarningMessageShimmer","FooterShimmer","WarningMessage","HeaderSection","ButtonSection","costEstimateRegionTitle","overviewRegionTitle","loadTemplate","loadSchedules","navigationItems","dashboardMessages","dashboardPageTitle","DashboardContainerInjected","_clearTemplateError","DashboardContainer","hasErrors","form","hasValidationErrors","adjustScheduleForDST","isTodayDST","isScheduleDST","FlyoutFooter","formValues","scheduleType","mode","startHoursKey","stopHoursKey","startHours","startMinutes","stopHours","stopMinutes","hydrateCommonPropertiesForSchedule","FlyoutMode","timezonePicker","startDatePicker","startTimePicker","stopTimePicker","recurrencePicker","RecurrenceType","weekly","endDatePicker","dayPicker","ScheduleType","startOnly","adjustTimesForStartOnlySchedule","stopOnly","adjustTimesForStopOnlySchedule","saveSchedule","convertWindowsTimezoneToIana","hydrateCommonPropertiesForVNextSchedule","saveVNextSchedule","onSave","validateRequired","validateLength","standardLabel","startOnlyLabel","stopOnlyLabel","eventTypeLabel","stopOnlyScheduleTypeMessage","startOnlyScheduleTypeMessage","standardScheduleTypeMessage","TimePicker","meta","timePickerOptions","setTimePickerOptions","formats","initTimeOptions","ComboBox","scrollSelectedToTop","allowFreeform","calloutMaxHeight","__","testValue","testValueAsMoment","compareByKey","getDropdownValue","setOptions","timeString","StartDatePickerField","maxDate","pickerStrings","isDate","validateDate","fieldProps","DatePicker","strings","formatDate","onSelectDate","allowTextInput","isRequired","TimezonePicker","placeHolder","defaultSelectedKey","Notes","field","rows","ScheduleTypeDropdown","currentScheduleType","setScheduleType","eventType","standardDescription","startOnlyDescription","stopOnlyDescription","eventTypeDropdownOptions","dropdownItemStyle","onScheduleTypeChange","FlyoutForm","deleteRecurrence","onDialogOpen","setRecurValues","repeat","repeatButtonLabel","validationMessages","selectedDaysMessage","startTimeMessage","stopTimeMessage","notesMessage","component","recurValues","isChecked","DayPicker","without","onSelectDay","everyWeekLabel","neverLabel","chooseEndDateLabel","occurrenceUntilEndDateLabel","RecurrencePicker","caretDownWrapper","ScheduledDayPicker","EndDatePicker","isHidden","setIsHidden","minDate","themeDark","Callout","getElementById","setInitialFocus","Calendar","isMonthPickerVisible","showGoToToday","EndDateChooser","defaultSchedule","chooseEndDate","recurrenceEndDate","RecurrenceDialog","recurrenceFormValues","isDialogOpen","onDialogClose","everyWeek","never","validationMessage","onDialogCancel","topOffsetFixed","validateSelectedDays","actionsRight","getTimeZone","defaultTimeZone","isTimezoneAvailable","getAdjustedMinutes","currentMinutes","modifyScheduleForAddEvent","currentHour","sched","adjustScheduleDatesForLateSameDay","adjustScheduleDatesForLateNextDay","adjustedMinutes","isEndTimeSameDay","adjustScheduleEndDate","adjustScheduleStartDate","adjustVNextScheduleDatesForLateSameDay","adjustVNextScheduleDatesForLateNextDay","adjustVNextScheduleEndDate","adjustVNextScheduleStartDate","Flyout","isPanelOpen","setCurrentScheduleType","isRecurrenceDialogOpen","setIsRecurrenceDialogOpen","initialValues","setFormValues","setRecurrenceFormValues","previousIsSaving","parseInt","formProps","deleteScheduleTitle","deleteRecurringScheduleConfirmationMessage","deleteOnetimeScheduleConfirmationMessage","ScheduleDeleteDialog","deleteRecurringMessage","deleteOnetimeMessage","updateErrorStopMustBeAfterStart","updateScheduleGenericError","deleteErrorScheduleNotFound","deleteScheduleGenericError","loadSchedulesGenericError","getUpdateErrorMessage","ScheduleErrorBanner","isSame","getScheduleFromDateClick","toDate","getDelayOfLastClick","thisClick","lastClick","before","asMilliseconds","getScheduleType","flyoutMode","DividerLine","ScheduleCallout","mouseEvent","timesInCurrentZone","shouldDisableScheduleUpdate","onEditClicked","isLocked","Locked","isStartEnabled","isEndEnabled","recurrenceStart","recurrenceEnd","wordBreak","isBeakVisible","rightCenter","scheduleViewModel","showLoadError","showCalendarImmediately","setIsPanelOpen","isCalloutOpen","setIsCalloutOpen","isDeleteDialogOpen","setIsDeleteDialogOpen","setMouseEvent","flyoutScheduleTarget","setFlyoutScheduleTarget","deleteScheduleTarget","setDeleteScheduleTarget","calloutScheduleTarget","setCalloutScheduleTarget","setTimesInCurrentZone","setFlyoutMode","lastDateClick","setLastDateClick","bodyDiv","bodyHeight","setBodyHeight","clientHeight","getElementsByClassName","onFlyoutOpen","onClickSettingsLink","headerContent","gracePeriod","initialView","plugins","dayGridPlugin","timeGridPlugin","interactionPlugin","dateClick","dateClickInfo","delay","newSchedule","eventDidMount","el","slotEventOverlap","dayHeaderFormat","eventMinHeight","displayEventTime","scrollTime","slotLabelFormat","meridiem","titleFormat","allDaySlot","eventClick","scheduleIndex","onOpenCallout","jsEvent","windowResize","datesSet","getScheduleViewModel","hasLoading","hasNotLoaded","getCombinedState","isUpdating","getScheduleContainerModel","SchedulesContainerInjected","_createSchedule","_updateSchedule","_deleteSchedule","_navigateRoute","SchedulesContainer","ConnectionTypeDropdownField","ConditionNot","when","isNot","Condition","DisconnectOnIdleWarning","isEnabledDirty","useField","dirty","isGracePeriodDirty","ShutdownPolicyFieldGroup","idleConfigFieldName","shutdownOnIdleFieldName","shutdownOnIdleField","updateError","clearUpdateError","SettingsPage","settingsPageViewModel","isApplyingSettings","idleUpdateFailed","isVnetAttached","showDiscardDialog","setShowDiscardDialog","Layer","zIndex","Overlay","sharedMessages","handleSubmit","getSettingsPageViewModel","idleConfigState","policy","getSettingsPageContainerModel","SettingsPageContainerInjected","_getPollingInterval","_startPollingLab","_updateLab","_pollingInterval","idleConfigPartial","SettingsPageContainer","LabSizeInfo","ImageAndSizeInfo","CreatingView","dismissGpuBannerDialogTitle","dismissGpuBannerDialogMessage","DismissGpuBannerDialog","continueText","ClockInfoProcessEstimate","sharedImageNameValidatorMessages","sigNameRequiredError","sigNameTooLongError","sigNameContainsSpecialCharactersError","sigNameNotUniqueError","blockedCharacters","sigNameLabel","createNewImage","updateExistingImage","ImageOperation","Summary","sharedImageGalleryLink","SharedImageTextField","deferredValidationTime","onRenderSuffix","SharedImageForm","imageOperation","onUpdateOperation","createImage","updateImage","choiceFieldWrapper","onRenderField","ExportSigDialog","sigName","updateSigName","updateImageOperation","updateErrorMessage","onCreate","onUpdate","exportLabel","exportToSigTitle","char","validateSharedImageName","syncInProgressSpinnerLabel","syncInProgressSpinnerLabelNoGroupName","SyncingSpinner","templateExportingImageStatus","templateCombinedExportingAndResettingStatus","templatePublishingStatus","vNextTemplatePublishingStatus","templateScalingStatus","vNextTemplateScalingStatus","StatusSpinnerType","StatusSpinner","spinnerType","HasEditsStatus","CombinedStatus","combinedStatus","PublishedStatus","lastPublishedTime","UnpublishedStatus","unpublishedTooltip","ScalingStatus","scaling","SharedImageError","position","ExportingImageStatus","exporting","ExportedImageStatus","exportRelativeTime","ResettingPasswordStatus","resetting","PublishingStatus","truncatedTitle","publishing","templateName","PublishOperationStatus","ImageStatus","OperationIndicator","setMaxNumberOfMachinesLabel","PublishDialogContent","remainingVmsInSubscription","labMaxCapacity","hasTemplate","setMaxNumber","isLimitedCoreView","longProcessWarningSpan","publishTemplateTitle","PublishDialogFooter","PublishTemplateDialog","initialLabCapacity","QuotaBanner","usersInLab","startTemplateTitle","StartWarningTemplateDialog","continueLabel","cancelLabel","getTemplateErrorNotFound","getTemplateGenericError","updateTemplateErrorNotFound","updateTemplateErrorResourceInDeletingState","updateTemplateGenericError","stopTemplateErrorNotFound","stopTemplateErrorNoResources","stopTemplateGenericError","startTemplateErrorNotFound","startTemplateErrorNoResources","startTemplateGenericError","resetPasswordTemplateErrorNotFound","resetPasswordTemplateErrorNoResources","resetPasswordTemplateErrorResourceNotInSucceededState","resetPasswordTemplateErrorResourceDoesNotExist","resetPasswordTemplateInvalidPassword","resetPasswordVmAgentNoCommunicationError","resetPasswordTemplateGenericError","publishTemplateErrorNotFound","publishTemplateErrorNoResources","publishTemplateErrorResourceNotInSucceededState","publishTemplateErrorSubscriptionNotEnabled","publishTemplateErrorResourceNotReady","publishTemplateTotalRegionalCoreLimitError","publishTemplateErrorDiskSizeLesserThanExisting","publishTemplateGenericError","saveImageTemplateErrorNotFound","saveImageTemplateErrorInvalidUploadTargetToOverride","saveImageTemplateErrorResourceDoesNotExist","saveImageTemplateErrorNoSharedImageGalleriesAttachedToTheLabAccount","saveImageTemplateErrorAlreadyInProgress","saveImageTemplateErrorUnexpectedResourceId","saveImageTemplateErrorResourceNotInSucceededState","saveImageTemplateErrorRegionMismatch","saveImageAlreadyInProgressError","saveImageTemplateGenericError","arm64IncompatibilityError","invalidDiskSizeError","invalidImagePlanInfoError","invalidAdminUsernameError","labBeingDeletedError","imageUnavailableError","SubnetIsFullError","getStopErrorMessage","getStartErrorMessage","getResetPasswordErrorMessage","getPublishErrorMessage","getSaveImageErrorMessage","getUpdateTemplateErrorMessage","getFetchTemplateErrorMessage","TemplateErrorBanner","TemplateErrorBanners","PublishSuccessBanner","GpuDriverBanner","linkText","connectToTemplateTitle","connectTemplateButtonLabel","CustomizeMessage","areNetworkDetailsLoaded","constructAndDownloadRdpFile","getTemplateWithExpand","isLoadingNetworkDetails","setIsLoadingNetworkDetails","connectButtonLabel","connectToTemplate","exportImageDisabledMessage","reimageTemplate","showConnectionData","showSshConnectDialog","TemplateCommandBar","onOpenResetPasswordDialog","onOpenCustomizeWarningDialog","onOpenPublishDialog","onOpenExportSigDialog","onShowRdpInfoDialog","onOpenTroubleshootDialog","onReimageTemplateDialog","customize","exportToSig","exportDisabledMessage","isDisabledDueToCoreQuota","isDisabledDueToUsersExceededRemainingVms","setConnectionType","isGalleryValid","connectMenuItem","handleLoadingAndShowingConnectionInfo","startMenuItem","reimageTemplateMenuItem","editMenuItem","commandBarButtonAs","onRenderMenuIcon","subMenuProps","stopMenuItem","passwordMenuItem","separator","publishMenuItem","isExportMenuItemDisabled","exportMenuItem","bottomCenter","CommandBarButton","noTemplateItem","troubleshootMenuItem","isRedeployDisabled","overflowItems","TemplateErrorPage","templateTitle","templateDescription","templateDescriptionPlaceholder","templateTitleTooLongValidationMessage","templateDescriptionTooLongValidationMessage","TemplateTitleField","setTemplateTitle","isTitleValid","setIsTitleValid","updateTitleOrDescription","titleLabel","titleLengthValidationMessage","onBlur","_e","TemplateDescriptionField","setTemplateDescription","isDescriptionValid","setIsDescriptionValid","descriptionLabel","descriptionPlaceholder","descriptionLengthValidationMessage","subComponentStyles","TemplateOsInfo","TemplateSizeInfo","hasSizeInfo","formattedPrice","updateSharedImage","redeployTemplate","showResetPassword","setShowResetPassword","showExportSig","setShowExportSig","showPublish","setShowPublish","showCustomizeWarning","setShowCustomizeWarning","setShowSshConnectDialog","showPublishSuccessBanner","setShowPublishSuccessBanner","showDismissDialog","setShowDismissDialog","setShowRdpInfoDialog","setShowTroubleshoot","showReimageTemplateDialog","setShowReimageTemplateDialog","vmOperationStatus","templateVirtualMachine","previousTemplate","onConfirmedStartTemplate","templateStartAnnounce","onStopTemplate","templateStopAnnounce","onRedeployTemplate","templateRedeployAnnounce","exportedImageLink","GpuDriverState","Missing","acknowledgeGpuDriverWarning","templateReimageAnnounce","onReimageTemplate","TemplateContainerInjected","_startTemplate","_stopTemplate","_getTemplateWithExpand","_publishTemplate","_updateTitleOrDescription","_resetPassword","_createSharedImage","_updateSharedImage","_acknowledgeGpuDriverWarning","_clearLoadError","_pollTemplateStop","_clearError","_redeployTemplate","_reimageTemplateDialog","labResourceId","pollingIntialDelayMs","clearLoadVirtualMachinesError","errorId","shouldPollOnTemplateVM","TemplateContainer","GroupActionType","GET_GROUP_NAME","GET_GROUP_NAME_FAILED","GET_GROUP_NAME_SUCCESS","GET_GROUP_NAME_ERROR","SET_GROUP_ID","SET_GROUP_NAME","ENABLE_FILTER_BY_GROUP_ID","GET_GROUPS","GET_GROUPS_SUCCESS","GET_GROUPS_FAILED","GET_GROUPS_ERROR","getGroupNameFailed","getGroupNameSuccess","getGroupNameError","setGroupId","setGroupName","enableFilterByGroupId","filterText","getGroupsSuccess","groups","getGroupsFailed","getGroupsError","CommandButtonToolTip","labelText","FileUploadButton","inputRef","accept","labelTextInputFile","VmUsageColumn","usageAsProgressMessage","total","usageMessage","VmUsageProgressColumn","trackStyles","trackStyle","isHoveredOrSelected","emailRegex","splitEmailList","emailList","array","isValidEmail","validateEmailList","emails","FileUploadLink","validationError","chooseFileCommand","uploadCsvTooltip","uploadCsvCommand","addByEmailCommand","confirmDialogTitle","confirmDialogMessage","AddUsersFlyout","setEmails","setIsValid","setEmailAddresses","hasEmptyCsvFileError","setHasEmptyCsvFileError","csvFileName","setCsvFileName","csvFileUploaded","setCsvFileUploaded","csvFileUploading","setCsvFileUploading","_onCsvFileUpload","onloadend","files","readAsText","addTypes","spinner","filename","checkmark","green10","block","nowrap","FilteredDropdown","onGetKey","onGetText","onFilter","_value","onSelected","onInputValueChange","_composing","onFilterChanged","autofillProps","autoComplete","openOnKeyboardFocus","autofill","dropdownMaxWidth","disableSync","dropdownLabel","Persona","size40","secondaryText","tertiaryText","size24","doesTextStartWith","GroupDropdown","searchGroups","groupSelected","debouncedSearch","debounce","SyncFromGroupFlyout","isLoadingGroups","selectedGroup","setSelectedGroup","DeleteUsersDialog","InvitationFlyout","extraMessage","setExtraMessage","numberOfUsersSpan","sendOnlyUninvited","sendAll","InviteAllDialog","dialogContent","inviteCount","invitedCount","isEveryoneAlreadyInvited","includeAlreadyInvited","setIncludeAlreadyInvited","resendInviteBoldSpan","OpenAccessDialog","QuotaFlyout","initialQuota","minQuota","maxQuota","RegistrationLinkDialog","registrationLink","UserStatus","InviteStatus","expandUserActionsTooltip","restrictAccess","restrictAccessTooltip","quotaCommandScheduleOnly","quotaCommandHoursFormat","quotaTooltip","addUsersMenu","inviteAllCommand","registrationLinkCommand","filterUsers","inviteCommand","emailColumnHeader","statusColumnHeader","statusFilterSelected","invitationColumnHeader","invitationFilterSelected","notRegistered","sent","sentFormat","sending","sendingProgress","notSent","sendFailed","sendFailedFormat","adjustQuota","textFilterPlaceholder","userListCheckboxAriaLabel","usageCsvColumnName","quotaCsvColumnName","shimmerAriaLabel","addUsersManuallyCommand","syncFromGroupCommand","syncNowCommand","titleSingular","titlePlural","UserQuotaFlyout","labQuota","additionalQuotaForUsers","additionalQuota","maxAdditionalQuota","defaultAdditionalQuota","setAdditionalQuota","currentUsageDescription","additionalQuotaLabel","totalQuotaLabel","isOverQuota","totalQuotaToDisplay","userUsage","currentMaxUsage","userCount","formattedMaxUsage","maxCurrentUsage","formattedCurrentUsage","labQuotaValueMessage","additionalQuotaValueMessage","totalQuotaValueMessage","SyncUsersDialog","tenMinutes","getLastGroupSyncRelativeTime","lastGroupSyncTime","getNextGroupSyncTime","ianaTimeZone","currentDate","nowMoment","utc","scheduleUtcDate","getUTCFullYear","getUTCMonth","adjustedScheduleDate","GroupSyncTimeInfo","lastGroupSyncRelativeTime","UserListInjected","onUserPropsChange","previousSelectedIds","selectedIds","selectedItems","deleteSelectTarget","inviteSelectTarget","quotaSelectTarget","canDelete","canInvite","canInviteAgain","canAddQuota","selectedCount","filterAndSortUsers","filterUserStatus","filterInviteStatus","sortByColumn","sorterStateMap","inviteStatus","_onExportClicked","userListViewModel","userStatusMap","_buildUserStatusMap","inviteStatusMap","_buildInviteStatusMap","writer","createObjectCsvStringifier","records","csv","getHeaderString","stringifyRecords","userListCommonMessages","_renderListHeader","_renderDefaultCommandBar","_renderFilterBar","_renderSelectionCommandBar","_createColumns","_onAccessDialogSubmit","_onAccessModeToggle","_onAddUsersFlyoutSubmit","_onClearInviteStatusFilter","_onClearUserStatusFilter","_onCloseFilter","_onColumnClick","_onDeleteDialogSubmit","_onFilterInviteStatusChange","_onFilterTextChange","_onFilterUserStatusChange","_onInvitationFlyoutSubmit","_onOpenFilter","_onQuotaFlyoutSubmit","_onRenderNameColumn","_onRenderUploadCsv","_getFilterText","_getQuotaCommandName","_onDismissInviteAllDialog","_onSubmitInviteAllDialog","_onInviteAllClicked","_onInviteClicked","_onLabQuotaClicked","_onUserQuotaClicked","_onDeleteUserClicked","_onRenderRow","_onSyncUsersDialogSubmit","_selection","Selection","onSelectionChanged","getSelection","showFilter","showOpenAccessDialog","showRegistrationLinkDialog","showDeleteUsersDialog","showInviteAllDialog","showSyncUsersDialog","showAddUsersFlyout","showSyncFromGroupFlyout","showInvitationFlyout","showQuotaFlyout","showUserQuotaFlyout","addUserEmails","hoveredId","inviteIds","setItems","setAllSelected","setKeySelected","clearUpdateAdditionalQuotaForUsersError","isRestricted","isAdding","isInviting","isUpdatingLab","isUpdatingUsers","hasAddErrors","hasDeleteErrors","hasInviteErrors","hasUpdateErrors","isLabLmsConnected","columns","sortedItems","detailsList","ShimmeredDetailsList","data-is-scrollable","selectionMode","SelectionMode","multiple","setKey","layoutMode","DetailsListLayoutMode","justified","isHeaderVisible","selection","onRenderDetailsHeader","onRenderRow","enterModalSelectionOnTouch","ariaLabelForSelectionColumn","ariaLabelForSelectAllCheckbox","checkButtonAriaLabel","checkboxVisibility","CheckboxVisibility","always","compact","enableShimmer","ariaLabelForShimmer","nextGroupSyncTime","tooltipProps","ScrollablePane","scrollbarVisibility","ScrollbarVisibility","auto","MarqueeSelection","group","isDeletionExternallyManaged","_onSyncFromGroupFlyoutSubmit","_onSyncFromGroupFlyoutSearchForGroups","u","_getSelectedUsers","_onUserQuotaFlyoutSubmit","failed","sendingFailed","onMouseEnter","onMouseLeave","Sticky","stickyPosition","StickyPositionType","Header","isScrollSynced","onRenderColumnHeaderTooltip","tooltipHostProps","exportItem","filterItem","syncItem","inviteAllItem","registrationLinkItem","separatorItem","accessModeItem","addUsersMenuItem","quotaItem","isEmptyUsersInGroupSyncedLab","deleteTarget","inviteTarget","quotaTarget","numberOfObjects","availableUserStatuses","self","availableInviteStatus","availableUserStatusOptions","canCheck","preventDefault","sortBy","availableInviteStatusOptions","stateMap","shouldHideEmailColumn","nameColumnLabel","emailColumnLabel","statusColumnLabel","inviteStatusColumnLabel","usageColumnLabel","isRowHeader","isResizable","isSorted","isSortedDescending","sortAscendingAriaLabel","sortDescendingAriaLabel","onColumnClick","column","isCollapsable","isCollapsible","latestRegistrationLinkEmailSent","numberOfHours","updateAccessMode","updateQuota","userQuotaUpdateAnnounce","updateUserQuota","syncFromGroup","searchForGroups","inviteUsers","userStatus","syncUsers","borderStyle","itemHasActions","size28","topRightEdge","UserList","convertUserDetails","labQuotaInHours","nameSortValue","isSendingInivatationPending","Sending","canSendInvitation","NotSent","Sent","getVNextUserDetails","givenName","registrationLinkEmailState","RegistrationLinkEmailState","getUserDetails","getRegistrationLink","invitationCode","isDev","getUserListViewModel","getVNextLabGroupId","userData","addErrors","deleteErrors","inviteErrors","updateErrors","addError","inviteError","getUserListContainerModel","UserListContainerInjected","_updateLabAccessMode","Open","_updateLabQuota","_updateUserQuota","updateAdditionalQuotaForUsers","_addUsers","_syncFromGroup","_searchForGroups","_inviteUsers","_deleteUsers","_syncUsers","nextPollingInterval","userId","UserListContainer","CoresRemainingMessage","initialCapacity","formCapacity","additionalVms","CapacityFlyout","minCapacity","maxCapacityOfLab","StartVmsDialog","labCapacityCommandFormat","stopAllCommand","startAllCommand","filterVirtualMachines","startCommand","stopCommand","resetCommand","connectCommand","stateColumnHeader","osColumnHeader","lastUsedColumnHeader","typeFilterMenu","typeFilterMenuSelected","stateFilterMenuSelected","assignedType","unassignedType","preparingToConnect","privateIpColumnHeader","vmListCheckboxAriaLabel","VmListInjected","onVmsPropsChange","stopTargets","startTargets","resetTargets","redeployTargets","onExpandingStateChange","previousConnectExpandData","expandingIds","connectExpandData","finishedExpandingItems","_onConnect","filterAndSortVms","filterStates","filterTypes","vmStateMap","_buildVmStateMap","commonVmListMessages","_buildVmAssignedTypeMap","_isStopAllEnabled","_onCapacityFlyoutSubmit","_onRenderStateColumn","_onResetDialogSubmit","_onStartDialogSubmit","_onStopAllClicked","_onStopClicked","_onFilterTypeChange","_onFilterStateChange","_onClearTypeFilter","_onClearStateFilter","_onFilterClose","_onFilterOpen","_isStartAllEnabled","_onDismissConnectDialog","_onDismissedConnectDialog","_onConnectSsh","_onConnectRdp","_onConnectSshInBrowser","_onConnectRdpInBrowser","_onRedeployClicked","showCapacityFlyout","showStartDialog","showResetDialog","showSshDialog","wasStartAllInvoked","showInfoBanner","itemsArray","clearRedeployError","vmAssignedTypeMap","DetailsList","setTroubleshootDialog","running","stopped","tup","availableTypes","availableStates","availableTypeOptions","availableStateOptions","selectedTypes","selectedStates","stateColumnLabel","privateIPColumnLabel","fieldName","vmParentIdParts","isSingleSelect","canShowRdpInfo","canShowRedeployButton","connectItemProps","onRenderIcon","rdpInfoProps","redeployButtonProps","resetButtonProps","updateCapacity","openDialog","filterType","oldFilterTypes","filterState","oldFilterStates","getEnvironmentNetworkData","VmList","determineEnvironmentsPollingIntervalLength","getAllPossibleErrorIds","results","VmListContainerInjected","_startPollingEnvironments","_startPollingUsers","_getEnvironmentNetworkData","_updateLabCapacity","_startEnvironments","_stopEnvironments","_clearStartError","_clearStopError","_redeployVirtualMachines","_clearRedeployError","_environmentsPollingIntervalMs","determineEnvironmentsPollingInitialDelay","errorIds","VmListContainer","navButtonStyles","neutralLighter","neutralLight","navButtonSelectedStyles","neutralQuaternaryAlt","navButtonIconOnlyStyles","navButtonSelectedIconOnlyStyles","navButtonHeader","collapseAriaLabel","expandAriaLabel","labAppNavAriaLabel","LabAppNav","expanded","updateExpanded","encodedRoute","buttonSelectedStyles","headerAria","navAriaLabel","aria-expanded","LabCreatingView","PermissionPropagationView","LabAppMessageBar","isBlockedLab","templateCreateError","LabApp","labAppViewModel","isInitializing","showOldV1GpuLabBanner","mainRef","navExpanded","updateNavExpanded","focus","getLabAppViewModel","isAppInitializing","currentLabExists","isLabCreating","getLabAppContainerModel","LabAppContainerInjected","previousCurrentLabId","previousLabAppViewModel","LabAppContainer","clearSelectedLabParent","welcomeViewModel","currentLabParentResourceId","getWelcomeViewModel","getWelcomeContainerModel","WelcomeContainerInjected","WelcomeContainer","TeamsActionType","teamsInitialize","teamsInitializeSuccess","teamsInitializeError","teamsDisableSaveButton","teamsDisableSaveButtonSuccess","teamsDisableSaveButtonError","disableSaveButtonError","teamsConfigureTab","teamsConfigureTabSuccess","teamsConfigureTabError","configureTabError","teamsStartMfa","teamsStartMfaError","teamsStartMfaRedirecting","teamsCompleteMfa","teamsCompleteMfaSuccess","teamsCompleteMfaFailed","teamsCompleteMfaError","setUserTeamRole","userTeamRole","setTeamsChannelType","channelType","setTeamsTheme","teamsChooseLabAccountMessage","TeamsChooseLabParentContent","defaultSelectedId","defaultSelectedItem","setSelectedOption","responsiveMode","ResponsiveMode","TeamsSingleLabParentContent","isRefreshing","refreshLabParents","labParentName","TeamsConfigureLabParent","hasSingleLabParent","TeamsGetStartedContent","showNoFoundLabAccountsMessage","Link1","Link2","simpleUserExperience","simpleUserExperienceDescription","flexibilityInCreatingLab","flexibilityInCreatingLabDescription","costOptimization","costOptimizationDescription","payForWhatYouNeed","payForWhatYouNeedDescription","computerLabsInCloud","aboutAzureLabServicesContentPartOne","aboutAzureLabServicesContentPartTwo","aboutAzureLabServicesKeyCapabilities","simpleUserExperienceCapability","flexibilityCapability","costOptimizationCapability","automaticManagementAndScalingCapability","syncWithTeams","addUsersInTeams","deleteUsersInTeams","isStudent","isInvalidChannel","UserTeamRole","convertUserTeamRole","ChannelType","convertChannelType","TeamsTheme","convertTeamsTheme","teamsTheme","isTeamsAdmin","isRegularChannel","getTeamsConfigViewModel","hasRefreshError","hasRefreshed","getTeamsConfigContainerModel","teamsConfigViewModel","TeamsConfigContainerInjected","TeamsConfigContainer","ProfessorApp","isTeamsModeEnabled","ProfessorAppContainerInjected","ProfessorAppContainer","SignInRedirectPage","SignInRedirectPageContainerInjected","SignInRedirectPageContainer","SignInReturnPage","isMfaReturnUrl","SignInReturnPageContainerInjected","SignInReturnPageContainer","registeringLoadingLabel","registerHeaderLabel","RegisterUser","registerViewModel","loadingStatus","registeringHeader","registrationSuccess","registrationInProgress","getRegisterViewModel","getRegisterContainerModel","RegisterUserContainer","container","StudentApp","routeProps","StudentAppContainerInjected","StudentAppContainer","signedOutMessage","UserLoggedOut","UserLoggedOutContainer","TeamsStartMfaContainer","TeamsCompleteMfaContainer","LtiStartOidcContainer","AppInjected","_onIdle","appContent","isSigningOut","shouldHideLoadingHeader","isTeamsHosted","isPoppingUp","isLmsCourseStudent","onIdle","htmlAttributes","dir","App","Root","history","Fabric","Boolean","unregister","serviceWorker","ready","registration","Modes","FetchMock","fallbackToNetwork","QueryString","scenario","clearRegisterErrors","clearRegisterState","initialState","Record","registerReducer","setPendingEnvironmentState","clearPendingEnvironmentState","addEnvironmentFailure","errorMap","clearSingleEnvironmentError","listGlobalUserEnvironments","oldEnvironmentState","listGlobalUserEnvironmentsCancelled","listGlobalUserEnvironmentsSuccess","environmentArray","listGlobalUserEnvironmentsError","clearListUserEnvironmentsError","clearStartEnvironmentError","clearStopEnvironmentError","resetPasswordErrors","clearResetEnvironmentPasswordError","clearErrors","userEnvironmentReducer","Theme","Default","LmsBasics","initializeFailed","professorInitializeFailed","studentInitializeFailed","labAppInitializeFailed","commonReducer","addOrUpdateLab","oldLab","labsIndex","_error","labReducer","LabAccountActionType","LIST_LAB_ACCOUNTS","LIST_LAB_ACCOUNTS_SUCCESS","LIST_LAB_ACCOUNTS_ERROR","REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS","REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_SUCCESS","REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_ERROR","GET_LAB_ACCOUNT","GET_LAB_ACCOUNT_SUCCESS","GET_LAB_ACCOUNT_ERROR","LOAD_SUBSCRIPTION_LAB_ACCOUNTS_ERROR","listLabAccounts","listLabAccountsSuccess","listLabAccountsError","refreshSubscriptionsAndLabAccounts","refreshInitializationState","refreshSubscriptionsAndLabAccountsSuccess","refreshSubscriptionsAndLabAccountsError","loadSubscriptionLabAccountsError","isGettingLabAccount","getLabAccountSuccess","getLabAccountError","labAccountReducer","settingsUpdate","settingsExist","authState","identityReducer","removeAtIndex","sch","errorList","scheduleReducer","clearErrorsByOperation","newErrorMap","envId","newErrors","ensureExpandedInfoNotLost","expandedTemplate","newTemplate","ensurePendingStateNotLost","oldTemplate","templateIndex","findTemplate","startingTemplate","errorTemplate","stoppingTemplate","errorStore","resettingTemplate","PublishFailed","templateReducer","SubscriptionActionType","LOAD_SUBSCRIPTIONS","LOAD_SUBSCRIPTIONS_SUCCESS","LOAD_SUBSCRIPTIONS_ERROR","CHECK_FEATURE_ERROR","loadSubscriptions","loadingState","loadSubscriptionsSuccess","subscriptions","loadSubscriptionsError","subscriptionReducer","galleryImageReducer","sharedImageReducer","updateUser","newUsers","updateAdditionalQuota","updateAdditionalQuotaSuccess","updateUsers","updateAdditionalQuotaError","entries","clearUpdateAdditionalQuotaError","updatedUsers","currentUsers","currentUserIndex","userReducer","newEnvironments","oldEnvironments","newEnvironment","preserveNetworkInterface","mergeEnvironments","setPendingState","mergeEnvironment","templateEnvironment","oldEnvironment","oldNetworkInterface","environmentReducer","PricingAndAvailabilityActionType","GET_PRICING_AND_AVAILABILITY_DATA","GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS","GET_PRICING_AND_AVAILABILITY_DATA_ERROR","CLEAR_PRICING_AND_AVAILABILITY_ERROR","GET_LAB_PRICING_AND_AVAILABILITY_DATA","GET_LAB_PRICING_AND_AVAILABILITY_DATA_SUCCESS","GET_LAB_PRICING_AND_AVAILABILITY_DATA_ERROR","CLEAR_LAB_PRICING_AND_AVAILABILITY_ERROR","getPricingAndAvailabilityDataSuccess","getPricingAndAvailabilityDataError","labError","getLabPricingAndAvailabilityDataSuccess","labData","getLabPricingAndAvailabilityDataError","clearLabData","pricingAndAvailabilityReducer","CoreLimitActionType","GET_CORE_RESTRICTIONS_AND_USAGE","GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS","GET_CORE_RESTRICTIONS_AND_USAGE_ERROR","GET_CORE_RESTRICTIONS_AND_USAGE_CANCELLED","getCoreRestrictionsAndUsages","getCoreRestrictionsAndUsagesSuccess","coreRestrictionsAndUsages","newUsages","newRestrictions","getCoreRestrictionsAndUsagesError","getCoreRestrictionsAndUsagesCancelled","coreLimitReducer","groupsLoadState","groupReducer","teamsReducer","TenantActionType","LIST_TENANTS","LIST_TENANTS_SUCCESS","LIST_TENANTS_ERROR","SELECT_TENANT_ERROR","listTenants","listTenantsSuccess","listTenantsError","TenantReducer","OperationsResultActionType","POLL_OPERATIONS_RESULT","POLL_PUBLISH_OPERATION_RESULT","POLL_PUBLISH_OPERATION_RESULT_SUCCESS","POLL_PUBLISH_OPERATION_RESULT_CANCELLED","POLL_OPERATIONS_RESULT_SUCCESS","POLL_OPERATIONS_RESULT_CANCELLED","POLL_OPERATIONS_RESULT_ERROR","POLL_USER_OPERATIONS_RESULT","POLL_USER_OPERATIONS_RESULT_SUCCESS","POLL_USER_OPERATIONS_RESULT_CANCELLED","POLL_USER_OPERATIONS_RESULT_ERROR","listVirtualMachines","oldLoadState","listVirtualMachinesCancelled","listVirtualMachinesSuccess","listVirtualMachinesError","oldState","startVirtualMachines","virtualMachineIds","startVirtualMachinesAccepted","mergeOperations","resetVirtualMachinesAccepted","redeployVirtualMachinesAccepted","pollOperationsResultSuccess","prevOperationsArr","prevOp","startVirtualMachinesError","stopVirtualMachines","stopVirtualMachinesAccepted","stopVirutalMachinesError","resetVirtualMachines","resetVirtualMachinesError","getVirtualMachine","getVirtualMachineSuccess","newVirtualMachine","mergeVirtualMachine","getVirtualMachineCancelled","getVirtualMachineError","resetTemplatePassword","resetTemplatePasswordError","clearVirtualMachineGetError","operationsError","vNextVirtualMachineReducer","setPendingVirtualMachineState","clearPendingVirtualMachineState","addVirtualMachineError","clearSingleVirtualMachineError","clearVirtualMachineError","listUserVirtualMachines","listUserVirtualMachinesCancelled","listUserVirtualMachinesError","clearListUserVirtualMachinesError","startVirtualMachine","startVirtualMachineAccepted","stopVirtualMachineAccepted","reimageVirtualMachineAccepted","redeployVirtualMachineAccepted","userOperationsResultSuccess","startVirtualMachineFailed","clearStartVirtualMachineError","stopVirtualMachine","stopVirtualMachineFailed","clearStopVirtualMachineError","resetVirtualMachinePassword","resetVirtualMachinePasswordFailed","clearResetVirtualMachinePasswordError","userVirtualMachineReducer","getLabResourceGroupId","listVNextLabs","resourceGroupPropagatingLabsMap","labIds","d","permissionPropagatingLabs","propagatingLab","RGIds","labIndex","clearLabPublishError","arr","labErrors","oldOpenAccess","setPendingLabState","publishLab","publishVNextLabAccepted","labPublishOperations","pollOperationResultSuccess","publishLabError","hasCreateLabPermissionOnLabPlan","isUpdatingMetadata","LabParentResourceReducer","coreUsageReducer","addOrUpdateLabPlan","oldLabPlan","listLabPlans","currentLabPlanId","updatedLabPlans","labPlanIds","updateLmsErrors","labPlanReducer","listLabPlanImages","listLabPlanImagesSuccess","listLabPlanImagesError","createImageAccepted","ImageReducer","_id","setPendingProvisioningState","clearUserErrors","authenticationState","requestWebStorageAccessError","ltiReducer","SkuActionType","LIST_SKU_DATA","LIST_SKU_DATA_SUCCESS","LIST_SKU_DATA_ERROR","listSkuData","listSkuDataSuccess","listSkuDataError","skuReducer","UsageActionType","LIST_USAGE_DATA","LIST_REGION_USAGE_DATA_SUCCESS","LIST_USAGE_DATA_ERROR","LIST_USAGE_DATA_CANCELLED","LIST_USAGE_DATA_SUCCESS","listUsage","listRegionUsageSuccess","listUsageError","listUsageSuccess","listUsageCancelled","usageReducer","PriceActionType","LIST_PRICE_DATA","LIST_PRICE_DATA_SUCCESS","LIST_PRICE_DATA_ERROR","LIST_PRICE_DATA_CANCELLED","listPriceData","listPriceDataSuccess","listPriceDataError","listPriceDataCancelled","priceReducer","combinedReducer","combineReducers","subscriptionStore","environmentStore","groupStore","teamsStore","tenantStore","router","connectRouter","ltiStore","vNextPricingAndAvailabilityStore","vNextpricingAndAvailabilityReducer","vNextUserVirtualMachineReducer","vNextRegisterReducer","vNextLabReducer","vNextScheduleStore","vNextSchedulerReducer","vNextCoreUsageStore","vNextImageStore","imageReducer","vNextVirtualMachineStore","vNextUserStore","vNextUserReducer","vNextUsageStore","vNextPriceStore","ArmUrl","baseUriVNext","ArmUrlVNext","getMlClient","azureToken","TokenCredentials","ManagedLabsClient","adjustForEnvironment","createVNextArmApiClient","AzureTokenCredentials","ArmProvider","post","enableProxy","ArmProxyUrl","disableProxy","processPowerState","processVmState","activeRequestUri","processProvisioningState","_convertEnvironmentFromListAllEnvironmentDetails","serverEnvironment","envState","environmentState","provState","virtualMachineDetails","processEnvironmentState","processOperationSystem","mlClient","customHeaders","globalUsers","listAllEnvironments","beginStartEnvironment","beginStopEnvironment","UserEnvironmentProvider","getUserEnvironment","processUrlFeature","processUrlFeaturesSaga","enableFeatureSaga","disableFeatureSaga","isFeatureParam","featureParam","formatFeatureParam","getFeature","resolveUrlFeature","searchParams","urlParams","param","put","enableFeatureActionCreator","select","lastIndexOf","queryString","all","currentSearch","urlFeatureParam","takeLatest","takeEvery","useMsal","notifyAppLoaded","msTeams","notifySuccess","disableSaveButton","setValidityState","configureTab","shouldAddVNextFeatureWQueryParam","getContext","tid","labParentRoute","contentUrl","encodeURIComponent","websiteUrl","registerOnSaveHandler","saveEvent","setSettings","entityId","clearCacheForScopeMsal","getAccessTokenMsal","successCallback","failureCallback","reason","silent","getAuthToken","loginSilentMsal","accountIdentifier","homeAccountIdentifier","idToken","sid","configureArmAndAuth","msalSignInResult","requestUserConsentOrMfa","authenticate","notifyMfaSuccess","notifyMfaFailure","notifyFailure","getLtiTokenRequest","getLtiTokenSaga","getLtiTokenRequestSaga","exp","createTokenPromise","getLtiTokenActionCreator","tokenPromiseWait","getArmAccessTokenSaga","getLabsApiAccessTokenSaga","getGraphAccessTokenSaga","getAccessTokenRequest","watchGetAccessTokenRequests","rej","shouldAlwaysUseLtiTokenWhenInLms","shouldUseLtiToken","getAccessTokenTeams","actionChannel","requestChannel","take","createLabsApiClient","labsApiClient","userVirtualMachines","startVmResult","parsedBody","stopVmResult","reimageVmResult","redeployVmResult","UserVirtualMachinesProvider","featureBasedTakeLatest","pattern","vCurrentWorker","vNextWorker","helper","fork","featureBasedTaskHelper","GetOperationsResult","publishOperationResultSuccess","operationsResultCancelled","publishOperationResultCancelled","operationsResultError","userOperationsResultCancelled","userOperationsResultError","getOperationsInProgress","getUserOperationsInProgress","filteredOperations","getLabOperations","processTemplateEnvironment","mlEnvironment","claimedByUserName","resourceSets","vmResourceId","environmentNetworkInterface","templateEnvironments","EnvironmentProvider","deleteEnvironment","armApiClient","nextPage","asyncOperationUrl","getInitialResponse","asyncPollOperationUrl","log","URL","armGet","resultPromise","operationResult","regex","operationRegion","VirtualMachineProvider","reimageVirtualMachine","redeployVirtualMachine","getOperationResultLabsApi","getOperationResultARM","labParentBasedTaskHelper","labAccountWorker","resourceGroupWorker","labParentBasedTakeLatest","labParentBasedTakeEvery","getOperationsResult","listVNextVirtualMachines","pollEnvironments","pollOperationsSaga","pollEnvironmentsSaga","listEnvironmentsSaga","race","callGetOperationResult","armAccessToken","labsApiAccessToken","isUserEnvironment","pollingInterval","operationsResult","cancelled","listEnvironmentsActionCreator","pollOperationsTask","pollEnvironmentsTask","pollForEnvironments","pollUserEnvironmentsSaga","pollUserOperations","pollUserOperationsSaga","listAllUserVirtualMachines","listVCurrentVirtualMachines","listVCurrentVirtualMachinesSaga","listVNextVirtualMachinesSaga","getErrorForOperation","failureOp","hasOperationFailed","previousEnvironment","currentEnvironment","getUserEnvironmentSelector","f","pollUserEnvironmentsTask","userOperationsResult","pollUserOperationsTask","shouldListVNextVirtualMachinesOnly","apiCallRace","vNext","failure","vCurrent","apiCallResult","environmentIdBasedTaskHelper","environmentIdBasedTakeLatest","environmentIdBasedTakeEvery","getUserVirtualMachines","startVNextVirtualMachine","stopVNextVirtualMachine","resetVNextVirtualMachinePassword","startEnvironmentSaga","stopEnvironmentSaga","resetEnvironmentPasswordSaga","userVirtualMachine","startVNext","stopVNext","resetPasswordVNext","reimageVirtualMachineSaga","reimageVmsResult","redeployVirtualMachineSaga","redeployVmsResult","rootSaga","guidRegex","isVNextRegistrationCode","isGuid","registrationCodeLengthBasedTakeLatest","registrationCodeLengthBasedBasedTaskHelper","registerVNextUser","registerUserSaga","registerVNext","ActionPermissions","WriteLab","VNextActionPermissions","WriteLabPlan","WriteLabVm","VNextDataActionPermission","CreateLabInLabPlan","hasAccess","actionToCheck","resourcePermissionsUrl","permissions","hasDataActionAccess","hasActionAccess","resourcePermissions","explicitactionPermissions","allPermissions","dataActions","PermissionsProvider","getLabRoles","mlLabs","beginDeleteLab","updatedLab","sendEmail","getPricingAndAvailability","getLabPricingAndAvailability","beginSyncUserList","LabProvider","syncUserList","publishLabResult","labUpdateData","listSubscriptionLabs","listResourceGroupLabs","createOrUpdateLab","syncLabUser","beginUpdateLab","getOperationResult","listLabsForLabAccount","listLabsOnLabParentChange","pollLabList","pollLabListSaga","loadSubscriptionVNextLabs","listLabsSaga","listLabsOnLabParentChangeSaga","listLabsActionCreator","errorAction","pollLabListTask","checkVNextCreateLabPermissionOnLabPlan","checkVNextCreateLabPermissionOnLabPlanSaga","newHasCreateLabPermissionOnLabPlan","pollLab","shouldPoll","labSuccess","pollLabSaga","getLabSaga","pollLabOperationSaga","VNextLabProvider","pollTask","deleteVNextLab","deleteLabSaga","errorObject","policyDefinitionId","updateLabSaga","operationUrl","listSubscriptionLabAccounts","uniqBy","getRestrictionsAndUsage","createProps","operatingSystems","LabAccountProvider","createLabSaga","clearCacheForScopeTeams","updateLabAccessModeSaga","syncVNextLabUsers","syncLabUsersSaga","publishVNextLabSaga","LabsApiLabProvider","ResourceMetaDataProvider","getLabMetadataSaga","getLabAccountSaga","loadSubscriptionLabAccounts","listLabAccountsSaga","getFirstValidLabAccount","validLabAccounts","loadLabAccountsCalls","labAccountsResults","firstLabAccount","selectedLabAccountId","la","rememberLabAccount","rememberVNextLabParent","rememberLabAccountSaga","lastUsedLabParent","checkFeatureError","refreshSubscriptionsAndLabAccountsSaga","loadSubscriptionErrorAction","listLabAccountsErrorAction","updateTelemetryUserId","signInSaga","updateTelemetryUserIdSaga","shouldPopupWindow","loginSilentTeams","signOutSaga","graphPictureUrl","getUserPhotoUrl","pictureBlob","pictureUrl","createObjectURL","loadUserPhotoSaga","photoUrl","clearUserSessionSaga","clearMsalUserSession","getCacheKey","updateSettingsCache","getUserSettingsFromCache","settingsJson","lastUsedLabAccount","UserSettingsProvider","convertResponse","createUserSettings","loadVNextUserSettings","loadUserSettingsSaga","errorString","errorPayloadString","errorResult","VNextUserSettingsProvider","updateVNextUserSettings","updateUserSettingsSaga","delayed","requestUserConsentSaga","getDateInLocalTime","dateString","dateAndTimeSplit","dateSplit","timeSplit","second","adjustScheduleDatesIfNeeded","scheduleJson","adjustedSchedules","newStart","newEnd","adjustScheduleDateIfNeeded","listWithHttpOperationResponse","scheduleHttpResponse","scheduleJsonResponse","bodyAsText","createOrUpdateWithHttpOperationResponse","createdScheduleHttpResponse","deserializedSchedule","bodyAsJson","scheduleJsonWithoutDeserializedDates","ScheduleProvider","createOrUpdateSchedule","newStop","newExpirationDate","updatedSchedule","listSchedulesSaga","VNextScheduleProvider","createScheduleSaga","createdSchedule","deleteVNextSchedule","deleteScheduleSaga","updateScheduleSaga","expandParams","environmentSettings","TemplateProvider","beginCreateTemplate","listTemplatesSaga","updateTemplateSaga","getTemplateSelector","updatedTemplate","resetVNextTemplatePassword","resetPasswordSaga","pollTemplate","pollTemplateSaga","getTemplateSaga","getTemplateActionCreator","publishTemplateSaga","startTemplateSaga","stopTemplateSaga","getQueryParams","cancelableHelper","successPattern","errorPattern","cancelPattern","worker","task","cancelledAction","cancelableTakeLeading","takeLeading","labParentBasedCancelableTakeLeading","initializeSaga","ltiError","initMsal","teamsError","settingsErrorAction","settingsError","selectTenantError","professorInitializeSaga","tenantError","signedInTenantId","tenantErrorAction","lastUsedSubscriptionId","getGroupNameFromStore","studentInitializeSaga","listUsageData","regions","listRegionUsageDataSuccess","listUsageDataError","listUsageDataSuccess","listUsageDataCancelled","vNextLabAppInitialize","labAppStartupSaga","isListingLabs","listTemplatesEffect","labResult","templateResult","getLabFromLabStore","currentLabGroupId","currentLabGroupName","templateError","oldVnextLabPermissionPropagating","routeChange","routeChangeSaga","routeLabParentId","routeLabId","LOCATION_CHANGE","fatalErrorSaga","idleTimeoutSaga","DefaultTheme","themeLighterAlt","themeLighter","themeLight","themeTertiary","themeSecondary","themeDarkAlt","themeDarker","neutralLighterAlt","neutralQuaternary","neutralTertiaryAlt","neutralTertiary","neutralSecondary","neutralPrimaryAlt","neutralPrimary","neutralDark","black","white","CanvasTheme","loadTeamsOrDefaultTheme","loadTeamsOrDefaultThemeSaga","setThemeSaga","setThemeAction","loadTheme","processQueryParamsSaga","queryLocale","queryHost","queryTenantId","queryGroupId","queryLoginHint","setLocaleSaga","processSubs","subs","sub","listSubscriptionsForTenant","subsResponse","enabledSubs","pageSubs","getAllFeatureFlags","allFeatureFlagsUrl","allFeaturesResult","loadSubscriptionsSaga","checkCalls","foundFeatures","listGalleryImagesSaga","templateResourceId","SharedImageProvider","listSharedImagesSaga","getLabPlanRoles","listSubscriptionLabPlans","labPlanUpdate","saveImageBody","LabPlanProvider","updateLabPlan","createVNextSharedImage","createSharedImageSaga","labPlanResourceId","updateVNextSharedImage","updateSharedImageSaga","getSharedGallerySaga","userResourceId","labAccountResourceId","updatedUser","UserProvider","deleteUser","newUser","inviteUser","addUser","listVNextUsers","pollUsers","pollUsersSaga","listUsersSaga","VNextUserProvider","listUsersActionCreator","pollUsersTask","getUsers","getVNextUsers","addVNextUsers","addUsersSaga","newEmails","callAddUser","emailAddress","successfulUsers","deleteVNextUsers","deleteUsersSaga","callDeleteUser","resourceIds","failedIds","successIds","callDeleteVNextUser","inviteVNextUsers","inviteUsersSaga","callInviteUser","updateVNextAdditionalQuota","updateAdditionalQuotaSaga","callUpdateUser","selectedUsersWithQuota","callUpdateVNextUser","resetVNextVirtualMachines","resetEnvironmentsSaga","callResetEnvironment","callResetVNextVirtualMachine","resetVmsResult","startVNextVirtualMachines","startEnvironmentsSaga","callStartEnvironment","callStartVNextVirtualMachine","startVmsResult","stopVNextVirtualMachines","stopEnvironmentsSaga","callStopEnvironment","callStopVNextVirtualMachine","stopVmsResult","getVNextVirtualMachine","getEnvironmentSaga","pollVirutalMachine","pollVirtualMachineSaga","getEnvironmentActionCreator","redeployVNextVirtualMachines","redeployVirtualMachinesSaga","callRedeployVNextVirtualMachine","getVNextPricingAndAvailabilityDataSuccess","getPricesAndAvailabilityOnLabParentSelect","getVnextPricingAndAvailabilityData","getPricesAndAvailabilityOnLabParentSelectSaga","getPricingAndAvailabilityDataSaga","getPricingAndAvailabilityDataActionCreator","getLabPricesAndAvailabilityOnLoadTemplate","getLabPricesAndAvailabilityOnLoadTemplateSaga","getLabPricingAndAvailabilityDataSaga","getLabPricingAndAvailabilityDataActionCreator","getVNextCoreUsagesSuccess","CoreUsageProvider","getCoreRestrictionsAndUsage","getCoreLimitsOnLabParentSelect","getCoreLimitsOnLabSelect","getCoreLimitsOnPublishTemplate","getCoreLimitsOnCreateLabSuccess","getCoreLimitsOnUpdateLabSuccess","getVNextCoreUsage","getVNextCoreUsageOnUpdateLabSuccess","getCoreUsageOnPublishVNextLab","getCoreLimitsSaga","getCoreLimitsOnSelectLabParentResourceSaga","getCoreLimitsOnSelectLabSaga","getCoreLimitsOnPublishTemplateSaga","getCoreLimitsOnCreateLabSuccessSaga","getCoreLimitsOnUpdateLabSuccessSaga","getCoreUsageOnPublishVNextLabSaga","getCoreRestrictionsActionCreator","previousCoreData","newCores","newUsage","newCoreData","graphGroupsUrlBase","getGroup","listGroups","groupsFetchUrl","getGroupNameById","minimizeGroup","isTeamsGroup","creationOptions","resourceProvisioningOptions","getGroupNameSaga","getGroupsSaga","getGroupsFromGraph","configureTabSaga","disableSaveButtonSaga","teamsInitializeSaga","teamName","teamsUserTeamRole","teamsChannelType","isTeamsConfigPage","isMfa","teamsStartMfaSaga","signInReturnUrl","accessTokenReturnUrl","teamsCompleteMfaSaga","tenantResponse","listUserTenants","listTenantsSaga","selectTenantSaga","loadSubscriptionLabPlans","listLabParentResourcesSaga","getVNextLabParentItem","getFirstValidLabParentId","loadLabsCalls","loadLabPlansCalls","firstLabParentId","selectedLabParentId","foundInLabAccounts","foundInLabPlans","foundInLabs","refreshSubscriptionsAndLabParentResourcesSaga","listLabParentResourcesErrorAction","imageId","ImageProvider","listImagesSaga","ltiStartOidcSaga","ltiSignInSaga","toolPlatform","lms","pfc","namesRoleServices","customClaims","setScheme","ltiRequestStorageAccess","ltiRequestStorageAccessSaga","SkuProvider","listSkus","listSkusOnLabParentSelect","listSkusSaga","listSkusOnLabParentSelectSaga","UsageProvider","listUsageSaga","usageCalls","PriceProvider","listPrice","listPriceSaga","priceCalls","getLabPlanSaga","selectLabPlanSaga","getLabPlanAction","updateLabPlansLmsSettingsSaga","callLinkLms","successfulLabPlans","callUnLinkLms","newLabPlan","labsAccessToken","linkLabPlanCalls","unlinkLabPlanCalls","userEnvironmentRootSaga","registerRootSaga","galleryImageRootSaga","sharedImageRootSaga","labRootSaga","labAccountRootSaga","identityRootSaga","scheduleRootSaga","templateRootSaga","commonRootSaga","subscriptionRootSaga","userRootSaga","environmentRootSaga","pricingAndAvailabilityRootSaga","getCoreLimitsRootSaga","groupRootSaga","teamsConfigRootSaga","tenantRootSaga","vNextLabParentResourceRootSaga","vNextImageRootSaga","ltiRootSaga","skuRootSaga","usageRootSaga","priceRootSaga","labPlanRootSaga","ignoreActions","logAction","scrubbedAction","cleanPii","actionLoggerMiddleware","CALL_HISTORY_METHOD","scrubbedPayload","seen","stringified","safeParse","deleteProperty","actionName","object","fatalErrorMiddleware","storeState","alreadyHasFatal","environmentIdBasedActions","featureFlagOnlyBasedActions","vNextMiddleware","isResourceGroup","configureStore","sagaMiddleware","createSagaMiddleware","middleware","createRouterMiddleware","enhancer","composeWithDevTools","maxAge","composeEnhancers","applyMiddleware","createStore","run","svgIcons","viewBox","fill","xmlns","cx","cy","gradientUnits","gradientTransform","stopColor","stroke","strokeWidth","strokeMiterlimit","strokeLinecap","strokeLinejoin","logo","strokeDasharray","stopOpacity","x1","y1","x2","y2","clipPath","transform","xmlnsXlink","fillRule","y","rx","xlinkHref","initializeIcons","subset","MozOsxFontSmoothing","WebkitFontSmoothing","fontStyle","speak","fontFace","fontFamily","icons","Edit","Add","More","Mail","People","Filter","Search","Refresh","Delete","Play","WindowsLogo","Warning","TVMonitor","View","Upload","GotoToday","Clock","Timer","Info","PeopleAdd","Ringer","CirclePlus","Money","EditMirrored","ThisPC","DeveloperTools","DateTime","Export","DateTimeMirrored","ConnectVirtualMachine","ClipboardList","ClipboardListMirrored","StatusCircleQuestionMark","ViewDashboard","MoreVertical","EngineeringGroup","TestBeaker","TestBeakerSolid","LinuxLogo32","Warning12","DisconnectVirtualMachine","registerIcons","IconNames","registerIconAliases","registerIconAlias","DEFAULT_BASE_URL","initStorage","initMocks","initializeExtraIcons","rootElement","History","ReactDOM"],"mappings":"68bAAaA,EACF,QADEA,EAEJ,MAFIA,EAGC,WAHDA,EAIH,OAEGC,EACF,YADEA,EAEE,2BAFFA,EAGJ,qBAHIA,EAIH,sBAJGA,EAKC,0BALDA,EAME,2BANFA,EAOH,iBAPGA,EAQG,mBAoBT,IC9BHC,ED8BSC,EAlBb,WAEI,OADiBC,OAAOC,SAASC,SAASC,eAEtC,KAAKN,EACL,KAAKA,EACD,OAAOD,EACX,KAAKC,EACL,KAAKA,EACD,OAAOD,EACX,KAAKC,EACL,KAAKA,EACD,OAAOD,EACX,KAAKC,EACL,KAAKA,EACL,QACI,OAAOD,GAGYQ,G,imBC7B/B,OAAQL,GACJ,KAAKH,EACDE,EAAWO,EACX,MACJ,KAAKT,EACDE,EAAQ,SAAQO,GAAkBC,GAClC,MACJ,KAAKV,EACL,KAAKA,EACL,QACIE,EAAQ,SAAQO,GAAkBE,IAG3BT,S,oEChBFU,GAAb,WACI,WAAYC,EAAYC,GACpB,GAD0C,aACrCD,EAAL,CAGAE,KAAKC,GAAKH,EACV,IAAMI,EAAQF,KAAKC,GAAGE,MAAM,KAAKC,QAAO,SAACC,GAAD,MAAa,KAANA,KAC3CH,EAAMI,OAAS,GAAgC,mBAA3BJ,EAAM,GAAGV,gBAC7BQ,KAAKO,eAAiBL,EAAM,GAC5BF,KAAKQ,kBAAoBN,EAAM,GAC/BF,KAAKS,kBAAoBP,EAAM,GAC/BF,KAAKU,KAAOR,EAAMA,EAAMI,OAAS,GACjCN,KAAKW,KAAOT,EAAMA,EAAMI,OAAS,KAGhCP,GAAuBG,EAAMI,QAhBd,GAiBhBN,KAAKY,OAAS,IAAIf,EAAW,IAAMK,EAAMW,MAAM,EAAGX,EAAMI,OAAS,GAAGQ,KAAK,MAEpEf,GAAuBG,EAAMI,QApBL,IAqB7BN,KAAKY,OAAS,IAAIf,EAAW,IAAMK,EAAMW,MAAM,EAAGX,EAAMI,OAAS,GAAGQ,KAAK,OAG7Ed,KAAKe,UAAY,GAEjB,IADA,IAAIC,EAAUhB,KAAKY,OACVI,GACLhB,KAAKe,UAAUE,KAAKD,GACpBA,EAAUA,EAAQJ,OAEtBZ,KAAKe,UAAYf,KAAKe,UAAUG,UAEhClB,KAAKmB,iBAAmBnB,KAAKS,kBAC7B,IAAK,IAAIW,EAAI,EAAGA,EAAIpB,KAAKe,UAAUT,OAAQc,IACvCpB,KAAKmB,kBAAoB,IAAMnB,KAAKe,UAAUK,GAAGV,KAErDV,KAAKmB,kBAAoB,IAAMnB,KAAKU,MAlC5C,0DA+CQ,GAAKV,KAAKO,gBAAmBP,KAAKQ,kBAGlC,MAAO,yBAAkBR,KAAKO,gBAAvB,0BAA6DP,KAAKQ,qBAlDjF,0CAqDQ,QAASR,KAAKO,kBAAoBP,KAAKQ,qBArD/C,kCAoCsBD,EAAgBC,EAAmBa,EAAgBC,GACjE,MAAQ,yBAAkBf,GAAlB,0BACeC,GADf,0DAGYa,GAHZ,gBAIKC,KAzCrB,sCA2C2BC,EAAOZ,GAC1B,MAAM,GAAN,OAAUY,EAAV,gCAAuCZ,OA5C/C,KAwDO,SAASa,GAAkBvB,GAE9B,OADmB,IAAIJ,GAAWI,GAChBuB,oBC5Df,IAAMC,GACG,aADHA,GAEK,eAFLA,GAGA,UAHAA,GAID,SCJCC,GAAU,CACnBC,IAAK,MACLC,QAAS,UACTC,qBAAsB,uBACtBC,aAAc,eACdC,SAAU,WACVC,iBAAkB,mBAClBC,MAAO,QACPC,kBAAmB,qBAERR,MCVFS,GACG,aADHA,GAEC,WAFDA,GAGA,UAHAA,GAID,SAJCA,GAKM,gBALNA,GAMK,eANLA,GAOA,UCPN,ICAHC,GDASC,GAAO,CAChBC,IAAK,MACLC,MAAO,QACPC,OAAQ,SACRC,QAAS,IAEEJ,M,UCLR,SAASK,GAAiBC,GAC7BP,GAAgBO,EAEb,SAASC,GAA6BC,EAAGC,GAC5C,OAAOD,EAAEE,cAAcD,EAAGV,GAAe,CAAEY,YAAa,WAErD,SAASC,GAAuCJ,EAAGC,GACtD,OAAOD,EAAEE,cAAcD,EAAG,SAAU,CAAEE,YAAa,SCRhD,IAAME,GAEE,YAFFA,GAGC,WAHDA,GAID,SAJCA,GAKC,WALDA,GAMC,WANDA,GAOD,SAEZ,SAASC,GAAcC,GACnB,OAAOA,IAAUA,EAAMC,mBAAqBD,GAWzC,SAASE,GAAeF,GAC3B,OAAQD,GAAcC,IAClB,KAAKF,GACL,KAAKA,GACL,KAAKA,GACD,OAAO,EACX,QACI,OAAO,GCvBZ,ICLHK,GDKSC,GAAiBC,cAAQ,SAACL,GAGnC,OAFwBA,EAAMM,IAAI,mBACEA,IAAI,kBAG/BC,GAAwBF,cAAQ,SAACL,GAE1C,OADoBI,GAAeJ,GAChBhD,QAAO,SAACwD,GAAD,OAAON,GAAeM,SAEvCC,GAAgBJ,cAAQ,SAACK,EAAOC,GACzC,GAAKA,EAKL,OAFoBJ,GAAsBG,GACXE,MAAK,SAACC,GAAD,OAAsE,IAA/DhB,GAAuCgB,EAAEhE,GAAI8D,SAG/EG,GAAuBT,cAAQ,SAACK,GACzC,IAAMK,EAAsBC,GAAuBN,GACnD,GAAKK,EAGL,OAAON,GAAcC,EAAOK,MAKnBE,IAH6BZ,cAAQ,SAACK,GAC/C,QAASI,GAAqBJ,MAEA,SAACQ,GAC/B,QAASA,MAAWA,EAAKC,OAASD,EAAKE,SAAWF,EAAKG,SAAWH,EAAKI,gBAE9DC,GAAsBlB,cAAQ,SAACL,GAAW,IAAD,EAC5CwB,EAAaV,GAAqBd,GACxC,cAAOwB,QAAP,IAAOA,GAAP,UAAOA,EAAYC,mBAAnB,aAAO,EAAyBL,SErCvBM,IFuC0BrB,cAAQ,SAACL,GAG5C,OAFwBA,EAAMM,IAAI,mBACiBA,IAAI,gCACjBjC,MAEAgC,cAAQ,SAACL,GAC/C,IACM2B,EADoB3B,EAAMM,IAAI,qBACYA,IAAI,SAC9CsB,EAAkB5B,EAAMM,IAAI,mBAC5BuB,EAA0BD,EAAgBtB,IAAI,UAC9CwB,EAAeF,EAAgBtB,IAAI,gBACzC,QAASqB,GAAyBE,EAAwBE,KAAO,KAAOD,KAErCzB,cAAQ,SAACL,GAG5C,OAFwBA,EAAMM,IAAI,mBACiBA,IAAI,gCACjBjC,MEtDhC,QADGqD,GAEF,QAFEA,GAGK,eAELM,GAAkB,CAACN,IACnBO,GAAc,CAACP,GAAYA,GAAaA,I,UDLrD,SAAWvB,GACPA,EAAU,KAAW,OACrBA,EAAU,QAAc,UACxBA,EAAU,SAAe,WACzBA,EAAU,SAAe,WACzBA,EAAU,QAAc,UAL5B,CAMGA,KAAeA,GAAa,KAChBA,UEJF+B,GAAuB7B,cAAQ,SAACL,GAGzC,OAFsBA,EAAMM,IAAI,iBACQA,IAAI,sBAGnC6B,GAAe9B,cAAQ,SAACL,GAGjC,OAFsBA,EAAMM,IAAI,iBACAA,IAAI,gBAG3B8B,GAAc/B,cAAQ,SAACL,EAAOqC,GAGvC,OAFkBF,GAAanC,GACJY,MAAK,SAAC0B,GAAD,OAAOA,EAAEzF,KAAOwF,QAGvCE,GAAqBlC,cAAQ,SAACL,GACvC,IAAMwC,EAAoBN,GAAqBlC,GAC/C,GAAKwC,EAIL,OADwBJ,GAAYpC,EAAOwC,MAGlCC,GAAWpC,cAAQ,SAACqC,GAC7B,OAAOA,EAAWA,EAASX,KAAKY,gBAAaC,KAEpCC,GAAWxC,cAAQ,SAACqC,GAC7B,QAAOA,GAAWA,EAASX,KAAKe,MAAQC,qBAAGC,QAAQC,OAE1CC,GAAyB7C,cAAQ,SAACL,GAG3C,OAFsBA,EAAMM,IAAI,iBACUA,IAAI,0BAOrC6C,GAAmB9C,cAAQ,SAAC+C,GACrC,QAASA,EAASC,iBAETC,GAAkBjD,cAAQ,SAAC+C,GACpC,OAAQA,GACJA,EAASG,kBACTH,EAASG,iBAAiBC,aAC1BJ,EAASG,iBAAiBC,YAAYC,gBACtCL,EAASG,iBAAiBC,YAAYC,eAAeC,gBAEhDC,GAAkBtD,cAAQ,SAAC+C,GACpC,OAAQA,GACJA,EAASG,kBACTH,EAASG,iBAAiBC,aAC1BJ,EAASG,iBAAiBC,YAAYC,gBACtCL,EAASG,iBAAiBC,YAAYC,eAAeG,gBAEhDC,GAAqBxD,cAAQ,SAAC+C,GACvC,SAAOA,IAAYA,EAASnD,oBAAoBmD,EAASnD,oBAAsBH,MAEtEgE,GAAqBzD,cAAQ,SAAC+C,GACvC,SAAOA,GACHA,EAASG,kBACTH,EAASG,iBAAiBC,aAC1BJ,EAASG,iBAAiBC,YAAYC,iBACpCL,EAASG,iBAAiBC,YAAYC,eAAeM,sBAAwB5D,GAAW6D,YAGrFC,GAAqB5D,cAAQ,SAAC+C,GACvC,SAAOA,GACHA,EAASG,kBACTH,EAASG,iBAAiBC,aAC1BJ,EAASG,iBAAiBC,YAAYC,iBACpCL,EAASG,iBAAiBC,YAAYC,eAAeM,sBAAwB5D,GAAW+D,YAGrFC,GAA8B9D,cAAQ,SAAC+C,GAChD,SAAOA,GACHA,EAASgB,uBACThB,EAASgB,sBAAsBC,QAC/BjB,EAASgB,sBAAsBE,cAC7BlB,EAASgB,sBAAsBC,SAAWlE,GAAWoE,SACnDnB,EAASgB,sBAAsBE,WAAWE,QAAQ,kBAAoB,MAGrEC,GAAoBpE,cAAQ,SAAC+C,GACtC,SAAOA,IAAYA,EAASsB,kBAAkBtB,EAASsB,kBAAoB3B,qBAAG4B,gBAAgBC,WAErFC,GAAsBxE,cAAQ,SAAC+C,GACxC,SAAOA,IAAYA,EAASsB,kBAAkBtB,EAASsB,kBAAoB3B,qBAAG4B,gBAAgBG,aAErFC,GAAuB1E,cAAQ,SAAC+C,GACzC,SAAOA,IAAYA,EAASsB,kBAAkBtB,EAASsB,kBAAoB3B,qBAAG4B,gBAAgBK,cAErFC,GAAgC5E,cAAQ,SAAC+C,GAClD,OAAO2B,GAAqB3B,IAAaqB,GAAkBrB,MAMlD8B,GAAmB7E,cAAQ,SAAC+C,GACrC,GAAIA,EAASgB,uBAAyBhB,EAASgB,sBAAsBE,WAAY,CAC7E,IAAMvH,EAAQqG,EAASgB,sBAAsBE,WAAWvH,MAAM,KACxDoI,EAASpI,EAAMG,OAAS,GAAKH,EAAM,GAAGA,MAAM,KAClD,GAAIoI,GAAUA,EAAOjI,OAAS,EAC1B,OAAOiI,EAAOA,EAAOjI,OAAS,OAI7BkI,GAA4B/E,cAAQ,SAAC+C,GAC9C,SAAIA,GAAYA,EAASnD,mBAAqBmD,EAASnD,oBAAsBH,IACrEsD,GACAA,EAASgB,uBACqC,QAA9ChB,EAASgB,sBAAsBiB,YACW,WAA1CjC,EAASgB,sBAAsBC,W,gGCtGpC,SAASiB,GAAaC,EAAKC,EAAW3I,GACzC,IAAI4I,EAAaF,EAAIjF,IAAIzD,EAAGT,gBAAkBsJ,gBAAK,IAInD,OAHKD,EAAWE,MAAK,SAACC,GAAD,OAAUC,KAAEC,QAAQF,EAAMJ,QAC3CC,EAAaA,EAAWM,OAAOP,IAE5BD,EAAIS,IAAInJ,EAAGT,cAAeqJ,GAE9B,SAASQ,GAAcV,EAAKW,EAAcrJ,GAC7C,IAAM4I,EAAaF,EAAIjF,IAAIzD,EAAGT,eAC9B,IAAKqJ,EACD,OAAOF,EAEX,IAAMY,EAAgBV,EAAWzI,QAAO,SAAC4I,GAAD,OAAWC,KAAEC,QAAQI,EAAcN,MAC3E,OAAOL,EAAIS,IAAInJ,EAAGT,cAAe+J,GAE9B,SAASC,GAAc3G,EAAGC,GAC7B,OAAID,EAAElC,KAAKnB,cAAgBsD,EAAEnC,KAAKnB,eACtB,EAEHqD,EAAElC,KAAKnB,cAAgBsD,EAAEnC,KAAKnB,cAC5B,EAGA,EAGR,SAASiK,GAAc5G,EAAGC,GAC7B,OAAID,EAAE6G,KAAKlK,cAAgBsD,EAAE4G,KAAKlK,eACtB,EAEHqD,EAAE6G,KAAKlK,cAAgBsD,EAAE4G,KAAKlK,cAC5B,EAGA,EAGR,SAASmK,KACZ,IAAMC,EAAQC,KAAOC,GAAGF,QAExB,OADwBG,uBAAYH,GAIjC,SAASI,GAAYC,GACxB,IAAMC,EAAMC,WAIZ,OAHAA,aAAgB,WACZD,EAAIlJ,QAAUiJ,KAEXC,EAAIlJ,QAMR,ICvDI,GA2CAoJ,GAcAC,GAeAC,GAcAC,GAqBAC,GA2BAC,GAgBAC,GAgBAC,GAoCAC,GAsBAC,GAgBAC,GAqBAC,GAgCAC,GA8CAC,GAqBAC,GAsBAC,GA8CA,GAoCAC,GAaAC,GAcAC,GA0BAC,GAaAC,GAcAC,GAeAC,GDxfEC,GAAgB,SAACC,EAAKjJ,EAAQkJ,GACvC,IAAIC,EAAY,GAChB,IAEQnJ,EAAOoJ,WAAW,MAClBC,KAAQrJ,OAAO,OAEVA,EAAOoJ,WAAW,MACvBC,KAAQrJ,OAAO,MAGfqJ,KAAQrJ,OAAOA,GAEnBmJ,EACIF,EAAM,IACAI,KAAQJ,GAAKK,OAAO,QACpBJ,EAAKK,aAAaN,EAAK,CACrBO,sBAAuB,IAGvC,MAAOC,GACHC,GAAW,oCAAD,OAAqC1J,EAArC,8CACVmJ,EAAYD,EAAKK,aAAaN,EAAK,CAC/BO,sBAAuB,IAG/B,OAAOL,GEzFIQ,GANgB,CAC3B3E,QAAS,UACT4E,UAAW,YACXC,SAAU,WACVC,OAAQ,UCHCC,GAAoB,SAACC,EAAKC,GACnC,QAAUD,EAAInF,yBACRmF,EAAInF,sBAAsBE,YAC5BiF,EAAInF,sBAAsBE,WAAWmF,SAArC,UAAiDD,EAAjD,OAEKE,GAAsB,SAACH,GAAS,IAAD,EACxC,OAAOD,GAAkBC,EAAK,kBAAmB,UAAAA,EAAInF,6BAAJ,eAA2BC,UAAW6E,GAAgBG,QAE9FM,GAAuB,SAACJ,GAAS,IAAD,EACzC,OAAOD,GAAkBC,EAAK,kBAAmB,UAAAA,EAAInF,6BAAJ,eAA2BC,UAAW6E,GAAgB3E,SAE9FqF,GAAyB,SAACL,GAAS,IAAD,EAC3C,OAAOD,GAAkBC,EAAK,kBAAmB,UAAAA,EAAInF,6BAAJ,eAA2BC,UAAW6E,GAAgBC,WAE9FU,GAAmB,SAACN,GAC7B,OAAOI,GAAqBJ,MAAUA,EAAIO,eCdjCC,GAAa1J,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,cAAcA,IAAI,cAC5D0J,GAAe3J,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,cAAcA,IAAI,gBAC9D2J,GAAY5J,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,cAAcA,IAAI,aAC3D4J,GAA4B7J,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,cAAcA,IAAI,4BAC3E6J,GAAqB9J,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,cAAcA,IAAI,eAAiBvB,MACrFqL,GAAqB/J,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,cAAcA,IAAI,qBAAuBvB,MCP3FsL,GAAe,CACxBlL,MAAO,QACPC,OAAQ,SACRC,QAAS,I,UJab,SAAWS,GAITA,EAA4B,SAAI,WAKhCA,EAA4B,SAAI,WAKhCA,EAA4B,SAAI,WAKhCA,EAA6B,UAAI,YAKjCA,EAA0B,OAAI,SAO9BA,EAA0B,OAAI,SA/BhC,CAgCG,KAAsB,GAAoB,KAW7C,SAAWkH,GACTA,EAAqB,QAAI,UACzBA,EAAsB,SAAI,WAF5B,CAGGA,KAAgBA,GAAc,KAWjC,SAAWC,GACTA,EAAuB,OAAI,SAC3BA,EAAwB,QAAI,UAC5BA,EAAqB,KAAI,OAH3B,CAIGA,KAAmBA,GAAiB,KAWvC,SAAWC,GACTA,EAAgB,QAAI,UACpBA,EAAc,MAAI,QAFpB,CAGGA,KAAWA,GAAS,KAWvB,SAAWC,GAITA,EAAqB,YAAI,cAKzBA,EAAqB,YAAI,cAT3B,CAUGA,KAAYA,GAAU,KAWzB,SAAWC,GAITA,EAAyB,KAAI,OAK7BA,EAAgC,YAAI,cAMpCA,EAA6B,SAAI,WAfnC,CAgBGA,KAAuBA,GAAqB,KAW/C,SAAWC,GACTA,EAAoB,KAAI,OACxBA,EAA2B,YAAI,cAC/BA,EAA+B,gBAAI,kBACnCA,EAAmB,IAAI,MAJzB,CAKGA,KAAkBA,GAAgB,KAWrC,SAAWC,GACTA,EAAqC,eAAI,iBACzCA,EAAmC,aAAI,eACvCA,EAAiD,2BAAI,8BACrDA,EAA2B,KAAI,OAJjC,CAKGA,KAAyBA,GAAuB,KAWnD,SAAWC,GAITA,EAAgB,MAAI,QAKpBA,EAAqB,WAAI,aAKzBA,EAAkB,QAAI,UAKtBA,EAAkB,QAAI,UAKtBA,EAAoB,UAAI,YAxB1B,CAyBGA,KAAaA,GAAW,KAW3B,SAAWC,GAKTA,EAAoB,MAAI,QAKxBA,EAAyB,WAAI,aAV/B,CAWGA,KAAiBA,GAAe,KAWnC,SAAWC,GACTA,EAAc,KAAI,OAClBA,EAAe,MAAI,QACnBA,EAAkB,SAAI,WACtBA,EAAiB,QAAI,UAJvB,CAKGA,KAAYA,GAAU,KAWzB,SAAWC,GAITA,EAA8B,WAAI,aAKlCA,EAAiC,cAAI,gBATvC,CAUGA,KAAsBA,GAAoB,KAW7C,SAAWC,GAITA,EAAyB,QAAI,UAK7BA,EAAyB,QAAI,UAK7BA,EAAsB,KAAI,OAK1BA,EAAwB,OAAI,SAnB9B,CAoBGA,KAAoBA,GAAkB,KAYzC,SAAWC,GAITA,EAA6B,QAAI,UAKjCA,EAA8B,SAAI,WAKlCA,EAA6B,QAAI,UAKjCA,EAA8B,SAAI,WAKlCA,EAAuC,kBAAI,oBAK3CA,EAA+B,UAAI,YAKnCA,EAAiC,YAAI,cAlCvC,CAmCGA,KAAwBA,GAAsB,KAWjD,SAAWC,GAITA,EAAyB,KAAI,OAK7BA,EAA6B,SAAI,WATnC,CAUGA,KAAuBA,GAAqB,KAW/C,SAAWC,GAITA,EAA2B,MAAI,QAK/BA,EAA4B,OAAI,SATlC,CAUGA,KAAwBA,GAAsB,KAYjD,SAAWC,GAITA,EAAgB,OAAI,SAKpBA,EAAgB,OAAI,SAKpBA,EAAiB,QAAI,UAKrBA,EAAmB,UAAI,YAKvBA,EAAkB,SAAI,WAKtBA,EAAgB,OAAI,SAKpBA,EAAkB,SAAI,WAlCxB,CAmCGA,KAAYA,GAAU,KAWzB,SAAWmB,GAITA,EAA4B,WAAI,aAKhCA,EAA4B,WAAI,aAKhCA,EAA2B,UAAI,YAK/BA,EAAwB,OAAI,SAK5BA,EAA0B,SAAI,WAxBhC,CAyBG,KAAoB,GAAkB,KAWzC,SAAWlB,GACTA,EAAiB,MAAI,QADvB,CAEGA,KAAcA,GAAY,KAW7B,SAAWC,GACTA,EAA6B,SAAI,WACjCA,EAA4B,QAAI,UAFlC,CAGGA,KAAuBA,GAAqB,KAW/C,SAAWC,GAITA,EAAgB,KAAI,OAKpBA,EAAkB,OAAI,SAKtBA,EAAqB,UAAI,YAd3B,CAeGA,KAAcA,GAAY,KAW7B,SAAWC,GACTA,EAA0B,SAAI,WADhC,CAEGA,KAAoBA,GAAkB,KAWzC,SAAWC,GACTA,EAA+B,QAAI,UACnCA,EAAmD,4BAAI,8BAFzD,CAGGA,KAA0BA,GAAwB,KAWrD,SAAWC,GACTA,EAAa,KAAI,OACjBA,EAAe,OAAI,SACnBA,EAAmB,WAAI,cAHzB,CAIGA,KAAWA,GAAS,KAWvB,SAAWC,GACTA,EAAqB,SAAI,WAD3B,CAEGA,KAAeA,GAAa,K,oCKxjBpBgC,GAAa,KACbC,GAAe,KACfC,GAAwB,CACjCC,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBACXC,gBAAiB,CACfC,KAAM,CACJH,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,gBAQTuN,GAAsB,CAC/BL,eAAgB,sBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBACXC,gBAAiB,CACfI,qBAAsB,CACpBN,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BC,yBAA0B,CACxBR,eAAgB,2BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BE,eAAgB,CACdT,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,OAAQ,cAAe,cAG3CG,gBAAiB,CACfV,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,aAGV6N,eAAgB,CACdX,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aAGV8N,UAAW,CACTZ,eAAgB,YAChBnN,KAAM,CACJC,KAAM,gBAML+N,GAAoB,CAC7Bb,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACfY,aAAc,CACZd,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,UAGzCQ,aAAc,CACZf,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,UAGzCS,gBAAiB,CACfhB,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,UAGzCU,gBAAiB,CACfjB,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,aAMpCW,GAAyB,CAClClB,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yBACXC,gBAAiB,CACfiB,UAAW,CACTnB,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGVsO,KAAM,CACJpB,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVuO,QAAS,CACPrB,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVwO,OAAQ,CACNtB,eAAgB,SAChBnN,KAAM,CACJC,KAAM,cAMLyO,GAAa,CACtBvB,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aACXC,gBAAiB,CACfsB,UAAW,CACTxB,eAAgB,YAChBnN,KAAM,CACJC,KAAM,WAGV2O,cAAe,CACbzB,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,WAGV4O,UAAW,CACT1B,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGV6O,eAAgB,CACd3B,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGV8O,mBAAoB,CAClB5B,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,WAGV+O,eAAgB,CACd7B,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,gBAMLgP,GAAW,CACpB9B,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,WACXC,gBAAiB,CACf6B,YAAa,CACXC,UAAU,EACVhC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVmP,SAAU,CACRD,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVD,KAAM,CACJmN,eAAgB,OAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,iBAAkB,eAAgB,8BAA+B,aAMhF2B,GAAW,CACpBlC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,WACXC,gBAAiB,CACf9N,GAAI,CACF4P,UAAU,EACVhC,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGVA,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVD,KAAM,CACJmP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,cAMLqP,GAAkB,CAC3BnC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBACXC,gBAAiB,aAAS,aAAS,GAAIgC,GAASrP,KAAKqN,iBAAkB,CACrEC,KAAM,CACJH,eAAgB,OAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,aAKdrB,SAAU,CACR2Q,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,eAMLuP,GAAU,CACnBrC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,UACXC,gBAAiB,aAAS,aAAS,GAAIiC,GAAgBtP,KAAKqN,iBAAkB,CAC5EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfsC,yBAA0B,CACxBvC,eAAgB,sCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGfuC,2BAA4B,CAC1BxC,eAAgB,wCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBAGfwC,sBAAuB,CACrBzC,eAAgB,mCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,0BAGfyC,eAAgB,CACd1C,eAAgB,4BAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,aAKd6P,gBAAiB,CACf3C,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,WAGVkE,YAAa,CACXgJ,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAGf2C,kBAAmB,CACjB5C,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,WAGV0C,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/EsC,uBAAwB,CACtBb,UAAU,EACVhC,eAAgB,oCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,2BAGf6C,SAAU,CACR9C,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBAMV8C,GAAwB,CACjC/C,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBACXC,gBAAiB,CACf8C,SAAU,CACRhD,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLmQ,GAAc,CACvBjD,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACfxJ,IAAK,CACHsJ,eAAgB,MAChBnN,KAAM,CACJC,KAAM,WAGV6D,MAAO,CACLqJ,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGV8D,MAAO,CACLoJ,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGV+D,aAAc,CACZmJ,eAAgB,eAChBnN,KAAM,CACJC,KAAM,cAMLoQ,GAAgB,CACzBlD,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBACXC,gBAAiB,aAAS,aAAS,GAAIH,GAAsBlN,KAAKqN,iBAAkB,CAClFqC,yBAA0B,CACxBvC,eAAgB,sCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGfuC,2BAA4B,CAC1BxC,eAAgB,wCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBAGfwC,sBAAuB,CACrBzC,eAAgB,mCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,0BAGfyC,eAAgB,CACd1C,eAAgB,4BAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,aAKd6P,gBAAiB,CACf3C,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,WAGVkE,YAAa,CACXgJ,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAGf2C,kBAAmB,CACjB5C,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,WAGVgQ,SAAU,CACR9C,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBAMVkD,GAAgB,CACzBnD,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBACXC,gBAAiB,CACfpN,KAAM,CACJkN,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVsQ,oBAAqB,CACnBpD,eAAgB,sBAChBnN,KAAM,CACJC,KAAM,cAMLuQ,GAAoB,CAC7BrD,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACf8C,SAAU,CACRhD,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVwQ,eAAgB,CACdtD,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGVyQ,WAAY,CACVvD,eAAgB,aAChBnN,KAAM,CACJC,KAAM,cAML0Q,GAAM,CACfxD,eAAgB,MAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,MACXC,gBAAiB,aAAS,aAAS,GAAIiC,GAAgBtP,KAAKqN,iBAAkB,CAC5EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfwD,oBAAqB,CACnBzD,eAAgB,iCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBAGfyD,kBAAmB,CACjB1D,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf0D,sBAAuB,CACrB3D,eAAgB,mCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,0BAGf2D,gBAAiB,CACf5D,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBAGf4D,cAAe,CACb7D,eAAgB,2BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBAGf6D,UAAW,CACT9D,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,WAGViR,MAAO,CACL/D,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACXhE,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGV0C,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/E0D,eAAgB,CACdjE,eAAgB,4BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf1K,MAAO,CACLyM,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,QAAS,aAAc,UAAW,UAAW,eAGjEsC,uBAAwB,CACtBb,UAAU,EACVhC,eAAgB,oCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,+BAMViE,GAAiB,CAC1BlE,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,CACf9N,GAAI,CACF4N,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGVqR,MAAO,CACLnE,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGVsR,UAAW,CACTpE,eAAgB,YAChBnN,KAAM,CACJC,KAAM,WAGVuR,IAAK,CACHrE,eAAgB,MAChBnN,KAAM,CACJC,KAAM,WAGVwR,QAAS,CACPtE,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVyR,aAAc,CACZvC,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,cAML0R,GAAM,CACfxE,eAAgB,MAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,MACXC,gBAAiB,CACfpN,KAAM,CACJsP,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV2R,KAAM,CACJzE,eAAgB,OAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,OAAQ,QAAS,WAAY,aAGjDjJ,KAAM,CACJ0I,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV4R,OAAQ,CACN1E,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WAGV6R,SAAU,CACR3E,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAML8R,GAAuC,CAChD5E,eAAgB,uCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,uCACXC,gBAAiB,CACf2E,kBAAmB,CACjB7E,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,iBAM1BuE,GAAc,CACvB9E,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACf6E,SAAU,CACR3C,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVkS,SAAU,CACRhF,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLmS,GAAwB,CACjCjF,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBACXC,gBAAiB,CACfgF,aAAc,CACZ9C,UAAU,EACVpC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,QAAS,gBAG7B4E,eAAgB,CACd/C,UAAU,EACVpC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBAGfmF,OAAQ,CACNpD,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,WAG/B8D,IAAK,CACHjC,UAAU,EACVpC,eAAgB,MAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,QAGfoF,uBAAwB,CACtBrF,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yCAGfqF,WAAY,CACVlD,UAAU,EACVpC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,aAGVyS,kBAAmB,CACjBvF,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BiF,UAAW,CACTpD,UAAU,EACVpC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAGfwF,aAAc,CACZzF,eAAgB,eAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBAMVyF,GAAkB,CAC3B1F,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBACXC,gBAAiB,CACfyF,iBAAkB,CAChB3D,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGV8S,WAAY,CACV5F,eAAgB,aAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,iBAM1BsF,GAAgB,CACzB7F,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBACXC,gBAAiB,CACf4F,uBAAwB,CACtB9F,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGViT,aAAc,CACZ/F,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVkT,YAAa,CACXhG,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVmT,YAAa,CACXjG,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVoT,kBAAmB,CACjBlG,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,cAMLqT,GAAY,CACrBnG,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,YACXC,gBAAiB,aAAS,aAAS,GAAIH,GAAsBlN,KAAKqN,iBAAkB,CAClFuD,oBAAqB,CACnBzD,eAAgB,iCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBAGfyD,kBAAmB,CACjB1D,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf0D,sBAAuB,CACrB3D,eAAgB,mCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,0BAGf2D,gBAAiB,CACf5D,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBAGf4D,cAAe,CACb7D,eAAgB,2BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBAGf6D,UAAW,CACT9D,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,WAGViR,MAAO,CACL/D,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACXhE,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,eAMLsT,GAAgB,CACzBpG,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBACXC,gBAAiB,aAAS,GAAIgC,GAASrP,KAAKqN,mBAGrCmG,GAAO,CAChBrG,eAAgB,OAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,OACXC,gBAAiB,aAAS,aAAS,GAAIkG,GAAcvT,KAAKqN,iBAAkB,CAC1EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfqG,qBAAsB,CACpBtG,eAAgB,kCAChBnN,KAAM,CACJC,KAAM,aAGV0C,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/EsC,uBAAwB,CACtBb,UAAU,EACVhC,eAAgB,oCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,2BAGfsG,YAAa,CACXvE,UAAU,EACVhC,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGV6D,MAAO,CACLyL,UAAU,EACVpC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGV0T,kBAAmB,CACjBxE,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,aAAc,mBAGlCkG,gBAAiB,CACfzE,UAAU,EACVhC,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,UAAW,OAAQ,YAGlDmG,eAAgB,CACd1E,UAAU,EACVhC,eAAgB,4BAChBnN,KAAM,CACJC,KAAM,aAGV6T,WAAY,CACV3E,UAAU,EACVhC,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,iBAML8T,GAAa,CACtB5G,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aACXC,gBAAiB,CACfoG,qBAAsB,CACpBtG,eAAgB,kCAChBnN,KAAM,CACJC,KAAM,gBAML+T,GAAa,CACtB7G,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aACXC,gBAAiB,CACfrE,KAAM,CACJmE,eAAgB,OAChBnN,KAAM,CACJC,KAAM,cAMLgU,GAAkC,CAC3C9G,eAAgB,kCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kCACXC,gBAAiB,CACf6G,iBAAkB,CAChB/E,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGVmG,aAAc,CACZ+I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVkU,gBAAiB,CACfhF,UAAU,EACVhC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGVqG,aAAc,CACZ6I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVmU,gBAAiB,CACfjF,UAAU,EACVhC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGVoU,cAAe,CACblF,UAAU,EACVhC,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,WAGVqU,iBAAkB,CAChBnF,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,cAMLsU,GAAiB,CAC1BpH,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,aAAS,aAAS,GAAIkG,GAAcvT,KAAKqN,iBAAkB,CAC1EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfzK,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/EhL,MAAO,CACLyM,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,WAAY,UAAW,WAAY,oBAAqB,YAAa,iBAGpGsC,uBAAwB,CACtBb,UAAU,EACVhC,eAAgB,oCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,2BAGfyD,kBAAmB,CACjB1B,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oCAGfoH,gBAAiB,CACfrF,UAAU,EACVhC,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,WAGVwU,OAAQ,CACNtF,UAAU,EACVhC,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,OAAQ,kBAMvBgH,GAAoB,CAC7BvH,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACf6E,SAAU,CACR3C,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVkS,SAAU,CACR5C,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAML0U,GAAW,CACpBxH,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,WACXC,gBAAiB,aAAS,aAAS,GAAIkG,GAAcvT,KAAKqN,iBAAkB,CAC1EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfwH,QAAS,CACPzH,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,aAGV4U,OAAQ,CACN1H,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,aAGV6U,kBAAmB,CACjB3H,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf2H,WAAY,CACV5H,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,WAGV+U,MAAO,CACL7H,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGV0C,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/EsC,uBAAwB,CACtBb,UAAU,EACVhC,eAAgB,oCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,+BAMV6H,GAAoB,CAC7B9H,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACf6H,UAAW,CACT3F,UAAU,EACVpC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,QAAS,YAG7ByH,SAAU,CACRhI,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,gBAK1F0H,SAAU,CACRjI,eAAgB,WAChBkI,YAAa,CACXC,iBAAkB,IAClBC,iBAAkB,GAEpBvV,KAAM,CACJC,KAAM,WAGVuV,eAAgB,CACdjG,UAAU,EACVpC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,gBAMLwV,GAAiB,CAC1BtI,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,CACfuH,QAAS,CACPzH,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,aAGV4U,OAAQ,CACN1H,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,aAGV6U,kBAAmB,CACjB3H,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf2H,WAAY,CACV5H,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,WAGV+U,MAAO,CACL7H,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,cAMLyV,GAAQ,CACjBvI,eAAgB,QAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,QACXC,gBAAiB,aAAS,aAAS,GAAIkG,GAAcvT,KAAKqN,iBAAkB,CAC1EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfuI,aAAc,CACZxI,eAAgB,0BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/B/K,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/EgG,YAAa,CACXvE,UAAU,EACVhC,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACXhC,UAAU,EACVhC,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGV2V,QAAS,CACPzG,UAAU,EACVhC,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,WAGV4V,OAAQ,CACN1G,UAAU,EACVhC,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,WAGVsS,OAAQ,CACNpD,UAAU,EACVhC,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,WAG/BoI,KAAM,CACJ3G,UAAU,EACVhC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGV8V,YAAa,CACX5G,UAAU,EACVhC,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/B4D,MAAO,CACLnC,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGVsR,UAAW,CACTpC,UAAU,EACVhC,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,WAGVuR,IAAK,CACHrC,UAAU,EACVhC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGVwR,QAAS,CACPtC,UAAU,EACVhC,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,WAGV6P,gBAAiB,CACfX,UAAU,EACVhC,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,WAGV+V,iBAAkB,CAChB7I,eAAgB,8BAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,aAKdgW,QAAS,CACP9G,UAAU,EACVhC,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,cAAe,qBAM9BwI,GAAc,CACvB/I,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACfsI,aAAc,CACZxI,eAAgB,0BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,iBAM1ByI,GAAsB,CAC/BhJ,eAAgB,sBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBACXC,gBAAiB,CACfrN,KAAM,CACJmP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV2D,KAAM,CACJuL,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,cAMLmW,GAAc,CACvBjJ,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACfkB,KAAM,CACJY,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVuO,QAAS,CACPW,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVoW,OAAQ,CACNlH,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WAGVqW,QAAS,CACPnH,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBAKnBmJ,eAAgB,CACdpH,UAAU,EACVhC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,6BAQdoJ,GAAkB,CAC3BrJ,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBACXC,gBAAiB,CACf9N,GAAI,CACF4P,UAAU,EACVhC,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGVA,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV8G,OAAQ,CACNwI,UAAU,EACVpC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,aAAc,aAAc,YAAa,SAAU,cAGvE+I,UAAW,CACTtJ,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGVyW,QAAS,CACPvJ,eAAgB,UAChBnN,KAAM,CACJC,KAAM,aAGV0W,gBAAiB,CACfxJ,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGV2W,MAAO,CACLzJ,eAAgB,QAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBAMVyJ,GAAY,CACrB1J,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,YACXC,gBAAiB,CACfyJ,eAAgB,CACd3J,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGV8W,aAAc,CACZ5J,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,aAKdsJ,MAAO,CACL4D,eAAgB,QAChBnN,KAAM,CACJC,KAAM,cAML+W,GAAQ,CACjB7J,eAAgB,QAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,QACXC,gBAAiB,CACf4J,aAAc,CACZ9J,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGViX,MAAO,CACL/J,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGVkX,KAAM,CACJhK,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVA,KAAM,CACJkN,eAAgB,OAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cAGf7N,GAAI,CACF4N,eAAgB,KAChBnN,KAAM,CACJC,KAAM,cAMLmX,GAAyB,CAClCjK,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yBACXC,gBAAiB,CACfgK,QAAS,CACPlI,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVqX,QAAS,CACPnI,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVsX,QAAS,CACPpI,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVuX,UAAW,CACTrI,UAAU,EACVhC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,cAMLwX,GAA6B,CACtCtK,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,6BACXC,gBAAiB,CACfpN,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVsJ,MAAO,CACL4F,UAAU,EACVhC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,cAMLyX,GAAqB,CAC9BvK,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,qBACXC,gBAAiB,CACfsK,QAAS,CACPxI,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGV2X,SAAU,CACRzI,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGV4X,aAAc,CACZ1I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,cAML6X,GAA6B,CACtC3K,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,6BACXC,gBAAiB,CACfrN,KAAM,CACJmP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV8X,OAAQ,CACN5I,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,aAKd+X,WAAY,CACV7I,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,cAMLgY,GAAiB,CAC1B9K,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,CACf6K,aAAc,CACZ/I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVA,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV2R,KAAM,CACJzC,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVwE,KAAM,CACJ0K,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV4R,OAAQ,CACN1C,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WAGV6R,SAAU,CACR3E,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,2BAGf+K,aAAc,CACZhJ,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,iCAKnBgL,UAAW,CACTjJ,UAAU,EACVhC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,aAKdoY,MAAO,CACLlJ,UAAU,EACVhC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,yBAKnBkL,aAAc,CACZnJ,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,oCAQdmL,GAAmB,CAC5BpL,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBACXC,gBAAiB,CACfmL,SAAU,CACRrJ,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVwY,SAAU,CACRtJ,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGViM,UAAW,CACTiD,UAAU,EACVhC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACXhC,UAAU,EACVhC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,cAMLyY,GAAY,CACrBvL,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,YACXC,gBAAiB,CACfpN,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV0Y,aAAc,CACZxJ,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,YAGV2Y,QAAS,CACPzL,eAAgB,UAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,qBAGfyL,OAAQ,CACN1J,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WAGV6Y,WAAY,CACV3J,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,cAML8Y,GAAsB,CAC/B5L,eAAgB,sBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLgZ,GAAgB,CACzB9L,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,cAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLiZ,GAAY,CACrB/L,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,YACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,UAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLkZ,GAAa,CACtBhM,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,WAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLmZ,GAAuB,CAChCjM,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,uBACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,qBAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLoZ,GAAiB,CAC1BlM,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLqZ,GAAc,CACvBnM,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,YAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLsZ,GAAmB,CAC5BpM,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBACXC,gBAAiB,CACf9D,MAAO,CACL4D,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,YAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLuZ,GAAuB,CAChCrM,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,uBACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,qBAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cCnvELwZ,GAAiB,CAC1BC,cAAe,iBACfC,OAAQ,CACNxM,eAAgB,kBAChByM,aAAc,QACd5Z,KAAM,CACJC,KAAM,YAID4Z,GAAa,CACtBH,cAAe,aACfC,OAAQ,CACNpK,UAAU,EACVuK,YAAY,EACZ3M,eAAgB,cAChByM,aAAc,aACd5Z,KAAM,CACJC,KAAM,YAID,GAAS,CAClByZ,cAAe,CAAC,UAAW,UAC3BC,OAAQ,CACNxM,eAAgB,UAChBnN,KAAM,CACJC,KAAM,YAID,GAAY,CACrByZ,cAAe,YACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,YAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,YAID,GAAU,CACnByZ,cAAe,UACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,UAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,GAEbha,KAAM,CACJC,KAAM,YAID,GAAc,CACvByZ,cAAe,cACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,cAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,GAEbha,KAAM,CACJC,KAAM,YAmBDia,GAAe,CACxBR,cAAe,eACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVka,cAAc,GAiBL,GAAoB,CAC7BT,cAAe,oBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,oBAChBkI,YAAa,CACX0E,UAAW,GACXC,UAAW,GAEbha,KAAM,CACJC,KAAM,YAIDma,GAAe,CACxBV,cAAe,eACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,eAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,YAID,GAAiB,CAC1ByZ,cAAe,iBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,iBAChBkI,YAAa,CACX2E,UAAW,GAEbha,KAAM,CACJC,KAAM,YAIDoa,GAAW,CACpBX,cAAe,WACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,WAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,YAIDqa,GAAqB,CAC9BZ,cAAe,qBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,qBAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,YClLRsa,GAEJ,WAKE,SAASA,EAAWC,GAClBlb,KAAKkb,OAASA,EAgBhB,OAbAD,EAAWE,UAAUC,KAAO,SAAUC,EAASC,GAC7C,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACRG,GAAmBF,IAGxBL,EAAWE,UAAUM,SAAW,SAAUb,EAAcS,EAASC,GAC/D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACRK,GAAuBJ,IAGrBL,EAtBT,GA2BI,GAAa,IAAI,KAAkB,GACnCO,GAAoB,CACtB/S,WAAY,MACZkT,KAAM,6CACNC,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVP,GAAwB,CAC1BjT,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IC1DVG,GAEJ,WAKE,SAASA,EAASlB,GAChBlb,KAAKkb,OAASA,EA2LhB,OAxLAkB,EAASjB,UAAUkB,mBAAqB,SAAUhB,EAASC,GACzD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACRiB,GAAiChB,IAGtCc,EAASjB,UAAUoB,oBAAsB,SAAU/b,EAAmB6a,EAASC,GAC7E,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnB6a,QAASA,GACRmB,GAAkClB,IAGvCc,EAASjB,UAAUzX,IAAM,SAAUlD,EAAmBic,EAAapB,EAASC,GAC1E,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBic,YAAaA,EACbpB,QAASA,GACRqB,GAAkBpB,IAcvBc,EAASjB,UAAUwB,eAAiB,SAAUC,EAAMpc,EAAmBic,EAAapB,GAClF,OAAOrb,KAAK6c,oBAAoBD,EAAMpc,EAAmBic,EAAapB,GAASyB,MAAK,SAAUC,GAC5F,OAAOA,EAAUC,wBAerBZ,EAASjB,UAAU8B,OAAS,SAAUL,EAAMpc,EAAmBic,EAAapB,GAC1E,OAAOrb,KAAKkd,YAAYN,EAAMpc,EAAmBic,EAAapB,GAASyB,MAAK,SAAUC,GACpF,OAAOA,EAAUC,wBAgBrBZ,EAASjB,UAAUgC,aAAe,SAAU3c,EAAmBic,EAAapB,GAC1E,OAAOrb,KAAKod,kBAAkB5c,EAAmBic,EAAapB,GAASyB,MAAK,SAAUC,GACpF,OAAOA,EAAUC,wBAerBZ,EAASjB,UAAUkC,UAAY,SAAUT,EAAMpc,EAAmBic,EAAapB,GAC7E,OAAOrb,KAAKsd,eAAeV,EAAMpc,EAAmBic,EAAapB,GAASyB,MAAK,SAAUC,GACvF,OAAOA,EAAUC,wBAerBZ,EAASjB,UAAU0B,oBAAsB,SAAUD,EAAMpc,EAAmBic,EAAapB,GACvF,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBic,YAAaA,EACbpB,QAASA,GACRmC,GAAkCnC,IAcvCe,EAASjB,UAAU+B,YAAc,SAAUN,EAAMpc,EAAmBic,EAAapB,GAC/E,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBic,YAAaA,EACbpB,QAASA,GACRoC,GAA0BpC,IAe/Be,EAASjB,UAAUiC,kBAAoB,SAAU5c,EAAmBic,EAAapB,GAC/E,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBic,YAAaA,EACbpB,QAASA,GACRqC,GAAgCrC,IAcrCe,EAASjB,UAAUmC,eAAiB,SAAUV,EAAMpc,EAAmBic,EAAapB,GAClF,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBic,YAAaA,EACbpB,QAASA,GACRsC,GAA6BtC,IAGlCe,EAASjB,UAAUyC,uBAAyB,SAAUhD,EAAcS,EAASC,GAC3E,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACRwC,GAAqCvC,IAG1Cc,EAASjB,UAAU2C,wBAA0B,SAAUlD,EAAcS,EAASC,GAC5E,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR0C,GAAsCzC,IAGpCc,EAjMT,GAsMI,GAAa,IAAI,KAAkB,GACnCE,GAAkC,CACpC7T,WAAY,MACZkT,KAAM,0EACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVO,GAAmC,CACrC/T,WAAY,MACZkT,KAAM,6GACNQ,cAAe,CAAC,GAA2B,IAC3CP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVS,GAAmB,CACrBjU,WAAY,MACZkT,KAAM,2HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVuB,GAAmC,CACrC/U,WAAY,MACZkT,KAAM,2HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAkB,CAC9CpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdiC,IAAK,CACHjC,WAAY,IAEdkC,IAAK,CACHlC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVwB,GAA2B,CAC7BhV,WAAY,QACZkT,KAAM,2HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAwB,CACpDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdkC,IAAK,CACHlC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVyB,GAAiC,CACnCjV,WAAY,SACZkT,KAAM,2HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLC,IAAK,GACLpG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV0B,GAA8B,CAChClV,WAAY,OACZkT,KAAM,qIACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAwB,CACpDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV4B,GAAsC,CACxCpV,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV8B,GAAuC,CACzCtV,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICjXVmC,GAEJ,WAKE,SAASA,EAAKlD,GACZlb,KAAKkb,OAASA,EAwNhB,OArNAkD,EAAKjD,UAAUkB,mBAAqB,SAAUhB,EAASC,GACrD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACR,GAAiCC,IAGtC8C,EAAKjD,UAAUoB,oBAAsB,SAAU/b,EAAmB6a,EAASC,GACzE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnB6a,QAASA,GACR,GAAkCC,IAGvC8C,EAAKjD,UAAUzX,IAAM,SAAUlD,EAAmBc,EAAS+Z,EAASC,GAClE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR,GAAkBC,IAcvB8C,EAAKjD,UAAUwB,eAAiB,SAAUC,EAAMpc,EAAmBc,EAAS+Z,GAC1E,OAAOrb,KAAK6c,oBAAoBD,EAAMpc,EAAmBc,EAAS+Z,GAASyB,MAAK,SAAUC,GACxF,OAAOA,EAAUC,wBAerBoB,EAAKjD,UAAU8B,OAAS,SAAUL,EAAMpc,EAAmBc,EAAS+Z,GAClE,OAAOrb,KAAKkd,YAAYN,EAAMpc,EAAmBc,EAAS+Z,GAASyB,MAAK,SAAUC,GAChF,OAAOA,EAAUC,wBAcrBoB,EAAKjD,UAAUgC,aAAe,SAAU3c,EAAmBc,EAAS+Z,GAClE,OAAOrb,KAAKod,kBAAkB5c,EAAmBc,EAAS+Z,GAASyB,MAAK,SAAUC,GAChF,OAAOA,EAAUC,wBAerBoB,EAAKjD,UAAUkD,QAAU,SAAU7d,EAAmBc,EAAS+Z,GAC7D,OAAOrb,KAAKse,aAAa9d,EAAmBc,EAAS+Z,GAASyB,MAAK,SAAUC,GAC3E,OAAOA,EAAUC,wBAcrBoB,EAAKjD,UAAUoD,UAAY,SAAU/d,EAAmBc,EAAS+Z,GAC/D,OAAOrb,KAAKwe,eAAehe,EAAmBc,EAAS+Z,GAASyB,MAAK,SAAUC,GAC7E,OAAOA,EAAUC,wBAerBoB,EAAKjD,UAAU0B,oBAAsB,SAAUD,EAAMpc,EAAmBc,EAAS+Z,GAC/E,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR,GAAkCA,IAcvC+C,EAAKjD,UAAU+B,YAAc,SAAUN,EAAMpc,EAAmBc,EAAS+Z,GACvE,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR,GAA0BA,IAa/B+C,EAAKjD,UAAUiC,kBAAoB,SAAU5c,EAAmBc,EAAS+Z,GACvE,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR,GAAgCA,IAcrC+C,EAAKjD,UAAUmD,aAAe,SAAU9d,EAAmBc,EAAS+Z,GAClE,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRoD,GAA2BpD,IAahC+C,EAAKjD,UAAUqD,eAAiB,SAAUhe,EAAmBc,EAAS+Z,GACpE,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRqD,GAA6BrD,IAGlC+C,EAAKjD,UAAUyC,uBAAyB,SAAUhD,EAAcS,EAASC,GACvE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAAqCC,IAG1C8C,EAAKjD,UAAU2C,wBAA0B,SAAUlD,EAAcS,EAASC,GACxE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAAsCC,IAGpC8C,EA9NT,GAmOI,GAAa,IAAI,KAAkB,GACnC,GAAkC,CACpC3V,WAAY,MACZkT,KAAM,sEACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmC,CACrCxT,WAAY,MACZkT,KAAM,yGACNQ,cAAe,CAAC,GAA2B,IAC3CP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmB,CACrBxT,WAAY,MACZkT,KAAM,mHACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmC,CACrCxT,WAAY,MACZkT,KAAM,mHACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAc,CAC1CpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdiC,IAAK,CACHjC,WAAY,IAEdkC,IAAK,CACHlC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAA2B,CAC7BxT,WAAY,QACZkT,KAAM,mHACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAoB,CAChDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdkC,IAAK,CACHlC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAiC,CACnCxT,WAAY,SACZkT,KAAM,mHACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLC,IAAK,GACLpG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVwC,GAA4B,CAC9BhW,WAAY,OACZkT,KAAM,2HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVyC,GAA8B,CAChCjW,WAAY,OACZkT,KAAM,6HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAsC,CACxCxT,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAuC,CACzCxT,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICvZV0C,GAEJ,WAKE,SAASA,EAAMzD,GACblb,KAAKkb,OAASA,EA0LhB,OAvLAyD,EAAMxD,UAAUyD,UAAY,SAAUpe,EAAmBc,EAAS+Z,EAASC,GACzE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRwD,GAAwBvD,IAG7BqD,EAAMxD,UAAUzX,IAAM,SAAUlD,EAAmBc,EAASyZ,EAAUM,EAASC,GAC7E,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACTyZ,SAAUA,EACVM,QAASA,GACR,GAAkBC,IAgBvBqD,EAAMxD,UAAUwB,eAAiB,SAAUC,EAAMpc,EAAmBc,EAASyZ,EAAUM,GACrF,OAAOrb,KAAK6c,oBAAoBD,EAAMpc,EAAmBc,EAASyZ,EAAUM,GAASyB,MAAK,SAAUC,GAClG,OAAOA,EAAUC,wBAgBrB2B,EAAMxD,UAAU8B,OAAS,SAAUzc,EAAmBc,EAASyZ,EAAUM,GACvE,OAAOrb,KAAKkd,YAAY1c,EAAmBc,EAASyZ,EAAUM,GAASyB,MAAK,SAAUC,GACpF,OAAOA,EAAUC,wBAgBrB2B,EAAMxD,UAAUgC,aAAe,SAAU3c,EAAmBc,EAASyZ,EAAUM,GAC7E,OAAOrb,KAAKod,kBAAkB5c,EAAmBc,EAASyZ,EAAUM,GAASyB,MAAK,SAAUC,GAC1F,OAAOA,EAAUC,wBAgBrB2B,EAAMxD,UAAU2D,OAAS,SAAUte,EAAmBc,EAASyZ,EAAUM,GACvE,OAAOrb,KAAK+e,YAAYve,EAAmBc,EAASyZ,EAAUM,GAASyB,MAAK,SAAUC,GACpF,OAAOA,EAAUC,wBAiBrB2B,EAAMxD,UAAU0B,oBAAsB,SAAUD,EAAMpc,EAAmBc,EAASyZ,EAAUM,GAC1F,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACTyZ,SAAUA,EACVM,QAASA,GACR,GAAkCA,IAevCsD,EAAMxD,UAAU+B,YAAc,SAAU1c,EAAmBc,EAASyZ,EAAUM,GAC5E,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACTyZ,SAAUA,EACVM,QAASA,GACR,GAA0BA,IAe/BsD,EAAMxD,UAAUiC,kBAAoB,SAAU5c,EAAmBc,EAASyZ,EAAUM,GAClF,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACTyZ,SAAUA,EACVM,QAASA,GACR,GAAgCA,IAerCsD,EAAMxD,UAAU4D,YAAc,SAAUve,EAAmBc,EAASyZ,EAAUM,GAC5E,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACTyZ,SAAUA,EACVM,QAASA,GACR2D,GAA0B3D,IAG/BsD,EAAMxD,UAAU8D,cAAgB,SAAUrE,EAAcS,EAASC,GAC/D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR6D,GAA4B5D,IAG1BqD,EAhMT,GAqMI,GAAa,IAAI,KAAkB,GACnCE,GAAyB,CAC3BpW,WAAY,MACZkT,KAAM,yHACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmB,CACrBxT,WAAY,MACZkT,KAAM,oIACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmC,CACrCxT,WAAY,MACZkT,KAAM,oIACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAe,CAC3CpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdiC,IAAK,CACHjC,WAAY,IAEdkC,IAAK,CACHlC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAA2B,CAC7BxT,WAAY,QACZkT,KAAM,oIACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,CACbjG,qBAAsB,CAAC,UAAW,yBAEpCkG,OAAQ,aAAS,aAAS,GAAI,IAAqB,CACjDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdkC,IAAK,CACHlC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAiC,CACnCxT,WAAY,SACZkT,KAAM,oIACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLC,IAAK,GACLpG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV+C,GAA2B,CAC7BvW,WAAY,OACZkT,KAAM,2IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,CACb1Q,KAAM,CAAC,UAAW,SAEpB2Q,OAAQ,aAAS,aAAS,GAAI,IAAqB,CACjDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEViD,GAA6B,CAC/BzW,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICpVVkD,GAEJ,WAKE,SAASA,EAAgBjE,GACvBlb,KAAKkb,OAASA,EAuOhB,OApOAiE,EAAgBhE,UAAUyD,UAAY,SAAUpe,EAAmBc,EAAS+Z,EAASC,GACnF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR,GAAwBC,IAG7B6D,EAAgBhE,UAAUzX,IAAM,SAAUlD,EAAmBc,EAAS0Z,EAAoBK,EAASC,GACjG,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT0Z,mBAAoBA,EACpBK,QAASA,GACR,GAAkBC,IAevB6D,EAAgBhE,UAAUiE,MAAQ,SAAU5e,EAAmBc,EAAS0Z,EAAoBK,GAC1F,OAAOrb,KAAKqf,WAAW7e,EAAmBc,EAAS0Z,EAAoBK,GAASyB,MAAK,SAAUC,GAC7F,OAAOA,EAAUC,wBAgBrBmC,EAAgBhE,UAAUmE,KAAO,SAAU9e,EAAmBc,EAAS0Z,EAAoBK,GACzF,OAAOrb,KAAKuf,UAAU/e,EAAmBc,EAAS0Z,EAAoBK,GAASyB,MAAK,SAAUC,GAC5F,OAAOA,EAAUC,wBAiBrBmC,EAAgBhE,UAAUqE,QAAU,SAAUhf,EAAmBc,EAAS0Z,EAAoBK,GAC5F,OAAOrb,KAAKyf,aAAajf,EAAmBc,EAAS0Z,EAAoBK,GAASyB,MAAK,SAAUC,GAC/F,OAAOA,EAAUC,wBAkBrBmC,EAAgBhE,UAAUuE,SAAW,SAAUlf,EAAmBc,EAAS0Z,EAAoBK,GAC7F,OAAOrb,KAAK2f,cAAcnf,EAAmBc,EAAS0Z,EAAoBK,GAASyB,MAAK,SAAUC,GAChG,OAAOA,EAAUC,wBAiBrBmC,EAAgBhE,UAAUyE,cAAgB,SAAUhD,EAAMpc,EAAmBc,EAAS0Z,EAAoBK,GACxG,OAAOrb,KAAK6f,mBAAmBjD,EAAMpc,EAAmBc,EAAS0Z,EAAoBK,GAASyB,MAAK,SAAUC,GAC3G,OAAOA,EAAUC,wBAgBrBmC,EAAgBhE,UAAUkE,WAAa,SAAU7e,EAAmBc,EAAS0Z,EAAoBK,GAC/F,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT0Z,mBAAoBA,EACpBK,QAASA,GACRyE,GAAyBzE,IAe9B8D,EAAgBhE,UAAUoE,UAAY,SAAU/e,EAAmBc,EAAS0Z,EAAoBK,GAC9F,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT0Z,mBAAoBA,EACpBK,QAASA,GACR0E,GAAwB1E,IAgB7B8D,EAAgBhE,UAAUsE,aAAe,SAAUjf,EAAmBc,EAAS0Z,EAAoBK,GACjG,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT0Z,mBAAoBA,EACpBK,QAASA,GACR2E,GAA2B3E,IAiBhC8D,EAAgBhE,UAAUwE,cAAgB,SAAUnf,EAAmBc,EAAS0Z,EAAoBK,GAClG,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACT0Z,mBAAoBA,EACpBK,QAASA,GACR4E,GAA4B5E,IAgBjC8D,EAAgBhE,UAAU0E,mBAAqB,SAAUjD,EAAMpc,EAAmBc,EAAS0Z,EAAoBK,GAC7G,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChCX,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACT0Z,mBAAoBA,EACpBK,QAASA,GACR6E,GAAiC7E,IAGtC8D,EAAgBhE,UAAU8D,cAAgB,SAAUrE,EAAcS,EAASC,GACzE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAA4BC,IAG1B6D,EA7OT,GAkPI,GAAa,IAAI,KAAkB,GACnC,GAAyB,CAC3B1W,WAAY,MACZkT,KAAM,mIACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmB,CACrBxT,WAAY,MACZkT,KAAM,wJACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV6D,GAA0B,CAC5BrX,WAAY,OACZkT,KAAM,8JACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV8D,GAAyB,CAC3BtX,WAAY,OACZkT,KAAM,6JACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV+D,GAA4B,CAC9BvX,WAAY,OACZkT,KAAM,gKACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVgE,GAA6B,CAC/BxX,WAAY,OACZkT,KAAM,iKACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEViE,GAAkC,CACpCzX,WAAY,OACZkT,KAAM,sKACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAA4B,CACxDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAA6B,CAC/BxT,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICpXV,GAEJ,WAKE,SAASkE,EAAUjF,GACjBlb,KAAKkb,OAASA,EAsFhB,OAnFAiF,EAAUhF,UAAUyD,UAAY,SAAUpe,EAAmBc,EAAS+Z,EAASC,GAC7E,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR,GAAwBC,IAG7B6E,EAAUhF,UAAUzX,IAAM,SAAUlD,EAAmBc,EAASwZ,EAAcO,EAASC,GACrF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACTwZ,aAAcA,EACdO,QAASA,GACR,GAAkBC,IAGvB6E,EAAUhF,UAAUwB,eAAiB,SAAUC,EAAMpc,EAAmBc,EAASwZ,EAAcO,EAASC,GACtG,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACTwZ,aAAcA,EACdO,QAASA,GACR+E,GAA6B9E,IAGlC6E,EAAUhF,UAAU8B,OAAS,SAAUL,EAAMpc,EAAmBc,EAASwZ,EAAcO,EAASC,GAC9F,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACTwZ,aAAcA,EACdO,QAASA,GACRgF,GAAqB/E,IAe1B6E,EAAUhF,UAAUgC,aAAe,SAAU3c,EAAmBc,EAASwZ,EAAcO,GACrF,OAAOrb,KAAKod,kBAAkB5c,EAAmBc,EAASwZ,EAAcO,GAASyB,MAAK,SAAUC,GAC9F,OAAOA,EAAUC,wBAgBrBmD,EAAUhF,UAAUiC,kBAAoB,SAAU5c,EAAmBc,EAASwZ,EAAcO,GAC1F,OAAOrb,KAAKkb,OAAOqC,eAAe,CAChC/c,kBAAmBA,EACnBc,QAASA,EACTwZ,aAAcA,EACdO,QAASA,GACR,GAAgCA,IAGrC8E,EAAUhF,UAAU8D,cAAgB,SAAUrE,EAAcS,EAASC,GACnE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAA4BC,IAG1B6E,EA5FT,GAiGI,GAAa,IAAI,KAAkB,GACnC,GAAyB,CAC3B1X,WAAY,MACZkT,KAAM,6HACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmB,CACrBxT,WAAY,MACZkT,KAAM,4IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVmE,GAA8B,CAChC3X,WAAY,MACZkT,KAAM,4IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAmB,CAC/CpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdiC,IAAK,CACHjC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVoE,GAAsB,CACxB5X,WAAY,QACZkT,KAAM,4IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAyB,CACrDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAiC,CACnCxT,WAAY,SACZkT,KAAM,4IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAoB,IAC7FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLC,IAAK,GACLpG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAA6B,CAC/BxT,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICjNVqE,GAEJ,WAKE,SAASA,EAAOpF,GACdlb,KAAKkb,OAASA,EA8ChB,OA3CAoF,EAAOnF,UAAUoF,cAAgB,SAAU/f,EAAmBic,EAAapB,EAASC,GAClF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBic,YAAaA,EACbpB,QAASA,GACRmF,GAA4BlF,IAGjCgF,EAAOnF,UAAUzX,IAAM,SAAUlD,EAAmBic,EAAagE,EAAWpF,EAASC,GACnF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBic,YAAaA,EACbgE,UAAWA,EACXpF,QAASA,GACR,GAAkBC,IAGvBgF,EAAOnF,UAAUwB,eAAiB,SAAUC,EAAMpc,EAAmBic,EAAagE,EAAWpF,EAASC,GACpG,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNpc,kBAAmBA,EACnBic,YAAaA,EACbgE,UAAWA,EACXpF,QAASA,GACR,GAA6BC,IAGlCgF,EAAOnF,UAAU8B,OAAS,SAAUzc,EAAmBic,EAAagE,EAAWpF,EAASC,GACtF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBic,YAAaA,EACbgE,UAAWA,EACXpF,QAASA,GACR,GAAqBC,IAG1BgF,EAAOnF,UAAUuF,kBAAoB,SAAU9F,EAAcS,EAASC,GACpE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACRsF,GAAgCrF,IAG9BgF,EApDT,GAyDI,GAAa,IAAI,KAAkB,GACnCE,GAA6B,CAC/B/X,WAAY,MACZkT,KAAM,kIACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmB,CACrBxT,WAAY,MACZkT,KAAM,8IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAwB,IACjGP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAA8B,CAChCxT,WAAY,MACZkT,KAAM,8IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAwB,IACjGP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAgB,CAC5CpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAsB,CACxBxT,WAAY,QACZkT,KAAM,8IACNQ,cAAe,CAAC,GAA2B,GAA8B,GAAwB,IACjGP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,CACb/D,aAAc,CAAC,UAAW,iBAE5BgE,OAAQ,aAAS,aAAS,GAAI,IAAsB,CAClDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV0E,GAAiC,CACnClY,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICzJV2E,GAEJ,WAKE,SAASA,EAAiB1F,GACxBlb,KAAKkb,OAASA,EAUhB,OAPA0F,EAAiBzF,UAAUzX,IAAM,SAAUmd,EAAmBxF,EAASC,GACrE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCsF,kBAAmBA,EACnBxF,QAASA,GACR,GAAkBC,IAGhBsF,EAhBT,GAqBI,GAAa,IAAI,KAAkB,GACnC,GAAmB,CACrBnY,WAAY,MACZkT,KAAM,sGACNQ,cAAe,CAAC,GRoEa,CAC7B/B,cAAe,oBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,oBAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,aQ9EVib,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdmC,IAAK,GACLpG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICvCV6E,GAEJ,WAKE,SAASA,EAAO5F,GACdlb,KAAKkb,OAASA,EAiBhB,OAdA4F,EAAO3F,UAAU4F,eAAiB,SAAUzhB,EAAU+b,EAASC,GAC7D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCjc,SAAUA,EACV+b,QAASA,GACR2F,GAA6B1F,IAGlCwF,EAAO3F,UAAU8F,mBAAqB,SAAUrG,EAAcS,EAASC,GACrE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR6F,GAAiC5F,IAG/BwF,EAvBT,GA4BI,GAAa,IAAI,KAAkB,GACnCE,GAA8B,CAChCvY,WAAY,MACZkT,KAAM,6FACNQ,cAAe,CAAC,GTmCI,CACpB/B,cAAe,WACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,WAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,eAEXja,KAAM,CACJC,KAAM,aS7CVib,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEViF,GAAkC,CACpCzY,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IC7DVkF,GAEJ,WAKE,SAASA,EAAKjG,GACZlb,KAAKkb,OAASA,EAgBhB,OAbAiG,EAAKhG,UAAUC,KAAO,SAAUC,EAASC,GACvC,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACR,GAAmBC,IAGxB6F,EAAKhG,UAAUM,SAAW,SAAUb,EAAcS,EAASC,GACzD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAAuBC,IAGrB6F,EAtBT,GA2BI,GAAa,IAAI,KAAkB,GACnC,GAAoB,CACtB1Y,WAAY,MACZkT,KAAM,sEACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,GAAuB,IACzCC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAwB,CAC1BxT,WAAY,MACZyT,QAAS,+BACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,I,WC3DV,GAEJ,SAAUmF,GAUR,SAASC,EAAkBC,EAAa/gB,EAAgB8a,GACtD,IAAIkG,EAAQH,EAAOI,KAAKxhB,KAAMshB,EAAa/gB,EAAgB8a,IAAYrb,KAYvE,OAVAuhB,EAAME,WAAa,IAAI,GAAsBF,GAC7CA,EAAMG,SAAW,IAAI,GAAoBH,GACzCA,EAAMI,KAAO,IAAI,GAAgBJ,GACjCA,EAAMK,MAAQ,IAAI,GAAiBL,GACnCA,EAAMM,gBAAkB,IAAI,GAA2BN,GACvDA,EAAMO,UAAY,IAAI,GAAqBP,GAC3CA,EAAMQ,OAAS,IAAI,GAAkBR,GACrCA,EAAMS,iBAAmB,IAAI,GAA4BT,GACzDA,EAAMU,OAAS,IAAI,GAAkBV,GACrCA,EAAMW,KAAO,IAAI,GAAgBX,GAC1BA,EAGT,OAzBA,aAAUF,EAAmBD,GAyBtBC,EA1BT,CCDA,SAAUD,GAUR,SAASe,EAAyBb,EAAa/gB,EAAgB8a,GAC7D,IAAIkG,EAAQvhB,KAEZ,QAAmBgG,GAAfsb,EACF,MAAM,IAAIc,MAAM,iCAGlB,QAAsBpc,GAAlBzF,EACF,MAAM,IAAI6hB,MAAM,oCAOlB,GAJK/G,IACHA,EAAU,KAGPA,EAAQgH,UAAW,CACtB,IAAIC,EAAmB,OACvBjH,EAAQgH,UAAY,GAAGlZ,OAhCX,eAgC+B,KAAKA,OA/BjC,QA+BwD,KAAKA,OAAOmZ,GAoBrF,OAjBAf,EAAQH,EAAOI,KAAKxhB,KAAMshB,EAAajG,IAAYrb,MAC7Cua,WAAa,aACnBgH,EAAMpH,eAAiB,QACvBoH,EAAMgB,iCAAmC,GACzChB,EAAMiB,QAAUnH,EAAQmH,SAAWjB,EAAMiB,SAAW,+BACpDjB,EAAMkB,mBAAqB,kCAC3BlB,EAAMD,YAAcA,EACpBC,EAAMhhB,eAAiBA,EAEQ,OAA3B8a,EAAQlB,qBAAsDnU,IAA3BqV,EAAQlB,iBAC7CoH,EAAMpH,eAAiBkB,EAAQlB,gBAGgB,OAA7CkB,EAAQkH,uCAA0Fvc,IAA7CqV,EAAQkH,mCAC/DhB,EAAMgB,iCAAmClH,EAAQkH,kCAG5ChB,EAGT,OAjDA,aAAUY,EAA0Bf,GAiD7Be,EAlDT,CAmDE,OCnEK,IASMO,GAAO,CAChBC,iBAAkB,0BAClBC,wBAAyB,0BACzBC,cAAe,wCACfC,QAAS,kCACTC,YAAa,wEACbC,0BAA2B,SAAClT,EAAUvP,GAAX,2CAA4DuP,EAA5D,8EAA0IvP,EAA1I,mCAC3B0iB,eAAgB,SAACnT,EAAUvP,GAAX,2CAA4DuP,EAA5D,0DAViB,uCAUjB,sBAAyJvP,EAAzJ,+BATe,uCASf,mCAChB2iB,iBAAkB,SAACpT,GAAD,2CAA4CA,EAA5C,iCAClBqT,UAAW,SAACrT,EAAU/L,GAAX,2CAA0D+L,EAA1D,oBAA8E/L,EAA9E,uBACXqf,kBAAmB,SAACtT,EAAUuT,GAAX,2CAAqEvT,EAArE,oBAAyFuT,EAAzF,YACnBC,iBAAkB,6CAClBC,QAAS,iDACTC,WAAY,mCACZC,UAAW,2HACXC,gBAAiB,gGACjBC,YAAa,yCACbC,kBAAmB,oCACnBC,gBAAiB,mCACjBC,gBAAiB,SAAChU,EAAU6B,GAAX,2CAAuD7B,EAAvD,oBAA2E6B,EAA3E,iBACjBoS,eAAgB,+BAChBC,wBAAyB,SAAClU,GAAD,2CAA4CA,EAA5C,+BAEhBmU,GACW,qBAqDXC,GACF,kDADEA,GAEK,0DAFLA,GAGA,oDAHAA,GAIS,kEAJTA,GAKa,0BALbA,GAMD,mDAICC,GAAwB,CACjC,kEACA,qEACA,2EAGSC,GAAY,CACrBC,wBAvGmC,IAwGnCC,mBAvG8B,IAwG9BC,uBAvGkC,IAwGlCC,mBAvG8B,IAwG9BC,iBAvG4B,iBAwG5BC,WAvGsB,aAwGtBhC,QACAtY,YA1EuB,CACvBua,QAAS,UACTC,SAAU,YAyEVC,iBAvE4B,iBAwE5BC,0BAvEqC,iCAwErCC,aAvEwB,GAwExBC,gBAvE2B,GAwE3BC,mBAvE8B,IAwE9BC,mBAhE8B,GAiE9BC,YAxEuB,KAyEvBC,6BAxEwC,EAyExCC,uBAxEkC,EAyElCC,uBAxEkC,KAyElCC,2BAxEsC,EAyEtCC,oBAxE+B,UAyE/BC,uBApEkC,IAqElCC,6BApEwC,IAqExCC,sBAnEiC,CACjCC,UAAW,EACXC,UAAW,KAkEXC,oBAhE+B,CAC/BF,UAAW,EACXC,UAAW,IA+DXE,gBA5E2B,KA6E3BC,4BA7DuC,IA8DvCC,uBA7DkC,IA8DlCC,mBA7D8B,IA8D9BC,kBA7D6B,IA8D7BC,qBA5DgC,IA6DhCC,kBA5D6B,IA6D7BC,QA5DmB,CACnBC,cAAe,gBACfC,cAAe,gBACfC,YAAa,cACbC,QAAS,UACTC,cAAe,gBACfC,QAAS,WAuDTC,kBArD6B,uCAsD7BC,iBAnF4B,IAoF5BC,kBAnF6B,GAoF7BC,oBAvD+B,MAwD/BC,sBAvDiC,EAwDjCC,wBAvDmC,EAwDnCC,+BA3E0C,EA4E1CC,iBAtI4B,wCAwIjBhD,MC5IFiD,GAAwB5jB,cAAQ,SAACK,GAE1C,OADcA,EAAMJ,IAAI,YAAYA,IAAI,SAC3BkE,QDwFgB,iECxFc,KAElC0f,GAA8B7jB,cAAQ,SAACK,GAEhD,OADcA,EAAMJ,IAAI,YAAYA,IAAI,SAC3BkE,QDqFsB,uECrFc,KAExC2f,GAAqB9jB,cAAQ,SAACK,GAEvC,OADcA,EAAMJ,IAAI,YAAYA,IAAI,SAC3BqF,MAAK,SAACye,GAAD,OAAOrD,GAAsBvc,QAAQ4f,IAAM,QAEpDC,GAAiBhkB,cAAQ,SAACK,GACnC,OAAOujB,GAAsBvjB,IAAUwjB,GAA4BxjB,IAAUyjB,GAAmBzjB,MAEvF4jB,GAAkBjkB,cAAQ,SAACK,GACpC,OAAQ6jB,GAAU7jB,IAAU2jB,GAAe3jB,MAElC8jB,GAAenkB,cAAQ,SAACK,GACjC,OAAO6jB,GAAU7jB,KAAW2jB,GAAe3jB,MAExC,SAAS+jB,GAAqBC,EAAM1kB,EAAO2kB,GAC9C,GAAKD,GAAS1kB,GAAU2kB,EAAxB,CAGA,IAAMC,EAASF,EAAK3nB,MAAM,KAC1B,GAAK6nB,GAA4B,IAAlBA,EAAO1nB,OAAtB,CAGA,IAAM2nB,EAAaD,EAAO,GAAG7nB,MAAM,KACnC,GAAK8nB,GAAoC,IAAtBA,EAAW3nB,QAAkC,UAAlB2nB,EAAW,IAAkBA,EAAW,KAAO7kB,EAA7F,CAGA,IAAM8kB,EAAgBF,EAAO,GAAG7nB,MAAM,KACtC,GAAK+nB,GAA0C,IAAzBA,EAAc5nB,QAAqC,cAArB4nB,EAAc,IAAuBA,EAAc,GAIvG,GADqBC,GAAsBD,EAAc,IACzC,QAAcH,EAG9B,OAAOG,EAAc,MAElB,IAAMC,GAAwB1kB,cAAQ,SAAC2kB,GAC1C,IACIC,EADEC,EAAUF,EAAMjoB,MAAM,KAAK,GAEjC,GAAMmoB,EAAS,CACX,IAAMC,ECnDP,SAAyBD,GAC5B,IAAIE,EAAgBF,EAAQG,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KACvDC,EAAWF,EAAcloB,OAAS,EACxC,GAAIooB,EAAW,EACX,IAAK,IAAIC,EAAQ,EAAGA,EAAQ,EAAID,EAAUC,IACtCH,EAAgBA,EAAcrf,OAAO,KAG7C,OAAOyf,KAAKJ,GD2CeK,CAAgBP,GACvCD,EAAMS,KAAKC,MAAMR,GAErB,OAAOF,KAEEW,GAAqBvlB,cAAQ,SAACK,GACvC,IAAMmlB,EAAanlB,EAAMJ,IAAI,YAAYA,IAAI,cAC7C,cAAOulB,QAAP,IAAOA,OAAP,EAAOA,EAAYrX,SAEVsX,GAAkBzlB,cAAQ,SAACK,GACpC,IAAMmlB,EAAanlB,EAAMJ,IAAI,YAAYA,IAAI,cAC7C,cAAOulB,QAAP,IAAOA,OAAP,EAAOA,EAAYhpB,MAEVkpB,GAA6B1lB,cAAQ,SAACK,GAG/C,OAFiBA,EAAMJ,IAAI,YACiBA,IAAI,iCAGvC0lB,GAAwB3lB,cAAQ,SAACK,GAC1C,OAAOA,EAAMJ,IAAI,YAAYA,IAAI,kB,whCE7D9B,IAAM2lB,GAAuB5lB,cAAQ,SAACK,GACzC,IADmD,EAE7CwlB,EADWxlB,EAAMJ,IAAI,iBACQA,IAAI,wBACjC6lB,EAAqBC,GAAsB1lB,GAC7C6d,EAAO7Y,kBAJwC,KAKxBwgB,GALwB,IAKnD,2BAA8C,CAAC,IAAD,kBAAlCG,EAAkC,KAA7Bxf,EAA6B,KAC1C,GAAwE,IAApEhH,GAAuCsmB,EAAoBE,GAAY,CACvE9H,EAAO1X,EACP,QAR2C,8BAWnD,OAAO0X,KAEE+H,GAAwBjmB,cAAQ,SAACK,GAG1C,OAFiBA,EAAMJ,IAAI,iBACIA,IAAI,oBAG1BimB,GAAuBlmB,cAAQ,SAACK,GAGzC,OAFiBA,EAAMJ,IAAI,iBACGA,IAAI,mBAM/B,IAAMkmB,GAAoBnmB,cAAQ,SAACkJ,GAAS,IAAD,EAC9C,QAASA,MAAQ,UAACA,EAAIwD,kBAAL,aAAC,EAAgBd,YAAa1C,EAAIwD,WAAWd,UAAUwa,SAAS,eAExEC,GAAqBrmB,cAAQ,SAACkJ,GACvC,OAAOA,EAAItJ,oBAAsB0mB,EAAkB7mB,kBAAkB8mB,YAE5DC,GAAqBxmB,cAAQ,SAACK,GACvC,IACMomB,EADWpmB,EAAMJ,IAAI,iBACAA,IAAI,aAC/B,OAAOymB,GAAeD,MAEbE,GAAkC3mB,cAAQ,SAACK,GACpD,IAAMumB,EAAWvmB,EAAMJ,IAAI,iBAC3B,GAAI2mB,EAASC,IAAI,mCAEb,OADwCD,EAAS3mB,IAAI,sCAKhD6mB,GAAmC9mB,cAAQ,SAACK,GACrD,IAAMumB,EAAWvmB,EAAMJ,IAAI,iBAC3B,GAAI2mB,EAASC,IAAI,mCAEb,OADwCD,EAAS3mB,IAAI,sCAKhD8mB,GAAc/mB,cAAQ,SAACK,EAAOvC,GACvC,GAAKA,EAKL,OAFa8nB,GAAqBvlB,GACjBE,MAAK,SAAC2I,GAAD,OAAmE,IAA1D1J,GAAuC0J,EAAI1M,GAAIsB,SAGrEkpB,GAAgBhnB,cAAQ,SAACK,GAAW,IAAD,EACtC4mB,EAAeC,GAAgB7mB,GAC/B8mB,EAAkBJ,GAAY1mB,EAAO4mB,GAC3C,OAAsB,OAAfE,QAAe,IAAfA,GAAA,UAAAA,EAAiBpZ,6BAAjB,eAAwCuB,gBAAiBgX,EAAkBnf,aAAaigB,cAEtFC,GAAgCrnB,cAAQ,SAACK,GAAW,IAAD,EACtD4mB,EAAeC,GAAgB7mB,GAC/B8mB,EAAkBJ,GAAY1mB,EAAO4mB,GACrCK,EAAoB,iBAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAiBI,gCAApB,eAAgDJ,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAiBvnB,kBAC3F,OAAQ4nB,GAAgBF,MAQfG,GAAsBznB,cAAQ,SAACK,GACxC,IACMqnB,EADWrnB,EAAMJ,IAAI,iBACHA,IAAI,UACtBgnB,EAAeC,GAAgB7mB,GACrC,OAAOqnB,EAAOznB,IAAIgnB,MAQTU,GAAuB3nB,cAAQ,SAACK,GACzC,IACMunB,EADWvnB,EAAMJ,IAAI,iBACWA,IAAI,wBAC1C,OAAOymB,GAAekB,MAEbC,GAA2B7nB,cAAQ,SAACK,GAC7C,IACMynB,EADWznB,EAAMJ,IAAI,iBACKA,IAAI,eAC9BgnB,EAAeC,GAAgB7mB,GACrC,OAAQ,OAACynB,QAAD,IAACA,OAAD,EAACA,EAAgBtrB,KAAkF,IAA5EgD,GAAuCynB,EAAca,EAAetrB,IAC7FsrB,OACAvlB,KAEV,SAASwlB,GAAY7e,GAAM,IAAD,EACtB,iBAAOA,EAAI8e,uBAAX,QAA8B9e,EAAIvJ,MAE/B,IAAMsoB,GAAoB,SAAC/e,GAC9B,OAAO6e,GAAY7e,KAASod,EAAkBpf,SAAS3C,SAE9C2jB,GAAkB,SAAChf,GAC5B,OAAO6e,GAAY7e,KAASod,EAAkBpf,SAASihB,OAK9CC,GAAuB,SAACzoB,GAAW,IAAD,EACvC0oB,EAAY,GACVC,EAAQpE,GAAUvkB,GAClB4oB,EAAe5e,GAAahK,GAC5BuJ,EAAMsf,GAAc7oB,GAC1B,GAAI2oB,EAAO,CACP,IAAMG,EAAclD,GAAmB5lB,GACvC0oB,EAAS,OAAGI,QAAH,IAAGA,IAAe,QAE1B,OAAIvf,QAAJ,IAAIA,GAAJ,UAAIA,EAAK+E,qBAAT,aAAI,EAAoBiC,0BACzBmY,EAAYE,GAEhB,OAAOF,GAEEK,GAAyB,SAACxf,GAAS,IAAD,EAC3C,SAAQ,OAACA,QAAD,IAACA,GAAD,UAACA,EAAK+E,qBAAN,aAAC,EAAoBmC,cC3IpBuY,GACC,WADDA,GAEF,QAFEA,GAGG,aAHHA,GAKU,oBALVA,GAMC,WANDA,GAOD,SAPCA,GAQC,WARDA,GASU,oBAEVC,GACI,cADJA,GAEW,qBCGXC,GAAkB7oB,cAAQ,SAACK,GAGpC,OAFiBA,EAAMJ,IAAI,YACLA,IAAI,WAMvB,IAAM6oB,GAAiB9oB,cAAQ,SAACK,EAAOvC,GAC1C,GAAKA,EAKL,OAFa+qB,GAAgBxoB,GACZE,MAAK,SAAC2I,GAAD,OAASA,EAAI1M,KAAOsB,QAcjCirB,IAVwB/oB,cAAQ,SAACK,GAC1C,IAAM4mB,EAAeC,GAAgB7mB,GACrC,GAAK4mB,EAGL,OAAO6B,GAAezoB,EAAO4mB,MAKHjnB,cAAQ,SAACK,GAEnC,OADa2oB,GAAQ3oB,GACT4oB,WAAU,SAAC/f,GAAD,OAASggB,GAAahgB,OAAS,MAQ5CigB,GAAenpB,cAAQ,SAACK,GAEjC,OADa2oB,GAAQ3oB,GACT4oB,WAAU,SAAC/f,GAAD,OAASkgB,GAAWlgB,OAAS,KAE1CmgB,GAAsBrpB,cAAQ,SAACK,GACxC,IAAM6I,EAAMsf,GAAcnoB,GAC1B,OAAO6oB,GAAahgB,MAEXogB,GAAuBtpB,cAAQ,SAACK,GACzC,IAAM6I,EAAMsf,GAAcnoB,GAC1B,GAAIkpB,GAAU,OAACrgB,QAAD,IAACA,OAAD,EAACA,EAAK1M,IAChB,OAAO,EAEX,IAAMuG,EAAWb,GAAmB7B,GACpC,OAAOmpB,GAActgB,EAAKnG,MAEjB0mB,GAAwBzpB,cAAQ,SAACK,GAC1C,IAAM6I,EAAMsf,GAAcnoB,GAC1B,OAAOqpB,GAAexgB,MAEbygB,GAAqB3pB,cAAQ,SAACK,GACvC,IAAM6I,EAAMsf,GAAcnoB,GAC1B,OAAOupB,GAAY1gB,MAEV2gB,GAAuB7pB,cAAQ,SAACK,GACzC,OAAQgpB,GAAoBhpB,KACvBopB,GAAsBppB,IACvBspB,GAAmBtpB,MACjBwC,GAAuBxC,MAEpBypB,GAA0B9pB,cAAQ,SAACK,GAAW,IAAD,EAChD6I,EAAMsf,GAAcnoB,GAC1B,OAAKkpB,GAAU,iBAACrgB,QAAD,IAACA,OAAD,EAACA,EAAK1M,UAAN,QAAY,IFJE,SAAC0M,GAC9B,OAAO6e,GAAY7e,KAASod,EAAkBpf,SAAS6iB,QEO5CC,CAAkB9gB,KAHhBA,GAAOM,GAAiBN,MAM5B+gB,GAAmBjqB,cAAQ,SAACkJ,GACrC,IAAKA,EACD,OAAO,EAEX,GAAKqgB,GAAWrgB,EAAI1M,IAIf,CAAC,IAAD,IACK0tB,EAAWhhB,EACjB,SAAQ,UAACghB,EAASjc,qBAAV,aAAC,EAAwBiC,4BAA2B,UAACga,EAASjc,qBAAV,aAAC,EAAwBkC,cAJrF,QADoBjH,EACCihB,cAOhBC,GAA2BpqB,cAAQ,SAACkJ,GAC7C,QAAKA,IAGAqgB,GAAWrgB,EAAI1M,IAOTksB,GADUxf,GALGA,EACDmhB,eAAiBrgB,GAAalL,UAQ5CwrB,GAA8BtqB,cAAQ,SAACK,GAChD,IACIomB,EAOJ,OALIA,EAH0B8D,GAA6BlqB,GAG3CA,EAAMJ,IAAI,YAAYA,IAAI,aAG1BI,EAAMJ,IAAI,iBAAiBA,IAAI,aAExCymB,GAAeD,IAAc+D,GAAgB/D,MAEjD,SAAS8C,GAAW/sB,GACvB,IAAKA,EACD,OAAO,EAEX,IAAMC,EAAQD,EAAGE,MAAM,KAAKC,QAAO,SAACC,GAAD,MAAa,KAANA,KAC1C,OAAOH,EAAMI,QAAU,GAAgC,SAA3BJ,EAAM,GAAGV,cAERiE,cAAQ,SAACK,GAEtC,OAAOkpB,GADcrC,GAAgB7mB,OADlC,IAIM2oB,GAAUhpB,cAAQ,SAACK,GAE5B,OAD8BkqB,GAA6BlqB,GAEhDwoB,GAAgBxoB,GAGhBulB,GAAqBvlB,MAGvBoqB,GAAmBzqB,cAAQ,SAACK,GAErC,OAD8BkqB,GAA6BlqB,GAEhDuoB,GAGA3C,GAAsB5lB,MAGxBqqB,GAAkB1qB,cAAQ,SAACK,GACpC,IAAIsqB,EAAa3B,GAAQ3oB,GAAOuqB,KAAK7kB,IAC/B8kB,EAAgBJ,GAAiBpqB,GACjCyqB,EAAwBP,GAA6BlqB,GACrD0qB,EAAoBC,GAAiB3qB,EAAOpC,GAAQK,UACpD2sB,EAAwBphB,GAA0BxJ,GAMxD,GALK0qB,GAAqBF,IAAkBjC,KACxC+B,EACMA,EAAWhuB,QAAO,SAACuM,GAAD,OAASwgB,GAAexgB,OAGhD+hB,EAAuB,CACvB,IAAMd,EAAazgB,GAAWrJ,GAC9B,OAAOyqB,EACDH,EAAWhuB,QAAO,SAACuM,GAAD,OAxJhC,SAAqCA,EAAKihB,GACtC,OAAOjhB,EAAIihB,aAAeA,EAuJWe,CAA4BhiB,EAAKihB,MAC5DQ,EAAWhuB,QAAO,SAACuM,GAAD,OF9IzB,SAAkCA,EAAKihB,GAAa,IAAD,EACtD,OAAO,UAAAjhB,EAAI+E,qBAAJ,eAAmBiC,0BAA2Bia,EE6IhBgB,CAAyBjiB,EAAKihB,MAG/D,OAAOQ,KAGFjB,GAAiB,SAACxgB,GAC3B,SAAOA,GAAOA,EAAIkiB,MAAMjnB,QAAQ9C,KAAgB,IAEvCgqB,GAAqB,SAACniB,GAC/B,SAAOA,GAAOA,EAAIkiB,MAAMjnB,QAAQ9C,KAAuB,IAE9C6nB,GAAe,SAAChgB,GACzB,QAASA,IAAQqgB,GAAWrgB,EAAI1M,IAAM2pB,GAAkBjd,GAnJ/B,SAACA,GAC1B,SAAOA,GAAOA,EAAIoiB,mBAAqBpiB,EAAIoiB,kBAAkBlF,SAAS,aAkJPmF,CAAqBriB,KAE3EkgB,GAAa,SAAClgB,GAEvB,SAAM,OAACA,QAAD,IAACA,OAAD,EAACA,EAAKsiB,eAGLtiB,GAAOA,EAAIsiB,YAAc,IAAIC,KAAK,gBAEhCjC,GAAgB,SAACtgB,EAAKnG,GAC/B,QAASmG,GAAOkgB,GAAWlgB,MAAUnG,GAtJjB,SAACA,GACrB,IAAMrB,EAAI,OAAGqB,QAAH,IAAGA,OAAH,EAAGA,EAAUG,iBAAiBwoB,OACxC,MAAgB,oBAAThqB,GACM,2BAATA,GACS,0BAATA,EAkJ6CiqB,CAAgB5oB,IAExD6mB,GAAc,SAAC1gB,GACxB,SAAOA,GAAOA,EAAItJ,oBAAsBH,KAgB/BynB,GAAkBlnB,cAAQ,SAACK,GAEpC,OAD8BkqB,GAA6BlqB,GAEtCA,EAAMJ,IAAI,YACGA,IAAI,gBAI3BimB,GAAqB7lB,MAGvBmoB,GAAgBxoB,cAAQ,SAACK,GAClC,IAAM4mB,EAAeC,GAAgB7mB,GACrC,GAAK4mB,EAGL,OAAOsC,GAAWtC,GAAgBF,GAAY1mB,EAAO4mB,GAAgB6B,GAAezoB,EAAO4mB,MAElF2E,GAAsB5rB,cAAQ,SAACK,GACxC,QAASmoB,GAAcnoB,MAEdwrB,GAAc7rB,cAAQ,SAACK,GAChC,IAAM6d,EAAO8K,GAAQ3oB,GACSkqB,GAA6BlqB,GAC3D,OACM6d,EAAKhZ,KAAI,SAAC/E,GAAD,OAAOA,EAAEjD,WAGf4uB,GAAuB9rB,cAAQ,SAACK,GAEzC,OAD8BkqB,GAA6BlqB,GAErDA,EAAMJ,IAAI,YAAYA,IAAI,aAC1BI,EAAMJ,IAAI,iBAAiBA,IAAI,gBAE5B8rB,GAAgB/rB,cAAQ,SAACK,GAElC,OAD8BkqB,GAA6BlqB,GAErDA,EAAMJ,IAAI,YAAYA,IAAI,cAC1BI,EAAMJ,IAAI,iBAAiBA,IAAI,iBAE5B+rB,GAAoBhsB,cAAQ,SAACK,GACtC,IAAM6d,EAAOwM,GAAgBrqB,GACCkqB,GAA6BlqB,GAC3D,OACW6d,EAAKvhB,QAAO,SAACuM,GAAD,OAASA,EAAItJ,oBAAsBH,SAMjDwsB,GAAmBjsB,cAAQ,SAACkJ,GACrC,GAAKA,EAAL,CAGA,GAAIqgB,GAAWrgB,EAAI1M,IAAK,CAAC,IAAD,EACd0vB,EAAahjB,EACnB,OAAQ,UAACgjB,EAAWne,6BAAZ,aAAC,EAAkC2B,YACrCtJ,KAAO+lB,SAASD,EAAWne,sBAAsB2B,YAAY0c,eAC7D7pB,EAGN,OAAO2G,EAAIwG,WAAW0c,cAGjBC,GAAsBrsB,cAAQ,SAACkJ,GACxC,IAAKA,EACD,OAAO,EAEX,GAAIqgB,GAAWrgB,EAAI1M,IAAK,CACpB,IAAM0vB,EAAahjB,EACnB,OAASgjB,EAAWle,iBAChBke,EAAWle,gBAAgBgC,aAAesW,EAAkB3f,YAAYwa,SAG5E,OAAOjY,EAAIojB,iBAAmB5pB,qBAAG6pB,kBAAkBC,cAG9CC,GAAiBzsB,cAAQ,SAACkJ,GACvB,IAAD,IAAX,GAAMA,EAEF,OADgBqgB,GAAWrgB,EAAI1M,IACjB,UAAG0M,EAAI6E,6BAAP,iBAAG,EAA2BU,WAA9B,aAAG,EAAgCM,SAAW7F,EAAIwjB,iBC/R3DC,GAAsB3sB,cAAQ,SAACK,GAExC,OADyBA,EAAMJ,IAAI,gBAAgBA,IAAI,uBAG9C2sB,GAAc5sB,cAAQ,SAACK,GAGhC,OAFqBA,EAAMJ,IAAI,gBACDA,IAAI,eAGzB4sB,GAA2B7sB,cAAQ,SAAC8sB,EAAS1c,EAAakY,GACnE,OAAKA,KAISwE,EAAQ9f,mBACqE,IAAnFxN,GAAuCstB,EAAQ9f,kBAAmBoD,MAGjE2c,GAAiB/sB,cAAQ,SAAC8sB,EAAS1c,EAAakY,GACzD,OAAOzoB,GAAeitB,IAAYD,GAAyBC,EAAS1c,EAAakY,MAExE0E,GAAmBhtB,cAAQ,SAACK,GACrC,IAAM4d,EAAW2O,GAAYvsB,GACvB4sB,EAAqBtH,GAAsBtlB,GAC3CioB,EAAQpE,GAAU7jB,GACxB,OAAO4d,EAASthB,QAAO,SAACwD,GAAD,OAAO4sB,GAAe5sB,EAAG8sB,EAAoB3E,SAE3D4E,GAAkCltB,cAAQ,SAACK,GACpD,IAAM4d,EAAW+O,GAAiB3sB,GAC5BylB,EAAqBC,GAAsB1lB,GACjD,OAAO4d,EAASthB,QAAO,SAACwD,GAAD,OAEqBgtB,EAFmBrH,EAIiC,IAAzFtmB,GADY,IAAIpD,GAHqC+D,EAGlB3D,IAAI,GACW4wB,qBAAsBD,GAFnF,IAAgDA,QAIzC,SAASE,GAAWpP,EAAU/P,GACjC,OAAO+P,EAAS1d,MAAK,SAACJ,GAAD,OAAmE,IAA5DX,GAAuCW,EAAE3D,GAAI0R,MAEtE,IAAMof,GAAoBttB,cAAQ,SAACK,GAGtC,OAAOgtB,GAFUH,GAAgC7sB,GACxBssB,GAAoBtsB,OAUpCktB,IAP0BvtB,cAAQ,SAACK,GAC5C,IAAM4d,EAAW2O,GAAYvsB,GACvB6rB,EAAa1D,GAAcnoB,GACjC,GAAIkpB,GAAW2C,EAAW1vB,IACtB,OAAOyhB,EAAS1d,MAAK,SAACJ,GAAD,OAAOA,EAAE3D,KAAO0vB,EAAWhe,gBAGrBlO,cAAQ,SAACK,GACxC,IAAI4d,EAAW2O,GAAYvsB,GACrB4sB,EAAqBtH,GAAsBtlB,GAMjD,OAJA4d,EAAWA,EAASthB,QAAO,SAACwD,GAAD,QAASA,EAAEirB,OAClCjrB,EAAEirB,MAAMjnB,QAAQ9C,KAAgB,KAC9BlB,EAAE6M,mBACoF,IAApFxN,GAAuCW,EAAE6M,kBAAmBigB,WAG3DO,GAAqBxtB,cAAQ,SAACK,GAEvC,OADqBA,EAAMJ,IAAI,gBACXA,IAAI,sBCxEfwtB,GACJ,MADIA,GAEC,WCDDC,GAAmC1tB,cAAQ,SAAC2tB,EAAWC,EAAoBC,GACpF,QAA2BtrB,IAAvBqrB,GAAqCC,EAAzC,CADmG,IAK7FC,EAD0BH,EAAxBxZ,MAAwBwZ,EAAjBzZ,aAGf,OADqB6Z,KAAKC,MAAMF,EAAiBD,GAC3BD,MCLbK,GACD,SADCA,GAEG,aAFHA,GAGM,gBAHNA,GAIS,mBAJTA,GAKA,UAEAC,GAAqB,SAACC,GAC/B,IAAMC,EAAY,CACdC,SAAUF,EAAQE,SAClB9Y,aAAc,GACdiJ,OAAQ,IAQZ,OANA2P,EAAQ5Y,aAAa+Y,SAAQ,SAAC9nB,EAAOwf,GACjCoI,EAAU7Y,aAAa/X,KAAK,CAAE+wB,WAAYvI,EAAKwI,cAAehoB,OAElE2nB,EAAQ3P,OAAO8P,SAAQ,SAAC9nB,EAAOwf,GAC3BoI,EAAU5P,OAAOhhB,KAAK,CAAE+wB,WAAYvI,EAAKwI,cAAehoB,OAErD4nB,GAEEK,GAAgBzuB,cAAQ,SAACL,GAElC,OADuBA,EAAMM,IAAI,kBACXA,IAAI,oBAEjByuB,GAA+B1uB,cAAQ,SAAC2uB,GACjD,IAAKA,EACD,OAAOV,GAEX,QAA+B1rB,IAA3BosB,EAAcN,SACd,OAAOJ,GAEX,GAAIU,EAAcN,SACd,OAAOJ,GARwD,IAU3D1Y,EAAyBoZ,EAAzBpZ,aAAciJ,EAAWmQ,EAAXnQ,OACtB,IAAKjJ,IAAiBiJ,EAClB,OAAOyP,GAEX,IAAMW,EAAWrZ,EAAatV,IAAIwtB,IAC5BoB,EAAgBtZ,EAAatV,IAAIwtB,IACvC,GAAiB,IAAbmB,GAAoC,IAAlBC,EAClB,OAAOZ,GAEX,IAAMa,EAAWtQ,EAAOve,IAAIwtB,IACtBsB,EAAgBvQ,EAAOve,IAAIwtB,IACjC,YAAiBlrB,IAAbqsB,QACkBrsB,IAAlBssB,QACatsB,IAAbusB,QACkBvsB,IAAlBwsB,EACOd,GAEPa,GAAYF,GAAYG,GAAiBF,EAClCZ,GAEJA,MAOEe,GAAyBhvB,cAAQ,SAACivB,EAAensB,EAAkBosB,GAC5E,QAA0B3sB,IAAtB2sB,EAGJ,OAAIpsB,QAGkBP,IAAlB0sB,EAFOC,EAKPA,EAAoBD,EAAgB,EAC7B,EAEJC,EAAoBD,KAKlBE,GAAgCnvB,cAAQ,SAACovB,EAAOvB,EAAYc,GACrE,GAAKA,QAGcpsB,IAAfsrB,QAG2BtrB,IAA3BosB,EAAcN,WAGdM,EAAcN,SAAlB,CAVuF,IAa/E9Y,EAAyBoZ,EAAzBpZ,aAAciJ,EAAWmQ,EAAXnQ,OACtB,GAAKjJ,GAAiBiJ,EAAtB,CAGA,IAAMoQ,EAAWrZ,EAAatV,IAAIwtB,IAC5BoB,EAAgBtZ,EAAatV,IAAIwtB,IACvC,GAAiB,IAAbmB,GAAoC,IAAlBC,EAClB,OAAO,EAEX,IAAMC,EAAWtQ,EAAOve,IAAIwtB,IACtBsB,EAAgBvQ,EAAOve,IAAIwtB,IAC3BK,EAAiBsB,EAAQR,EAAWE,EAAWD,EAAgBE,EAErE,OADqBhB,KAAKC,MAAMF,EAAiBD,QAGxCwB,GAAsBrvB,cAAQ,SAACuuB,EAAYI,GACpD,GAAKA,QAG0BpsB,IAA3BosB,EAAcN,WAGdM,EAAcN,SAAlB,CAPsE,IAU9D9Y,EAAiBoZ,EAAjBpZ,aACR,GAAKA,EAGL,OAAOA,EAAatV,IAAIsuB,OAEfe,GAAgBtvB,cAAQ,SAACuuB,EAAYI,GAC9C,GAAKA,QAG0BpsB,IAA3BosB,EAAcN,WAGdM,EAAcN,SAAlB,CAPgE,IAUxD7P,EAAWmQ,EAAXnQ,OACR,GAAKA,EAGL,OAAOA,EAAOve,IAAIsuB,OAETgB,GAA0CvvB,cAAQ,SAACwvB,EAASJ,EAAOvB,EAAYc,EAAef,GACvG,GAAKe,EAGL,OAAQa,EAEF9B,GAAiCiB,EAAef,EAAoBC,GADpEsB,GAA8BC,EAAOvB,EAAYc,MChJ9Cc,GAAqCzvB,cAAQ,SAACK,GAAD,OAAWA,EAAMJ,IAAI,oCAAoCA,IAAI,WAC1GyvB,GAAwB1vB,cAAQ,SAACK,GAAW,IAAD,IAC9C4mB,EAAeC,GAAgB7mB,GAC/B8mB,EAAkBJ,GAAY1mB,EAAO4mB,GACrC0I,EAAS,OAAGxI,QAAH,IAAGA,GAAH,UAAGA,EAAiBpZ,6BAApB,aAAG,EAAwCyB,OACpDf,EAAG,OAAG0Y,QAAH,IAAGA,GAAH,UAAGA,EAAiBpZ,6BAApB,aAAG,EAAwCU,IAC9CmhB,EAA6BH,GAAmCpvB,GACtE,GAAKsvB,GAAclhB,GAAQmhB,EAM3B,OAHiBD,IAAcrJ,EAAkBzf,OAAOgpB,MAClDD,EAA2BE,MAC3BF,EAA2BG,SACjBC,MAAMvhB,EAAIvR,S,whCCfvB,ICYI,GAcA,GAcA+yB,GAgCA,GAkEAC,GA+BA,GAoCA,GA2CA,GAeA,GA2BA,GAgBA,GAoCA,GAsBA,GD5WEC,GAAgBnwB,cAAQ,SAACK,GAAD,OAAWA,EAAMJ,IAAI,mBAAmBA,IAAI,aAEpEmwB,IADyBpwB,cAAQ,SAACK,GAAD,OAAWA,EAAMJ,IAAI,mBAAmBA,IAAI,gBACpDD,cAAQ,SAACK,GAAD,OAAWA,EAAMJ,IAAI,mBAAmBA,IAAI,aAG7EowB,GAAyBrwB,cAAQ,SAACK,GAC3C,IADqD,EAC/CiwB,EAAgBH,GAAc9vB,GAChCkwB,EAAiBC,iBAFgC,KAGtBF,GAHsB,2CAGzCG,EAHyC,KAGjCC,EAHiC,KAI7CC,EAAiBH,iBACrBE,EAAOpC,SAAQ,SAACsC,GAAW,IAAD,EACjBD,EAAe1wB,IAAI2wB,EAAMC,WAC1BF,EAAiBA,EAAehrB,IAAIirB,EAAMC,QAAS,KAEvD,UAAAF,EAAe1wB,IAAI2wB,EAAMC,gBAAzB,SAAmCrzB,KAAKozB,MAE5CL,EAAiBA,EAAe5qB,IAAI8qB,EAAQE,IARhD,2BAA+C,IAHM,8BAarD,OAAOJ,K,UCJX,SAAW5pB,GACTA,EAAqB,QAAI,UACzBA,EAAsB,SAAI,WAF5B,CAGG,KAAgB,GAAc,KAWjC,SAAWE,GACTA,EAAgB,QAAI,UACpBA,EAAc,MAAI,QAFpB,CAGG,KAAW,GAAS,KAWvB,SAAWopB,GAITA,EAAwB,UAAI,YAK5BA,EAA0B,YAAI,cAK9BA,EAAyB,WAAI,aAK7BA,EAAuB,SAAI,WAnB7B,CAoBGA,KAAiBA,GAAe,KAYnC,SAAW1oB,GAITA,EAA8B,SAAI,WAKlCA,EAA8B,SAAI,WAKlCA,EAA8B,SAAI,WAKlCA,EAA4B,OAAI,SAKhCA,EAA6B,QAAI,UAKjCA,EAA8B,SAAI,WAKlCA,EAA6B,QAAI,UAKjCA,EAA8B,SAAI,WAKlCA,EAAuC,kBAAI,oBAK3CA,EAA+B,UAAI,YAKnCA,EAAiC,YAAI,cAtDvC,CAuDG,KAAwB,GAAsB,KAWjD,SAAW2oB,GAITA,EAAyB,cAAI,gBAK7BA,EAAuB,YAAI,cAK3BA,EAA+B,oBAAI,sBAKnCA,EAA0B,eAAI,iBAnBhC,CAoBGA,KAAcA,GAAY,KAW7B,SAAWrnB,GAITA,EAA4B,WAAI,aAKhCA,EAA4B,WAAI,aAKhCA,EAA2B,UAAI,YAK/BA,EAAwB,OAAI,SAK5BA,EAA0B,SAAI,WAxBhC,CAyBG,KAAoB,GAAkB,KAWzC,SAAWpJ,GAITA,EAA4B,SAAI,WAKhCA,EAA4B,SAAI,WAKhCA,EAA4B,SAAI,WAKhCA,EAA6B,UAAI,YAKjCA,EAA0B,OAAI,SAO9BA,EAA0B,OAAI,SA/BhC,CAgCG,KAAsB,GAAoB,KAW7C,SAAWmH,GACTA,EAAuB,OAAI,SAC3BA,EAAwB,QAAI,UAC5BA,EAAqB,KAAI,OAH3B,CAIG,KAAmB,GAAiB,KAWvC,SAAWG,GAITA,EAAyB,KAAI,OAK7BA,EAAgC,YAAI,cAMpCA,EAA6B,SAAI,WAfnC,CAgBG,KAAuB,GAAqB,KAW/C,SAAWC,GACTA,EAAoB,KAAI,OACxBA,EAA2B,YAAI,cAC/BA,EAA+B,gBAAI,kBACnCA,EAAmB,IAAI,MAJzB,CAKG,KAAkB,GAAgB,KAWrC,SAAWE,GAITA,EAAgB,MAAI,QAKpBA,EAAqB,WAAI,aAKzBA,EAAkB,QAAI,UAKtBA,EAAkB,QAAI,UAKtBA,EAAoB,UAAI,YAxB1B,CAyBG,KAAa,GAAW,KAW3B,SAAWC,GAKTA,EAAoB,MAAI,QAKxBA,EAAyB,WAAI,aAV/B,CAWG,KAAiB,GAAe,KAWnC,SAAWC,GACTA,EAAc,KAAI,OAClBA,EAAe,MAAI,QACnBA,EAAkB,SAAI,WACtBA,EAAiB,QAAI,UAJvB,CAKG,KAAY,GAAU,K,oCC5Wd,GAAa,KACb,GAAe,KACf0pB,GAAW,CACpB1mB,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,WACXC,gBAAiB,CACfymB,SAAU,CACRvkB,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVuF,IAAK,CACH+J,UAAU,EACVpC,eAAgB,MAChBnN,KAAM,CACJC,KAAM,cAML8zB,GAAY,CACrB5mB,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,YACXC,gBAAiB,CACf2mB,KAAM,CACJzkB,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aAGf6mB,QAAS,CACP1kB,UAAU,EACVpC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAMV,GAAW,CACpBD,eAAgB,WAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,WACXC,gBAAiB,CACf9N,GAAI,CACF4P,UAAU,EACVhC,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGVA,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVD,KAAM,CACJmP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,cAML,GAAkB,CAC3BkN,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBACXC,gBAAiB,aAAS,aAAS,GAAI,GAASrN,KAAKqN,iBAAkB,CACrEC,KAAM,CACJH,eAAgB,OAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,aAKdrB,SAAU,CACR2Q,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,eAML,GAAM,CACfkN,eAAgB,MAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,MACXC,gBAAiB,aAAS,aAAS,GAAI,GAAgBrN,KAAKqN,iBAAkB,CAC5EoC,WAAY,CACVN,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,eAGfwD,oBAAqB,CACnBzD,eAAgB,iCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBAGfyD,kBAAmB,CACjB1D,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf0D,sBAAuB,CACrB3D,eAAgB,mCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,0BAGf2D,gBAAiB,CACf5D,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBAGf4D,cAAe,CACb7D,eAAgB,2BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBAGf6D,UAAW,CACT9D,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,WAGViR,MAAO,CACL/D,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACXhE,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGV0C,kBAAmB,CACjBwM,UAAU,EACVhC,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,YAAa,SAAU,YAG/E0D,eAAgB,CACdjE,eAAgB,4BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAGf1K,MAAO,CACLyM,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,QAAS,aAAc,UAAW,UAAW,mBAM5DwmB,GAAY,CACrB/mB,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,YACXC,gBAAiB,aAAS,GAAI,GAAIrN,KAAKqN,mBAGhC8mB,GAAa,CACtBhnB,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aACXC,gBAAiB,CACfyE,SAAU,CACR3E,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAML,GAAyB,CAClCkN,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yBACXC,gBAAiB,CACfiB,UAAW,CACTnB,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGVsO,KAAM,CACJpB,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVuO,QAAS,CACPrB,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVwO,OAAQ,CACNtB,eAAgB,SAChBnN,KAAM,CACJC,KAAM,cAMLm0B,GAAmC,CAC5CjnB,eAAgB,mCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mCACXC,gBAAiB,CACfpN,KAAM,CACJsP,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVo0B,aAAc,CACZ9kB,UAAU,EACVpC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,YAAa,cAAe,aAAc,cAG9DgG,YAAa,CACXnE,UAAU,EACVpC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGV0zB,MAAO,CACLpkB,UAAU,EACVpC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGVq0B,aAAc,CACZ/kB,UAAU,EACVpC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,cAMLs0B,GAA+B,CACxCpnB,eAAgB,+BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,+BACXC,gBAAiB,CACfpN,KAAM,CACJsP,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVo0B,aAAc,CACZ9kB,UAAU,EACVpC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,YAAa,cAAe,aAAc,cAG9DgG,YAAa,CACXnE,UAAU,EACVpC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACX5B,UAAU,EACVpC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVu0B,QAAS,CACPjlB,UAAU,EACVpC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVw0B,WAAY,CACVllB,UAAU,EACVpC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,WAGVy0B,MAAO,CACLnlB,UAAU,EACVpC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGV00B,YAAa,CACXplB,UAAU,EACVpC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/B0K,UAAW,CACT7I,UAAU,EACVpC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,YACNmN,UAAW,0CAQdwnB,GAA6B,CACtCznB,eAAgB,6BAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,6BACXC,gBAAiB,CACfpN,KAAM,CACJsP,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVo0B,aAAc,CACZ9kB,UAAU,EACVpC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,YAAa,cAAe,aAAc,cAG9DqlB,MAAO,CACLxjB,UAAU,EACVpC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,YACNmN,UAAW,sCAQdynB,GAAyC,CAClD1nB,eAAgB,yCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yCACXC,gBAAiB,CACfylB,QAAS,CACPvjB,UAAU,EACVpC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,+BAGfylB,MAAO,CACLtjB,UAAU,EACVpC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kCAMV,GAAc,CACvBD,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACfxJ,IAAK,CACHsJ,eAAgB,MAChBnN,KAAM,CACJC,KAAM,WAGV6D,MAAO,CACLqJ,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGV8D,MAAO,CACLoJ,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGV+D,aAAc,CACZmJ,eAAgB,eAChBnN,KAAM,CACJC,KAAM,cAML,GAAiB,CAC1BkN,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,CACf3K,MAAO,CACLyM,UAAU,EACVhC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,WAAY,WAAY,WAAY,SAAU,UAAW,WAAY,UAAW,WAAY,oBAAqB,YAAa,iBAGlJwD,MAAO,CACL/B,UAAU,EACVhC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGVkR,YAAa,CACXhC,UAAU,EACVhC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVrB,SAAU,CACRuQ,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVJ,eAAgB,CACdsP,UAAU,EACVhC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGVV,GAAI,CACFgQ,UAAU,EACVJ,UAAU,EACVhC,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGViU,iBAAkB,CAChB/E,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGVmG,aAAc,CACZ+I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVkU,gBAAiB,CACfhF,UAAU,EACVhC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGVqG,aAAc,CACZ6I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVmU,gBAAiB,CACfjF,UAAU,EACVhC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGViS,SAAU,CACR/C,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVyS,kBAAmB,CACjBvD,UAAU,EACVhC,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BonB,UAAW,CACT3lB,UAAU,EACVhC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGV80B,WAAY,CACV5lB,UAAU,EACVhC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,aAGV+0B,gBAAiB,CACf7lB,UAAU,EACVhC,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,aAGVg1B,YAAa,CACX9lB,UAAU,EACVhC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,aAGVi1B,YAAa,CACX/lB,UAAU,EACVhC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,aAGVk1B,kBAAmB,CACjBhmB,UAAU,EACVhC,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,aAGVsS,OAAQ,CACNpD,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,WAG/BvJ,YAAa,CACXgL,UAAU,EACVhC,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAGf4C,uBAAwB,CACtBb,UAAU,EACVhC,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,8BAMV,GAAoB,CAC7BD,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACf6E,SAAU,CACR3C,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVkS,SAAU,CACR5C,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAMLm1B,GAAmB,CAC5BjoB,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBACXC,gBAAiB,CACfgnB,aAAc,CACZlnB,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,YAAa,cAAe,aAAc,cAG9D4mB,aAAc,CACZnlB,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVrB,SAAU,CACRuQ,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGV0X,QAAS,CACPxI,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGViY,aAAc,CACZ/I,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVsJ,MAAO,CACL4F,UAAU,EACVhC,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGVkX,KAAM,CACJhI,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV2zB,QAAS,CACPzkB,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,cAML,GAAsB,CAC/BkN,eAAgB,sBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBACXC,gBAAiB,CACfrN,KAAM,CACJmP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV2D,KAAM,CACJuL,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,cAML,GAAc,CACvBkN,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACfkB,KAAM,CACJY,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGVuO,QAAS,CACPW,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVoW,OAAQ,CACNlH,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WAGVqW,QAAS,CACPnH,UAAU,EACVhC,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBAKnBmJ,eAAgB,CACdpH,UAAU,EACVhC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,6BAQd,GAAkB,CAC3BD,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBACXC,gBAAiB,CACf9N,GAAI,CACF4P,UAAU,EACVhC,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGVA,KAAM,CACJkP,UAAU,EACVhC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV8G,OAAQ,CACNwI,UAAU,EACVpC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,aAAc,aAAc,YAAa,SAAU,cAGvE+I,UAAW,CACTtJ,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGVyW,QAAS,CACPvJ,eAAgB,UAChBnN,KAAM,CACJC,KAAM,aAGV0W,gBAAiB,CACfxJ,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,WAGV2W,MAAO,CACLzJ,eAAgB,QAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBAMV,GAAsB,CAC/BD,eAAgB,sBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBACXC,gBAAiB,CACfI,qBAAsB,CACpBN,eAAgB,uBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BC,yBAA0B,CACxBR,eAAgB,2BAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BE,eAAgB,CACdT,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,OAAQ,cAAe,cAG3CG,gBAAiB,CACfV,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,aAGV6N,eAAgB,CACdX,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aAGV8N,UAAW,CACTZ,eAAgB,YAChBnN,KAAM,CACJC,KAAM,gBAML,GAAoB,CAC7BkN,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACfY,aAAc,CACZd,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,UAGzCQ,aAAc,CACZf,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,UAGzCS,gBAAiB,CACfhB,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,UAGzCU,gBAAiB,CACfjB,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,SAAU,UAAW,aAMpC,GAAa,CACtBP,eAAgB,aAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,aACXC,gBAAiB,CACfsB,UAAW,CACTxB,eAAgB,YAChBnN,KAAM,CACJC,KAAM,WAGV2O,cAAe,CACbzB,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,WAGV4O,UAAW,CACT1B,eAAgB,YAChBnN,KAAM,CACJC,KAAM,aAGV6O,eAAgB,CACd3B,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGV8O,mBAAoB,CAClB5B,eAAgB,qBAChBnN,KAAM,CACJC,KAAM,WAGV+O,eAAgB,CACd7B,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,gBAML,GAAoB,CAC7BkN,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,oBACXC,gBAAiB,CACf8C,SAAU,CACRhD,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVwQ,eAAgB,CACdtD,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WAGVyQ,WAAY,CACVvD,eAAgB,aAChBnN,KAAM,CACJC,KAAM,cAML,GAAiB,CAC1BkN,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,iBACXC,gBAAiB,CACf9N,GAAI,CACF4N,eAAgB,KAChBnN,KAAM,CACJC,KAAM,WAGVqR,MAAO,CACLnE,eAAgB,QAChBnN,KAAM,CACJC,KAAM,WAGVsR,UAAW,CACTpE,eAAgB,YAChBnN,KAAM,CACJC,KAAM,WAGVuR,IAAK,CACHrE,eAAgB,MAChBnN,KAAM,CACJC,KAAM,WAGVwR,QAAS,CACPtE,eAAgB,UAChBnN,KAAM,CACJC,KAAM,WAGVyR,aAAc,CACZvC,UAAU,EACVhC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,cAML,GAAM,CACfkN,eAAgB,MAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,MACXC,gBAAiB,CACfpN,KAAM,CACJsP,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV2R,KAAM,CACJzE,eAAgB,OAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,OAAQ,QAAS,WAAY,aAGjDjJ,KAAM,CACJ0I,eAAgB,OAChBnN,KAAM,CACJC,KAAM,WAGV4R,OAAQ,CACN1E,eAAgB,SAChBnN,KAAM,CACJC,KAAM,WAGV6R,SAAU,CACR3E,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAML,GAAuC,CAChDkN,eAAgB,uCAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,uCACXC,gBAAiB,CACf2E,kBAAmB,CACjB7E,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,iBAM1B,GAAc,CACvBP,eAAgB,cAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,cACXC,gBAAiB,CACf6E,SAAU,CACR3C,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVkS,SAAU,CACRhF,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cAML,GAAwB,CACjCkN,eAAgB,wBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,wBACXC,gBAAiB,CACfgF,aAAc,CACZ9C,UAAU,EACVpC,eAAgB,eAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,QAAS,gBAG7B4E,eAAgB,CACd/C,UAAU,EACVpC,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBAGfmF,OAAQ,CACNpD,UAAU,EACVhC,eAAgB,SAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,WAG/B8D,IAAK,CACHjC,UAAU,EACVpC,eAAgB,MAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,QAGfoF,uBAAwB,CACtBrF,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yCAGfqF,WAAY,CACVlD,UAAU,EACVpC,eAAgB,aAChBnN,KAAM,CACJC,KAAM,aAGVyS,kBAAmB,CACjBvF,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,cAG/BiF,UAAW,CACTpD,UAAU,EACVpC,eAAgB,YAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBAGfwF,aAAc,CACZzF,eAAgB,eAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,mBAMV,GAAkB,CAC3BD,eAAgB,kBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,kBACXC,gBAAiB,CACfyF,iBAAkB,CAChB3D,UAAU,EACVhC,eAAgB,mBAChBnN,KAAM,CACJC,KAAM,WAGV8S,WAAY,CACV5F,eAAgB,aAChBnN,KAAM,CACJC,KAAM,OACNyN,cAAe,CAAC,UAAW,iBAM1B,GAAgB,CACzBP,eAAgB,gBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,gBACXC,gBAAiB,CACf4F,uBAAwB,CACtB9F,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,WAGViT,aAAc,CACZ/F,eAAgB,eAChBnN,KAAM,CACJC,KAAM,WAGVkT,YAAa,CACXhG,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVmT,YAAa,CACXjG,eAAgB,cAChBnN,KAAM,CACJC,KAAM,WAGVoT,kBAAmB,CACjBlG,eAAgB,oBAChBnN,KAAM,CACJC,KAAM,cAoELo1B,GAAyB,CAClCloB,eAAgB,yBAChBnN,KAAM,CACJC,KAAM,YACNmN,UAAW,yBACXC,gBAAiB,CACf9D,MAAO,CACL4F,UAAU,EACVhC,eAAgB,GAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,uBAKnB4L,SAAU,CACR7J,UAAU,EACVhC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,cC91CL,GAAiB,CAC1ByZ,cAAe,iBACfC,OAAQ,CACNxM,eAAgB,kBAChByM,aAAc,QACd5Z,KAAM,CACJC,KAAM,YAID,GAAa,CACtByZ,cAAe,aACfC,OAAQ,CACNpK,UAAU,EACVuK,YAAY,EACZ3M,eAAgB,cAChByM,aAAc,aACd5Z,KAAM,CACJC,KAAM,YAID,GAAU,CACnByZ,cAAe,UACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,UAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,GAEbha,KAAM,CACJC,KAAM,YAID,GAAe,CACxByZ,cAAe,eACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,WAChBnN,KAAM,CACJC,KAAM,WAGVka,cAAc,GAiBL,GAAS,CAClBT,cAAe,SACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,SAChBkI,YAAa,CACX0E,UAAW,GACXC,UAAW,GAEbha,KAAM,CACJC,KAAM,YAID,GAAmB,CAC5ByZ,cAAe,mBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,mBAChBkI,YAAa,CACX0E,UAAW,GACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,YAID,GAAoB,CAC7ByZ,cAAe,oBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,oBAChBkI,YAAa,CACX0E,UAAW,GACXC,UAAW,GAEbha,KAAM,CACJC,KAAM,YAID,GAAiB,CAC1ByZ,cAAe,iBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,iBAChBkI,YAAa,CACX2E,UAAW,GAEbha,KAAM,CACJC,KAAM,YAID,GAAmB,CAC5ByZ,cAAe,mBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,mBAChBkI,YAAa,CACX0E,UAAW,GACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,YC5HRq1B,GAEJ,WAKE,SAASA,EAAoB9a,GAC3Blb,KAAKkb,OAASA,EAShB,OANA8a,EAAoB7a,UAAUzX,IAAM,SAAU2X,EAASC,GACrD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACR,GAAkBC,IAGhB0a,EAfT,GAoBI,GAAa,IAAI,KAAkB,GACnC,GAAmB,CACrBvtB,WAAY,MACZkT,KAAM,+CACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICpCVga,GAEJ,WAKE,SAASA,EAAc/a,GACrBlb,KAAKkb,OAASA,EAwDhB,OArDA+a,EAAc9a,UAAU+a,YAAc,SAAUhC,EAAQ1zB,EAAmBc,EAAS+Z,EAASC,GAC3F,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACR1zB,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACR8a,GAA0B7a,IAG/B2a,EAAc9a,UAAUib,aAAe,SAAU51B,EAAmBc,EAAS+Z,EAASC,GACpF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRgb,GAA2B/a,IAGhC2a,EAAc9a,UAAUmb,WAAa,SAAU1Z,EAAMsX,EAAQ1zB,EAAmBc,EAAS+Z,EAASC,GAChG,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNsX,OAAQA,EACR1zB,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRkb,GAAyBjb,IAG9B2a,EAAc9a,UAAUqb,YAAc,SAAU5Z,EAAMpc,EAAmBc,EAAS+Z,EAASC,GACzF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNpc,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRob,GAA0Bnb,IAG/B2a,EAAc9a,UAAUkD,QAAU,SAAU6V,EAAQ1zB,EAAmBc,EAAS+Z,EAASC,GACvF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACR1zB,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRqb,GAAsBpb,IAG3B2a,EAAc9a,UAAUwb,SAAW,SAAUn2B,EAAmBc,EAAS+Z,EAASC,GAChF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/a,kBAAmBA,EACnBc,QAASA,EACT+Z,QAASA,GACRub,GAAuBtb,IAGrB2a,EA9DT,GAmEI,GAAa,IAAI,KAAkB,GACnCE,GAA2B,CAC7B1tB,WAAY,MACZkT,KAAM,yGACNQ,cAAe,CAAC,GAAmB,GAA2B,GAA8B,IAC5FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBoX,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVoa,GAA4B,CAC9B5tB,WAAY,MACZkT,KAAM,gGACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBoX,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVsa,GAA0B,CAC5B9tB,WAAY,MACZkT,KAAM,gGACNQ,cAAe,CAAC,GAAmB,GAA2B,GAA8B,IAC5FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAoB,CAChDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdiC,IAAK,CACHjC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVwa,GAA2B,CAC7BhuB,WAAY,MACZkT,KAAM,uFACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAAoB,CAChDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdiC,IAAK,CACHjC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVya,GAAuB,CACzBjuB,WAAY,OACZkT,KAAM,wGACNQ,cAAe,CAAC,GAAmB,GAA2B,GAA8B,IAC5FP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,CACb5H,SAAU,CAAC,UAAW,aAExB6H,OAAQ,aAAS,aAAS,GAAI,IAAqB,CACjDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV2a,GAAwB,CAC1BnuB,WAAY,OACZkT,KAAM,+FACNQ,cAAe,CAAC,GAA2B,GAA8B,IACzEP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,CACb5H,SAAU,CAAC,UAAW,aAExB6H,OAAQ,aAAS,aAAS,GAAI,IAAqB,CACjDpK,UAAU,KAGd6L,UAAW,CACTC,IAAK,GACLmC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICzNV4a,GAEJ,WAKE,SAASA,EAAqB3b,GAC5Blb,KAAKkb,OAASA,EAShB,OANA2b,EAAqB1b,UAAUzX,IAAM,SAAU2X,EAASC,GACtD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACR,GAAkBC,IAGhBub,EAfT,GAoBI,GAAa,IAAI,KAAkB,GACnC,GAAmB,CACrBpuB,WAAY,MACZkT,KAAM,0EACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICrCV6a,GAEJ,WAKE,SAASA,EAAS5b,GAChBlb,KAAKkb,OAASA,EA0BhB,OAvBA4b,EAAS3b,UAAU4b,OAAS,SAAUvjB,EAAkB6H,EAASC,GAC/D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC/H,iBAAkBA,EAClB6H,QAASA,GACR2b,GAAqB1b,IAG1Bwb,EAAS3b,UAAU8b,SAAW,SAAU/C,EAAQ1gB,EAAkB6H,EAASC,GACzE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACR1gB,iBAAkBA,EAClB6H,QAASA,GACR6b,GAAuB5b,IAG5Bwb,EAAS3b,UAAUgc,yBAA2B,SAAUjD,EAAQ1gB,EAAkB6H,EAASC,GACzF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACR1gB,iBAAkBA,EAClB6H,QAASA,GACR+b,GAAuC9b,IAGrCwb,EAhCT,GAqCI,GAAa,IAAI,KAAkB,GACnCE,GAAsB,CACxBvuB,WAAY,MACZkT,KAAM,qCACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLkC,IAAK,GACLlG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVib,GAAwB,CAC1BzuB,WAAY,MACZkT,KAAM,8CACNQ,cAAe,CAAC,GAAmB,IACnCP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLkC,IAAK,GACLlG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVmb,GAAwC,CAC1C3uB,WAAY,MACZkT,KAAM,yEACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,GACLkC,IAAK,GACLlG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICnFVob,GAEJ,WAKE,SAASA,EAAanc,GACpBlb,KAAKkb,OAASA,EAuBhB,OApBAmc,EAAalc,UAAUzX,IAAM,SAAU2X,EAASC,GAC9C,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACR,GAAkBC,IAGvB+b,EAAalc,UAAUwB,eAAiB,SAAUC,EAAMvB,EAASC,GAC/D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNvB,QAASA,GACR,GAA6BC,IAGlC+b,EAAalc,UAAU8B,OAAS,SAAUL,EAAMvB,EAASC,GACvD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNvB,QAASA,GACR,GAAqBC,IAGnB+b,EA7BT,GAkCI,GAAa,IAAI,KAAkB,GACnC,GAAmB,CACrB5uB,WAAY,MACZkT,KAAM,kBACNC,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBoX,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAA8B,CAChCxT,WAAY,MACZkT,KAAM,kBACNC,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBmb,UAAW,CACTC,IAAK,CACHC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBsd,IAAK,CACHjC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBoX,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAsB,CACxBxT,WAAY,QACZkT,KAAM,kBACNC,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,OAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBmb,UAAW,CACTC,IAAK,CACHC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,aACNsJ,MAAO,CACLvJ,KAAM,CACJC,KAAM,cAMhBoX,QAAS,CACPiE,WAAY,KAGhBC,WAAY,ICxJVqb,GAEJ,WAKE,SAASA,EAAyBpc,GAChClb,KAAKkb,OAASA,EA0DhB,OAvDAoc,EAAyBnc,UAAUC,KAAO,SAAUC,EAASC,GAC3D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCF,QAASA,GACR,GAAmBC,IAGxBgc,EAAyBnc,UAAUzX,IAAM,SAAUwwB,EAAQqD,EAAkBlc,EAASC,GACpF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACRqD,iBAAkBA,EAClBlc,QAASA,GACR,GAAkBC,IAGvBgc,EAAyBnc,UAAUiE,MAAQ,SAAU8U,EAAQqD,EAAkBlc,EAASC,GACtF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACRqD,iBAAkBA,EAClBlc,QAASA,GACRmc,GAAoBlc,IAGzBgc,EAAyBnc,UAAUmE,KAAO,SAAU4U,EAAQqD,EAAkBlc,EAASC,GACrF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACRqD,iBAAkBA,EAClBlc,QAASA,GACRoc,GAAmBnc,IAGxBgc,EAAyBnc,UAAUqE,QAAU,SAAU0U,EAAQqD,EAAkBlc,EAASC,GACxF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACRqD,iBAAkBA,EAClBlc,QAASA,GACRqc,GAAsBpc,IAG3Bgc,EAAyBnc,UAAUuE,SAAW,SAAUwU,EAAQqD,EAAkBlc,EAASC,GACzF,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACRqD,iBAAkBA,EAClBlc,QAASA,GACRsc,GAAuBrc,IAG5Bgc,EAAyBnc,UAAUyE,cAAgB,SAAUhD,EAAMsX,EAAQqD,EAAkBlc,EAASC,GACpG,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCqB,KAAMA,EACNsX,OAAQA,EACRqD,iBAAkBA,EAClBlc,QAASA,GACRuc,GAA4Btc,IAG1Bgc,EAhET,GAqEI,GAAa,IAAI,KAAkB,GACnC,GAAoB,CACtB7uB,WAAY,MACZkT,KAAM,yBACNC,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,CACVnO,eAAgB,iBAChBnN,KAAM,CACJC,KAAM,WACNsN,QAAS,CACPvN,KAAM,CACJC,KAAM,YACNmN,UAAW,sBAMrBiK,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAmB,CACrBxT,WAAY,MACZkT,KAAM,iFACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVub,GAAqB,CACvB/uB,WAAY,OACZkT,KAAM,uFACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACToC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVwb,GAAoB,CACtBhvB,WAAY,OACZkT,KAAM,sFACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACToC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEVyb,GAAuB,CACzBjvB,WAAY,OACZkT,KAAM,yFACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACToC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV0b,GAAwB,CAC1BlvB,WAAY,OACZkT,KAAM,0FACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACToC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV2b,GAA6B,CAC/BnvB,WAAY,OACZkT,KAAM,+FACNQ,cAAe,CAAC,GAAmB,GAA2B,IAC9DP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBmC,YAAa,CACX5D,cAAe,OACfC,OAAQ,aAAS,aAAS,GAAI,IAA4B,CACxDpK,UAAU,KAGd6L,UAAW,CACToC,IAAK,GACLnG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IC7LV4b,GAEJ,WAKE,SAASA,EAAO3c,GACdlb,KAAKkb,OAASA,EAiBhB,OAdA2c,EAAO1c,UAAUC,KAAO,SAAU8Y,EAAQ7Y,EAASC,GACjD,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACR7Y,QAASA,GACR,GAAmBC,IAGxBuc,EAAO1c,UAAUM,SAAW,SAAUb,EAAcS,EAASC,GAC3D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAAuBC,IAGrBuc,EAvBT,GA4BI,GAAa,IAAI,KAAkB,GACnC,GAAoB,CACtBpvB,WAAY,MACZkT,KAAM,sBACNQ,cAAe,CAAC,IAChBP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAwB,CAC1BxT,WAAY,MACZyT,QAAS,yBACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IC7DV6b,GAEJ,WAKE,SAASA,EAAmB5c,GAC1Blb,KAAKkb,OAASA,EAiBhB,OAdA4c,EAAmB3c,UAAUC,KAAO,SAAU8Y,EAAQ7Y,EAASC,GAC7D,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtC2Y,OAAQA,EACR7Y,QAASA,GACR,GAAmBC,IAGxBwc,EAAmB3c,UAAUM,SAAW,SAAUb,EAAcS,EAASC,GACvE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCX,aAAcA,EACdS,QAASA,GACR,GAAuBC,IAGrBwc,EAvBT,GA4BI,GAAa,IAAI,KAAkB,GACnC,GAAoB,CACtBrvB,WAAY,MACZkT,KAAM,qDACNQ,cAAe,CAAC,GAAmB,IACnCP,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IAEV,GAAwB,CAC1BxT,WAAY,MACZyT,QAAS,yBACTP,KAAM,aACNQ,cAAe,CAAC,IAChBN,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdjE,QAAS,CACPiE,WAAY,KAGhBC,WAAY,IC7DV,GAEJ,WAKE,SAAS2E,EAAiB1F,GACxBlb,KAAKkb,OAASA,EAUhB,OAPA0F,EAAiBzF,UAAUzX,IAAM,SAAUmd,EAAmBxF,EAASC,GACrE,OAAOtb,KAAKkb,OAAOK,qBAAqB,CACtCsF,kBAAmBA,EACnBxF,QAASA,GACR,GAAkBC,IAGhBsF,EAhBT,GAqBI,GAAa,IAAI,KAAkB,GACnC,GAAmB,CACrBnY,WAAY,MACZkT,KAAM,sGACNQ,cAAe,CAAC,GTea,CAC7B/B,cAAe,oBACfC,OAAQ,CACNpK,UAAU,EACVpC,eAAgB,oBAChBkI,YAAa,CACX0E,UAAW,IACXC,UAAW,EACXC,QAAS,sBAEXja,KAAM,CACJC,KAAM,aSzBVib,gBAAiB,CAAC,IAClBC,iBAAkB,CAAC,IACnBC,UAAW,CACTC,IAAK,CACHC,WAAY,IAEdmC,IAAK,GACLpG,QAAS,CACPiE,WAAY,KAGhBC,WAAY,I,WCtCV,GAEJ,SAAUmF,GAUR,SAAS2W,EAAczW,EAAa/gB,EAAgB8a,GAClD,IAAIkG,EAAQH,EAAOI,KAAKxhB,KAAMshB,EAAa/gB,EAAgB8a,IAAYrb,KAWvE,OATAuhB,EAAM6P,UAAY,IAAI,GAA+B7P,GACrDA,EAAM5U,IAAM,IAAI,GAAyB4U,GACzCA,EAAMyW,qBAAuB,IAAI,GAAgCzW,GACjEA,EAAM0W,SAAW,IAAI,GAAoB1W,GACzCA,EAAM2W,aAAe,IAAI,GAAwB3W,GACjDA,EAAM4W,eAAiB,IAAI,GAAoC5W,GAC/DA,EAAM4S,OAAS,IAAI,GAAkB5S,GACrCA,EAAM6W,mBAAqB,IAAI,GAA8B7W,GAC7DA,EAAMS,iBAAmB,IAAI,GAA4BT,GAClDA,EAGT,OAxBA,aAAUwW,EAAe3W,GAwBlB2W,EAzBT,CCDA,SAAU3W,GAUR,SAASiX,EAAqB/W,EAAa/gB,EAAgB8a,GACzD,IAAIkG,EAAQvhB,KAEZ,QAAmBgG,GAAfsb,EACF,MAAM,IAAIc,MAAM,iCAGlB,QAAsBpc,GAAlBzF,EACF,MAAM,IAAI6hB,MAAM,oCAOlB,GAJK/G,IACHA,EAAU,KAGPA,EAAQgH,UAAW,CACtB,IAAIC,EAAmB,OACvBjH,EAAQgH,UAAY,+BAA2CC,EAoBjE,OAjBAf,EAAQH,EAAOI,KAAKxhB,KAAMshB,EAAajG,IAAYrb,MAC7Cua,WAAa,aACnBgH,EAAMpH,eAAiB,QACvBoH,EAAMgB,iCAAmC,GACzChB,EAAMiB,QAAUnH,EAAQmH,SAAWjB,EAAMiB,SAAW,yBACpDjB,EAAMkB,mBAAqB,kCAC3BlB,EAAMD,YAAcA,EACpBC,EAAMhhB,eAAiBA,EAEQ,OAA3B8a,EAAQlB,qBAAsDnU,IAA3BqV,EAAQlB,iBAC7CoH,EAAMpH,eAAiBkB,EAAQlB,gBAGgB,OAA7CkB,EAAQkH,uCAA0Fvc,IAA7CqV,EAAQkH,mCAC/DhB,EAAMgB,iCAAmClH,EAAQkH,kCAG5ChB,EAGT,OAjDA,aAAU8W,EAAsBjX,GAiDzBiX,EAlDT,CAmDE,O,QClEWC,GAA8B,SAAC33B,EAAMkL,GAC9C,OAAQlL,GACJ,KAAK43B,GAAgBC,WACjB,OAAO3sB,EAAK4sB,cAAcC,GAAYC,YAC1C,KAAKJ,GAAgBK,cACjB,OAAO/sB,EAAK4sB,cAAcC,GAAYG,eAC1C,KAAKN,GAAgBO,eACjB,OAAOjtB,EAAK4sB,cAAcC,GAAYK,gBAC1C,KAAKR,GAAgBS,cACjB,OAAOntB,EAAK4sB,cAAcC,GAAYO,eAC1C,KAAKV,GAAgBW,gBACjB,OAAOrtB,EAAK4sB,cAAcC,GAAYS,iBAC1C,KAAKZ,GAAgBa,iBACjB,OAAOvtB,EAAK4sB,cAAcC,GAAYW,kBAC1C,KAAKd,GAAgBe,iBACjB,OAAOztB,EAAK4sB,cAAcC,GAAYa,kBAC1C,KAAKhB,GAAgBiB,kBACjB,OAAO3tB,EAAK4sB,cAAcC,GAAYe,mBAC1C,KAAKlB,GAAgBmB,mBACjB,OAAO7tB,EAAK4sB,cAAcC,GAAYiB,oBAC1C,KAAKpB,GAAgBqB,oBACjB,OAAO/tB,EAAK4sB,cAAcC,GAAYmB,qBAC1C,KAAKtB,GAAgBuB,oBACjB,OAAOjuB,EAAK4sB,cAAcC,GAAYqB,qBAC1C,KAAKxB,GAAgByB,qBACjB,OAAOnuB,EAAK4sB,cAAcC,GAAYuB,sBAC1C,KAAK1B,GAAgB2B,qBACjB,OAAOruB,EAAK4sB,cAAcC,GAAYyB,sBAC1C,KAAK5B,GAAgB6B,sBACjB,OAAOvuB,EAAK4sB,cAAcC,GAAY2B,uBAC1C,KAAKC,GAAuBC,MACxB,OAAO1uB,EAAK4sB,cAAcC,GAAY8B,cAC1C,KAAKF,GAAuBG,OACxB,OAAO5uB,EAAK4sB,cAAcC,GAAYgC,eAC1C,KAAKJ,GAAuBK,2BACxB,OAAO9uB,EAAK4sB,cAAcC,GAAYkC,mCAC1C,KAAKN,GAAuBO,MACxB,OAAOhvB,EAAK4sB,cAAcC,GAAYoC,cAC1C,KAAKR,GAAuBS,0BACxB,OAAOlvB,EAAK4sB,cAAcC,GAAYsC,kCAC1C,KAAKV,GAAuBW,gBACxB,OAAOpvB,EAAK4sB,cAAcC,GAAYwC,wBAC1C,KAAKZ,GAAuBa,sBACxB,OAAOtvB,EAAK4sB,cAAcC,GAAY0C,8BAC1C,KAAKd,GAAuBe,uBACxB,OAAOxvB,EAAK4sB,cAAcC,GAAY4C,+BAC1C,QACI,OAAO36B,IAGN25B,GAAyB,CAClCC,MAAO,QACPE,OAAQ,SACRI,MAAO,QACPF,2BAA4B,iCAC5BI,0BAA2B,gCAC3BE,gBAAiB,kCACjBE,sBAAuB,4BACvBE,uBAAwB,8BAEf9C,GAAkB,CAC3BC,WAAY,cACZI,cAAe,iBACfE,eAAgB,kBAChBE,cAAe,iBACfE,gBAAiB,oBACjBE,iBAAkB,qBAClBE,iBAAkB,0BAClBE,kBAAmB,2BACnBE,mBAAoB,gCACpBE,oBAAqB,iCACrBE,oBAAqB,sCACrBE,qBAAsB,uCACtBE,qBAAsB,yBACtBE,sBAAuB,2BAEd1B,GAAc6C,aAAe,CACtC5C,WAAW,CAAD,8CAKVE,cAAc,CAAD,oDAKbE,eAAe,CAAD,sDAKdE,cAAc,CAAD,oDAKbE,gBAAgB,CAAD,yDAKfE,iBAAiB,CAAD,2DAKhBE,iBAAiB,CAAD,gEAKhBE,kBAAkB,CAAD,kEAKjBE,mBAAmB,CAAD,wEAKlBE,oBAAoB,CAAD,0EAKnBE,oBAAoB,CAAD,+EAKnBE,qBAAqB,CAAD,iFAKpBE,qBAAqB,CAAD,mEAKpBE,sBAAsB,CAAD,qEAKrBG,aAAa,CAAD,0CAKZE,cAAc,CAAD,4CAKbI,aAAa,CAAD,0CAKZF,kCAAkC,CAAD,wFAKjCI,iCAAiC,CAAD,sFAKhCE,uBAAuB,CAAD,8EAKtBE,6BAA6B,CAAD,8EAK5BE,8BAA8B,CAAD,kFClLpBE,GACF,QADEA,GAEC,WAFDA,GAGE,YAHFA,GAII,cAJJA,GAKF,QALEA,GAMI,cANJA,GAOG,aAPHA,GAQA,UAEAC,GACH,OADGA,GAEJ,MAFIA,GAGH,OAHGA,GAIH,OAJGA,GAKF,QALEA,GAMC,WANDA,GAOL,KAPKA,GAQH,OARGA,GASH,OATGA,GAUG,aAVHA,GAWL,KAXKA,GAYH,OAEGC,GAAuBj4B,cAAQ,SAACk4B,GACzC,OAAOA,EAAYC,EAAcjI,UAAUkI,cAAgBD,EAAcjI,UAAUmI,eAEjFC,GAAwB,SAACljB,EAAc9B,GACzC,IAAMilB,EAAmBnjB,EAAa7U,MAAK,SAACi4B,GAAD,OAAkE,IAA3Dh5B,GAAuCg5B,EAAEt7B,KAAMoW,MACjG,OAAMilB,GAAsBA,EAAiB/xB,MAClC+xB,EAAiB/xB,MAErB,IAELiyB,GAA2B,SAACrjB,EAAc9B,GAC5C,IAAMolB,EAAcJ,GAAsBljB,EAAc9B,GAClDqlB,EAAiBC,OAAOF,GAC9B,OAAKG,MAAMF,GAGJ,EAFIA,GAITG,GAAwB,SAAC1jB,GAC3B,IAAMsjB,EAAcJ,GAAsBljB,EAAc2iB,IACxD,QAASW,GAA+E,IAAhEl5B,GAAuCk5B,EAAa,SAEnEK,GAA+B/4B,cAAQ,SAACoV,EAAc1T,GAC/D,MAAO,CACHiwB,MAAO8G,GAAyBrjB,EAAc2iB,IAC9CiB,SAAUP,GAAyBrjB,EAAc2iB,IACjDkB,UAAWR,GAAyBrjB,EAAc2iB,IAClDmB,YAAaZ,GAAsBljB,EAAc2iB,IACjD3I,MAAO0J,GAAsB1jB,GAC7B+jB,aAAY,OAAEz3B,QAAF,IAAEA,IAAQ,OA0BjB03B,GAAqBp5B,cAAQ,SAACyO,GACvC,GAAIA,EAAI4qB,UACJ,OAzB0B,SAAC5qB,GAE/B,OADgBA,EAAIvR,KAAKo8B,eAErB,IAAK,+BACD,OAAOzC,GAAuBC,MAClC,IAAK,+BACD,OAAOD,GAAuBG,OAClC,IAAK,gCACD,OAAOH,GAAuBK,2BAClC,IAAK,gCACD,OAAOL,GAAuBO,MAClC,IAAK,gCACD,OAAOP,GAAuBS,0BAClC,IAAK,kCACD,OAAOT,GAAuBW,gBAClC,IAAK,gCACD,OAAOX,GAAuBa,sBAClC,IAAK,kCACD,OAAOb,GAAuBe,uBAClC,QACI,MAAO,IAKJ2B,CAA0B9qB,GAErC,IAAM+qB,EAAa/qB,EAAIK,OACnB6B,EAAc,GAClB,OAAQ6oB,GACJ,KAAKxB,GACDrnB,GAAe,QACf,MACJ,KAAKqnB,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACDrnB,GAAe,UACf,MACJ,KAAKqnB,GACDrnB,GAAe,WACf,MACJ,KAAKqnB,GACL,KAAKA,GACDrnB,GAAe,cAKvB,OAAQlC,EAAI/M,KAAKiwB,OACb,KAAK,EACDhhB,GAAe,SACf,MACJ,KAAK,EACDA,GAAe6oB,IAAexB,IAAsBvpB,EAAI/M,KAAK0tB,MAAQ,SAAW,UAChF,MACJ,KAAK,EACL,KAAK,EACDze,GAAelC,EAAI/M,KAAK0tB,MAAQ,SAAWoK,IAAexB,GAAqB,UAAY,SAC3F,MACJ,KAAK,GACL,KAAK,GACDrnB,GAAelC,EAAI/M,KAAK0tB,MAAQ,UAAY,yBAC5C,MACJ,KAAK,GACDze,GAAe,yBAKvB,OAAQ6oB,GACJ,KAAKxB,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACDrnB,GAAe,OAKvB,OAAQ6oB,GACJ,KAAKxB,GACDrnB,GAAe,2BACf,MACJ,KAAKqnB,GACL,KAAKA,GACL,KAAKA,GACDrnB,GAAe,aACf,MACJ,KAAKqnB,GACL,KAAKA,GACL,KAAKA,GACL,KAAKA,GACDrnB,GAAe,mBACf,MACJ,KAAKqnB,GACDrnB,GAAe,sBAMvB,OADAA,EAAc8oB,gBAAK9oB,MAGV+oB,GAA6B,SAACjrB,EAAKrG,GAC5C,IAAMlL,EAAOk8B,GAAmB3qB,GAC1BkrB,EAAgB9E,GAA4B33B,EAAMkL,GAIxD,OAHkBwxB,GAAanrB,EAAIvR,OAGduR,EAAIK,OAAS6qB,GAEzBE,GAAgC,SAACprB,EAAKrG,GAC/C,IAAM0xB,EAAkBrrB,EAAIqrB,gBACtBC,EAAgBD,EAAuBjF,GAA4BiF,EAAiB1xB,GAAlD,GAIxC,OADuBwxB,GAAanrB,EAAIoiB,UAAapiB,EAAIurB,cAAgBD,GAGhEE,GAA0Bj6B,cAAQ,SAACyO,EAAK5S,GACjD,IAAMgyB,EAAapf,EAAI/M,KAAKiwB,MACtBuI,EAAiBC,GAA0Bt+B,GAC7Cu+B,EAAc,EAIlB,OAHmB,IAAfvM,GAAuC,IAAnBqM,IACpBE,EAAcrM,KAAKC,MAAMkM,EAAiBrM,IAEvCuM,KAEED,GAA4Bn6B,cAAQ,SAACnE,GAC9C,OAAQ,OAACA,QAAD,IAACA,OAAD,EAACA,EAAUw+B,QAASx+B,EAASw+B,MAAMlmB,OAAStY,EAASw+B,MAAMnmB,aAC7DrY,EAASw+B,MAAMlmB,MAAQtY,EAASw+B,MAAMnmB,aACtC,KAEG0lB,GAAe55B,cAAQ,SAAC6wB,GACjC,QAASA,GAAWA,EAAQvoB,WAAWyvB,OAE9BuC,GAAct6B,cAAQ,SAACu6B,GAChC,QAASA,IAA4B,QAAdA,GAAqC,SAAdA,GAAsC,OAAdA,GAAoC,OAAdA,MCtMnFC,GAAmBx6B,cAAQ,SAACK,GAGrC,OAF0BA,EAAMJ,IAAI,qBACIA,IAAI,oBAGnCw6B,GAAyBz6B,cAAQ,SAACK,EAAOq6B,GAClD,IAAMC,EAAmB5U,GAAsB1lB,GAEzCvD,EADa,IAAIV,GAAWu+B,GACA79B,eAClC,IAAKA,EACD,OAAO,EAEX,IACM89B,EADgBJ,GAAiBn6B,GACGE,MAAK,SAACJ,GAAD,OAAoF,IAA7EX,GAAuCW,EAAErD,eAAgBA,MAC/G,QAAK89B,GAGEA,EAAoBC,SAASv1B,MAAK,SAACw1B,GAAD,OAAOA,IAAMJ,Q,qkBCZnD,IAAMK,GAAkB/6B,cAAQ,SAACK,GACpC,IAAIoe,EAAOpe,EAAMJ,IAAI,iBAAiBA,IAAI,QAC1C,GAAKwe,EAAL,CAKA,IAAMuc,EAAmBP,GAAuBp6B,EAAO,wCACjD46B,EAAsBR,GAAuBp6B,EAAO,yCACpD66B,EAAqBT,GAAuBp6B,EAAO,wCACnD86B,EAA6BV,GAAuBp6B,EAAO,gDAC3D+6B,EAAsBX,GAAuBp6B,EAAO,yCACpDg7B,EAAgBL,GAClBC,GACAE,GACAD,GACAE,EAWJ,OATA3c,EAAOA,EAAK9hB,QAAO,SAACwD,GAAD,MAAkB,UAAXA,EAAEjD,MACb,aAAXiD,EAAEjD,MACS,UAAXiD,EAAEjD,MACS,mBAAXiD,EAAEjD,MACS,gBAAXiD,EAAEjD,MACS,oBAAXiD,EAAEjD,MACS,2BAAXiD,EAAEjD,MACS,0BAAXiD,EAAEjD,QAEFm+B,GACKJ,GAAwBC,IACzBzc,EAAOA,EAAK9hB,QAAO,SAACwD,GAAD,eAAOy5B,GAAaz5B,EAAEjD,QACnC08B,GAAaz5B,EAAEjD,OACb,IAAI07B,OAAJ,UAAWz4B,EAAEiV,oBAAb,iBAAW,EAAgB7U,MAAK,SAACu6B,GAAD,MAAkB,cAAXA,EAAE59B,eAAzC,aAAW,EAAqDsJ,QAAU,QAEjF40B,IACD3c,EAAOA,EAAK9hB,QAAO,SAACwD,GAAD,OAAOy5B,GAAaz5B,EAAEjD,QACnC08B,GAAaz5B,EAAEjD,OACbiD,EAAE2O,SAAWkpB,IACb73B,EAAE2O,SAAWkpB,IACb73B,EAAE2O,SAAWkpB,IACb73B,EAAE2O,SAAWkpB,OAEpBmD,IACD1c,EAAOA,EAAK9hB,QAAO,SAACwD,GAAD,aAAOy5B,GAAaz5B,EAAEjD,QAAW08B,GAAaz5B,EAAEjD,SAAS,UAACiD,EAAEjD,YAAH,aAAC,EAAQoL,WAAW,yBAE7FmW,GAGAA,EAAK9hB,QAAO,SAACwD,GAAD,OAAOy5B,GAAaz5B,EAAEjD,QACnC08B,GAAaz5B,EAAEjD,QACZiD,EAAE2O,SAAWkpB,IACV73B,EAAE2O,SAAWkpB,WAGpBsD,GAAuBt7B,cAAQ,SAACK,GAAD,OAAWA,EAAMJ,IAAI,iBAAiBA,IAAI,gBAEzEs7B,IADuBv7B,cAAQ,SAACK,GAAD,OAAWA,EAAMJ,IAAI,iBAAiBA,IAAI,YAClDD,cAAQ,SAACK,GAAW,IAAD,QAC7C4mB,EAAeC,GAAgB7mB,GAC/B8mB,EAAkBJ,GAAY1mB,EAAO4mB,GACrCuU,EAAU,OAAGrU,QAAH,IAAGA,GAAH,UAAGA,EAAiBpZ,6BAApB,iBAAG,EAAwCU,WAA3C,aAAG,EAA6CvR,KAC1Du+B,EAAW,OAAGtU,QAAH,IAAGA,OAAH,EAAGA,EAAiBtrB,SACrC,GAAK2/B,GAAeC,EAApB,CAIA,IACmB,IADbC,EAAchM,GAAsBrvB,GAC1C,GAAMq7B,EACF,MAAO,CACH7K,QAAS2K,EACT7J,MAAO+J,EAAY/J,MACnBvC,MAAOsM,EAAY9J,cAAgBtL,EAAkB3f,YAAYua,QACjE8X,SAAU0C,EAAYhK,WACtBd,MAAK,UAAE8K,EAAYrmB,UAAUomB,UAAxB,aAAE,EAAoC7K,MAC3C+K,SAAQ,UAAED,EAAYrmB,UAAUomB,UAAxB,aAAE,EAAoClK,aAC9C0H,eAAW12B,EACX22B,YAAa,GACbc,mBAAez3B,EACfu3B,gBAAiB4B,EAAY/qB,aAIrC,IAAIirB,EAAUb,GAAgB16B,GAC9B,GAAKu7B,EAAL,CAIA,IAAMntB,GADNmtB,EAAUA,EAAQj/B,QAAO,SAACwD,GAAD,OAAsE,IAA/DX,GAAuCW,EAAEjD,KAAMs+B,OAC3Dj7B,MAAK,SAACJ,GAAD,cAASA,EAAEkV,YAChC,UAAAlV,EAAEkV,iBAAF,eAAa4T,WAAU,SAAC9oB,GAAD,OAAkE,IAA3DX,GAAuCW,EAAGs7B,QAAuB,KACnG,GAAKhtB,EAAL,CAGA,IAAM/M,EAAOq3B,GAA6BtqB,EAAI2G,aAAc3G,EAAI/M,MAC1DiuB,EAAS,OAAGxI,QAAH,IAAGA,GAAH,UAAGA,EAAiBpZ,6BAApB,aAAG,EAAwCyB,OACpDqsB,EAAkB5D,GAAqBtI,IAAcrJ,EAAkBzf,OAAOi1B,SAE9EC,EAAkB,UADN5L,GAAc9vB,GAE3BJ,IAAIw7B,UADe,aAAG,EAErBl7B,MAAK,SAACJ,GAAD,OAAyE,IAAlEX,GAAuCW,EAAE0wB,QAAS2K,IACI,IAApEh8B,GAAuCW,EAAEiU,KAAMynB,MAC7CG,EAAQ,CACVhW,IAAKvX,EAAIvR,KACTA,KAAMuR,EAAIvR,KACV4R,OAAQL,EAAIK,OACZpN,OACA23B,UAAWO,GAAanrB,EAAIvR,MAC5BmY,UAAW,CACP,CACI2Q,IAAKyV,EACLv+B,KAAMu+B,EACNnmB,MAAQymB,EAA0B,CAACA,GAAN,GAC7B1B,WAAO93B,KAInB,OAAO,SACAb,GADP,IAEImvB,QAAS2K,EACT1B,gBAAiBV,GAAmB4C,GACpChC,cAAevrB,EAAIK,OACnB8hB,MAAK,OAAEmL,QAAF,IAAEA,OAAF,EAAEA,EAAoBv1B,MAC3Bm1B,SAAQ,OAAEI,QAAF,IAAEA,OAAF,EAAEA,EAAoBxK,sBAGzB0K,GAA0Bj8B,cAAQ,SAACK,GAE5C,QADoBqvB,GAAsBrvB,MC3HjC0lB,GAAwB/lB,cAAQ,SAACL,GAE1C,OADmBA,EAAMM,IAAI,0BAA0BA,IAAI,yBAGlDU,GAAyBX,cAAQ,SAACK,GAC3C,IAAMylB,EAAqBC,GAAsB1lB,GAEjD,OADgB67B,GAA2B77B,GACJyqB,GAAsBhF,GAAsBA,EAAqB,GAAtFA,KAETyE,GAA+BvqB,cAAQ,SAACK,GAEjD,OAAOyqB,GADoB/E,GAAsB1lB,OAGxC87B,GAA0Bn8B,cAAQ,SAACK,GAC5C,IAAM+7B,EAAiBC,GAAkBh8B,GACnCylB,EAAqBC,GAAsB1lB,GACjD,OAAO+7B,EAAe77B,MAAK,SAAC/D,GAAD,OAA2E,IAAnEgD,GAAuChD,EAAIspB,SAErEwW,GAAkCt8B,cAAQ,SAACK,GAEpD,OAMG,SAAkC7D,GAAK,IAAD,EACnCkZ,EAAW,IAAItZ,GAAWI,GAChC,MAAwC,oBAAjC,UAAAkZ,EAASzY,YAAT,eAAelB,eARfwgC,CADoBxW,GAAsB1lB,OAG9C,SAASyqB,GAAsBtuB,GAAK,IAAD,EAEtC,MAAwC,iBAAjC,UADU,IAAIJ,GAAWI,GAChBS,YAAT,eAAelB,eAMnB,IAAMygC,GAAsBx8B,cAAQ,SAACL,GACxC,IAAM8mB,EAAY9mB,EAAMM,IAAI,0BAA0BA,IAAI,aAC1D,OAAOymB,GAAeD,MAEb4V,GAAoBr8B,cAAQ,SAACL,GAKtC,IAJA,IAAM88B,EAAuB98B,EAAMM,IAAI,iBAAiBA,IAAI,wBACtDge,EAAW+O,GAAiBrtB,GAE9By8B,EADuBK,EAAqBC,SACRC,SAJQ,WAKvCC,GACL,IAAM1uB,EAAY+P,EAAShe,IAAI28B,GAAOpgC,GAEhCqgC,EADa,IAAIzgC,GAAW8R,GAAW,GACZkf,qBAC3ByP,IACDT,EAAe77B,MAAK,SAAC/D,GAAD,OAAsE,IAA9DgD,GAAuChD,EAAIqgC,QACxET,EAAiBA,EAAe5+B,KAAKq/B,KANpCD,EAAQ,EAAGA,EAAQ3e,EAASvc,KAAMk7B,IAAU,EAA5CA,GAST,OAAOR,KAEEU,GAA4B98B,cAAQ,SAACK,GAC9C,QAASI,GAAqBJ,MAAY87B,GAAwB97B,MAEzD08B,GAA8B/8B,cAAQ,SAACK,GAEhD,GADqBkqB,GAA6BlqB,GAChC,CACd,IAAMsuB,EAAgBF,GAAcpuB,GAC9B28B,EAActO,GAA6BC,GACjD,OAAOqO,IAAgB/O,IAA8B+O,IAAgB/O,GAGrE,IAAMhQ,EAAWiP,GAAgC7sB,GAC3CoO,EAAMssB,GAAgB16B,GAC5B,OAAyB,IAAlB4d,EAASvc,OAAe+M,GAAsB,IAAfA,EAAI5R,UAGrCogC,GAAiCj9B,cAAQ,SAACL,GAGnD,OAFgCA,EAAMM,IAAI,0BACiBA,IAAI,gCACzBjC,MAE7Bk/B,GAAoCl9B,cAAQ,SAACL,GACtD,IAAM2B,EAAwB3B,EAAMM,IAAI,qBAAqBA,IAAI,SAC3Dk9B,EAA0Bx9B,EAAMM,IAAI,0BACpCm9B,EAA0BD,EAAwBl9B,IAAI,UACtDwB,EAAe07B,EAAwBl9B,IAAI,gBACjD,QAASqB,GAAyB87B,EAAwB17B,KAAO,KAAOD,KAE/D47B,GAAiCr9B,cAAQ,SAACL,GAGnD,OAFgCA,EAAMM,IAAI,0BACiBA,IAAI,gCACzBjC,M,SCvF7Bs/B,GAAS,CAClBC,KAAM,IACNC,UAAW,kBACXC,QAAS,WACTC,YALuB,mBAMvBC,QAAS,eAACxQ,EAAD,uDARuB,iBAQvB,OAAwCyQ,UAAU,GAAD,OAAIzQ,EAAJ,WAC1D0Q,aAAc,eAAC1Q,EAAD,uDATkB,iBASlB,OAAwCyQ,UAAU,GAAD,OAAIzQ,EAAJ,2CAC/D2Q,OAAQ,eAAC3Q,EAAD,uDAVwB,iBAUxB,OAAwCyQ,UAAU,GAAD,OAAIzQ,EAAJ,aACzD4Q,YAAa,eAAC5Q,EAAD,uDAXmB,iBAWnB,OAAwCyQ,UAAU,GAAD,OAAIzQ,EAAJ,6CAC9Dvf,IAAK,eAAC9Q,EAAD,uDAAkB,kBAAmB+/B,EAArC,uDAAqD,iBAAkB17B,EAAvE,uDAAoF,cAAe+H,EAAnG,uDAAyG,OAAzG,OAAoH00B,UAAU,kBAAD,OAAmB9gC,EAAnB,2BAAoD+/B,EAApD,wDAAiH17B,EAAjH,iBAAoI+H,KACtQ80B,SAAU,eAAClhC,EAAD,uDAAkB,kBAAmB+/B,EAArC,uDAAqD,iBAAkB3zB,EAAvE,uDAA6E,OAA7E,OAAwF00B,UAAU,kBAAD,OAAmB9gC,EAAnB,2BAAoD+/B,EAApD,iDAA0G3zB,KACrN+0B,SAAU,eAACngC,EAAD,uDAbkB,WAalB,OAA8B8/B,UAAU,GAAD,OAAI9/B,EAAJ,eACjD8T,SAAU,eAAC9T,EAAD,uDAdkB,WAclB,OAA8B8/B,UAAU,GAAD,OAAI9/B,EAAJ,gBACjDod,MAAO,eAACpd,EAAD,uDAfqB,WAerB,OAA8B8/B,UAAU,GAAD,OAAI9/B,EAAJ,YAC9C4d,gBAAiB,eAAC5d,EAAD,uDAhBW,WAgBX,OAA8B8/B,UAAU,GAAD,OAAI9/B,EAAJ,sBACxDu1B,SAAU,eAACtjB,EAAD,uDAAoB,oBAApB,OAA4C6tB,UAAU,aAAD,OAAc7tB,KAC7EmuB,UAAW,eAACpgC,EAAD,uDAlBiB,WAkBjB,OAA8B8/B,UAAU,GAAD,OAAI9/B,EAAJ,gBAClDqgC,SAAU,eAACrgC,EAAD,uDAnBkB,WAmBlB,OAA8B8/B,UAAU,GAAD,OAAI9/B,EAAJ,eACjDsgC,aAAc,mBACdC,YAAa,gBACbve,QAAS,WACTC,WAAY,gBACZue,cAAe,mBACfC,iBAAkB,sBAClBC,aAAc,kBACdC,cAAe,oBAENC,GAAkB,CAACpB,GAAOK,UAAWL,GAAOQ,UAC5Ca,GAAuB,CAACrB,GAAOO,eAAgBP,GAAOS,eACtDa,GAAY,CACrBtB,GAAOY,YACPZ,GAAOW,WACPX,GAAO1rB,WACP0rB,GAAOpiB,QACPoiB,GAAO5hB,kBACP4hB,GAAOa,YAKEU,GAAY,CACrBvB,GAAOW,WACPX,GAAO1rB,WACP0rB,GAAOpiB,QACPoiB,GAAO5hB,kBACP4hB,GAAOjK,WACPiK,GAAOY,YACPZ,GAAOa,WACPb,GAAO1vB,MACP0vB,GAAOU,WACPV,GAAOK,UACPL,GAAOQ,SACPR,GAAOE,UACPF,GAAOG,QACPH,GAAOI,YACPJ,GAAOc,aACPd,GAAOkB,aACPlB,GAAOC,MAEEuB,GAAY,CAACxB,GAAOgB,cAAehB,GAAOiB,kBAC1CQ,GAA0B,GACvCA,GAAwBzB,GAAOC,MAAQ,OACvCwB,GAAwBzB,GAAOE,WAAa,YAC5CuB,GAAwBzB,GAAOG,SAAW,UAC1CsB,GAAwBzB,GAAOI,aAAe,cAC9CqB,GAAwBzB,GAAOK,WAAa,UAC5CoB,GAAwBzB,GAAOQ,UAAY,SAC3CiB,GAAwBzB,GAAOW,YAAc,WAC7Cc,GAAwBzB,GAAO1rB,YAAc,WAC7CmtB,GAAwBzB,GAAOpiB,SAAW,QAC1C6jB,GAAwBzB,GAAO5hB,mBAAqB,kBACpDqjB,GAAwBzB,GAAOjK,YAAc,WAC7C0L,GAAwBzB,GAAOY,aAAe,YAC9Ca,GAAwBzB,GAAOa,YAAc,WAC7CY,GAAwBzB,GAAO1vB,OAAS,MACxCmxB,GAAwBzB,GAAOU,YAAc,WAC7Ce,GAAwBzB,GAAOc,cAAgB,eAC/CW,GAAwBzB,GAAOe,aAAe,cAC9CU,GAAwBzB,GAAOgB,eAAiB,gBAChDS,GAAwBzB,GAAOiB,kBAAoB,mBACnDQ,GAAwBzB,GAAOkB,cAAgB,eAChClB,UCnFF0B,GACG,aADHA,GAEI,cAFJA,GAGE,YAHFA,GAIO,iBAJPA,GAKM,gBALNA,GAMa,uBANbA,GAOY,sBAPZA,GAQG,aAOHC,GACM,iBADNA,GAEA,sBAFAA,GAGY,uBAHZA,GAKE,mBALFA,GAMK,sBANLA,GAOK,gBAPLA,GAQK,gBARLA,GASD,SATCA,GAUK,yBAVLA,GAWO,6BAXPA,GAaS,qBAbTA,GAcA,UAEAC,GAAc,CAAC,SAAU,QAAS,UAAW,wBAC7CC,GAAY,CAAC,yCACbC,GAAmB,UAAOD,IAC1BE,GAAgB,CAAClB,GAASmB,cChC1BC,GAAcv/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,eAChEu/B,GAAex/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,gBACjEw/B,GAAez/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,gBACjEy/B,GAAsB1/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,gBACxE0/B,GAAsB3/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,WAAa++B,MACrFY,GAAoB5/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,oBACtE4/B,GAAkB7/B,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,iBAAiBA,IAAI,eACpE6/B,GAAyB9/B,cAAQ,SAACL,GAE3C,OADwBwkB,GAAaxkB,GAEVA,EAAMM,IAAI,YAAYA,IAAI,uBAI1BN,EAAMM,IAAI,iBAAiBA,IAAI,YCVjD8/B,GAAc//B,cAAQ,SAACL,GAGhC,OAFeA,EAAMM,IAAI,UACDA,IAAI,eAGnB+/B,GAAWhgC,cAAQ,SAACL,GAC7B,IACMsgC,EADWF,GAAYpgC,GACHM,IAAI,YACxBigC,EAAoBC,qBAAUF,EAAU,CAC1C/nB,KAAMolB,GAAOjK,WACb+M,OAAO,EACPC,QAAQ,IAEZ,OAAIH,GAAqBA,EAAkB3b,OAAOxU,iBACxC,aAAN,OAAoBmwB,EAAkB3b,OAAOxU,kBAGtCkwB,EAAWA,EAASlkC,cAAgB,MAGtCukC,GAAYtgC,cAAQ,SAACL,GAG9B,OAFiBogC,GAAYpgC,GACLM,IAAI,aAGnBsgC,GAAUvgC,cAAQ,SAACL,GAG5B,OAFiBogC,GAAYpgC,GACPM,IAAI,WAGjBugC,GAAexgC,cAAQ,SAACL,GACjC,IAAM8gC,EAAgBT,GAASrgC,GACzB+gC,EAAkBJ,GAAU3gC,GAC9BuY,EAAOolB,GAAOC,KAClB,OAAQkD,GACJ,KAAKnD,GAAOc,aAER,GADAlmB,EAAOwnB,GAAoB//B,GACvB+gC,EAAgB7jC,OAAS,GACzBqb,EAAKrb,QAAU6jC,EAAgB7jC,QAC/Bqb,EAAK/T,QAAQu8B,EAAgBC,UAAU,KAAO,EAE9C,OAAOzoB,EAGP,MAER,KAAKolB,GAAOE,UACZ,IAAK,IACL,IAAK,GACL,KAAK,KACL,UAAKj7B,EACD,MACJ,QACI2V,EAAOuoB,EAIf,MADe,UAAMvoB,GAAN,OAAawoB,MAGnBE,GAA0B5gC,cAAQ,SAACL,GAC5C,IAAMkhC,EAAQb,GAASrgC,GACjB6vB,EAAU0M,GAA2Bv8B,GACrCmhC,EAAsBX,qBAAUU,EAAO,CACzC3oB,KAAMymB,GACNyB,OAAO,EACPC,QAAQ,IAENU,EAAiBZ,qBAAUU,EAAO,CACpC3oB,KAAMwmB,GACN0B,OAAO,EACPC,QAAQ,IAEZ,GAAI7Q,GAAWsR,GAAuBA,EAAoBvc,OAAO4I,YAE7D,MADc,WAAO2T,EAAoBvc,OAAO4I,aAG/C,GAAI4T,GAAkBA,EAAexc,OAAO4I,YAE7C,MADc,WAAO4T,EAAexc,OAAO4I,aAG/C,IAAMrvB,EAAQkjC,GAAkBrhC,GAChC,GAAI7B,EAAO,CACP,IAAMmjC,EAAe1X,GAAWzrB,GAC1BojC,EAAc,IAAI9kC,GAAW0B,EAAOmjC,GACpCE,EAAWD,GAAeA,EAAY/jC,OAAS+jC,EAAY/jC,OAAOX,QAAK+F,EAC7E,OAAQ4+B,QAAW5+B,MAIdy+B,GAAoBhhC,cAAQ,SAACL,GACtC,IAAMkhC,EAAQb,GAASrgC,GACjByhC,EAAajB,qBAAUU,EAAO,CAChC3oB,KAAM0mB,GACNwB,OAAO,EACPC,QAAQ,IAEZ,GAAIe,GAAcA,EAAW7c,OAAOzmB,MAChC,MAAM,IAAN,OAAWsjC,EAAW7c,OAAOzmB,OAGjC,IAAIujC,EAAWlB,qBAAUU,EAAO,CAC5B3oB,KAAMolB,GAAO1vB,MACbwyB,OAAO,EACPC,QAAQ,IAKZ,OAHInE,GAA2Bv8B,KAAW0hC,IACtCA,EAAWlB,qBAAUU,EAAO,CAAE3oB,KAAMolB,GAAOU,WAAYoC,OAAO,EAAMC,QAAQ,KAE5EgB,GAAYA,EAASvgC,IACdugC,EAASvgC,SADpB,KAKSwgC,GAActhC,cAAQ,SAACL,GAChC,IAAMkhC,EAAQb,GAASrgC,GACjByhC,EAAajB,qBAAUU,EAAO,CAChC3oB,KAAM0mB,GACNwB,OAAO,EACPC,QAAQ,IAEZ,GAAIe,GAAcA,EAAWlpB,KACzB,OAAOkpB,EAAWlpB,KAAK8M,QH/HC,WG+HyB,OAK5Cuc,GAAevhC,cAAQ,SAACL,GACjC,IAAMkhC,EAAQb,GAASrgC,GACjB6hC,EAAarB,qBAAUU,EAAO,CAChC3oB,KAAM2mB,KAEV,OAAI2C,GAAcA,EAAWtpB,MACP6mB,GAAwByC,EAAWtpB,OAPpC,aAYZupB,GAAqBzhC,cAAQ,SAACL,GACvC,OAAOqgC,GAASrgC,KAAW29B,GAAOe,eAEhCqD,GAAkB,SAACb,GACrB,IAAMc,EAAWxB,qBAAUU,EAAO,CAC9B3oB,KAAM4mB,KAEV,QAAS6C,GAAYA,EAASC,SAErBC,GAAc7hC,cAAQ,SAACL,GAChC,IAAMmiC,EAAYpC,GAAoB//B,GAChCkhC,EAAUiB,EAAYA,EAAUplC,MAAM,KAAK,GAAK,GACtD,OAAOglC,GAAgBb,MAEdkB,GAAuB/hC,cAAQ,SAACL,GACzC,IAAMkhC,EAAQb,GAASrgC,GACvB,OAAIkhC,IAAUvD,GAAOc,aACVyD,GAAYliC,GAEhB+hC,GAAgBb,MAEdmB,GAAiBhiC,cAAQ,SAACL,GACnC,OAAOqgC,GAASrgC,KAAW29B,GAAOkB,gBAEzByD,GAAkBjiC,cAAQ,SAACL,GACpC,OAAOqgC,GAASrgC,KAAW29B,GAAOmB,iBAEzByD,GAAkBliC,cAAQ,SAACL,GACpC,IAAMkhC,EAAQb,GAASrgC,GACjBwiC,EAAgBhC,qBAAUU,EAAO,CACnC3oB,KAAMolB,GAAOjK,aAEjB,QAAS8O,GAAiBA,EAAcP,WCnK/BQ,GAAgB,SAACziC,GAAD,OAAWA,IAAU3B,IAA+B2B,IAAU3B,IAO9EqkC,IANmBriC,cAAQ,SAACL,GACrC,IACM2iC,EADc3iC,EAAMM,IAAI,eACUA,IAAI,uBAE5C,OADoBmiC,GAAcE,MAGGtiC,cAAQ,SAACL,GAC9C,IACM4iC,EADc5iC,EAAMM,IAAI,eACmBA,IAAI,gCAErD,OADoBmiC,GAAcG,OAezBC,IAZ0BxiC,cAAQ,SAACL,GAC5C,IACM8iC,EADc9iC,EAAMM,IAAI,eACaA,IAAI,0BAE/C,OADoBmiC,GAAcK,MAGHziC,cAAQ,SAACL,GACxC,IACM+iC,EADc/iC,EAAMM,IAAI,eACYA,IAAI,yBAE9C,OADoBmiC,GAAcM,MAGT1iC,cAAQ,SAACL,GAAD,YAA8D4C,IAAnD5C,EAAMM,IAAI,eAAeA,IAAI,sBAChE0iC,GAAgB3iC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,iBAChE2iC,GAAoB5iC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,qBACpE4iC,GAAwB7iC,cAAQ,SAACL,GAC1C,IAAI7C,EAAiB,GACjB+/B,EAAgB,GAChB17B,EAAa,GACb+H,EAAM,GACNnG,EAAW,GACT+/B,EAAavY,GAA6B5qB,GAC1CsnB,EAAeC,GAAgBvnB,GAC/BmmB,EAAqBC,GAAsBpmB,GACjD,GAAImmB,EACA,IACI,IAAMzpB,EAAa,IAAID,GAAW0pB,GAClChpB,EAAiBT,EAAWS,gBAAkBA,EAC9C+/B,EAAgBxgC,EAAWU,mBAAqB8/B,EAChD17B,EAAa2hC,EAAazmC,EAAWa,MAAQiE,EAAa,GAE9D,MAAOwH,GACHC,GAAW,sDAAD,OAAuDkd,EAAvD,yBAA0Fnd,EAAE8C,QAA5F,MAGlB,GAAIwb,EACA,IAEI/d,EADmB,IAAI9M,GAAW6qB,GAAe6b,GAChC5lC,MAAQgM,EAE7B,MAAOP,GACHC,GAAW,sDAAD,OAAuDqe,EAAvD,yBAAoFte,EAAE8C,QAAtF,MAGlB,IACMtJ,EADgBxC,EAAMM,IAAI,iBACQA,IAAI,mBAC5C,GAAIkC,EACA,IAEIY,EADmB,IAAI3G,GAAW+F,GACZjF,MAAQ6F,EAElC,MAAO4F,GACHC,GAAW,sDAAD,OAAuDzG,EAAvD,yBAAyFwG,EAAE8C,QAA3F,MAGlB,MAAO,CAAE3O,iBAAgB+/B,gBAAe17B,aAAY+H,MAAKnG,eAEhDggC,GAAqB/iC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,sBACrE+iC,GAAUhjC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,WAC1DgjC,GAAYjjC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,aAC5DijC,GAAcljC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,eAC9DkjC,GAAYnjC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,aAC5DmjC,GAAcpjC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,eAC9DojC,GAAkBrjC,cAAQ,SAACL,GACpC,IAAM2jC,EAAkB3jC,EAAMM,IAAI,eAAeA,IAAI,YAErD,OADqBsjC,uBAAYD,MAGxBE,GAAcxjC,cAAQ,SAACL,GAAD,OAAWA,EAAMM,IAAI,eAAeA,IAAI,eAC9D+qB,GAAmBhrB,cAAQ,SAACL,EAAO+6B,GAAR,OAAoB/6B,EACvDM,IAAI,eACJA,IAAI,YACJ4mB,IAAI6T,EAAQjB,OAAO19B,kBACX0nC,GAAYzjC,cAAQ,SAACL,GAAD,OAAWhE,IAAoBH,GAAwBwvB,GAAiBrrB,EAAO1B,GAAQC,QAC3GwlC,GAAc1jC,cAAQ,SAACL,GAEhC,OADaqjC,GAAQrjC,KACLf,GAAKE,SAEZ6kC,GAAc3jC,cAAQ,SAACL,GAChC,OAAO+jC,GAAY/jC,IAAUqrB,GAAiBrrB,EAAO1B,GAAQM,qBAEpDqlC,GAAc5jC,cAAQ,SAACL,GAEhC,OADiBA,EAAMM,IAAI,eAAeA,IAAI,YAC9B4jC,aAEPnd,GAAiB,SAACD,GAC3B,OAAOA,IAAc/nB,IAA6B+nB,IAAc/nB,IAEvD8rB,GAAkB,SAAC/D,GAC5B,OAAOA,IAAc/nB,IAEZolC,GAAoB,SAACrd,GAC9B,OAAOA,IAAc/nB,IAKZqlC,GAAwB/jC,cAAQ,SAACgkC,GAE1C,OAAO,KAEExc,GAAkB,SAAC5nB,GAC5B,QAAKA,IAGGA,IAAsB0mB,EAAkB7mB,kBAAkBqJ,WAC9DlJ,IAAsB0mB,EAAkB7mB,kBAAkBuJ,SAErDkb,GAAYlkB,cAAQ,SAACK,GAE9B,OADaA,EAAMJ,IAAI,eAAeA,IAAI,UAC1BrB,GAAKG,UAEZm9B,GAA6Bl8B,cAAQ,SAACL,GAC/C,OAAOokC,GAAsBpkC,IAAUukB,GAAUvkB,MAExCskC,GAAYjkC,cAAQ,SAACL,GAC9B,OAAQukB,GAAUvkB,IACdqrB,GAAiBrrB,EAAO1B,GAAQQ,oBAChCujC,GAAeriC,IACfsiC,GAAgBtiC,MAEXukC,GAAmBlkC,cAAQ,SAACL,GACrC,OAAOskC,GAAUtkC,IAAUgkC,GAAYhkC,MAE9BwkC,GAA0BnkC,cAAQ,SAACL,GAC5C,OAAOqrB,GAAiBrrB,EAAO1B,GAAQE,UAAYm+B,GAAgC38B,IAAUukB,GAAUvkB,M,whCCtJpG,IAAMykC,GAAWtM,aAAe,CACnCuM,0BAA0B,CAAD,2KAKzBC,gCAAgC,CAAD,6KAK/BC,0BAA0B,CAAD,wKAKzBC,6BAA6B,CAAD,iKAK5BC,4BAA4B,CAAD,gHAMlBC,GACA,GADAA,GAEQ,kBAFRA,GAGM,gBAHNA,GAIO,iBAJPA,GAKkB,4BALlBA,GAME,YANFA,GAOE,YAPFA,GAQE,YARFA,GASU,oBATVA,GAUY,sBAVZA,GAWiC,2CAXjCA,GAYO,iBAZPA,GAaC,WAbDA,GAcU,oBAdVA,GAgBM,gBAhBNA,GAiBO,iBAjBPA,GAkBO,iBAlBPA,GAmBO,iBAnBPA,GAoBE,YApBFA,GAqBC,WArBDA,GAsBI,cAtBJA,GAuBI,cAvBJA,GAwBS,mBAxBTA,GAyBU,oBAzBVA,GA0BS,mBA1BTA,GA2BU,oBA3BVA,GA4BS,mBA5BTA,GA6BK,eA7BLA,GA8BM,gBA9BNA,GA+BO,iBA/BPA,GAgCM,gBAhCNA,GAiCQ,kBAjCRA,GAkCI,cAlCJA,GAmCO,iBAnCPA,GAoCM,gBApCNA,GAqCsB,gCArCtBA,GAsCG,aAtCHA,GAuCY,sBAvCZA,GAwCU,oBAxCVA,GAyCS,mBAzCTA,GA0CO,iBA1CPA,GA2CK,eA3CLA,GA4CK,eA5CLA,GA6CE,YA7CFA,GA8CQ,kBA9CRA,GA+C2B,qCA/C3BA,GAgDuB,iCAhDvBA,GAiDU,oBAjDVA,GAkDS,mBAlDTA,GAmDD,SAnDCA,GAoDA,UApDAA,GAqDK,eArDLA,GAsDa,uBAtDbA,GAuDoB,8BAvDpBA,GAwDa,uBAxDbA,GAyDY,sBAzDZA,GA0DqB,+BA1DrBA,GA2DG,aA3DHA,GA4DS,mBA5DTA,GA8DI,cA9DJA,GA+DQ,kBA/DRA,GAgEW,qBAhEXA,GAiEI,cAjEJA,GAkEsB,gCAlEtBA,GAmEyB,mCAnEzBA,GAoEqB,+BApErBA,GAqED,SArECA,GAsEQ,kBAtERA,GAuEe,yBAvEfA,GAwEU,oBAxEVA,GAyEM,gBAzENA,GA0ES,mBA1ETA,GA2EK,eA3ELA,GA4EI,cA5EJA,GA6EK,eA7ELA,GA8EW,qBA9EXA,GA+EqB,+BA/ErBA,GAgFoB,8BAhFpBA,GAiFe,yBAjFfA,GAkFU,oBAlFVA,GAoFK,eApFLA,GAqFkC,4CArFlCA,GAsFoB,8BAtFpBA,GAuFO,iBAvFPA,GAwFU,oBAxFVA,GAyFe,yBAzFfA,GA0FkB,4BA1FlBA,GA2FmB,6BA3FnBA,GA6FE,YA7FFA,GA8FI,cA9FJA,GA+FS,mBA/FTA,GAgGuB,iCAhGvBA,GAiGI,aAjGJA,GAkGM,eAlGNA,GAmGM,gBAnGNA,GAoGU,oBApGVA,GAqGG,aArGHA,GAsGI,cAtGJA,GAuGM,gBAvGNA,GAwGU,oBAxGVA,GAyGmB,6BAzGnBA,GA0GuB,iCAEvBC,GACT,WAAYl5B,EAASjP,EAAIooC,EAAkBp5B,EAAMq5B,GAA+B,aAC5EtoC,KAAKkP,QAAUA,EACflP,KAAKC,GAAKA,EACVD,KAAKqoC,iBAAmBA,EACxBroC,KAAKiP,KAAOA,EACZjP,KAAKsoC,6BAA+BA,GAI/BC,GACH,4BADGA,GAEY,4FAFZA,GAGqB,4FAHrBA,GAIa,4FAJbA,GAKwB,4FAExBC,GAAsC,SAAClxB,GAChD,IAAMmxB,EAAgB,GACtB,OAAQnxB,EAAMrI,MACV,KAAKs5B,GACD,IADJ,EACUG,EAAapxB,EAAMgxB,6BAA6BhoC,OAD1D,KAE8CgX,EAAMgxB,8BAFpD,IAEI,2BAA8E,CAC1E,OAD0E,SAEtE,KAAKC,GACDE,EAAcxnC,KAAK4mC,GAASC,2BAC5B,MACJ,KAAKS,GACDE,EAAcxnC,KAAK4mC,GAASG,2BAC5B,MACJ,KAAKO,GACDE,EAAcxnC,KAAK4mC,GAASI,8BAC5B,MACJ,KAAKM,GACDE,EAAcxnC,KAAK4mC,GAASE,mCAd5C,8BAqBQU,EAAcnoC,QAAUooC,GACxBD,EAAcxnC,KAAK4mC,GAASK,6BAGxC,OAAOO,GAEIL,M,sDClLFO,GAAb,WACI,aAAe,aACX3oC,KAAK4oC,gBAAiB,EACtB5oC,KAAK6oC,WAAa,IAAIC,KACtB9oC,KAAK+oC,kBAAoB,IAAIC,KAC7BhpC,KAAKipC,wBAA0B,IAAIC,KACnClpC,KAAKmpC,WAAa,IAAIC,KAN9B,gDAQeC,GACP,IAAIrpC,KAAK4oC,eAAT,CAGA,IA0BMU,EAAS,CACXC,mBAAoB3H,GAAS4H,MAAMC,mBACnCC,YAAa9H,GAAS4H,MAAMG,kBAC5BC,WAAY,CAAC5pC,KAAKmpC,WAAYnpC,KAAK+oC,mBACnCc,SAAU,CAAC,CAAC7pC,KAAKipC,0BACjBa,gBAAiB,CAAEC,oBAZC,CACpBC,uBAAuB,EACvBC,qBAAqB,EACrBC,sBAAsB,EACtBC,6BAA6B,EAC7BC,8BAA8B,IAQ9BC,0BAhCuB,CACvBC,YAAa,CACTC,QAAQ,EACRC,UAAU,EACVC,QAAQ,EACRC,UAAU,EACVC,OAAO,EACPC,QAAQ,EACRC,SAAS,GAEbC,iBAAiB,EACjBC,mCAAmC,GAsBnCC,sBApB2B,CAC3BC,qBAAqB,EACrBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,iBAAiB,GAiBjBC,qBAAqB,EACrBC,uBAAuB,GAG3BtrC,KAAK6oC,WAAW0C,WAAWjC,EAAQ,IACnCtpC,KAAK6oC,WAAW2C,wBAAwBnC,GACxCrpC,KAAK4oC,gBAAiB,KApD9B,oCAsDkBjoC,EAAM8qC,EAAKC,GACrB1rC,KAAK6oC,WAAW8C,cAAc,CAAEhrC,OAAM8qC,OAAOC,KAvDrD,iCAyDe/qC,EAAM+qC,GACb1rC,KAAK6oC,WAAW+C,WAAW,CAAEjrC,QAAQ+qC,KA1D7C,0CA4DwBzrC,EAAI4rC,EAAclrC,EAAMivB,EAAUkc,EAASC,EAAoBrrC,EAAMsrC,EAAMN,GAC3F1rC,KAAKmpC,WAAW8C,oBAAoB,CAAEhsC,KAAI4rC,eAAclrC,OAAMivB,WAAUkc,UAASC,qBAAoBrrC,OAAMsrC,QAAQN,KA7D3H,qCA+DmBzrC,EAAIisC,EAAWC,EAAeT,GACzC1rC,KAAK6oC,WAAWuD,eAAe,CAAEnsC,KAAIisC,YAAWC,iBAAiBT,KAhEzE,iCAkEex8B,EAASw8B,EAAYS,GAC5B,IAAME,EAAkB,CACpBn9B,QAASA,EACTi9B,cAAeA,EAAgBA,EAAcG,WAAaC,KAAcC,QAAQF,YAEhFZ,IACAA,EAAU,QAAcx8B,EACxBw8B,EAAU,cAAoBS,EAAgBA,EAAcG,WAAaC,KAAcC,QAAQF,YAEnGtsC,KAAK6oC,WAAW+C,WAAW,CAAEjrC,KAAM,kBAAoB+qC,GAA0BW,KA3EzF,kCA6EgB1rC,EAAM8rC,EAASC,EAAaC,EAAKC,GACzC5sC,KAAK6oC,WAAW+C,WAAW,CAAEjrC,KAAM,mBAAqB,CAAEksC,WAAYlsC,EAAM8rC,UAASC,cAAaC,MAAKC,UA9E/G,kDAgFgCE,EAAqBC,EAAWC,GACxDhtC,KAAK+oC,kBAAkBkE,YAAY,sBAAuBH,GACtDC,GACA/sC,KAAK+oC,kBAAkBkE,YAAY,YAAaF,KAnF5D,sDAuFQ/sC,KAAK+oC,kBAAkBkE,YAAY,sBAAuB,MAvFlE,8BA0FQjtC,KAAKipC,wBAAwBiE,YA1FrC,K,qBCFaC,GAAb,WACI,aAAe,aACXntC,KAAK4oC,gBAAiB,EAF9B,gDAIeS,GACP,IAAIrpC,KAAK4oC,eAAT,CAGA,IAAMU,EAAS,CACXC,mBAAoB3H,GAASkH,oBAAoBW,mBACjD2D,uBAAuB,EACvBC,aAAa,EACbC,8BAA8B,EAC9BC,0BAA0B,EAC1BtD,qBAAqB,EACrBC,sBAAsB,EACtBsD,qBAAqB,EACrBC,4BAA4B,EAC5BC,iBAAiB,EACjBC,sBAAsB,EACtBC,qBAAqB,EACrB5D,uBAAuB,EACvB6D,yBAAyB,EACzB1D,6BAA6B,EAC7BC,8BAA8B,EAC9B0D,uBAAwBC,KAAwBC,KAEpDhuC,KAAKiuC,aAAe,IAAInF,KAAoB,CAAEQ,WAC9CtpC,KAAKiuC,aAAaC,kBAClBluC,KAAKiuC,aAAazC,wBAAwBnC,GAI1CrpC,KAAKiuC,aAAaE,QAAQC,eAAeC,QAAU,GACnDruC,KAAK4oC,gBAAiB,KAlC9B,oCAoCkBjoC,EAAM8qC,EAAKC,EAAY4C,GACjCtuC,KAAKiuC,aAAatC,cAAc,CAAEhrC,OAAM8qC,MAAKC,aAAY4C,mBArCjE,iCAuCe3tC,EAAM+qC,EAAY4C,GACzBtuC,KAAKiuC,aAAarC,WAAW,CAAEjrC,OAAM+qC,aAAY4C,mBAxCzD,0CA0CwBruC,EAAI4rC,EAAclrC,EAAMivB,EAAUkc,EAASC,EAAoBrrC,EAAMsrC,EAAMN,EAAY4C,GACvGtuC,KAAKiuC,aAAahC,oBAAoB,CAClChsC,KACA4rC,eACAlrC,OACAivB,WACAkc,UACAC,qBACArrC,OACAsrC,OACAN,aACA4C,mBArDZ,qCAwDmBruC,EAAIisC,EAAWC,EAAeT,EAAY4C,GACrDtuC,KAAKiuC,aAAa7B,eAAe,CAAEnsC,KAAIisC,YAAWC,gBAAeT,aAAY4C,mBAzDrF,iCA2Dep/B,EAASw8B,EAAYS,GAC5BnsC,KAAKiuC,aAAa5hC,WAAW,CAAE6C,UAASw8B,aAAYS,oBA5D5D,kCA8DgBxrC,EAAM8rC,EAASC,EAAaC,EAAKC,GACzC5sC,KAAKiuC,aAAaM,YAAY,CAAE5tC,OAAM8rC,UAASC,cAAaC,MAAKC,UA/DzE,kDAiEgCE,EAAqBC,EAAWyB,GACxDxuC,KAAKiuC,aAAaQ,4BAA4B3B,EAAqBC,EAAWyB,KAlEtF,sDAqEQxuC,KAAKiuC,aAAaS,kCArE1B,8BAwEQ1uC,KAAKiuC,aAAaf,YAxE1B,KCDayB,GACF,QADEA,GAEY,K,qkBCGzB,IAAMC,GAAgB,mBAElBC,GAAezvC,IAAoBH,EAChC,SAAS6vC,KACR1vC,IAAoBH,IACpB4vC,IAAe,GAGhB,SAASE,KACR3vC,IAAoBH,IACpB4vC,IAAe,GAGvB,IAAI/qC,QAAQkC,EACL,SAASgpC,GAASC,GACrBnrC,GAAQmrC,EAEZ,IAAMC,GAAc,SAAClmC,GACjB,IAAK,IAAD,EAkBA,GAjBKA,EAAKgjC,OACNhjC,EAAKgjC,KAAO,IAGZhjC,EAAKmmC,UAAYnmC,EAAKmmC,SAASzD,YAAc1iC,EAAKmmC,SAASzD,WAAW0D,wBAC/DpmC,EAAKmmC,SAASzD,WAAW0D,eAAzB,qBACApmC,EAAKmmC,SAASzD,WAAW0D,eAAzB,cACHpmC,EAAKmmC,SAASzD,WAAW0D,eAAe,4BACxCpmC,EAAKgjC,KAAL,gBACIhjC,EAAKmmC,SAASzD,WAAW0D,eAAe,6BAIpD,UAAIpmC,EAAKgjC,YAAT,aAAI,EAAWP,OACXziC,EAAKgjC,KAAL,IAAmBqD,GAASrmC,EAAKgjC,KAAKP,MAGtC3nC,GAAO,CACP,IAAMV,EAAQU,GAAMwrC,WACdC,EAAYvK,GAAa5hC,GAFxB,EAG8DkjC,GAAsBljC,GAAnF7C,EAHD,EAGCA,eAAgB+/B,EAHjB,EAGiBA,cAAe17B,EAHhC,EAGgCA,WAAY+H,EAH5C,EAG4CA,IAAKnG,EAHjD,EAGiDA,SAClDgpC,EAAkBhJ,GAAmBpjC,GACrCT,EAAS+jC,GAAUtjC,GACnBqsC,EAAS7I,GAAUxjC,GACnBssC,EAAW/I,GAAYvjC,GACvBusC,EAAW9I,GAAYzjC,GACvBk7B,EAAW+I,GAAYjkC,GACvBwsC,EAAOnJ,GAAQrjC,GACfysC,EAAW5I,GAAY7jC,GACvB0sC,EAAU3iC,GAAW/J,GAC3B4F,EAAKgjC,KAAL,eAA8BzrC,EAC9ByI,EAAKgjC,KAAL,cAA6B1L,EAC7Bt3B,EAAKgjC,KAAL,WAA0BpnC,EAC1BoE,EAAKgjC,KAAL,IAAmBr/B,EACnB3D,EAAKgjC,KAAL,SAAwBxlC,EACxBwC,EAAKgjC,KAAL,gBAA+BwD,EAC/BxmC,EAAKgjC,KAAL,OAAsBrpC,EACtBqG,EAAKgjC,KAAL,OAAsByD,EACtBzmC,EAAKgjC,KAAL,SAAwB0D,EACxB1mC,EAAKgjC,KAAL,SAAwB2D,EACxB3mC,EAAKgjC,KAAL,SAAwB1N,GAAYA,EAASh+B,OAAS,EAAIwoB,KAAKinB,UAAUzR,GAAY,GACrFt1B,EAAKgjC,KAAL,UAAyBuD,EACzBvmC,EAAKgjC,KAAL,KAAoB4D,EACpB5mC,EAAKgjC,KAAL,SAAwB6D,EACxB7mC,EAAKgjC,KAAL,QAAuB8D,EAE3B9mC,EAAKgjC,KAAL,QAhEK,gBAiELhjC,EAAKgjC,KAAL,gBAA+B5sC,EAC/B4J,EAAKgjC,KAAL,WAA0B,QAC1BhjC,EAAKgjC,KAAL,QAAuB,WAE3B,MAAOgE,GAICnB,IACAoB,QAAQ34B,MAAR,gDAAuD04B,EAAMlnB,KAAKinB,UAAUC,GAAO,OAIzFE,GD/EC,SAAsCC,GACzC,OAAQA,GACJ,KAAKxB,GACD,MAAO,CAAC,IAAIxB,IAChB,KAAKwB,GACD,MAAO,CAAC,IAAIhG,IAChB,QACI,MAAO,CAAC,IAAIwE,GAA+B,IAAIxE,KCwEjCyH,CAA6BxO,GAASyO,0BAWhE,SAASC,GAA2BC,GAChC,IACIA,IAEJ,MAAOnkC,GACH6jC,QAAQ34B,MAAR,kCAAyClL,GAAK,MAGtD,SAASokC,GAAY9E,GAEjB,GAAIA,GAAcA,EAAU,QAAa,CACrC,IAAMpjB,EAAUQ,KAAKC,MAAM2iB,EAAU,QAAa+E,IAClD/E,EAAU,SAAQA,GAAR,IAAoBpjB,YAElC,OAAOojB,GAAc,GAEzB,IAAMgF,GAAW,SAACC,GAEd,IAAMC,EAAiB,GASvB,OARAC,OAAOC,KAAKH,GAAO5e,SAAQ,SAACtI,GACxB,IAAMsnB,EAAOJ,EAAMlnB,GACfsnB,GAAQA,EAAKzwC,OAAS,OACtBqwC,EAAMlnB,GAAOsnB,EAAK3M,UAAU,EAAG,MAC/BwM,EAAe3vC,KAAKwoB,OAG5BknB,EAAK,eAAqBC,EAAetE,WAClCqE,GAELF,GAAe,SAACxnC,EAAGgB,GACrB,GAAI+mC,MAAMC,QAAQhnC,IAAU6e,KAAKinB,UAAU9lC,GAAO3J,OAAS,KAAM,CAE7D,KAAOwoB,KAAKinB,UAAU9lC,GAAO3J,OAAS,MAClC2J,EAAMinC,MAEV,OAAOjnC,EAEX,MAAqB,kBAAVA,GAAsBA,EAAM3J,OAAS,KACrC2J,EAAMm6B,UAAU,EAAG,MAEvBn6B,GAEJ,SAAS0hC,GAAchrC,EAAM8qC,EAAKC,EAAY4C,GACjDgC,IAA2B,WACnBzB,IACAoB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,mCAAwDjuC,GAAQ,GAAhE,qBAA+E8qC,GAAO,GAAtF,MAEJC,EAAagF,GAASF,GAAY9E,IAClCwE,GAAkBne,SAAQ,SAACof,GACvBA,EAAQxF,cAAchrC,EAAM8qC,EAAKC,EAAY4C,SAIlD,SAAS1C,GAAWjrC,EAAM+qC,EAAY4C,GACzCgC,IAA2B,WACnBzB,KACInD,GACAuE,QAAQmB,eAAR,UAA0BxC,GAA1B,gCAA+DjuC,EAA/D,cAAyE+qC,EAAU,KAAnF,MACAuE,QAAQ3rC,KAAR,uBAA6BwkB,KAAKinB,UAAUrE,GAA5C,MACAuE,QAAQoB,YAGRpB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,gCAAqDjuC,KAI7D+qC,EAAa8E,GAAY9E,GACzBwE,GAAkBne,SAAQ,SAACof,GACvBA,EAAQvF,WAAWjrC,EAAM+qC,EAAY4C,SAI1C,SAASe,GAAS9qC,GAAK,MAGJA,EAAIpE,MAAM,KAHN,YAGrB+b,EAHqB,KAGZ4L,EAHY,KAI1B,GAAIA,EAAM,CACN,IAAME,EAAS,IAAIspB,gBAAgBxpB,GAInC,OAHAE,EAAOupB,OAAO,YACdvpB,EAAOupB,OAAO,iBACdzpB,EAAOE,EAAOskB,YAEJ,GAAN,OAAUpwB,EAAV,YAAqB4L,GAGd5L,EAGf,OAAO3X,EAcJ,SAASitC,GAAgBvxC,EAAI4rC,EAAclrC,EAAMivB,EAAUkc,EAASC,EAAoBrrC,EAAMsrC,EAAMN,EAAY4C,GACnHgC,IAA2B,WACnBzB,IACAoB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,mCAAwD3uC,EAAxD,8BAAgF4rC,EAAhF,sBAA0GlrC,EAA1G,0BAAgIivB,EAAhI,yBAAyJkc,EAAzJ,oCAA4LC,EAA5L,sBAA4NrrC,EAA5N,sBAA8OsrC,EAA9O,OAEJN,EAAagF,GAASF,GAAY9E,MAChB,QAASA,IACvBA,EAAU,IAAU2D,GAAS3D,EAAU,MAE3CwE,GAAkBne,SAAQ,SAACof,GACvBA,EAAQlF,oBAAoBhsC,EAAI4rC,EAAclrC,EAAMivB,EAAUkc,EAASC,EAAoBrrC,EAtBhG,SAAmBsrC,GACtB,IACI,IAAMyF,EAAe3oB,KAAKC,MAAMijB,GAIhC,OAHIyF,GAAgBA,EAAahG,MAC7BgG,EAAahG,IAAM4D,GAASoC,EAAahG,MAEtC3iB,KAAKinB,UAAU0B,GAE1B,MAAOrlC,GACH,OAAO4/B,GAa8F0F,CAAU1F,GAAON,EAAY4C,SAInI,SAASlC,GAAensC,EAAIisC,EAAWC,EAAeT,EAAY4C,GACrEgC,IAA2B,WAKvB,GAJIzB,IACAoB,QAAQ34B,MAAR,UAAiBs3B,GAAjB,kCAAwD3uC,EAAxD,2BAA6EisC,GAAa,GAA1F,MAEJR,EAAaA,GAAc,GACvBQ,GAAaA,aAAqB9D,GAAe,CACjD,IAAMuJ,EAAUzF,EAChBR,EAAU,UAAgB,OAC1BA,EAAU,UAAgBiG,EAAQ1iC,MAAQ,GAC1Cy8B,EAAU,GAASiG,EAAQ1xC,GAC3ByrC,EAAU,iBAAuBiG,EAAQtJ,sBAGzCqD,EAAU,UAAgB,QAC1BA,EAAU,UAAgB,GAC1BA,EAAU,GAAS,GACnBA,EAAU,iBAAuB,GAErCA,EAAagF,GAASF,GAAY9E,IAClCwE,GAAkBne,SAAQ,SAACof,GACvBA,EAAQ/E,eAAensC,EAAIisC,EAAWC,EAAeT,EAAY4C,SActE,SAASjiC,GAAW6C,EAASw8B,EAAYS,GAC5CmE,IAA2B,WACnBzB,IACAoB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,mCAAwD1/B,EAAxD,MAEJw8B,EAAagF,GAASF,GAAY9E,IAClCwE,GAAkBne,SAAQ,SAACof,GACvBA,EAAQ9kC,WAAW6C,EAASw8B,EAAYS,SAI7C,SAASe,KACZoD,IAA2B,WACnBzB,IACAoB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,WAEJsB,GAAkBne,SAAQ,SAACof,GACvBA,EAAQjE,cAIb,SAASuB,GAA4B3B,EAAqBC,EAAWyB,GACxE8B,IAA2B,WACnBzB,IACAoB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,gEAAqF9B,EAArF,2BAA2HC,GAAa,GAAxI,+BAAiKyB,IAAiB,EAAlL,MAEJ0B,GAAkBne,SAAQ,SAACof,GACvBA,EAAQ1C,4BAA4B3B,EAAqBC,EAAWyB,SAIzE,SAASE,KACZ4B,IAA2B,WACnBzB,IACAoB,QAAQ3rC,KAAR,UAAgBsqC,GAAhB,mCAEJsB,GAAkBne,SAAQ,SAACof,GACvBA,EAAQzC,sCAepB,KArNA,WACI,IACIwB,GAAkBne,SAAQ,SAACof,GACvBA,EAAQ5F,WAAW2D,OAG3B,MAAOc,GACHC,QAAQ34B,MAAR,uEAA8E04B,EAAMlnB,KAAKinB,UAAUC,GAAO,MA+M9G4B,GAEJ,MAAOt6B,KACH24B,QAAQ34B,MAAR,2EAAkFwR,KAAKinB,UAAUz4B,KAAS,MAE/Fu6B,I,sBChTXC,I,YAAY9rC,GACV+rC,GAAW,IAAI1yC,OAAO2yC,qBACrB,SAAeC,KAAtB,gC,sCAAO,4BAAApvC,EAAA,8DACemD,IAAd8rC,GADD,uBAEOI,EAAU,IAAIC,SAAQ,SAACC,EAASC,GAClCN,GAASO,IAAG,SAACC,GACTlmC,GAAW,oBAAD,OAAqBkmC,IAC/BH,EAAQG,SALjB,SAQmBL,EARnB,OAQCJ,GARD,uCAUIA,IAVJ,4C,oCCFDU,GAAUC,eAChBpmC,GAAW,4BAAD,OAA6Byc,KAAKinB,UAAUyC,MAC/C,IAAME,GAAcF,IAAWA,GAAQ7xC,KAAO6xC,GAAQ7xC,KAAO,UCJvDgyC,GAAY,CACrBC,qBAAsB,uBACtBC,oBAAqB,sBACrBC,8BAA+B,gCAC/BC,uBAAwB,yBACxBC,kCAAmC,oCACnCC,aAAc,eACdC,sBAAuB,wBACvBC,8BAA+B,gCAC/BC,UAAW,YACXC,0BAA2B,4BAC3BC,8CAA+C,gDAC/CC,SAAU,WACVC,0BAA2B,4BAC3BC,qBAAsB,uBACtBC,mBAAoB,qBACpBC,wBAAyB,0BACzBC,0BAA2B,4BAC3BC,iBAAkB,mBAClBC,sBAAuB,wBACvBC,4BAA6B,8BAC7BC,iBAAkB,mBAClBC,4BAA6B,8BAC7BC,eAAgB,iBAChBC,mBAAoB,qBACpBC,uBAAwB,yBACxBC,iBAAkB,mBAClBC,qBAAsB,uBACtBC,gCAAiC,kCACjCC,qCAAsC,uCACtCC,4BAA6B,8BAC7BC,iCAAkC,mCAClCC,sCAAuC,wCACvCC,2CAA4C,6CAC5CC,iBAAkB,mBAClBC,mCAAoC,qCACpCC,gCAAiC,kCACjCC,aAAc,eACdC,yBAA0B,2BAC1BC,mBAAoB,qBACpBC,gBAAiB,kBACjBC,sBAAuB,wBACvBC,8BAA+B,gCAE/BC,4BAA6B,8BAC7BC,uBAAwB,yBACxBC,qBAAsB,uBACtBC,gBAAiB,kBACjBC,qBAAsB,uBACtBC,qBAAsB,uBACtBC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,0BAA2B,4BAC3BC,cAAe,gBACfC,wBAAyB,0BACzBC,2BAA4B,6BAC5BC,2BAA4B,6BAC5BC,aAAc,gBAEHxD,MCtDFyD,GACK,eADLA,GAEO,iBAIhBvQ,IAAgB,EAChBlJ,GAAcyZ,G,SACHC,K,sEAAf,4BAAAxzC,EAAA,+EAEgCovC,KAFhC,OAEcH,EAFd,YAKgBY,GALhB,OAMiB,SANjB,6BAOgB/V,GAAcyZ,GAP9B,mCAUgBzZ,GAAcmV,EAAYsE,GAA6BA,GAVvE,6BAaQ/pC,GAAW,wBAAD,OAAyBylC,EAAzB,2BAAqDY,GAArD,2BAAmF/V,KAbrG,kDAgBQtwB,GAAW,6DAAD,OAA8DswB,GAA9D,MACVyP,GAAe,EAAD,IAjBtB,2D,sBAoBO,SAAewF,KAAtB,gC,sCAAO,sBAAA/uC,EAAA,yDACEgjC,GADF,gCAEOwQ,KAFP,OAIHxQ,IAAgB,EAJb,4C,sBAeA,SAASyQ,GAAQ7sB,EAAKxf,EAAOssC,GAChC,IAAK1Q,GACD,MAAM,IAAIuC,GAAc,8CAA+C,GAAID,IAE/E,IACIxL,KAAgByZ,GACVI,eAAeF,QAAQ7sB,EAAKxf,GAC5BwsC,aAAaH,QAAQ7sB,EAAKxf,GAEpC,MAAO+lC,GAGH,GAFA5D,GAAe4D,GACf3jC,GAAW,uDAAD,OAAwDod,EAAxD,qBAAwExf,IAC9EssC,GAAoBvG,aAAe0G,aACnC,MAhByBC,EAgBO3G,EAAIrvC,KAC1B,IAAIynC,GAAc4H,EAAI9gC,QAAS,GAAIi5B,GArDvB,kBAqCvBwO,GApC6B,iBAoCcA,EAgBsChE,GAAUyC,sBAGVzC,GAAUM,cApBtG,IAAqC0D,EAyB9B,SAASC,GAAQntB,GACpB,IAAKoc,GACD,MAAM,IAAIuC,GAAc,8CAA+C,GAAID,IAE/E,IACI,OAAOxL,KAAgByZ,GAA6BI,eAAeI,QAAQntB,GAAOgtB,aAAaG,QAAQntB,GAE3G,MAAOumB,GACH5D,GAAe4D,GACf3jC,GAAW,mDAAD,OAAoDod,IAElE,OAAO,KAiCJ,IAAMotB,GAAU,CACnBjF,QACAkF,eA7EG,WACH,IAAKjR,GACD,MAAM,IAAIuC,GAAc,8CAA+C,GAAID,IAE/E,OAAOxL,IA0EP2Z,WACAM,WACAG,WApCG,SAAoBttB,GACvB,IAAKoc,GACD,MAAM,IAAIuC,GAAc,8CAA+C,GAAID,IAE/E,IACIxL,KAAgByZ,GAA6BI,eAAeO,WAAWttB,GAAOgtB,aAAaM,WAAWttB,GAE1G,MAAOumB,GACH5D,GAAe4D,GACf3jC,GAAW,yDAAD,OAA0Dod,MA4BxEutB,MAzBG,WACH,IAAKnR,GACD,MAAM,IAAIuC,GAAc,8CAA+C,GAAID,IAE/E,IACIqO,eAAeQ,QAEnB,MAAOhH,GACH5D,GAAe4D,GACf3jC,GAAW,yDAEf,IACIoqC,aAAaO,QAEjB,MAAOhH,GACH5D,GAAe4D,GACf3jC,GAAW,0D,oNCtDN4qC,I,4PAAa,UADK,KACL,YAFG,OAGhBC,GAAkBC,GACzBC,GAAoB,GACtBvR,IAAgB,EACb,SAASwR,KACZ,OAAIxR,KAGJuR,GAAiB,GAASE,GAC1BF,GAAkB,SAAWE,GAC7BF,GAAiB,GAASG,GAC1BH,GAAkB,SAAWG,GAC7BH,GAAiB,GAAoBD,GACrCC,GAAkBH,IAAiBE,GACnCC,GAAiB,GAASI,GAC1BJ,GAAkB,SAAWI,GAC7BJ,GAAiB,GAASK,GAC1BL,GAAkB,SAAWK,GAC7BL,GAAiB,GAASM,GAC1BN,GAAkB,SAAWM,GAC7BN,GAAiB,GAASO,GAC1BP,GAAkB,SAAWO,GAC7BP,GAAiB,GAASQ,GAC1BR,GAAkB,SAAWQ,GAC7BR,GAAiB,GAASS,GAC1BT,GAAkB,SAAWS,GAC7BT,GAAiB,GAASU,GAC1BV,GAAkB,SAAWU,GAC7BV,GAAiB,GAASW,GAC1BX,GAAkB,SAAWW,GAC7BX,GAAiB,GAASY,GAC1BZ,GAAkB,SAAWY,GAC7BZ,GAAiB,GAASa,GAC1Bb,GAAkB,SAAWa,GAC7Bb,GAAkB,SAAWc,GAC7Bd,GAAiB,GAASe,GAC1Bf,GAAkB,SAAWe,GAC7Bf,GAAiB,GAASgB,GAC1BhB,GAAkB,SAAWgB,GAC7BhB,GAAiB,GAASiB,GAC1BjB,GAAkB,SAAWiB,GAC7BjB,GAAiB,GAASkB,GAC1BlB,GAAkB,SAAWkB,GAC7BlB,GAAkB,SAAWkB,GAC7BlB,GAAkB,SAAWmB,GAC7BnB,GAAkB,SAAWmB,GAC7BnB,GAAkB,SAAWmB,GAqC7B1S,IAAgB,GA7ELuR,GAgFR,SAASoB,GAAkB71C,EAAQ81C,GACtC,IAAM/I,EAAW+I,GAAcC,GAAkB/1C,GAEjD,MADoB,UAAMA,EAAN,aAAiB+sC,EAAjB,UAGjB,SAASiJ,GAAoBC,GAEhC,OADeA,EAAYj2C,QAAUi2C,EAAYH,MAAQI,UAAUnJ,SAGhE,SAASoJ,GAActJ,GACrB3J,IACDwR,KAEJ,IAAM5H,EAaV,SAAyB9sC,GACrB,IAAKA,EACD,MApHqB,KAuHzB,GAAe,OAAXA,GAA4C,UAAzBA,EAAOnD,cAC1B,MAAO,KAIX,IADA,IAAMu5C,EAASp2C,EAAOu6B,OAAO/8B,MAAM,KAC1BiB,EAAI23C,EAAOz4C,OAAS,EAAGc,GAAK,IAAKA,EAAG,CACzC,IAAMgnB,EAAQ2wB,EAAO33C,GACrB,GAAqB,IAAjBgnB,EAAM9nB,OACN,OAAO8nB,EAAM2U,cAGrB,MAlIyB,KAqGVic,CAAgBxJ,GAC3BE,EAAWgJ,GAAkBlJ,GACRqB,OAAOC,KAAKsG,IACQruC,MAAK,SAAC0vC,GAAD,OAAUA,IAAS/I,OAEjEA,EAzGuB,MA6G3B,IAAM/sC,EAAM,UAAM+sC,EAAN,YAAkBD,GACxB5H,EAAWuP,GAAkBz0C,IAAWy0C,GAAkB1H,IAAawH,GAC7E,MAAO,CAAEv0C,SAAQ8sC,SAAQC,WAAU7H,YAoBvC,SAAS6Q,GAAkB/1C,GACvB,IAAKA,EACD,MArIuB,KAwI3B,IAAMo2C,EAASp2C,EAAOu6B,OAAO/8B,MAAM,KACnC,OAAI44C,EAAOz4C,OAAS,EACTy4C,EAAO,GAAGv5C,cA1IM,KC9CxB,SAAS+rC,KAYZsL,GAAQP,QAfY,iBAea2C,gBAAQ,GAGzCpC,GAAQP,QAjBY,iBAiBa4C,KAAKD,iBAAS,GAX5C,SAASE,GAASC,GACrB,IAAMC,EAAa,IAAIC,KACvBD,EAAWE,QAAQH,GACnBC,EAAWG,kBAAkB,QAAS3C,GAAQD,QAV1B,mBAWpByC,EAAWG,kBAAkB,QAAS3C,GAAQD,QAV1B,mBAWpBv3C,OAAOC,SAASm6C,OAAOJ,EAAW/M,YAQ/B,SAASgD,KACZ,OAAOuH,GAAQD,QArBK,kBAuBjB,SAAS8C,KACZ,OAAO7C,GAAQD,QAvBK,kBAyBjB,SAAS+C,GAAYvxB,GACxByuB,GAAQP,QAzBe,YAyBaluB,GAEjC,SAASwxB,KACZ,OAAO/C,GAAQD,QA5BQ,aA8BpB,SAASiD,GAAYz2C,EAAO2kB,EAAOK,GACtCyuB,GAAQP,QAjCY,iBAiCalzC,GACjCyzC,GAAQP,QAjCY,iBAiCavuB,GACjC8uB,GAAQP,QAjCe,YAiCaluB,G,sCAEjC,sBAAAvlB,EAAA,sEACUi3C,SAASC,mBADnB,oF,sBAGA,SAAeC,KAAtB,gC,sCAAO,sBAAAn3C,EAAA,sEACUi3C,SAASE,uBADnB,oF,4DAGA,sBAAAn3C,EAAA,yDAEiB,kBAAhB6vC,GAFD,0CAGQ,GAHR,iCAMQ,GANR,4C,4DASA,WAAuB/gC,EAAWsoC,EAAat3C,EAAQ+sC,EAAUwK,EAAUhmB,GAA3E,2BAAArxB,EAAA,6DACGs3C,EAAU,IAAIC,SACZC,OAAO,gBAAiB,UAAYJ,GAC5CE,EAAQE,OAAO,kBAAmB7B,GAAkB71C,EAAQ+sC,IAC5DyK,EAAQE,OAAO,oBAAqBH,GACpCC,EAAQ/wC,IAAI,eAAgB,kCACtBoZ,EAAUof,GAAS0Y,WACnBC,EAPH,WAOqBrmB,GAPrB,OAO8BxR,GAAKiB,YAPnC,wBAO8DM,IAC3D1f,EARH,UAQYie,GARZ,OAQsB+3B,GARtB,UASoBC,MAAMj2C,EAAK,CAC9B41C,QAASA,EACTM,OAAQ,OACR79B,KAAMkM,KAAKinB,UAAU,CACjBp+B,gBAbL,cASG+oC,EATH,QAgBUjzC,QAAU,KAhBpB,kCAiB8BizC,EAASC,OAjBvC,cAiBOC,EAjBP,OAkBSx4B,EAAUw4B,EAAVx4B,MACF,IAAIy4B,MAAe,OAALz4B,QAAK,IAALA,OAAA,EAAAA,EAAO04B,UAAW,6BAAkC,OAAL14B,QAAK,IAALA,OAAA,EAAAA,EAAO24B,OAAQL,EAASM,YAnB5F,6C,sBAsBP,IChEIre,GACAwR,GACA8M,GD2EWC,GAbK,CAChB3P,cACA4N,YACA7J,YACAoK,YACAC,eACAC,eACAC,eACAE,iBA7CG,WAAP,iCA8CIC,wBACAmB,QAhCG,SAAP,8CAiCIC,cA1CG,WAAP,kCCvCMC,GAAgBzZ,GAAS0Z,aAEzBC,GAAoB,UAAMF,GAAN,YADA,gBACA,KAGtBxV,IAAgB,EAIb,SAAS+L,KACZ,IAAK/L,GAAe,CAChBlJ,GAAcka,GAAQC,iBACtBzqC,GAAW,+BAAD,OAAgCswB,KAC1C,IAAM6e,EAAgB,CAClBC,KAAM,CACFC,SAAU9Z,GAAS+Z,eACnBC,UAAWL,GACXM,mBAAmB,EACnBC,2BAA2B,EAC3BC,YAAY,WAAD,OAAa18C,OAAOC,SAASswC,MAA7B,OAAoC7O,GAAOc,cACtDma,sBAAsB,WAAD,OAAa38C,OAAOC,SAASswC,MAA7B,OAAoC7O,GAAOE,YAEpEgb,MAAO,CACHC,cAAevf,GACfwf,uBAAwC,SAAhBzJ,IAA0C,OAAhBA,MAG1DvE,GAAU,IAAIiO,KAAqBZ,IAC3Ba,wBAAuB,SAACC,EAAWC,GACvC,IAAMC,EAA0BC,KAC1BH,GACFrB,GAAoBqB,EACpBjwC,GAAW,8DAAD,OAA+Dyc,KAAKinB,UAAUkL,IAA9E,uCAA+HuB,MAIzIE,KACArwC,GAAW,sGAAD,OAAuGmwC,QAGzH3W,IAAgB,GAGxB,SAAS8W,GAAiBL,GACtB,IAAIM,EAAYN,GAAaA,EAAUM,UACjCN,EAAUM,UAAUp9C,cACpBkjC,GASN,OANIka,IAAcla,IACd4Z,GACAA,EAAUptC,SACVotC,EAAUptC,QAAQguB,OAAO19B,gBArDA,8CAqD2CA,gBACpEo9C,EAAYla,IAETka,EAEJ,SAASC,KAERhX,IAAiBsI,GAAQ2O,YACzB3O,GAAQ2O,aAIN3O,IAAWA,GAAQ4O,UACrB5O,GAAQ4O,QAAU,MAEtB,IAAMC,EAAWC,KACXC,EAAWC,KACXjD,EAAWN,KACjB/C,GAAQG,QAEFgG,GAAcE,GAAchD,GAC9BL,GAAYmD,EAAUE,EAAUhD,GAGjC,SAASkD,GAAmBnD,GAC3BpU,IAAiBsI,GAAQiP,oBACzBjP,GAAQiP,mBAAmBnD,GAGnC,SAASoD,GAAa9X,GAClBsR,GAAQP,QA/EgB,aA+Ea/Q,GAEzC,SAAS+X,KACLzG,GAAQP,QAjFoB,yBAiFa,QAE7C,SAASoG,KACL7F,GAAQE,WApFoB,0BAsFhC,SAAS0F,KAEL,QADc5F,GAAQD,QAvFM,0BA0FzB,SAAS2G,KAEZ,IAAMf,EAA0BC,KAC1BH,EAAYrB,GAGlB,OAFAA,QAAoBj1C,EACpB02C,KACMJ,EAGK,CACHM,UAHcD,GAAiBL,GAI/BptC,QAHYotC,EAAUkB,cAAgBlB,EAAUptC,SAAW,uCAM/DstC,EACO,CACHI,UAAWla,GACXxzB,QAAS,4GAHjB,EAQG,SAAS+0B,KACZ,IAAK4B,GACD,MAAM,IAAIuC,GAAc,6DAA8D,GAAID,IAG9F,OADkB0O,GAAQD,QArHF,cAwHrB,SAAe6G,GAAtB,mC,sCAAO,WAA2B3tC,GAA3B,eAAAjN,EAAA,yDACEgjC,GADF,sBAEO,IAAIuC,GAAc,6DAA8D,GAAID,IAF3F,UAIG4U,EAAU5O,GAAQuP,aAJrB,yCAMQ,CACHC,iBAAiB,EACjBf,UAAWla,KARhB,WAWG5yB,EAXH,oBAYaitC,EAAQa,cAAR,MACA9tC,EAbb,wBAcK+sC,KAdL,kBAeY,CACHc,iBAAiB,EACjBf,UAAWla,KAjBpB,iCAqBI,CACHib,iBAAiB,EACjBZ,YAvBD,6C,sBA0BA,SAASc,GAActY,EAAWz1B,EAAUguC,GAA+B,IAApBC,IAAmB,yDAC7E,IAAKlY,GACD,MAAM,IAAIuC,GAAc,6DAA8D,GAAID,IAE9F0U,KACItX,GACA8X,GAAa9X,GAEjB,IAAMqW,EAAc9rC,EAAF,UAAgBurC,GAAhB,YAAiCvrC,EAAjC,KAA+CyrC,GAC3DyC,EAAU,CACZC,OAAO,KAAKpb,IACZqb,OAAQH,EAAa,sBAAmB/3C,EACxC41C,YACAkC,aAEJ3P,GAAQ0P,cAAcG,GAEnB,SAASG,GAAWruC,EAAUguC,GAA+B,IAApBC,IAAmB,yDAC/D,IAAKlY,GACD,MAAM,IAAIuC,GAAc,6DAA8D,GAAID,IAE9F0U,KACA,IAAMjB,EAAc9rC,EAAF,UAAgBurC,GAAhB,YAAiCvrC,EAAjC,KAA+CyrC,GAC3DyC,EAAU,CACZC,OAAO,KAAKpb,IACZqb,OAAQH,EAAa,sBAAmB/3C,EACxC41C,YACAkC,aAEEM,EAASjQ,GAAQgQ,WAAWH,GAClC,OAAOI,EAEJ,SAASC,KACZ,IAAKxY,GACD,MAAM,IAAIuC,GAAc,6DAA8D,GAAID,IAE9F0U,KACA1O,GAAQmQ,SAEL,SAAeC,GAAtB,uC,sCAAO,WAA8BN,EAAQnuC,EAAUy1B,GAAhD,+EAAA1iC,EAAA,yDAA2D27C,EAA3D,gCACE3Y,GADF,sBAEO,IAAIuC,GAAc,6DAA8D,GAAID,IAF3F,cAIGsW,EAAgBxF,eAChB2C,EALH,UAKkBP,GALlB,YAKmCvrC,EALnC,KAMGitC,EAAU5O,GAAQuP,aAClBM,EAAU,CACZC,OAAO,KAAKA,GACZrC,YACAmB,UACA0B,iBAGEtnC,GAAY,IAAI+X,MAAOwvB,UAd1B,mBAgBsBvQ,GAAQwQ,mBAAmBX,GAhBjD,WAgBOI,EAhBP,OAiBOhnC,GAAU,IAAI8X,MAAOwvB,UACrB9uB,EAAWxY,EAAUD,EAEtBinC,GAAWA,EAAOnE,YApBxB,wBAqBKzI,GAAgBiN,EAAe,IAAK,8BAA+B7uB,GAAU,GArBlF,kBAsBY,CACHgvB,eAAe,EACfhC,UAAWla,KAxBpB,eA6BSuX,EAA2BmE,EAA3BnE,YAA2BmE,EAAdS,WAEjBrN,GAAgBiN,EAAe,IAAK,8BAA+B7uB,GAAU,GA/BlF,kBAiCQ,CACHqqB,cACA2E,eAAe,IAnCpB,kCAuCOxnC,GAAU,IAAI8X,MAAOwvB,UACrB9uB,EAAWxY,EAAUD,EACrBmlC,EAzCP,KA0COM,EAAYD,GAAiBL,GA1CpC,KA4CSM,EA5CT,cA6CUla,IA7CV,OA8CUA,IA9CV,OA+CUA,IA/CV,OAgDUA,GAhDV,UAmDUA,GAnDV,2BAiDS8O,GAAgBiN,EAAe,IAAK,8BAA+B7uB,GAAU,GAjDtF,oCAoDS4hB,GAAgBiN,EAAe,IAAK,8BAA+B7uB,GAAU,GApDtF,oCAuDS4hB,GAAgBiN,EAAe,IAAK,8BAA+B7uB,GAAU,GAvDtF,iCA2DK2V,IAAaiZ,EA3DlB,iBA4DWrnC,GAAY,IAAI+X,MAAOwvB,UA5DlC,KA6Da9B,EA7Db,cA8Dcla,GA9Dd,UAqEcA,IArEd,OAsEcA,GAtEd,UAmGcA,GAnGd,oBAkEkB8b,GACDlB,KAnEjB,YAuEiB/X,EAvEjB,wBAwEiB8X,GAAa9X,GACb4I,GAAQ2Q,qBAAqBd,GAzE9C,kBA0EwB,CACHY,eAAe,IA3EpC,mCAgF0CzQ,GAAQ4Q,kBAAkBf,GAhFpE,eAgF2BI,EAhF3B,OAiF2BhnC,GAAU,IAAI8X,MAAOwvB,UACrB9uB,EAAWxY,EAAUD,EACnB8iC,EAAgBmE,EAAhBnE,YACRzI,GAAgBiN,EAAe,IAAK,mCAAoC7uB,GAAU,GApFvG,kBAqF4B,CACHqqB,cACA2E,eAAe,IAvFxC,0CA2F2BtC,EA3F3B,KA4F2BM,EAAYD,GAAiBL,GA5FxD,kBA6F4B,CACHsC,eAAe,EACfhC,cA/FzB,YAoGiBrX,EApGjB,wBAqGiBsY,GAActY,GArG/B,kBAsGwB,CACHqZ,eAAe,IAvGpC,mCA4G0CT,KA5G1C,eA4G2BC,EA5G3B,OA6G2BhnC,GAAU,IAAI8X,MAAOwvB,UACrB9uB,EAAWxY,EAAUD,EACnB8iC,EAAgBmE,EAAhBnE,YACRzI,GAAgBiN,EAAe,IAAK,mCAAoC7uB,GAAU,GAhHvG,kBAiH4B,CACHqqB,cACA2E,eAAe,IAnHxC,0CAuH2BtC,EAvH3B,KAwH2BM,EAAYD,GAAiBL,GAxHxD,kBAyH4B,CACHsC,eAAe,EACfhC,cA3HzB,qEAmIQ,CACHgC,eAAe,EACfhC,cArIL,2E,sBAyIA,SAASoC,KAIZ,GAAI3/C,OAAOuB,SAAWvB,OAClB,IACI,OAAOA,OAAOuB,OAAOtB,SAASC,WAAaF,OAAOC,SAASC,SAE/D,MAAOywC,GAEH,OAAO,EAGf,OAAO,EAEJ,SAASiP,KAIZ,GAAO5/C,OAAO6/C,QAAU7/C,OAAO6/C,SAAW7/C,OACtC,IAEI,OAAMA,OAAO6/C,OAAO5/C,SAASia,QAA4C,gBAAlCla,OAAO6/C,OAAO5/C,SAAS6/C,OAOlE,MAAOnP,GAEH,OAAO,EAGf,OAAO,EAEX,IC7WMoP,GAAe,SAACC,GAElB,OADeC,SAAOC,OAAOF,IAG3BG,GAAe,SAACH,GAElB,OADeC,SAAOG,OAAOJ,IAIjCK,IAAYN,aAAeA,GAC3BM,IAAYF,aAAeA,GAQ3BG,IAAYC,UAAYX,GAKjB,IAAMY,GAAuB,+BAAG,WAAOC,EAAmBC,EAAkBtB,GAA5C,eAAA57C,EAAA,+EAGdi9C,EAAkBE,sBAAsBD,EAAkBtB,GAH5C,OAG/BwB,EAH+B,uDAM/BA,EAAW,CACPC,sBAAsB,GAAD,OAAKJ,EAAkBK,mBAAvB,yBACrBC,mBAAmB,GAAD,OAAKN,EAAkBK,mBAAvB,sBAClBE,OAAQP,EAAkBK,mBAAmBv4C,QAAQ,oBAAsB,EAAnE,UACCg6B,GAAS0Z,aADV,8BAECwE,EAAkBK,mBAFnB,SAIZ9zC,GAAW,iEAAD,OAAkEyc,KAAKinB,UAAUkQ,KAb5D,eAenCK,IAAiBC,YAAYn3C,IAAI02C,EAAkBK,mBAAoBF,GACvEH,EAAkBU,wBAA0BP,EAhBT,kBAiB5BA,GAjB4B,yDAAH,0DAmBpCK,IAAiBT,wBAA0BA,GACpC,I,yjBCjDA,IAgBQY,GAhBf,kCACI,WAAY9P,GAAQ,gCACVA,GAFd,uDAIsBr5B,EAAOopC,GACrB1gD,KAAK2wC,MAAMgQ,kBAAkBrpC,KALrC,+BAQQ,OAAItX,KAAK2wC,MAAMiQ,SACJ,iCAGA5gD,KAAK2wC,MAAMkQ,aAZ9B,GAAmC12C,aCDtB22C,GAAmB,CAC5BC,WAAY,aACZC,qBAAsB,uBACtBC,mBAAoB,qBACpBC,iBAAkB,mBAClBC,qBAAsB,uBACtBC,+BAAgC,iCAChCC,6BAA8B,+BAC9BC,2BAA4B,6BAC5BC,mBAAoB,qBACpBC,6BAA8B,+BAC9BC,2BAA4B,6BAC5BC,yBAA0B,2BAC1BC,mBAAoB,qBACpBC,6BAA8B,+BAC9BC,2BAA4B,6BAC5BC,yBAA0B,2BAC1BC,SAAU,WACVC,WAAY,aACZC,aAAc,eACdC,UAAW,YACXC,aAAc,eACdC,YAAa,cACbC,qBAAsB,uBACtBC,6BAA8B,+BAC9BC,2BAA4B,6BAC5BC,eAAgB,iBAChBC,gBAAiB,kBACjBC,kBAAmB,oBACnBC,aAAc,eACdC,qBAAsB,uBACtBC,mBAAoB,qBACpBC,uBAAwB,yBACxBC,qBAAsB,uBACtBC,cAAe,iBChCNC,GAAa,eAACrG,EAAD,uDAAajK,GAAUM,aAAc37B,EAArC,6CAAgD,CACtE5W,KAAMogD,GAAiBsB,YACvBxF,YACAtlC,UAES4rC,GAAkB,iBAAO,CAClCxiD,KAAMogD,GAAiB4B,oBAEdnX,GAAa,eAAC4X,EAAD,8DAAwC,CAC9DziD,KAAMogD,GAAiBC,WACvBoC,8BAESC,GAAsB,iBAAO,CACtC1iD,KAAMogD,GAAiBE,uBAEdqC,GAAoB,iBAAO,CACpC3iD,KAAMogD,GAAiBG,qBAEdqC,GAAkB,SAAChsC,GAAD,MAAY,CACvC5W,KAAMogD,GAAiBI,iBACvB5pC,UAESisC,GAAsB,iBAAO,CACtC7iD,KAAMogD,GAAiBK,uBAEdqC,GAA+B,iBAAO,CAC/C9iD,KAAMogD,GAAiBM,iCAEdqC,GAA6B,iBAAO,CAC7C/iD,KAAMogD,GAAiBO,+BAEdqC,GAA2B,SAACpsC,GAAD,MAAY,CAChD5W,KAAMogD,GAAiBQ,2BACvBhqC,UAESqsC,GAAoB,iBAAO,CACpCjjD,KAAMogD,GAAiBS,qBAEdqC,GAA6B,iBAAO,CAC7CljD,KAAMogD,GAAiBU,+BAEdqC,GAA2B,iBAAO,CAC3CnjD,KAAMogD,GAAiBW,6BAEdqC,GAAyB,SAACxsC,GAAD,MAAY,CAC9C5W,KAAMogD,GAAiBY,yBACvBpqC,UAESysC,GAAmB,SAACxiD,GAAD,MAAY,CACxCb,KAAMogD,GAAiBa,mBACvBpgD,UAESyiD,GAA4B,iBAAO,CAC5CtjD,KAAMogD,GAAiBc,+BAEdqC,GAA0B,iBAAO,CAC1CvjD,KAAMogD,GAAiBe,6BAEdqC,GAAwB,SAAC5sC,GAAD,MAAY,CAC7C5W,KAAMogD,GAAiBgB,yBACvBxqC,UAESiiC,GAAU,SAAC3J,GAAD,MAAW,CAC9BlvC,KAAMogD,GAAiBiB,SACvBnS,SAESuU,GAAY,SAACxhD,GAAD,MAAa,CAClCjC,KAAMogD,GAAiBkB,WACvBr/C,WAESyhD,GAAc,SAACzU,GAAD,MAAe,CACtCjvC,KAAMogD,GAAiBmB,aACvBtS,aAES0U,GAAW,SAACC,GAAD,MAAY,CAChC5jD,KAAMogD,GAAiBoB,UACvBoC,UAESC,GAAc,SAAC1U,GAAD,MAAe,CACtCnvC,KAAMogD,GAAiBqB,aACvBtS,aAES2U,GAAqB,iBAAO,CACrC9jD,KAAMogD,GAAiBuB,uBAEdoC,GAA4B,iBAAO,CAC5C/jD,KAAMogD,GAAiBwB,+BAEdoC,GAA0B,iBAAO,CAC1ChkD,KAAMogD,GAAiByB,6BAEdoC,GAAgB,SAACxmB,GAAD,MAAc,CACvCz9B,KAAMogD,GAAiB0B,eACvBrkB,YAESymB,GAAuB,iBAAO,CACvClkD,KAAMogD,GAAiBgC,yBAEd+B,GAAqB,iBAAO,CACrCnkD,KAAMogD,GAAiBiC,uBAEd+B,GAAiB,SAAC3mB,GAAD,MAAc,CACxCz9B,KAAMogD,GAAiB2B,gBACvBtkB,YAES4mB,GAAc,iBAAO,CAC9BrkD,KAAMogD,GAAiB6B,eAEdqC,GAAqB,SAAC7F,GAAD,MAAa,CAC3Cz+C,KAAMogD,GAAiB8B,qBACvBzD,WAEStC,GAAmB,iBAAO,CACnCn8C,KAAMogD,GAAiB+B,qBAEdoC,GAAe,SAACn1C,EAAUo1C,GAAX,MAA2B,CACnDxkD,KAAMogD,GAAiBkC,cACvBlzC,WACAo1C,e,kbCnHEC,G,kCACF,WAAYxU,GAAQ,IAAD,uBACf,cAAMA,IACDgQ,kBAAoB,EAAKA,kBAAkByE,KAAvB,SAFV,E,uDAID9tC,GACdtX,KAAK2wC,MAAMsS,WAAWtQ,GAAUM,aAAc37B,K,+BAExC,IAAD,EAC0BtX,KAAK2wC,MAA5BiQ,EADH,EACGA,SAAUC,EADb,EACaA,SAClB,OAAQ,gBAAC,GAAD,CAAeD,SAAUA,EAAUD,kBAAmB3gD,KAAK2gD,mBAC1DE,O,GAX4B12C,aAuBvCk7C,GAAqB,CACvBpC,eAGWqC,GADuBC,oBAXd,SAACniD,GAIrB,MAAO,CACHw9C,cAFgC56C,IAFhB5C,EAAMM,IAAI,eACKA,IAAI,qBASoB2hD,GAAzBE,CAA6CJ,I,kqBC7BnF,IAAMK,GAA4B,CAC9BC,gBAAiB,UACjBC,MAAO,MACPC,OAAQ,OACRC,OAAQ,sBAECC,GAAqB,CAC9BC,yBAA0B,UAC1BC,eAAgB,CACZC,SAAU,OACVC,WAAY,OACZC,WAAY,IACZP,OAAQ,OACRQ,MAAO,UACPP,OAAQ,qBAEZQ,oBAAqB,CACjBR,OAAQ,qBAEZS,oBAAqB,CACjBL,SAAU,OACVC,WAAY,OACZC,WAAY,IACZN,OAAQ,oBACRO,MAAO,WAEXG,YAAa,CACTC,KAAM,CACFC,UAAW,GACX,iCAAkC,CAAEC,YAAa,YAErDC,OAAQ,CACJF,UAAW,GAEfG,kBAAmB,CACfrtC,QAAS,OACTstC,cAAe,SACfC,SAAU,SACVC,WAAY,EACZC,SAAU,EACVC,UAAW,UAEfC,QAAS,CACL3tC,QAAS,OACTstC,cAAe,SACfC,SAAU,SACVC,WAAY,EACZC,SAAU,EACVC,UAAW,OACXE,WAAY,IAEhBC,OAAQ,CACJC,UAAW,qBAEfC,YAAa,CACTC,YAAa,KAGrBC,2BAA4B,CACxBC,KAAM,CACF9B,MAAO,OACP+B,QAAS,IACT7B,OAAQ,IACR8B,OAAQ,KAEZC,YAAa,CACTxB,MAAO,UACPV,gBAAiB,WAErBmC,YAAa,CACTnC,gBAAiB,sBAErBoC,YAAa,CACT1B,MAAO,aAEX2B,MAAO,CACHC,WAAY,WAGpBC,wBAAyB,CACrBR,KAAM,CACFS,aAAc,oBACdtC,OAAQ,GACR,sBAAuB,CAAEA,OAAQ,IACjC,yBAAyB,SAClBH,IADP,IAEIC,gBAAiB,cAI7ByC,0BAA2B,CACvBV,KAAM,CACF/B,gBAAiB,UACjBwC,aAAc,oBACdtC,OAAQ,GACRwC,OAAQ,CAAE1C,gBAAiB,WAC3B,eAAgB,CAAEA,gBAAiB,WACnC,gBAAiB,CAAEA,gBAAiB,WACpC,yBAAyB,SAClBD,IADP,IAEIC,gBAAiB,cAI7B2C,gBAAiB,CACbZ,KAAM,CACF7B,OAAQ,GACRa,UAAW,GACX6B,WAAY,GACZC,YAAa,GACb,WAAY,CAAEnC,MAAO,WACrB,qBAAsB,CAAEA,MAAO,aAGvCoC,yBAA0B,CACtBC,OAAQ,CACJ/C,gBAAiB,YAGzBgD,sBAAuB,CACnBjB,KAAM,CACFkB,SAAU,OACVC,SAAU,OACVC,UAAW,OACXC,UAAW,OACXC,aAAc,MACdlD,OAAQ,MACR6B,QAAS,MACThC,gBAAiB,UACjBiC,OAAQ,QAEZC,YAAa,CACTlC,gBAAiB,sBAErBqC,MAAO,CACH5B,WAAY,KAEhB6C,YAAa,CACTtD,gBAAiB,UACjBU,MAAO,SAEX6C,mBAAoB,CAChBvD,gBAAiB,mBACjBU,MAAO,UAGf8C,wBAAyB,CACrBzB,KAAM,CACF,uBAAwB,CAAE7B,OAAQ,QAClC,sBAAuB,CAAEA,OAAQ,QACjC,UAAW,CACPuD,gBAAiB,UAI7BC,iBAAkB,CACd3B,KAAM,CACF,WAAY,CAAErB,MAAO,aAG7BiD,iBAAkB,CACd5B,KAAM,CACF7B,OAAQ,OACRD,MAAO,OACPD,gBAAiB,UACjBU,MAAO,UACPP,OAAQ,UACR6B,QAAS,YAGjB4B,uBAAwB,CACpB7B,KAAM,CACF7B,OAAQ,OACRD,MAAO,OACPD,gBAAiB,UACjBU,MAAO,UACPuB,OAAQ,MACRoB,aAAc,OAElBQ,KAAM,CACFnD,MAAO,WAEXoD,YAAa,CACTpD,MAAO,WAEX0B,YAAa,CACT1B,MAAO,WAEXwB,YAAa,CACTlC,gBAAiB,UACjBU,MAAO,WAEXyB,YAAa,CACTnC,gBAAiB,UACjBU,MAAO,WAEXqD,aAAc,CACV/D,gBAAiB,UACjBU,MAAO,aAINsD,GAAmBC,iBAAM,GAAI7D,GAAoB,CAC1D8D,0BAA2B,UAC3BC,uBAAwB,UACxB9D,yBAA0B,UAC1BC,eAAgB,CACZC,SAAU,OACVC,WAAY,OACZL,OAAQ,qBAEZS,oBAAqB,CACjBL,SAAU,OACVC,WAAY,OACZL,OAAQ,qBAEZU,YAAa,CACTC,KAAM,CACFC,UAAW,EACX,iCAAkC,CAAEC,YAAa,aAGzDuB,wBAAyB,CACrBR,KAAM,CACF/B,gBAAiB,UACjBwC,aAAc,oBACdtC,OAAQ,GACR,sBAAuB,CAAEA,OAAQ,KAErCkE,WAAY,CACR1B,OAAQ,CAAE1C,gBAAiB,WAC3B,eAAgB,CAAEA,gBAAiB,WACnC,gBAAiB,CAAEA,gBAAiB,WACpC,yBAA0B,CACtBA,gBAAiB,UACjBG,OAAQ,uBAGhBkE,aAAc,CACV3B,OAAQ,CACJ1C,gBAAiB,UACjBwC,aAAc,yBAElB,eAAgB,CACZxC,gBAAiB,UACjBwC,aAAc,qCAElB,kBAAmB,CACfA,aAAc,oBACd,mBAAoB,CAChB9B,MAAO,UACPD,WAAY,QAK5BgC,0BAA2B,CACvBV,KAAM,CACF/B,gBAAiB,UACjBwC,aAAc,oBACdtC,OAAQ,GACR,aAAc,CAAEF,gBAAiB,WACjC,mBAAoB,CAAEA,gBAAiB,WACvC,oBAAqB,CAAEA,gBAAiB,WACxC,WAAY,CAAEU,MAAO,WACrB,yBAA0B,CACtBV,gBAAiB,UACjBG,OAAQ,wBAIpBmE,oBAAqB,CACjBvC,KAAM,CACF/B,gBAAiB,UACjB,+BAAgC,CAAEA,gBAAiB,aAG3DuE,iBAAkB,CACdxC,KAAM,CACF/B,gBAAiB,UACjB,UAAW,CAAEA,gBAAiB,aAGtC8C,yBAA0B,CACtB0B,OAAQ,CACJxE,gBAAiB,WAErB+C,OAAQ,CACJ/C,gBAAiB,YAGzBgD,sBAAuB,CACnBM,YAAa,CACTtD,gBAAiB,WAErBuD,mBAAoB,CAChBvD,gBAAiB,YAGzBwD,wBAAyB,CACrBzB,KAAM,CACF,uBAAwB,CAAE7B,OAAQ,OAAQc,YAAa,WACvD,sBAAuB,CAAEd,OAAQ,OAAQF,gBAAiB,WAC1D,wBAAyB,CACrBwC,aAAc,uBAI1BkB,iBAAkB,CACd3B,KAAM,CACF,WAAY,CAAErB,MAAO,WACrB,iBAAkB,CAAEA,MAAO,aAGnC+D,wBAAyB,CACrB1C,KAAM,CACF/B,gBAAiB,UACjBwC,aAAc,oBACdtC,OAAQ,IAEZkE,WAAY,CACR1B,OAAQ,CAAE1C,gBAAiB,WAC3B,eAAgB,CAAEA,gBAAiB,WACnC,gBAAiB,CAAEA,gBAAiB,eAInC0E,GAAuBT,iBAAM,GAAI7D,GAAoB,CAC9DuD,iBAAkB,CACd5B,KAAM,CACF7B,OAAQ,OACRF,gBAAiB2E,KAAcC,OAC/BlE,MAAO,YAGfkD,uBAAwB,CACpB7B,KAAM,CACF7B,OAAQ,OACRF,gBAAiB2E,KAAcC,OAC/BlE,MAAO,WAEXmD,KAAM,CACFnD,MAAO,WAEXoD,YAAa,CACTpD,MAAO,WAEX0B,YAAa,CACT1B,MAAO,WAEXwB,YAAa,CACTlC,gBAAiB2E,KAAcE,OAC/BnE,MAAO,WAEXyB,YAAa,CACTnC,gBAAiB2E,KAAcG,OAC/BpE,MAAO,WAEXqD,aAAc,CACV/D,gBAAiB2E,KAAcG,OAC/BpE,MAAO,cAINqE,GAAoBd,iBAAM,GAAIS,GAAsB,CAC7DP,uBAAwB,UACxB9D,yBAA0B,UAC1BC,eAAgB,CACZC,SAAU,OACVC,WAAY,OACZL,OAAQ,qBAEZS,oBAAqB,CACjBL,SAAU,OACVC,WAAY,OACZL,OAAQ,qBAEZoC,wBAAyB,CACrBR,KAAM,CACFS,aAAc,oBACdtC,OAAQ,GACR,sBAAuB,CAAEA,OAAQ,KAErCkE,WAAY,CACR,yBAA0B,CACtBpE,gBAAiB,UACjBG,OAAQ,uBAGhBkE,aAAc,CACV3B,OAAQ,CACJF,aAAc,yBAElB,eAAgB,CACZA,aAAc,qCAElB,kBAAmB,CACfA,aAAc,oBACd,mBAAoB,CAChB9B,MAAO,UACPD,WAAY,QAK5BgC,0BAA2B,CACvBV,KAAM,CACF7B,OAAQ,KAGhB8C,sBAAuB,CACnBM,YAAa,CACTtD,gBAAiB,WAErBuD,mBAAoB,CAChBvD,gBAAiB,YAGzB0D,iBAAkB,CACd3B,KAAM,CACF,WAAY,CAAErB,MAAO,WACrB,iBAAkB,CAAEA,MAAO,aAGnCG,YAAa,CACTC,KAAM,CACFC,UAAW,GACX,iCAAkC,CAAEC,YAAa,aAGzDyD,wBAAyB,CACrB1C,KAAM,CACFS,aAAc,oBACdtC,OAAQ,O,qkBCjbpB,IAAI8E,QAAezkD,EAEZ,SAAS0kD,GAAgBpG,GAC5B,IAAMqG,EAAcC,eACpBH,GAAY,SAAQE,GAAgBrG,GAGjC,SAASuG,KAIZ,OAHKJ,IACDC,GAAgB7E,IAEb4E,G,WCyBIK,GAhCgB,SAACna,GAAW,IAAD,IAC9Boa,EAA0Hpa,EAA1Hoa,MAAO77C,EAAmHyhC,EAAnHzhC,QAAS87C,EAA0Gra,EAA1Gqa,eAAgBC,EAA0Fta,EAA1Fsa,WAAYC,EAA8Eva,EAA9Eua,eAAgBC,EAA8Dxa,EAA9Dwa,UAAWC,EAAmDza,EAAnDya,OAAQC,EAA2C1a,EAA3C0a,cAAeC,EAA4B3a,EAA5B2a,uBAC9F1B,EAA2BiB,KAA3BjB,uBACF2B,EAActiD,KAAEygD,MAAM,GAAI,CAAElC,KAAM,CAAE/B,gBAAiBmE,IAA4BwB,GACvF,OAAQ,gBAACI,GAAA,EAAD,CAAOC,cAAc,SAASC,gBAAgB,SAAS3S,OAAQ,CAAE4S,YAAa,QAAUP,OAAQG,EAAaK,MAAI,EAACC,cAAY,GAC9H,uBAAK5rD,GAAG,+BACJ,gBAACurD,GAAA,EAAMM,KAAP,KACI,gBAACC,GAAA,EAAD,CAAMC,SAAUjB,EAAOj9C,UAAU,0BAA0Bs9C,OAAQ,CAC/E5D,KAAM,CACFyE,UAAW,CACPC,IAAK,CAAEvG,OAAM,iBAAEwF,QAAF,IAAEA,OAAF,EAAEA,EAAWxF,cAAb,QAAuB,IAAKD,MAAK,iBAAEyF,QAAF,IAAEA,OAAF,EAAEA,EAAWzF,aAAb,QAAsB,UAIhE,uBAAK53C,UAAU,wEACVoB,IAGT,gBAACs8C,GAAA,EAAMM,KAAP,CAAYV,OAAQ,CAAE5D,KAAM,CAAEmB,SAAU2C,KACnCN,GAAkB,uBAAKl9C,UAAU,4CAA4Ck9C,IAElF,gBAACQ,GAAA,EAAMM,KAAP,KACKb,GAAcC,GAAmB,gBAAC,KAAD,CAAMiB,GAAIjB,EAAgBp9C,UAAU,2BAC9D,gBAACs+C,GAAA,EAAD,CAAe1iD,KAAMuhD,EAAYoB,QAAShB,MAGtD,gBAACG,GAAA,EAAMM,KAAP,CAAYV,OAAQ,CAAE5D,KAAM,CAAEhB,UAAW,UACpCyE,GAAcI,GAAiB,gBAACe,GAAA,EAAD,CAAe1iD,KAAMuhD,EAAYoB,QAAShB,QChCjFiB,GAAiB/wB,aAAe,CACzCgxB,iBAAiB,CAAD,gDAKhBC,UAAU,CAAD,yCAKTC,UAAU,CAAD,yCAKTC,YAAY,CAAD,2CAKXC,YAAY,CAAD,uDAKXC,KAAK,CAAD,2CAKJC,OAAO,CAAD,+CAKNC,KAAK,CAAD,2CAKJC,OAAO,CAAD,+CAKNC,KAAK,CAAD,2CAKJC,OAAO,CAAD,+CAKNprC,gBAAgB,CAAD,oEAKfqrC,SAAS,CAAD,mDAKRtrC,MAAM,CAAD,6CAKL2vB,OAAO,CAAD,+CAKN4b,MAAM,CAAD,6CAKLC,SAAS,CAAD,mDAKRC,GAAG,CAAD,uCAKFC,IAAI,CAAD,yCAKHC,GAAG,CAAD,uCAKFC,OAAO,CAAD,kDAKNC,KAAK,CAAD,2CAKJC,IAAI,CAAD,yCAKHC,KAAK,CAAD,2CAKJC,QAAQ,CAAD,iDAKPC,MAAM,CAAD,+CAKLzuC,MAAM,CAAD,6CAKLE,KAAK,CAAD,2CAKJI,SAAS,CAAD,mDAKRF,QAAQ,CAAD,iDAKPsuC,WAAW,CAAD,qDAKVC,KAAK,CAAD,2CAKJC,MAAM,CAAD,6CAKLC,OAAO,CAAD,+CAKNC,YAAY,CAAD,4DAKXC,iBAAiB,CAAD,uEAKhBC,aAAa,CAAD,yDAKZC,eAAe,CAAD,uEAKdC,sBAAsB,CAAD,mEAKrBC,mBAAmB,CAAD,6DAKlBC,aAAa,CAAD,+CAKZC,UAAU,CAAD,2CAKTC,iBAAiB,CAAD,mDAKhBC,kBAAkB,CAAD,gEAKjBC,gBAAgB,CAAD,uOAKfC,4BAA4B,CAAD,gFAK3BC,yBAAyB,CAAD,qEAKxBC,0BAA0B,CAAD,uEAKzBC,cAAc,CAAD,oDAKbC,cAAc,CAAD,oDAKbC,aAAa,CAAD,kDAKZC,cAAc,CAAD,oDAKbC,aAAa,CAAD,kDAKZC,cAAc,CAAD,oDAKbC,YAAY,CAAD,gDAKXC,aAAa,CAAD,kDAKZC,uBAAuB,CAAD,uEAKtBC,eAAe,CAAD,sDAKdC,iBAAiB,CAAD,0DAKhBC,WAAW,CAAD,qEAKVC,WAAW,CAAD,6EAKVC,sBAAsB,CAAD,4EAKrBC,sBAAsB,CAAD,4EAKrBC,gBAAgB,CAAD,8DAKfC,mBAAmB,CAAD,+EAKlBC,oBAAoB,CAAD,kEAKnBC,SAAS,CAAD,qDAKRC,SAAS,CAAD,qDAKRC,SAAS,CAAD,qDAKRC,SAAS,CAAD,qDAKRC,kBAAkB,CAAD,wEAKjBC,gBAAgB,CAAD,oEAKfC,uBAAuB,CAAD,gEAKtBC,kBAAkB,CAAD,yDAKjBC,yBAAyB,CAAD,2EAKxBC,kBAAkB,CAAD,yDAKjBC,yBAAyB,CAAD,2EAKxBC,MAAM,CAAD,6CAKLjxC,cAAc,CAAD,+DAKbkxC,KAAK,CAAD,iCAKJC,SAAS,CAAD,mDAKRC,KAAK,CAAD,2CAKJC,mCAAmC,CAAD,2SAKlCC,YAAY,CAAD,gDAKXC,kBAAkB,CAAD,yEAKjBC,iBAAiB,CAAD,6DAKhBC,aAAa,CAAD,qMAKZC,oBAAoB,CAAD,wKAKnBC,2BAA2B,CAAD,qWAK1BC,mBAAmB,CAAD,iLAKlBC,0BAA0B,CAAD,qOAKzBC,gBAAgB,CAAD,2EAKfC,mBAAmB,CAAD,sEAKlBC,mBAAmB,CAAD,sEAKlBC,2BAA2B,CAAD,oGAK1BC,kBAAkB,CAAD,+GAKjBC,eAAe,CAAD,mFAKdC,KAAK,CAAD,yCAKJC,0BAA0B,CAAD,8HAKzBC,qBAAqB,CAAD,8EAKpBC,kBAAkB,CAAD,kDAKjBC,MAAM,CAAD,6CAKLC,aAAa,CAAD,uDAKZC,YAAY,CAAD,0DAKXC,YAAY,CAAD,gDAKXC,WAAW,CAAD,8CAKVC,YAAY,CAAD,2CAKXC,eAAe,CAAD,mDAKdC,mBAAmB,CAAD,oDAKlBC,SAAS,CAAD,2CAMGtG,M,kbCliBTuG,G,yIACQ,IAEF9H,EAGA77C,EAIAo8C,EATC,SAC8EtrD,KAAK2wC,MAAhFiM,EADH,EACGA,UAAWkW,EADd,EACcA,mBAAoBC,EADlC,EACkCA,YAAaC,EAD/C,EAC+CA,2BAGhDC,EAAc,IAEdjI,OAAiBhlD,EACjBilD,OAAajlD,EACbqlD,OAAgBrlD,EAEdktD,EAAuB,gBAAC,KAAD,CAAkBjzD,GAAG,uCAAuCkzD,eAAe,mBACxG,OAAQvW,GACJ,KAAKjK,GAAUuB,eACf,KAAKvB,GAAUwB,mBACX4W,EAAQ,gBACR77C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,6BAA6BkzD,eAAe,+DAC5ElI,EAAajrD,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAeC,kBAC1DlB,EAAgB,WACZ,EAAK1a,MAAMyiB,aACX,EAAKziB,MAAM0iB,UAEf,MACJ,KAAK1gB,GAAUqC,aACX+V,EAAQ,qBACRkI,EAAc,IACd/jD,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,2BAA2BkzD,eAAe,qBAC1EnI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,kCAAkCkzD,eAAe,yGACxFlI,EAAajrD,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAeC,kBAC1DlB,EAAgB,WACZ,EAAK1a,MAAM2iB,sBAEf,MACJ,KAAK3gB,GAAUsC,yBACX8V,EAAQ,eACRkI,EAAc,IACd/jD,EAAUgkD,EACVlI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,8CAA8CkzD,eAAe,sJAAiR16C,OAAQ,CACzX86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAM/wC,GAAKe,UAAW1M,OAAO,UACrCy8C,OAGrBvI,EAAajrD,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAeC,kBAC1DlB,EAAgB,WACZ,EAAK1a,MAAM2iB,sBAEf,MACJ,KAAK3gB,GAAUuC,mBACX6V,EAAQ,eACRkI,EAAc,IACd/jD,EAAUgkD,EACVlI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,yCAAyCkzD,eAAe,yJAAwP16C,OAAQ,CAC3V86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAM/wC,GAAKe,UAAW1M,OAAO,UACrCy8C,OAGrBlI,EAAyB,IACzBL,EAAajrD,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAe8F,OAC1D/G,EAAgB,WACZ,EAAK1a,MAAMyiB,aACX,EAAKziB,MAAM0iB,UAEf,MACJ,KAAK1gB,GAAUC,qBACXmY,EAAQ,eACR77C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,mCAAmCkzD,eAAe,qDAClFlI,EAAajrD,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAeC,kBAC1DlB,EAAgB,WACZ,EAAK1a,MAAMyiB,aACX,EAAKziB,MAAM0iB,UAEf,MACJ,KAAK1gB,GAAUE,oBACf,KAAKF,GAAUG,8BACf,KAAKH,GAAUI,uBACXgY,EAAQ,eACR77C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,kBAAkBkzD,eAAe,oDACjE,MACJ,KAAKxgB,GAAUS,UACX2X,EAAQ,eACR77C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,wBAAwBkzD,eAAe,mCACvEnI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,+BAA+BkzD,eAAe,sGACrF,MACJ,KAAKxgB,GAAUmB,sBACf,KAAKnB,GAAUkB,iBACXkX,EAAQ,kBACR77C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,+BAA+BkzD,eAAe,oCAC9EnI,EAAiB8H,EAAsB,gBAAC,KAAD,CAAkB7yD,GAAG,8CAA8CkzD,eAAe,0HAA2O,gBAAC,KAAD,CAAkBlzD,GAAG,sCAAsCkzD,eAAe,iFAC9a,MACJ,KAAKxgB,GAAUwC,gBACX4V,EAAQ,kBACRkI,EAAc,IACd3H,EAAyB,IACzBp8C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,4BAA4BkzD,eAAe,mBAC3EnI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,mCAAmCkzD,eAAe,8DACzF,MACJ,KAAKxgB,GAAUyC,sBACX2V,EAAQ,eACRO,EAAyB,IACzBp8C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,oCAAoCkzD,eAAe,6BACnFnI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,2CAA2CkzD,eAAe,uIACjG,MACJ,KAAKxgB,GAAU0C,8BACX,OAAQ2d,GACJ,KAAK,EACDjI,EAAQ,kBACRO,EAAyB,IACzBp8C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,gBAAgBkzD,eAAe,mBAC/DnI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,wCAAwCkzD,eAAe,6HAC9F,MACJ,QACIpI,EAAQ,eACRO,EAAyB,IACzBp8C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,kCAAkCkzD,eAAe,kBACjFnI,EAAkB,gBAAC,KAAD,CAAkB/qD,GAAG,yCAAyCkzD,eAAe,4GAC9FlI,EAAajrD,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAegG,aACtDjH,EAAgB,WACb,EAAK1a,MAAM+iB,8BAI3B,MACJ,KAAK/gB,GAAUM,aACf,QACI8X,EAAQ,gBACR77C,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,sBAAsBkzD,eAAe,gCACrEnI,EAAkB+H,EAAoa,gBAAC,KAAD,CAAkB9yD,GAAG,gCAAgCkzD,eAAe,wHAAzd,gBAAC,KAAD,CAAkBlzD,GAAG,6BAA6BkzD,eAAe,4FAA2P16C,OAAQ,CAAE86C,KAAM,SAACC,GAAD,OAAY,gBAAC,KAAD,CAAMC,KAAK,0BAA0BD,OAGta,OAAQ,gBAAC,GAAD,CAAiBzI,MAAOA,EAAOI,UAAW,CAAEzF,MA7HjC,IA6HoDC,OAAQsN,GAAe3H,uBAAwBA,EAAwBp8C,QAASA,EAAS87C,eAAgBA,EAAgBC,WAAYA,EAAYI,cAAeA,EAAeD,OAAQ,CAAE5D,KAAM,CAAE/B,gBAAiB,kB,GAjIjQt7C,aAqIjBwpD,GADUC,aAAWf,I,qkBC1I7B,IAAMgB,GAAkB,SACxB/S,IADwB,IAE3BgT,QAAS,UACTC,gBAAiB,kBACjBC,oBAAqB,sBACrBC,eAAgB,iBAChBC,cAAe,gBACfC,SAAU,WACVC,eAAgB,iBAChBC,2BAA4B,6BAC5BC,gBAAiB,kBACjBC,wBAAyB,0BACzBC,uBAAwB,yBACxBC,sBAAuB,wBACvBC,mBAAoB,qBACpBC,2BAA4B,6BAC5BC,yBAA0B,2BAC1BC,qBAAsB,uBACtBC,6BAA8B,+BAC9BC,2BAA4B,6BAC5BC,4BAA6B,8BAC7BC,+BAAgC,iCAChCC,iBAAkB,mBAClBC,yBAA0B,2BAC1BC,6BAA8B,+BAC9BC,wBAAyB,0BACzBC,uBAAwB,yBACxBC,cAAe,gBACfC,eAAgB,iBAChBC,qBAAsB,uBACtBC,6BAA8B,+BAC9BC,4BAA6B,8BAC7BC,2BAA4B,6BAC5BC,mBAAoB,qBACpBC,sBAAuB,0BClCdC,GAAkB,CAC3BC,uBAAwB,GACxBC,0BAA0B,EAC1BC,qBAAqB,EACrBC,cAAc,EACdC,yBAAyB,EACzBC,+BAA+B,GCJtBhD,GAAS,eAACiD,IAAD,yDAAuBC,IAAvB,+DAA8C,CAChE71D,KAAMmzD,GAAmBC,QACzBwC,gBACAC,eAESC,GAAgB,SAACzZ,GAAD,MAAc,CACvCr8C,KAAMmzD,GAAmBE,gBACzBhX,YAES0Z,GAAoB,iBAAO,CACpC/1D,KAAMmzD,GAAmBG,sBAEhB0C,GAAkB,iBAAO,CAClCh2D,KAAMmzD,GAAmBgC,qBAEhBc,GAAe,SAAC/Z,GAAD,MAAgB,CACxCl8C,KAAMmzD,GAAmBI,eACzBrX,UAAWA,GAAala,KAEfk0B,GAAc,SAACha,EAAWtlC,GAAZ,MAAuB,CAC9C5W,KAAMmzD,GAAmBK,cACzBtX,YACAtlC,UAESu/C,GAAU,iBAAO,CAC1Bn2D,KAAMmzD,GAAmBM,WAEhB2C,GAAe,SAACx/C,GAAD,MAAY,CACpC5W,KAAMmzD,GAAmBO,eACzBxX,UAAWla,GACXprB,UAESy/C,GAAqB,iBAAO,CACrCr2D,KAAMmzD,GAAmBiC,wBAEhBkB,GAAyB,SAACzxB,GAAD,MAAgB,CAClD7kC,KAAMmzD,GAAmBQ,2BACzB9uB,cAES0xB,GAAgB,iBAAO,CAChCv2D,KAAMmzD,GAAmBS,kBAEhB4C,GAAuB,SAACC,GAAD,MAAe,CAC/Cz2D,KAAMmzD,GAAmBU,wBACzB4C,aAESC,GAAsB,iBAAO,CACtC12D,KAAMmzD,GAAmBW,yBAEhB6C,GAAqB,SAAC//C,GAAD,MAAY,CAC1C5W,KAAMmzD,GAAmBY,sBACzBn9C,UAESggD,GAAmB,eAACC,EAAD,8DAA0B,CACtD72D,KAAMmzD,GAAmBa,mBACzB6C,gBAESC,GAA0B,SAACr4D,GAAD,MAAe,CAClDuB,KAAMmzD,GAAmBc,2BACzBx1D,aAESs4D,GAAwB,SAACngD,EAAOogD,GAAR,MAA4B,CAC7Dh3D,KAAMmzD,GAAmBe,yBACzBt9C,QACAogD,mBAESC,GAAqB,SAACx4D,GAAD,MAAe,CAC7CuB,KAAMmzD,GAAmBgB,qBACzB11D,aAESy4D,GAAqB,SAACzB,GAAD,OAAkBwB,GAAmB,CAAExB,kBAC5D0B,GAAyB,kBAAMF,GAAmB,CAAE1B,0BAA0B,KAC9E6B,GAAyB,kBAAMH,GAAmB,CAAEzB,qBAAqB,KACzE6B,GAA2B,kBAAMJ,GAAmB,CAAEzB,qBAAqB,KAC3E8B,GAAqB,kBAAML,GAAmB,CAAEvB,yBAAyB,KAEzE6B,GAAoB,kBAAMN,GAAmB5B,KAC7CmC,GAA4B,iBAAO,CAC5Cx3D,KAAMmzD,GAAmBiB,+BAEhBqD,GAA0B,SAAC7gD,GAAD,MAAY,CAC/C5W,KAAMmzD,GAAmBkB,2BACzBz9C,UAES8gD,GAA2B,iBAAO,CAC3C13D,KAAMmzD,GAAmBmB,8BAEhBqD,GAA8B,iBAAO,CAC9C33D,KAAMmzD,GAAmBoB,iCAYhBqD,GAAoB,SAAClmB,EAASmmB,EAAQzoD,GAAlB,IAA4BynD,EAA5B,wDAAiDhyB,EAAjD,6CAAgE,CAC7F7kC,KAAMmzD,GAAmBqB,iBACzBjX,OAAQrb,GACR41B,iBAAiB,EACjB1oD,WACAsiC,UACAmmB,SACAhB,cACAhyB,cAESkzB,GAAsB,SAACrmB,EAASmmB,EAAQzoD,GAAlB,IAA4BynD,EAA5B,wDAAiDhyB,EAAjD,6CAAgE,CAC/F7kC,KAAMmzD,GAAmBqB,iBACzBjX,OAAQtb,GACR61B,iBAAiB,EACjB1oD,WACAsiC,UACAmmB,SACAhB,cACAhyB,cAESmzB,GAAwB,SAACtmB,EAASmmB,EAAQzoD,GAAlB,IAA4BynD,EAA5B,wDAAiDhyB,EAAjD,6CAAgE,CACjG7kC,KAAMmzD,GAAmBqB,iBACzBjX,OAAQnb,GACR01B,iBAAiB,EACjB1oD,WACAsiC,UACAmmB,SACAhB,cACAhyB,cAESozB,GAAwB,iBAAO,CACxCj4D,KAAMmzD,GAAmBsB,2BAEhByD,GAA4B,SAAC3a,EAAQnuC,GAAT,MAAuB,CAC5DpP,KAAMmzD,GAAmBuB,6BACzBnX,SACAnuC,aAES+oD,GAAuB,SAACjc,GAAD,MAAgB,CAChDl8C,KAAMmzD,GAAmBwB,wBACzBzY,UAAWA,GAAala,KAEfo2B,GAAsB,SAAClc,EAAWtlC,GAAZ,MAAuB,CACtD5W,KAAMmzD,GAAmByB,uBACzB1Y,YACAtlC,UAESyhD,GAAc,SAACjpD,GAAD,MAAe,CACtCpP,KAAMmzD,GAAmB0B,cACzBzlD,aAESkpD,GAAe,SAAClb,GAAD,MAAgB,CACxCp9C,KAAMmzD,GAAmB2B,eACzB1X,cAESwV,GAAqB,SAACrV,GAAD,MAAa,CAC3Cv9C,KAAMmzD,GAAmB4B,qBACzBxX,WAESgb,GAA4B,SAAC7a,GAAD,MAAa,CAClD19C,KAAMmzD,GAAmB6B,6BACzBtX,WAES8a,GAA2B,iBAAO,CAC3Cx4D,KAAMmzD,GAAmB8B,8BAEhBwD,GAA0B,SAAC7hD,GAAD,MAAY,CAC/C5W,KAAMmzD,GAAmB+B,2BACzBt+C,U,ybCvKJ,IAAMuwB,GAAWtM,aAAe,CAC5B69B,sBAAsB,CAAD,+EAMnBC,G,yIACQ,IACEC,EAAat5D,KAAK2wC,MAAlB2oB,SACFC,EAAeD,EACft5D,KAAK2wC,MAAM9kC,KAAK4sB,cAAcoP,GAASuxB,sBAAuB,CAC5DE,aAEFt5D,KAAK2wC,MAAM9kC,KAAK4sB,cAAc6zB,GAAe6B,kBACnD,OAAQ,gBAACqL,GAAA,EAAD,KACA,6BAAQD,Q,GATQpvD,aAanBsvD,GAAY7F,aAAWyF,IACrBI,M,qkBCxBR,IAAMC,GAAoC,CAC7CC,2BAA4B,6BAC5BC,mCAAoC,sCAE3BC,GAA2B,YACjC/Y,IACA4Y,IAFiC,IAGpCI,0BAA2B,4BAC3BC,kCAAmC,oCACnCC,gCAAiC,kCACjCC,+CAAgD,iDAChDC,uDAAwD,yDACxDC,qDAAsD,yD,qkBCXnD,IAAMC,GAAsB,CAC/BC,WAAY,aACZC,mBAAoB,qBACpBC,mBAAoB,qBACpBC,mBAAoB,qBACpBC,YAAa,eAEJC,GAAa,eACnB5Z,IACAsZ,IACAV,IAHmB,IAItBiB,UAAW,YACXC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,oBAAqB,sBACrBC,QAAS,UACTC,gBAAiB,kBACjBC,kBAAmB,oBACnBC,cAAe,gBACfC,0BAA2B,4BAC3BC,WAAY,aACZC,mBAAoB,qBACpBC,iBAAkB,mBAClBC,iCAAkC,mCAClCC,kCAAmC,oCACnCC,oCAAqC,sCACrCC,qCAAsC,uCACtCC,wCAAyC,0CACzCC,WAAY,aACZC,iBAAkB,mBAClBC,WAAY,aACZC,iBAAkB,mBAClBC,uBAAwB,yBACxBC,+BAAgC,iCAChCC,6BAA8B,+BAC9BC,gBAAiB,kBACjBC,uBAAwB,yBACxBC,uCAAwC,yCACxCC,wBAAyB,0BACzBC,eAAgB,iBAChBC,cAAe,gBACfC,mBAAoB,qBACpBC,eAAgB,iBAChBC,qBAAsB,uBACtBC,oBAAqB,sBACrBC,mBAAoB,qBACpBC,wBAAyB,0BACzBC,mCAAoC,qCACpCC,qBAAsB,uBACtBC,kBAAmB,oBACnBC,sBAAuB,wBACvBC,oBAAqB,sBACrBC,4BAA6B,8BAC7BC,0BAA2B,4BAC3BC,iBAAkB,mBAClBC,yBAA0B,2BAC1BC,uBAAwB,2BC1DfC,GAAU,CACnBx7D,MAAO,SAEIw7D,MCAFC,GAAY,SAACn8D,GAAD,MAAY,CACjCb,KAAMg6D,GAAcL,WACpB94D,UAESo8D,GAAwB,SAACrvC,GAAD,MAAoB,CACrD5tB,KAAMg6D,GAAcS,0BACpB7sC,kBAESsvC,GAAW,SAAChtC,GAAD,IAAcitC,IAAd,+DAA4C,CAChEn9D,KAAMg6D,GAAcC,UACpB/pC,cACAitC,sBAESC,GAAkB,SAACn8C,GAAD,MAAW,CACtCjhB,KAAMg6D,GAAcE,kBACpBj5C,SAESo8C,GAAuB,SAACp8C,EAAMiP,GAAP,MAAwB,CACxDlwB,KAAMg6D,GAAcE,kBAGpBzsB,QAASsvB,GAAQx7D,MACjB0f,OACAiP,gBAESotC,GAAgB,SAAC1mD,GAAD,MAAY,CACrC5W,KAAMg6D,GAAcG,gBACpBvjD,UAES2mD,GAAoB,iBAAO,CACpCv9D,KAAMg6D,GAAcI,sBAEXoD,GAAS,SAAC38D,GAAD,IAAQ48D,IAAR,yDAA6BC,EAA7B,8DAA0D,CAC5E19D,KAAMg6D,GAAcK,QACpBx5D,QACA48D,eACAC,oBAESC,GAAkB,iBAAO,CAClC39D,KAAMg6D,GAAcO,oBAEXqD,GAAgB,SAAC3xD,GAAD,MAAU,CACnCjM,KAAMg6D,GAAcM,gBACpBruD,QAES4xD,GAAqB,SAAC5xD,GAAD,MAAU,CACxCjM,KAAMg6D,GAAcM,gBACpBruD,QAES6xD,GAAc,SAAClnD,GAAD,MAAY,CACnC5W,KAAMg6D,GAAcQ,cACpB5jD,UAESmnD,GAAY,SAACl9D,GAAD,MAAY,CACjCb,KAAMg6D,GAAcU,WACpB75D,UAESm9D,GAAmB,SAACn9D,GAAD,MAAY,CACxCb,KAAMg6D,GAAcW,mBACpB95D,UAESo9D,GAAiB,SAACrnD,GAAD,MAAY,CACtC5W,KAAMg6D,GAAcY,iBACpBhkD,UAESsnD,GAAY,SAAChuC,EAAa+f,EAAOkuB,GAArB,MAA2C,CAChEn+D,KAAMg6D,GAAckB,WACpBhrC,cACA+f,QACAkuB,qBAESC,GAAgC,SAACntD,GAAD,MAAgB,CACzDjR,KAAMg6D,GAAca,iCACpB5pD,cAESotD,GAAiC,SAACC,GAAD,MAAmC,CAC7Et+D,KAAMg6D,GAAcc,kCACpBwD,iCAESC,GAAmC,SAACC,GAAD,MAAoC,CAChFx+D,KAAMg6D,GAAce,oCACpByD,kCAESC,GAAmC,SAACxyD,EAAKikB,GAAN,MAAuB,CACnElwB,KAAMg6D,GAAcgB,qCAGpBvtB,QAASsvB,GAAQx7D,MACjB0K,MACAikB,gBAESwuC,GAAsC,SAACzyD,EAAKikB,GAAN,MAAuB,CACtElwB,KAAMg6D,GAAciB,wCAGpBxtB,QAASsvB,GAAQx7D,MACjB0K,MACAikB,gBAESyuC,GAAiB,SAACzuC,EAAa+f,EAAOkuB,GAArB,MAA2C,CACrEn+D,KAAMg6D,GAAckB,WACpBhrC,cACA+f,QACAkuB,qBAESS,GAAmB,SAAC3yD,GAAD,MAAU,CACtCjM,KAAMg6D,GAAcJ,mBACpB3tD,QAES4yD,GAAwB,SAAC5yD,GAAD,MAAU,CAC3CjM,KAAMg6D,GAAcJ,mBACpB3tD,QAES6yD,GAAiB,SAACloD,GAAD,MAAY,CACtC5W,KAAMg6D,GAAcmB,iBACpBvkD,UAESmoD,GAAY,SAAC9yD,GAAD,IAAM+yD,EAAN,uDAAwBtzC,GAAxB,MAAuD,CAC5E1rB,KAAMg6D,GAAcoB,WACpBnvD,MACA+yD,oBAESC,GAAmB,SAAChzD,GAAD,MAAU,CACtCjM,KAAMg6D,GAAcH,mBACpB5tD,QAESizD,GAAiB,SAACtoD,GAAD,MAAY,CACtC5W,KAAMg6D,GAAcqB,iBACpBzkD,UAESuoD,GAAsB,SAACt+D,EAAOwuB,GAAR,MAA4B,CAC3DrvB,KAAMg6D,GAAcsB,uBACpBz6D,QACAwuB,mBAES+vC,GAA2B,SAACv+D,EAAOkS,GAAR,MAAwB,CAC5D/S,KAAMg6D,GAAcsB,uBACpBz6D,QACAkS,eAESssD,GAA6B,iBAAO,CAC7Cr/D,KAAMg6D,GAAcuB,iCAEX+D,GAA2B,SAACz+D,GAAD,MAAY,CAChDb,KAAMg6D,GAAcwB,6BACpB36D,UAES0+D,GAAiB,SAAChgE,EAAIigE,GAAL,MAAqB,CAC/Cx/D,KAAMg6D,GAAcyB,gBACpBl8D,KACAigE,eAESC,GAAuB,SAAClgE,GAAD,MAAS,CACzCS,KAAMg6D,GAAc4B,wBACpBr8D,OAESmgE,GAAsB,iBAAO,CACtC1/D,KAAMg6D,GAAc0B,yBAEXiE,GAAoC,iBAAO,CACpD3/D,KAAMg6D,GAAc2B,yCAEXiE,GAAe,SAACrgE,EAAIsgE,EAAYC,GAAjB,MAAqC,CAC7D9/D,KAAMg6D,GAAc6B,eACpBt8D,KACAsgE,aACAC,mBAESC,GAAiC,SAACxgE,EAAIsgE,EAAYC,GAAjB,IAAiCE,IAAjC,+DAAyE,CACnHhgE,KAAMg6D,GAAc6B,eACpBt8D,KACAsgE,aACAC,iBACAE,gCAESC,GAAc,iBAAO,CAC9BjgE,KAAMg6D,GAAc8B,gBAEXoE,GAAmB,iBAAO,CACnClgE,KAAMg6D,GAAc+B,qBAEXoE,GAAe,SAACt/D,GAAD,MAAY,CACpCb,KAAMg6D,GAAcgC,eACpBn7D,UAESu/D,GAAoB,SAACv/D,EAAOw/D,GAAR,MAA4B,CACzDrgE,KAAMg6D,GAAciC,qBACpBp7D,QACAw/D,mBAESC,GAAmB,SAACpwC,EAAa2vC,EAAYC,GAA1B,MAA8C,CAC1E9/D,KAAMg6D,GAAckC,oBACpBhsC,cACA2vC,aACAC,mBAESS,GAAuB,iBAAO,CACvCvgE,KAAMg6D,GAAcoC,0BAEXoE,GAAkB,iBAAO,CAClCxgE,KAAMg6D,GAAcmC,qBAEXsE,GAAiC,SAACC,EAAc9pD,EAAO9W,GAAtB,MAA6C,CACvFE,KAAMg6D,GAAcqC,mCACpB5uB,QAASsvB,GAAQx7D,MACjBm/D,eACA9pD,QACA9W,sBAES6gE,GAAiB,SAAC9/D,EAAO+/D,GAAR,IAAmB5B,EAAnB,uDAAqCtzC,GAArC,MAAoE,CAC9F1rB,KAAMg6D,GAAcoB,WACpBv6D,QACA+/D,YACA5B,oBAES6B,GAAwB,SAAC50D,GAAD,MAAU,CAC3CjM,KAAMg6D,GAAcH,mBACpB5tD,QAES60D,GAAmB,iBAAO,CACnC9gE,KAAMg6D,GAAcF,qBAEXiH,GAAkB,SAAClgE,EAAOiR,EAAUkvD,GAAlB,MAA4C,CACvEhhE,KAAMg6D,GAAcD,YACpBl5D,QACAiR,WACAkvD,yBAMSC,GAAuB,SAACpgE,EAAO+V,GAAR,MAAmB,CACnD5W,KAAMg6D,GAAcuC,kBACpB17D,QACA+V,UAMSsqD,GAAiB,SAACrgE,GAAD,MAAY,CACtCb,KAAMg6D,GAAc4C,iBACpB/7D,UAESsgE,GAAwB,SAACtgE,EAAOugE,GAAR,MAAyB,CAC1DphE,KAAMg6D,GAAc6C,yBACpBh8D,QACAugE,gBAESC,GAAsB,SAACzqD,GAAD,MAAY,CAC3C5W,KAAMg6D,GAAc8C,uBACpBlmD,U,+DC5PEuwB,GAAWtM,aAAe,CAC5BymC,YAAY,CAAD,sDAsCAC,GADYrO,cA/BC,SAACjjB,GAAW,IAC5B9kC,EAAiG8kC,EAAjG9kC,KAAMu/C,EAA2Fza,EAA3Fya,OAAQ8W,EAAmFvxB,EAAnFuxB,YAAaC,EAAsExxB,EAAtEwxB,gBAAiBxd,EAAqDhU,EAArDgU,cAAeG,EAAsCnU,EAAtCmU,eAAgBmT,EAAsBtnB,EAAtBsnB,kBAC7ErmD,EAAQ/F,EAAK4sB,cAAcoP,GAASm6B,aACpC3mD,EAAU6mD,EAAYv5D,KAAI,SAACw1B,GAAD,MAAc,CAC1C1U,IAAK0U,EAAQ3+B,cACbkK,KAAMy0B,MAUJgqB,EAAU,gBAACia,GAAA,EAAD,CAAehX,OAAQA,EAAQx5C,MAAOA,EAAOywD,UAAWzwD,GAChE,gBAACm6C,GAAA,EAAD,CAAMC,SAAS,cAAcZ,OAAQ,CAAE5D,KAAM,CAAExB,SAAU,GAAIyB,QAAS,QAGxE6a,EAAeH,EAAgB76B,UACrC,OAAQ,gBAACi7B,GAAA,EAAD,CAAUnX,OAAQ,CACtBx5C,MAAO,CAAE61C,QAAS,EAAGC,OAAQ,EAAG/B,OAAQ,SACxC6c,UAAW,CAAElpD,QAAS,SACvBmpD,cAAe,IAAKC,aAAa,EAAMrnD,QAASA,EAASinD,aAAcA,EAAcK,SAAU,SAAC15D,EAAG25D,GAAJ,OAhB3EzkC,EAgBwGykC,EAAOn5C,SAf9H04C,EAAgBt1D,SAASsxB,GACzB2mB,EAAe3mB,GAGfwmB,EAAcxmB,IALA,IAACA,GAgBqH0kC,aAAc,SAACC,EAAaC,GACpK,OAAQ,gCACSA,GAAiBA,EAAcD,GAEhC,gBAACE,GAAA,EAAD,CAAet5D,KAAK,sBAAsB2iD,QAAS4L,MAEpEgL,cAAe,kBAAM9a,GAAQ+a,oBAAqB,kBAAM/a,QCjClDgb,I,OAAa,SAACxyB,GAAW,IAC1ByyB,EAAkDzyB,EAAlDyyB,aAAchY,EAAoCza,EAApCya,OAAQiY,EAA4B1yB,EAA5B0yB,wBACxBC,EAAa,wBAAMx1D,UAAU,kDAC3B,gBAAC,KAAqBw+C,GAAe0B,QAevCuV,EAAet6D,KAAEygD,MAAM,GAbP,CAClBlC,KAAM,CACFC,QAAS,gBACT7B,OAAQ,EACRD,OAAQ,QAEZ6d,cAAe,CACXC,KAAM,QACNhc,QAAS,EACT7B,OAAQ,EACR8d,eAAgB,eAGwBtY,GAAU,IAC1D,OAAQ,gBAAC4X,GAAA,EAAD,CAAe3W,QAAS+W,EAAchY,OAAQmY,IAC5CF,GAA2B,gBAACtX,GAAA,EAAD,CAAMC,SAAS,OAAOl+C,UAAU,2BAC5Du1D,GAA2B,gBAACtX,GAAA,EAAD,CAAMC,SAAS,WAAWl+C,UAAU,2BAChE,wBAAMA,UAAU,0BACZ,gBAAC,KAAD,CAAkB7N,GAAG,uCAAuCkzD,eAAe,2BAA8N16C,OAAQ,CAAE6qD,mB,gCCzBtTK,GAAc,SAAChzB,GACxB,IAEMmX,GAAQrvB,EAFDmrC,eACLnrC,eACoB6zB,GAAeK,aAC3C,OAAQ,gBAACqW,GAAA,EAAkBryB,EACnB,gBAACkzB,GAAA,EAAD,CAASC,cAAc,QAAQ3+D,KAAM4+D,KAAYC,OAAQlc,MAAOA,EAAOsD,OAAQ,CACnF5D,KAAM,CACF7B,OAAQ,OACRrsC,QAAS,OACT2qD,WAAY,SACZxY,cAAe,SACfhG,gBAAiB,UACjBU,MAAO,WAEX2B,MAAO,CACHrC,gBAAiB,UACjBU,MAAO,gBCjBN+d,GAAe,SAACvzB,GAAW,IAC5B3nC,EAAwC2nC,EAAxC3nC,KAAMm7D,EAAkCxzB,EAAlCwzB,aAAc9X,EAAoB1b,EAApB0b,QAASjB,EAAWza,EAAXya,OAU/BmY,EAAet6D,KAAEygD,MAAM,GATP,CAClBlC,KAAM,CACFC,QAAS,cACT/B,MAAO,OACPD,gBAAiB,UACjBiC,OAAQ,EACR/B,OAAQ,SAGgCyF,GAChD,OAAQ,gBAAC4X,GAAA,EAAD,CAAe3W,QAASA,EAAS+X,KAAK,WAAWhZ,OAAQmY,GACxDY,EAAan7D,KAGXk7D,M,8aCdf,IAAMG,GAAqC,SAAC1zB,GAAW,IAC3C2zB,EAA2E3zB,EAA3E2zB,YAAajC,EAA8D1xB,EAA9D0xB,UAAWjiE,EAAmDuwC,EAAnDvwC,OAAQmkE,EAA2C5zB,EAA3C4zB,cAAe5B,EAA4BhyB,EAA5BgyB,SAAUI,EAAkBpyB,EAAlBoyB,cACjE,OAAQ,gCACA,uBAAKyB,MAAO,CAAEvc,aAAc,sBACxB,gBAACwc,GAAA,EAAD,CAAWpC,UAAWA,EAAWiC,YAAaA,EAAar6D,MAAO7J,EAAQuiE,SAAU,SAAC15D,EAAGgB,GAAJ,OAAc04D,EAAS14D,GAAS,KAAKmhD,OAAQ,CACzI5D,KAAM,CACF5B,OAAQ,YAIR,uBAAK4e,MAAO,CAAE/Y,cAAe,WAAasX,EAAcwB,MACrD5zB,EAAM+zB,gBAAmB,uBAAKF,MAAO,CAC5Cpd,UAAW,oBACXE,YAAa,MACbJ,WAAY,MACZyd,cAAe,QAEFh0B,EAAM+zB,oBAIdE,GAAb,kCACI,WAAYj0B,GAAQ,IAAD,uBACf,cAAMA,IACDvtC,MAAQ,CACThD,OAAQ,IAEZ,EAAKykE,cAAgB,EAAKA,cAAczf,KAAnB,SALN,EADvB,mDAQkBhlD,GACVJ,KAAK8kE,SAAS,CACV1kE,aAVZ,+BAac,IAAD,SAC6NJ,KAAK2wC,MAA/No0B,EADH,EACGA,MAAOC,EADV,EACUA,kBAAmBC,EAD7B,EAC6BA,gBAAiBC,EAD9C,EAC8CA,SAAUC,EADxD,EACwDA,UAAWC,EADnE,EACmEA,iBAAkBzC,EADrF,EACqFA,SAAU0C,EAD/F,EAC+FA,iBAAkBlB,EADjH,EACiHA,aAAcmB,EAD/H,EAC+HA,cAAepC,EAD9I,EAC8IA,oBAAqBqC,EADnK,EACmKA,kBAAmBb,EADtL,EACsLA,eAAgBtZ,EADtM,EACsMA,OAAQiX,EAD9M,EAC8MA,UAC3MjiE,EAAWJ,KAAKoD,MAAhBhD,OAOFmjE,EAAet6D,KAAEygD,MAAM,GANP,CAClBlC,KAAM,CACFiE,cAAe,SACf/C,SAAU,SAG8B0C,QAAUplD,GAC1D,GAAIm/D,EACA,OAAO,gBAAC,GAAD,CAAa/Z,OAAQmY,IAEhC,GAAIwB,EAAMzkE,OAAS,EACf,OAAO,KAEX,IAAMklE,EAAgBF,EAAcllE,EAAQ2kE,GACtCU,EAAYD,EAAcllE,OAAS,EACnCklE,EAAc78D,KAAI,SAACK,GAAD,MAAW,CAC3BygB,IAAKzgB,EAAKiB,MACVy7D,SAAU,SAACC,EAAUC,GACjB,OAAQ,gBAAC,GAAD,CAAc58D,KAAMA,EAAMm7D,aAAcA,EAAc9X,QAAS,WACnEsW,EAAS35D,GACT48D,YAIV,CACE,CACIn8C,IAAK,YACLi8C,SAAU,WACN,OAAQ,gBAAC1C,GAAA,EAAD,CAAe5X,OAAQ,CAC3B5D,KAAM,CACFC,QAAS,cACT/B,MAAO,OACPD,gBAAiB,UACjBiC,OAAQ,KAGD6d,QAKzBM,EAAeX,EAAWG,EAAiBH,GAAYhC,IAG7D,OAAQ,gBAACF,GAAA,EAAD,CAAe5X,OAAQmY,EAAcuC,gBAAiBzD,EAAW0D,cAAe,CACpF3a,OAAQ,CACJ5D,KAAM,CACFa,WAAY,MACZ5C,gBAAiB,UACjBU,MAAO,aAGhB6f,UAAW,CACVjB,MAAOU,EACPra,OAAQ,CACJhwC,KAAM,CACFstC,SAAU0c,EACVvc,UAAW,QACX7B,UAAW,SAGnBif,gBAAiB,kBAAM,EAAKpB,cAAc,KAC1CqB,iBAAkB,SAAC3B,EAAexB,GAAhB,OAAmC,gBAAC,GAAD,CAAoCuB,YAAaU,EAAmB3C,UAAW4C,EAAiB7kE,OAAQA,EAAQmkE,cAAeA,EAAe5B,SAAU,EAAKkC,cAAe9B,cAAeA,EAAe2B,eAAgBA,OAE1QmB,OAhFjB,GAAgD17D,aAoFjCy6D,MCxGT/8B,I,OAAWtM,aAAe,CAC5B8mC,UAAU,CAAD,gEAKT8D,0BAA0B,CAAD,iFAMhBC,GAAW,SAACz1B,GAAW,IACxB3nC,EAAS2nC,EAAT3nC,KACR,OAAQ,gBAACwiD,GAAA,EAAD,CAAO19C,UAAU,oCAAoCu4D,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQ3S,OAAQ,CAAE4S,YAAa,OAASC,MAAI,EAACR,OAAQ,CAAE5D,KAAM,CAAEc,YAAa,SAC1L,gBAACkD,GAAA,EAAMM,KAAP,KACI,gBAACC,GAAA,EAAD,CAAMC,SAAS,mBAAmBZ,OAAQ,CAAE5D,KAAM,CAAE5B,OAAQ,uBAGhE,gBAAC4F,GAAA,EAAMM,KAAP,KACK9iD,EAAKrI,QAITmrD,GAAO,SAACnb,GAAW,IACpB3nC,EAAS2nC,EAAT3nC,KACR,OAAQ,gBAACwiD,GAAA,EAAD,CAAO19C,UAAU,oCAAoCu4D,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQ3S,OAAQ,CAAE4S,YAAa,MAAOlE,QAAS,cAAgBmE,MAAI,GACjL,gBAACJ,GAAA,EAAMM,KAAP,KACI,gBAACC,GAAA,EAAD,CAAMC,SAAS,sBAGnB,gBAACR,GAAA,EAAMM,KAAP,KACK9iD,EAAKrI,QAIT2lE,GAAc,WACvB,OAAQ,gBAAC9a,GAAA,EAAD,CAAO19C,UAAU,oCAAoCu4D,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQE,MAAI,EAACR,OAAQ,CAAE5D,KAAM,CAAEc,YAAa,SAC1J,gBAACkD,GAAA,EAAMM,KAAP,KACI,wBAAMh+C,UAAU,qCACZ,gBAAC,KAAD,CAAkB7N,GAAG,8BAA8BkzD,eAAe,uBAczEoT,GAAY3S,cATC,SAACjjB,GACvB,IAAMzhC,EAAUyhC,EAAM9kC,KAAK4sB,cAAcoP,GAASs+B,2BAClD,OAAQ,gBAAC3a,GAAA,EAAD,CAAO6a,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQ3S,OAAQ,CAAE4S,YAAa,MAAOlE,QAAS,cAAgBmE,MAAI,GACnI,gBAACJ,GAAA,EAAMM,KAAP,KACI,gBAACC,GAAA,EAAD,CAAMC,SAAS,cAAcp6C,MAAO1C,KAExC,gBAACs8C,GAAA,EAAMM,KAAP,KAAa58C,OAIzB,SAASs3D,GAAoBx9D,GACzB,MAAO,CACHiB,MAAOjB,EAAK/I,IAGpB,SAASwmE,GAAkB1B,GACvB,OAAOA,EAAMp8D,KAAI,SAAC9F,GAAD,OAAO2jE,GAAoB3jE,MAAI6jE,OAMpD,SAASC,GAAkB/D,EAAQmC,GAC/B,OAAOA,EAAM/gE,MAAK,SAACnB,GAAD,OAAOA,EAAE5C,KAAO2iE,EAAO34D,SAE7C,IAUa28D,GAAkBhT,cAVC,SAACjjB,GAAW,IAChCw0B,EAAoGx0B,EAApGw0B,UAAW0B,EAAyFl2B,EAAzFk2B,+BAAgCC,EAAyDn2B,EAAzDm2B,eAAgBjB,EAAyCl1B,EAAzCk1B,aAAclD,EAA2BhyB,EAA3BgyB,SAAUvX,EAAiBza,EAAjBya,OAAQv/C,EAAS8kC,EAAT9kC,KAC7Fy4D,EAAcz4D,EAAK4sB,cAAc6zB,GAAe4F,sBAChDmQ,EAAYx2D,EAAK4sB,cAAcoP,GAASw6B,WACxChnD,EAAU8pD,EAAY,GAAKsB,GAAkBK,GAC7CC,EAAmBlB,EAAeW,GAAoBX,QAAgB7/D,EAC5E,OAAQ,gBAAC,GAAD,CAA4B++D,MAAO1pD,EAAS+vC,OAAQA,EAAQiX,UAAWA,EAAW2C,kBAAmBV,EAAaW,gBAAiBX,EAAaY,SAAU6B,EAAgB5B,UAAWA,EAAWC,iBAAkB,QAASzC,SAAU,SAAC14D,GAC1O04D,EAASgE,GAAkB18D,EAAO68D,KACnCzB,iBAAkB,SAACH,GAAD,OAAe,gBAAC,GAAD,CAAUl8D,KAAM29D,GAAkBzB,EAAU4B,GAAiBD,+BAAgCA,KAAoC1C,aAAc,SAACn7D,GAAD,OAAW,gBAAC,GAAD,CAAMA,KAAM29D,GAAkB39D,EAAM89D,GAAiBD,+BAAgCA,KAAoCvB,cAAe,SAACllE,GAAD,OAf1U,SAA+BA,EAAQ2kE,GAEnC,OAAO0B,GADe1B,EAAM3kE,QAAO,SAACwD,GAAD,OAAOA,EAAEjD,KAAKnB,cAAcoI,QAAQxH,EAAOZ,gBAAkB,MAckPwnE,CAAsB5mE,EAAQ0mE,IAAiB5D,oBAAqB,kBAAM,gBAAC,GAAD,OAAiBqC,kBAAmB,kBAAM,gBAACgB,GAAD,Y,qBChFpc1+B,GAAWtM,aAAe,CAC5B8mC,UAAU,CAAD,uDAKT4E,eAAe,CAAD,8DAKdC,sBAAsB,CAAD,4EAMZd,GAAW,SAACz1B,GAAW,IACxBhkC,EAAoBgkC,EAApBhkC,IAAKqgB,EAAe2jB,EAAf3jB,WACb,OAAQ,gBAACw+B,GAAA,EAAD,CAAO6a,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQE,MAAI,EAACR,OAAQ,CAAE5D,KAAM,CAAEc,YAAa,SAC5G,gBAACkD,GAAA,EAAMM,KAAP,KACI,wBAAMh+C,UAAU,8BACXq5D,GAAex6D,EAAKqgB,OAKzC,SAASm6C,GAAex6D,EAAKqgB,GAAa,IAAD,EACrC,OAAOA,GAAU,iBAAGrgB,QAAH,IAAGA,OAAH,EAAGA,EAAKiF,aAAR,QAA4BjF,EAAIhM,KAE9C,IAAMmrD,GAAO,SAACnb,GACjB,OAAQ,gBAAC6a,GAAA,EAAD,CAAO6a,YAAY,EAAM5a,cAAc,SAAS1S,OAAQ,CAAE0O,QAAS,cAAgBiE,gBAAgB,QAAQE,MAAI,GAC/G,gBAACJ,GAAA,EAAMM,KAAP,KACI,wBAAMh+C,UAAU,8BACXq5D,GAAex2B,EAAMhkC,IAAKgkC,EAAM3jB,gBAKxCs5C,GAAc,WACvB,OAAQ,gBAAC9a,GAAA,EAAD,CAAO6a,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQE,MAAI,GAC5E,gBAACJ,GAAA,EAAMM,KAAP,KACI,wBAAMh+C,UAAU,8BACZ,gBAAC,KAAD,CAAkB7N,GAAG,uBAAuBkzD,eAAe,qBAKlEiU,GAAS,SAACz2B,GAAW,IACtB02B,EAAuC12B,EAAvC02B,SAAUC,EAA6B32B,EAA7B22B,yBAClB,OAAQ,gBAACC,GAAA,EAAD,CAAatgB,QAASqgB,EAA4B,gBAAC,KAAD,CAAkBrnE,GAAG,4CAA4CkzD,eAAe,6KAA8T,IAChc,gBAACqU,GAAA,EAAD,CAAcnb,QAASgb,EAAUI,SAAUH,EAA0Bx5D,UAAU,qBAAqBs9C,OAAQ,CAAE5D,KAAM,CAAErB,MAAOyE,eAAW8c,QAAQC,gBAC5I,gBAACnc,GAAA,EAAD,CAAO6a,YAAU,EAACttB,OAAQ,CAAE4S,YAAa,OAASF,cAAc,UAC5D,gBAACD,GAAA,EAAMM,KAAP,KACI,gBAACC,GAAA,EAAD,CAAMC,SAAS,gBAEnB,gBAACR,GAAA,EAAMM,KAAP,CAAYV,OAAQ,CAAE5D,KAAM,CAAEmd,cAAe,SACzC,gBAAC,KAAD,CAAkB1kE,GAAG,kBAAkBkzD,eAAe,iBAejEoT,GAAY3S,cATC,SAACjjB,GACvB,IAAMzhC,EAAUyhC,EAAM9kC,KAAK4sB,cAAcoP,GAASq/B,uBAClD,OAAQ,gBAAC1b,GAAA,EAAD,CAAO6a,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,QAAQ3S,OAAQ,CAAE4S,YAAa,MAAOlE,QAAS,cAAgBmE,MAAI,GACnI,gBAACJ,GAAA,EAAMM,KAAP,KACI,gBAACC,GAAA,EAAD,CAAMC,SAAS,cAAcp6C,MAAO1C,KAExC,gBAACs8C,GAAA,EAAMM,KAAP,KAAa58C,OAIzB,SAAS04D,GAAmBj7D,GACxB,MAAO,CAAE1C,MAAO0C,EAAI1M,IAExB,SAAS4nE,GAAiBlmD,EAAMmmD,GAC5B,OACMnmD,EAAKhZ,KAAI,SAAC1E,GAAD,OAAO2jE,GAAmB3jE,MAAIyiE,OAGjD,SAASqB,GAAiBnF,EAAQjhD,GAC9B,OAAOA,EAAK3d,MAAK,SAACC,GAAD,OAAOA,EAAEhE,KAAO2iE,EAAO34D,SAS5C,IAUa+9D,GAAYpU,cAVC,SAACjjB,GAAW,IAC1Bw0B,EAA8Hx0B,EAA9Hw0B,UAAW0B,EAAmHl2B,EAAnHk2B,+BAAgCllD,EAAmFgvB,EAAnFhvB,KAAMujD,EAA6Ev0B,EAA7Eu0B,SAAUvC,EAAmEhyB,EAAnEgyB,SAAU2E,EAAyD32B,EAAzD22B,yBAA0Blc,EAA+Bza,EAA/Bya,OAAQv/C,EAAuB8kC,EAAvB9kC,KAAMi8D,EAAiBn3B,EAAjBm3B,YAC/GxD,EAAcz4D,EAAK4sB,cAAcoP,GAASo/B,gBAC1C5E,EAAYx2D,EAAK4sB,cAAcoP,GAASw6B,WACxChnD,EAAU8pD,EAAY,GAAK0C,GAAiBlmD,GAC5ColD,EAAiB7B,EAAW0C,GAAmB1C,QAAYl/D,EACjE,OAAQ,gBAAC,GAAD,CAA4B++D,MAAO1pD,EAAS+vC,OAAQA,EAAQiX,UAAWA,EAAW2C,kBAAmBV,EAAaW,gBAAiBX,EAAaY,SAAU6B,EAAgB5B,UAAWA,EAAWC,iBAAkB,QAASzC,SAAU,SAACC,GAC1OD,EAASoF,GAAiBnF,EAAQjhD,KACnC0jD,iBAAkB,SAACH,GAAD,OAAe,gBAAC,GAAD,CAAUv4D,IAAKo7D,GAAiB7C,EAAUvjD,GAAOqL,WAAY86C,EAAajB,+BAAgCA,KAAoC1C,aAAc,SAACn7D,GAAD,OAAW,gBAAC,GAAD,CAAM2D,IAAKo7D,GAAiB/+D,EAAM2Y,GAAOqL,WAAY86C,KAAiBxC,cAAe,SAACllE,GAAD,OAfpS,SAAoBA,EAAQuhB,EAAMmmD,GAC9B,IAAMG,EAAkB7nE,EAAOZ,cAI/B,OAAOqoE,GAFDlmD,EAAKvhB,QAAO,SAACuM,GAAD,OAASw6D,GAAex6D,EAAKm7D,GAAatoE,cAAcoI,QAAQqgE,IAAoB,MAYsMC,CAAW9nE,EAAQuhB,EAAMmmD,IAAc5E,oBAAqB,kBAAM,gBAAC,GAAD,OAAiBqC,kBAAmB,kBAAM,gBAAC,GAAD,OAAeb,eAAgB,kBAAO,gBAAC,GAAD,CAAQ4C,yBAA0BA,EAA0BD,SAAU12B,EAAMw3B,e,wfCnGvgB,IAeQC,GAff,kCACI,WAAYz3B,GAAQ,IAAD,uBACf,cAAMA,IACD03B,oBAAsB,EAAKA,oBAAoBjjB,KAAzB,SAFZ,EADvB,yDAKwBqO,EAAM/pD,EAAM4+D,GAAO,IAC3BvxD,EAAW/W,KAAK2wC,MAAhB55B,OACR,OAAQ,gBAAC,KAAD,CAAMA,OAAM,OAAEA,QAAF,IAAEA,IAAU,SAAU08C,KAAMA,EAAM8U,IAAI,YACjDC,mBAAQ9+D,MARzB,+BAYQ,OAAO,gBAAC,KAAD,CAAc++D,mBAAoBzoE,KAAKqoE,qBAAsBroE,KAAK2wC,MAAMkQ,cAZvF,GAA6B12C,a,4kBCI7B,IAAM09B,GAAWtM,aAAe,CAC5BmtC,iBAAiB,CAAD,sDAKhBC,2BAA2B,CAAD,sEAK1BC,kBAAkB,CAAD,oDAKjBC,uBAAuB,CAAD,+EAKtBC,oBAAoB,CAAD,yDAMjBC,GAAoB,CACtBvhB,KAAM,CACFxB,SAAU,OACV2C,SAAU,IACVqgB,aAAc,OACdrE,cAAe,OACfsE,UAAW,gFAGbC,GAAyB,CAC3B1hB,KAAM,CAAEtB,WAAY,IAAKD,WAAY,OAAQN,OAAQ,OAAQ8B,QAAS,OAAQzB,SAAU,SAEtFmjB,GAAiB,CACnB3hB,KAAM,CACF4hB,aAAc,aACd/gB,WAAY,OACZ2gB,aAAc,OACd1gB,YAAa,SAGf+gB,GAAiB,SAAC14B,GAAW,IACvBpsC,EAAkDosC,EAAlDpsC,IAAKC,EAA6CmsC,EAA7CnsC,MAAOC,EAAsCksC,EAAtClsC,MAAOC,EAA+BisC,EAA/BjsC,aAAc4kE,EAAiB34B,EAAjB24B,aACnCz9D,EAAO+3D,eACPhyD,EAAU03D,EACVz9D,EAAK4sB,cAAcoP,GAAS8gC,4BAC5B98D,EAAK4sB,cAAcoP,GAASihC,qBAClC,OAAQ,gBAACS,GAAA,EAAD,CAAcne,OAAQ2d,GAAmBS,aAAY53D,GACrD,gBAAC63D,GAAA,EAAD,CAAmB73D,MAAOA,EAAOw5C,OAAQ8d,KAEzC,gBAAC1d,GAAA,EAAD,CAAOzS,OAAQ,CAAE4S,YAAa,MACxBpnD,GAAOC,GAASC,IAAW,gBAAC+mD,GAAA,EAAMM,KAAP,KACpBvnD,GAAQ,uBAAKuJ,UAAU,6BAChB,gBAAC,KAAD,CAAkB7N,GAAG,iBAAiBkzD,eAAe,oCAAsJ16C,OAAQ,CAC3O86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAMlvD,EAAKwS,OAAO,UACFy8C,QAIxBhvD,GAAU,uBAAKsJ,UAAU,6BAClB,gBAAC,KAAD,CAAkB7N,GAAG,mBAAmBkzD,eAAe,6BAA4I16C,OAAQ,CACnO86C,KAAM,SAACC,GAAD,OAAY,gBAAC,KAAD,CAAMC,KAAI,iBAAYjvD,IAAUgvD,QAGjC/uD,GAAU,uBAAKqJ,UAAU,6BAClB,gBAAC,KAAD,CAAkB7N,GAAG,oBAAoBkzD,eAAe,+BAAmH16C,OAAQ,CAAEixD,YAAajlE,OAGjNC,GAAiB,gBAAC8mD,GAAA,EAAMM,KAAP,CAAYV,OAAQ+d,IAC9B,gBAAC,GAAD,KAAUzkE,KAEhBH,IAAQC,IAAUC,IAAUC,GAAiB,gBAAC8mD,GAAA,EAAMM,KAAP,CAAYV,OAAQ+d,IAC3D,gBAAC,KAAD,CAAkBlpE,GAAG,sBAAsBkzD,eAAe,0FAK5EwW,GAAkB,WACpB,IAAM99D,EAAO+3D,eACb,OAAQ,gBAAC2F,GAAA,EAAD,CAAcne,OAAQ2d,GAAmBS,aAAY39D,EAAK4sB,cAAcoP,GAAS+gC,oBACjF,gBAACa,GAAA,EAAD,CAAmB73D,MAAO/F,EAAK4sB,cAAcoP,GAAS+gC,mBAAoBxd,OAAQ8d,KAClF,uBAAKp7D,UAAU,6BACX,gBAAC,KAAD,CAAkB7N,GAAG,qBAAqBkzD,eAAe,+BAAiK16C,OAAQ,CAC1O86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,mCAAmC18C,OAAO,UAC/Cy8C,QAIrB,uBAAK1lD,UAAU,6BACX,gBAAC,KAAD,CAAkB7N,GAAG,oBAAoBkzD,eAAe,8BAAyJ16C,OAAQ,CACjO86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,+BAA+B18C,OAAO,UAC3Cy8C,QAIrB,uBAAK1lD,UAAU,6BACX,gBAAC,KAAD,CAAkB7N,GAAG,mBAAmBkzD,eAAe,8BAA4J16C,OAAQ,CACnO86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,gCAAgC18C,OAAO,UAC5Cy8C,QAIrB,uBAAK1lD,UAAU,6BACX,gBAAC,KAAD,CAAkB7N,GAAG,qBAAqBkzD,eAAe,gCAA0K16C,OAAQ,CACnP86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,gCAAgC18C,OAAO,UAC5Cy8C,QAIrB,uBAAK1lD,UAAU,6BACX,gBAAC,KAAD,CAAkB7N,GAAG,sBAAsBkzD,eAAe,iCAAoJ16C,OAAQ,CAC9N86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,gCAAgC18C,OAAO,UAC5Cy8C,UAM3BoW,GAAuB,WACzB,IAAM/9D,EAAO+3D,eACb,OAAQ,gBAAC2F,GAAA,EAAD,CAAcne,OAAQ2d,GAAmBS,aAAY39D,EAAK4sB,cAAcoP,GAASghC,yBACjF,gBAACY,GAAA,EAAD,CAAmB73D,MAAO/F,EAAK4sB,cAAcoP,GAASghC,wBAAyBzd,OAAQ8d,KACvF,uBAAKp7D,UAAU,6BACX,gBAAC,KAAD,CAAkB7N,GAAG,qBAAqBkzD,eAAe,gCAA8K16C,OAAQ,CACvP86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,6BAA6B18C,OAAO,UACzCy8C,UAM3BqW,GAAkB,SAACl5B,GACrB,IAAM9kC,EAAO+3D,eACPkG,EAAiBn5B,EAAMhuC,OAAOnD,cAAcuM,WAAW,MACvDg+D,EAAkBp5B,EAAMhuC,OAAOnD,cAAcuM,WAAW,MAC9D,OAAQ,wBAAM+B,UAAU,yCAChB,gBAAC,KAAD,CAAM2lD,KAAK,iDAAiD18C,OAAO,UAC9DlL,EAAK4sB,cAAc6zB,GAAemG,cAFvC,YAKA,gBAAC,KAAD,CAAMgB,KAAK,mCAAmC18C,OAAO,UAChDlL,EAAK4sB,cAAc6zB,GAAeoG,iBAEtCoX,GAAmB,4CAEZ,gBAAC,KAAD,CAAMrW,KAAK,8BAA8B18C,OAAO,UAAhD,cAKPgzD,GAAoB,4CAEb,gBAAC,KAAD,CAAMtW,KAAK,6DAA6D18C,OAAO,UAA/E,wCAwCLizD,GAjCW,SAACr5B,GAAW,IAC1Bs5B,EAA+Et5B,EAA/Es5B,SAAUC,EAAqEv5B,EAArEu5B,eAAgBC,EAAqDx5B,EAArDw5B,UAAWb,EAA0C34B,EAA1C24B,aAAcc,EAA4Bz5B,EAA5By5B,gBAAiBznE,EAAWguC,EAAXhuC,OAEtE0nE,EADOzG,eACInrC,cACb6xC,GAAe,EACfjvD,OAAUrV,EACVikE,IAUAK,GATAjvD,EAAU4uD,EACLthE,KAAI,SAACsB,EAAOwf,GAAR,MAAiB,CACtBA,MACAxpB,GAAIwpB,EACJ/f,KAAM+f,EACNuiB,KAAM/hC,MAELm2B,SACAkH,WACkBv+B,MAAK,SAACnF,GAAD,QAASA,EAAE3D,OAhBV,MAkBakK,WAAA,OAAe+/D,QAAf,IAAeA,IAAmB7uD,EAAUA,EAAQ,GAAGpb,QAAK+F,GAlBzE,YAkB1BukE,EAlB0B,KAkBTC,EAlBS,KAmB3BC,EAAmBR,QAAgCjkE,IAApBukE,EAAgCN,EAASvmE,IAAI6mE,QAAmBvkE,EACrG,OAAQ,gBAAC0kE,GAAA,EAAD,CAAOhqE,KAAMiqE,KAAUC,OAAQC,YAAW,UAAKzmD,GAAUI,mBAAf,MAAuCsmD,QAAQ,EAAMC,gBAAgB,EAAMZ,UAAWA,EAAWa,WAAYX,EAAI/d,GAAewE,MAAOma,qBAAsBZ,EAAI/d,GAAea,OAAQ/B,OAAM,IAC5O7E,KAAM,CAAEd,gBAAiB,YACtBoF,KAAiBvE,cAEfgkB,GAAiB,gBAAC/H,GAAA,EAAD,CAAUza,MAAOuiB,EAAIxiC,GAAS6gC,kBAAmBrG,UAAWgI,EAAIxiC,GAAS6gC,kBAAmBrtD,QAASA,EAAS6vD,YAAaX,EAAiB5H,SAAU,SAAC15D,EAAG25D,GAAJ,OAAe4H,EAAmB5H,EAAO3iE,KAAKmrD,OAAQ,CAAE5D,KAAM,CAAEmd,cAAe,OACtP8F,GAAkB,gBAAC,GAAD,iBAAoBA,EAApB,CAAoCnB,aAAcA,MACnEc,GAAoB,2BACd,gBAAC,GAAD,MACA,gBAAC,GAAD,OAER,gBAAC,GAAD,CAAiBznE,OAAM,OAAEA,QAAF,IAAEA,IAAU,O,8BCrMzCklC,I,OAAWtM,aAAe,CAC5B4vC,SAAS,CAAD,6CAMCC,GAAW,SAACz6B,GAAW,IACxB06B,EAA8H16B,EAA9H06B,iBAAkB1tB,EAA4GhN,EAA5GgN,gBAAiBwZ,EAA2FxmB,EAA3FwmB,SAAUx2D,EAAiFgwC,EAAjFhwC,KAAM2qE,EAA2E36B,EAA3E26B,SAAUC,EAAiE56B,EAAjE46B,UAAWlY,EAAsD1iB,EAAtD0iB,OAAQwD,EAA8ClmB,EAA9CkmB,QAASzL,EAAqCza,EAArCya,OAAQiY,EAA6B1yB,EAA7B0yB,wBAD1E,EAEWl5D,YAAe,GAF1B,YAExBqhE,EAFwB,KAETC,EAFS,OAGqBthE,YAAe,GAHpC,YAGxBuhE,EAHwB,KAGJC,EAHI,KAIzB9/D,EAAO+3D,eACPgI,EAAazhE,eAAkB,SAAC0hE,IAC7BL,GAAiBK,GAAQA,EAAKC,YAAcD,EAAKE,aAClDN,GAAiB,KAEtB,IACGO,EAAkB7hE,eAAkB,SAAC0hE,IAClCH,GAAsBG,GAAQA,EAAKC,YAAcD,EAAKE,aACvDJ,GAAsB,KAE3B,IACH,GAAIN,EACA,OAAO,KAEX,IAAK1tB,EAAiB,CAClB,IAKM4lB,EAAet6D,KAAEygD,MAAM,GALP,CAClBuiB,cAAe,CACX/lB,WAAY,YAG4BkF,GAAU,IAC1D,OAAQ,gBAAC4X,GAAA,EAAD,CAAe3W,QAASgH,EAAQjI,OAAQmY,GACxC,wBAAMz1D,UAAU,qBACZ,gBAAC,KAAqBw+C,GAAeC,oBAIrD,GAAI8W,EACA,OAAQ,gBAACL,GAAA,EAAD,CAAe3W,QAASwK,EAASzL,OAAQA,GACzC,gBAAC,KAAqBkB,GAAe6F,oBAGjD,IAAMgZ,EAAWt/D,EAAK4sB,cAAcoP,GAASsjC,UACvCe,EAAkB,CACpBC,oBAAqB,CACjB,uBAAKr+D,UAAU,gCAAgC2b,IAAI,OAAOvf,IAAK0hE,EAAYh6D,MAAO45D,EAAgB7qE,OAAOqF,GACpGrF,GAEL,uBAAKmN,UAAU,sCAAsC2b,IAAI,YAAYvf,IAAK8hE,EAAiBp6D,MAAO85D,EAAqBH,OAAYvlE,GAC9HulE,GAEL,uBAAKz9D,UAAU,gCAAgC2b,IAAI,aAC/C,gBAAC,KAAD,CAAkBxpB,GAAG,gBAAgBkzD,eAAe,0BAAmJ16C,OAAQ,CAC/M86C,KAAM,SAACC,GAAD,OAAa,gBAAC,KAAD,CAAMC,KAAK,gCAAgC18C,OAAO,UACpDy8C,QAIrB,uBAAK1lD,UAAU,gCAAgC2b,IAAI,WAC/C,gBAAC,KAAD,CAAkBxpB,GAAG,cAAckzD,eAAe,wBAAqJ16C,OAAQ,CAC/M86C,KAAM,SAACC,GAAD,OAAY,gBAAC,KAAD,CAAMnH,QAAS,kBAAMwK,MAAYrD,SAI3D4Y,iBAAkB,CAAC,CAAEjV,SAAUA,EAAUkV,cAAef,EAAUgB,SAAU,MAE1EvH,EAAQ,CACV,CACIt7C,IAAK,eACLi8C,SAAU,kBAAO,gBAAC6G,GAAA,EAAD,iBAAkBL,EAAlB,CAAmC9gB,OAAQ,CACxD5D,KAAM,CAAE9B,MAAO,QAASC,OAAQ,SAChC6mB,gBAAiB,CAAE/kB,QAAS,6BASlC8b,EAAet6D,KAAEygD,MAAM,GALP,CAClBlC,KAAM,CACFiE,cAAe,WAGyBL,GAAU,IAC1D,OAAQ,gBAACgX,GAAA,EAAD,CAAehX,OAAQmY,EAAclB,UAAW8I,EAAUnF,UAAW,CAAEjB,QAAO0H,aAAc,CAAEC,eAAgB,IAAO3G,cAAe,CACxIvB,MAAO,CAAElrD,QAAS,WAEd,gBAACqzD,GAAA,EAAD,CAAaxV,SAAUA,EAAUkV,cAAef,EAAUnmE,KAAMynE,KAAYC,OAAQzhB,OAAQ,CAChGkgB,SAAU,CAAEplB,WAAY,UACxB4mB,KAAM,CAAErlB,QAAS,sB,8FC7FZslB,I,OACA,IADAA,GAEC,WAFDA,GAID,SAECxpE,GACA,GADAA,GAGA,UAHAA,GAIC,WAJDA,GAKC,WALDA,GAMA,UAEAypE,GACA,GADAA,GAEH,OAFGA,GAGC,WAHDA,GAID,SAJCA,GAKC,WALDA,GAMC,WANDA,GAOA,UAPAA,GAQU,qBARVA,GASA,UATAA,GAUC,WAVDA,GAWC,WAXDA,GAYD,SAZCA,GAaE,YAbFA,GAcI,cAEJC,GAEA,UAFAA,GAGF,QAEEC,GACC,WADDA,GAEG,aAFHA,GAGA,GAEA7iE,GAEJ,MAFIA,GAGJ,MAHIA,GAIK,eAJLA,GAKK,eC3CL8iE,GAAqB,SAACnmE,EAAc8N,EAAiBhO,EAAc+N,EAAiB8mB,EAAWyxC,GAExG,IAAMC,EAAkB,GAaxB,OAZIv4D,GACAu4D,EAAgBpsE,KAAKoJ,IAErBwK,GACAw4D,EAAgBpsE,KAAKoJ,KAErBrD,IAA8B,IAAd20B,IAA4C,IAAtByxC,IACtCC,EAAgBpsE,KAAKoJ,KAErBvD,IAA8B,IAAd60B,IAChB0xC,EAAgBpsE,KAAKoJ,IAElBgjE,GAEEC,GAA0B,SAACtmE,EAAc8N,EAAiBhO,EAAc+N,GACjF,IAAMw4D,EAAkB,GAaxB,OAZIv4D,GACAu4D,EAAgBpsE,KAAKoJ,IAErBwK,GACAw4D,EAAgBpsE,KAAKoJ,IAErBrD,GACAqmE,EAAgBpsE,KAAKoJ,IAErBvD,GACAumE,EAAgBpsE,KAAKoJ,IAElBgjE,GAiBEE,GAAgC,SAACC,EAAYxkE,EAAMqkE,EAAiBI,EAAW5hE,EAAM6hE,GAC9F,IAAMC,EAhBgC,SAAC9hE,EAAM6hE,GAC7C,IAAMrD,EAAMx+D,EAAK4sB,cACXm1C,EAAoBvD,EAAI/d,GAAemE,mBACvCod,EAA2BxD,EAAI/d,GAAeoE,0BAC9Cod,EACAzD,EADoBqD,EAChBphB,GAAekE,uBACflE,GAAeqE,mBACnBod,EAA2B1D,EAAI/d,GAAesE,0BAC9CjoD,EAAM,GAKZ,OAJAA,EAAI0B,IAAsByjE,EAC1BnlE,EAAI0B,IAA+B0jE,EACnCplE,EAAI0B,IAAsBujE,EAC1BjlE,EAAI0B,IAA+BwjE,EAC5BllE,EAGmBqlE,CAA2BniE,EAAM6hE,GACrD3I,EAAQ,GAWd,OAVAsI,EAAgB1kE,KAAI,SAACjI,GACjBqkE,EAAM9jE,KAAK,CACPwoB,IAAK/oB,EACLgJ,KAAMikE,EAAkBjtE,GACxB+mE,UAAW+F,EACXnhB,QAAS,WACLohB,EAAUzkE,EAAMtI,SAIrBqkE,G,mcC7DJ,IAYQkJ,GAZf,kCACI,WAAYt9B,GAAQ,gCACVA,GAFd,8CAIc,IAAD,EACyB3wC,KAAK2wC,MAA3BsW,EADH,EACGA,QAASwgB,EADZ,EACYA,SACXyG,EAAgBC,aAAM,iBAC5B,OAAQ,gBAAC5G,GAAA,EAAD,CAAatnE,GAAIiuE,EAAejnB,QAASwgB,OAAWzhE,EAAYihD,GAChE,gBAACmnB,GAAA,EAAD,iBAAYpuE,KAAK2wC,MAAjB,CAAwB09B,mBAAkBH,UAR1D,GAAmC/jE,aCI7B09B,GAAWtM,aAAe,CAC5B+yC,aAAa,CAAD,gFAKZC,YAAY,CAAD,gFAyDFC,GAAe5a,cAnDQ,SAACjjB,GAAW,IACpC9kC,EAAiD8kC,EAAjD9kC,KAAM4iE,EAA2C99B,EAA3C89B,QAASC,EAAkC/9B,EAAlC+9B,aAAcC,EAAoBh+B,EAApBg+B,QAASC,EAAWj+B,EAAXi+B,OACxCvE,EAAMx+D,EAAK4sB,cACbo2C,EAAY,GACZj9D,OAAQ5L,EACZ,OAAQyoE,GACJ,KAAKzB,GACD6B,EAAYxE,EAAI/d,GAAe4D,UAC/B,MACJ,KAAK8c,GACD6B,EAAYxE,EAAI/d,GAAe8D,UAC/B,MACJ,KAAK4c,GACD6B,EAAYxE,EAAI/d,GAAegE,mBAC/B,MACJ,KAAK0c,GACD6B,EAAYxE,EAAI/d,GAAe8C,cAC/Bx9C,EAAQy4D,EAAIxiC,GAAS0mC,aACrB,MACJ,KAAKvB,GACD6B,EAAYxE,EAAI/d,GAAe6D,UAC/B,MACJ,KAAK6c,GACD6B,EAAYxE,EAAI/d,GAAe4C,cAC/Bt9C,EAAQy4D,EAAIxiC,GAASymC,cACrB,MACJ,KAAKtB,GACD6B,EAAYxE,EAAI/d,GAAe+D,UAC/B,MACJ,KAAK2c,GACD6B,EAAYxE,EAAI/d,GAAeoD,kBAC/B,MACJ,KAAKsd,GACD6B,EAAYxE,EAAI/d,GAAemD,gBAGvC,IAAMqf,EAAaL,IAAYzB,IAAoByB,IAAYzB,GACzD+B,EAAcN,IAAYzB,IAAmByB,IAAYzB,GACzDgC,IAAeN,GAAgBK,EACrC,OAAQ,gBAACvjB,GAAA,EAAD,CAAO6a,YAAU,EAAC5a,cAAc,SAAS1S,OAAQ,CAAE4S,YAAa,GAAK6Y,MAAO,CAAE7e,OAAQ,OAAQ2B,YAAa,IAC1GwnB,GAAe,gBAACtjB,GAAA,EAAMM,KAAP,KACR,gBAAC,GAAD,CAAe7E,QAASr1C,EAAOywD,UAAWwM,EAAWI,aAAa,EAAM7jB,OAAQ,CAAE5D,KAAM,CAAEwhB,aAAc,IAAOvB,SAAUuH,EAAYE,QAAST,IAAYzB,IAAoByB,IAAYzB,GAAiBrK,SAAU,SAAC15D,EAAGgB,GAAJ,OAAeA,EAAQ0kE,IAAYC,QAE/PG,GAAgB,gBAACvjB,GAAA,EAAMM,KAAP,KACT,gBAAC+X,GAAA,EAAD,CAAS1+D,KAAM2pE,EAAa/K,KAAYoL,OAASpL,KAAYqL,SAErE,gBAAC5jB,GAAA,EAAMM,KAAP,KACI,wBAAMh+C,UAAU,kBAAkB+gE,QAKnCL,MCtEFa,GACO,iBADPA,GAEM,gBAFNA,GAGS,mBAHTA,GAIU,oBAJVA,GAKA,GAEA/iE,GACE,YADFA,GAED,SAFCA,GAGG,aAEhB,SAASgjE,GAA2BngE,GAChC,OAAQA,GACJ,IAAK,iBACD,OAAOkgE,GACX,IAAK,gBACD,OAAOA,GACX,IAAK,mBACD,OAAOA,GACX,IAAK,oBACD,OAAOA,GACX,QACI,OAAOA,IAGZ,SAASE,GAA4BC,GACxC,GAAKA,GAGDF,GAA2BE,EAAcrgE,UAAYkgE,GAezD,MAZkB,CACdI,cAAeH,GAA2BE,EAAcrgE,QACxD1H,OAAQ6E,GACRrM,GAAI,yBACJU,KAAM,yBACN2W,MAAO,CACHrI,KAAMugE,EAAcvgE,KACpBC,QAASsgE,EAActgE,SAE3BkI,QAASo4D,EAAcxgE,UAAU0gE,eACjCv4D,UAAW,IC1CZ,IAAM0wB,GAAWtM,aAAe,CACnCo0C,UAAU,CAAD,4DAKTC,8BAA8B,CAAD,+EAK7BC,qBAAqB,CAAD,qEAKpBC,eAAe,CAAD,4CAKdC,cAAc,CAAD,0CAKbC,iBAAiB,CAAD,8CAKhBC,kBAAkB,CAAD,oDCxBRC,GAAmB,SAACv/B,GAAW,IAAD,EACjC9kC,EAAO+3D,eACP9zD,EAAW6gC,EAAM7gC,SACjBvP,EAAiBowC,EAAMpwC,eACvB4vE,EAAkBx/B,EAAM8+B,cAC9B,OAAQ,gBAAClI,GAAA,EAAD,CAAatgB,QAASn3C,GAAYvP,EAAkB,gBAAC,KAAD,CAAkBN,GAAG,8BAA8BkzD,eAAe,oLAA+S16C,OAAQ,CACjb86C,KAAM,kBAAO,gBAAC,KAAD,CAAMx8C,OAAO,SAASytD,MAAO,CAAEld,YAAa,OAASmM,KAAMrvC,GAAU1B,KAAKM,0BAA0BlT,EAAUvP,IAC9FsL,EAAK4sB,cAAcoP,GAASgoC,wBAEzDz2D,UAAW+2D,IAAoBd,GACzBxjE,EAAK4sB,cAAcoP,GAASioC,gBAC5BK,IAAoBd,GAChBxjE,EAAK4sB,cAAcoP,GAASkoC,eAC5BI,IAAoBd,GAChBxjE,EAAK4sB,cAAcoP,GAASmoC,kBAC5BG,IAAoBd,GAChBxjE,EAAK4sB,cAAcoP,GAASooC,mBAC5B,MACb,gBAAC,KAAD,CAAkBhwE,GAAG,kCAAkCkzD,eAAe,sNAA4S16C,OAAQ,CAC/XW,UAAW+2D,IAAoBd,GACzBxjE,EAAK4sB,cAAcoP,GAASioC,gBAC5BK,IAAoBd,GAChBxjE,EAAK4sB,cAAcoP,GAASkoC,eAC5B,OAEN,gBAAChkB,GAAA,EAAD,CAAMC,SAAS,kBAAkBZ,OAAQ,CAC7C5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZE,MAAK,UAAE0E,KAAiB6c,eAAnB,aAAE,EAA0B0I,cAKhCC,GAAe,SAAC1/B,GAAW,IAAD,EAC7B7gC,EAAW6gC,EAAM7gC,SACjBvP,EAAiBowC,EAAMpwC,eAC7B,OAAQ,gBAACgnE,GAAA,EAAD,CAAatgB,QAASn3C,GAAYvP,EAAkB,gBAAC,KAAD,CAAkBN,GAAG,gCAAgCkzD,eAAe,8KAAuS16C,OAAQ,CAC3a63D,qBAAuB,gBAAC,KAAD,CAAMv5D,OAAO,SAASytD,MAAO,CAAEld,YAAa,OAASmM,KAAM,mFAClD,gBAAC,KAAD,CAAkBxzD,GAAG,gCAAgCkzD,eAAe,mCAE/F,gBAAC,KAAD,CAAkBlzD,GAAG,oCAAoCkzD,eAAe,8KAA2P16C,OAAQ,CAChV63D,qBAAuB,gBAAC,KAAD,CAAMv5D,OAAO,SAASytD,MAAO,CAAEld,YAAa,OAASmM,KAAM,mFAClD,gBAAC,KAAD,CAAkBxzD,GAAG,2CAA2CkzD,eAAe,oCAG3G,gBAACpH,GAAA,EAAD,CAAMC,SAAS,kBAAkBZ,OAAQ,CAC7C5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZE,MAAK,UAAE0E,KAAiB6c,eAAnB,aAAE,EAA0B0I,cAKhCG,GAAmB,SAAC5/B,GAAW,IAAD,EACjC7gC,EAAW6gC,EAAM7gC,SACjBvP,EAAiBowC,EAAMpwC,eAC7B,OAAQ,gBAACgnE,GAAA,EAAD,CAAatgB,QAASn3C,GAAYvP,EAAkB,gBAAC,KAAD,CAAkBN,GAAG,mBAAmBkzD,eAAe,yLAAkT16C,OAAQ,CACza63D,qBAAuB,gBAAC,KAAD,CAAMv5D,OAAO,SAASytD,MAAO,CAAEld,YAAa,OAASmM,KAAM,mFAClD,gBAAC,KAAD,CAAkBxzD,GAAG,gCAAgCkzD,eAAe,mCAE/F,gBAAC,KAAD,CAAkBlzD,GAAG,8BAA8BkzD,eAAe,yLAA+P16C,OAAQ,CAC9U63D,qBAAuB,gBAAC,KAAD,CAAMv5D,OAAO,SAASytD,MAAO,CAAEld,YAAa,OAASmM,KAAK,mFACjD,gBAAC,KAAD,CAAkBxzD,GAAG,kCAAkCkzD,eAAe,oCAGlG,gBAACpH,GAAA,EAAD,CAAMC,SAAS,eAAeZ,OAAQ,CAC1C5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZE,MAAK,UAAE0E,KAAiB6c,eAAnB,aAAE,EAA0B8I,iBCzEhCC,GAAqB,SAAC9/B,GAAW,IAAD,EACnC9kC,EAAO+3D,eACPuM,EAAkBx/B,EAAM8+B,cAC9B,OAAQ,gBAAClI,GAAA,EAAD,CAAatgB,QAASp7C,EAAK4sB,cAAcoP,GAAS+nC,8BAA+B,CACrFx2D,UAAW+2D,IAAoBd,GACzBxjE,EAAK4sB,cAAcoP,GAASioC,gBAC5BK,IAAoBd,GAChBxjE,EAAK4sB,cAAcoP,GAASkoC,eAC5B,MAEN,gBAAChkB,GAAA,EAAD,CAAMC,SAAS,aAAaZ,OAAQ,CACxC5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZE,MAAK,UAAE0E,KAAiB6c,eAAnB,aAAE,EAA0BgJ,YCLvC7oC,GAAWtM,aAAe,CAC5Bo1C,cAAc,CAAD,oEAKbC,qBAAqB,CAAD,2DAKpBC,uBAAuB,CAAD,sFAKtBC,kBAAkB,CAAD,2DAKjBC,4BAA4B,CAAD,qGAK3BC,qBAAqB,CAAD,8HAgDlBC,GAAmCrd,cA1CQ,SAACjjB,GAC9C,IAAIzhC,EACIw4D,EAAY7c,KAAZ6c,QACR,GAAI/2B,EAAMugC,oBAAqB,CAC3B,IAAMC,EAA2BxgC,EAAM9kC,KAAK4sB,cAAc6zB,GAAegE,mBACnE8gB,EAAyBzgC,EAAM9kC,KAAK4sB,cAAc6zB,GAAeiE,iBACvE,OAAQ,uBAAKziD,UAAU,oEACf,gBAAC+1D,GAAA,EAAD,CAAS1+D,KAAM4+D,KAAYC,OAAQF,cAAc,QAAQhc,OAASnX,EAAM9a,mBAAqBu7C,GAA2BD,EAA0B/lB,OAAQ,CAC9J5D,KAAM,CACF6pB,aAAc,aACd3N,eAAgB,iBAGhB,uBAAK51D,UAAU,kDAAkD02D,MAAO,CAAEre,MAAK,OAAEuhB,QAAF,IAAEA,OAAF,EAAEA,EAASC,aAActf,WAAY,SAChH,gBAAC,KAAD,CAAkBpoD,GAAG,0BAA0BkzD,eAAe,uCAIzE,GAAIxiB,EAAM2gC,kBACXpiE,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,8BAA8BkzD,eAAe,2BAE5E,GAAIxiB,EAAM4gC,eACXriE,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,wBAAwBkzD,eAAe,sCAEtE,KAAIxiB,EAAM6gC,kBAIX,OAAO,KAHPtiE,EAAW,gBAAC,KAAD,CAAkBjP,GAAG,0BAA0BkzD,eAAe,oBAK7E,OAAQ,uBAAKrlD,UAAU,uCACf,gBAACi+C,GAAA,EAAD,CAAMC,SAAS,QAAQZ,OAAQ,CACnC5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZqC,YAAa,MACbnC,MAAK,OAAEuhB,QAAF,IAAEA,OAAF,EAAEA,EAASC,iBAGhB,uBAAK75D,UAAU,0BAA0BoB,OAgCxCuiE,GAAkB7d,cA5BC,SAACjjB,GAAW,IAChC2gC,EAAmD3gC,EAAnD2gC,kBAAmBI,EAAgC/gC,EAAhC+gC,UAAWC,EAAqBhhC,EAArBghC,WAAY9lE,EAAS8kC,EAAT9kC,KAClD,OAAQ,gBAAC+lE,GAAA,EAAD,CAAmB//D,YAAcy/D,EASnC,GARA3gC,EAAM9kC,KAAK4sB,cAAcoP,GAASgpC,uBAAwB,CACxDa,UAAW7lE,EAAKK,aAAawlE,EAAW,CACpCvlE,sBAAuB,IAE3BwlE,WAAY9lE,EAAKK,aAAaylE,EAAY,CACtCxlE,sBAAuB,MAGzBkL,gBAAiBq6D,EAAYC,EAAYE,UAAW,EAAGzmB,OAAQ,CACrE5D,KAAM,CACFT,SAAU,GAEd+qB,aAAc,CACV5qB,WAAY,EACZyd,cAAe,GAEnBoN,YAAa,CAETC,YAAaV,EAAqB,UAAeI,GAAaC,GAAc,iBAAc3rE,GAE9FisE,cAAe,CACXD,WAAY,iBA8PXE,GAAgBte,cAzPC,SAACjjB,GAAW,IAAD,EAC7B3nC,EAA4D2nC,EAA5D3nC,KAAM6C,EAAsD8kC,EAAtD9kC,KAAMsmE,EAAgDxhC,EAAhDwhC,iBAAkBzE,EAA8B/8B,EAA9B+8B,0BACfrD,EAAQx+D,EAAvB4sB,cACFk4C,EAAgBtG,EAAIxiC,GAAS8oC,eAC7BI,EAA8B1G,EAAIxiC,GAASkpC,6BAC3CqB,EAAe5wE,GAAkBwH,EAAK/I,IACtCotE,EAAkB+E,EAClBppE,EAAKqkE,gBAAgBjtE,QAAO,SAACM,GAAD,OAAUyxE,GAAqBzxE,IAAS2J,IAA+B3J,IAAS2J,MAC5GrB,EAAKqkE,gBACLgF,EAAyB3E,GAA6B1kE,EAAKqkE,gBAAgBzlE,QAAQyC,KAAuB,EAC1GioE,EAAgB,CAClBjQ,UAAWsO,EACXlJ,UAAWz+D,EAAKwkE,WAChB+E,UAAW,CACPvmB,SAAU,wBACVZ,OAAQ,CACJ5D,KAAM,CACFxB,SAAU,OACVC,WAAY,UAIxBr0C,MAAO++D,EACP6B,WAAYC,KAAWnpB,KACvByc,cAAe,CAEXvB,MAAO,CAAElrD,QAAS,SAEtB+yC,QAAoC,IAA3BghB,EAAgB/sE,QAAiB+xE,OAEpCrsE,EADA,kBAAM2qC,EAAM88B,UAAUzkE,EAAMqkE,EAAgB,MAGtD,GAAIA,EAAgB/sE,OAAS,GAAK+xE,EAAwB,CACtD,IAAMtN,EAAQwI,GAA8BvkE,EAAKwkE,WAAYxkE,EAAMqkE,EAAiB18B,EAAM88B,UAAW5hE,EAAM6hE,GAC3G4E,EAActM,UAAY,CAAEjB,QAAO2N,WAAW,GAElD,IAAMC,EAAc,CAACL,GACf7M,EAAY,GACZmN,EAAc5pE,EAAK4D,WAAa2iE,GAA4BvmE,EAAK0H,wBACjEmiE,EAAmB7pE,EAAK0H,uBA2D9B,GA1DK1H,EAAKoK,oBAAsBg/D,IAAgBppE,EAAK8pE,WACjDrN,EAAUxkE,KAAK,CACXwoB,IAAK,gBACL/f,KAAM2gE,EAAIxiC,GAAS+oC,sBACnBnJ,UAAWz+D,EAAK+pE,iBAChBR,UAAW,CACPvmB,SAAU,cACVZ,OAAQ,CACJ5D,KAAM,CACFxB,SAAU,OACVC,WAAY,UAIxBoG,QAAS,WACL1b,EAAMqiC,gBAAgBhqE,MAI7BxH,GAAkBwH,EAAK/I,MACpB+I,EAAKiqE,aACLxN,EAAUxkE,KAAK,CACXwoB,IAAK,eACL/f,KAAM2gE,EAAI/d,GAAe+F,cACzBkgB,UAAW,CAAEvmB,SAAU,UACvBK,QAAS,WACL1b,EAAMuiC,yBAAyBlqE,MAI3Cy8D,EAAUxkE,KAAK,CACXwoB,IAAK,UACL8oD,UAAW,CAAEvmB,SAAU,WACvBtiD,KAAM2gE,EAAI/d,GAAeuB,OACzBxB,QAAS,WACL1b,EAAMwiC,UAAUnqE,IAEpBy+D,UAAWz+D,EAAKoqE,cAGpBpqE,EAAKqkE,gBAAgBxgE,SAASxC,KAAyBrB,EAAKhC,cAC5Dy+D,EAAUxkE,KAAK,CACXwoB,IAAK,cACL/f,KAAM2gE,EAAI/d,GAAe8E,kBACzBmhB,UAAW,CACPvmB,SAAU,gBACVZ,OAAQ,CACJ5D,KAAM,CACFxB,SAAU,OACVC,WAAY,UAIxBoG,QAAS,WACL1b,EAAM0iC,cAAcrqE,MAI5By8D,EAAUnlE,OAAS,EAAG,CACtB,IAAMwwE,EAAoBzG,EAAIxiC,GAASipC,mBACvC6B,EAAY1xE,KAAK,CACbohE,UAAWyO,EACX/K,cAAe,CACX/Z,SAAU,eACVqW,UAAWyO,EACXl/D,MAAOk/D,EACP1lB,OAAQ,CACJ5D,KAAM,CACFxB,SAAU,OACVC,WAAY,UAIxB+f,UAAW,CACPjB,MAAOU,GAEXgC,SAAUhC,EAAU/4C,WAAU,SAAC1jB,GAAD,OAAWA,EAAKy+D,YAAY,IAGlE,OAAQ,gBAAC8B,GAAA,EAAD,CAAc7oE,KAAM4yE,KAAiBrpB,OAAQmB,OAAQ,CACzD5D,KAAM,CACF5B,OAAQ,OACRF,MAAO,QACPiD,SAAU,QACVhD,OAAQ,QACRkD,UAAW,QACXvvC,QAAS,OACTmqD,KAAM,MACN7c,cAAe,SACfqiB,UAAW,8EACXngB,aAAc,MACdrD,gBAAiBz8C,EAAKuqE,UAAYvqE,EAAKwqE,cAAgB,eAAYxtE,KAGnE,uBAAK8H,UAAU,2BACX,uBAAKA,UAAU,4CACTskE,IAA4B,OAAXQ,QAAW,IAAXA,OAAA,EAAAA,EAAanrE,SAAU6E,GAAgBG,QAAsC,0BAAX,OAAhBomE,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB5jE,OAAoC,gBAACu8C,GAAA,EAAD,CAAOJ,OAAQ,CAAE5D,KAAM,CAAEN,WAAY,OAAQI,YAAa,UAC7K,gBAAC,GAAD,CAAkBmoB,cAAa,OAAEmD,QAAF,IAAEA,OAAF,EAAEA,EAAanD,kBAEpD2C,IAA2B,OAAXQ,QAAW,IAAXA,OAAA,EAAAA,EAAanrE,SAAU6E,GAAgBC,WAAwC,0BAAX,OAAhBsmE,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB5jE,OAAoC,gBAACu8C,GAAA,EAAD,CAAOJ,OAAQ,CAAE5D,KAAM,CAAEN,WAAY,OAAQI,YAAa,UAC9K,gBAAC,GAAD,CAAoBmoB,cAAa,OAAEmD,QAAF,IAAEA,OAAF,EAAEA,EAAanD,kBAEtD2C,GAA0C,yBAAV,OAAhBS,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB5jE,OAAmC,gBAACu8C,GAAA,EAAD,CAAOJ,OAAQ,CAAE5D,KAAM,CAAEN,WAAY,OAAQI,YAAa,UACzH,gBAAC,GAAD,OAGR,gBAACmiB,GAAA,EAAD,CAAmB73D,MAAO5I,EAAK4I,OAAS,GAAIw5C,OAAQ,CAChE5D,KAAM,CACFisB,SAAU,SACV1rB,WAAY,SACZ2rB,aAAc,WACdxtB,WAAY,IACZP,OAAQ,OACRa,UAAW,OACXU,WAAY,MACZyd,cAAe,MACfgP,aAAc,MACdrsB,YAAa,YAIT,uBAAKx5C,UAAU,0CACX,wBAAMA,UAAa9E,EAAK2yB,UAA+C,GAAlC,+BACjC,gBAACi4C,GAAA,EAAD,CAAkBC,SAAU7qE,EAAK2yB,UAAY,cAAgB,cAAeyvB,OAAQ,CACpG5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZE,MAAO,mBAOJn9C,EAAKwqE,eAAkB,uBAAK1lE,UAAU,4BACjC,uBAAKA,UAAU,wCACX,gBAAC27D,GAAA,EAAD,CAAmB73D,MAAOy4D,EAAIxiC,GAASmpC,sBAAuB8C,gBAAc,EAACC,sBAAoB,EAAC3oB,OAAQ,CAC1H5D,KAAM,CACF7B,OAAQ,cAKN38C,EAAKwqE,eAAkB,gCACjB,uBAAK1lE,UAAU,6BAETskE,IAA4B,OAAXQ,QAAW,IAAXA,OAAA,EAAAA,EAAanrE,SAAU6E,GAAgBG,QAAW,gBAACunE,GAAA,EAAD,CAAYC,eAAgBC,KAAe58D,MAAO68D,uBAAwBxjC,EAAM9kC,KAAK4sB,cAAc6zB,GAAea,QACnL,gBAAC,KAAD,CAAkBltD,GAAG,uCAAuCkzD,eAAe,0NAAuU16C,OAAQ,CAC9a27D,YAAc,gBAAC,KAAD,CAAM/nB,QAAS,kBAAM1b,EAAMuiC,yBAAyBlqE,KAC9B,gBAAC,KAAD,CAAkB/I,GAAG,iCAAiCkzD,eAAe,iBAEzGkhB,UAAY,gBAAC,KAAD,CAAMhoB,QAAS,kBAAM1b,EAAMwiC,UAAUnqE,KACb,gBAAC,KAAD,CAAkB/I,GAAG,gCAAgCkzD,eAAe,eAExG/5C,WAAsB,OAAXw5D,QAAW,IAAXA,OAAA,EAAAA,EAAanD,iBAAkBJ,GACpCxjE,EAAK4sB,cAAc67C,GAAexE,iBACtB,OAAX8C,QAAW,IAAXA,OAAA,EAAAA,EAAanD,iBAAkBJ,GAC5BxjE,EAAK4sB,cAAc67C,GAAevE,eAClC,OAGM,uBAAKjiE,UAAU,wCACX,gBAAC27D,GAAA,EAAD,CAAmBqK,gBAAgB,EAAMliE,MAAO5I,EAAK6I,aAAe,GAAIkiE,sBAAsB,EAAM3oB,OAAQ,CAChI5D,KAAM,CACF7B,OAAQ,YAII,uBAAK73C,UAAU,uCACX,uBAAKA,UAAU,4CACT9E,EAAKuqE,WAC9BvqE,EAAKkoE,sBACLloE,EAAKwoE,oBACLxoE,EAAKuoE,gBAAmB,gBAAChK,GAAA,EAAD,CAAatgB,QAAS8pB,EAA6BwD,gBAAiBC,KAAgBC,YAAaC,QAAS1rE,EAAKsoE,kBAAmB7E,aAAc,CACzKkI,gBAAiB,IACjBJ,gBAAiBC,KAAgBC,YACjC3mE,UAAW,oDAEyB,gBAAC2jE,GAAoBzoE,KAGrC,gBAACioE,GAAqCjoE,KAG9C,uBAAK8E,UAAU,qDACf,uBAAKA,UAAU,2BACV9E,EAAKuqE,UAAa,uBAAKzlE,UAAU,mCAC1B,gBAAC,KAAD,CAAkB7N,GAAG,kCAAkCkzD,eAAe,yGAE5EnqD,EAAKuqE,UAAa,iCACVvqE,EAAKkoE,qBAAwB,uBAAK1M,MAAO,CAAEnc,WAAY,IACjD,gBAACmmB,GAAD,CAAcC,QAASzlE,EAAKylE,QAASC,aAAc1lE,EAAKkoE,sBAAyBloE,EAAK4rE,WAAa5rE,EAAK6rE,QAAUlG,QAAS,kBAAMh+B,EAAMg+B,QAAQ3lE,IAAO4lE,OAAQ,kBAAMj+B,EAAMi+B,OAAO5lE,OAEzL,uBAAK8E,UAAU,qCACV6kE,EAAYryE,OAAS,EAAK,gBAACw0E,GAAA,EAAD,CAAqBC,QAASpC,EAAavnB,OAAQ,CAC1G5D,KAAM,CACFF,YAAa,MACbqsB,aAAc,MACd1nB,UAAW,CACP,mBAAUpB,KAAiB6c,eAA3B,aAAU,EAA0BC,kBAGvC,uBAAK75D,UAAU,2D,4iCCnW5B,IAAM+5B,GAAWtM,aAAe,CAC5By5C,iCAAiC,CAAD,uGA2CrBC,GArCuB,SAACtkC,GAAW,IACtCukC,EAAQvkC,EAARukC,IACFrpE,EAAO+3D,eACPyG,EAAMx+D,EAAK4sB,cACX9vB,EAAM,GACZA,EAAIqkE,IAAoB3C,EAAI/d,GAAe0C,eAC3CrmD,EAAIqkE,IAAoB3C,EAAI/d,GAAe6C,eAC3CxmD,EAAIqkE,IAAmB3C,EAAI/d,GAAe8C,cAC1CzmD,EAAIqkE,IAAoB3C,EAAI/d,GAAe2C,eAC3CtmD,EAAIqkE,IAAoB3C,EAAI/d,GAAe+C,eAC3C1mD,EAAIqkE,IAAmB3C,EAAI/d,GAAe4C,cAC1CvmD,EAAIqkE,IAAkB3C,EAAI/d,GAAegD,aACzC3mD,EAAIqkE,IAA6B3C,EAAI/d,GAAekD,wBACpD7mD,EAAIqkE,IAAmB3C,EAAI/d,GAAeiD,cAbG,MAcXplD,WAAe,MAdJ,YActCgrE,EAdsC,KAc3BC,EAd2B,KAevCC,EAAcrrE,GAAYkrE,GAoBhC,OAnBA/qE,aAAgB,WACZ,GAAKkrE,EAAL,CAGA,IAJkB,EAIZC,EAAa,GAJD,KAKDJ,GALC,yBAKPK,EALO,QAMRC,EAAUH,EAAY3oD,WAAU,SAAC9oB,GAAD,OAAOA,EAAE3D,KAAOs1E,EAAGt1E,MACrDu1E,GAAW,GAAKD,EAAG9G,UAAY4G,EAAYG,GAAS/G,SACpD6G,EAAWr0E,KAAKs0E,IAHxB,2BAAuB,IALL,8BAWlB,GAAID,EAAWh1E,OAAS,EAAG,CACvB,IAAMm1E,EAAiBH,EAAW3sE,KAAI,SAAC4sE,GAAD,OAAS,gBAACG,GAAA,EAAD,CAAWjsD,IAAK8rD,EAAGt1E,GAAIiP,QAASrD,EAAK4sB,cAAcoP,GAASmtC,iCAAkC,CACzI1zE,QAASi0E,EAAG3jE,MACZ68D,QAAS9lE,EAAI4sE,EAAG9G,WAChBkH,YAAU,iBACdP,EAAa,gCAAGK,QAErB,CAACP,IACG,gCAAGC,IC1CRS,GAAe,SAAC,GAAwB,IAAtBt+D,EAAqB,EAArBA,MAAOhW,EAAc,EAAdA,QAC3B,OAAQgW,EAAM+wB,kBACV,KAAKF,GACD,OAAQ,gBAAC,KAAD,CAAkBloC,GAAG,yCAAyCkzD,eAAe,6DAA6L16C,OAAQ,CAAEnX,aAChS,KAAK6mC,GACD,OAAQ,gBAAC,KAAD,CAAkBloC,GAAG,wCAAwCkzD,eAAe,4DAA2L16C,OAAQ,CAAEnX,aAC7R,KAAK6mC,GACD,OAAQ7wB,EAAMrI,MACV,KAAK0jC,GAAUkC,iBACX,OAAQ,gBAAC,KAAD,CAAkB50C,GAAG,kDAAkDkzD,eAAe,wHAA0R16C,OAAQ,CAAEnX,aACtY,QACI,OAAQ,gBAAC,KAAD,CAAkBrB,GAAG,iDAAiDkzD,eAAe,8EAA+N16C,OAAQ,CAAEnX,aAGlV,KAAK6mC,GACD,OAAQ,gBAAC,KAAD,CAAkBloC,GAAG,8CAA8CkzD,eAAe,+DAAiM16C,OAAQ,CAAEnX,aACzS,QACI,OAAQ,gBAAC,KAAD,CAAkBrB,GAAG,+CAA+CkzD,eAAe,gEAAmM16C,OAAQ,CAAEnX,eAG9Su0E,GAAsB,SAACllC,GACzB,IAAM9kC,EAAO+3D,eACLz4C,EAA8BwlB,EAA9BxlB,OAAQ+pD,EAAsBvkC,EAAtBukC,IAAKY,EAAiBnlC,EAAjBmlC,aACfC,EAAsBlqE,EAAK4sB,cAAc6zB,GAAea,OAC9D,OAAQ,gCACChiC,EAAOxC,QAAU,GACtBwC,EACKxiB,KAAI,SAACwiB,EAAQ6qD,GACd,IAAMT,EAAKL,EAAIlxE,MAAK,SAACuxE,GAAD,OAAQA,EAAGt1E,KAAO+1E,KAChC10E,EAAUi0E,EAAKA,EAAG3jE,MAAQ,GAChC,OAAOuZ,EAAOxiB,KAAI,SAAC2O,EAAO4oD,GACtB,OAAQ,gBAAC8T,GAAA,EAAD,CAAYvqD,IAAKy2C,EAAY+T,eAAgBC,KAAe58D,MAAO68D,uBAAwB4B,EAAqB5L,UAAW,kBAAM2L,EAAaE,EAAe9V,KACjJ,gBAAC,GAAD,CAAc5oD,MAAOA,EAAOhW,QAASA,WAI5D8+B,WAiBA61C,GAAeriB,cAdC,SAACjjB,GAAW,IAC7BukC,EAA4WvkC,EAA5WukC,IAAKgB,EAAuWvlC,EAAvWulC,sBAAuBC,EAAgVxlC,EAAhVwlC,oBAAqBC,EAA2TzlC,EAA3TylC,mBAAoBC,EAAuS1lC,EAAvS0lC,4BAA6BC,EAA0Q3lC,EAA1Q2lC,yBAA0BC,EAAgP5lC,EAAhP4lC,gBAAiBC,EAA+N7lC,EAA/N6lC,iBAAkBC,EAA6M9lC,EAA7M8lC,eAAgBC,EAA6L/lC,EAA7L+lC,cAAeC,EAA8KhmC,EAA9KgmC,6BAA8BC,EAAgJjmC,EAAhJimC,6BAA8BC,EAAkHlmC,EAAlHkmC,4BAA6BC,EAAqFnmC,EAArFmmC,qCAAsCC,EAA+CpmC,EAA/ComC,oBAAqBC,EAA0BrmC,EAA1BqmC,qBAC1V,OAAQ,gCACA,gBAACC,GAAD,CAAiBf,sBAAuBA,EAAuBS,6BAA8BA,IAC5FR,EAAoBxtD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQgrD,EAAqBjB,IAAKA,EAAKY,aAAcc,MAC5GJ,GAAoBA,EAAiB7tD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQqrD,EAAkBtB,IAAKA,EAAKY,aAAcc,IAC9HR,EAAmBztD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQirD,EAAoBlB,IAAKA,EAAKY,aAAce,MAC1GN,GAAmBA,EAAgB5tD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQorD,EAAiBrB,IAAKA,EAAKY,aAAce,IAC3HR,EAA4B1tD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQkrD,EAA6BnB,IAAKA,EAAKY,aAAcgB,MAC5HR,GAA4BA,EAAyB3tD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQmrD,EAA0BpB,IAAKA,EAAKY,aAAcgB,MACpJJ,GAAiBA,EAAc/tD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQurD,EAAexB,IAAKA,EAAKY,aAAciB,MACnHN,GAAkBA,EAAe9tD,QAAU,GAAM,gBAAC,GAAD,CAAqBwC,OAAQsrD,EAAgBvB,IAAKA,EAAKY,aAAckB,QAexHC,GAAkBrjB,cAXC,SAACjjB,GAAW,IAChCulC,EAA0BvlC,EAA1BulC,sBACFgB,GAAiC,OAArBhB,QAAqB,IAArBA,OAAA,EAAAA,EAAuB7tC,oBAAqBF,GAExD4tC,EADOnS,eACoBnrC,cAAc6zB,GAAea,OAC9D,OAAQ,gCACC+oB,GAA0B,gBAAClC,GAAA,EAAD,CAAYC,eAAgBiD,EAAYhD,KAAeiD,QAAUjD,KAAe58D,MAAO68D,uBAAwB4B,EAAqB5L,UAAWx5B,EAAMgmC,8BACvKO,EAAa,gBAAC,KAAD,CAAkBj3E,GAAG,kDAAkDkzD,eAAe,qHAAwP,gBAAC,KAAD,CAAkBlzD,GAAG,yCAAyCkzD,eAAe,4FClEhbtrB,GAAWtM,aAAe,CACnC67C,0BAA0B,CAAD,uECFhBl0E,GACA,GADAA,GAEH,OAFGA,GAID,SAJCA,GAKC,WALDA,GAMC,WANDA,GAOD,SAECm0E,GACA,UADAA,GAGD,S,qBCTL,SAASC,GAAgB7tD,EAAK8tD,EAAkBC,GAsCnD,OArCuB,SAAC30E,EAAGC,GACvB,IAAM20E,EAAS50E,EAAE4mB,GACXiuD,EAAS50E,EAAE2mB,GAEjB,GAAY,qBAARA,EAA4B,CAC5B,IAAKguD,IAAWC,EACZ,OAAO,EAEN,IAAKD,EACN,OAAO,EAEN,IAAKC,EACN,OAAQ,EAEZ,IAAMC,EAAQC,KAAGC,OAAOJ,GAClBK,EAAQF,KAAGC,OAAOH,GAExB,OADuBK,GAAaR,EAC7BS,CAAeL,EAAOG,GAE5B,OAAI7uE,KAAEgvE,SAASR,IAAWxuE,KAAEgvE,SAASP,GACfQ,GAAaX,EAAkBC,EAC/CW,CAAeV,EAAQC,GAEzBzuE,KAAEmvE,SAASX,IAAWxuE,KAAEmvE,SAASV,GACfK,GAAaR,EAC7BS,CAAeP,EAAQC,GAG1BD,EAASC,EACFH,EAAmB,GAAK,EAE1BE,EAASC,EACPH,GAAoB,EAAI,EAE5B,GAKZ,IAAMW,GAAe,SAACX,EAAkBC,GAyB3C,OAxBuB,SAAC30E,EAAGC,GACvB,OAAKD,GAAMC,EAGDD,EAGAC,GAGN00E,IACA30E,EAAI20E,EAAgB30E,GACpBC,EAAI00E,EAAgB10E,IAEpBF,GAA6BC,EAAGC,GAAK,EAC9By0E,EAAmB,GAAK,EAE1B30E,GAA6BC,EAAGC,GAAK,EACnCy0E,GAAoB,EAAI,EAGxB,IAbC,EAHD,EAHA,IAwBNQ,GAAe,SAACR,GAUzB,OATuB,SAAC10E,EAAGC,GACvB,OAAID,EAAIC,EACGy0E,EAAmB,GAAK,EAE1B10E,EAAIC,EACFy0E,GAAoB,EAAI,EAE5B,ICjER,IAAMc,GAAiC,SAACrvE,GAAD,OAAWA,EAAKoK,oBAAsBpK,EAAK6sB,mBAM5EyiD,GAAgB70E,cAAQ,SAAC80E,GAClC,IAAMC,EAAa,GAyDnB,OAxDAD,EAAaxmD,SAAQ,SAAC0mD,GAElB,GAD8BA,EAAtBp1E,oBACkBH,GAA1B,CAFkC,IAK1BjD,EAAqVw4E,EAArVx4E,GAAU2R,EAA2U6mE,EAAjV93E,KAAa8tE,EAAoUgK,EAApUhK,QAASiK,EAA2TD,EAA3TC,eAAgBvlE,EAA2SslE,EAA3StlE,WAAYqB,EAA+RikE,EAA/RjkE,WAA+B88D,EAAgQmH,EAAnRE,kBAAsC9mE,EAA6O4mE,EAA7O5mE,YAAgCgkB,EAA6M4iD,EAAhOG,kBAAkDhmE,EAA8K6lE,EAA1LI,WAAsC7xE,EAAoJyxE,EAApKK,eAA+CC,EAAqHN,EAAtIO,gBAAgDlyE,EAAsF2xE,EAAtGQ,eAA+CC,EAAuDT,EAAxEU,gBAAgC/lE,EAAwCqlE,EAAxCrlE,kBAAmBgmE,EAAqBX,EAArBW,GAAIv0E,EAAiB4zE,EAAjB5zE,YACtU8sE,EAAax+D,EAAaA,EAAW0c,eAAY7pB,EACjD0rE,EAAYl9D,EAAaA,EAAWqb,eAAY7pB,EAEhD5C,EAAQs1E,IAAmB1L,GAAe0L,EAAiBjK,EAC3D8E,EAfY,SAACkF,GACvB,OAAOA,EAAYp1E,kBAAkB7D,gBAAkB0D,GAclCm2E,CAAWZ,GACtBa,EAAal2E,IAAU4pE,GACvBuM,EAAan2E,IAAU4pE,GACvB8F,EAAY1vE,IAAU4pE,GACtBwM,EAAYp2E,IAAU4pE,GACtBkE,EAAsB9tE,IAAU4pE,GAChCyM,EAAar2E,IAAU4pE,GACvB+F,GAAoBQ,IAAaT,GAAa0G,KAAetI,IAAwB99D,EACrFo+D,OAAmCxrE,IAAfmN,EACpBo+D,GAAkBC,KAAuBG,EAAa,GACtDiD,GAAYrB,GAAYiG,IAAclI,GAAqBE,GAAqBE,EAAYC,GAC5FtE,EAAkBF,GAAmBnmE,EAAc+xE,EAAejyE,EAAcoyE,GACtFV,EAAWv3E,KAAK,CACZwtE,QAASrrE,EACToqE,WAAYsF,EACZ8B,WACAC,QAAS/B,EACTC,mBACAlhE,cACA6/D,YACAzxE,KACA0xE,aACA//D,QACA4/D,oBACAD,iBACAkI,aACAH,aACAxG,YACAyG,aACAC,YACAjG,WACArC,sBACAr7C,oBACAjjB,WACA5L,eACA+xE,gBACAjyE,eACAoyE,gBACA5H,oBACA31C,UAAWy9C,IAAOnM,GAClBjgD,YAAY,EACZ5Z,oBACAi6D,kBACAxoE,oBAGD2zE,KA8BJ,IAAMkB,GAAqBj2E,cAAQ,SAACoe,EAAiBJ,GACxD,IAAM+2D,EAAa,GACfmB,EAAa,OAAGl4D,QAAH,IAAGA,OAAH,EAAGA,EAAY6lB,UAsEhC,OArEAzlB,EAAgBkQ,SAAQ,SAACoG,GAAoB,IAC1ByhD,EAAkBzhD,EAAzB/0B,MACR,GAAIw2E,IAAkBh+C,EAAc5wB,oBAAoB6uE,SAAxD,CAFwC,IAKhC55E,EAA6Qk4B,EAA7Ql4B,GAAI2R,EAAyQumB,EAAzQvmB,MAAO8mE,EAAkQvgD,EAAlQugD,eAAgBljD,EAAkP2C,EAAlP3C,UAAWC,EAAuO0C,EAAvO1C,WAAY5jB,EAA2NsmB,EAA3NtmB,YAAae,EAA8MulB,EAA9MvlB,SAAU5L,EAAoMmxB,EAApMnxB,aAA+B+xE,EAAqK5gD,EAAtLrjB,gBAAgChO,EAAsJqxB,EAAtJrxB,aAA+BoyE,EAAuH/gD,EAAxItjB,gBAAgC5B,EAAwGklB,EAAxGllB,OAAQpO,EAAgGszB,EAAhGtzB,YAAagxB,EAAmFsC,EAAnFtC,kBAAmBH,EAAgEyC,EAAhEzC,gBAAiBtiB,EAA+C+kB,EAA/C/kB,kBAAmB1C,EAA4BynB,EAA5BznB,uBACnPihE,EAAa9nE,KAAO+lB,SAAS6F,GAAY5F,UACzC6hD,EAAY7nE,KAAO+lB,SAAS4F,GAAW3F,UACvCzsB,EAvCd,SAAoD02E,GAChD,OAAQA,GACJ,KAAKl+C,EAAc5wB,oBAAoBgf,SACnC,OAAOgjD,GACX,KAAKpxC,EAAc5wB,oBAAoB6uE,SACnC,OAAO7M,GACX,KAAKpxC,EAAc5wB,oBAAoB+uE,OACnC,OAAO/M,GACX,KAAKpxC,EAAc5wB,oBAAoBgvE,kBACnC,OAAOhN,GACX,KAAKpxC,EAAc5wB,oBAAoBivE,UACnC,OAAOjN,GACX,KAAKpxC,EAAc5wB,oBAAoBkvE,YACnC,OAAOlN,GACX,KAAKpxC,EAAc5wB,oBAAoBrD,QACnC,OAAOqlE,GACX,KAAKpxC,EAAc5wB,oBAAoB5D,SACnC,OAAO4lE,GACX,KAAKpxC,EAAc5wB,oBAAoBmvE,QACnC,OAAOnN,GACX,KAAKpxC,EAAc5wB,oBAAoB1D,SACnC,OAAO0lE,GACX,KAAKpxC,EAAc5wB,oBAAoBovE,SACnC,OAAOpN,GACX,QACI,OAAOA,IAcGqN,CAA2CT,GACnDvM,EAAkBC,GAAwBtmE,EAAc+xE,EAAejyE,EAAcoyE,GACrFzK,EAAUiK,IAAmB1L,GAAe0L,EAAiBt1E,EAC7DmwE,EAAW9E,IAAYzB,GACvBsM,EAAa7K,IAAYzB,GACzBuM,EAAa9K,IAAYzB,GACzB8F,EAAYrE,IAAYzB,GACxBwM,EAAY/K,IAAYzB,GACxBkE,EAAsBzC,IAAYzB,GAClCwG,EAAgB/E,IAAYzB,GAC5BsN,EAAc7L,IAAYzB,GAC1BuN,EAAgB9L,IAAYzB,GAC5BwE,OAAmCxrE,IAAf2rE,EACpBJ,GAAkBC,KAAuBG,EAAa,GACtD6I,EAAmBhJ,GAAqBE,EAAYC,EACpDoB,GAAoBQ,IAAaT,GAAa0G,KAAetI,GAAuBsJ,EACpF5F,GAAYrB,GAAYiG,GAAagB,EACrC3F,EAAU/B,GAAa0H,EACvBpH,GAAcN,GAAa0G,IAAcgB,EACzCvH,GAAeH,GAAa0G,IAAcgB,EAC1C5tE,EAAS,OAAG+sE,QAAH,IAAGA,OAAH,EAAGA,EAAe31E,MAAK,SAACy2E,GAAD,aAAQ,UAAAA,EAAG56E,kBAAH,eAAeI,KAAMA,KACnEu4E,EAAWv3E,KAAK,CACZwtE,UACAjB,WAAYsF,EACZ8B,WACAC,UACA9B,mBACAlhE,cACA6/D,YACAzxE,KACA0xE,aACA//D,QACA4/D,oBACAD,iBACA+H,aACAxG,YACAyG,aACAC,YACAjG,WACArC,sBACAoJ,cACAC,gBACA3nE,WACA5L,eACA+xE,gBACAjyE,eACAoyE,gBACAv9C,UAAW1oB,IAAW2oB,EAActxB,OAAOi1B,QAC3CvS,YAAY,EACZqgD,kBACAxoE,cACAysE,oBAAqB57C,EACrBtiB,kBAAmBA,IAAsB2W,EAAkB3f,YAAYua,QACvEkR,oBACAo9C,cACAG,aACAI,gBACA5mE,YACA8D,+BAGD8nE,KAEEkC,GAA4Bj3E,cAAQ,SAACL,GAC9C,IAAM6vB,EAAU0M,GAA2Bv8B,GACrC+uE,EAAmBvqC,GAAwBxkC,GAC3CsqE,EAA4BtmC,GAAYhkC,GACxCigE,EAA0B37B,GAAUtkC,GACpCu3E,EAAqB/yD,GAAaxkB,GAClCw3E,EAAgBx3E,EAAMM,IAAI,iBAC1Bm3E,EAAuBz3E,EAAMM,IAAI,wBACjC60E,EAAesC,EAAqBn3E,IAAI,gBAC1CwxE,EAAMoD,GAAcC,GAClBpC,EAAsB0E,EAAqBn3E,IAAI,eAC/C0yE,EAAqByE,EAAqBn3E,IAAI,cAC9C2yE,EAA8BwE,EAAqBn3E,IAAI,uBACvDo3E,EAAS5C,IAAa,GACxB6C,EAAkB9mD,eAAIihD,EACrB90E,QAAO,SAACwD,GAAD,OAAOA,EAAEgO,SAChByc,MAAK,SAACxrB,EAAGC,GAAJ,eAAUg4E,EAAM,UAACj4E,EAAE+O,aAAH,QAAY,GAAZ,UAAgB9O,EAAE8O,aAAlB,QAA2B,OAChDjJ,KAAI,SAAC/E,GAAD,MAAO,CAACA,EAAEgO,MAAOvN,GAAmBT,EAAEiB,aAAejB,EAAEiB,YAAc,QAC1EwP,EAAoBumE,EAAcl3E,IAAI,qBAC1C,GAAKuvB,EAmBA,CACD,IAAM+nD,EAAqB53E,EAAMM,IAAI,sBAC/Bu3E,EAA+B73E,EAAMM,IAAI,gCACzCw3E,EAAuBD,EAA6Bv3E,IAAI,mBACxDy3E,EAA6BF,EAA6Bv3E,IAAI,4BAC9D8yE,EAAmByE,EAA6Bv3E,IAAI,eACpD6yE,EAAkB0E,EAA6Bv3E,IAAI,cACnD4yE,EAA2B2E,EAA6Bv3E,IAAI,uBAC5DgzE,EAAgBuE,EAA6Bv3E,IAAI,iBACjD+yE,EAAiBwE,EAA6Bv3E,IAAI,kBAClD+d,EAAaw5D,EAA6Bv3E,IAAI,cAC9C03E,EAAW1B,GAAmBwB,EAAsBz5D,GACpD45D,EAAyBL,EAAmBt3E,IAAI,qBAChD43E,EAAsBnxD,GAAe8wD,EAA6B/wD,WAOxE,OANAgrD,EAAMA,EAAI/rE,OAAOiyE,GACjBL,EAAkB9mD,eAAIihD,EACjB90E,QAAO,SAACwD,GAAD,OAAOA,EAAEgO,SAChByc,MAAK,SAACxrB,EAAGC,GAAJ,eAAUg4E,EAAM,UAACj4E,EAAE+O,aAAH,QAAY,GAAZ,UAAgB9O,EAAE8O,aAAlB,QAA2B,OAChDjJ,KAAI,SAAC/E,GAAD,MAAO,CAACA,EAAEgO,MAAOvN,GAAmBT,EAAEiB,aAAejB,EAAEiB,YAAc,QAEvE,CACHqwE,MACA6F,kBACA7E,sBAAuBiF,EACvBhF,sBACAC,qBACAC,8BACAlR,UAAWmW,EACXjnE,kBATJA,EAAoBgnE,EAUhBlJ,mBACAzE,4BACAgJ,gBACAD,iBACA8E,qBAAsBtoD,EACtBujD,mBACAD,kBACAD,2BACAjT,0BACAsX,qBACAl5D,cAzDJ,IAAM0jD,EAAYh7C,GAAe0wD,EAAqB3wD,WAEtD,MAAO,CACHgrD,MACAgB,sBAH0B2E,EAAqBn3E,IAAI,yBAInDyyE,sBACAC,qBACAC,8BACA0E,kBACA1mE,oBACA8wD,YACAgN,mBACAzE,4BACA6N,qBAAsBtoD,EACtBowC,0BACAsX,yBA8CCa,GAAiC/3E,cAAQ,SAACL,GACnD,IAAM0sC,EAAU3iC,GAAW/J,GAG3B,MAAO,CACHq4E,uBAH2Bf,GAA0Bt3E,GAIrD0sC,UACAphB,sBAJ0BphB,GAA0BlK,OCrQtDykC,I,OAAWtM,aAAe,CAC5BmgD,yBAAyB,CAAD,iFAMtBC,GAAmB,SAAChrC,GAAW,IACzBk2B,EAAmCl2B,EAAnCk2B,+BACR,OAAQ,gBAACrb,GAAA,EAAD,CAAOE,gBAAgB,SAAS8Y,MAAO,CAAEoX,UAAW,WACpD,uBAAK37E,GAAG,gCAAgCukE,MAAO,CAAEtd,WAAY,SACzD,gBAAC6E,GAAA,EAAD,CAAMC,SAAS,iBAEnB,uBAAKl+C,UAAU,2BACT+4D,GAAmC,gBAAC,KAAD,CAAkB5mE,GAAG,yBAAyBkzD,eAAe,4CACjG0T,GAAkC,gBAAC,KAAqBh/B,GAAS6zC,2BAEtE,uBAAK5tE,UAAU,uBAAuB02D,MAAO,CAAE7b,SAAU,WACnDke,GAAmC,gBAAC,KAAD,CAAkB5mE,GAAG,+BAA+BkzD,eAAe,qFACvG0T,GAAmC,gBAAC,KAAD,CAAkB5mE,GAAG,oCAAoCkzD,eAAe,wEAI/G0oB,GAAe,SAAClrC,GAAW,IAC5BmrC,EAAoEnrC,EAApEmrC,YAAapO,EAAuD/8B,EAAvD+8B,0BAA2BrK,EAA4B1yB,EAA5B0yB,wBAChD,GAAIyY,EACA,OAAQ,gBAAC,GAAD,CAAkBjV,+BAAgC6G,GAA6BrK,IAE3F,GAAIqK,GAA6BrK,EAC7B,OAAQ,gBAAC7X,GAAA,EAAD,CAAOE,gBAAgB,SAASD,cAAc,SAASG,MAAI,EAACC,cAAY,GACxE,uBAAK5rD,GAAG,4BACJ,gBAACurD,GAAA,EAAMM,KAAP,KACI,uBAAK7rD,GAAG,mCACJ,uBAAK6N,UAAU,yCACX,gBAAC,KAAqB+5B,GAAS6zC,6BAI3C,gBAAClwB,GAAA,EAAMM,KAAP,KACI,gBAACN,GAAA,EAAD,CAAO6a,YAAU,EAAC5a,cAAc,SAASC,gBAAgB,UACrD,gBAACF,GAAA,EAAMM,KAAP,KACI,uBAAK7rD,GAAG,iCACJ,gBAAC8rD,GAAA,EAAD,CAAMC,SAAS,gCAGtB0hB,GAA8B,gBAACliB,GAAA,EAAMM,KAAP,CAAYV,OAAQ,CAAE5D,KAAM,CAAEmB,SAAU,WAC/D,gBAAC,KAAD,CAAkB1oD,GAAG,+BAA+BkzD,eAAe,wLAE1EkQ,GAA4B,gBAAC7X,GAAA,EAAMM,KAAP,CAAYV,OAAQ,CAAE5D,KAAM,CAAEmB,SAAU,WAC7D,gBAAC,KAAD,CAAkB1oD,GAAG,6BAA6BkzD,eAAe,yGAOjG,IAAM4oB,EAAiB,gBAAC,KAAD,CAAMtoB,KAAK,oCAC1B,gBAAC,KAAD,CAAkBxzD,GAAG,gCAAgCkzD,eAAe,0BAEtE6oB,EAA0B,yEAChC,OAAQ,gBAACxwB,GAAA,EAAD,CAAOE,gBAAgB,SAASD,cAAc,SAASG,MAAI,EAACC,cAAY,GACxE,uBAAK5rD,GAAG,4BACJ,gBAACurD,GAAA,EAAMM,KAAP,KACI,uBAAK7rD,GAAG,mCACJ,uBAAKA,GAAG,wBAAwB6N,UAAU,yCACtC,gBAAC,KAAD,CAAkB7N,GAAG,sBAAsBkzD,eAAe,mDAItE,gBAAC3H,GAAA,EAAMM,KAAP,KACI,gBAACN,GAAA,EAAD,CAAO6a,YAAY,EAAM5a,cAAc,SAASC,gBAAgB,SAASuwB,MAAI,GACzE,gBAACzwB,GAAA,EAAMM,KAAP,KACI,uBAAK7rD,GAAG,iCACJ,gBAAC8rD,GAAA,EAAD,CAAMC,SAAS,cAAcZ,OAAQ,CAC7D5D,KAAM,CACFyE,UAAW,CACPC,IAAK,CAAExG,MAAO,IAAKC,OAAQ,YAMnB,gBAAC6F,GAAA,EAAMM,KAAP,KACI,gBAACN,GAAA,EAAD,KACI,uBAAKvrD,GAAG,yCACJ,gBAACurD,GAAA,EAAMM,KAAP,KACI,uBAAK7rD,GAAG,uCACJ,uBAAKA,GAAG,4CAA4C6N,UAAU,yCAC1D,gBAAC,KAAD,CAAkB7N,GAAG,gCAAgCkzD,eAAe,mCAExE,2BACI,gBAAC,KAAD,CAAkBlzD,GAAG,4CAA4CkzD,eAAe,+PAA2d16C,OAAQ,CAAEyjE,KAAMH,QAIvkB,gBAACvwB,GAAA,EAAMM,KAAP,KACI,uBAAK7rD,GAAG,uCACJ,uBAAKA,GAAG,4CAA4C6N,UAAU,yCAC1D,gBAAC,KAAD,CAAkB7N,GAAG,qCAAqCkzD,eAAe,gCAE7E,2BACI,gBAAC,KAAD,CAAkBlzD,GAAG,0CAA0CkzD,eAAe,wIAAyU16C,OAAQ,CAAEyjE,KAAMF,gB,+BCnGjdn0C,I,OAAWtM,aAAe,CAC5B4gD,YAAY,CAAD,8DAKXC,cAAc,CAAD,gLAuBJC,GAAezoB,cAjBC,SAACjjB,GAAW,IAC7B4kC,EAA4B5kC,EAA5B4kC,GAAIpL,EAAwBx5B,EAAxBw5B,UAAWmS,EAAa3rC,EAAb2rC,SACjB1qE,EAAQ++B,EAAM9kC,KAAK4sB,cAAcoP,GAASs0C,aAC1CI,EAAU5rC,EAAM9kC,KAAK4sB,cAAcoP,GAASu0C,eAC5CI,EAAc7rC,EAAM9kC,KAAK4sB,cAAc6zB,GAAegB,KACtDmvB,EAAa9rC,EAAM9kC,KAAK4sB,cAAc6zB,GAAeiB,IAC3D,OAAQ,gBAACmvB,GAAA,EAAD,CAAQhI,QAAQ,EAAOvK,UAAWA,EAAWxhB,SAAUvkC,GAAUE,mBAAoBq4D,mBAAoB,CAC7Gj8E,KAAMk8E,KAAW3yB,OACjBr4C,QACA2qE,YAEI,gBAACM,GAAA,EAAD,KACI,gBAACzwB,GAAA,EAAD,CAAeC,QAAS,kBAAMkpB,GAAM+G,EAAS/G,IAAK7rE,KAAM8yE,IACxD,gBAACxZ,GAAA,EAAD,CAAe8Z,WAAS,EAACzwB,QAAS8d,EAAWzgE,KAAM+yE,SC/B5D,SAASM,GAAkBj2E,GAC9B,IAAMk2E,EAAWl2E,EAAa3G,MAAM,KAGpC,MAAO,CAAE88E,KAFID,EAAS,GAEPz4E,IADHy4E,EAAS,IAGlB,SAASE,GAAcD,EAAMrqE,EAAUrO,GAC1C,MAAM,UAAN,OAAiB04E,EAAjB,YAAyBrqE,EAAzB,YAAqCrO,GAEzC,IAAM44E,GAAuB,kCACtB,SAASC,GAAkBp2E,EAAc20B,EAAW/oB,EAAUhB,GACjE,IAAMyrE,EAAW,yBAAqBr2E,EAArB,oDAA6E20B,EAAY,MAAQ,IAAjG,OAAsG/oB,GACjH0qE,GAAY,OAAC1rE,QAAD,IAACA,IAAS,IAAI6W,QAAQ00D,GAAsB,KAAO,UAErE,MAAO,CAAEE,cAAaE,SADR,UAAMD,EAAN,SAGlB,I,gCC2BeE,I,OADsB5pB,cApCC,SAACjjB,GAAW,IAEvB05B,EADN15B,EAAT9kC,KACA4sB,cAFqC,EAGdtuB,YAAe,GAHD,YAGtC0iD,EAHsC,KAG9B4wB,EAH8B,KAIvC31B,EAAiBuiB,EAATxd,EAAaP,GAAeO,OAAcP,GAAeM,MACvE,OAAQ,gBAAC,KAAD,CAAiBljD,KAAMinC,EAAMjnC,KAAMg0E,OAAQ,kBAAMD,GAAa,KAC9D,gBAACza,GAAA,EAAD,CAAeX,UAAWva,EAAOsD,OAAQ,CAC7C5D,KAAM,CACF/B,gBAAiB,cACjB6B,YAAa,IACbqsB,aAAc,IACdntB,UAAW,OACXkC,SAAU,OACV/C,OAAQ,OACR+B,OAAQ,GAEZC,YAAa,CACTlC,gBAAiB,eAErBmC,YAAa,CACTnC,gBAAiB,iBAGb,uBAAK33C,UAAU,2CACX,gBAACi+C,GAAA,EAAD,CAAMC,SAAS,gBAAgBZ,OAAQ,CACnD5D,KAAM,CACFxB,SAAU,OACVC,WAAY,OACZE,MAAO,eAIH,wBAAMr4C,UAAU,2CAA2Cg6C,SChCrEjgB,GAAWtM,aAAe,CAC5B3pB,MAAM,CAAD,qEAKLk2C,MAAM,CAAD,oEAkBM61B,GADc/pB,cAXC,SAACjjB,GAC3B,IAAM05B,EAAM15B,EAAM9kC,KAAK4sB,cACvB,OAAQ,gBAACikD,GAAA,EAAD,CAAQhI,QAAQ,EAAOvK,UAAWx5B,EAAMw5B,UAAWwS,mBAAoB,CAAE/qE,MAAOy4D,EAAIxiC,GAASj2B,QAAUq5D,qBAAsBZ,EAAI/d,GAAea,OAAQxE,SAAUvkC,GAAUE,oBAC5K,gBAAC,KAAD,CAAkBrkB,GAAG,oBAAoBkzD,eAAe,sFACxD,gBAACyqB,GAAA,EAAD,CAAWj9E,KAAM0pE,EAAIxiC,GAASigB,OAAQua,UAAWgI,EAAIxiC,GAASigB,OAAQj4C,UAAU,EAAM5F,MAAO0mC,EAAMktC,QAASC,WAAW,EAAMC,WAAW,EAAOC,kBAAkB,EAAM5yB,OAAQ,CAAE5D,KAAM,CAAEhB,UAAW,GAAImC,SAAU,YAClN,gBAAC,GAAD,CAAuBj/C,KAAMinC,EAAMktC,UACnC,gBAAChB,GAAA,EAAD,KACI,gBAACzwB,GAAA,EAAD,CAAe1iD,KAAM2gE,EAAI/d,GAAeQ,MAAOT,QAAS1b,EAAMw5B,iBClBxEtiC,I,OAAWtM,aAAe,CAC5B0iD,mBAAmB,CAAD,4EAKlBC,qBAAqB,CAAD,6HAKpBC,WAAW,CAAD,wFAqCDC,GAAoBxqB,cA/BC,SAACjjB,GAAW,IAClC0tC,EAA6C1tC,EAA7C0tC,WAAYlU,EAAiCx5B,EAAjCw5B,UAAWmU,EAAsB3tC,EAAtB2tC,YACRjU,EAD8B15B,EAAT9kC,KACpC4sB,cACFwlD,EAAqB5T,EAAIxiC,GAASo2C,oBAClCC,EAAuB7T,EAAIxiC,GAASq2C,sBACpCK,EAAWlU,EAAI/d,GAAeQ,MAC9BqxB,EAAa9T,EAAIxiC,GAASs2C,YAChC,OAAQ,gBAACzB,GAAA,EAAD,CAAQhI,QAAQ,EAAOvK,UAAWA,EAAWxhB,SAAUvkC,GAAUE,mBAAoBq4D,mBAAoB,CAC7Gj8E,KAAMk8E,KAAW3yB,OACjBr4C,MAAOqsE,EACP1B,QAAS2B,GACVM,WAAY,CACXF,YAAaA,EACbG,mBAAoB,uBAEhB,gBAACb,GAAA,EAAD,CAAWj9E,KAAK,SAASm9E,WAAS,EAACrW,UAAU,EAAOuW,kBAAgB,EAACD,WAAW,EAAOluE,UAAU,EAAM5F,MAAOo0E,EAAYhc,UAAW8b,EAAY/yB,OAAQ,CAC7J5D,KAAM,CACFmB,SAAU,YAGV,gBAAC,GAAD,CAAuBj/C,KAAM20E,IAC7B,gBAACxB,GAAA,EAAD,KACI,gBAACzwB,GAAA,EAAD,CAAeC,QAAS8d,EAAWzgE,KAAM60E,EAAUnzB,OAAQ,CACnE5D,KAAM,CACFkB,SAAU,OACV/C,OAAQ,gBAOLy4B,MClDFM,GAAmB,SAAC/tC,GAAW,IAChCya,EAAWza,EAAXya,OACeif,EAAQzG,eAAvBnrC,cACAkxB,EAA8BkB,KAA9BlB,0BACF4B,EAActiD,KAAEygD,MAAM,GAAI,CAAElC,KAAM,CAAE/B,gBAAiBkE,IAA+ByB,GAC1F,OAAQ,gBAACI,GAAA,EAAD,CAAOI,MAAI,EAACC,cAAY,EAACJ,cAAc,SAASL,OAAQG,GACxD,gBAACC,GAAA,EAAMM,KAAP,KACI,gBAAC+X,GAAA,EAAD,CAAS1+D,KAAM4+D,KAAY4a,MAAO72B,MAAOuiB,EAAI/d,GAAeK,kBAI7D+xB,M,qBCujBAE,GAxkBW,CACtB,UACA,WACA,WACA,cACA,WACA,aACA,YACA,YACA,aACA,YACA,iBACA,WACA,WACA,uBACA,kBACA,sBACA,eACA,YACA,YACA,cACA,iBACA,YACA,oBACA,WACA,eACA,WACA,YACA,yBACA,yBACA,eACA,gBACA,iBACA,mBACA,mBACA,WACA,aACA,kBACA,cACA,aACA,WACA,WACA,aACA,aACA,YACA,kBACA,kEACA,aACA,WACA,YACA,gBACA,cACA,mBACA,cACA,mBACA,aACA,YACA,YACA,YACA,YACA,cACA,gBACA,YACA,aACA,aACA,WACA,aACA,sBACA,aACA,YACA,YACA,WACA,kBACA,YACA,YACA,iBACA,WACA,eACA,uBACA,WACA,aACA,eACA,iBACA,mBACA,qBACA,uBACA,WACA,gBACA,WACA,eACA,cACA,WACA,eACA,mBACA,gBACA,aACA,cACA,YACA,YACA,aACA,aACA,YACA,YACA,WACA,cACA,gBACA,YACA,mBACA,aACA,WACA,YACA,WACA,cACA,aACA,kBACA,mBACA,WACA,aACA,cACA,2BACA,YACA,YACA,WACA,WACA,YACA,YACA,sBACA,cACA,gBACA,WACA,WACA,WACA,gBACA,eACA,kBACA,iBACA,eACA,YACA,YACA,mBACA,WACA,WACA,WACA,iBACA,WACA,WACA,YACA,YACA,mBACA,YACA,YACA,cACA,aACA,aACA,aACA,aACA,kBACA,cACA,eACA,gBACA,eACA,iBACA,WACA,YACA,YACA,aACA,cACA,aACA,YACA,WACA,aACA,kBACA,YACA,uBACA,gBACA,iCACA,cACA,eACA,mBACA,eACA,mBACA,YACA,WACA,WACA,eACA,aACA,cACA,eACA,aACA,iBACA,aACA,eACA,YACA,eACA,WACA,eACA,iBACA,eACA,eACA,mBACA,WACA,sBACA,eACA,eACA,eACA,cACA,cACA,cACA,kBACA,gBACA,cACA,cACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,iBACA,iBACA,cACA,eACA,iBACA,iBACA,gBACA,eACA,eACA,kBACA,gBACA,uCACA,kBACA,gBACA,iBACA,cACA,eACA,YACA,WACA,iBACA,kBACA,eACA,WACA,WACA,YACA,aACA,kBACA,aACA,eACA,WACA,mBACA,kBACA,eACA,sBACA,kBACA,oBACA,gBACA,gBACA,iBACA,WACA,gCACA,eACA,iBACA,iBACA,cACA,kBACA,cACA,aACA,8BACA,sBACA,sBACA,cACA,aACA,iBACA,iBACA,cACA,sBACA,iBACA,YACA,wBACA,aACA,kBACA,mBACA,wBACA,aACA,iBACA,gBACA,gBACA,kBACA,cACA,YACA,gBACA,YACA,eACA,mBACA,WACA,WACA,YACA,YACA,YACA,aACA,aACA,WACA,aACA,cACA,kBACA,kBACA,mBACA,YACA,cACA,cACA,aACA,mBACA,mBACA,WACA,aACA,YACA,kBACA,kBACA,aACA,eACA,aACA,kBACA,uBACA,YACA,gBACA,WACA,eACA,iBACA,cACA,eACA,eACA,kBACA,kBACA,oBACA,iBACA,kBACA,iBACA,kBACA,iBACA,iBACA,cACA,eACA,aACA,YACA,YACA,cACA,2BACA,eACA,eACA,iBACA,eACA,kBACA,aACA,YACA,WACA,2BACA,gBACA,iBACA,eACA,0BACA,wBACA,wBACA,WACA,oBACA,gBACA,aACA,WACA,iBACA,iBACA,gBACA,eACA,YACA,eACA,iBACA,MACA,WACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,cACA,iBACA,eACA,aACA,aACA,aACA,eACA,YACA,YACA,YACA,cACA,eACA,kBACA,gBACA,WACA,YACA,cACA,eACA,eACA,YACA,iBACA,YACA,YACA,WACA,eACA,cACA,YACA,eACA,eACA,YACA,iBACA,WACA,WACA,eACA,WACA,WACA,YACA,eACA,iBACA,eACA,aACA,oBACA,gBACA,iBACA,gBACA,aACA,YACA,iBACA,cACA,YACA,aACA,YACA,cACA,YACA,eACA,mBACA,gBACA,iBACA,iBACA,gBACA,sBACA,iBACA,kBACA,cACA,iBACA,eACA,aACA,aACA,mBACA,mBACA,aACA,eACA,cACA,aACA,eACA,kBACA,mBACA,qBACA,eACA,WACA,eACA,iBACA,mBACA,sBACA,qBACA,eACA,kBACA,gBACA,gBACA,aACA,YACA,YACA,eACA,kBACA,kBACA,uBACA,uBACA,iBACA,iBACA,uBACA,uBACA,iBACA,gBACA,cACA,oBACA,eACA,cACA,aACA,WACA,aACA,iBACA,aACA,eACA,gBACA,eACA,kBACA,kBACA,YACA,gBACA,cACA,cACA,gBACA,iBACA,kBACA,iBACA,gBACA,cACA,aACA,cACA,gBACA,eACA,gBACA,gBACA,iBACA,iBACA,aACA,cACA,mBACA,kBACA,eACA,iBACA,eACA,gBACA,eACA,gBACA,iBACA,eACA,gBACA,oBACA,eACA,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A,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,kBAAwB,oBACjCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,kBAAwB,oBACjCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,kBAAwB,oBACjCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,kBAAwB,oBACjCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,iBAAuB,mBAChCA,EAAS,qBAA2B,uBACpCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,qBAA2B,uBACpCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,oBAA0B,sBACnCA,EAAS,iBAAuB,mBAChCA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,iBAAuB,mBAChCA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,gBAAsB,kBAC/BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,gBAAsB,kBAC/BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,mBAAyB,qBAClCA,EAAS,kBAAwB,oBACjCA,EAAS,kBAAwB,oBACjCA,EAAS,kBAAwB,oBACjCA,EAAS,kBAAwB,oBACjCA,EAAS,mBAAyB,qBAClCA,EAAS,kBAAwB,oBACjCA,EAAS,kBAAwB,oBACjCA,EAAS,kBAAwB,oBACjCA,EAAS,kBAAwB,oBACjCA,EAAS,gBAAsB,kBAC/BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,gBAAsB,kBAC/BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,eAAqB,iBAC9BA,EAAS,qBAA2B,uBACpCA,EAAS,qBAA2B,uBACpCA,EAAS,WAAiB,aA16D9B,CA26DGA,MAAcA,IAAY,KC76D7B,IAAMG,IAAmB,wDAClB,SAAStD,MAAsD,IAAtCnuN,EAAqC,uDAA3ByxN,IAAkBtyN,EAAS,uCACjE,CAACja,KAAG2wB,SAAQ,SAACwZ,GAAD,OAAgBA,EAAWrvB,EAASb,MAChDoyN,M,m1CCWJ,gCAAA5qO,EAAA,sEACU+qO,KADV,WAGQ5uL,OAAkBC,KAH1B,uBAIQo1K,KACAhoN,GAAW,oCALnB,0BAQIwhO,KAEAxD,cAAgB,yDAChByD,MAEAz2L,KACM02L,EAAcj0L,SAASs+G,eAAe,QACtC8rC,EAAU8pC,MAEhBh/L,GADMlrC,EAAQ+jO,IAAe3jC,IAE7B+pC,SAAgB,gBAAC,GAAD,CAAMnqO,MAAOA,EAAOogM,QAASA,IAAY6pC,GAIzDzpC,KAtBJ,6C,4DAwBA1yJ,I","file":"static/js/main.ffd14df2.chunk.js","sourcesContent":["export const EnvironmentType = {\r\n    LOCAL: 'LOCAL',\r\n    DEV: 'DEV',\r\n    INSIDERS: 'INSIDERS',\r\n    PROD: 'PROD',\r\n};\r\nexport const hostNames = {\r\n    LOCAL: 'localhost',\r\n    LOCAL_TLS: 'local.dev.labs.azure.com',\r\n    DEV: 'dev.labs.azure.com',\r\n    DEV2: 'dev2.labs.azure.com',\r\n    INSIDERS: 'insiders.labs.azure.com',\r\n    INSIDERS2: 'insiders2.labs.azure.com',\r\n    PROD: 'labs.azure.com',\r\n    PROD_REACT: 'r.labs.azure.com',\r\n};\r\nfunction getEnvironmentType() {\r\n    const hostname = window.location.hostname.toLowerCase();\r\n    switch (hostname) {\r\n        case hostNames.LOCAL:\r\n        case hostNames.LOCAL_TLS:\r\n            return EnvironmentType.LOCAL;\r\n        case hostNames.DEV:\r\n        case hostNames.DEV2:\r\n            return EnvironmentType.DEV;\r\n        case hostNames.INSIDERS:\r\n        case hostNames.INSIDERS2:\r\n            return EnvironmentType.INSIDERS;\r\n        case hostNames.PROD:\r\n        case hostNames.PROD_REACT:\r\n        default:\r\n            return EnvironmentType.PROD;\r\n    }\r\n}\r\nexport const environmentType = getEnvironmentType();\r\n","import { environmentType, EnvironmentType } from '../utils/environment';\r\nimport localSettings from './settings-local.json';\r\nimport devSettings from './settings-dev.json';\r\nimport prodSettings from './settings-prod.json';\r\nlet settings;\r\nswitch (environmentType) {\r\n    case EnvironmentType.LOCAL:\r\n        settings = localSettings;\r\n        break;\r\n    case EnvironmentType.DEV:\r\n        settings = { ...localSettings, ...devSettings };\r\n        break;\r\n    case EnvironmentType.INSIDERS:\r\n    case EnvironmentType.PROD:\r\n    default:\r\n        settings = { ...localSettings, ...prodSettings };\r\n        break;\r\n}\r\nexport default settings;\r\n","export const vNextLabOrLabPlanIdLength = 8;\r\nconst vCurrentLabIdLength = 10;\r\nexport class ResourceId {\r\n    constructor(resourceId, isVNextLabOrLabPlan) {\r\n        if (!resourceId) {\r\n            return;\r\n        }\r\n        this.id = resourceId;\r\n        const parts = this.id.split('/').filter((n) => n !== '');\r\n        if (parts.length > 2 && parts[2].toLowerCase() === 'resourcegroups') {\r\n            this.subscriptionId = parts[1];\r\n            this.resourceGroupName = parts[3];\r\n            this.providerNamespace = parts[5];\r\n            this.type = parts[parts.length - 2];\r\n            this.name = parts[parts.length - 1];\r\n        }\r\n        // Set parent.\r\n        if (!isVNextLabOrLabPlan && parts.length >= vCurrentLabIdLength) {\r\n            this.parent = new ResourceId('/' + parts.slice(0, parts.length - 2).join('/'));\r\n        }\r\n        else if (isVNextLabOrLabPlan && parts.length >= vNextLabOrLabPlanIdLength) {\r\n            this.parent = new ResourceId('/' + parts.slice(0, parts.length - 4).join('/'));\r\n        }\r\n        // Set ancestors.\r\n        this.ancestors = [];\r\n        let current = this.parent;\r\n        while (!!current) {\r\n            this.ancestors.push(current);\r\n            current = current.parent;\r\n        }\r\n        this.ancestors = this.ancestors.reverse();\r\n        // Set full resource type.\r\n        this.fullResourceType = this.providerNamespace;\r\n        for (let i = 0; i < this.ancestors.length; i++) {\r\n            this.fullResourceType += '/' + this.ancestors[i].type;\r\n        }\r\n        this.fullResourceType += '/' + this.type;\r\n    }\r\n    static buildLabId(subscriptionId, resourceGroupName, labAccountName, labName) {\r\n        return (`/subscriptions/${subscriptionId}` +\r\n            `/resourcegroups/${resourceGroupName}` +\r\n            `/providers/microsoft.labservices` +\r\n            `/labaccounts/${labAccountName}` +\r\n            `/labs/${labName}`);\r\n    }\r\n    static buildTemplateId(labId, name) {\r\n        return `${labId}/environmentsettings/${name}`;\r\n    }\r\n    getResourceGroupId() {\r\n        if (!this.subscriptionId || !this.resourceGroupName) {\r\n            return undefined;\r\n        }\r\n        return `/subscriptions/${this.subscriptionId}` + `/resourcegroups/${this.resourceGroupName}`;\r\n    }\r\n    isValidResourceId() {\r\n        return !!this.subscriptionId && !!this.resourceGroupName;\r\n    }\r\n}\r\nexport function isValidResourceId(id) {\r\n    const resourceId = new ResourceId(id);\r\n    return resourceId.isValidResourceId();\r\n}\r\n","export const InitializationState = {\r\n    NotStarted: 'NotStarted',\r\n    Initializing: 'Initializing',\r\n    Success: 'Success',\r\n    Failed: 'Failed',\r\n};\r\n","export const Feature = {\r\n    Dev: 'dev',\r\n    Bastion: 'bastion',\r\n    LabListIntroCheckbox: 'lablistintrocheckbox',\r\n    SkipTemplate: 'skiptemplate',\r\n    ReadOnly: 'readonly',\r\n    TeamsIntegration: 'teamsintegration',\r\n    VNext: 'vnext',\r\n    CanvasIntegration: 'canvasintegration',\r\n};\r\nexport default Feature;\r\n","export const LoadingStoreState = {\r\n    NotStarted: 'NotStarted',\r\n    Updating: 'Updating',\r\n    Loading: 'Loading',\r\n    Loaded: 'Loaded',\r\n    LoadingFailed: 'LoadingFailed',\r\n    UpdateFailed: 'UpdateFailed',\r\n    Updated: 'Updated',\r\n};\r\nexport function getCombinedState(...states) {\r\n    let hasLoading = false;\r\n    let hasNotLoaded = false;\r\n    for (let i = 0; i < states.length; i++) {\r\n        switch (states[i]) {\r\n            case LoadingStoreState.LoadingFailed:\r\n                return LoadingStoreState.LoadingFailed;\r\n            case LoadingStoreState.Loading:\r\n                hasLoading = true;\r\n                hasNotLoaded = true;\r\n                break;\r\n            case LoadingStoreState.NotStarted:\r\n                hasNotLoaded = true;\r\n                break;\r\n        }\r\n    }\r\n    return hasNotLoaded\r\n        ? hasLoading\r\n            ? LoadingStoreState.Loading\r\n            : LoadingStoreState.NotStarted\r\n        : LoadingStoreState.Loaded;\r\n}\r\n","export const Host = {\r\n    Web: 'Web',\r\n    Teams: 'Teams',\r\n    Canvas: 'Canvas',\r\n    Unknown: '',\r\n};\r\nexport default Host;\r\n","let currentLocale;\r\nexport function setCurrentLocale(locale) {\r\n    currentLocale = locale;\r\n}\r\nexport function caseInsensitiveLocaleCompare(a, b) {\r\n    return a.localeCompare(b, currentLocale, { sensitivity: 'accent' });\r\n}\r\nexport function caseInsensitiveCultureInvariantCompare(a, b) {\r\n    return a.localeCompare(b, 'en-001', { sensitivity: 'base' });\r\n}\r\n// the value of currentLocale here is same with what stored in the common store. set locale again here for string comparison with culture\r\nexport function getCurrentLocale() {\r\n    return currentLocale;\r\n}\r\n","export const ProvisioningState = {\r\n    None: 'None',\r\n    Succeeded: 'Succeeded',\r\n    Updating: 'Updating',\r\n    Failed: 'Failed',\r\n    Creating: 'Creating',\r\n    Deleting: 'Deleting',\r\n    Moving: 'Moving',\r\n};\r\nfunction getStateValue(state) {\r\n    return state && (state.provisioningState || state);\r\n}\r\nexport function isTerminalState(state) {\r\n    switch (getStateValue(state)) {\r\n        case ProvisioningState.Succeeded:\r\n        case ProvisioningState.Failed:\r\n            return true;\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nexport function isHealthyState(state) {\r\n    switch (getStateValue(state)) {\r\n        case ProvisioningState.Creating:\r\n        case ProvisioningState.Succeeded:\r\n        case ProvisioningState.Updating:\r\n            return true;\r\n        default:\r\n            return false;\r\n    }\r\n}\r\n","import memoize from 'memoize-one';\r\nimport { InitializationState } from '../state/common-store';\r\nimport { getCurrentLabAccountId } from './lab-parent-resource-selectors';\r\nimport { isHealthyState } from '../../utils/provisioning-state';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nexport const getLabAccounts = memoize((state) => {\r\n    const labAccountStore = state.get('labAccountStore');\r\n    const labAccounts = labAccountStore.get('labAccounts');\r\n    return labAccounts;\r\n});\r\nexport const getHealthyLabAccounts = memoize((state) => {\r\n    const labAccounts = getLabAccounts(state);\r\n    return labAccounts.filter((o) => isHealthyState(o));\r\n});\r\nexport const getLabAccount = memoize((store, labAccountId) => {\r\n    if (!labAccountId) {\r\n        return undefined;\r\n    }\r\n    const labAccounts = getHealthyLabAccounts(store);\r\n    const labAccount = labAccounts.find((l) => caseInsensitiveCultureInvariantCompare(l.id, labAccountId) === 0);\r\n    return labAccount;\r\n});\r\nexport const getCurrentLabAccount = memoize((store) => {\r\n    const currentLabAccountId = getCurrentLabAccountId(store);\r\n    if (!currentLabAccountId) {\r\n        return undefined;\r\n    }\r\n    return getLabAccount(store, currentLabAccountId);\r\n});\r\nexport const doesCurrentLabAccountExist = memoize((store) => {\r\n    return !!getCurrentLabAccount(store);\r\n});\r\nexport const isValidSupportInfo = (info) => {\r\n    return !!info && (!!info.url || !!info.email || !!info.phone || !!info.instructions);\r\n};\r\nexport const getSupportInfoEmail = memoize((state) => {\r\n    const labAccount = getCurrentLabAccount(state);\r\n    return labAccount?.supportInfo?.email;\r\n});\r\nexport const isRefreshingLabAccounts = memoize((state) => {\r\n    const labAccountStore = state.get('labAccountStore');\r\n    const refreshInitializationState = labAccountStore.get('refreshInitializationState');\r\n    return refreshInitializationState === InitializationState.Initializing;\r\n});\r\nexport const hasRefreshLabAccountsError = memoize((state) => {\r\n    const subscriptionStore = state.get('subscriptionStore');\r\n    const loadSubscriptionError = subscriptionStore.get('error');\r\n    const labAccountStore = state.get('labAccountStore');\r\n    const loadLabAccountLoadError = labAccountStore.get('errors');\r\n    const refreshError = labAccountStore.get('refreshError');\r\n    return !!loadSubscriptionError || loadLabAccountLoadError.size > 0 || !!refreshError;\r\n});\r\nexport const hasRefreshedLabAccounts = memoize((state) => {\r\n    const labAccountStore = state.get('labAccountStore');\r\n    const refreshInitializationState = labAccountStore.get('refreshInitializationState');\r\n    return refreshInitializationState === InitializationState.Success;\r\n});\r\n","var PowerState;\r\n(function (PowerState) {\r\n    PowerState[\"None\"] = \"None\";\r\n    PowerState[\"Running\"] = \"Running\";\r\n    PowerState[\"Starting\"] = \"Starting\";\r\n    PowerState[\"Stopping\"] = \"Stopping\";\r\n    PowerState[\"Stopped\"] = \"Stopped\";\r\n})(PowerState || (PowerState = {}));\r\nexport default PowerState;\r\n","export const Roles = {\r\n    Read: 'Read',\r\n    Write: 'Write',\r\n    LabAssistant: 'LabAssistant',\r\n};\r\nexport const defaultLabRoles = [Roles.Read];\r\nexport const newLabRoles = [Roles.Read, Roles.Write, Roles.LabAssistant];\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport memoize from 'memoize-one';\r\nimport PowerState from '../../utils/power-state';\r\nimport { ProvisioningState } from '../../utils/provisioning-state';\r\nexport const getCurrentTemplateId = memoize((state) => {\r\n    const templateStore = state.get('templateStore');\r\n    const currentTemplateId = templateStore.get('currentTemplate');\r\n    return currentTemplateId;\r\n});\r\nexport const getTemplates = memoize((state) => {\r\n    const templateStore = state.get('templateStore');\r\n    const templates = templateStore.get('templates');\r\n    return templates;\r\n});\r\nexport const getTemplate = memoize((state, templateId) => {\r\n    const templates = getTemplates(state);\r\n    const template = templates.find((t) => t.id === templateId);\r\n    return template;\r\n});\r\nexport const getCurrentTemplate = memoize((state) => {\r\n    const currentTemplateId = getCurrentTemplateId(state);\r\n    if (!currentTemplateId) {\r\n        return undefined;\r\n    }\r\n    const currentTemplate = getTemplate(state, currentTemplateId);\r\n    return currentTemplate;\r\n});\r\nexport const getCores = memoize((sizeData) => {\r\n    return sizeData ? sizeData.size.coresCount : undefined;\r\n});\r\nexport const getIsGpu = memoize((sizeData) => {\r\n    return sizeData ? sizeData.size.gpu === Ml.GpuType.Gpu : false;\r\n});\r\nexport const getTemplateCreateError = memoize((state) => {\r\n    const templateStore = state.get('templateStore');\r\n    const createTemplateError = templateStore.get('createTemplateError');\r\n    return createTemplateError;\r\n});\r\n/**\r\n * As publishing state is updated immediately in the store, use this instead to determine\r\n * whether a template has been published yet.\r\n */\r\nexport const hasBeenPublished = memoize((template) => {\r\n    return !!template.lastPublished;\r\n});\r\nexport const getSshAuthority = memoize((template) => {\r\n    return (template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails &&\r\n        template.resourceSettings.referenceVm.vmStateDetails.sshAuthority);\r\n});\r\nexport const getRdpAuthority = memoize((template) => {\r\n    return (template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails &&\r\n        template.resourceSettings.referenceVm.vmStateDetails.rdpAuthority);\r\n});\r\nexport const isTemplateCreating = memoize((template) => {\r\n    return template && template.provisioningState ? template.provisioningState === ProvisioningState.Creating : false;\r\n});\r\nexport const isTemplateStarting = memoize((template) => {\r\n    return template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails\r\n        ? template.resourceSettings.referenceVm.vmStateDetails.lastKnownPowerState === PowerState.Starting\r\n        : false;\r\n});\r\nexport const isTemplateStopping = memoize((template) => {\r\n    return template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails\r\n        ? template.resourceSettings.referenceVm.vmStateDetails.lastKnownPowerState === PowerState.Stopping\r\n        : false;\r\n});\r\nexport const isTemplateResettingPassword = memoize((template) => {\r\n    return template &&\r\n        template.latestOperationResult &&\r\n        template.latestOperationResult.status &&\r\n        template.latestOperationResult.requestUri\r\n        ? template.latestOperationResult.status === PowerState.Running &&\r\n            template.latestOperationResult.requestUri.indexOf('resetPassword') > -1\r\n        : false;\r\n});\r\nexport const isTemplateScaling = memoize((template) => {\r\n    return template && template.publishingState ? template.publishingState === Ml.PublishingState.Scaling : false;\r\n});\r\nexport const isTemplatePublished = memoize((template) => {\r\n    return template && template.publishingState ? template.publishingState === Ml.PublishingState.Published : false;\r\n});\r\nexport const isTemplatePublishing = memoize((template) => {\r\n    return template && template.publishingState ? template.publishingState === Ml.PublishingState.Publishing : false;\r\n});\r\nexport const isTemplatePublishingOrScaling = memoize((template) => {\r\n    return isTemplatePublishing(template) || isTemplateScaling(template);\r\n});\r\n/** Some operations don't update the latestOperationResult correctly, so we could be returning\r\n * an error message for a previous operation.  This gets the action from the request uri so we can\r\n * check to make sure it is the correct operation.\r\n */\r\nexport const getActionFromUri = memoize((template) => {\r\n    if (template.latestOperationResult && template.latestOperationResult.requestUri) {\r\n        const split = template.latestOperationResult.requestUri.split('?');\r\n        const split2 = split.length > 0 && split[0].split('/');\r\n        if (split2 && split2.length > 0) {\r\n            return split2[split2.length - 1];\r\n        }\r\n    }\r\n});\r\nexport const hasTemplateCreationFailed = memoize((template) => {\r\n    if (template && template.provisioningState && template.provisioningState === ProvisioningState.Failed) {\r\n        if (template &&\r\n            template.latestOperationResult &&\r\n            template.latestOperationResult.httpMethod === 'PUT' &&\r\n            template.latestOperationResult.status === 'Failed') {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n});\r\n","import * as React from 'react';\r\nimport { List } from 'immutable';\r\nimport _ from 'lodash';\r\nimport { findWindows } from 'windows-iana';\r\nimport moment from 'moment';\r\nimport numeral from 'numeral';\r\nimport 'numeral/locales';\r\nimport { trackTrace } from './telemetry/telemetry-channel';\r\nexport function flattenListMap(map) {\r\n    let values = [];\r\n    map.forEach((listValue) => {\r\n        values = [...values, ...listValue.toArray()];\r\n    });\r\n    return values;\r\n}\r\nexport function addToListMap(map, itemToAdd, id) {\r\n    let itemsForId = map.get(id.toLowerCase()) || List([]);\r\n    if (!itemsForId.some((item) => _.isEqual(item, itemToAdd))) {\r\n        itemsForId = itemsForId.concat(itemToAdd);\r\n    }\r\n    return map.set(id.toLowerCase(), itemsForId);\r\n}\r\nexport function removeFromMap(map, itemToRemove, id) {\r\n    const itemsForId = map.get(id.toLowerCase());\r\n    if (!itemsForId) {\r\n        return map;\r\n    }\r\n    const newItemsForId = itemsForId.filter((item) => !_.isEqual(itemToRemove, item));\r\n    return map.set(id.toLowerCase(), newItemsForId);\r\n}\r\nexport function compareByName(a, b) {\r\n    if (a.name.toLowerCase() < b.name.toLowerCase()) {\r\n        return -1;\r\n    }\r\n    else if (a.name.toLowerCase() > b.name.toLowerCase()) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n}\r\nexport function compareByText(a, b) {\r\n    if (a.text.toLowerCase() < b.text.toLowerCase()) {\r\n        return -1;\r\n    }\r\n    else if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n}\r\nexport function guessTimezone() {\r\n    const guess = moment.tz.guess();\r\n    const windowsTimeZone = findWindows(guess);\r\n    return windowsTimeZone;\r\n}\r\n/** For use in functional components to compare old value with new value */\r\nexport function usePrevious(value) {\r\n    const ref = React.useRef();\r\n    React.useEffect(() => {\r\n        ref.current = value;\r\n    });\r\n    return ref.current;\r\n}\r\n/**\r\n * Returns number like 1200 in the form of 1.2k\r\n * Rounds up\r\n */\r\nexport const shortenNumber = (num, locale, intl) => {\r\n    let shortened = '';\r\n    try {\r\n        // some of the languages codes in numeral.js are wrong :(\r\n        if (locale.startsWith('zh')) {\r\n            numeral.locale('chs');\r\n        }\r\n        else if (locale.startsWith('be')) {\r\n            numeral.locale('nl');\r\n        }\r\n        else {\r\n            numeral.locale(locale);\r\n        }\r\n        shortened =\r\n            num > 999\r\n                ? numeral(num).format('0.0a')\r\n                : intl.formatNumber(num, {\r\n                    maximumFractionDigits: 1,\r\n                });\r\n    }\r\n    catch (e) {\r\n        trackTrace(`common.ts: unable to load locale ${locale} for numeral.js, unable to shorten number`);\r\n        shortened = intl.formatNumber(num, {\r\n            maximumFractionDigits: 1,\r\n        });\r\n    }\r\n    return shortened;\r\n};\r\nconst CommonUtilities = {\r\n    flattenListMap,\r\n    addToListMap,\r\n    removeFromMap,\r\n    compareByName,\r\n    guessTimezone,\r\n    usePrevious,\r\n    shortenNumber,\r\n};\r\nexport default CommonUtilities;\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\r\n */\n\n/**\r\n * Defines values for ProvisioningState.\r\n * Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded', 'Failed', 'Locked'\r\n * @readonly\r\n * @enum {string}\r\n */\nexport var ProvisioningState;\n\n(function (ProvisioningState) {\n  /**\r\n   * Resource is in the process of being created.\r\n   */\n  ProvisioningState[\"Creating\"] = \"Creating\";\n  /**\r\n   * New property values are being applied to the resource.\r\n   */\n\n  ProvisioningState[\"Updating\"] = \"Updating\";\n  /**\r\n   * Resource is in the process of being deleted.\r\n   */\n\n  ProvisioningState[\"Deleting\"] = \"Deleting\";\n  /**\r\n   * Resource is in healthy state after creation or update operation.\r\n   */\n\n  ProvisioningState[\"Succeeded\"] = \"Succeeded\";\n  /**\r\n   * Previous operation on the resource has failed leaving resource in unhealthy state.\r\n   */\n\n  ProvisioningState[\"Failed\"] = \"Failed\";\n  /**\r\n   * The resource is locked and changes are currently blocked. This could be due to maintenance or\r\n   * a scheduled operation. The state will go back to succeeded once the locking operation has\r\n   * finished.\r\n   */\n\n  ProvisioningState[\"Locked\"] = \"Locked\";\n})(ProvisioningState || (ProvisioningState = {}));\n/**\r\n * Defines values for EnableState.\r\n * Possible values include: 'Enabled', 'Disabled'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var EnableState;\n\n(function (EnableState) {\n  EnableState[\"Enabled\"] = \"Enabled\";\n  EnableState[\"Disabled\"] = \"Disabled\";\n})(EnableState || (EnableState = {}));\n/**\r\n * Defines values for ConnectionType.\r\n * Possible values include: 'Public', 'Private', 'None'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ConnectionType;\n\n(function (ConnectionType) {\n  ConnectionType[\"Public\"] = \"Public\";\n  ConnectionType[\"Private\"] = \"Private\";\n  ConnectionType[\"None\"] = \"None\";\n})(ConnectionType || (ConnectionType = {}));\n/**\r\n * Defines values for OsType.\r\n * Possible values include: 'Windows', 'Linux'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var OsType;\n\n(function (OsType) {\n  OsType[\"Windows\"] = \"Windows\";\n  OsType[\"Linux\"] = \"Linux\";\n})(OsType || (OsType = {}));\n/**\r\n * Defines values for OsState.\r\n * Possible values include: 'Generalized', 'Specialized'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var OsState;\n\n(function (OsState) {\n  /**\r\n   * Image does not contain any machine and user specific information.\r\n   */\n  OsState[\"Generalized\"] = \"Generalized\";\n  /**\r\n   * Image contains machine and user specific information.\r\n   */\n\n  OsState[\"Specialized\"] = \"Specialized\";\n})(OsState || (OsState = {}));\n/**\r\n * Defines values for ShutdownOnIdleMode.\r\n * Possible values include: 'None', 'UserAbsence', 'LowUsage'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ShutdownOnIdleMode;\n\n(function (ShutdownOnIdleMode) {\n  /**\r\n   * The VM won't be shut down when it is idle.\r\n   */\n  ShutdownOnIdleMode[\"None\"] = \"None\";\n  /**\r\n   * The VM will be considered as idle when there is no keyboard or mouse input.\r\n   */\n\n  ShutdownOnIdleMode[\"UserAbsence\"] = \"UserAbsence\";\n  /**\r\n   * The VM will be considered as idle when user is absent and the resource (CPU and disk)\r\n   * consumption is low.\r\n   */\n\n  ShutdownOnIdleMode[\"LowUsage\"] = \"LowUsage\";\n})(ShutdownOnIdleMode || (ShutdownOnIdleMode = {}));\n/**\r\n * Defines values for CreatedByType.\r\n * Possible values include: 'User', 'Application', 'ManagedIdentity', 'Key'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var CreatedByType;\n\n(function (CreatedByType) {\n  CreatedByType[\"User\"] = \"User\";\n  CreatedByType[\"Application\"] = \"Application\";\n  CreatedByType[\"ManagedIdentity\"] = \"ManagedIdentity\";\n  CreatedByType[\"Key\"] = \"Key\";\n})(CreatedByType || (CreatedByType = {}));\n/**\r\n * Defines values for ResourceIdentityType.\r\n * Possible values include: 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned', 'None'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ResourceIdentityType;\n\n(function (ResourceIdentityType) {\n  ResourceIdentityType[\"SystemAssigned\"] = \"SystemAssigned\";\n  ResourceIdentityType[\"UserAssigned\"] = \"UserAssigned\";\n  ResourceIdentityType[\"SystemAssignedUserAssigned\"] = \"SystemAssigned,UserAssigned\";\n  ResourceIdentityType[\"None\"] = \"None\";\n})(ResourceIdentityType || (ResourceIdentityType = {}));\n/**\r\n * Defines values for LabState.\r\n * Possible values include: 'Draft', 'Publishing', 'Scaling', 'Syncing', 'Published'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var LabState;\n\n(function (LabState) {\n  /**\r\n   * The lab is currently in draft (has not been published).\r\n   */\n  LabState[\"Draft\"] = \"Draft\";\n  /**\r\n   * The lab is publishing.\r\n   */\n\n  LabState[\"Publishing\"] = \"Publishing\";\n  /**\r\n   * The lab is scaling.\r\n   */\n\n  LabState[\"Scaling\"] = \"Scaling\";\n  /**\r\n   * The lab is syncing users.\r\n   */\n\n  LabState[\"Syncing\"] = \"Syncing\";\n  /**\r\n   * The lab has been published.\r\n   */\n\n  LabState[\"Published\"] = \"Published\";\n})(LabState || (LabState = {}));\n/**\r\n * Defines values for CreateOption.\r\n * Possible values include: 'Image', 'TemplateVM'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var CreateOption;\n\n(function (CreateOption) {\n  /**\r\n   * An image is used to create all lab user virtual machines. When this option is set, no template\r\n   * VM will be created.\r\n   */\n  CreateOption[\"Image\"] = \"Image\";\n  /**\r\n   * A template VM will be used to create all lab user virtual machines.\r\n   */\n\n  CreateOption[\"TemplateVM\"] = \"TemplateVM\";\n})(CreateOption || (CreateOption = {}));\n/**\r\n * Defines values for SkuTier.\r\n * Possible values include: 'Free', 'Basic', 'Standard', 'Premium'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var SkuTier;\n\n(function (SkuTier) {\n  SkuTier[\"Free\"] = \"Free\";\n  SkuTier[\"Basic\"] = \"Basic\";\n  SkuTier[\"Standard\"] = \"Standard\";\n  SkuTier[\"Premium\"] = \"Premium\";\n})(SkuTier || (SkuTier = {}));\n/**\r\n * Defines values for RegistrationState.\r\n * Possible values include: 'Registered', 'NotRegistered'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var RegistrationState;\n\n(function (RegistrationState) {\n  /**\r\n   * User has not yet registered with the lab.\r\n   */\n  RegistrationState[\"Registered\"] = \"Registered\";\n  /**\r\n   * User has registered with the lab.\r\n   */\n\n  RegistrationState[\"NotRegistered\"] = \"NotRegistered\";\n})(RegistrationState || (RegistrationState = {}));\n/**\r\n * Defines values for InvitationState.\r\n * Possible values include: 'NotSent', 'Sending', 'Sent', 'Failed'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var InvitationState;\n\n(function (InvitationState) {\n  /**\r\n   * The invitation has not been sent.\r\n   */\n  InvitationState[\"NotSent\"] = \"NotSent\";\n  /**\r\n   * Currently sending the invitation.\r\n   */\n\n  InvitationState[\"Sending\"] = \"Sending\";\n  /**\r\n   * The invitation has been successfully sent.\r\n   */\n\n  InvitationState[\"Sent\"] = \"Sent\";\n  /**\r\n   * There was an error while sending the invitation.\r\n   */\n\n  InvitationState[\"Failed\"] = \"Failed\";\n})(InvitationState || (InvitationState = {}));\n/**\r\n * Defines values for VirtualMachineState.\r\n * Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping', 'ResettingPassword',\r\n * 'Reimaging', 'Redeploying'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var VirtualMachineState;\n\n(function (VirtualMachineState) {\n  /**\r\n   * The VM is currently stopped.\r\n   */\n  VirtualMachineState[\"Stopped\"] = \"Stopped\";\n  /**\r\n   * The VM is starting.\r\n   */\n\n  VirtualMachineState[\"Starting\"] = \"Starting\";\n  /**\r\n   * The VM is running.\r\n   */\n\n  VirtualMachineState[\"Running\"] = \"Running\";\n  /**\r\n   * The VM is stopping.\r\n   */\n\n  VirtualMachineState[\"Stopping\"] = \"Stopping\";\n  /**\r\n   * The VM password is being reset.\r\n   */\n\n  VirtualMachineState[\"ResettingPassword\"] = \"ResettingPassword\";\n  /**\r\n   * The VM is being reimaged.\r\n   */\n\n  VirtualMachineState[\"Reimaging\"] = \"Reimaging\";\n  /**\r\n   * The VM is being redeployed.\r\n   */\n\n  VirtualMachineState[\"Redeploying\"] = \"Redeploying\";\n})(VirtualMachineState || (VirtualMachineState = {}));\n/**\r\n * Defines values for VirtualMachineType.\r\n * Possible values include: 'User', 'Template'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var VirtualMachineType;\n\n(function (VirtualMachineType) {\n  /**\r\n   * A user VM\r\n   */\n  VirtualMachineType[\"User\"] = \"User\";\n  /**\r\n   * A template VM\r\n   */\n\n  VirtualMachineType[\"Template\"] = \"Template\";\n})(VirtualMachineType || (VirtualMachineType = {}));\n/**\r\n * Defines values for RecurrenceFrequency.\r\n * Possible values include: 'Daily', 'Weekly'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var RecurrenceFrequency;\n\n(function (RecurrenceFrequency) {\n  /**\r\n   * Schedule will run every days.\r\n   */\n  RecurrenceFrequency[\"Daily\"] = \"Daily\";\n  /**\r\n   * Schedule will run every week on days specified in weekDays.\r\n   */\n\n  RecurrenceFrequency[\"Weekly\"] = \"Weekly\";\n})(RecurrenceFrequency || (RecurrenceFrequency = {}));\n/**\r\n * Defines values for WeekDay.\r\n * Possible values include: 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',\r\n * 'Saturday'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var WeekDay;\n\n(function (WeekDay) {\n  /**\r\n   * Schedule will run on Sunday\r\n   */\n  WeekDay[\"Sunday\"] = \"Sunday\";\n  /**\r\n   * Schedule will run on Monday\r\n   */\n\n  WeekDay[\"Monday\"] = \"Monday\";\n  /**\r\n   * Schedule will run on Tuesday\r\n   */\n\n  WeekDay[\"Tuesday\"] = \"Tuesday\";\n  /**\r\n   * Schedule will run on Wednesday\r\n   */\n\n  WeekDay[\"Wednesday\"] = \"Wednesday\";\n  /**\r\n   * Schedule will run on Thursday\r\n   */\n\n  WeekDay[\"Thursday\"] = \"Thursday\";\n  /**\r\n   * Schedule will run on Friday\r\n   */\n\n  WeekDay[\"Friday\"] = \"Friday\";\n  /**\r\n   * Schedule will run on Saturday\r\n   */\n\n  WeekDay[\"Saturday\"] = \"Saturday\";\n})(WeekDay || (WeekDay = {}));\n/**\r\n * Defines values for OperationStatus.\r\n * Possible values include: 'NotStarted', 'InProgress', 'Succeeded', 'Failed', 'Canceled'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var OperationStatus;\n\n(function (OperationStatus) {\n  /**\r\n   * The operation has been accepted but hasn't started.\r\n   */\n  OperationStatus[\"NotStarted\"] = \"NotStarted\";\n  /**\r\n   * The operation is running\r\n   */\n\n  OperationStatus[\"InProgress\"] = \"InProgress\";\n  /**\r\n   * The operation Succeeded\r\n   */\n\n  OperationStatus[\"Succeeded\"] = \"Succeeded\";\n  /**\r\n   * The operation failed\r\n   */\n\n  OperationStatus[\"Failed\"] = \"Failed\";\n  /**\r\n   * Not supported yet\r\n   */\n\n  OperationStatus[\"Canceled\"] = \"Canceled\";\n})(OperationStatus || (OperationStatus = {}));\n/**\r\n * Defines values for UsageUnit.\r\n * Possible values include: 'Count'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var UsageUnit;\n\n(function (UsageUnit) {\n  UsageUnit[\"Count\"] = \"Count\";\n})(UsageUnit || (UsageUnit = {}));\n/**\r\n * Defines values for LabServicesSkuTier.\r\n * Possible values include: 'Standard', 'Premium'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var LabServicesSkuTier;\n\n(function (LabServicesSkuTier) {\n  LabServicesSkuTier[\"Standard\"] = \"Standard\";\n  LabServicesSkuTier[\"Premium\"] = \"Premium\";\n})(LabServicesSkuTier || (LabServicesSkuTier = {}));\n/**\r\n * Defines values for ScaleType.\r\n * Possible values include: 'None', 'Manual', 'Automatic'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ScaleType;\n\n(function (ScaleType) {\n  /**\r\n   * The capacity is not adjustable in any way.\r\n   */\n  ScaleType[\"None\"] = \"None\";\n  /**\r\n   * The user must manually scale this SKU in and out.\r\n   */\n\n  ScaleType[\"Manual\"] = \"Manual\";\n  /**\r\n   * The user is permitted to scale this SKU in and out.\r\n   */\n\n  ScaleType[\"Automatic\"] = \"Automatic\";\n})(ScaleType || (ScaleType = {}));\n/**\r\n * Defines values for RestrictionType.\r\n * Possible values include: 'Location'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var RestrictionType;\n\n(function (RestrictionType) {\n  RestrictionType[\"Location\"] = \"Location\";\n})(RestrictionType || (RestrictionType = {}));\n/**\r\n * Defines values for RestrictionReasonCode.\r\n * Possible values include: 'QuotaId', 'NotAvailableForSubscription'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var RestrictionReasonCode;\n\n(function (RestrictionReasonCode) {\n  RestrictionReasonCode[\"QuotaId\"] = \"QuotaId\";\n  RestrictionReasonCode[\"NotAvailableForSubscription\"] = \"NotAvailableForSubscription\";\n})(RestrictionReasonCode || (RestrictionReasonCode = {}));\n/**\r\n * Defines values for Origin.\r\n * Possible values include: 'user', 'system', 'user,system'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var Origin;\n\n(function (Origin) {\n  Origin[\"User\"] = \"user\";\n  Origin[\"System\"] = \"system\";\n  Origin[\"Usersystem\"] = \"user,system\";\n})(Origin || (Origin = {}));\n/**\r\n * Defines values for ActionType.\r\n * Possible values include: 'Internal'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ActionType;\n\n(function (ActionType) {\n  ActionType[\"Internal\"] = \"Internal\";\n})(ActionType || (ActionType = {}));","export const OperationStatus = {\r\n    Running: 'Running',\r\n    Succeeded: 'Succeeded',\r\n    Canceled: 'Canceled',\r\n    Failed: 'Failed',\r\n};\r\nexport default OperationStatus;\r\n","import OperationStatus from '../../utils/operation-status';\r\nexport const isLatestOperation = (lab, operation) => {\r\n    return (!!lab.latestOperationResult &&\r\n        !!lab.latestOperationResult.requestUri &&\r\n        lab.latestOperationResult.requestUri.includes(`${operation}?`));\r\n};\r\nexport const isLabUserSyncFailed = (lab) => {\r\n    return isLatestOperation(lab, 'syncUserList') && lab.latestOperationResult?.status === OperationStatus.Failed;\r\n};\r\nexport const isLabUserSyncRunning = (lab) => {\r\n    return isLatestOperation(lab, 'syncUserList') && lab.latestOperationResult?.status === OperationStatus.Running;\r\n};\r\nexport const isLabUserSyncSucceeded = (lab) => {\r\n    return isLatestOperation(lab, 'syncUserList') && lab.latestOperationResult?.status === OperationStatus.Succeeded;\r\n};\r\nexport const isLabUserSyncing = (lab) => {\r\n    return isLabUserSyncRunning(lab) || !!lab.isSyncPending;\r\n};\r\n","import memoize from 'memoize-one';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nexport const getGroupId = memoize((state) => state.get('groupStore').get('groupId'));\r\nexport const getGroupName = memoize((state) => state.get('groupStore').get('groupName'));\r\nexport const getGroups = memoize((state) => state.get('groupStore').get('groups'));\r\nexport const shouldFilterLabsByGroupId = memoize((state) => state.get('groupStore').get('shouldFilterByGroupId'));\r\nexport const isLoadingGroupName = memoize((state) => state.get('groupStore').get('loadState') === LoadingStoreState.Loading);\r\nexport const isLoadingGroupList = memoize((state) => state.get('groupStore').get('groupsLoadState') === LoadingStoreState.Loading);\r\n","export const ConnectedLms = {\r\n    Teams: 'teams',\r\n    Canvas: 'canvas',\r\n    Unknown: '',\r\n};\r\nexport default ConnectedLms;\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport { CloudErrorMapper, BaseResourceMapper } from \"@azure/ms-rest-azure-js\";\nexport var CloudError = CloudErrorMapper;\nexport var BaseResource = BaseResourceMapper;\nexport var TrackedResourceUpdate = {\n  serializedName: \"TrackedResourceUpdate\",\n  type: {\n    name: \"Composite\",\n    className: \"TrackedResourceUpdate\",\n    modelProperties: {\n      tags: {\n        serializedName: \"tags\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexport var AutoShutdownProfile = {\n  serializedName: \"AutoShutdownProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"AutoShutdownProfile\",\n    modelProperties: {\n      shutdownOnDisconnect: {\n        serializedName: \"shutdownOnDisconnect\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      shutdownWhenNotConnected: {\n        serializedName: \"shutdownWhenNotConnected\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      shutdownOnIdle: {\n        serializedName: \"shutdownOnIdle\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"None\", \"UserAbsence\", \"LowUsage\"]\n        }\n      },\n      disconnectDelay: {\n        serializedName: \"disconnectDelay\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      noConnectDelay: {\n        serializedName: \"noConnectDelay\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      idleDelay: {\n        serializedName: \"idleDelay\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      }\n    }\n  }\n};\nexport var ConnectionProfile = {\n  serializedName: \"ConnectionProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"ConnectionProfile\",\n    modelProperties: {\n      webSshAccess: {\n        serializedName: \"webSshAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      },\n      webRdpAccess: {\n        serializedName: \"webRdpAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      },\n      clientSshAccess: {\n        serializedName: \"clientSshAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      },\n      clientRdpAccess: {\n        serializedName: \"clientRdpAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      }\n    }\n  }\n};\nexport var ResourceOperationError = {\n  serializedName: \"ResourceOperationError\",\n  type: {\n    name: \"Composite\",\n    className: \"ResourceOperationError\",\n    modelProperties: {\n      timestamp: {\n        serializedName: \"timestamp\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      code: {\n        serializedName: \"code\",\n        type: {\n          name: \"String\"\n        }\n      },\n      message: {\n        serializedName: \"message\",\n        type: {\n          name: \"String\"\n        }\n      },\n      action: {\n        serializedName: \"action\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var SystemData = {\n  serializedName: \"systemData\",\n  type: {\n    name: \"Composite\",\n    className: \"SystemData\",\n    modelProperties: {\n      createdBy: {\n        serializedName: \"createdBy\",\n        type: {\n          name: \"String\"\n        }\n      },\n      createdByType: {\n        serializedName: \"createdByType\",\n        type: {\n          name: \"String\"\n        }\n      },\n      createdAt: {\n        serializedName: \"createdAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      lastModifiedBy: {\n        serializedName: \"lastModifiedBy\",\n        type: {\n          name: \"String\"\n        }\n      },\n      lastModifiedByType: {\n        serializedName: \"lastModifiedByType\",\n        type: {\n          name: \"String\"\n        }\n      },\n      lastModifiedAt: {\n        serializedName: \"lastModifiedAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      }\n    }\n  }\n};\nexport var Identity = {\n  serializedName: \"Identity\",\n  type: {\n    name: \"Composite\",\n    className: \"Identity\",\n    modelProperties: {\n      principalId: {\n        readOnly: true,\n        serializedName: \"principalId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      tenantId: {\n        readOnly: true,\n        serializedName: \"tenantId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      type: {\n        serializedName: \"type\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"SystemAssigned\", \"UserAssigned\", \"SystemAssigned,UserAssigned\", \"None\"]\n        }\n      }\n    }\n  }\n};\nexport var Resource = {\n  serializedName: \"Resource\",\n  type: {\n    name: \"Composite\",\n    className: \"Resource\",\n    modelProperties: {\n      id: {\n        readOnly: true,\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      type: {\n        readOnly: true,\n        serializedName: \"type\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var TrackedResource = {\n  serializedName: \"TrackedResource\",\n  type: {\n    name: \"Composite\",\n    className: \"TrackedResource\",\n    modelProperties: __assign(__assign({}, Resource.type.modelProperties), {\n      tags: {\n        serializedName: \"tags\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      location: {\n        required: true,\n        serializedName: \"location\",\n        type: {\n          name: \"String\"\n        }\n      }\n    })\n  }\n};\nexport var LabPlan = {\n  serializedName: \"LabPlan\",\n  type: {\n    name: \"Composite\",\n    className: \"LabPlan\",\n    modelProperties: __assign(__assign({}, TrackedResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      defaultConnectionProfile: {\n        serializedName: \"properties.defaultConnectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"ConnectionProfile\"\n        }\n      },\n      defaultAutoShutdownProfile: {\n        serializedName: \"properties.defaultAutoShutdownProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"AutoShutdownProfile\"\n        }\n      },\n      defaultNetworkProfile: {\n        serializedName: \"properties.defaultNetworkProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"LabPlanNetworkProfile\"\n        }\n      },\n      allowedRegions: {\n        serializedName: \"properties.allowedRegions\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      sharedGalleryId: {\n        serializedName: \"properties.sharedGalleryId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      supportInfo: {\n        serializedName: \"properties.supportInfo\",\n        type: {\n          name: \"Composite\",\n          className: \"SupportInfo\"\n        }\n      },\n      linkedLmsInstance: {\n        serializedName: \"properties.linkedLmsInstance\",\n        type: {\n          name: \"String\"\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      resourceOperationError: {\n        readOnly: true,\n        serializedName: \"properties.resourceOperationError\",\n        type: {\n          name: \"Composite\",\n          className: \"ResourceOperationError\"\n        }\n      },\n      identity: {\n        serializedName: \"identity\",\n        type: {\n          name: \"Composite\",\n          className: \"Identity\"\n        }\n      }\n    })\n  }\n};\nexport var LabPlanNetworkProfile = {\n  serializedName: \"LabPlanNetworkProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"LabPlanNetworkProfile\",\n    modelProperties: {\n      subnetId: {\n        serializedName: \"subnetId\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var SupportInfo = {\n  serializedName: \"SupportInfo\",\n  type: {\n    name: \"Composite\",\n    className: \"SupportInfo\",\n    modelProperties: {\n      url: {\n        serializedName: \"url\",\n        type: {\n          name: \"String\"\n        }\n      },\n      email: {\n        serializedName: \"email\",\n        type: {\n          name: \"String\"\n        }\n      },\n      phone: {\n        serializedName: \"phone\",\n        type: {\n          name: \"String\"\n        }\n      },\n      instructions: {\n        serializedName: \"instructions\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabPlanUpdate = {\n  serializedName: \"LabPlanUpdate\",\n  type: {\n    name: \"Composite\",\n    className: \"LabPlanUpdate\",\n    modelProperties: __assign(__assign({}, TrackedResourceUpdate.type.modelProperties), {\n      defaultConnectionProfile: {\n        serializedName: \"properties.defaultConnectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"ConnectionProfile\"\n        }\n      },\n      defaultAutoShutdownProfile: {\n        serializedName: \"properties.defaultAutoShutdownProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"AutoShutdownProfile\"\n        }\n      },\n      defaultNetworkProfile: {\n        serializedName: \"properties.defaultNetworkProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"LabPlanNetworkProfile\"\n        }\n      },\n      allowedRegions: {\n        serializedName: \"properties.allowedRegions\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      sharedGalleryId: {\n        serializedName: \"properties.sharedGalleryId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      supportInfo: {\n        serializedName: \"properties.supportInfo\",\n        type: {\n          name: \"Composite\",\n          className: \"SupportInfo\"\n        }\n      },\n      linkedLmsInstance: {\n        serializedName: \"properties.linkedLmsInstance\",\n        type: {\n          name: \"String\"\n        }\n      },\n      identity: {\n        serializedName: \"identity\",\n        type: {\n          name: \"Composite\",\n          className: \"Identity\"\n        }\n      }\n    })\n  }\n};\nexport var SaveImageBody = {\n  serializedName: \"SaveImageBody\",\n  type: {\n    name: \"Composite\",\n    className: \"SaveImageBody\",\n    modelProperties: {\n      name: {\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      labVirtualMachineId: {\n        serializedName: \"labVirtualMachineId\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabNetworkProfile = {\n  serializedName: \"LabNetworkProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"LabNetworkProfile\",\n    modelProperties: {\n      subnetId: {\n        serializedName: \"subnetId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      loadBalancerId: {\n        serializedName: \"loadBalancerId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      publicIpId: {\n        serializedName: \"publicIpId\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Lab = {\n  serializedName: \"Lab\",\n  type: {\n    name: \"Composite\",\n    className: \"Lab\",\n    modelProperties: __assign(__assign({}, TrackedResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      autoShutdownProfile: {\n        serializedName: \"properties.autoShutdownProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"AutoShutdownProfile\"\n        }\n      },\n      connectionProfile: {\n        serializedName: \"properties.connectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"ConnectionProfile\"\n        }\n      },\n      virtualMachineProfile: {\n        serializedName: \"properties.virtualMachineProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineProfile\"\n        }\n      },\n      securityProfile: {\n        serializedName: \"properties.securityProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"SecurityProfile\"\n        }\n      },\n      rosterProfile: {\n        serializedName: \"properties.rosterProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"RosterProfile\"\n        }\n      },\n      labPlanId: {\n        serializedName: \"properties.labPlanId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      title: {\n        serializedName: \"properties.title\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        serializedName: \"properties.description\",\n        type: {\n          name: \"String\"\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      networkProfile: {\n        serializedName: \"properties.networkProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"LabNetworkProfile\"\n        }\n      },\n      state: {\n        readOnly: true,\n        serializedName: \"properties.state\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Draft\", \"Publishing\", \"Scaling\", \"Syncing\", \"Published\"]\n        }\n      },\n      resourceOperationError: {\n        readOnly: true,\n        serializedName: \"properties.resourceOperationError\",\n        type: {\n          name: \"Composite\",\n          className: \"ResourceOperationError\"\n        }\n      }\n    })\n  }\n};\nexport var ImageReference = {\n  serializedName: \"ImageReference\",\n  type: {\n    name: \"Composite\",\n    className: \"ImageReference\",\n    modelProperties: {\n      id: {\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      offer: {\n        serializedName: \"offer\",\n        type: {\n          name: \"String\"\n        }\n      },\n      publisher: {\n        serializedName: \"publisher\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sku: {\n        serializedName: \"sku\",\n        type: {\n          name: \"String\"\n        }\n      },\n      version: {\n        serializedName: \"version\",\n        type: {\n          name: \"String\"\n        }\n      },\n      exactVersion: {\n        readOnly: true,\n        serializedName: \"exactVersion\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Sku = {\n  serializedName: \"Sku\",\n  type: {\n    name: \"Composite\",\n    className: \"Sku\",\n    modelProperties: {\n      name: {\n        required: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      tier: {\n        serializedName: \"tier\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Free\", \"Basic\", \"Standard\", \"Premium\"]\n        }\n      },\n      size: {\n        serializedName: \"size\",\n        type: {\n          name: \"String\"\n        }\n      },\n      family: {\n        serializedName: \"family\",\n        type: {\n          name: \"String\"\n        }\n      },\n      capacity: {\n        serializedName: \"capacity\",\n        type: {\n          name: \"Number\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachineAdditionalCapabilities = {\n  serializedName: \"VirtualMachineAdditionalCapabilities\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachineAdditionalCapabilities\",\n    modelProperties: {\n      installGpuDrivers: {\n        serializedName: \"installGpuDrivers\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      }\n    }\n  }\n};\nexport var Credentials = {\n  serializedName: \"Credentials\",\n  type: {\n    name: \"Composite\",\n    className: \"Credentials\",\n    modelProperties: {\n      username: {\n        required: true,\n        serializedName: \"username\",\n        type: {\n          name: \"String\"\n        }\n      },\n      password: {\n        serializedName: \"password\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachineProfile = {\n  serializedName: \"VirtualMachineProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachineProfile\",\n    modelProperties: {\n      createOption: {\n        required: true,\n        serializedName: \"createOption\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Image\", \"TemplateVM\"]\n        }\n      },\n      imageReference: {\n        required: true,\n        serializedName: \"imageReference\",\n        type: {\n          name: \"Composite\",\n          className: \"ImageReference\"\n        }\n      },\n      osType: {\n        readOnly: true,\n        serializedName: \"osType\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Windows\", \"Linux\"]\n        }\n      },\n      sku: {\n        required: true,\n        serializedName: \"sku\",\n        type: {\n          name: \"Composite\",\n          className: \"Sku\"\n        }\n      },\n      additionalCapabilities: {\n        serializedName: \"additionalCapabilities\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineAdditionalCapabilities\"\n        }\n      },\n      usageQuota: {\n        required: true,\n        serializedName: \"usageQuota\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      useSharedPassword: {\n        serializedName: \"useSharedPassword\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      adminUser: {\n        required: true,\n        serializedName: \"adminUser\",\n        type: {\n          name: \"Composite\",\n          className: \"Credentials\"\n        }\n      },\n      nonAdminUser: {\n        serializedName: \"nonAdminUser\",\n        type: {\n          name: \"Composite\",\n          className: \"Credentials\"\n        }\n      }\n    }\n  }\n};\nexport var SecurityProfile = {\n  serializedName: \"SecurityProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"SecurityProfile\",\n    modelProperties: {\n      registrationCode: {\n        readOnly: true,\n        serializedName: \"registrationCode\",\n        type: {\n          name: \"String\"\n        }\n      },\n      openAccess: {\n        serializedName: \"openAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      }\n    }\n  }\n};\nexport var RosterProfile = {\n  serializedName: \"RosterProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"RosterProfile\",\n    modelProperties: {\n      activeDirectoryGroupId: {\n        serializedName: \"activeDirectoryGroupId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ltiContextId: {\n        serializedName: \"ltiContextId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      lmsInstance: {\n        serializedName: \"lmsInstance\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ltiClientId: {\n        serializedName: \"ltiClientId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ltiRosterEndpoint: {\n        serializedName: \"ltiRosterEndpoint\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabUpdate = {\n  serializedName: \"LabUpdate\",\n  type: {\n    name: \"Composite\",\n    className: \"LabUpdate\",\n    modelProperties: __assign(__assign({}, TrackedResourceUpdate.type.modelProperties), {\n      autoShutdownProfile: {\n        serializedName: \"properties.autoShutdownProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"AutoShutdownProfile\"\n        }\n      },\n      connectionProfile: {\n        serializedName: \"properties.connectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"ConnectionProfile\"\n        }\n      },\n      virtualMachineProfile: {\n        serializedName: \"properties.virtualMachineProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineProfile\"\n        }\n      },\n      securityProfile: {\n        serializedName: \"properties.securityProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"SecurityProfile\"\n        }\n      },\n      rosterProfile: {\n        serializedName: \"properties.rosterProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"RosterProfile\"\n        }\n      },\n      labPlanId: {\n        serializedName: \"properties.labPlanId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      title: {\n        serializedName: \"properties.title\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        serializedName: \"properties.description\",\n        type: {\n          name: \"String\"\n        }\n      }\n    })\n  }\n};\nexport var ProxyResource = {\n  serializedName: \"ProxyResource\",\n  type: {\n    name: \"Composite\",\n    className: \"ProxyResource\",\n    modelProperties: __assign({}, Resource.type.modelProperties)\n  }\n};\nexport var User = {\n  serializedName: \"User\",\n  type: {\n    name: \"Composite\",\n    className: \"User\",\n    modelProperties: __assign(__assign({}, ProxyResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      additionalUsageQuota: {\n        serializedName: \"properties.additionalUsageQuota\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      resourceOperationError: {\n        readOnly: true,\n        serializedName: \"properties.resourceOperationError\",\n        type: {\n          name: \"Composite\",\n          className: \"ResourceOperationError\"\n        }\n      },\n      displayName: {\n        readOnly: true,\n        serializedName: \"properties.displayName\",\n        type: {\n          name: \"String\"\n        }\n      },\n      email: {\n        required: true,\n        serializedName: \"properties.email\",\n        type: {\n          name: \"String\"\n        }\n      },\n      registrationState: {\n        readOnly: true,\n        serializedName: \"properties.registrationState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Registered\", \"NotRegistered\"]\n        }\n      },\n      invitationState: {\n        readOnly: true,\n        serializedName: \"properties.invitationState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"NotSent\", \"Sending\", \"Sent\", \"Failed\"]\n        }\n      },\n      invitationSent: {\n        readOnly: true,\n        serializedName: \"properties.invitationSent\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      totalUsage: {\n        readOnly: true,\n        serializedName: \"properties.totalUsage\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      }\n    })\n  }\n};\nexport var UserUpdate = {\n  serializedName: \"UserUpdate\",\n  type: {\n    name: \"Composite\",\n    className: \"UserUpdate\",\n    modelProperties: {\n      additionalUsageQuota: {\n        serializedName: \"properties.additionalUsageQuota\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      }\n    }\n  }\n};\nexport var InviteBody = {\n  serializedName: \"InviteBody\",\n  type: {\n    name: \"Composite\",\n    className: \"InviteBody\",\n    modelProperties: {\n      text: {\n        serializedName: \"text\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachineConnectionProfile = {\n  serializedName: \"VirtualMachineConnectionProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachineConnectionProfile\",\n    modelProperties: {\n      privateIpAddress: {\n        readOnly: true,\n        serializedName: \"privateIpAddress\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sshAuthority: {\n        readOnly: true,\n        serializedName: \"sshAuthority\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sshInBrowserUrl: {\n        readOnly: true,\n        serializedName: \"sshInBrowserUrl\",\n        type: {\n          name: \"String\"\n        }\n      },\n      rdpAuthority: {\n        readOnly: true,\n        serializedName: \"rdpAuthority\",\n        type: {\n          name: \"String\"\n        }\n      },\n      rdpInBrowserUrl: {\n        readOnly: true,\n        serializedName: \"rdpInBrowserUrl\",\n        type: {\n          name: \"String\"\n        }\n      },\n      adminUsername: {\n        readOnly: true,\n        serializedName: \"adminUsername\",\n        type: {\n          name: \"String\"\n        }\n      },\n      nonAdminUsername: {\n        readOnly: true,\n        serializedName: \"nonAdminUsername\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachine = {\n  serializedName: \"VirtualMachine\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachine\",\n    modelProperties: __assign(__assign({}, ProxyResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      state: {\n        readOnly: true,\n        serializedName: \"properties.state\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Stopped\", \"Starting\", \"Running\", \"Stopping\", \"ResettingPassword\", \"Reimaging\", \"Redeploying\"]\n        }\n      },\n      resourceOperationError: {\n        readOnly: true,\n        serializedName: \"properties.resourceOperationError\",\n        type: {\n          name: \"Composite\",\n          className: \"ResourceOperationError\"\n        }\n      },\n      connectionProfile: {\n        readOnly: true,\n        serializedName: \"properties.connectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineConnectionProfile\"\n        }\n      },\n      claimedByUserId: {\n        readOnly: true,\n        serializedName: \"properties.claimedByUserId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      vmType: {\n        readOnly: true,\n        serializedName: \"properties.vmType\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"User\", \"Template\"]\n        }\n      }\n    })\n  }\n};\nexport var ResetPasswordBody = {\n  serializedName: \"ResetPasswordBody\",\n  type: {\n    name: \"Composite\",\n    className: \"ResetPasswordBody\",\n    modelProperties: {\n      username: {\n        required: true,\n        serializedName: \"username\",\n        type: {\n          name: \"String\"\n        }\n      },\n      password: {\n        required: true,\n        serializedName: \"password\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Schedule = {\n  serializedName: \"Schedule\",\n  type: {\n    name: \"Composite\",\n    className: \"Schedule\",\n    modelProperties: __assign(__assign({}, ProxyResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      startAt: {\n        serializedName: \"properties.startAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      stopAt: {\n        serializedName: \"properties.stopAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      recurrencePattern: {\n        serializedName: \"properties.recurrencePattern\",\n        type: {\n          name: \"Composite\",\n          className: \"RecurrencePattern\"\n        }\n      },\n      timeZoneId: {\n        serializedName: \"properties.timeZoneId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      notes: {\n        serializedName: \"properties.notes\",\n        type: {\n          name: \"String\"\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      resourceOperationError: {\n        readOnly: true,\n        serializedName: \"properties.resourceOperationError\",\n        type: {\n          name: \"Composite\",\n          className: \"ResourceOperationError\"\n        }\n      }\n    })\n  }\n};\nexport var RecurrencePattern = {\n  serializedName: \"RecurrencePattern\",\n  type: {\n    name: \"Composite\",\n    className: \"RecurrencePattern\",\n    modelProperties: {\n      frequency: {\n        required: true,\n        serializedName: \"frequency\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Daily\", \"Weekly\"]\n        }\n      },\n      weekDays: {\n        serializedName: \"weekDays\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Enum\",\n              allowedValues: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n            }\n          }\n        }\n      },\n      interval: {\n        serializedName: \"interval\",\n        constraints: {\n          InclusiveMaximum: 365,\n          InclusiveMinimum: 1\n        },\n        type: {\n          name: \"Number\"\n        }\n      },\n      expirationDate: {\n        required: true,\n        serializedName: \"expirationDate\",\n        type: {\n          name: \"DateTime\"\n        }\n      }\n    }\n  }\n};\nexport var ScheduleUpdate = {\n  serializedName: \"ScheduleUpdate\",\n  type: {\n    name: \"Composite\",\n    className: \"ScheduleUpdate\",\n    modelProperties: {\n      startAt: {\n        serializedName: \"properties.startAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      stopAt: {\n        serializedName: \"properties.stopAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      recurrencePattern: {\n        serializedName: \"properties.recurrencePattern\",\n        type: {\n          name: \"Composite\",\n          className: \"RecurrencePattern\"\n        }\n      },\n      timeZoneId: {\n        serializedName: \"properties.timeZoneId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      notes: {\n        serializedName: \"properties.notes\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Image = {\n  serializedName: \"Image\",\n  type: {\n    name: \"Composite\",\n    className: \"Image\",\n    modelProperties: __assign(__assign({}, ProxyResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      enabledState: {\n        serializedName: \"properties.enabledState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      displayName: {\n        readOnly: true,\n        serializedName: \"properties.displayName\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        readOnly: true,\n        serializedName: \"properties.description\",\n        type: {\n          name: \"String\"\n        }\n      },\n      iconUrl: {\n        readOnly: true,\n        serializedName: \"properties.iconUrl\",\n        type: {\n          name: \"String\"\n        }\n      },\n      author: {\n        readOnly: true,\n        serializedName: \"properties.author\",\n        type: {\n          name: \"String\"\n        }\n      },\n      osType: {\n        readOnly: true,\n        serializedName: \"properties.osType\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Windows\", \"Linux\"]\n        }\n      },\n      plan: {\n        readOnly: true,\n        serializedName: \"properties.plan\",\n        type: {\n          name: \"String\"\n        }\n      },\n      termsStatus: {\n        readOnly: true,\n        serializedName: \"properties.termsStatus\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      offer: {\n        readOnly: true,\n        serializedName: \"properties.offer\",\n        type: {\n          name: \"String\"\n        }\n      },\n      publisher: {\n        readOnly: true,\n        serializedName: \"properties.publisher\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sku: {\n        readOnly: true,\n        serializedName: \"properties.sku\",\n        type: {\n          name: \"String\"\n        }\n      },\n      version: {\n        readOnly: true,\n        serializedName: \"properties.version\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sharedGalleryId: {\n        readOnly: true,\n        serializedName: \"properties.sharedGalleryId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      availableRegions: {\n        serializedName: \"properties.availableRegions\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      osState: {\n        readOnly: true,\n        serializedName: \"properties.osState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Generalized\", \"Specialized\"]\n        }\n      }\n    })\n  }\n};\nexport var ImageUpdate = {\n  serializedName: \"ImageUpdate\",\n  type: {\n    name: \"Composite\",\n    className: \"ImageUpdate\",\n    modelProperties: {\n      enabledState: {\n        serializedName: \"properties.enabledState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      }\n    }\n  }\n};\nexport var ErrorAdditionalInfo = {\n  serializedName: \"ErrorAdditionalInfo\",\n  type: {\n    name: \"Composite\",\n    className: \"ErrorAdditionalInfo\",\n    modelProperties: {\n      type: {\n        readOnly: true,\n        serializedName: \"type\",\n        type: {\n          name: \"String\"\n        }\n      },\n      info: {\n        readOnly: true,\n        serializedName: \"info\",\n        type: {\n          name: \"Object\"\n        }\n      }\n    }\n  }\n};\nexport var ErrorDetail = {\n  serializedName: \"ErrorDetail\",\n  type: {\n    name: \"Composite\",\n    className: \"ErrorDetail\",\n    modelProperties: {\n      code: {\n        readOnly: true,\n        serializedName: \"code\",\n        type: {\n          name: \"String\"\n        }\n      },\n      message: {\n        readOnly: true,\n        serializedName: \"message\",\n        type: {\n          name: \"String\"\n        }\n      },\n      target: {\n        readOnly: true,\n        serializedName: \"target\",\n        type: {\n          name: \"String\"\n        }\n      },\n      details: {\n        readOnly: true,\n        serializedName: \"details\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"ErrorDetail\"\n            }\n          }\n        }\n      },\n      additionalInfo: {\n        readOnly: true,\n        serializedName: \"additionalInfo\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"ErrorAdditionalInfo\"\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexport var OperationResult = {\n  serializedName: \"OperationResult\",\n  type: {\n    name: \"Composite\",\n    className: \"OperationResult\",\n    modelProperties: {\n      id: {\n        readOnly: true,\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      status: {\n        required: true,\n        serializedName: \"status\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"NotStarted\", \"InProgress\", \"Succeeded\", \"Failed\", \"Canceled\"]\n        }\n      },\n      startTime: {\n        serializedName: \"startTime\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      endTime: {\n        serializedName: \"endTime\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      percentComplete: {\n        serializedName: \"percentComplete\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      error: {\n        serializedName: \"error\",\n        type: {\n          name: \"Composite\",\n          className: \"ErrorDetail\"\n        }\n      }\n    }\n  }\n};\nexport var UsageName = {\n  serializedName: \"UsageName\",\n  type: {\n    name: \"Composite\",\n    className: \"UsageName\",\n    modelProperties: {\n      localizedValue: {\n        serializedName: \"localizedValue\",\n        type: {\n          name: \"String\"\n        }\n      },\n      skuInstances: {\n        serializedName: \"skuInstances\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      value: {\n        serializedName: \"value\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Usage = {\n  serializedName: \"Usage\",\n  type: {\n    name: \"Composite\",\n    className: \"Usage\",\n    modelProperties: {\n      currentValue: {\n        serializedName: \"currentValue\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      limit: {\n        serializedName: \"limit\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      unit: {\n        serializedName: \"unit\",\n        type: {\n          name: \"String\"\n        }\n      },\n      name: {\n        serializedName: \"name\",\n        type: {\n          name: \"Composite\",\n          className: \"UsageName\"\n        }\n      },\n      id: {\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabServicesSkuCapacity = {\n  serializedName: \"LabServicesSkuCapacity\",\n  type: {\n    name: \"Composite\",\n    className: \"LabServicesSkuCapacity\",\n    modelProperties: {\n      default: {\n        readOnly: true,\n        serializedName: \"default\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      minimum: {\n        readOnly: true,\n        serializedName: \"minimum\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      maximum: {\n        readOnly: true,\n        serializedName: \"maximum\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      scaleType: {\n        readOnly: true,\n        serializedName: \"scaleType\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabServicesSkuCapabilities = {\n  serializedName: \"LabServicesSkuCapabilities\",\n  type: {\n    name: \"Composite\",\n    className: \"LabServicesSkuCapabilities\",\n    modelProperties: {\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      value: {\n        readOnly: true,\n        serializedName: \"value\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabServicesSkuCost = {\n  serializedName: \"LabServicesSkuCost\",\n  type: {\n    name: \"Composite\",\n    className: \"LabServicesSkuCost\",\n    modelProperties: {\n      meterId: {\n        readOnly: true,\n        serializedName: \"meterId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      quantity: {\n        readOnly: true,\n        serializedName: \"quantity\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      extendedUnit: {\n        readOnly: true,\n        serializedName: \"extendedUnit\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabServicesSkuRestrictions = {\n  serializedName: \"LabServicesSkuRestrictions\",\n  type: {\n    name: \"Composite\",\n    className: \"LabServicesSkuRestrictions\",\n    modelProperties: {\n      type: {\n        readOnly: true,\n        serializedName: \"type\",\n        type: {\n          name: \"String\"\n        }\n      },\n      values: {\n        readOnly: true,\n        serializedName: \"values\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      reasonCode: {\n        readOnly: true,\n        serializedName: \"reasonCode\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabServicesSku = {\n  serializedName: \"LabServicesSku\",\n  type: {\n    name: \"Composite\",\n    className: \"LabServicesSku\",\n    modelProperties: {\n      resourceType: {\n        readOnly: true,\n        serializedName: \"resourceType\",\n        type: {\n          name: \"String\"\n        }\n      },\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      tier: {\n        readOnly: true,\n        serializedName: \"tier\",\n        type: {\n          name: \"String\"\n        }\n      },\n      size: {\n        readOnly: true,\n        serializedName: \"size\",\n        type: {\n          name: \"String\"\n        }\n      },\n      family: {\n        readOnly: true,\n        serializedName: \"family\",\n        type: {\n          name: \"String\"\n        }\n      },\n      capacity: {\n        serializedName: \"capacity\",\n        type: {\n          name: \"Composite\",\n          className: \"LabServicesSkuCapacity\"\n        }\n      },\n      capabilities: {\n        readOnly: true,\n        serializedName: \"capabilities\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"LabServicesSkuCapabilities\"\n            }\n          }\n        }\n      },\n      locations: {\n        readOnly: true,\n        serializedName: \"locations\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      costs: {\n        readOnly: true,\n        serializedName: \"costs\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"LabServicesSkuCost\"\n            }\n          }\n        }\n      },\n      restrictions: {\n        readOnly: true,\n        serializedName: \"restrictions\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"LabServicesSkuRestrictions\"\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexport var OperationDisplay = {\n  serializedName: \"Operation-display\",\n  type: {\n    name: \"Composite\",\n    className: \"OperationDisplay\",\n    modelProperties: {\n      provider: {\n        readOnly: true,\n        serializedName: \"provider\",\n        type: {\n          name: \"String\"\n        }\n      },\n      resource: {\n        readOnly: true,\n        serializedName: \"resource\",\n        type: {\n          name: \"String\"\n        }\n      },\n      operation: {\n        readOnly: true,\n        serializedName: \"operation\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        readOnly: true,\n        serializedName: \"description\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Operation = {\n  serializedName: \"Operation\",\n  type: {\n    name: \"Composite\",\n    className: \"Operation\",\n    modelProperties: {\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      isDataAction: {\n        readOnly: true,\n        serializedName: \"isDataAction\",\n        type: {\n          name: \"Boolean\"\n        }\n      },\n      display: {\n        serializedName: \"display\",\n        type: {\n          name: \"Composite\",\n          className: \"OperationDisplay\"\n        }\n      },\n      origin: {\n        readOnly: true,\n        serializedName: \"origin\",\n        type: {\n          name: \"String\"\n        }\n      },\n      actionType: {\n        readOnly: true,\n        serializedName: \"actionType\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var OperationListResult = {\n  serializedName: \"OperationListResult\",\n  type: {\n    name: \"Composite\",\n    className: \"OperationListResult\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"Operation\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedLabPlans = {\n  serializedName: \"PagedLabPlans\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedLabPlans\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"LabPlan\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedLabs = {\n  serializedName: \"PagedLabs\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedLabs\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"Lab\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedUsers = {\n  serializedName: \"PagedUsers\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedUsers\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"User\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedVirtualMachines = {\n  serializedName: \"PagedVirtualMachines\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedVirtualMachines\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"VirtualMachine\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedSchedules = {\n  serializedName: \"PagedSchedules\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedSchedules\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"Schedule\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedImages = {\n  serializedName: \"PagedImages\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedImages\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"Image\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var ListUsagesResult = {\n  serializedName: \"ListUsagesResult\",\n  type: {\n    name: \"Composite\",\n    className: \"ListUsagesResult\",\n    modelProperties: {\n      value: {\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"Usage\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedLabServicesSkus = {\n  serializedName: \"PagedLabServicesSkus\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedLabServicesSkus\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"LabServicesSku\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nexport var acceptLanguage = {\n  parameterPath: \"acceptLanguage\",\n  mapper: {\n    serializedName: \"accept-language\",\n    defaultValue: 'en-US',\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var apiVersion = {\n  parameterPath: \"apiVersion\",\n  mapper: {\n    required: true,\n    isConstant: true,\n    serializedName: \"api-version\",\n    defaultValue: '2023-06-07',\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var filter = {\n  parameterPath: [\"options\", \"filter\"],\n  mapper: {\n    serializedName: \"$filter\",\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var imageName = {\n  parameterPath: \"imageName\",\n  mapper: {\n    required: true,\n    serializedName: \"imageName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var labName = {\n  parameterPath: \"labName\",\n  mapper: {\n    required: true,\n    serializedName: \"labName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var labPlanName = {\n  parameterPath: \"labPlanName\",\n  mapper: {\n    required: true,\n    serializedName: \"labPlanName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var location = {\n  parameterPath: \"location\",\n  mapper: {\n    required: true,\n    serializedName: \"location\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\._]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var nextPageLink = {\n  parameterPath: \"nextPageLink\",\n  mapper: {\n    required: true,\n    serializedName: \"nextLink\",\n    type: {\n      name: \"String\"\n    }\n  },\n  skipEncoding: true\n};\nexport var operationResultId = {\n  parameterPath: \"operationResultId\",\n  mapper: {\n    required: true,\n    serializedName: \"operationResultId\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var resourceGroupName = {\n  parameterPath: \"resourceGroupName\",\n  mapper: {\n    required: true,\n    serializedName: \"resourceGroupName\",\n    constraints: {\n      MaxLength: 90,\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var scheduleName = {\n  parameterPath: \"scheduleName\",\n  mapper: {\n    required: true,\n    serializedName: \"scheduleName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var subscriptionId = {\n  parameterPath: \"subscriptionId\",\n  mapper: {\n    required: true,\n    serializedName: \"subscriptionId\",\n    constraints: {\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var userName = {\n  parameterPath: \"userName\",\n  mapper: {\n    required: true,\n    serializedName: \"userName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var virtualMachineName = {\n  parameterPath: \"virtualMachineName\",\n  mapper: {\n    required: true,\n    serializedName: \"virtualMachineName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/operationsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Operations. */\n\nvar Operations =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Operations.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Operations(client) {\n    this.client = client;\n  }\n\n  Operations.prototype.list = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, listOperationSpec, callback);\n  };\n\n  Operations.prototype.listNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listNextOperationSpec, callback);\n  };\n\n  return Operations;\n}();\n\nexport { Operations }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"providers/Microsoft.LabServices/operations\",\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.OperationListResult\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.OperationListResult\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/labPlansMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a LabPlans. */\n\nvar LabPlans =\n/** @class */\nfunction () {\n  /**\r\n   * Create a LabPlans.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function LabPlans(client) {\n    this.client = client;\n  }\n\n  LabPlans.prototype.listBySubscription = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, listBySubscriptionOperationSpec, callback);\n  };\n\n  LabPlans.prototype.listByResourceGroup = function (resourceGroupName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      options: options\n    }, listByResourceGroupOperationSpec, callback);\n  };\n\n  LabPlans.prototype.get = function (resourceGroupName, labPlanName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      options: options\n    }, getOperationSpec, callback);\n  };\n  /**\r\n   * Operation to create or update a Lab Plan resource.\r\n   * @summary Updates or creates a Lab Plan resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<Models.LabPlansCreateOrUpdateResponse>\r\n   */\n\n\n  LabPlans.prototype.createOrUpdate = function (body, resourceGroupName, labPlanName, options) {\n    return this.beginCreateOrUpdate(body, resourceGroupName, labPlanName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to update a Lab Plan resource.\r\n   * @summary Updates a Lab Plan resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<Models.LabPlansUpdateResponse>\r\n   */\n\n\n  LabPlans.prototype.update = function (body, resourceGroupName, labPlanName, options) {\n    return this.beginUpdate(body, resourceGroupName, labPlanName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to delete a Lab Plan resource. Deleting a lab plan does not delete labs associated\r\n   * with a lab plan, nor does it delete shared images added to a gallery via the lab plan permission\r\n   * container.\r\n   * @summary Deletes a Lab Plan resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  LabPlans.prototype.deleteMethod = function (resourceGroupName, labPlanName, options) {\n    return this.beginDeleteMethod(resourceGroupName, labPlanName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Saves an image from a lab VM to the attached shared image gallery.\r\n   * @summary Save an image from a lab VM to the attached shared image gallery.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  LabPlans.prototype.saveImage = function (body, resourceGroupName, labPlanName, options) {\n    return this.beginSaveImage(body, resourceGroupName, labPlanName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to create or update a Lab Plan resource.\r\n   * @summary Updates or creates a Lab Plan resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  LabPlans.prototype.beginCreateOrUpdate = function (body, resourceGroupName, labPlanName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      options: options\n    }, beginCreateOrUpdateOperationSpec, options);\n  };\n  /**\r\n   * Operation to update a Lab Plan resource.\r\n   * @summary Updates a Lab Plan resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  LabPlans.prototype.beginUpdate = function (body, resourceGroupName, labPlanName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      options: options\n    }, beginUpdateOperationSpec, options);\n  };\n  /**\r\n   * Operation to delete a Lab Plan resource. Deleting a lab plan does not delete labs associated\r\n   * with a lab plan, nor does it delete shared images added to a gallery via the lab plan permission\r\n   * container.\r\n   * @summary Deletes a Lab Plan resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  LabPlans.prototype.beginDeleteMethod = function (resourceGroupName, labPlanName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      options: options\n    }, beginDeleteMethodOperationSpec, options);\n  };\n  /**\r\n   * Saves an image from a lab VM to the attached shared image gallery.\r\n   * @summary Save an image from a lab VM to the attached shared image gallery.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labPlanName The name of the lab plan that uniquely identifies it within containing\r\n   * resource group. Used in resource URIs and in UI.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  LabPlans.prototype.beginSaveImage = function (body, resourceGroupName, labPlanName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      options: options\n    }, beginSaveImageOperationSpec, options);\n  };\n\n  LabPlans.prototype.listBySubscriptionNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listBySubscriptionNextOperationSpec, callback);\n  };\n\n  LabPlans.prototype.listByResourceGroupNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByResourceGroupNextOperationSpec, callback);\n  };\n\n  return LabPlans;\n}();\n\nexport { LabPlans }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listBySubscriptionOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/providers/Microsoft.LabServices/labPlans\",\n  urlParameters: [Parameters.subscriptionId],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabPlans\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByResourceGroupOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabPlans\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.LabPlan\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginCreateOrUpdateOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.LabPlan), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.LabPlan\n    },\n    201: {\n      bodyMapper: Mappers.LabPlan\n    },\n    202: {\n      bodyMapper: Mappers.LabPlan\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginUpdateOperationSpec = {\n  httpMethod: \"PATCH\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.LabPlanUpdate), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.LabPlan\n    },\n    202: {\n      bodyMapper: Mappers.LabPlan\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginDeleteMethodOperationSpec = {\n  httpMethod: \"DELETE\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    204: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginSaveImageOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}/saveImage\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.SaveImageBody), {\n      required: true\n    })\n  },\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listBySubscriptionNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabPlans\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByResourceGroupNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabPlans\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/labsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Labs. */\n\nvar Labs =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Labs.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Labs(client) {\n    this.client = client;\n  }\n\n  Labs.prototype.listBySubscription = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, listBySubscriptionOperationSpec, callback);\n  };\n\n  Labs.prototype.listByResourceGroup = function (resourceGroupName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      options: options\n    }, listByResourceGroupOperationSpec, callback);\n  };\n\n  Labs.prototype.get = function (resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, getOperationSpec, callback);\n  };\n  /**\r\n   * Operation to create or update a lab resource.\r\n   * @summary Create or update a lab resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<Models.LabsCreateOrUpdateResponse>\r\n   */\n\n\n  Labs.prototype.createOrUpdate = function (body, resourceGroupName, labName, options) {\n    return this.beginCreateOrUpdate(body, resourceGroupName, labName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to update a lab resource.\r\n   * @summary Update a lab resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<Models.LabsUpdateResponse>\r\n   */\n\n\n  Labs.prototype.update = function (body, resourceGroupName, labName, options) {\n    return this.beginUpdate(body, resourceGroupName, labName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to delete a lab resource.\r\n   * @summary Deletes a lab resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  Labs.prototype.deleteMethod = function (resourceGroupName, labName, options) {\n    return this.beginDeleteMethod(resourceGroupName, labName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Publish or re-publish a lab. This will create or update all lab resources, such as virtual\r\n   * machines.\r\n   * @summary Publish or re-publish a lab.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  Labs.prototype.publish = function (resourceGroupName, labName, options) {\n    return this.beginPublish(resourceGroupName, labName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Action used to manually kick off an AAD group sync job.\r\n   * @summary Manually sync the lab group.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  Labs.prototype.syncGroup = function (resourceGroupName, labName, options) {\n    return this.beginSyncGroup(resourceGroupName, labName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to create or update a lab resource.\r\n   * @summary Create or update a lab resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Labs.prototype.beginCreateOrUpdate = function (body, resourceGroupName, labName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, beginCreateOrUpdateOperationSpec, options);\n  };\n  /**\r\n   * Operation to update a lab resource.\r\n   * @summary Update a lab resource.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Labs.prototype.beginUpdate = function (body, resourceGroupName, labName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, beginUpdateOperationSpec, options);\n  };\n  /**\r\n   * Operation to delete a lab resource.\r\n   * @summary Deletes a lab resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Labs.prototype.beginDeleteMethod = function (resourceGroupName, labName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, beginDeleteMethodOperationSpec, options);\n  };\n  /**\r\n   * Publish or re-publish a lab. This will create or update all lab resources, such as virtual\r\n   * machines.\r\n   * @summary Publish or re-publish a lab.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Labs.prototype.beginPublish = function (resourceGroupName, labName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, beginPublishOperationSpec, options);\n  };\n  /**\r\n   * Action used to manually kick off an AAD group sync job.\r\n   * @summary Manually sync the lab group.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Labs.prototype.beginSyncGroup = function (resourceGroupName, labName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, beginSyncGroupOperationSpec, options);\n  };\n\n  Labs.prototype.listBySubscriptionNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listBySubscriptionNextOperationSpec, callback);\n  };\n\n  Labs.prototype.listByResourceGroupNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByResourceGroupNextOperationSpec, callback);\n  };\n\n  return Labs;\n}();\n\nexport { Labs }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listBySubscriptionOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/providers/Microsoft.LabServices/labs\",\n  urlParameters: [Parameters.subscriptionId],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabs\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByResourceGroupOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabs\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.Lab\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginCreateOrUpdateOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.Lab), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.Lab\n    },\n    201: {\n      bodyMapper: Mappers.Lab\n    },\n    202: {\n      bodyMapper: Mappers.Lab\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginUpdateOperationSpec = {\n  httpMethod: \"PATCH\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.LabUpdate), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.Lab\n    },\n    202: {\n      bodyMapper: Mappers.Lab\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginDeleteMethodOperationSpec = {\n  httpMethod: \"DELETE\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    204: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginPublishOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/publish\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginSyncGroupOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/syncGroup\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listBySubscriptionNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabs\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByResourceGroupNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabs\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/usersMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Users. */\n\nvar Users =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Users.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Users(client) {\n    this.client = client;\n  }\n\n  Users.prototype.listByLab = function (resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, listByLabOperationSpec, callback);\n  };\n\n  Users.prototype.get = function (resourceGroupName, labName, userName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      userName: userName,\n      options: options\n    }, getOperationSpec, callback);\n  };\n  /**\r\n   * Operation to create or update a lab user.\r\n   * @summary Create or update a lab user.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<Models.UsersCreateOrUpdateResponse>\r\n   */\n\n\n  Users.prototype.createOrUpdate = function (body, resourceGroupName, labName, userName, options) {\n    return this.beginCreateOrUpdate(body, resourceGroupName, labName, userName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to update a lab user.\r\n   * @summary Update a lab user.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<Models.UsersUpdateResponse>\r\n   */\n\n\n  Users.prototype.update = function (resourceGroupName, labName, userName, options) {\n    return this.beginUpdate(resourceGroupName, labName, userName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to delete a user resource.\r\n   * @summary Deletes a user resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  Users.prototype.deleteMethod = function (resourceGroupName, labName, userName, options) {\n    return this.beginDeleteMethod(resourceGroupName, labName, userName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to invite a user to a lab.\r\n   * @summary Invite a user to a lab.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  Users.prototype.invite = function (resourceGroupName, labName, userName, options) {\n    return this.beginInvite(resourceGroupName, labName, userName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to create or update a lab user.\r\n   * @summary Create or update a lab user.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Users.prototype.beginCreateOrUpdate = function (body, resourceGroupName, labName, userName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      userName: userName,\n      options: options\n    }, beginCreateOrUpdateOperationSpec, options);\n  };\n  /**\r\n   * Operation to update a lab user.\r\n   * @summary Update a lab user.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Users.prototype.beginUpdate = function (resourceGroupName, labName, userName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      userName: userName,\n      options: options\n    }, beginUpdateOperationSpec, options);\n  };\n  /**\r\n   * Operation to delete a user resource.\r\n   * @summary Deletes a user resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Users.prototype.beginDeleteMethod = function (resourceGroupName, labName, userName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      userName: userName,\n      options: options\n    }, beginDeleteMethodOperationSpec, options);\n  };\n  /**\r\n   * Operation to invite a user to a lab.\r\n   * @summary Invite a user to a lab.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param userName The name of the user that uniquely identifies it within containing lab. Used in\r\n   * resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Users.prototype.beginInvite = function (resourceGroupName, labName, userName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      userName: userName,\n      options: options\n    }, beginInviteOperationSpec, options);\n  };\n\n  Users.prototype.listByLabNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByLabNextOperationSpec, callback);\n  };\n\n  return Users;\n}();\n\nexport { Users }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listByLabOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/users\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedUsers\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/users/{userName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.userName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.User\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginCreateOrUpdateOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/users/{userName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.userName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.User), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.User\n    },\n    201: {\n      bodyMapper: Mappers.User\n    },\n    202: {\n      bodyMapper: Mappers.User\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginUpdateOperationSpec = {\n  httpMethod: \"PATCH\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/users/{userName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.userName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: {\n      additionalUsageQuota: [\"options\", \"additionalUsageQuota\"]\n    },\n    mapper: __assign(__assign({}, Mappers.UserUpdate), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.User\n    },\n    202: {\n      bodyMapper: Mappers.User\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginDeleteMethodOperationSpec = {\n  httpMethod: \"DELETE\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/users/{userName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.userName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    204: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginInviteOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/users/{userName}/invite\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.userName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: {\n      text: [\"options\", \"text\"]\n    },\n    mapper: __assign(__assign({}, Mappers.InviteBody), {\n      required: true\n    })\n  },\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByLabNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedUsers\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/virtualMachinesMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a VirtualMachines. */\n\nvar VirtualMachines =\n/** @class */\nfunction () {\n  /**\r\n   * Create a VirtualMachines.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function VirtualMachines(client) {\n    this.client = client;\n  }\n\n  VirtualMachines.prototype.listByLab = function (resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, listByLabOperationSpec, callback);\n  };\n\n  VirtualMachines.prototype.get = function (resourceGroupName, labName, virtualMachineName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      virtualMachineName: virtualMachineName,\n      options: options\n    }, getOperationSpec, callback);\n  };\n  /**\r\n   * Action to start a lab virtual machine.\r\n   * @summary Start a lab virtual machine.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  VirtualMachines.prototype.start = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.beginStart(resourceGroupName, labName, virtualMachineName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Action to stop a lab virtual machine.\r\n   * @summary Stop a lab virtual machine.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  VirtualMachines.prototype.stop = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.beginStop(resourceGroupName, labName, virtualMachineName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Re-image a lab virtual machine. The virtual machine will be deleted and recreated using the\r\n   * latest published snapshot of the reference environment of the lab.\r\n   * @summary Re-image a lab virtual machine.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  VirtualMachines.prototype.reimage = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.beginReimage(resourceGroupName, labName, virtualMachineName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Action to redeploy a lab virtual machine to a different compute node. For troubleshooting\r\n   * connectivity.\r\n   * @summary Redeploy a lab virtual machine to a different compute node. For troubleshooting\r\n   * connectivity.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  VirtualMachines.prototype.redeploy = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.beginRedeploy(resourceGroupName, labName, virtualMachineName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Resets a lab virtual machine password.\r\n   * @summary Reset a lab virtual machine password.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  VirtualMachines.prototype.resetPassword = function (body, resourceGroupName, labName, virtualMachineName, options) {\n    return this.beginResetPassword(body, resourceGroupName, labName, virtualMachineName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Action to start a lab virtual machine.\r\n   * @summary Start a lab virtual machine.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  VirtualMachines.prototype.beginStart = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      virtualMachineName: virtualMachineName,\n      options: options\n    }, beginStartOperationSpec, options);\n  };\n  /**\r\n   * Action to stop a lab virtual machine.\r\n   * @summary Stop a lab virtual machine.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  VirtualMachines.prototype.beginStop = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      virtualMachineName: virtualMachineName,\n      options: options\n    }, beginStopOperationSpec, options);\n  };\n  /**\r\n   * Re-image a lab virtual machine. The virtual machine will be deleted and recreated using the\r\n   * latest published snapshot of the reference environment of the lab.\r\n   * @summary Re-image a lab virtual machine.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  VirtualMachines.prototype.beginReimage = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      virtualMachineName: virtualMachineName,\n      options: options\n    }, beginReimageOperationSpec, options);\n  };\n  /**\r\n   * Action to redeploy a lab virtual machine to a different compute node. For troubleshooting\r\n   * connectivity.\r\n   * @summary Redeploy a lab virtual machine to a different compute node. For troubleshooting\r\n   * connectivity.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  VirtualMachines.prototype.beginRedeploy = function (resourceGroupName, labName, virtualMachineName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      virtualMachineName: virtualMachineName,\n      options: options\n    }, beginRedeployOperationSpec, options);\n  };\n  /**\r\n   * Resets a lab virtual machine password.\r\n   * @summary Reset a lab virtual machine password.\r\n   * @param body The request body.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param virtualMachineName The ID of the virtual machine that uniquely identifies it within the\r\n   * containing lab. Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  VirtualMachines.prototype.beginResetPassword = function (body, resourceGroupName, labName, virtualMachineName, options) {\n    return this.client.sendLRORequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      virtualMachineName: virtualMachineName,\n      options: options\n    }, beginResetPasswordOperationSpec, options);\n  };\n\n  VirtualMachines.prototype.listByLabNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByLabNextOperationSpec, callback);\n  };\n\n  return VirtualMachines;\n}();\n\nexport { VirtualMachines }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listByLabOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedVirtualMachines\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines/{virtualMachineName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.virtualMachineName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.VirtualMachine\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginStartOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines/{virtualMachineName}/start\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.virtualMachineName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginStopOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines/{virtualMachineName}/stop\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.virtualMachineName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginReimageOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines/{virtualMachineName}/reimage\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.virtualMachineName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginRedeployOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines/{virtualMachineName}/redeploy\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.virtualMachineName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginResetPasswordOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/virtualMachines/{virtualMachineName}/resetPassword\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.virtualMachineName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.ResetPasswordBody), {\n      required: true\n    })\n  },\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByLabNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedVirtualMachines\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/schedulesMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Schedules. */\n\nvar Schedules =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Schedules.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Schedules(client) {\n    this.client = client;\n  }\n\n  Schedules.prototype.listByLab = function (resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, listByLabOperationSpec, callback);\n  };\n\n  Schedules.prototype.get = function (resourceGroupName, labName, scheduleName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      scheduleName: scheduleName,\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  Schedules.prototype.createOrUpdate = function (body, resourceGroupName, labName, scheduleName, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      scheduleName: scheduleName,\n      options: options\n    }, createOrUpdateOperationSpec, callback);\n  };\n\n  Schedules.prototype.update = function (body, resourceGroupName, labName, scheduleName, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      scheduleName: scheduleName,\n      options: options\n    }, updateOperationSpec, callback);\n  };\n  /**\r\n   * Operation to delete a schedule resource.\r\n   * @summary Deletes a schedule resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param scheduleName The name of the schedule that uniquely identifies it within containing lab.\r\n   * Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRest.RestResponse>\r\n   */\n\n\n  Schedules.prototype.deleteMethod = function (resourceGroupName, labName, scheduleName, options) {\n    return this.beginDeleteMethod(resourceGroupName, labName, scheduleName, options).then(function (lroPoller) {\n      return lroPoller.pollUntilFinished();\n    });\n  };\n  /**\r\n   * Operation to delete a schedule resource.\r\n   * @summary Deletes a schedule resource.\r\n   * @param resourceGroupName The name of the resource group. The name is case insensitive.\r\n   * @param labName The name of the lab that uniquely identifies it within containing lab plan. Used\r\n   * in resource URIs.\r\n   * @param scheduleName The name of the schedule that uniquely identifies it within containing lab.\r\n   * Used in resource URIs.\r\n   * @param [options] The optional parameters\r\n   * @returns Promise<msRestAzure.LROPoller>\r\n   */\n\n\n  Schedules.prototype.beginDeleteMethod = function (resourceGroupName, labName, scheduleName, options) {\n    return this.client.sendLRORequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      scheduleName: scheduleName,\n      options: options\n    }, beginDeleteMethodOperationSpec, options);\n  };\n\n  Schedules.prototype.listByLabNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByLabNextOperationSpec, callback);\n  };\n\n  return Schedules;\n}();\n\nexport { Schedules }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listByLabOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/schedules\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedSchedules\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/schedules/{scheduleName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.scheduleName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.Schedule\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar createOrUpdateOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/schedules/{scheduleName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.scheduleName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.Schedule), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.Schedule\n    },\n    201: {\n      bodyMapper: Mappers.Schedule\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar updateOperationSpec = {\n  httpMethod: \"PATCH\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/schedules/{scheduleName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.scheduleName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.ScheduleUpdate), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.Schedule\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar beginDeleteMethodOperationSpec = {\n  httpMethod: \"DELETE\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labs/{labName}/schedules/{scheduleName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName, Parameters.scheduleName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    202: {},\n    204: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByLabNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedSchedules\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/imagesMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Images. */\n\nvar Images =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Images.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Images(client) {\n    this.client = client;\n  }\n\n  Images.prototype.listByLabPlan = function (resourceGroupName, labPlanName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      options: options\n    }, listByLabPlanOperationSpec, callback);\n  };\n\n  Images.prototype.get = function (resourceGroupName, labPlanName, imageName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      imageName: imageName,\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  Images.prototype.createOrUpdate = function (body, resourceGroupName, labPlanName, imageName, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      imageName: imageName,\n      options: options\n    }, createOrUpdateOperationSpec, callback);\n  };\n\n  Images.prototype.update = function (resourceGroupName, labPlanName, imageName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labPlanName: labPlanName,\n      imageName: imageName,\n      options: options\n    }, updateOperationSpec, callback);\n  };\n\n  Images.prototype.listByLabPlanNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByLabPlanNextOperationSpec, callback);\n  };\n\n  return Images;\n}();\n\nexport { Images }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listByLabPlanOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}/images\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedImages\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}/images/{imageName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName, Parameters.imageName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.Image\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar createOrUpdateOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}/images/{imageName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName, Parameters.imageName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.Image), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.Image\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar updateOperationSpec = {\n  httpMethod: \"PATCH\",\n  path: \"subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.LabServices/labPlans/{labPlanName}/images/{imageName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labPlanName, Parameters.imageName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: {\n      enabledState: [\"options\", \"enabledState\"]\n    },\n    mapper: __assign(__assign({}, Mappers.ImageUpdate), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.Image\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByLabPlanNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedImages\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/operationResultsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a OperationResults. */\n\nvar OperationResults =\n/** @class */\nfunction () {\n  /**\r\n   * Create a OperationResults.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function OperationResults(client) {\n    this.client = client;\n  }\n\n  OperationResults.prototype.get = function (operationResultId, options, callback) {\n    return this.client.sendOperationRequest({\n      operationResultId: operationResultId,\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  return OperationResults;\n}();\n\nexport { OperationResults }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/providers/Microsoft.LabServices/operationResults/{operationResultId}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.operationResultId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.OperationResult\n    },\n    204: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/usagesMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Usages. */\n\nvar Usages =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Usages.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Usages(client) {\n    this.client = client;\n  }\n\n  Usages.prototype.listByLocation = function (location, options, callback) {\n    return this.client.sendOperationRequest({\n      location: location,\n      options: options\n    }, listByLocationOperationSpec, callback);\n  };\n\n  Usages.prototype.listByLocationNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listByLocationNextOperationSpec, callback);\n  };\n\n  return Usages;\n}();\n\nexport { Usages }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listByLocationOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/providers/Microsoft.LabServices/locations/{location}/usages\",\n  urlParameters: [Parameters.subscriptionId, Parameters.location],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.ListUsagesResult\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listByLocationNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.ListUsagesResult\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/skusMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Skus. */\n\nvar Skus =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Skus.\r\n   * @param {LabServicesClientContext} client Reference to the service client.\r\n   */\n  function Skus(client) {\n    this.client = client;\n  }\n\n  Skus.prototype.list = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, listOperationSpec, callback);\n  };\n\n  Skus.prototype.listNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listNextOperationSpec, callback);\n  };\n\n  return Skus;\n}();\n\nexport { Skus }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/providers/Microsoft.LabServices/skus\",\n  urlParameters: [Parameters.subscriptionId],\n  queryParameters: [Parameters.apiVersion, Parameters.filter],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabServicesSkus\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://management.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabServicesSkus\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __extends } from \"tslib\";\nimport * as Models from \"./models\";\nimport * as Mappers from \"./models/mappers\";\nimport * as operations from \"./operations\";\nimport { LabServicesClientContext } from \"./labServicesClientContext\";\n\nvar LabServicesClient =\n/** @class */\nfunction (_super) {\n  __extends(LabServicesClient, _super);\n  /**\r\n   * Initializes a new instance of the LabServicesClient class.\r\n   * @param credentials Credentials needed for the client to connect to Azure.\r\n   * @param subscriptionId The ID of the target subscription.\r\n   * @param [options] The parameter options\r\n   */\n\n\n  function LabServicesClient(credentials, subscriptionId, options) {\n    var _this = _super.call(this, credentials, subscriptionId, options) || this;\n\n    _this.operations = new operations.Operations(_this);\n    _this.labPlans = new operations.LabPlans(_this);\n    _this.labs = new operations.Labs(_this);\n    _this.users = new operations.Users(_this);\n    _this.virtualMachines = new operations.VirtualMachines(_this);\n    _this.schedules = new operations.Schedules(_this);\n    _this.images = new operations.Images(_this);\n    _this.operationResults = new operations.OperationResults(_this);\n    _this.usages = new operations.Usages(_this);\n    _this.skus = new operations.Skus(_this);\n    return _this;\n  }\n\n  return LabServicesClient;\n}(LabServicesClientContext); // Operation Specifications\n\n\nexport { LabServicesClient, LabServicesClientContext, Models as LabServicesModels, Mappers as LabServicesMappers };\nexport * from \"./operations\";","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __extends } from \"tslib\";\nimport * as msRestAzure from \"@azure/ms-rest-azure-js\";\nvar packageName = \"lab-services\";\nvar packageVersion = \"1.0.0\";\n\nvar LabServicesClientContext =\n/** @class */\nfunction (_super) {\n  __extends(LabServicesClientContext, _super);\n  /**\r\n   * Initializes a new instance of the LabServicesClient class.\r\n   * @param credentials Credentials needed for the client to connect to Azure.\r\n   * @param subscriptionId The ID of the target subscription.\r\n   * @param [options] The parameter options\r\n   */\n\n\n  function LabServicesClientContext(credentials, subscriptionId, options) {\n    var _this = this;\n\n    if (credentials == undefined) {\n      throw new Error('\\'credentials\\' cannot be null.');\n    }\n\n    if (subscriptionId == undefined) {\n      throw new Error('\\'subscriptionId\\' cannot be null.');\n    }\n\n    if (!options) {\n      options = {};\n    }\n\n    if (!options.userAgent) {\n      var defaultUserAgent = msRestAzure.getDefaultUserAgentValue();\n      options.userAgent = \"\".concat(packageName, \"/\").concat(packageVersion, \" \").concat(defaultUserAgent);\n    }\n\n    _this = _super.call(this, credentials, options) || this;\n    _this.apiVersion = '2023-06-07';\n    _this.acceptLanguage = 'en-US';\n    _this.longRunningOperationRetryTimeout = 30;\n    _this.baseUri = options.baseUri || _this.baseUri || \"https://management.azure.com\";\n    _this.requestContentType = \"application/json; charset=utf-8\";\n    _this.credentials = credentials;\n    _this.subscriptionId = subscriptionId;\n\n    if (options.acceptLanguage !== null && options.acceptLanguage !== undefined) {\n      _this.acceptLanguage = options.acceptLanguage;\n    }\n\n    if (options.longRunningOperationRetryTimeout !== null && options.longRunningOperationRetryTimeout !== undefined) {\n      _this.longRunningOperationRetryTimeout = options.longRunningOperationRetryTimeout;\n    }\n\n    return _this;\n  }\n\n  return LabServicesClientContext;\n}(msRestAzure.AzureServiceClient);\n\nexport { LabServicesClientContext };","export const DefaultDialogSmallWidth = 408;\r\nexport const DefaultDialogWidth = 450;\r\nexport const DefaultDialogWideWidth = 495;\r\nexport const DefaultFlyoutWidth = 423;\r\nexport const NoSubscriptionId = 'NoSubscription';\r\nexport const NoUsername = 'NoUsername';\r\nexport const AzureLabServicesPesId = '06bfd9d3-516b-d5c6-5802-169c800dec89';\r\nexport const QuotaSupportTopicId = '4c6012da-5dcf-7a3a-43b4-99ec73125c83';\r\nexport const V2BastionFeature = 'Microsoft.LabServices/AllowV2Bastion';\r\nexport const Urls = {\r\n    OperationsResult: '?api-version=2023-06-07',\r\n    OperationsResultLabsApi: '?api-version=2023-02-01',\r\n    Subscriptions: '/subscriptions?api-version=2016-06-01',\r\n    Tenants: '/tenants?api-version=2020-01-01',\r\n    Permissions: '/providers/Microsoft.Authorization/permissions?api-version=2018-07-01',\r\n    SupportRequestForVmIssues: (tenantId, subscriptionId) => `https://portal.azure.com/#@${tenantId}/create/Microsoft.Support/Parameters/{\"pesId\":\"technical\",\"subId\":\"${subscriptionId}\",\"caller\":\"azurelabservices\"}`,\r\n    SupportRequest: (tenantId, subscriptionId) => `https://portal.azure.com/#@${tenantId}/create/Microsoft.Support/Parameters/{\"pesId\":\"${AzureLabServicesPesId}\",\"subId\":\"${subscriptionId}\",\"supportTopicId\":\"${QuotaSupportTopicId}\",\"caller\":\"azurelabservices\"}`,\r\n    CreateLabAccount: (tenantId) => `https://portal.azure.com/#@${tenantId}/create/Microsoft.ManagedLab`,\r\n    AddImages: (tenantId, labAccountId) => `https://portal.azure.com/#@${tenantId}/resource${labAccountId}/marketplaceImages`,\r\n    ExportedImageLink: (tenantId, labPlanComputeGalleryId) => `https://portal.azure.com/#@${tenantId}/resource${labPlanComputeGalleryId}/images`,\r\n    DisabledSizesGeo: 'https://aka.ms/azlabs-sizegeo-availability',\r\n    Privacy: 'https://go.microsoft.com/fwlink/?LinkId=521839',\r\n    TermsOfUse: 'https://aka.ms/azlabs-termsofuse',\r\n    PopupHelp: 'https://support.microsoft.com/en-us/office/disable-pop-up-blockers-for-lync-web-app-8d8ad778-925d-44fc-8268-fc0a6b5471c0',\r\n    AllFeatureFlags: '/providers/Microsoft.Features/providers/Microsoft.LabServices/features?api-version=2021-07-01',\r\n    LinkLabPlan: '/api/lti/v1p3/provisioning/linkLabPlan',\r\n    ProfessorFeedback: 'https://aka.ms/azlabs-ownersurvey',\r\n    StudentFeedback: 'https://aka.ms/LabServicesSurvey',\r\n    LabPlanSettings: (tenantId, labPlanId) => `https://portal.azure.com/#@${tenantId}/resource${labPlanId}/labSettings`,\r\n    LabPlanRegions: 'https://aka.ms/azlabsregions',\r\n    TechnicalSupportRequest: (tenantId) => `https://portal.azure.com/#@${tenantId}/create/Microsoft.Support`,\r\n};\r\nexport const ApiVersions = {\r\n    labsCurrentPreview: '2021-10-01-preview',\r\n    managementCurrentPreview: '2021-11-15-preview',\r\n};\r\nexport const EnableState = {\r\n    Enabled: 'Enabled',\r\n    Disabled: 'Disabled',\r\n};\r\nexport const DefaultImageName = 'Windows 11 Pro';\r\nexport const DefaultWindows10ImageName = /Windows 10 Pro, version [0-9]+/;\r\nexport const DefaultQuota = 10;\r\nexport const DefaultCapacity = 10;\r\nexport const DefaultMaxCapacity = 400;\r\nexport const MaxLabQuota = 9999;\r\nexport const DefaultNoTemplateMinCapacity = 1;\r\nexport const MinAdditionalUserQuota = 0;\r\nexport const MaxAdditionalUserQuota = 9999;\r\nexport const DefaultAdditionalUserQuota = 1;\r\nexport const DefaultTemplateName = 'default';\r\nexport const DefaultUserName = '--';\r\nexport const LargeTextFieldRows = 30;\r\nexport const NavWidthExpanded = 230;\r\nexport const NavWidthCollapsed = 58;\r\nexport const TemplateTitleMaxLength = 255;\r\nexport const TemplateDescriptionMaxLength = 500;\r\n// These match the values used in the ML RP, see MLabResourceConstants.EnvironmentSetting\r\nexport const WindowsPasswordLength = {\r\n    minLength: 8,\r\n    maxLength: 123,\r\n};\r\nexport const LinuxPasswordLength = {\r\n    minLength: 6,\r\n    maxLength: 72,\r\n};\r\nexport const VCurrentRegistrationCodeLength = 8;\r\nexport const DefaultPollingDelayInterval = 30 * 1000;\r\nexport const DefaultPollingInterval = 5 * 60 * 1000;\r\nexport const FiveSecondInterval = 5 * 1000;\r\nexport const TenSecondInterval = 10 * 1000;\r\nexport const FifteenSecondInterval = 15 * 1000;\r\nexport const ThirtySecondInterval = 30 * 1000;\r\nexport const OneMinuteInterval = 60 * 1000;\r\nexport const Regions = {\r\n    SoutheastAsia: 'southeastasia',\r\n    CentralUsEuap: 'centraluseuap',\r\n    EastUs2Euap: 'eastus2euap',\r\n    WestUs2: 'westus2',\r\n    WestCentralUs: 'westcentralus',\r\n    EastUs2: 'eastus2',\r\n};\r\nexport const DevSubscriptionId = '2d5eedc9-8509-41fe-aac8-f16d54583ac6';\r\nexport const DefaultCurrencyCode = 'USD';\r\nexport const ScheduledSyncTimeHour = 1;\r\nexport const ScheduledSyncTimeMinute = 0;\r\nexport const LtiClaims = {\r\n    roles: 'https://purl.imsglobal.org/spec/lti/claim/roles',\r\n    toolPlatform: 'https://purl.imsglobal.org/spec/lti/claim/tool_platform',\r\n    context: 'https://purl.imsglobal.org/spec/lti/claim/context',\r\n    namesroleservice: 'https://purl.imsglobal.org/spec/lti-nrps/claim/namesroleservice',\r\n    contextMembershipUrl: 'context_memberships_url',\r\n    custom: 'https://purl.imsglobal.org/spec/lti/claim/custom',\r\n};\r\nexport const LtiInstructorRole = 'http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor';\r\nexport const LtiContentDeveloperRole = 'http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper';\r\nexport const LtiAdministratorRoles = [\r\n    'http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator',\r\n    'http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator',\r\n    'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator',\r\n];\r\nexport const QuotaRequestNeededNumberOfVMs = 30;\r\nexport const Constants = {\r\n    DefaultDialogSmallWidth,\r\n    DefaultDialogWidth,\r\n    DefaultDialogWideWidth,\r\n    DefaultFlyoutWidth,\r\n    NoSubscriptionId,\r\n    NoUsername,\r\n    Urls,\r\n    EnableState,\r\n    DefaultImageName,\r\n    DefaultWindows10ImageName,\r\n    DefaultQuota,\r\n    DefaultCapacity,\r\n    DefaultMaxCapacity,\r\n    LargeTextFieldRows,\r\n    MaxLabQuota,\r\n    DefaultNoTemplateMinCapacity,\r\n    MinAdditionalUserQuota,\r\n    MaxAdditionalUserQuota,\r\n    DefaultAdditionalUserQuota,\r\n    DefaultTemplateName,\r\n    TemplateTitleMaxLength,\r\n    TemplateDescriptionMaxLength,\r\n    WindowsPasswordLength,\r\n    LinuxPasswordLength,\r\n    DefaultUserName,\r\n    DefaultPollingDelayInterval,\r\n    DefaultPollingInterval,\r\n    FiveSecondInterval,\r\n    TenSecondInterval,\r\n    ThirtySecondInterval,\r\n    OneMinuteInterval,\r\n    Regions,\r\n    DevSubscriptionId,\r\n    NavWidthExpanded,\r\n    NavWidthCollapsed,\r\n    DefaultCurrencyCode,\r\n    ScheduledSyncTimeHour,\r\n    ScheduledSyncTimeMinute,\r\n    VCurrentRegistrationCodeLength,\r\n    V2BastionFeature,\r\n};\r\nexport default Constants;\r\n","import memoize from 'memoize-one';\r\nimport { decodeBase64Url } from '../../utils/decode-base64url';\r\nimport { LtiInstructorRole, LtiAdministratorRoles, LtiContentDeveloperRole } from '../../utils/constants';\r\nimport { isLmsHost } from './common-selectors';\r\nexport const isLmsCourseInstructor = memoize((store) => {\r\n    const roles = store.get('ltiStore').get('roles');\r\n    return roles.indexOf(LtiInstructorRole) >= 0;\r\n});\r\nexport const isLmsCourseContentDeveloper = memoize((store) => {\r\n    const roles = store.get('ltiStore').get('roles');\r\n    return roles.indexOf(LtiContentDeveloperRole) >= 0;\r\n});\r\nexport const isLmsAdministrator = memoize((store) => {\r\n    const roles = store.get('ltiStore').get('roles');\r\n    return roles.some((r) => LtiAdministratorRoles.indexOf(r) >= 0);\r\n});\r\nexport const isLmsProfessor = memoize((store) => {\r\n    return isLmsCourseInstructor(store) || isLmsCourseContentDeveloper(store) || isLmsAdministrator(store);\r\n});\r\nexport const shouldSignInAad = memoize((store) => {\r\n    return !isLmsHost(store) || isLmsProfessor(store);\r\n});\r\nexport const isLmsStudent = memoize((store) => {\r\n    return isLmsHost(store) && !isLmsProfessor(store);\r\n});\r\nexport function getValidatedLtiToken(hash, state, nonce) {\r\n    if (!hash || !state || !nonce) {\r\n        return undefined;\r\n    }\r\n    const params = hash.split('&');\r\n    if (!params || params.length !== 2) {\r\n        return undefined;\r\n    }\r\n    const stateParam = params[1].split('=');\r\n    if (!stateParam || stateParam.length !== 2 || stateParam[0] !== 'state' || stateParam[1] !== state) {\r\n        return undefined;\r\n    }\r\n    const ltiTokenParam = params[0].split('=');\r\n    if (!ltiTokenParam || ltiTokenParam.length !== 2 || ltiTokenParam[0] !== '#id_token' || !ltiTokenParam[1]) {\r\n        return undefined;\r\n    }\r\n    const decodedToken = decodeLtiTokenPayload(ltiTokenParam[1]);\r\n    if (decodedToken['nonce'] !== nonce) {\r\n        return undefined;\r\n    }\r\n    return ltiTokenParam[1];\r\n}\r\nexport const decodeLtiTokenPayload = memoize((token) => {\r\n    const payload = token.split('.')[1];\r\n    let res;\r\n    if (!!payload) {\r\n        const decodedPayload = decodeBase64Url(payload);\r\n        res = JSON.parse(decodedPayload);\r\n    }\r\n    return res;\r\n});\r\nexport const getLtiContextTitle = memoize((store) => {\r\n    const ltiContext = store.get('ltiStore').get('ltiContext');\r\n    return ltiContext?.title;\r\n});\r\nexport const getLtiContextId = memoize((store) => {\r\n    const ltiContext = store.get('ltiStore').get('ltiContext');\r\n    return ltiContext?.id;\r\n});\r\nexport const hasGrantedWebStorageAccess = memoize((store) => {\r\n    const ltiStore = store.get('ltiStore');\r\n    const hasWebStorageAccessGranted = ltiStore.get('hasGrantedWebStorageAccess');\r\n    return hasWebStorageAccessGranted;\r\n});\r\nexport const getCurrentLmsInstance = memoize((store) => {\r\n    return store.get('ltiStore').get('lmsInstance');\r\n});\r\n","export function decodeBase64Url(payload) {\r\n    let base64Payload = payload.replace(/-/g, '+').replace(/_/g, '/');\r\n    const padCount = base64Payload.length % 4;\r\n    if (padCount > 0) {\r\n        for (let count = 0; count < 4 - padCount; count++) {\r\n            base64Payload = base64Payload.concat('=');\r\n        }\r\n    }\r\n    return atob(base64Payload);\r\n}\r\n","import { List } from 'immutable';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { isLmsHost, isTerminalState, storeIsLoading } from '../common-selectors';\r\nimport { getCurrentLabParentId } from '../lab-parent-resource-selectors';\r\nimport { getCurrentLab, getCurrentLabId } from '../lab-selectors';\r\nimport { getGroupName } from '../group-selectors';\r\nimport { getLtiContextTitle } from '../lti-selectors';\r\nexport const getResourceGroupLabs = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const resourceGroupLabs = labStore.get('resourceGroupLabsMap');\r\n    const currentLabParentId = getCurrentLabParentId(store);\r\n    let labs = List();\r\n    for (const [key, value] of resourceGroupLabs) {\r\n        if (caseInsensitiveCultureInvariantCompare(currentLabParentId, key) === 0) {\r\n            labs = value;\r\n            break;\r\n        }\r\n    }\r\n    return labs;\r\n});\r\nexport const getVNextLabAccessType = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const labAccessType = labStore.get('labAccessType');\r\n    return labAccessType;\r\n});\r\nexport const getVNextCurrentLabId = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const currentLabId = labStore.get('currentLabId');\r\n    return currentLabId;\r\n});\r\nexport function doesVNextLabGroupIdMatch(lab, aadGroupId) {\r\n    return lab.rosterProfile?.activeDirectoryGroupId === aadGroupId;\r\n}\r\nexport const isVNextLabBlocked = memoize((lab) => {\r\n    return !!lab && !!lab.systemData?.createdBy && lab.systemData.createdBy.endsWith('-blocked');\r\n});\r\nexport const isVNextLabCreating = memoize((lab) => {\r\n    return lab.provisioningState === LabServicesModels.ProvisioningState.Creating;\r\n});\r\nexport const isLoadingVNextLabs = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const loadState = labStore.get('loadState');\r\n    return storeIsLoading(loadState);\r\n});\r\nexport const getCreateLabPermissionOnLabPlan = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    if (labStore.has('hasCreateLabPermissionOnLabPlan')) {\r\n        const hasCreateLabPermissionOnLabPlan = labStore.get('hasCreateLabPermissionOnLabPlan');\r\n        return hasCreateLabPermissionOnLabPlan;\r\n    }\r\n    return undefined;\r\n});\r\nexport const getVnextLabPermissionPropagating = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    if (labStore.has('isVnextLabPermissionPropagating')) {\r\n        const isVnextLabPermissionPropagating = labStore.get('isVnextLabPermissionPropagating');\r\n        return isVnextLabPermissionPropagating;\r\n    }\r\n    return undefined;\r\n});\r\nexport const getVNextLab = memoize((store, labId) => {\r\n    if (!labId) {\r\n        return undefined;\r\n    }\r\n    const labs = getResourceGroupLabs(store);\r\n    const lab = labs.find((lab) => caseInsensitiveCultureInvariantCompare(lab.id, labId) === 0);\r\n    return lab;\r\n});\r\nexport const hasTemplateVM = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    const currentVNextLab = getVNextLab(store, currentLabId);\r\n    return currentVNextLab?.virtualMachineProfile?.createOption === LabServicesModels.CreateOption.TemplateVM;\r\n});\r\nexport const shouldDisableCurrentLabUpdate = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    const currentVNextLab = getVNextLab(store, currentLabId);\r\n    const labProvisioningState = currentVNextLab?.pendingProvisioningState ?? currentVNextLab?.provisioningState;\r\n    return !isTerminalState(labProvisioningState);\r\n});\r\nexport const isVNextLabSyncing = (lab) => {\r\n    return getLabState(lab) === LabServicesModels.LabState.Syncing;\r\n};\r\nexport const getLabCapacity = (lab) => {\r\n    return lab.virtualMachineProfile?.sku?.capacity;\r\n};\r\nexport const getCurrentLabErrors = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const errors = labStore.get('errors');\r\n    const currentLabId = getCurrentLabId(store);\r\n    return errors.get(currentLabId);\r\n});\r\nexport const getLabErrorsByOperation = (errors, operation) => {\r\n    if (!errors) {\r\n        return List();\r\n    }\r\n    return errors.filter((o) => o.failureOperation === operation);\r\n};\r\nexport const isLoadingLabMetadata = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const labMetadataLoadState = labStore.get('labMetadataLoadState');\r\n    return storeIsLoading(labMetadataLoadState);\r\n});\r\nexport const getCurrentLabUpdateError = memoize((store) => {\r\n    const labStore = store.get('vNextLabStore');\r\n    const labUpdateError = labStore.get('updateError');\r\n    const currentLabId = getCurrentLabId(store);\r\n    return !!labUpdateError?.id && caseInsensitiveCultureInvariantCompare(currentLabId, labUpdateError.id) === 0\r\n        ? labUpdateError\r\n        : undefined;\r\n});\r\nfunction getLabState(lab) {\r\n    return lab.pendingLabState ?? lab.state;\r\n}\r\nexport const isVNextLabScaling = (lab) => {\r\n    return getLabState(lab) === LabServicesModels.LabState.Scaling;\r\n};\r\nexport const isVNextLabDraft = (lab) => {\r\n    return getLabState(lab) === LabServicesModels.LabState.Draft;\r\n};\r\nexport const getVNextLabGroupId = (lab) => {\r\n    return lab.rosterProfile?.activeDirectoryGroupId ?? lab.rosterProfile?.ltiContextId ?? undefined;\r\n};\r\nexport const getVNextLabGroupName = (state) => {\r\n    let groupName = '';\r\n    const isLms = isLmsHost(state);\r\n    const aadGroupName = getGroupName(state);\r\n    const lab = getCurrentLab(state);\r\n    if (isLms) {\r\n        const courseTitle = getLtiContextTitle(state);\r\n        groupName = courseTitle ?? '';\r\n    }\r\n    else if (lab?.rosterProfile?.activeDirectoryGroupId) {\r\n        groupName = aadGroupName;\r\n    }\r\n    return groupName;\r\n};\r\nexport const isVNextLabLmsConnected = (lab) => {\r\n    return !!lab?.rosterProfile?.lmsInstance;\r\n};\r\n","export const LabUpdateOperation = {\r\n    Capacity: 'Capacity',\r\n    Quota: 'Quota',\r\n    AccessMode: 'AccessMode',\r\n    ContactEmail: 'ContactEmail',\r\n    DismissGpuWarning: 'DismissGpuWarning',\r\n    Settings: 'Settings',\r\n    Update: 'Update',\r\n    SetGroup: 'SetGroup',\r\n    TitleOrDesciption: 'TitleOrDesciption',\r\n};\r\nexport const LabAccessType = {\r\n    writeAccess: 'writeAccess',\r\n    readAndWriteAccess: 'readAndWriteAccess',\r\n};\r\n","import memoize from 'memoize-one';\r\nimport { Roles } from '../../data/models/roles';\r\nimport { isFeatureEnabled, storeIsLoading, storeIsUpdating } from '../../redux/selectors/common-selectors';\r\nimport { getCurrentTemplate, getTemplateCreateError } from '../../redux/selectors/template-selectors';\r\nimport { compareByName } from '../../utils/common';\r\nimport Feature from '../../utils/features';\r\nimport { ProvisioningState } from '../../utils/provisioning-state';\r\nimport { isLabUserSyncing } from '../../common/selectors/lab-latest-operation';\r\nimport { getGroupId, shouldFilterLabsByGroupId } from './group-selectors';\r\nimport { ConnectedLms } from '../../utils/connected-lms';\r\nimport { isCurrentLabParentLabAccount } from './lab-parent-resource-selectors';\r\nimport { doesVNextLabGroupIdMatch, getResourceGroupLabs, getVNextCurrentLabId, getVNextLab, getVNextLabAccessType, isVNextLabBlocked, isVNextLabLmsConnected, isVNextLabSyncing, } from './vnext/lab-selectors';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport moment from 'moment';\r\nimport { LabAccessType } from '../../data/models/lab';\r\nexport const getVCurrentLabs = memoize((store) => {\r\n    const labStore = store.get('labStore');\r\n    const labs = labStore.get('labs');\r\n    return labs;\r\n});\r\nfunction doesVCurrentLabGroupIdMatch(lab, aadGroupId) {\r\n    return lab.aadGroupId === aadGroupId;\r\n}\r\nexport const getVCurrentLab = memoize((store, labId) => {\r\n    if (!labId) {\r\n        return undefined;\r\n    }\r\n    const labs = getVCurrentLabs(store);\r\n    const lab = labs.find((lab) => lab.id === labId);\r\n    return lab;\r\n});\r\n// keep the original getCurrentLab from vCurrent Lab Store for now\r\nexport const getVCurrentCurrentLab = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    if (!currentLabId) {\r\n        return undefined;\r\n    }\r\n    return getVCurrentLab(store, currentLabId);\r\n});\r\nconst isVCurrentLabBlocked = (lab) => {\r\n    return lab && lab.createdByObjectId && lab.createdByObjectId.endsWith('-blocked') ? true : false;\r\n};\r\nexport const hasBlockedLabs = memoize((store) => {\r\n    const labs = getLabs(store);\r\n    return labs.findIndex((lab) => isLabBlocked(lab)) > -1;\r\n});\r\nconst isV1GpuTemplate = (template) => {\r\n    const size = template?.resourceSettings.vmSize;\r\n    return size === \"SmallGPUCompute\" ||\r\n        size === \"MediumGPUVisualization\" ||\r\n        size === \"SmallGPUVisualization\";\r\n};\r\nexport const hasOldV1Labs = memoize((store) => {\r\n    const labs = getLabs(store);\r\n    return labs.findIndex((lab) => isOldV1Lab(lab)) > -1;\r\n});\r\nexport const isCurrentLabBlocked = memoize((store) => {\r\n    const lab = getCurrentLab(store);\r\n    return isLabBlocked(lab);\r\n});\r\nexport const isCurrentLabOldV1Lab = memoize((store) => {\r\n    const lab = getCurrentLab(store);\r\n    if (isVNextLab(lab?.id)) {\r\n        return false;\r\n    }\r\n    const template = getCurrentTemplate(store);\r\n    return isOldV1GpuLab(lab, template);\r\n});\r\nexport const isCurrentLabWriteable = memoize((store) => {\r\n    const lab = getCurrentLab(store);\r\n    return isWriteableLab(lab);\r\n});\r\nexport const isCurrentLabMoving = memoize((store) => {\r\n    const lab = getCurrentLab(store);\r\n    return isLabMoving(lab);\r\n});\r\nexport const isCurrentLabReadOnly = memoize((store) => {\r\n    return (isCurrentLabBlocked(store) ||\r\n        !isCurrentLabWriteable(store) ||\r\n        isCurrentLabMoving(store) ||\r\n        !!getTemplateCreateError(store));\r\n});\r\nexport const isCurrentLabUserSyncing = memoize((store) => {\r\n    const lab = getCurrentLab(store);\r\n    if (!isVNextLab(lab?.id ?? '')) {\r\n        return !!lab && isLabUserSyncing(lab);\r\n    }\r\n    else {\r\n        return isVNextLabSyncing(lab);\r\n    }\r\n});\r\nexport const isLabGroupSynced = memoize((lab) => {\r\n    if (!lab) {\r\n        return false;\r\n    }\r\n    if (!isVNextLab(lab.id)) {\r\n        const vCurrentLab = lab;\r\n        return !!vCurrentLab.aadGroupId;\r\n    }\r\n    else {\r\n        const vNextLab = lab;\r\n        return !!vNextLab.rosterProfile?.activeDirectoryGroupId || !!vNextLab.rosterProfile?.ltiContextId;\r\n    }\r\n});\r\nexport const isLabConnectedLmsOrTeams = memoize((lab) => {\r\n    if (!lab) {\r\n        return false;\r\n    }\r\n    if (!isVNextLab(lab.id)) {\r\n        const vCurrentLab = lab;\r\n        return vCurrentLab.connectedLMS === ConnectedLms.Teams;\r\n    }\r\n    else {\r\n        // todo: check whether vNext lab is connected to Teams\r\n        const vNextLab = lab;\r\n        return isVNextLabLmsConnected(vNextLab);\r\n    }\r\n});\r\nexport const labStoreIsLoadingOrUpdating = memoize((store) => {\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    let loadState;\r\n    if (isLabParentLabAccount) {\r\n        loadState = store.get('labStore').get('loadState');\r\n    }\r\n    else {\r\n        loadState = store.get('vNextLabStore').get('loadState');\r\n    }\r\n    return storeIsLoading(loadState) || storeIsUpdating(loadState);\r\n});\r\nexport function isVNextLab(id) {\r\n    if (!id) {\r\n        return false;\r\n    }\r\n    const parts = id.split('/').filter((n) => n !== '');\r\n    return parts.length >= 8 && parts[6].toLowerCase() === 'labs';\r\n}\r\nexport const isCurrentLabVNext = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    return isVNextLab(currentLabId);\r\n});\r\nexport const getLabs = memoize((store) => {\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    if (isLabParentLabAccount) {\r\n        return getVCurrentLabs(store);\r\n    }\r\n    else {\r\n        return getResourceGroupLabs(store);\r\n    }\r\n});\r\nexport const getLabAccessType = memoize((store) => {\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    if (isLabParentLabAccount) {\r\n        return LabAccessType.writeAccess;\r\n    }\r\n    else {\r\n        return getVNextLabAccessType(store);\r\n    }\r\n});\r\nexport const getFilteredLabs = memoize((store) => {\r\n    let resultLabs = getLabs(store).sort(compareByName);\r\n    const labAccessType = getLabAccessType(store);\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    const isReadOnlyEnabled = isFeatureEnabled(store, Feature.ReadOnly);\r\n    const shouldFilterByGroupId = shouldFilterLabsByGroupId(store);\r\n    if (!isReadOnlyEnabled && labAccessType === LabAccessType.writeAccess) {\r\n        resultLabs = isLabParentLabAccount\r\n            ? resultLabs.filter((lab) => isWriteableLab(lab))\r\n            : resultLabs.filter((lab) => isWriteableLab(lab));\r\n    }\r\n    if (shouldFilterByGroupId) {\r\n        const aadGroupId = getGroupId(store);\r\n        return isLabParentLabAccount\r\n            ? resultLabs.filter((lab) => doesVCurrentLabGroupIdMatch(lab, aadGroupId))\r\n            : resultLabs.filter((lab) => doesVNextLabGroupIdMatch(lab, aadGroupId));\r\n    }\r\n    else {\r\n        return resultLabs;\r\n    }\r\n});\r\nexport const isWriteableLab = (lab) => {\r\n    return lab && lab.roles.indexOf(Roles.Write) > -1 ? true : false;\r\n};\r\nexport const isLabAssistantRole = (lab) => {\r\n    return lab && lab.roles.indexOf(Roles.LabAssistant) > -1 ? true : false;\r\n};\r\nexport const isLabBlocked = (lab) => {\r\n    return !!lab && (isVNextLab(lab.id) ? isVNextLabBlocked(lab) : isVCurrentLabBlocked(lab));\r\n};\r\nexport const isOldV1Lab = (lab) => {\r\n    // Old here means that it was created before NC/NV deprecation.\r\n    if (!!!lab?.createdDate) {\r\n        return false;\r\n    }\r\n    return lab && lab.createdDate < new Date('2024-02-22');\r\n};\r\nexport const isOldV1GpuLab = (lab, template) => {\r\n    return !!lab && isOldV1Lab(lab) && !!template && isV1GpuTemplate(template);\r\n};\r\nexport const isLabMoving = (lab) => {\r\n    return lab && lab.provisioningState === ProvisioningState.Moving ? true : false;\r\n};\r\nexport const isLabDeleting = (lab) => {\r\n    return lab && lab.provisioningState === ProvisioningState.Deleting ? true : false;\r\n};\r\nexport const isLabDeletionFailed = (lab) => {\r\n    if (!!lab && !isVNextLab(lab.id)) {\r\n        const vCurrentlab = lab;\r\n        return (vCurrentlab.provisioningState === ProvisioningState.Failed &&\r\n            vCurrentlab.latestOperationResult?.httpMethod === 'DELETE');\r\n    }\r\n    else {\r\n        // missing lastest operation result in VNext now. so we cannot know whether the failed operation is DELETE.\r\n        return false;\r\n    }\r\n};\r\nexport const getCurrentLabId = memoize((store) => {\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    if (isLabParentLabAccount) {\r\n        const labStore = store.get('labStore');\r\n        const currentLabId = labStore.get('currentLabId');\r\n        return currentLabId;\r\n    }\r\n    else {\r\n        return getVNextCurrentLabId(store);\r\n    }\r\n});\r\nexport const getCurrentLab = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    if (!currentLabId) {\r\n        return undefined;\r\n    }\r\n    return isVNextLab(currentLabId) ? getVNextLab(store, currentLabId) : getVCurrentLab(store, currentLabId);\r\n});\r\nexport const doesCurrentLabExist = memoize((store) => {\r\n    return !!getCurrentLab(store);\r\n});\r\nexport const getLabNames = memoize((store) => {\r\n    const labs = getLabs(store);\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    return isLabParentLabAccount\r\n        ? labs.map((o) => o.name)\r\n        : labs.map((o) => o.name);\r\n});\r\nexport const getLabStoreLoadState = memoize((store) => {\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    return isLabParentLabAccount\r\n        ? store.get('labStore').get('loadState')\r\n        : store.get('vNextLabStore').get('loadState');\r\n});\r\nexport const isCreatingLab = memoize((store) => {\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    return isLabParentLabAccount\r\n        ? store.get('labStore').get('isCreating')\r\n        : store.get('vNextLabStore').get('isCreating');\r\n});\r\nexport const getSelectableLabs = memoize((store) => {\r\n    const labs = getFilteredLabs(store);\r\n    const isLabParentLabAccount = isCurrentLabParentLabAccount(store);\r\n    if (isLabParentLabAccount) {\r\n        return labs.filter((lab) => lab.provisioningState !== ProvisioningState.Deleting);\r\n    }\r\n    else {\r\n        return labs.filter((lab) => lab.provisioningState !== ProvisioningState.Deleting);\r\n    }\r\n});\r\nexport const getLabUsageQuota = memoize((lab) => {\r\n    if (!lab) {\r\n        return undefined;\r\n    }\r\n    if (isVNextLab(lab.id)) {\r\n        const currentLab = lab;\r\n        return !!currentLab.virtualMachineProfile?.usageQuota\r\n            ? moment.duration(currentLab.virtualMachineProfile.usageQuota).asHours()\r\n            : undefined;\r\n    }\r\n    else {\r\n        return lab.usageQuota.asHours();\r\n    }\r\n});\r\nexport const isLabUserRestricted = memoize((lab) => {\r\n    if (!lab) {\r\n        return true;\r\n    }\r\n    if (isVNextLab(lab.id)) {\r\n        const currentLab = lab;\r\n        return (!currentLab.securityProfile ||\r\n            currentLab.securityProfile.openAccess === LabServicesModels.EnableState.Disabled);\r\n    }\r\n    else {\r\n        return lab.userAccessMode === Ml.LabUserAccessMode.Restricted;\r\n    }\r\n});\r\nexport const getLabCapacity = memoize((lab) => {\r\n    if (!!lab) {\r\n        const isVNext = isVNextLab(lab.id);\r\n        return isVNext ? lab.virtualMachineProfile?.sku?.capacity : lab.maxUsersInLab;\r\n    }\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { isHealthyState } from '../../../utils/provisioning-state';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getCurrentLabParentId } from '../lab-parent-resource-selectors';\r\nimport { getCurrentLab, isVNextLab } from '../lab-selectors';\r\nimport { getCurrentLmsInstance } from '../lti-selectors';\r\nimport { isLmsHost } from '../common-selectors';\r\nimport { Roles } from '../../../data/models/roles';\r\nexport const getCurrentLabPlanId = memoize((store) => {\r\n    const currentLabPlanId = store.get('labPlanStore').get('currentLabPlanId');\r\n    return currentLabPlanId;\r\n});\r\nexport const getLabPlans = memoize((store) => {\r\n    const labPlanStore = store.get('labPlanStore');\r\n    const labPlans = labPlanStore.get('labPlans');\r\n    return labPlans;\r\n});\r\nexport const isLinkedLmsInstanceValid = memoize((labPlan, lmsInstance, isLms) => {\r\n    if (!isLms) {\r\n        return true;\r\n    }\r\n    else {\r\n        return (!!labPlan.linkedLmsInstance &&\r\n            caseInsensitiveCultureInvariantCompare(labPlan.linkedLmsInstance, lmsInstance) === 0);\r\n    }\r\n});\r\nexport const isValidLabPlan = memoize((labPlan, lmsInstance, isLms) => {\r\n    return isHealthyState(labPlan) && isLinkedLmsInstanceValid(labPlan, lmsInstance, isLms);\r\n});\r\nexport const getValidLabPlans = memoize((store) => {\r\n    const labPlans = getLabPlans(store);\r\n    const currentLmsInstance = getCurrentLmsInstance(store);\r\n    const isLms = isLmsHost(store);\r\n    return labPlans.filter((o) => isValidLabPlan(o, currentLmsInstance, isLms));\r\n});\r\nexport const getCurrentResourceGroupLabPlans = memoize((store) => {\r\n    const labPlans = getValidLabPlans(store);\r\n    const currentLabParentId = getCurrentLabParentId(store);\r\n    return labPlans.filter((o) => doesLabPlanResourceGroupMatch(o, currentLabParentId));\r\n});\r\nfunction doesLabPlanResourceGroupMatch(labPlan, labParentId) {\r\n    const resourceId = new ResourceId(labPlan.id, true);\r\n    return caseInsensitiveCultureInvariantCompare(resourceId.getResourceGroupId(), labParentId) === 0;\r\n}\r\nexport function getLabPlan(labPlans, labPlanId) {\r\n    return labPlans.find((o) => caseInsensitiveCultureInvariantCompare(o.id, labPlanId) === 0);\r\n}\r\nexport const getCurrentLabPlan = memoize((store) => {\r\n    const labPlans = getCurrentResourceGroupLabPlans(store);\r\n    const currentLabPlanId = getCurrentLabPlanId(store);\r\n    return getLabPlan(labPlans, currentLabPlanId);\r\n});\r\nexport const getLabPlanForCurrentLab = memoize((store) => {\r\n    const labPlans = getLabPlans(store);\r\n    const currentLab = getCurrentLab(store);\r\n    if (isVNextLab(currentLab.id)) {\r\n        return labPlans.find((o) => o.id === currentLab.labPlanId);\r\n    }\r\n});\r\nexport const getLinkableLabPlans = memoize((store) => {\r\n    let labPlans = getLabPlans(store);\r\n    const currentLmsInstance = getCurrentLmsInstance(store);\r\n    // get lab plans not linked to any LMS instance or linked to current lms instance\r\n    labPlans = labPlans.filter((o) => !!o.roles &&\r\n        o.roles.indexOf(Roles.Write) > -1 &&\r\n        (!o.linkedLmsInstance ||\r\n            caseInsensitiveCultureInvariantCompare(o.linkedLmsInstance, currentLmsInstance) === 0));\r\n    return labPlans;\r\n});\r\nexport const getUpdateLmsErrors = memoize((store) => {\r\n    const labPlanStore = store.get('labPlanStore');\r\n    return labPlanStore.get('updateLmsErrors');\r\n});\r\n","export const MlCoreFamily = {\r\n    GPU: 'GPU',\r\n    Standard: 'Standard',\r\n};\r\n","import memoize from 'memoize-one';\r\nexport const determineVNextLabSkuRemainingVms = memoize((coreUsage, currentLabCapacity, coresPerVm) => {\r\n    if (currentLabCapacity === undefined || !coresPerVm) {\r\n        return undefined;\r\n    }\r\n    const { limit, currentValue } = coreUsage;\r\n    const remainingCores = limit - currentValue;\r\n    const remainingVms = Math.floor(remainingCores / coresPerVm);\r\n    return remainingVms + currentLabCapacity;\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { MlCoreFamily } from '../../data/models/core-quota-data';\r\nimport { determineVNextLabSkuRemainingVms } from '../../common/selectors/usage-selectors';\r\nexport const CoreQuotaStatus = {\r\n    Exempt: 'Exempt',\r\n    Restricted: 'Restricted',\r\n    QuotaExceeded: 'QuotaExceeded',\r\n    QuotaNotExceeded: 'QuotaNotExceeded',\r\n    Unknown: 'Unknown',\r\n};\r\nexport const convertToRestModel = (uiModel) => {\r\n    const restModel = {\r\n        isExempt: uiModel.isExempt,\r\n        restrictions: [],\r\n        usages: [],\r\n    };\r\n    uiModel.restrictions.forEach((value, key) => {\r\n        restModel.restrictions.push({ coreFamily: key, numberOfCores: value });\r\n    });\r\n    uiModel.usages.forEach((value, key) => {\r\n        restModel.usages.push({ coreFamily: key, numberOfCores: value });\r\n    });\r\n    return restModel;\r\n};\r\nexport const getCoreLimits = memoize((state) => {\r\n    const coreLimitStore = state.get('coreLimitStore');\r\n    return coreLimitStore.get('coreQuotaData');\r\n});\r\nexport const determineVCurrentQuotaStatus = memoize((coreQuotaData) => {\r\n    if (!coreQuotaData) {\r\n        return CoreQuotaStatus.Unknown;\r\n    }\r\n    if (coreQuotaData.isExempt === undefined) {\r\n        return CoreQuotaStatus.Unknown;\r\n    }\r\n    if (coreQuotaData.isExempt) {\r\n        return CoreQuotaStatus.Exempt;\r\n    }\r\n    const { restrictions, usages } = coreQuotaData;\r\n    if (!restrictions || !usages) {\r\n        return CoreQuotaStatus.Unknown;\r\n    }\r\n    const gpuLimit = restrictions.get(MlCoreFamily.GPU);\r\n    const standardLimit = restrictions.get(MlCoreFamily.Standard);\r\n    if (gpuLimit === 0 && standardLimit === 0) {\r\n        return CoreQuotaStatus.Restricted;\r\n    }\r\n    const gpuUsage = usages.get(MlCoreFamily.GPU);\r\n    const standardUsage = usages.get(MlCoreFamily.Standard);\r\n    if (gpuLimit === undefined ||\r\n        standardLimit === undefined ||\r\n        gpuUsage === undefined ||\r\n        standardUsage === undefined) {\r\n        return CoreQuotaStatus.Unknown;\r\n    }\r\n    if (gpuUsage >= gpuLimit && standardUsage >= standardLimit) {\r\n        return CoreQuotaStatus.QuotaExceeded;\r\n    }\r\n    return CoreQuotaStatus.QuotaNotExceeded;\r\n});\r\n/**\r\n * Determines additional number of VMs a lab can have\r\n * If lab is published, then their cores are already accounted for and we return the remaining number of VMs in the subscription\r\n * If lab is not published, then the max users in lab is not accounted for in our recorded usage and we have to include that\r\n */\r\nexport const determineAdditionalVms = memoize((numUsersInLab, hasBeenPublished, remainingVmsInLab) => {\r\n    if (remainingVmsInLab === undefined) {\r\n        return;\r\n    }\r\n    if (hasBeenPublished) {\r\n        return remainingVmsInLab;\r\n    }\r\n    if (numUsersInLab === undefined) {\r\n        return remainingVmsInLab;\r\n    }\r\n    if (remainingVmsInLab - numUsersInLab < 0) {\r\n        return 0;\r\n    }\r\n    return remainingVmsInLab - numUsersInLab;\r\n});\r\n/**\r\n * Determines remaining number of VMs the subscription can provision given the size of a VM and its core family\r\n */\r\nexport const determineVCurrentRemainingVms = memoize((isGpu, coresPerVm, coreQuotaData) => {\r\n    if (!coreQuotaData) {\r\n        return;\r\n    }\r\n    if (coresPerVm === undefined) {\r\n        return;\r\n    }\r\n    if (coreQuotaData.isExempt === undefined) {\r\n        return;\r\n    }\r\n    if (coreQuotaData.isExempt) {\r\n        return;\r\n    }\r\n    const { restrictions, usages } = coreQuotaData;\r\n    if (!restrictions || !usages) {\r\n        return;\r\n    }\r\n    const gpuLimit = restrictions.get(MlCoreFamily.GPU);\r\n    const standardLimit = restrictions.get(MlCoreFamily.Standard);\r\n    if (gpuLimit === 0 && standardLimit === 0) {\r\n        return 0;\r\n    }\r\n    const gpuUsage = usages.get(MlCoreFamily.GPU);\r\n    const standardUsage = usages.get(MlCoreFamily.Standard);\r\n    const remainingCores = isGpu ? gpuLimit - gpuUsage : standardLimit - standardUsage;\r\n    const remainingVms = Math.floor(remainingCores / coresPerVm);\r\n    return remainingVms;\r\n});\r\nexport const safeGetRestrictions = memoize((coreFamily, coreQuotaData) => {\r\n    if (!coreQuotaData) {\r\n        return;\r\n    }\r\n    if (coreQuotaData.isExempt === undefined) {\r\n        return;\r\n    }\r\n    if (coreQuotaData.isExempt) {\r\n        return;\r\n    }\r\n    const { restrictions } = coreQuotaData;\r\n    if (!restrictions) {\r\n        return;\r\n    }\r\n    return restrictions.get(coreFamily);\r\n});\r\nexport const safeGetUsages = memoize((coreFamily, coreQuotaData) => {\r\n    if (!coreQuotaData) {\r\n        return;\r\n    }\r\n    if (coreQuotaData.isExempt === undefined) {\r\n        return;\r\n    }\r\n    if (coreQuotaData.isExempt) {\r\n        return;\r\n    }\r\n    const { usages } = coreQuotaData;\r\n    if (!usages) {\r\n        return;\r\n    }\r\n    return usages.get(coreFamily);\r\n});\r\nexport const determineVCurrentOrVNextLabRemainingVms = memoize((isVNext, isGpu, coresPerVm, coreQuotaData, currentLabCapacity) => {\r\n    if (!coreQuotaData) {\r\n        return undefined;\r\n    }\r\n    return !isVNext\r\n        ? determineVCurrentRemainingVms(isGpu, coresPerVm, coreQuotaData)\r\n        : determineVNextLabSkuRemainingVms(coreQuotaData, currentLabCapacity, coresPerVm);\r\n});\r\nconst CoreLimitSelectors = {\r\n    determineAdditionalVms,\r\n    safeGetRestrictions,\r\n    safeGetUsages,\r\n    convertToRestModel,\r\n    determineVCurrentOrVNextLabRemainingVms,\r\n};\r\nexport default CoreLimitSelectors;\r\n","import { LabServicesModels } from 'lab-services';\r\nimport memoize from 'memoize-one';\r\nimport { getCurrentLabId } from '../lab-selectors';\r\nimport { getVNextLab } from './lab-selectors';\r\nexport const getVNextPricingAndAvailabilityData = memoize((store) => store.get('vNextPricingAndAvailabilityStore').get('data'));\r\nexport const getCurrentLabSizeData = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    const currentVNextLab = getVNextLab(store, currentLabId);\r\n    const imageType = currentVNextLab?.virtualMachineProfile?.osType;\r\n    const sku = currentVNextLab?.virtualMachineProfile?.sku;\r\n    const pricingAndAvailabilityData = getVNextPricingAndAvailabilityData(store);\r\n    if (!imageType || !sku || !pricingAndAvailabilityData) {\r\n        return undefined;\r\n    }\r\n    const sizeData = imageType === LabServicesModels.OsType.Linux\r\n        ? pricingAndAvailabilityData.linux\r\n        : pricingAndAvailabilityData.windows;\r\n    return sizeData.sizes[sku.name];\r\n});\r\n","import { Map } from 'immutable';\r\nimport memoize from 'memoize-one';\r\nexport const getVNextPrice = memoize((store) => store.get('vNextPriceStore').get('prices'));\r\nexport const getVNextPriceLoadState = memoize((store) => store.get('vNextPriceStore').get('loadState'));\r\nexport const getVNextPriceLoadError = memoize((store) => store.get('vNextPriceStore').get('error'));\r\n// Get a map (key by region) of maps (key by SKU name) of prices\r\n// e.g. { westus: { Standard_Fsv2_2_4GB_64_S_SSD: {...}, Standard_Fsv2_2_4GB_128_S_SSD: {...} } }\r\nexport const getVNextProcessedPrice = memoize((store) => {\r\n    const priceByRegion = getVNextPrice(store);\r\n    let processedPrice = Map();\r\n    for (const [region, prices] of priceByRegion) {\r\n        let skuFamilyPrice = Map();\r\n        prices.forEach((price) => {\r\n            if (!skuFamilyPrice.get(price.skuName)) {\r\n                skuFamilyPrice = skuFamilyPrice.set(price.skuName, []);\r\n            }\r\n            skuFamilyPrice.get(price.skuName)?.push(price);\r\n        });\r\n        processedPrice = processedPrice.set(region, skuFamilyPrice);\r\n    }\r\n    return processedPrice;\r\n});\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\r\n */\n\n/**\r\n * Defines values for EnableState.\r\n * Possible values include: 'Enabled', 'Disabled'\r\n * @readonly\r\n * @enum {string}\r\n */\nexport var EnableState;\n\n(function (EnableState) {\n  EnableState[\"Enabled\"] = \"Enabled\";\n  EnableState[\"Disabled\"] = \"Disabled\";\n})(EnableState || (EnableState = {}));\n/**\r\n * Defines values for OsType.\r\n * Possible values include: 'Windows', 'Linux'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var OsType;\n\n(function (OsType) {\n  OsType[\"Windows\"] = \"Windows\";\n  OsType[\"Linux\"] = \"Linux\";\n})(OsType || (OsType = {}));\n/**\r\n * Defines values for Availability.\r\n * Possible values include: 'Available', 'Unavailable', 'Deprecated', 'Disabled'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var Availability;\n\n(function (Availability) {\n  /**\r\n   * The item is available\r\n   */\n  Availability[\"Available\"] = \"Available\";\n  /**\r\n   * The item is currently unavailable.\r\n   */\n\n  Availability[\"Unavailable\"] = \"Unavailable\";\n  /**\r\n   * The item is deprecated and will eventually be disabled.\r\n   */\n\n  Availability[\"Deprecated\"] = \"Deprecated\";\n  /**\r\n   * The item has been permanently disabled.\r\n   */\n\n  Availability[\"Disabled\"] = \"Disabled\";\n})(Availability || (Availability = {}));\n/**\r\n * Defines values for VirtualMachineState.\r\n * Possible values include: 'Creating', 'Updating', 'Deleting', 'Moving', 'Stopped', 'Starting',\r\n * 'Running', 'Stopping', 'ResettingPassword', 'Reimaging', 'Redeploying'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var VirtualMachineState;\n\n(function (VirtualMachineState) {\n  /**\r\n   * The VM is being created.\r\n   */\n  VirtualMachineState[\"Creating\"] = \"Creating\";\n  /**\r\n   * The VM is being updated.\r\n   */\n\n  VirtualMachineState[\"Updating\"] = \"Updating\";\n  /**\r\n   * The VM is being deleted.\r\n   */\n\n  VirtualMachineState[\"Deleting\"] = \"Deleting\";\n  /**\r\n   * The VM is being moved.\r\n   */\n\n  VirtualMachineState[\"Moving\"] = \"Moving\";\n  /**\r\n   * The VM is currently stopped.\r\n   */\n\n  VirtualMachineState[\"Stopped\"] = \"Stopped\";\n  /**\r\n   * The VM is starting.\r\n   */\n\n  VirtualMachineState[\"Starting\"] = \"Starting\";\n  /**\r\n   * The VM is running.\r\n   */\n\n  VirtualMachineState[\"Running\"] = \"Running\";\n  /**\r\n   * The VM is stopping.\r\n   */\n\n  VirtualMachineState[\"Stopping\"] = \"Stopping\";\n  /**\r\n   * The VM password is being reset.\r\n   */\n\n  VirtualMachineState[\"ResettingPassword\"] = \"ResettingPassword\";\n  /**\r\n   * The VM is reimaging.\r\n   */\n\n  VirtualMachineState[\"Reimaging\"] = \"Reimaging\";\n  /**\r\n   * The VM is redeploying.\r\n   */\n\n  VirtualMachineState[\"Redeploying\"] = \"Redeploying\";\n})(VirtualMachineState || (VirtualMachineState = {}));\n/**\r\n * Defines values for PriceUnit.\r\n * Possible values include: 'WindowsHourly', 'LinuxHourly', 'HybridBenefitHourly', 'InactiveHourly'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var PriceUnit;\n\n(function (PriceUnit) {\n  /**\r\n   * Hourly cost for Windows VMs.\r\n   */\n  PriceUnit[\"WindowsHourly\"] = \"WindowsHourly\";\n  /**\r\n   * Hourly cost for Linux VMs.\r\n   */\n\n  PriceUnit[\"LinuxHourly\"] = \"LinuxHourly\";\n  /**\r\n   * Hourly cost for VMs with Azure Hybrid Benefit.\r\n   */\n\n  PriceUnit[\"HybridBenefitHourly\"] = \"HybridBenefitHourly\";\n  /**\r\n   * Hourly cost for inactive VMs regardless of OS.\r\n   */\n\n  PriceUnit[\"InactiveHourly\"] = \"InactiveHourly\";\n})(PriceUnit || (PriceUnit = {}));\n/**\r\n * Defines values for OperationStatus.\r\n * Possible values include: 'NotStarted', 'InProgress', 'Succeeded', 'Failed', 'Canceled'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var OperationStatus;\n\n(function (OperationStatus) {\n  /**\r\n   * The operation has been accepted but hasn't started.\r\n   */\n  OperationStatus[\"NotStarted\"] = \"NotStarted\";\n  /**\r\n   * The operation is running\r\n   */\n\n  OperationStatus[\"InProgress\"] = \"InProgress\";\n  /**\r\n   * The operation Succeeded\r\n   */\n\n  OperationStatus[\"Succeeded\"] = \"Succeeded\";\n  /**\r\n   * The operation failed\r\n   */\n\n  OperationStatus[\"Failed\"] = \"Failed\";\n  /**\r\n   * Not supported yet\r\n   */\n\n  OperationStatus[\"Canceled\"] = \"Canceled\";\n})(OperationStatus || (OperationStatus = {}));\n/**\r\n * Defines values for ProvisioningState.\r\n * Possible values include: 'Creating', 'Updating', 'Deleting', 'Succeeded', 'Failed', 'Locked'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ProvisioningState;\n\n(function (ProvisioningState) {\n  /**\r\n   * Resource is in the process of being created.\r\n   */\n  ProvisioningState[\"Creating\"] = \"Creating\";\n  /**\r\n   * New property values are being applied to the resource.\r\n   */\n\n  ProvisioningState[\"Updating\"] = \"Updating\";\n  /**\r\n   * Resource is in the process of being deleted.\r\n   */\n\n  ProvisioningState[\"Deleting\"] = \"Deleting\";\n  /**\r\n   * Resource is in healthy state after creation or update operation.\r\n   */\n\n  ProvisioningState[\"Succeeded\"] = \"Succeeded\";\n  /**\r\n   * Previous operation on the resource has failed leaving resource in unhealthy state.\r\n   */\n\n  ProvisioningState[\"Failed\"] = \"Failed\";\n  /**\r\n   * The resource is locked and changes are currently blocked. This could be due to maintenance or\r\n   * a scheduled operation. The state will go back to succeeded once the locking operation has\r\n   * finished.\r\n   */\n\n  ProvisioningState[\"Locked\"] = \"Locked\";\n})(ProvisioningState || (ProvisioningState = {}));\n/**\r\n * Defines values for ConnectionType.\r\n * Possible values include: 'Public', 'Private', 'None'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ConnectionType;\n\n(function (ConnectionType) {\n  ConnectionType[\"Public\"] = \"Public\";\n  ConnectionType[\"Private\"] = \"Private\";\n  ConnectionType[\"None\"] = \"None\";\n})(ConnectionType || (ConnectionType = {}));\n/**\r\n * Defines values for ShutdownOnIdleMode.\r\n * Possible values include: 'None', 'UserAbsence', 'LowUsage'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var ShutdownOnIdleMode;\n\n(function (ShutdownOnIdleMode) {\n  /**\r\n   * The VM won't be shut down when it is idle.\r\n   */\n  ShutdownOnIdleMode[\"None\"] = \"None\";\n  /**\r\n   * The VM will be considered as idle when there is no keyboard or mouse input.\r\n   */\n\n  ShutdownOnIdleMode[\"UserAbsence\"] = \"UserAbsence\";\n  /**\r\n   * The VM will be considered as idle when user is absent and the resource (CPU and disk)\r\n   * consumption is low.\r\n   */\n\n  ShutdownOnIdleMode[\"LowUsage\"] = \"LowUsage\";\n})(ShutdownOnIdleMode || (ShutdownOnIdleMode = {}));\n/**\r\n * Defines values for CreatedByType.\r\n * Possible values include: 'User', 'Application', 'ManagedIdentity', 'Key'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var CreatedByType;\n\n(function (CreatedByType) {\n  CreatedByType[\"User\"] = \"User\";\n  CreatedByType[\"Application\"] = \"Application\";\n  CreatedByType[\"ManagedIdentity\"] = \"ManagedIdentity\";\n  CreatedByType[\"Key\"] = \"Key\";\n})(CreatedByType || (CreatedByType = {}));\n/**\r\n * Defines values for LabState.\r\n * Possible values include: 'Draft', 'Publishing', 'Scaling', 'Syncing', 'Published'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var LabState;\n\n(function (LabState) {\n  /**\r\n   * The lab is currently in draft (has not been published).\r\n   */\n  LabState[\"Draft\"] = \"Draft\";\n  /**\r\n   * The lab is publishing.\r\n   */\n\n  LabState[\"Publishing\"] = \"Publishing\";\n  /**\r\n   * The lab is scaling.\r\n   */\n\n  LabState[\"Scaling\"] = \"Scaling\";\n  /**\r\n   * The lab is syncing users.\r\n   */\n\n  LabState[\"Syncing\"] = \"Syncing\";\n  /**\r\n   * The lab has been published.\r\n   */\n\n  LabState[\"Published\"] = \"Published\";\n})(LabState || (LabState = {}));\n/**\r\n * Defines values for CreateOption.\r\n * Possible values include: 'Image', 'TemplateVM'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var CreateOption;\n\n(function (CreateOption) {\n  /**\r\n   * An image is used to create all lab user virtual machines. When this option is set, no template\r\n   * VM will be created.\r\n   */\n  CreateOption[\"Image\"] = \"Image\";\n  /**\r\n   * A template VM will be used to create all lab user virtual machines.\r\n   */\n\n  CreateOption[\"TemplateVM\"] = \"TemplateVM\";\n})(CreateOption || (CreateOption = {}));\n/**\r\n * Defines values for SkuTier.\r\n * Possible values include: 'Free', 'Basic', 'Standard', 'Premium'\r\n * @readonly\r\n * @enum {string}\r\n */\n\n\nexport var SkuTier;\n\n(function (SkuTier) {\n  SkuTier[\"Free\"] = \"Free\";\n  SkuTier[\"Basic\"] = \"Basic\";\n  SkuTier[\"Standard\"] = \"Standard\";\n  SkuTier[\"Premium\"] = \"Premium\";\n})(SkuTier || (SkuTier = {}));","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport { CloudErrorMapper, BaseResourceMapper } from \"@azure/ms-rest-azure-js\";\nexport var CloudError = CloudErrorMapper;\nexport var BaseResource = BaseResourceMapper;\nexport var CoreInfo = {\n  serializedName: \"CoreInfo\",\n  type: {\n    name: \"Composite\",\n    className: \"CoreInfo\",\n    modelProperties: {\n      standard: {\n        required: true,\n        serializedName: \"standard\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      gpu: {\n        required: true,\n        serializedName: \"gpu\",\n        type: {\n          name: \"Number\"\n        }\n      }\n    }\n  }\n};\nexport var CoreUsage = {\n  serializedName: \"CoreUsage\",\n  type: {\n    name: \"Composite\",\n    className: \"CoreUsage\",\n    modelProperties: {\n      used: {\n        required: true,\n        serializedName: \"used\",\n        type: {\n          name: \"Composite\",\n          className: \"CoreInfo\"\n        }\n      },\n      alloted: {\n        required: true,\n        serializedName: \"alloted\",\n        type: {\n          name: \"Composite\",\n          className: \"CoreInfo\"\n        }\n      }\n    }\n  }\n};\nexport var Resource = {\n  serializedName: \"Resource\",\n  type: {\n    name: \"Composite\",\n    className: \"Resource\",\n    modelProperties: {\n      id: {\n        readOnly: true,\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      type: {\n        readOnly: true,\n        serializedName: \"type\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var TrackedResource = {\n  serializedName: \"TrackedResource\",\n  type: {\n    name: \"Composite\",\n    className: \"TrackedResource\",\n    modelProperties: __assign(__assign({}, Resource.type.modelProperties), {\n      tags: {\n        serializedName: \"tags\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      },\n      location: {\n        required: true,\n        serializedName: \"location\",\n        type: {\n          name: \"String\"\n        }\n      }\n    })\n  }\n};\nexport var Lab = {\n  serializedName: \"Lab\",\n  type: {\n    name: \"Composite\",\n    className: \"Lab\",\n    modelProperties: __assign(__assign({}, TrackedResource.type.modelProperties), {\n      systemData: {\n        readOnly: true,\n        serializedName: \"systemData\",\n        type: {\n          name: \"Composite\",\n          className: \"SystemData\"\n        }\n      },\n      autoShutdownProfile: {\n        serializedName: \"properties.autoShutdownProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"AutoShutdownProfile\"\n        }\n      },\n      connectionProfile: {\n        serializedName: \"properties.connectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"ConnectionProfile\"\n        }\n      },\n      virtualMachineProfile: {\n        serializedName: \"properties.virtualMachineProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineProfile\"\n        }\n      },\n      securityProfile: {\n        serializedName: \"properties.securityProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"SecurityProfile\"\n        }\n      },\n      rosterProfile: {\n        serializedName: \"properties.rosterProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"RosterProfile\"\n        }\n      },\n      labPlanId: {\n        serializedName: \"properties.labPlanId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      title: {\n        serializedName: \"properties.title\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        serializedName: \"properties.description\",\n        type: {\n          name: \"String\"\n        }\n      },\n      provisioningState: {\n        readOnly: true,\n        serializedName: \"properties.provisioningState\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Succeeded\", \"Failed\", \"Locked\"]\n        }\n      },\n      networkProfile: {\n        serializedName: \"properties.networkProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"LabNetworkProfile\"\n        }\n      },\n      state: {\n        readOnly: true,\n        serializedName: \"properties.state\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Draft\", \"Publishing\", \"Scaling\", \"Syncing\", \"Published\"]\n        }\n      }\n    })\n  }\n};\nexport var CreateLab = {\n  serializedName: \"CreateLab\",\n  type: {\n    name: \"Composite\",\n    className: \"CreateLab\",\n    modelProperties: __assign({}, Lab.type.modelProperties)\n  }\n};\nexport var PublishLab = {\n  serializedName: \"PublishLab\",\n  type: {\n    name: \"Composite\",\n    className: \"PublishLab\",\n    modelProperties: {\n      capacity: {\n        serializedName: \"capacity\",\n        type: {\n          name: \"Number\"\n        }\n      }\n    }\n  }\n};\nexport var ResourceOperationError = {\n  serializedName: \"ResourceOperationError\",\n  type: {\n    name: \"Composite\",\n    className: \"ResourceOperationError\",\n    modelProperties: {\n      timestamp: {\n        serializedName: \"timestamp\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      code: {\n        serializedName: \"code\",\n        type: {\n          name: \"String\"\n        }\n      },\n      message: {\n        serializedName: \"message\",\n        type: {\n          name: \"String\"\n        }\n      },\n      action: {\n        serializedName: \"action\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LocationPriceAndAvailabilityData = {\n  serializedName: \"LocationPriceAndAvailabilityData\",\n  type: {\n    name: \"Composite\",\n    className: \"LocationPriceAndAvailabilityData\",\n    modelProperties: {\n      name: {\n        required: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      availability: {\n        required: true,\n        serializedName: \"availability\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Available\", \"Unavailable\", \"Deprecated\", \"Disabled\"]\n        }\n      },\n      displayName: {\n        required: true,\n        serializedName: \"displayName\",\n        type: {\n          name: \"String\"\n        }\n      },\n      price: {\n        required: true,\n        serializedName: \"price\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      currencyCode: {\n        required: true,\n        serializedName: \"currencyCode\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var SizePriceAndAvailabilityData = {\n  serializedName: \"SizePriceAndAvailabilityData\",\n  type: {\n    name: \"Composite\",\n    className: \"SizePriceAndAvailabilityData\",\n    modelProperties: {\n      name: {\n        required: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      availability: {\n        required: true,\n        serializedName: \"availability\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Available\", \"Unavailable\", \"Deprecated\", \"Disabled\"]\n        }\n      },\n      displayName: {\n        required: true,\n        serializedName: \"displayName\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        required: true,\n        serializedName: \"description\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ordinal: {\n        required: true,\n        serializedName: \"ordinal\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      memoryInGB: {\n        required: true,\n        serializedName: \"memoryInGB\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      cores: {\n        required: true,\n        serializedName: \"cores\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      discreteGpu: {\n        required: true,\n        serializedName: \"discreteGpu\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      locations: {\n        required: true,\n        serializedName: \"locations\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"Composite\",\n              className: \"LocationPriceAndAvailabilityData\"\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexport var OSPriceAndAvailabilityData = {\n  serializedName: \"OSPriceAndAvailabilityData\",\n  type: {\n    name: \"Composite\",\n    className: \"OSPriceAndAvailabilityData\",\n    modelProperties: {\n      name: {\n        required: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      availability: {\n        required: true,\n        serializedName: \"availability\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Available\", \"Unavailable\", \"Deprecated\", \"Disabled\"]\n        }\n      },\n      sizes: {\n        required: true,\n        serializedName: \"sizes\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"Composite\",\n              className: \"SizePriceAndAvailabilityData\"\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachinePriceAndAvailabilityData = {\n  serializedName: \"VirtualMachinePriceAndAvailabilityData\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachinePriceAndAvailabilityData\",\n    modelProperties: {\n      windows: {\n        required: true,\n        serializedName: \"Windows\",\n        type: {\n          name: \"Composite\",\n          className: \"OSPriceAndAvailabilityData\"\n        }\n      },\n      linux: {\n        required: true,\n        serializedName: \"Linux\",\n        type: {\n          name: \"Composite\",\n          className: \"OSPriceAndAvailabilityData\"\n        }\n      }\n    }\n  }\n};\nexport var SupportInfo = {\n  serializedName: \"SupportInfo\",\n  type: {\n    name: \"Composite\",\n    className: \"SupportInfo\",\n    modelProperties: {\n      url: {\n        serializedName: \"url\",\n        type: {\n          name: \"String\"\n        }\n      },\n      email: {\n        serializedName: \"email\",\n        type: {\n          name: \"String\"\n        }\n      },\n      phone: {\n        serializedName: \"phone\",\n        type: {\n          name: \"String\"\n        }\n      },\n      instructions: {\n        serializedName: \"instructions\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachine = {\n  serializedName: \"VirtualMachine\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachine\",\n    modelProperties: {\n      state: {\n        readOnly: true,\n        serializedName: \"state\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Creating\", \"Updating\", \"Deleting\", \"Moving\", \"Stopped\", \"Starting\", \"Running\", \"Stopping\", \"ResettingPassword\", \"Reimaging\", \"Redeploying\"]\n        }\n      },\n      title: {\n        readOnly: true,\n        serializedName: \"title\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        readOnly: true,\n        serializedName: \"description\",\n        type: {\n          name: \"String\"\n        }\n      },\n      location: {\n        readOnly: true,\n        serializedName: \"location\",\n        type: {\n          name: \"String\"\n        }\n      },\n      subscriptionId: {\n        readOnly: true,\n        serializedName: \"subscriptionId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      id: {\n        required: true,\n        readOnly: true,\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      privateIpAddress: {\n        readOnly: true,\n        serializedName: \"privateIpAddress\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sshAuthority: {\n        readOnly: true,\n        serializedName: \"sshAuthority\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sshInBrowserUrl: {\n        readOnly: true,\n        serializedName: \"sshInBrowserUrl\",\n        type: {\n          name: \"String\"\n        }\n      },\n      rdpAuthority: {\n        readOnly: true,\n        serializedName: \"rdpAuthority\",\n        type: {\n          name: \"String\"\n        }\n      },\n      rdpInBrowserUrl: {\n        readOnly: true,\n        serializedName: \"rdpInBrowserUrl\",\n        type: {\n          name: \"String\"\n        }\n      },\n      username: {\n        readOnly: true,\n        serializedName: \"username\",\n        type: {\n          name: \"String\"\n        }\n      },\n      useSharedPassword: {\n        readOnly: true,\n        serializedName: \"useSharedPassword\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      quotaUsed: {\n        readOnly: true,\n        serializedName: \"quotaUsed\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      totalQuota: {\n        readOnly: true,\n        serializedName: \"totalQuota\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      scheduleEndTime: {\n        readOnly: true,\n        serializedName: \"scheduleEndTime\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      lastStarted: {\n        readOnly: true,\n        serializedName: \"lastStarted\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      lastStopped: {\n        readOnly: true,\n        serializedName: \"lastStopped\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      lastPasswordReset: {\n        readOnly: true,\n        serializedName: \"lastPasswordReset\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      osType: {\n        readOnly: true,\n        serializedName: \"osType\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Windows\", \"Linux\"]\n        }\n      },\n      supportInfo: {\n        readOnly: true,\n        serializedName: \"supportInfo\",\n        type: {\n          name: \"Composite\",\n          className: \"SupportInfo\"\n        }\n      },\n      resourceOperationError: {\n        readOnly: true,\n        serializedName: \"resourceOperationError\",\n        type: {\n          name: \"Composite\",\n          className: \"ResourceOperationError\"\n        }\n      }\n    }\n  }\n};\nexport var ResetPasswordBody = {\n  serializedName: \"ResetPasswordBody\",\n  type: {\n    name: \"Composite\",\n    className: \"ResetPasswordBody\",\n    modelProperties: {\n      username: {\n        required: true,\n        serializedName: \"username\",\n        type: {\n          name: \"String\"\n        }\n      },\n      password: {\n        required: true,\n        serializedName: \"password\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabServicesPrice = {\n  serializedName: \"LabServicesPrice\",\n  type: {\n    name: \"Composite\",\n    className: \"LabServicesPrice\",\n    modelProperties: {\n      availability: {\n        serializedName: \"availability\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Available\", \"Unavailable\", \"Deprecated\", \"Disabled\"]\n        }\n      },\n      currencyCode: {\n        readOnly: true,\n        serializedName: \"currencyCode\",\n        type: {\n          name: \"String\"\n        }\n      },\n      location: {\n        readOnly: true,\n        serializedName: \"location\",\n        type: {\n          name: \"String\"\n        }\n      },\n      meterId: {\n        readOnly: true,\n        serializedName: \"meterId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      resourceType: {\n        readOnly: true,\n        serializedName: \"resourceType\",\n        type: {\n          name: \"String\"\n        }\n      },\n      value: {\n        readOnly: true,\n        serializedName: \"value\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      unit: {\n        readOnly: true,\n        serializedName: \"unit\",\n        type: {\n          name: \"String\"\n        }\n      },\n      skuName: {\n        readOnly: true,\n        serializedName: \"skuName\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var ErrorAdditionalInfo = {\n  serializedName: \"ErrorAdditionalInfo\",\n  type: {\n    name: \"Composite\",\n    className: \"ErrorAdditionalInfo\",\n    modelProperties: {\n      type: {\n        readOnly: true,\n        serializedName: \"type\",\n        type: {\n          name: \"String\"\n        }\n      },\n      info: {\n        readOnly: true,\n        serializedName: \"info\",\n        type: {\n          name: \"Object\"\n        }\n      }\n    }\n  }\n};\nexport var ErrorDetail = {\n  serializedName: \"ErrorDetail\",\n  type: {\n    name: \"Composite\",\n    className: \"ErrorDetail\",\n    modelProperties: {\n      code: {\n        readOnly: true,\n        serializedName: \"code\",\n        type: {\n          name: \"String\"\n        }\n      },\n      message: {\n        readOnly: true,\n        serializedName: \"message\",\n        type: {\n          name: \"String\"\n        }\n      },\n      target: {\n        readOnly: true,\n        serializedName: \"target\",\n        type: {\n          name: \"String\"\n        }\n      },\n      details: {\n        readOnly: true,\n        serializedName: \"details\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"ErrorDetail\"\n            }\n          }\n        }\n      },\n      additionalInfo: {\n        readOnly: true,\n        serializedName: \"additionalInfo\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"ErrorAdditionalInfo\"\n            }\n          }\n        }\n      }\n    }\n  }\n};\nexport var OperationResult = {\n  serializedName: \"OperationResult\",\n  type: {\n    name: \"Composite\",\n    className: \"OperationResult\",\n    modelProperties: {\n      id: {\n        readOnly: true,\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      name: {\n        readOnly: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      status: {\n        required: true,\n        serializedName: \"status\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"NotStarted\", \"InProgress\", \"Succeeded\", \"Failed\", \"Canceled\"]\n        }\n      },\n      startTime: {\n        serializedName: \"startTime\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      endTime: {\n        serializedName: \"endTime\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      percentComplete: {\n        serializedName: \"percentComplete\",\n        type: {\n          name: \"Number\"\n        }\n      },\n      error: {\n        serializedName: \"error\",\n        type: {\n          name: \"Composite\",\n          className: \"ErrorDetail\"\n        }\n      }\n    }\n  }\n};\nexport var AutoShutdownProfile = {\n  serializedName: \"AutoShutdownProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"AutoShutdownProfile\",\n    modelProperties: {\n      shutdownOnDisconnect: {\n        serializedName: \"shutdownOnDisconnect\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      shutdownWhenNotConnected: {\n        serializedName: \"shutdownWhenNotConnected\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      shutdownOnIdle: {\n        serializedName: \"shutdownOnIdle\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"None\", \"UserAbsence\", \"LowUsage\"]\n        }\n      },\n      disconnectDelay: {\n        serializedName: \"disconnectDelay\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      noConnectDelay: {\n        serializedName: \"noConnectDelay\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      idleDelay: {\n        serializedName: \"idleDelay\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      }\n    }\n  }\n};\nexport var ConnectionProfile = {\n  serializedName: \"ConnectionProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"ConnectionProfile\",\n    modelProperties: {\n      webSshAccess: {\n        serializedName: \"webSshAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      },\n      webRdpAccess: {\n        serializedName: \"webRdpAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      },\n      clientSshAccess: {\n        serializedName: \"clientSshAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      },\n      clientRdpAccess: {\n        serializedName: \"clientRdpAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Public\", \"Private\", \"None\"]\n        }\n      }\n    }\n  }\n};\nexport var SystemData = {\n  serializedName: \"systemData\",\n  type: {\n    name: \"Composite\",\n    className: \"SystemData\",\n    modelProperties: {\n      createdBy: {\n        serializedName: \"createdBy\",\n        type: {\n          name: \"String\"\n        }\n      },\n      createdByType: {\n        serializedName: \"createdByType\",\n        type: {\n          name: \"String\"\n        }\n      },\n      createdAt: {\n        serializedName: \"createdAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      },\n      lastModifiedBy: {\n        serializedName: \"lastModifiedBy\",\n        type: {\n          name: \"String\"\n        }\n      },\n      lastModifiedByType: {\n        serializedName: \"lastModifiedByType\",\n        type: {\n          name: \"String\"\n        }\n      },\n      lastModifiedAt: {\n        serializedName: \"lastModifiedAt\",\n        type: {\n          name: \"DateTime\"\n        }\n      }\n    }\n  }\n};\nexport var LabNetworkProfile = {\n  serializedName: \"LabNetworkProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"LabNetworkProfile\",\n    modelProperties: {\n      subnetId: {\n        serializedName: \"subnetId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      loadBalancerId: {\n        serializedName: \"loadBalancerId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      publicIpId: {\n        serializedName: \"publicIpId\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var ImageReference = {\n  serializedName: \"ImageReference\",\n  type: {\n    name: \"Composite\",\n    className: \"ImageReference\",\n    modelProperties: {\n      id: {\n        serializedName: \"id\",\n        type: {\n          name: \"String\"\n        }\n      },\n      offer: {\n        serializedName: \"offer\",\n        type: {\n          name: \"String\"\n        }\n      },\n      publisher: {\n        serializedName: \"publisher\",\n        type: {\n          name: \"String\"\n        }\n      },\n      sku: {\n        serializedName: \"sku\",\n        type: {\n          name: \"String\"\n        }\n      },\n      version: {\n        serializedName: \"version\",\n        type: {\n          name: \"String\"\n        }\n      },\n      exactVersion: {\n        readOnly: true,\n        serializedName: \"exactVersion\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var Sku = {\n  serializedName: \"Sku\",\n  type: {\n    name: \"Composite\",\n    className: \"Sku\",\n    modelProperties: {\n      name: {\n        required: true,\n        serializedName: \"name\",\n        type: {\n          name: \"String\"\n        }\n      },\n      tier: {\n        serializedName: \"tier\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Free\", \"Basic\", \"Standard\", \"Premium\"]\n        }\n      },\n      size: {\n        serializedName: \"size\",\n        type: {\n          name: \"String\"\n        }\n      },\n      family: {\n        serializedName: \"family\",\n        type: {\n          name: \"String\"\n        }\n      },\n      capacity: {\n        serializedName: \"capacity\",\n        type: {\n          name: \"Number\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachineAdditionalCapabilities = {\n  serializedName: \"VirtualMachineAdditionalCapabilities\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachineAdditionalCapabilities\",\n    modelProperties: {\n      installGpuDrivers: {\n        serializedName: \"installGpuDrivers\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      }\n    }\n  }\n};\nexport var Credentials = {\n  serializedName: \"Credentials\",\n  type: {\n    name: \"Composite\",\n    className: \"Credentials\",\n    modelProperties: {\n      username: {\n        required: true,\n        serializedName: \"username\",\n        type: {\n          name: \"String\"\n        }\n      },\n      password: {\n        serializedName: \"password\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var VirtualMachineProfile = {\n  serializedName: \"VirtualMachineProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"VirtualMachineProfile\",\n    modelProperties: {\n      createOption: {\n        required: true,\n        serializedName: \"createOption\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Image\", \"TemplateVM\"]\n        }\n      },\n      imageReference: {\n        required: true,\n        serializedName: \"imageReference\",\n        type: {\n          name: \"Composite\",\n          className: \"ImageReference\"\n        }\n      },\n      osType: {\n        readOnly: true,\n        serializedName: \"osType\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Windows\", \"Linux\"]\n        }\n      },\n      sku: {\n        required: true,\n        serializedName: \"sku\",\n        type: {\n          name: \"Composite\",\n          className: \"Sku\"\n        }\n      },\n      additionalCapabilities: {\n        serializedName: \"additionalCapabilities\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineAdditionalCapabilities\"\n        }\n      },\n      usageQuota: {\n        required: true,\n        serializedName: \"usageQuota\",\n        type: {\n          name: \"TimeSpan\"\n        }\n      },\n      useSharedPassword: {\n        serializedName: \"useSharedPassword\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      },\n      adminUser: {\n        required: true,\n        serializedName: \"adminUser\",\n        type: {\n          name: \"Composite\",\n          className: \"Credentials\"\n        }\n      },\n      nonAdminUser: {\n        serializedName: \"nonAdminUser\",\n        type: {\n          name: \"Composite\",\n          className: \"Credentials\"\n        }\n      }\n    }\n  }\n};\nexport var SecurityProfile = {\n  serializedName: \"SecurityProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"SecurityProfile\",\n    modelProperties: {\n      registrationCode: {\n        readOnly: true,\n        serializedName: \"registrationCode\",\n        type: {\n          name: \"String\"\n        }\n      },\n      openAccess: {\n        serializedName: \"openAccess\",\n        type: {\n          name: \"Enum\",\n          allowedValues: [\"Enabled\", \"Disabled\"]\n        }\n      }\n    }\n  }\n};\nexport var RosterProfile = {\n  serializedName: \"RosterProfile\",\n  type: {\n    name: \"Composite\",\n    className: \"RosterProfile\",\n    modelProperties: {\n      activeDirectoryGroupId: {\n        serializedName: \"activeDirectoryGroupId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ltiContextId: {\n        serializedName: \"ltiContextId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      lmsInstance: {\n        serializedName: \"lmsInstance\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ltiClientId: {\n        serializedName: \"ltiClientId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      ltiRosterEndpoint: {\n        serializedName: \"ltiRosterEndpoint\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var LabUpdateProperties = {\n  serializedName: \"LabUpdateProperties\",\n  type: {\n    name: \"Composite\",\n    className: \"LabUpdateProperties\",\n    modelProperties: {\n      autoShutdownProfile: {\n        serializedName: \"autoShutdownProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"AutoShutdownProfile\"\n        }\n      },\n      connectionProfile: {\n        serializedName: \"connectionProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"ConnectionProfile\"\n        }\n      },\n      virtualMachineProfile: {\n        serializedName: \"virtualMachineProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"VirtualMachineProfile\"\n        }\n      },\n      securityProfile: {\n        serializedName: \"securityProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"SecurityProfile\"\n        }\n      },\n      rosterProfile: {\n        serializedName: \"rosterProfile\",\n        type: {\n          name: \"Composite\",\n          className: \"RosterProfile\"\n        }\n      },\n      labPlanId: {\n        serializedName: \"labPlanId\",\n        type: {\n          name: \"String\"\n        }\n      },\n      title: {\n        serializedName: \"title\",\n        type: {\n          name: \"String\"\n        }\n      },\n      description: {\n        serializedName: \"description\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};\nexport var PagedLabServicesPrices = {\n  serializedName: \"PagedLabServicesPrices\",\n  type: {\n    name: \"Composite\",\n    className: \"PagedLabServicesPrices\",\n    modelProperties: {\n      value: {\n        readOnly: true,\n        serializedName: \"\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"LabServicesPrice\"\n            }\n          }\n        }\n      },\n      nextLink: {\n        readOnly: true,\n        serializedName: \"nextLink\",\n        type: {\n          name: \"String\"\n        }\n      }\n    }\n  }\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nexport var acceptLanguage = {\n  parameterPath: \"acceptLanguage\",\n  mapper: {\n    serializedName: \"accept-language\",\n    defaultValue: 'en-US',\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var apiVersion = {\n  parameterPath: \"apiVersion\",\n  mapper: {\n    required: true,\n    isConstant: true,\n    serializedName: \"api-version\",\n    defaultValue: '2023-02-01',\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var labName = {\n  parameterPath: \"labName\",\n  mapper: {\n    required: true,\n    serializedName: \"labName\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var nextPageLink = {\n  parameterPath: \"nextPageLink\",\n  mapper: {\n    required: true,\n    serializedName: \"nextLink\",\n    type: {\n      name: \"String\"\n    }\n  },\n  skipEncoding: true\n};\nexport var operationResultId = {\n  parameterPath: \"operationResultId\",\n  mapper: {\n    required: true,\n    serializedName: \"operationResultId\",\n    constraints: {\n      MaxLength: 100,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var region = {\n  parameterPath: \"region\",\n  mapper: {\n    required: true,\n    serializedName: \"region\",\n    constraints: {\n      MaxLength: 90,\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var registrationCode = {\n  parameterPath: \"registrationCode\",\n  mapper: {\n    required: true,\n    serializedName: \"registrationCode\",\n    constraints: {\n      MaxLength: 90,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var resourceGroupName = {\n  parameterPath: \"resourceGroupName\",\n  mapper: {\n    required: true,\n    serializedName: \"resourceGroupName\",\n    constraints: {\n      MaxLength: 90,\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var subscriptionId = {\n  parameterPath: \"subscriptionId\",\n  mapper: {\n    required: true,\n    serializedName: \"subscriptionId\",\n    constraints: {\n      MinLength: 1\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};\nexport var virtualMachineId = {\n  parameterPath: \"virtualMachineId\",\n  mapper: {\n    required: true,\n    serializedName: \"virtualMachineId\",\n    constraints: {\n      MaxLength: 90,\n      MinLength: 1,\n      Pattern: /^[-\\w\\\\._\\\\(\\\\)]+$/\n    },\n    type: {\n      name: \"String\"\n    }\n  }\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/coreUsageOperationsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a CoreUsageOperations. */\n\nvar CoreUsageOperations =\n/** @class */\nfunction () {\n  /**\r\n   * Create a CoreUsageOperations.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function CoreUsageOperations(client) {\n    this.client = client;\n  }\n\n  CoreUsageOperations.prototype.get = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  return CoreUsageOperations;\n}();\n\nexport { CoreUsageOperations }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"api/subscriptions/{subscriptionId}/coreUsage\",\n  urlParameters: [Parameters.subscriptionId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.CoreUsage\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/labOperationsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a LabOperations. */\n\nvar LabOperations =\n/** @class */\nfunction () {\n  /**\r\n   * Create a LabOperations.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function LabOperations(client) {\n    this.client = client;\n  }\n\n  LabOperations.prototype.getMetadata = function (region, resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, getMetadataOperationSpec, callback);\n  };\n\n  LabOperations.prototype.getMetadata1 = function (resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, getMetadata1OperationSpec, callback);\n  };\n\n  LabOperations.prototype.labPlanPut = function (body, region, resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      region: region,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, labPlanPutOperationSpec, callback);\n  };\n\n  LabOperations.prototype.labPlanPut1 = function (body, resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, labPlanPut1OperationSpec, callback);\n  };\n\n  LabOperations.prototype.publish = function (region, resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, publishOperationSpec, callback);\n  };\n\n  LabOperations.prototype.publish1 = function (resourceGroupName, labName, options, callback) {\n    return this.client.sendOperationRequest({\n      resourceGroupName: resourceGroupName,\n      labName: labName,\n      options: options\n    }, publish1OperationSpec, callback);\n  };\n\n  return LabOperations;\n}();\n\nexport { LabOperations }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar getMetadataOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/labs/{labName}/metadata\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      }\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getMetadata1OperationSpec = {\n  httpMethod: \"GET\",\n  path: \"api/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/labs/{labName}/metadata\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"String\"\n            }\n          }\n        }\n      }\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar labPlanPutOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/labs/{labName}\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.CreateLab), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.CreateLab\n    },\n    201: {\n      bodyMapper: Mappers.CreateLab\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar labPlanPut1OperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"api/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/labs/{labName}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.CreateLab), {\n      required: true\n    })\n  },\n  responses: {\n    200: {\n      bodyMapper: Mappers.CreateLab\n    },\n    201: {\n      bodyMapper: Mappers.CreateLab\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar publishOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/labs/{labName}/publish\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: {\n      capacity: [\"options\", \"capacity\"]\n    },\n    mapper: __assign(__assign({}, Mappers.PublishLab), {\n      required: true\n    })\n  },\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar publish1OperationSpec = {\n  httpMethod: \"POST\",\n  path: \"api/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/labs/{labName}/publish\",\n  urlParameters: [Parameters.subscriptionId, Parameters.resourceGroupName, Parameters.labName],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: {\n      capacity: [\"options\", \"capacity\"]\n    },\n    mapper: __assign(__assign({}, Mappers.PublishLab), {\n      required: true\n    })\n  },\n  responses: {\n    200: {},\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/priceAndAvailabilityMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a PriceAndAvailability. */\n\nvar PriceAndAvailability =\n/** @class */\nfunction () {\n  /**\r\n   * Create a PriceAndAvailability.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function PriceAndAvailability(client) {\n    this.client = client;\n  }\n\n  PriceAndAvailability.prototype.get = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  return PriceAndAvailability;\n}();\n\nexport { PriceAndAvailability }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"api/subscriptions/{subscriptionId}/priceAndAvailability/virtualMachines\",\n  urlParameters: [Parameters.subscriptionId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.VirtualMachinePriceAndAvailabilityData\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/registerMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Register. */\n\nvar Register =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Register.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function Register(client) {\n    this.client = client;\n  }\n\n  Register.prototype.global = function (registrationCode, options, callback) {\n    return this.client.sendOperationRequest({\n      registrationCode: registrationCode,\n      options: options\n    }, globalOperationSpec, callback);\n  };\n\n  Register.prototype.regional = function (region, registrationCode, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      registrationCode: registrationCode,\n      options: options\n    }, regionalOperationSpec, callback);\n  };\n\n  Register.prototype.regionalWithSubscription = function (region, registrationCode, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      registrationCode: registrationCode,\n      options: options\n    }, regionalWithSubscriptionOperationSpec, callback);\n  };\n\n  return Register;\n}();\n\nexport { Register }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar globalOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"api/me/register/{registrationCode}\",\n  urlParameters: [Parameters.registrationCode],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    201: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar regionalOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"{region}/api/me/register/{registrationCode}\",\n  urlParameters: [Parameters.region, Parameters.registrationCode],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    201: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar regionalWithSubscriptionOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"{region}/api/subscription/{subscriptionId}/register/{registrationCode}\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.registrationCode],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {},\n    201: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/userSettingsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a UserSettings. */\n\nvar UserSettings =\n/** @class */\nfunction () {\n  /**\r\n   * Create a UserSettings.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function UserSettings(client) {\n    this.client = client;\n  }\n\n  UserSettings.prototype.get = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  UserSettings.prototype.createOrUpdate = function (body, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      options: options\n    }, createOrUpdateOperationSpec, callback);\n  };\n\n  UserSettings.prototype.update = function (body, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      options: options\n    }, updateOperationSpec, callback);\n  };\n\n  return UserSettings;\n}();\n\nexport { UserSettings }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"api/me/settings\",\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"Object\"\n            }\n          }\n        }\n      }\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar createOrUpdateOperationSpec = {\n  httpMethod: \"PUT\",\n  path: \"api/me/settings\",\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: {\n      required: true,\n      serializedName: \"body\",\n      type: {\n        name: \"Dictionary\",\n        value: {\n          type: {\n            name: \"Object\"\n          }\n        }\n      }\n    }\n  },\n  responses: {\n    200: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"Object\"\n            }\n          }\n        }\n      }\n    },\n    201: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"Object\"\n            }\n          }\n        }\n      }\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar updateOperationSpec = {\n  httpMethod: \"PATCH\",\n  path: \"api/me/settings\",\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: {\n      required: true,\n      serializedName: \"body\",\n      type: {\n        name: \"Dictionary\",\n        value: {\n          type: {\n            name: \"Object\"\n          }\n        }\n      }\n    }\n  },\n  responses: {\n    200: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Dictionary\",\n          value: {\n            type: {\n              name: \"Object\"\n            }\n          }\n        }\n      }\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __assign } from \"tslib\";\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/virtualMachineOperationsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a VirtualMachineOperations. */\n\nvar VirtualMachineOperations =\n/** @class */\nfunction () {\n  /**\r\n   * Create a VirtualMachineOperations.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function VirtualMachineOperations(client) {\n    this.client = client;\n  }\n\n  VirtualMachineOperations.prototype.list = function (options, callback) {\n    return this.client.sendOperationRequest({\n      options: options\n    }, listOperationSpec, callback);\n  };\n\n  VirtualMachineOperations.prototype.get = function (region, virtualMachineId, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      virtualMachineId: virtualMachineId,\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  VirtualMachineOperations.prototype.start = function (region, virtualMachineId, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      virtualMachineId: virtualMachineId,\n      options: options\n    }, startOperationSpec, callback);\n  };\n\n  VirtualMachineOperations.prototype.stop = function (region, virtualMachineId, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      virtualMachineId: virtualMachineId,\n      options: options\n    }, stopOperationSpec, callback);\n  };\n\n  VirtualMachineOperations.prototype.reimage = function (region, virtualMachineId, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      virtualMachineId: virtualMachineId,\n      options: options\n    }, reimageOperationSpec, callback);\n  };\n\n  VirtualMachineOperations.prototype.redeploy = function (region, virtualMachineId, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      virtualMachineId: virtualMachineId,\n      options: options\n    }, redeployOperationSpec, callback);\n  };\n\n  VirtualMachineOperations.prototype.resetPassword = function (body, region, virtualMachineId, options, callback) {\n    return this.client.sendOperationRequest({\n      body: body,\n      region: region,\n      virtualMachineId: virtualMachineId,\n      options: options\n    }, resetPasswordOperationSpec, callback);\n  };\n\n  return VirtualMachineOperations;\n}();\n\nexport { VirtualMachineOperations }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"api/me/virtualMachines\",\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: {\n        serializedName: \"parsedResponse\",\n        type: {\n          name: \"Sequence\",\n          element: {\n            type: {\n              name: \"Composite\",\n              className: \"VirtualMachine\"\n            }\n          }\n        }\n      }\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/virtualMachines/{virtualMachineId}\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.virtualMachineId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.VirtualMachine\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar startOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/virtualMachines/{virtualMachineId}/start\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.virtualMachineId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar stopOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/virtualMachines/{virtualMachineId}/stop\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.virtualMachineId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar reimageOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/virtualMachines/{virtualMachineId}/reimage\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.virtualMachineId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar redeployOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/virtualMachines/{virtualMachineId}/redeploy\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.virtualMachineId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar resetPasswordOperationSpec = {\n  httpMethod: \"POST\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/virtualMachines/{virtualMachineId}/resetPassword\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId, Parameters.virtualMachineId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  requestBody: {\n    parameterPath: \"body\",\n    mapper: __assign(__assign({}, Mappers.ResetPasswordBody), {\n      required: true\n    })\n  },\n  responses: {\n    202: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/pricesMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Prices. */\n\nvar Prices =\n/** @class */\nfunction () {\n  /**\r\n   * Create a Prices.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function Prices(client) {\n    this.client = client;\n  }\n\n  Prices.prototype.list = function (region, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      options: options\n    }, listOperationSpec, callback);\n  };\n\n  Prices.prototype.listNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listNextOperationSpec, callback);\n  };\n\n  return Prices;\n}();\n\nexport { Prices }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"{region}/api/prices\",\n  urlParameters: [Parameters.region],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabServicesPrices\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://labs.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabServicesPrices\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/subscriptionPricesMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a SubscriptionPrices. */\n\nvar SubscriptionPrices =\n/** @class */\nfunction () {\n  /**\r\n   * Create a SubscriptionPrices.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function SubscriptionPrices(client) {\n    this.client = client;\n  }\n\n  SubscriptionPrices.prototype.list = function (region, options, callback) {\n    return this.client.sendOperationRequest({\n      region: region,\n      options: options\n    }, listOperationSpec, callback);\n  };\n\n  SubscriptionPrices.prototype.listNext = function (nextPageLink, options, callback) {\n    return this.client.sendOperationRequest({\n      nextPageLink: nextPageLink,\n      options: options\n    }, listNextOperationSpec, callback);\n  };\n\n  return SubscriptionPrices;\n}();\n\nexport { SubscriptionPrices }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar listOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"{region}/api/subscriptions/{subscriptionId}/prices\",\n  urlParameters: [Parameters.region, Parameters.subscriptionId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabServicesPrices\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};\nvar listNextOperationSpec = {\n  httpMethod: \"GET\",\n  baseUrl: \"https://labs.azure.com\",\n  path: \"{nextLink}\",\n  urlParameters: [Parameters.nextPageLink],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.PagedLabServicesPrices\n    },\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Mappers from \"../models/operationResultsMappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a OperationResults. */\n\nvar OperationResults =\n/** @class */\nfunction () {\n  /**\r\n   * Create a OperationResults.\r\n   * @param {LabsApiClientContext} client Reference to the service client.\r\n   */\n  function OperationResults(client) {\n    this.client = client;\n  }\n\n  OperationResults.prototype.get = function (operationResultId, options, callback) {\n    return this.client.sendOperationRequest({\n      operationResultId: operationResultId,\n      options: options\n    }, getOperationSpec, callback);\n  };\n\n  return OperationResults;\n}();\n\nexport { OperationResults }; // Operation Specifications\n\nvar serializer = new msRest.Serializer(Mappers);\nvar getOperationSpec = {\n  httpMethod: \"GET\",\n  path: \"subscriptions/{subscriptionId}/providers/Microsoft.LabServices/operationResults/{operationResultId}\",\n  urlParameters: [Parameters.subscriptionId, Parameters.operationResultId],\n  queryParameters: [Parameters.apiVersion],\n  headerParameters: [Parameters.acceptLanguage],\n  responses: {\n    200: {\n      bodyMapper: Mappers.OperationResult\n    },\n    204: {},\n    default: {\n      bodyMapper: Mappers.CloudError\n    }\n  },\n  serializer: serializer\n};","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __extends } from \"tslib\";\nimport * as Models from \"./models\";\nimport * as Mappers from \"./models/mappers\";\nimport * as operations from \"./operations\";\nimport { LabsApiClientContext } from \"./labsApiClientContext\";\n\nvar LabsApiClient =\n/** @class */\nfunction (_super) {\n  __extends(LabsApiClient, _super);\n  /**\r\n   * Initializes a new instance of the LabsApiClient class.\r\n   * @param credentials Credentials needed for the client to connect to Azure.\r\n   * @param subscriptionId The ID of the target subscription.\r\n   * @param [options] The parameter options\r\n   */\n\n\n  function LabsApiClient(credentials, subscriptionId, options) {\n    var _this = _super.call(this, credentials, subscriptionId, options) || this;\n\n    _this.coreUsage = new operations.CoreUsageOperations(_this);\n    _this.lab = new operations.LabOperations(_this);\n    _this.priceAndAvailability = new operations.PriceAndAvailability(_this);\n    _this.register = new operations.Register(_this);\n    _this.userSettings = new operations.UserSettings(_this);\n    _this.virtualMachine = new operations.VirtualMachineOperations(_this);\n    _this.prices = new operations.Prices(_this);\n    _this.subscriptionPrices = new operations.SubscriptionPrices(_this);\n    _this.operationResults = new operations.OperationResults(_this);\n    return _this;\n  }\n\n  return LabsApiClient;\n}(LabsApiClientContext); // Operation Specifications\n\n\nexport { LabsApiClient, LabsApiClientContext, Models as LabsApiModels, Mappers as LabsApiMappers };\nexport * from \"./operations\";","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for\r\n * license information.\r\n *\r\n * Code generated by Microsoft (R) AutoRest Code Generator.\r\n * Changes may cause incorrect behavior and will be lost if the code is\r\n * regenerated.\r\n */\nimport { __extends } from \"tslib\";\nimport * as msRestAzure from \"@azure/ms-rest-azure-js\";\nvar packageName = \"lab-services-internal\";\nvar packageVersion = \"1.0.0\";\n\nvar LabsApiClientContext =\n/** @class */\nfunction (_super) {\n  __extends(LabsApiClientContext, _super);\n  /**\r\n   * Initializes a new instance of the LabsApiClient class.\r\n   * @param credentials Credentials needed for the client to connect to Azure.\r\n   * @param subscriptionId The ID of the target subscription.\r\n   * @param [options] The parameter options\r\n   */\n\n\n  function LabsApiClientContext(credentials, subscriptionId, options) {\n    var _this = this;\n\n    if (credentials == undefined) {\n      throw new Error('\\'credentials\\' cannot be null.');\n    }\n\n    if (subscriptionId == undefined) {\n      throw new Error('\\'subscriptionId\\' cannot be null.');\n    }\n\n    if (!options) {\n      options = {};\n    }\n\n    if (!options.userAgent) {\n      var defaultUserAgent = msRestAzure.getDefaultUserAgentValue();\n      options.userAgent = packageName + \"/\" + packageVersion + \" \" + defaultUserAgent;\n    }\n\n    _this = _super.call(this, credentials, options) || this;\n    _this.apiVersion = '2023-02-01';\n    _this.acceptLanguage = 'en-US';\n    _this.longRunningOperationRetryTimeout = 30;\n    _this.baseUri = options.baseUri || _this.baseUri || \"https://labs.azure.com\";\n    _this.requestContentType = \"application/json; charset=utf-8\";\n    _this.credentials = credentials;\n    _this.subscriptionId = subscriptionId;\n\n    if (options.acceptLanguage !== null && options.acceptLanguage !== undefined) {\n      _this.acceptLanguage = options.acceptLanguage;\n    }\n\n    if (options.longRunningOperationRetryTimeout !== null && options.longRunningOperationRetryTimeout !== undefined) {\n      _this.longRunningOperationRetryTimeout = options.longRunningOperationRetryTimeout;\n    }\n\n    return _this;\n  }\n\n  return LabsApiClientContext;\n}(msRestAzure.AzureServiceClient);\n\nexport { LabsApiClientContext };","import { defineMessages } from 'react-intl';\r\nexport const getLocalizedSkuFriendlyName = (name, intl) => {\r\n    switch (name) {\r\n        case SkuFriendlyName.BasicSmall:\r\n            return intl.formatMessage(skuMessages.basicSmall);\r\n        case SkuFriendlyName.StandardSmall:\r\n            return intl.formatMessage(skuMessages.standardSmall);\r\n        case SkuFriendlyName.StandardMedium:\r\n            return intl.formatMessage(skuMessages.standardMedium);\r\n        case SkuFriendlyName.StandardLarge:\r\n            return intl.formatMessage(skuMessages.standardLarge);\r\n        case SkuFriendlyName.ComputeGpuSmall:\r\n            return intl.formatMessage(skuMessages.computeGpuSmall);\r\n        case SkuFriendlyName.ComputeGpuMedium:\r\n            return intl.formatMessage(skuMessages.computeGpuMedium);\r\n        case SkuFriendlyName.GraphicsGpuSmall:\r\n            return intl.formatMessage(skuMessages.graphicsGpuSmall);\r\n        case SkuFriendlyName.GraphicsGpuMedium:\r\n            return intl.formatMessage(skuMessages.graphicsGpuMedium);\r\n        case SkuFriendlyName.AltComputeGpuSmall:\r\n            return intl.formatMessage(skuMessages.altComputeGpuSmall);\r\n        case SkuFriendlyName.AltComputeGpuMedium:\r\n            return intl.formatMessage(skuMessages.altComputeGpuMedium);\r\n        case SkuFriendlyName.AltGraphicsGpuSmall:\r\n            return intl.formatMessage(skuMessages.altGraphicsGpuSmall);\r\n        case SkuFriendlyName.AltGraphicsGpuMedium:\r\n            return intl.formatMessage(skuMessages.altGraphicsGpuMedium);\r\n        case SkuFriendlyName.MemoryOptimizedSmall:\r\n            return intl.formatMessage(skuMessages.memoryOptimizedSmall);\r\n        case SkuFriendlyName.MemoryOptimizedMedium:\r\n            return intl.formatMessage(skuMessages.memoryOptimizedMedium);\r\n        case ClassicSkuFriendlyName.Small:\r\n            return intl.formatMessage(skuMessages.classicSmall);\r\n        case ClassicSkuFriendlyName.Medium:\r\n            return intl.formatMessage(skuMessages.classicMedium);\r\n        case ClassicSkuFriendlyName.MediumNestedVirtualization:\r\n            return intl.formatMessage(skuMessages.classicMediumNestedVirtualization);\r\n        case ClassicSkuFriendlyName.Large:\r\n            return intl.formatMessage(skuMessages.classicLarge);\r\n        case ClassicSkuFriendlyName.LargeNestedVirtualization:\r\n            return intl.formatMessage(skuMessages.classicLargeNestedVirtualization);\r\n        case ClassicSkuFriendlyName.SmallGpuCompute:\r\n            return intl.formatMessage(skuMessages.classicSmallGpuCompute);\r\n        case ClassicSkuFriendlyName.SmallGpuVisualization:\r\n            return intl.formatMessage(skuMessages.classicSmallGpuVisualization);\r\n        case ClassicSkuFriendlyName.MediumGpuVisualization:\r\n            return intl.formatMessage(skuMessages.classicMediumGpuVisualization);\r\n        default:\r\n            return name;\r\n    }\r\n};\r\nexport const ClassicSkuFriendlyName = {\r\n    Small: 'Small',\r\n    Medium: 'Medium',\r\n    Large: 'Large',\r\n    MediumNestedVirtualization: 'Medium (Nested virtualization)',\r\n    LargeNestedVirtualization: 'Large (Nested virtualization)',\r\n    SmallGpuCompute: 'Alternative Small GPU (Compute)',\r\n    SmallGpuVisualization: 'Small GPU (Visualization)',\r\n    MediumGpuVisualization: 'Medium GPU (Visualization)',\r\n};\r\nexport const SkuFriendlyName = {\r\n    BasicSmall: 'Basic small',\r\n    StandardSmall: 'Standard small',\r\n    StandardMedium: 'Standard medium',\r\n    StandardLarge: 'Standard large',\r\n    ComputeGpuSmall: 'GPU Compute small',\r\n    ComputeGpuMedium: 'GPU Compute medium',\r\n    GraphicsGpuSmall: 'GPU Visualization small',\r\n    GraphicsGpuMedium: 'GPU Visualization medium',\r\n    AltComputeGpuSmall: 'Alternative GPU Compute small',\r\n    AltComputeGpuMedium: 'Alternative GPU Compute medium',\r\n    AltGraphicsGpuSmall: 'Alternative GPU Visualization small',\r\n    AltGraphicsGpuMedium: 'Alternative GPU Visualization medium',\r\n    MemoryOptimizedSmall: 'Memory-optimized small',\r\n    MemoryOptimizedMedium: 'Memory-optimized medium',\r\n};\r\nexport const skuMessages = defineMessages({\r\n    basicSmall: {\r\n        id: 'BasicSmall',\r\n        defaultMessage: 'Basic small',\r\n        description: 'Text for basic small sku.',\r\n    },\r\n    standardSmall: {\r\n        id: 'StandardSmall',\r\n        defaultMessage: 'Standard small',\r\n        description: 'Text for standard small sku.',\r\n    },\r\n    standardMedium: {\r\n        id: 'StandardMedium',\r\n        defaultMessage: 'Standard medium',\r\n        description: 'Text for standard medium sku.',\r\n    },\r\n    standardLarge: {\r\n        id: 'StandardLarge',\r\n        defaultMessage: 'Standard large',\r\n        description: 'Text for standard large sku.',\r\n    },\r\n    computeGpuSmall: {\r\n        id: 'ComputeGpuSmall',\r\n        defaultMessage: 'GPU Compute small',\r\n        description: 'Text for compute GPU small sku.',\r\n    },\r\n    computeGpuMedium: {\r\n        id: 'ComputeGpuMedium',\r\n        defaultMessage: 'GPU Compute medium',\r\n        description: 'Text for compute GPU medium sku.',\r\n    },\r\n    graphicsGpuSmall: {\r\n        id: 'GraphicsGpuSmall',\r\n        defaultMessage: 'GPU Visualization small',\r\n        description: 'Text for graphics GPU small sku.',\r\n    },\r\n    graphicsGpuMedium: {\r\n        id: 'GraphicsGpuMedium',\r\n        defaultMessage: 'GPU Visualization medium',\r\n        description: 'Text for graphics GPU medium sku.',\r\n    },\r\n    altComputeGpuSmall: {\r\n        id: 'AltComputeGpuSmall',\r\n        defaultMessage: 'Alternative GPU Compute small',\r\n        description: 'Text for alternative compute GPU small sku.',\r\n    },\r\n    altComputeGpuMedium: {\r\n        id: 'AltComputeGpuMedium',\r\n        defaultMessage: 'Alternative GPU Compute medium',\r\n        description: 'Text for alternative compute GPU medium sku.',\r\n    },\r\n    altGraphicsGpuSmall: {\r\n        id: 'AltGraphicsGpuSmall',\r\n        defaultMessage: 'Alternative GPU Visualization small',\r\n        description: 'Text for alternative graphics GPU small sku.',\r\n    },\r\n    altGraphicsGpuMedium: {\r\n        id: 'AltGraphicsGpuMedium',\r\n        defaultMessage: 'Alternative GPU Visualization medium',\r\n        description: 'Text for alternative graphics GPU medium sku.',\r\n    },\r\n    memoryOptimizedSmall: {\r\n        id: 'MemoryOptimizedSmall',\r\n        defaultMessage: 'Memory-optimized small',\r\n        description: 'Text for memory-optimized small sku.',\r\n    },\r\n    memoryOptimizedMedium: {\r\n        id: 'MemoryOptimizedMedium',\r\n        defaultMessage: 'Memory-optimized medium',\r\n        description: 'Text for memory-optimized medium sku.',\r\n    },\r\n    classicSmall: {\r\n        id: 'ClassicSmall',\r\n        defaultMessage: 'Small',\r\n        description: 'Text for classic small sku.',\r\n    },\r\n    classicMedium: {\r\n        id: 'ClassicMedium',\r\n        defaultMessage: 'Medium',\r\n        description: 'Text for classic medium sku.',\r\n    },\r\n    classicLarge: {\r\n        id: 'ClassicLarge',\r\n        defaultMessage: 'Large',\r\n        description: 'Text for classic large sku.',\r\n    },\r\n    classicMediumNestedVirtualization: {\r\n        id: 'ClassicMediumNestedVirtualization',\r\n        defaultMessage: 'Medium (Nested virtualization)',\r\n        description: 'Text for medium (nested virtualization) sku.',\r\n    },\r\n    classicLargeNestedVirtualization: {\r\n        id: 'ClassicLargeNestedVirtualization',\r\n        defaultMessage: 'Large (Nested virtualization)',\r\n        description: 'Text for large (nested virtualization) sku.',\r\n    },\r\n    classicSmallGpuCompute: {\r\n        id: 'ClassicSmallGpuCompute',\r\n        defaultMessage: 'Alternative Small GPU (Compute)',\r\n        description: 'Text for alternative small GPU (Compute) sku.',\r\n    },\r\n    classicSmallGpuVisualization: {\r\n        id: 'ClassicSmallGpuVisualization',\r\n        defaultMessage: 'Small GPU (Visualization)',\r\n        description: 'Text for small GPU (Visualization) sku.',\r\n    },\r\n    classicMediumGpuVisualization: {\r\n        id: 'ClassicMediumGpuVisualization',\r\n        defaultMessage: 'Medium GPU (Visualization)',\r\n        description: 'Text for medium GPU (Visualization) sku.',\r\n    },\r\n});\r\n","import { LabsApiModels } from 'lab-services-internal';\r\nimport memoize from 'memoize-one';\r\nimport { ClassicSkuFriendlyName, getLocalizedSkuFriendlyName } from '../sku-display-name-helper';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nimport { trim } from 'lodash';\r\nexport const SkuConstants = {\r\n    vCPUs: 'vCPUs',\r\n    MemoryGB: 'MemoryGB',\r\n    StorageGB: 'StorageGB',\r\n    StorageType: 'StorageType',\r\n    IsGpu: 'IsGpu',\r\n    StandardSSD: 'StandardSSD',\r\n    PremiumSSD: 'PremiumSSD',\r\n    Classic: 'Classic',\r\n};\r\nexport const SkuFamilyName = {\r\n    Fsv2: 'Fsv2',\r\n    Av2: 'Av2',\r\n    Dsv4: 'Dsv4',\r\n    Dsv3: 'Dsv3',\r\n    NCsv3: 'NCsv3',\r\n    NCasT4v3: 'NCasT4v3',\r\n    NC: 'NC',\r\n    NVv4: 'NVv4',\r\n    NVv3: 'NVv3',\r\n    NVadsA10v5: 'NVadsA10v5',\r\n    NV: 'NV',\r\n    Esv4: 'Esv4',\r\n};\r\nexport const getSkuCostTargetUnit = memoize((isWindows) => {\r\n    return isWindows ? LabsApiModels.PriceUnit.WindowsHourly : LabsApiModels.PriceUnit.LinuxHourly;\r\n});\r\nconst getSkuCapabilityValue = (capabilities, target) => {\r\n    const targetCapability = capabilities.find((c) => caseInsensitiveCultureInvariantCompare(c.name, target) === 0);\r\n    if (!!targetCapability && !!targetCapability.value) {\r\n        return targetCapability.value;\r\n    }\r\n    return '';\r\n};\r\nconst getSkuCapabilityAsNumber = (capabilities, target) => {\r\n    const targetValue = getSkuCapabilityValue(capabilities, target);\r\n    const targetAsNumber = Number(targetValue);\r\n    if (!isNaN(targetAsNumber)) {\r\n        return targetAsNumber;\r\n    }\r\n    return 0;\r\n};\r\nconst getSkuCapabilityIsGpu = (capabilities) => {\r\n    const targetValue = getSkuCapabilityValue(capabilities, SkuConstants.IsGpu);\r\n    return !!targetValue && caseInsensitiveCultureInvariantCompare(targetValue, 'True') === 0;\r\n};\r\nexport const convertSkuCapabilityToVmSzie = memoize((capabilities, size) => {\r\n    return {\r\n        cores: getSkuCapabilityAsNumber(capabilities, SkuConstants.vCPUs),\r\n        memoryGB: getSkuCapabilityAsNumber(capabilities, SkuConstants.MemoryGB),\r\n        storageGB: getSkuCapabilityAsNumber(capabilities, SkuConstants.StorageGB),\r\n        storageType: getSkuCapabilityValue(capabilities, SkuConstants.StorageType),\r\n        isGpu: getSkuCapabilityIsGpu(capabilities),\r\n        sizeFullName: size ?? '',\r\n    };\r\n});\r\nconst getClassicSkuFriendlyName = (sku) => {\r\n    const skuName = sku.name.toUpperCase();\r\n    switch (skuName) {\r\n        case 'CLASSIC_FSV2_2_4GB_128_S_SSD':\r\n            return ClassicSkuFriendlyName.Small;\r\n        case 'CLASSIC_FSV2_4_8GB_128_S_SSD':\r\n            return ClassicSkuFriendlyName.Medium;\r\n        case 'CLASSIC_DSV4_4_16GB_128_P_SSD':\r\n            return ClassicSkuFriendlyName.MediumNestedVirtualization;\r\n        case 'CLASSIC_FSV2_8_16GB_128_S_SSD':\r\n            return ClassicSkuFriendlyName.Large;\r\n        case 'CLASSIC_DSV4_8_32GB_128_P_SSD':\r\n            return ClassicSkuFriendlyName.LargeNestedVirtualization;\r\n        case 'CLASSIC_NCSV3_6_112GB_128_S_SSD':\r\n            return ClassicSkuFriendlyName.SmallGpuCompute;\r\n        case 'CLASSIC_NVV4_8_28GB_128_S_SSD':\r\n            return ClassicSkuFriendlyName.SmallGpuVisualization;\r\n        case 'CLASSIC_NVV3_12_112GB_128_S_SSD':\r\n            return ClassicSkuFriendlyName.MediumGpuVisualization;\r\n        default:\r\n            return '';\r\n    }\r\n};\r\nexport const getSkuFriendlyName = memoize((sku) => {\r\n    if (sku.isClassic) {\r\n        return getClassicSkuFriendlyName(sku);\r\n    }\r\n    const familyName = sku.family;\r\n    let displayName = '';\r\n    switch (familyName) {\r\n        case SkuFamilyName.Fsv2:\r\n            displayName += 'Basic';\r\n            break;\r\n        case SkuFamilyName.Av2:\r\n        case SkuFamilyName.Dsv3:\r\n        case SkuFamilyName.NC:\r\n        case SkuFamilyName.NV:\r\n            displayName += 'Classic';\r\n            break;\r\n        case SkuFamilyName.Dsv4:\r\n            displayName += 'Standard';\r\n            break;\r\n        case SkuFamilyName.NCsv3:\r\n        case SkuFamilyName.NVadsA10v5:\r\n            displayName += 'Alternative';\r\n            break;\r\n        default:\r\n            break;\r\n    }\r\n    switch (sku.size.cores) {\r\n        case 2:\r\n            displayName += ' Small';\r\n            break;\r\n        case 4:\r\n            displayName += familyName === SkuFamilyName.Esv4 || sku.size.isGpu ? ' Small' : ' Medium';\r\n            break;\r\n        case 6:\r\n        case 8:\r\n            displayName += sku.size.isGpu ? ' Small' : familyName === SkuFamilyName.Esv4 ? ' Medium' : ' Large';\r\n            break;\r\n        case 12:\r\n        case 16:\r\n            displayName += sku.size.isGpu ? ' Medium' : ' Experimental 16 Large';\r\n            break;\r\n        case 32:\r\n            displayName += ' Experimental 32 Large';\r\n            break;\r\n        default:\r\n            break;\r\n    }\r\n    switch (familyName) {\r\n        case SkuFamilyName.NCsv3:\r\n        case SkuFamilyName.NCasT4v3:\r\n        case SkuFamilyName.NC:\r\n        case SkuFamilyName.NVv4:\r\n        case SkuFamilyName.NVv3:\r\n        case SkuFamilyName.NVadsA10v5:\r\n        case SkuFamilyName.NV:\r\n            displayName += ' GPU';\r\n            break;\r\n        default:\r\n            break;\r\n    }\r\n    switch (familyName) {\r\n        case SkuFamilyName.Dsv3:\r\n            displayName += ' (Nested virtualization)';\r\n            break;\r\n        case SkuFamilyName.NCsv3:\r\n        case SkuFamilyName.NCasT4v3:\r\n        case SkuFamilyName.NC:\r\n            displayName += ' (Compute)';\r\n            break;\r\n        case SkuFamilyName.NVv4:\r\n        case SkuFamilyName.NVv3:\r\n        case SkuFamilyName.NVadsA10v5:\r\n        case SkuFamilyName.NV:\r\n            displayName += ' (Visualization)';\r\n            break;\r\n        case SkuFamilyName.Esv4:\r\n            displayName += ' (Memory-optimized)';\r\n            break;\r\n        default:\r\n            break;\r\n    }\r\n    displayName = trim(displayName);\r\n    return displayName;\r\n});\r\nexport const getLocalizedSkuDisplayName = (sku, intl) => {\r\n    const name = getSkuFriendlyName(sku);\r\n    const localizedName = getLocalizedSkuFriendlyName(name, intl);\r\n    const isClassic = isClassicSku(sku.name);\r\n    // Removing sku.skuFamilyName.\r\n    // TODO: Add back sku.skuFamilyName conditional to private preview.\r\n    return isClassic || !sku.family ? localizedName : localizedName;\r\n};\r\nexport const getLocalizedLabSkuDisplayName = (sku, intl) => {\r\n    const skuFriendlyName = sku.skuFriendlyName;\r\n    const friendlyName = !skuFriendlyName ? '' : getLocalizedSkuFriendlyName(skuFriendlyName, intl);\r\n    // Removing sku.skuFamilyName.\r\n    // TODO: Add back sku.skuFamilyName conditional to private preview.\r\n    const skuDisplayName = isClassicSku(sku.skuName) || !sku.skuFamilyName ? friendlyName : friendlyName;\r\n    return skuDisplayName;\r\n};\r\nexport const getNumberOfRemainingVms = memoize((sku, location) => {\r\n    const coresPerVm = sku.size.cores;\r\n    const availableCores = getNumberOfAvailableCores(location);\r\n    let numberOfVms = 0;\r\n    if (coresPerVm !== 0 && availableCores !== 0) {\r\n        numberOfVms = Math.floor(availableCores / coresPerVm);\r\n    }\r\n    return numberOfVms;\r\n});\r\nexport const getNumberOfAvailableCores = memoize((location) => {\r\n    return !!location?.usage && location.usage.limit >= location.usage.currentValue\r\n        ? location.usage.limit - location.usage.currentValue\r\n        : 0;\r\n});\r\nexport const isClassicSku = memoize((skuName) => {\r\n    return !!skuName && skuName.startsWith(SkuConstants.Classic);\r\n});\r\nexport const isLegacySku = memoize((skuFamily) => {\r\n    return !!skuFamily && (skuFamily === 'AV2' || skuFamily === 'DSV3' || skuFamily === 'NV' || skuFamily === 'NC');\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { getCurrentLabParentId } from './lab-parent-resource-selectors';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nexport const getSubscriptions = memoize((store) => {\r\n    const subscriptionStore = store.get('subscriptionStore');\r\n    const subscriptions = subscriptionStore.get('subscriptions');\r\n    return subscriptions;\r\n});\r\nexport const subscriptionHasFeature = memoize((store, feature) => {\r\n    const currentLabParent = getCurrentLabParentId(store);\r\n    const resourceId = new ResourceId(currentLabParent);\r\n    const subscriptionId = resourceId.subscriptionId;\r\n    if (!subscriptionId) {\r\n        return false;\r\n    }\r\n    const subscriptions = getSubscriptions(store);\r\n    const currentSubscription = subscriptions.find((o) => caseInsensitiveCultureInvariantCompare(o.subscriptionId, subscriptionId) === 0);\r\n    if (!currentSubscription) {\r\n        return false;\r\n    }\r\n    return currentSubscription.features.some((x) => x === feature);\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { getCurrentLabId } from '../lab-selectors';\r\nimport { getVNextLab } from './lab-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { getCurrentLabSizeData } from './pricing-and-availability-selectors';\r\nimport { getVNextPrice } from './price-selectors';\r\nimport { SkuFamilyName, convertSkuCapabilityToVmSzie, getSkuCostTargetUnit, getSkuFriendlyName, isClassicSku, } from '../../../common/selectors/sku-selectors';\r\nimport { subscriptionHasFeature } from '../subscription-selector';\r\nexport const getVNextSkuData = memoize((store) => {\r\n    let skus = store.get('vNextSkuStore').get('skus');\r\n    if (!skus) {\r\n        return;\r\n    }\r\n    // Eventually we'll open the flood gates to all skus, we need to stop adding booleans here \r\n    // when the business model changes.\r\n    const isPrivatePreview = subscriptionHasFeature(store, 'Microsoft.LabServices/PrivatePreview');\r\n    const isAllowedLargeDisks = subscriptionHasFeature(store, 'Microsoft.LabServices/AllowLargeDisks');\r\n    const isAllowedLargeDSv4 = subscriptionHasFeature(store, 'Microsoft.LabServices/AllowLargeDSv4');\r\n    const isAllowedStandard_NV4as_v4 = subscriptionHasFeature(store, 'Microsoft.LabServices/AllowStandard_NV4as_v4');\r\n    const isAllowedLegacySkus = subscriptionHasFeature(store, 'Microsoft.LabServices/AllowLegacySkus');\r\n    const hasSkuFeature = isPrivatePreview ||\r\n        isAllowedLargeDisks ||\r\n        isAllowedStandard_NV4as_v4 ||\r\n        isAllowedLargeDSv4 ||\r\n        isAllowedLegacySkus;\r\n    // Need to remove these skus from the list as they are legacy skus and will break in the backend.\r\n    skus = skus.filter((o) => o.name !== \"Basic\" &&\r\n        o.name !== \"Standard\" &&\r\n        o.name !== \"Large\" &&\r\n        o.name !== \"Virtualization\" &&\r\n        o.name !== \"Performance\" &&\r\n        o.name !== \"SmallGPUCompute\" &&\r\n        o.name !== \"MediumGPUVisualization\" &&\r\n        o.name !== \"SmallGPUVisualization\");\r\n    // TODO: smartly return the SKUs based on the feature\r\n    if (hasSkuFeature) {\r\n        if (!isAllowedLargeDisks && !isAllowedLargeDSv4) {\r\n            skus = skus.filter((o) => isClassicSku(o.name) ||\r\n                (!isClassicSku(o.name) &&\r\n                    new Number(o.capabilities?.find((x) => x.name === 'StorageGB')?.value) <= 512));\r\n        }\r\n        if (!isAllowedLegacySkus) {\r\n            skus = skus.filter((o) => isClassicSku(o.name) ||\r\n                (!isClassicSku(o.name) &&\r\n                    o.family !== SkuFamilyName.Dsv3 &&\r\n                    o.family !== SkuFamilyName.Av2 &&\r\n                    o.family !== SkuFamilyName.NC &&\r\n                    o.family !== SkuFamilyName.NV));\r\n        }\r\n        if (!isAllowedStandard_NV4as_v4) {\r\n            skus = skus.filter((o) => isClassicSku(o.name) || (!isClassicSku(o.name) && !o.name?.startsWith('Standard_NVv4_4_')));\r\n        }\r\n        return skus;\r\n    }\r\n    else {\r\n        return skus.filter((o) => isClassicSku(o.name) ||\r\n            (!isClassicSku(o.name) &&\r\n                (o.family === SkuFamilyName.NCasT4v3 ||\r\n                    o.family === SkuFamilyName.NVadsA10v5)));\r\n    }\r\n});\r\nexport const getVNextSkuLoadState = memoize((store) => store.get('vNextSkuStore').get('loadState'));\r\nexport const getVNextSkuLoadError = memoize((store) => store.get('vNextSkuStore').get('error'));\r\nexport const getCurrentLabSkuInfo = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    const currentVNextLab = getVNextLab(store, currentLabId);\r\n    const labSkuName = currentVNextLab?.virtualMachineProfile?.sku?.name;\r\n    const labLocation = currentVNextLab?.location;\r\n    if (!labSkuName || !labLocation) {\r\n        return undefined;\r\n    }\r\n    //if old sku\r\n    const oldSizeData = getCurrentLabSizeData(store);\r\n    if (!!oldSizeData) {\r\n        return {\r\n            skuName: labSkuName,\r\n            cores: oldSizeData.cores,\r\n            isGpu: oldSizeData.discreteGpu === LabServicesModels.EnableState.Enabled,\r\n            memoryGB: oldSizeData.memoryInGB,\r\n            price: oldSizeData.locations[labLocation]?.price,\r\n            currency: oldSizeData.locations[labLocation]?.currencyCode,\r\n            storageGB: undefined,\r\n            storageType: '',\r\n            skuFamilyName: undefined,\r\n            skuFriendlyName: oldSizeData.displayName,\r\n        };\r\n    }\r\n    // if new sku\r\n    let skuData = getVNextSkuData(store);\r\n    if (!skuData) {\r\n        return undefined;\r\n    }\r\n    skuData = skuData.filter((o) => caseInsensitiveCultureInvariantCompare(o.name, labSkuName) === 0);\r\n    const sku = skuData.find((o) => !!o.locations &&\r\n        o.locations?.findIndex((o) => caseInsensitiveCultureInvariantCompare(o, labLocation) === 0) >= 0);\r\n    if (!sku) {\r\n        return undefined;\r\n    }\r\n    const size = convertSkuCapabilityToVmSzie(sku.capabilities, sku.size);\r\n    const imageType = currentVNextLab?.virtualMachineProfile?.osType;\r\n    const targetPriceUnit = getSkuCostTargetUnit(imageType === LabServicesModels.OsType.Windows);\r\n    const priceData = getVNextPrice(store);\r\n    const currentLabSkuPrice = priceData\r\n        .get(labLocation)\r\n        ?.find((o) => caseInsensitiveCultureInvariantCompare(o.skuName, labSkuName) === 0 &&\r\n        caseInsensitiveCultureInvariantCompare(o.unit, targetPriceUnit) === 0);\r\n    const vmSku = {\r\n        key: sku.name,\r\n        name: sku.name,\r\n        family: sku.family,\r\n        size,\r\n        isClassic: isClassicSku(sku.name),\r\n        locations: [\r\n            {\r\n                key: labLocation,\r\n                name: labLocation,\r\n                costs: !currentLabSkuPrice ? [] : [currentLabSkuPrice],\r\n                usage: undefined,\r\n            },\r\n        ],\r\n    };\r\n    return {\r\n        ...size,\r\n        skuName: labSkuName,\r\n        skuFriendlyName: getSkuFriendlyName(vmSku),\r\n        skuFamilyName: sku.family,\r\n        price: currentLabSkuPrice?.value,\r\n        currency: currentLabSkuPrice?.currencyCode,\r\n    };\r\n});\r\nexport const isCurrentVNextLabOldSku = memoize((store) => {\r\n    const oldSizeData = getCurrentLabSizeData(store);\r\n    return !!oldSizeData;\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { isVNextFeatureEnabledOrLms, storeIsLoading } from './common-selectors';\r\nimport { getCurrentLabAccount } from './lab-account-selectors';\r\nimport { getCurrentResourceGroupLabPlans, getValidLabPlans } from './vnext/lab-plan-selectors';\r\nimport { CoreQuotaStatus, determineVCurrentQuotaStatus, getCoreLimits } from './core-limit-selectors';\r\nimport { InitializationState } from '../state/common-store';\r\nimport { getVNextSkuData } from './vnext/sku-selectors';\r\nexport const getCurrentLabParentId = memoize((state) => {\r\n    const resourceId = state.get('labParentResourceStore').get('currentLabParentId');\r\n    return resourceId;\r\n});\r\nexport const getCurrentLabAccountId = memoize((store) => {\r\n    const currentLabParentId = getCurrentLabParentId(store);\r\n    const isVNext = isVNextFeatureEnabledOrLms(store);\r\n    return !isVNext ? currentLabParentId : isLabParentLabAccount(currentLabParentId) ? currentLabParentId : '';\r\n});\r\nexport const isCurrentLabParentLabAccount = memoize((store) => {\r\n    const currentLabParentId = getCurrentLabParentId(store);\r\n    return isLabParentLabAccount(currentLabParentId);\r\n});\r\nexport const getCurrentResourceGroup = memoize((store) => {\r\n    const resourceGroups = getResourceGroups(store);\r\n    const currentLabParentId = getCurrentLabParentId(store);\r\n    return resourceGroups.find((id) => caseInsensitiveCultureInvariantCompare(id, currentLabParentId) === 0);\r\n});\r\nexport const isCurrentLabParentResourceGroup = memoize((store) => {\r\n    const currentLabParentId = getCurrentLabParentId(store);\r\n    return isLabParentResourceGroup(currentLabParentId);\r\n});\r\nexport function isLabParentLabAccount(id) {\r\n    const resource = new ResourceId(id);\r\n    return resource.type?.toLowerCase() === 'labaccounts' ? true : false;\r\n}\r\nexport function isLabParentResourceGroup(id) {\r\n    const resource = new ResourceId(id);\r\n    return resource.type?.toLowerCase() === 'resourcegroups' ? true : false;\r\n}\r\nexport const isLoadingLabParents = memoize((state) => {\r\n    const loadState = state.get('labParentResourceStore').get('loadState');\r\n    return storeIsLoading(loadState);\r\n});\r\nexport const getResourceGroups = memoize((state) => {\r\n    const resourceGroupLabsMap = state.get('vNextLabStore').get('resourceGroupLabsMap');\r\n    const labPlans = getValidLabPlans(state);\r\n    const labsResourceGroups = resourceGroupLabsMap.keySeq();\r\n    let resourceGroups = labsResourceGroups.toList();\r\n    for (let index = 0; index < labPlans.size; index++) {\r\n        const labPlanId = labPlans.get(index).id;\r\n        const resourceId = new ResourceId(labPlanId, true);\r\n        const resourceGroup = resourceId.getResourceGroupId();\r\n        if (!!resourceGroup &&\r\n            !resourceGroups.find((id) => caseInsensitiveCultureInvariantCompare(id, resourceGroup) === 0)) {\r\n            resourceGroups = resourceGroups.push(resourceGroup);\r\n        }\r\n    }\r\n    return resourceGroups;\r\n});\r\nexport const doesCurrentLabParentExist = memoize((store) => {\r\n    return !!getCurrentLabAccount(store) || !!getCurrentResourceGroup(store);\r\n});\r\nexport const shouldDisableNewLabCreation = memoize((store) => {\r\n    const isLabAccount = isCurrentLabParentLabAccount(store);\r\n    if (isLabAccount) {\r\n        const coreQuotaData = getCoreLimits(store);\r\n        const quotaStatus = determineVCurrentQuotaStatus(coreQuotaData);\r\n        return quotaStatus === CoreQuotaStatus.Restricted || quotaStatus === CoreQuotaStatus.QuotaExceeded;\r\n    }\r\n    else {\r\n        const labPlans = getCurrentResourceGroupLabPlans(store);\r\n        const sku = getVNextSkuData(store);\r\n        return labPlans.size === 0 || !sku || sku.length === 0;\r\n    }\r\n});\r\nexport const isRefreshingLabParentResources = memoize((state) => {\r\n    const labParentResourcesStore = state.get('labParentResourceStore');\r\n    const refreshInitializationState = labParentResourcesStore.get('refreshInitializationState');\r\n    return refreshInitializationState === InitializationState.Initializing;\r\n});\r\nexport const hasRefreshLabParentResourcesError = memoize((state) => {\r\n    const loadSubscriptionError = state.get('subscriptionStore').get('error');\r\n    const labParentResourcesStore = state.get('labParentResourceStore');\r\n    const labParentResourceErrors = labParentResourcesStore.get('errors');\r\n    const refreshError = labParentResourcesStore.get('refreshError');\r\n    return !!loadSubscriptionError || labParentResourceErrors.size > 0 || !!refreshError;\r\n});\r\nexport const hasRefreshedLabParentResources = memoize((state) => {\r\n    const labParentResourcesStore = state.get('labParentResourceStore');\r\n    const refreshInitializationState = labParentResourcesStore.get('refreshInitializationState');\r\n    return refreshInitializationState === InitializationState.Success;\r\n});\r\n","export const LabParentRoutePrefix = '/:labParentId+';\r\nexport const LabIdRoutePrefix = '/:labId+';\r\nexport const StudentView = '/virtualmachines';\r\nexport const Routes = {\r\n    Home: '/',\r\n    LoggedOut: '/user/loggedout',\r\n    Welcome: '/welcome',\r\n    StudentView: StudentView,\r\n    LabList: (labParentId = LabParentRoutePrefix) => encodeURI(`${labParentId}/labs`),\r\n    VNextLabList: (labParentId = LabParentRoutePrefix) => encodeURI(`${labParentId}/providers/microsoft.labservices/labs`),\r\n    NewLab: (labParentId = LabParentRoutePrefix) => encodeURI(`${labParentId}/newlab`),\r\n    NewVNextLab: (labParentId = LabParentRoutePrefix) => encodeURI(`${labParentId}/providers/microsoft.labservices/newlab`),\r\n    Lab: (subscriptionId = ':subscriptionId', resourceGroup = ':resourceGroup', labAccount = ':labAccount', lab = ':lab') => encodeURI(`/subscriptions/${subscriptionId}/resourcegroups/${resourceGroup}/providers/microsoft.labservices/labaccounts/${labAccount}/labs/${lab}`),\r\n    VNextLab: (subscriptionId = ':subscriptionId', resourceGroup = ':resourceGroup', lab = ':lab') => encodeURI(`/subscriptions/${subscriptionId}/resourcegroups/${resourceGroup}/providers/microsoft.labservices/labs/${lab}`),\r\n    Template: (labId = LabIdRoutePrefix) => encodeURI(`${labId}/template`),\r\n    Schedule: (labId = LabIdRoutePrefix) => encodeURI(`${labId}/schedules`),\r\n    Users: (labId = LabIdRoutePrefix) => encodeURI(`${labId}/users`),\r\n    VirtualMachines: (labId = LabIdRoutePrefix) => encodeURI(`${labId}/virtualmachines`),\r\n    Register: (registrationCode = ':registrationCode') => encodeURI(`/register/${registrationCode}`),\r\n    Dashboard: (labId = LabIdRoutePrefix) => encodeURI(`${labId}/dashboard`),\r\n    Settings: (labId = LabIdRoutePrefix) => encodeURI(`${labId}/settings`),\r\n    SignInReturn: '/signin-oidc-aad',\r\n    TeamsConfig: '/teams-config',\r\n    Privacy: '/privacy',\r\n    TermsOfUse: '/terms-of-use',\r\n    TeamsStartMfa: '/teams-start-mfa',\r\n    TeamsCompleteMfa: '/teams-complete-mfa',\r\n    LtiStartOidc: '/lti-start-oidc',\r\n    LtiReturnOidc: '/lti-return-oidc',\r\n};\r\nexport const LabParentRoutes = [Routes.LabList(), Routes.NewLab()];\r\nexport const VNextLabParentRoutes = [Routes.VNextLabList(), Routes.NewVNextLab()];\r\nexport const LabRoutes = [\r\n    Routes.Dashboard(),\r\n    Routes.Template(),\r\n    Routes.Schedule(),\r\n    Routes.Users(),\r\n    Routes.VirtualMachines(),\r\n    Routes.Settings(),\r\n];\r\n// order for this is important, routes need to go from\r\n// most restrictive to least restrictive otherwise we won't\r\n// match them correctly when resolving our route name for telemetry\r\nexport const AllRoutes = [\r\n    Routes.Template(),\r\n    Routes.Schedule(),\r\n    Routes.Users(),\r\n    Routes.VirtualMachines(),\r\n    Routes.Register(),\r\n    Routes.Dashboard(),\r\n    Routes.Settings(),\r\n    Routes.Lab(),\r\n    Routes.VNextLab(),\r\n    Routes.LabList(),\r\n    Routes.NewLab(),\r\n    Routes.LoggedOut,\r\n    Routes.Welcome,\r\n    Routes.StudentView,\r\n    Routes.SignInReturn,\r\n    Routes.LtiStartOidc,\r\n    Routes.Home,\r\n];\r\nexport const MfaRoutes = [Routes.TeamsStartMfa, Routes.TeamsCompleteMfa];\r\nexport const RoutePathToRouteNameMap = {};\r\nRoutePathToRouteNameMap[Routes.Home] = 'Home';\r\nRoutePathToRouteNameMap[Routes.LoggedOut] = 'LoggedOut';\r\nRoutePathToRouteNameMap[Routes.Welcome] = 'Welcome';\r\nRoutePathToRouteNameMap[Routes.StudentView] = 'StudentView';\r\nRoutePathToRouteNameMap[Routes.LabList()] = 'LabList';\r\nRoutePathToRouteNameMap[Routes.NewLab()] = 'NewLab';\r\nRoutePathToRouteNameMap[Routes.Template()] = 'Template';\r\nRoutePathToRouteNameMap[Routes.Schedule()] = 'Schedule';\r\nRoutePathToRouteNameMap[Routes.Users()] = 'Users';\r\nRoutePathToRouteNameMap[Routes.VirtualMachines()] = 'VirtualMachines';\r\nRoutePathToRouteNameMap[Routes.Register()] = 'Register';\r\nRoutePathToRouteNameMap[Routes.Dashboard()] = 'Dashboard';\r\nRoutePathToRouteNameMap[Routes.Settings()] = 'Settings';\r\nRoutePathToRouteNameMap[Routes.Lab()] = 'Lab';\r\nRoutePathToRouteNameMap[Routes.VNextLab()] = 'VNextLab';\r\nRoutePathToRouteNameMap[Routes.SignInReturn] = 'SignInReturn';\r\nRoutePathToRouteNameMap[Routes.TeamsConfig] = 'TeamsConfig';\r\nRoutePathToRouteNameMap[Routes.TeamsStartMfa] = 'TeamsStartMfa';\r\nRoutePathToRouteNameMap[Routes.TeamsCompleteMfa] = 'TeamsCompleteMfa';\r\nRoutePathToRouteNameMap[Routes.LtiStartOidc] = 'LtiStartOidc';\r\nexport default Routes;\r\n","import Settings from '../../settings/settings';\r\nexport const AuthenticationState = {\r\n    NotStarted: 'NotStarted',\r\n    Redirecting: 'Redirecting',\r\n    PoppingUp: 'PoppingUp',\r\n    Authenticating: 'Authenticating',\r\n    Authenticated: 'Authenticated',\r\n    AuthenticationFailed: 'AuthenticationFailed',\r\n    AuthenticationError: 'AuthenticationError',\r\n    SigningOut: 'SigningOut',\r\n};\r\nexport const UserType = {\r\n    Unknown: '',\r\n    LabUser: 'LabUser',\r\n    LabOwner: 'LabOwner',\r\n};\r\nexport const IdentityErrorCode = {\r\n    LoginRequired: 'login_required',\r\n    Renewal: 'token_renewal_error',\r\n    InteractionRequired: 'interaction_required',\r\n    DuplicateRequest: 'acquiretoken_progress_error',\r\n    UserLogin: 'user_login_error',\r\n    InvalidState: 'invalid_state_error',\r\n    UserCanceled: 'user_canceled',\r\n    AccessDenied: 'access_denied',\r\n    Failed: 'failed',\r\n    EmptyIdToken: 'null_or_empty_id_token',\r\n    EndpointsError: 'endpoints_resolution_error',\r\n    InvalidRequest: 'invalid_request',\r\n    PopupWindowError: 'popup_window_error',\r\n    Unknown: 'unknown',\r\n};\r\nexport const graphScopes = ['openid', 'email', 'profile', 'GroupMember.Read.All'];\r\nexport const armScopes = ['https://management.azure.com/.default'];\r\nexport const preAuthorizedScopes = [...armScopes];\r\nexport const labsApiScopes = [Settings.LabsApiScope];\r\n","import memoize from 'memoize-one';\r\nimport { AuthenticationState } from '../../data/models/identity';\r\nimport { isLmsStudent } from './lti-selectors';\r\nexport const getTenantId = memoize((state) => state.get('identityStore').get('tenantId'));\r\nexport const getDisplayId = memoize((state) => state.get('identityStore').get('displayId'));\r\nexport const getLoginHint = memoize((state) => state.get('identityStore').get('loginHint'));\r\nexport const getCurrentReturnUrl = memoize((state) => state.get('identityStore').get('returnUrl'));\r\nexport const isUserAuthenticated = memoize((state) => state.get('identityStore').get('state') === AuthenticationState.Authenticated);\r\nexport const doesSettingsExist = memoize((state) => state.get('identityStore').get('settingsExist'));\r\nexport const getUserSettings = memoize((state) => state.get('identityStore').get('settings'));\r\nexport const getAuthenticationState = memoize((state) => {\r\n    const isLtiSignInOnly = isLmsStudent(state);\r\n    if (isLtiSignInOnly) {\r\n        const ltiSignInState = state.get('ltiStore').get('authenticationState');\r\n        return ltiSignInState;\r\n    }\r\n    else {\r\n        const aadSignInState = state.get('identityStore').get('state');\r\n        return aadSignInState;\r\n    }\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { matchPath } from 'react-router';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { AllRoutes, LabParentRoutes, LabIdRoutePrefix, LabRoutes, MfaRoutes, RoutePathToRouteNameMap, Routes, VNextLabParentRoutes, } from '../../utils/routes';\r\nimport { isVNextFeatureEnabledOrLms } from './common-selectors';\r\nimport { getCurrentReturnUrl } from './identity-selector';\r\nimport { isVNextLab } from './lab-selectors';\r\nexport const getLocation = memoize((state) => {\r\n    const router = state.get('router');\r\n    const location = router.get('location');\r\n    return location;\r\n});\r\nexport const getRoute = memoize((state) => {\r\n    const location = getLocation(state);\r\n    const pathname = location.get('pathname');\r\n    const registrationRoute = matchPath(pathname, {\r\n        path: Routes.Register(),\r\n        exact: true,\r\n        strict: false,\r\n    });\r\n    if (registrationRoute && registrationRoute.params.registrationCode) {\r\n        return `/register/${registrationRoute.params.registrationCode}`;\r\n    }\r\n    else {\r\n        return pathname ? pathname.toLowerCase() : '';\r\n    }\r\n});\r\nexport const getSearch = memoize((state) => {\r\n    const location = getLocation(state);\r\n    const search = location.get('search');\r\n    return search;\r\n});\r\nexport const getHash = memoize((state) => {\r\n    const location = getLocation(state);\r\n    const hash = location.get('hash');\r\n    return hash;\r\n});\r\nexport const getReturnUrl = memoize((state) => {\r\n    const returnUrlPath = getRoute(state);\r\n    const returnUrlSearch = getSearch(state);\r\n    let path = Routes.Home;\r\n    switch (returnUrlPath) {\r\n        case Routes.SignInReturn:\r\n            path = getCurrentReturnUrl(state);\r\n            if (returnUrlSearch.length > 0 &&\r\n                path.length >= returnUrlSearch.length &&\r\n                path.indexOf(returnUrlSearch.substring(1)) > -1) {\r\n                // if the query string was saved in storage as a part of returnUrl in the previous signInRedirecting, we skip adding search again.\r\n                return path;\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        case Routes.LoggedOut:\r\n        case '/':\r\n        case '':\r\n        case null:\r\n        case undefined:\r\n            break;\r\n        default:\r\n            path = returnUrlPath;\r\n            break;\r\n    }\r\n    const returnUrl = `${path}${returnUrlSearch}`;\r\n    return returnUrl;\r\n});\r\nexport const getLabParentIdFromRoute = memoize((state) => {\r\n    const route = getRoute(state);\r\n    const isVNext = isVNextFeatureEnabledOrLms(state);\r\n    const vNextLabParentMatch = matchPath(route, {\r\n        path: VNextLabParentRoutes,\r\n        exact: true,\r\n        strict: false,\r\n    });\r\n    const labParentMatch = matchPath(route, {\r\n        path: LabParentRoutes,\r\n        exact: true,\r\n        strict: false,\r\n    });\r\n    if (isVNext && vNextLabParentMatch && vNextLabParentMatch.params.labParentId) {\r\n        const parentId = `/${vNextLabParentMatch.params.labParentId}`;\r\n        return parentId;\r\n    }\r\n    else if (labParentMatch && labParentMatch.params.labParentId) {\r\n        const parentId = `/${labParentMatch.params.labParentId}`;\r\n        return parentId;\r\n    }\r\n    const labId = getLabIdFromRoute(state);\r\n    if (labId) {\r\n        const isVNextLabId = isVNextLab(labId);\r\n        const labResource = new ResourceId(labId, isVNextLabId);\r\n        const parentId = labResource && labResource.parent ? labResource.parent.id : undefined;\r\n        return !parentId ? undefined : parentId;\r\n    }\r\n    return undefined;\r\n});\r\nexport const getLabIdFromRoute = memoize((state) => {\r\n    const route = getRoute(state);\r\n    const labIdMatch = matchPath(route, {\r\n        path: LabRoutes,\r\n        exact: true,\r\n        strict: false,\r\n    });\r\n    if (labIdMatch && labIdMatch.params.labId) {\r\n        return `/${labIdMatch.params.labId}`;\r\n    }\r\n    // this handles the case where a user navigates to a lab directly but not to a particular page\r\n    let labMatch = matchPath(route, {\r\n        path: Routes.Lab(),\r\n        exact: true,\r\n        strict: false,\r\n    });\r\n    if (isVNextFeatureEnabledOrLms(state) && !labMatch) {\r\n        labMatch = matchPath(route, { path: Routes.VNextLab(), exact: true, strict: false });\r\n    }\r\n    if (labMatch && labMatch.url) {\r\n        return labMatch.url;\r\n    }\r\n    return undefined;\r\n});\r\nexport const getLabRoute = memoize((state) => {\r\n    const route = getRoute(state);\r\n    const labIdMatch = matchPath(route, {\r\n        path: LabRoutes,\r\n        exact: true,\r\n        strict: false,\r\n    });\r\n    if (labIdMatch && labIdMatch.path) {\r\n        return labIdMatch.path.replace(LabIdRoutePrefix, '');\r\n    }\r\n    return undefined;\r\n});\r\nconst UnknownRouteName = 'Unknown';\r\nexport const getRouteName = memoize((state) => {\r\n    const route = getRoute(state);\r\n    const routeMatch = matchPath(route, {\r\n        path: AllRoutes,\r\n    });\r\n    if (routeMatch && routeMatch.path) {\r\n        const routeName = RoutePathToRouteNameMap[routeMatch.path];\r\n        return routeName || UnknownRouteName;\r\n    }\r\n    return UnknownRouteName;\r\n});\r\nexport const isRouteTeamsConfig = memoize((state) => {\r\n    return getRoute(state) === Routes.TeamsConfig;\r\n});\r\nconst isMfaRouteMatch = (route) => {\r\n    const mfaMatch = matchPath(route, {\r\n        path: MfaRoutes,\r\n    });\r\n    return !!mfaMatch && mfaMatch.isExact;\r\n};\r\nexport const isMfaReturn = memoize((state) => {\r\n    const returnUrl = getCurrentReturnUrl(state);\r\n    const route = !!returnUrl ? returnUrl.split('?')[0] : '';\r\n    return isMfaRouteMatch(route);\r\n});\r\nexport const isMfaRouteOrRedirect = memoize((state) => {\r\n    const route = getRoute(state);\r\n    if (route === Routes.SignInReturn) {\r\n        return isMfaReturn(state);\r\n    }\r\n    return isMfaRouteMatch(route);\r\n});\r\nexport const isLtiOidcRoute = memoize((state) => {\r\n    return getRoute(state) === Routes.LtiStartOidc;\r\n});\r\nexport const isLtiReturnOidc = memoize((state) => {\r\n    return getRoute(state) === Routes.LtiReturnOidc;\r\n});\r\nexport const isRegisterRoute = memoize((state) => {\r\n    const route = getRoute(state);\r\n    const registerRoute = matchPath(route, {\r\n        path: Routes.Register(),\r\n    });\r\n    return !!registerRoute && registerRoute.isExact;\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { trackTrace } from '../../utils/telemetry/telemetry-channel';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { InitializationState } from '../state/common-store';\r\nimport { Feature } from '../../utils/features';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { environmentType, EnvironmentType } from '../../utils/environment';\r\nimport { Host } from '../../utils/hosts';\r\nimport { findOneIana } from 'windows-iana/dist';\r\nimport { getCurrentLabParentId, isCurrentLabParentLabAccount, isCurrentLabParentResourceGroup, } from './lab-parent-resource-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { isLtiOidcRoute, isLtiReturnOidc } from './route-selector';\r\nimport { getCurrentLabId } from './lab-selectors';\r\nexport const isInitialized = (state) => state === InitializationState.Success || state === InitializationState.Failed;\r\nexport const isAppInitialized = memoize((state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const initializationState = commonStore.get('initializationState');\r\n    const initialized = isInitialized(initializationState);\r\n    return initialized;\r\n});\r\nexport const isProfessorAppInitialized = memoize((state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const professorInitializationState = commonStore.get('professorInitializationState');\r\n    const initialized = isInitialized(professorInitializationState);\r\n    return initialized;\r\n});\r\nexport const isStudentAppInitialized = memoize((state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const studentInitializeState = commonStore.get('studentInitializeState');\r\n    const initialized = isInitialized(studentInitializeState);\r\n    return initialized;\r\n});\r\nexport const isLabAppInitialized = memoize((state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const labAppInitializeState = commonStore.get('labAppInitializeState');\r\n    const initialized = isInitialized(labAppInitializeState);\r\n    return initialized;\r\n});\r\nexport const hasFatalError = memoize((state) => state.get('commonStore').get('fatalErrorCode') !== undefined);\r\nexport const getFatalError = memoize((state) => state.get('commonStore').get('fatalError'));\r\nexport const getFatalErrorCode = memoize((state) => state.get('commonStore').get('fatalErrorCode'));\r\nexport const getResourceProperties = memoize((state) => {\r\n    let subscriptionId = '';\r\n    let resourceGroup = '';\r\n    let labAccount = '';\r\n    let lab = '';\r\n    let template = '';\r\n    const isVCurrent = isCurrentLabParentLabAccount(state);\r\n    const currentLabId = getCurrentLabId(state);\r\n    const currentLabParentId = getCurrentLabParentId(state);\r\n    if (currentLabParentId) {\r\n        try {\r\n            const resourceId = new ResourceId(currentLabParentId);\r\n            subscriptionId = resourceId.subscriptionId || subscriptionId;\r\n            resourceGroup = resourceId.resourceGroupName || resourceGroup;\r\n            labAccount = isVCurrent ? resourceId.name || labAccount : '';\r\n        }\r\n        catch (e) {\r\n            trackTrace(`common-selectors: Unable to select resource id for ${currentLabParentId} due to error ${e.message}.`);\r\n        }\r\n    }\r\n    if (currentLabId) {\r\n        try {\r\n            const resourceId = new ResourceId(currentLabId, !isVCurrent);\r\n            lab = resourceId.name || lab;\r\n        }\r\n        catch (e) {\r\n            trackTrace(`common-selectors: Unable to select resource id for ${currentLabId} due to error ${e.message}.`);\r\n        }\r\n    }\r\n    const templateStore = state.get('templateStore');\r\n    const currentTemplateId = templateStore.get('currentTemplate');\r\n    if (currentTemplateId) {\r\n        try {\r\n            const resourceId = new ResourceId(currentTemplateId);\r\n            template = resourceId.name || template;\r\n        }\r\n        catch (e) {\r\n            trackTrace(`common-selectors: Unable to select resource id for ${currentTemplateId} due to error ${e.message}.`);\r\n        }\r\n    }\r\n    return { subscriptionId, resourceGroup, labAccount, lab, template };\r\n});\r\nexport const getRequestedLocale = memoize((state) => state.get('commonStore').get('requestedLocale'));\r\nexport const getHost = memoize((state) => state.get('commonStore').get('host'));\r\nexport const getLocale = memoize((state) => state.get('commonStore').get('locale'));\r\nexport const getLanguage = memoize((state) => state.get('commonStore').get('language'));\r\nexport const getMarket = memoize((state) => state.get('commonStore').get('market'));\r\nexport const getTimezone = memoize((state) => state.get('commonStore').get('timezone'));\r\nexport const getIanaTimezone = memoize((state) => {\r\n    const windowsTimeZone = state.get('commonStore').get('timezone');\r\n    const ianaTimeZone = findOneIana(windowsTimeZone);\r\n    return ianaTimeZone;\r\n});\r\nexport const getReferrer = memoize((state) => state.get('commonStore').get('referrer'));\r\nexport const isFeatureEnabled = memoize((state, feature) => state\r\n    .get('commonStore')\r\n    .get('features')\r\n    .has(feature.trim().toLowerCase()));\r\nexport const isDevMode = memoize((state) => environmentType !== EnvironmentType.PROD || isFeatureEnabled(state, Feature.Dev));\r\nexport const isTeamsHost = memoize((state) => {\r\n    const host = getHost(state);\r\n    return host === Host.Teams;\r\n});\r\nexport const isTeamsMode = memoize((state) => {\r\n    return isTeamsHost(state) || isFeatureEnabled(state, Feature.TeamsIntegration);\r\n});\r\nexport const getFeatures = memoize((state) => {\r\n    const features = state.get('commonStore').get('features');\r\n    return features.toArray();\r\n});\r\nexport const storeIsLoading = (loadState) => {\r\n    return loadState === LoadingStoreState.Loading || loadState === LoadingStoreState.NotStarted;\r\n};\r\nexport const storeIsUpdating = (loadState) => {\r\n    return loadState === LoadingStoreState.Updating;\r\n};\r\nexport const storeHasLoadError = (loadState) => {\r\n    return loadState === LoadingStoreState.LoadingFailed;\r\n};\r\nexport const storeHasRefreshError = (loadState) => {\r\n    return loadState === LoadingStoreState.LoadingFailed;\r\n};\r\nexport const isVNextFeatureEnabled = memoize((_state) => {\r\n    // return isFeatureEnabled(state, Feature.VNext);\r\n    return true;\r\n});\r\nexport const isTerminalState = (provisioningState) => {\r\n    if (!provisioningState) {\r\n        return false;\r\n    }\r\n    return (provisioningState === LabServicesModels.ProvisioningState.Succeeded ||\r\n        provisioningState === LabServicesModels.ProvisioningState.Failed);\r\n};\r\nexport const isLmsHost = memoize((store) => {\r\n    const host = store.get('commonStore').get('host');\r\n    return host === Host.Canvas;\r\n});\r\nexport const isVNextFeatureEnabledOrLms = memoize((state) => {\r\n    return isVNextFeatureEnabled(state) || isLmsHost(state);\r\n});\r\nexport const isLmsMode = memoize((state) => {\r\n    return (isLmsHost(state) ||\r\n        isFeatureEnabled(state, Feature.CanvasIntegration) ||\r\n        isLtiOidcRoute(state) ||\r\n        isLtiReturnOidc(state));\r\n});\r\nexport const isTeamsOrLmsMode = memoize((state) => {\r\n    return isLmsMode(state) || isTeamsMode(state);\r\n});\r\nexport const isBastionFeatureEnabled = memoize((state) => {\r\n    return isFeatureEnabled(state, Feature.Bastion) || isCurrentLabParentResourceGroup(state) || isLmsHost(state);\r\n});\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    PolicyEnforceAutoShutdown: {\r\n        id: 'ALSPolicyEnforceAutoShutdownError',\r\n        defaultMessage: 'The lab could not be created or updated, because policy requires that all auto shutdown options must be enabled. ',\r\n        description: 'This error message is displayed when policy violation occurs for enforce auto shutdown policy',\r\n    },\r\n    PolicyAllowedVirtualMachineSKUs: {\r\n        id: 'ALSPolicyAllowedVirtualMachineSKUsError',\r\n        defaultMessage: 'The lab could not be created or updated, because the selected virtual machine size is not allowed by policy. ',\r\n        description: 'This error message is displayed when policy violation occurs for allowed virtual machine SKUs policy',\r\n    },\r\n    PolicyRequireNonAdminUser: {\r\n        id: 'ALSPolicyRequireNonAdminUserError',\r\n        defaultMessage: 'The lab could not be created or updated, because policy requires that all non-admin accounts must be enabled. ',\r\n        description: 'This error message is displayed when policy violation occurs for require non admin user policy',\r\n    },\r\n    PolicyTemplateLabsNotAllowed: {\r\n        id: 'ALSPolicyTemplateLabsNotAllowedError',\r\n        defaultMessage: 'The lab could not be created or updated, because template virtual machine is not allowed by policy. ',\r\n        description: 'This error message is displayed when policy violation occurs for template labs not allowed policy',\r\n    },\r\n    UnknownPolicyViolationError: {\r\n        id: 'UnknownPolicyViolationError',\r\n        defaultMessage: 'Azure built-in policy error or customer policy violation. ',\r\n        description: 'This error message denotes azure built-in policy error or customer policy violation occurred.',\r\n    },\r\n});\r\nexport const FailureOperation = {\r\n    Unknown: '',\r\n    SaveSharedImage: 'SaveSharedImage',\r\n    GetLabAccount: 'GetLabAccount',\r\n    GetEnvironment: 'GetEnvironment',\r\n    GetEnvironmentWithNetwork: 'GetEnvironmentWithNetwork',\r\n    DeleteLab: 'DeleteLab',\r\n    CreateLab: 'CreateLab',\r\n    UpdateLab: 'UpdateLab',\r\n    UpdateLabCapacity: 'UpdateLabCapacity',\r\n    UpdateLabAccessMode: 'UpdateLabAccessMode',\r\n    ScalingDownWhenVirtualMachinesAreRunning: 'ScalingDownWhenVirtualMachinesAreRunning',\r\n    UpdateLabQuota: 'UpdateLabQuota',\r\n    LoadLabs: 'LoadLabs',\r\n    LoadSubscriptions: 'LoadSubscriptions',\r\n    LoadTenantSubscriptions: 'LoadTenantSubscriptions',\r\n    LoadSchedules: 'LoadSchedules',\r\n    UpdateSchedule: 'UpdateSchedule',\r\n    DeleteSchedule: 'DeleteSchedule',\r\n    CreateSchedule: 'CreateSchedule',\r\n    LoadUsers: 'LoadUsers',\r\n    AddUsers: 'AddUsers',\r\n    InviteUsers: 'InviteUsers',\r\n    DeleteUsers: 'DeleteUsers',\r\n    LoadEnvironments: 'LoadEnvironments',\r\n    StartEnvironments: 'StartEnvironments',\r\n    StopEnvironments: 'StopEnvironments',\r\n    ResetEnvironments: 'ResetEnvironments',\r\n    GetSharedGallery: 'GetSharedGallery',\r\n    StopTemplate: 'StopTemplate',\r\n    StartTemplate: 'StartTemplate',\r\n    CreateTemplate: 'CreateTemplate',\r\n    ResetPassword: 'ResetPassword',\r\n    PublishTemplate: 'PublishTemplate',\r\n    GetTemplate: 'GetTemplate',\r\n    UpdateTemplate: 'UpdateTemplate',\r\n    ListTemplates: 'ListTemplates',\r\n    UpdateAdditionalQuotaForUsers: 'UpdateAdditionalQuotaForUsers',\r\n    Initialize: 'Initialize',\r\n    ProfessorInitialize: 'ProfessorInitialize',\r\n    StudentInitialize: 'StudentInitialize',\r\n    LabAppInitialize: 'LabAppInitialize',\r\n    GetAccessToken: 'GetAccessToken',\r\n    GetUserPhoto: 'GetUserPhoto',\r\n    GetGroupName: 'GetGroupName',\r\n    GetGroups: 'GetGroups',\r\n    ListLabAccounts: 'ListLabAccounts',\r\n    RefreshSubscriptionsAndLabAccounts: 'RefreshSubscriptionsAndLabAccounts',\r\n    ListLabAccountsForSubscription: 'ListLabAccountsForSubscription',\r\n    ListGalleryImages: 'ListGalleryImages',\r\n    ListSharedImages: 'ListSharedImages',\r\n    SignIn: 'SignIn',\r\n    SignOut: 'SignOut',\r\n    RegisterUser: 'RegisterUser',\r\n    ListUserEnvironments: 'ListUserEnvironments',\r\n    ListUserEnvironmentsPartial: 'ListUserEnvironmentsPartial',\r\n    StartUserEnvironment: 'StartUserEnvironment',\r\n    StopUserEnvironment: 'StopUserEnvironment',\r\n    ResetUserEnvironmentPassword: 'ResetUserEnvironmentPassword',\r\n    ReduxSagas: 'ReduxSagas',\r\n    MsalProviderInit: 'MsalProviderInit',\r\n    ReactUnhandled: 'ReactUnhandled',\r\n    IdleTimeout: 'IdleTimeout',\r\n    GetUserSettings: 'GetUserSettings',\r\n    UpdateUserSettings: 'UpdateUserSettings',\r\n    StorageInit: 'StorageInit',\r\n    GetPricingAndAvailabilityData: 'GetPricingAndAvailabilityData',\r\n    GetLabPricingAndAvailabilityData: 'GetLabPricingAndAvailabilityData',\r\n    GetCoreRestrictionsAndUsages: 'GetCoreRestrictionsAndUsages',\r\n    GetLab: 'GetLab',\r\n    TeamsInitialize: 'TeamsInitialize',\r\n    TeamsDisableSaveButton: 'TeamsDisableSaveButton',\r\n    TeamsConfigureTab: 'TeamsConfigureTab',\r\n    TeamsStartMfa: 'TeamsStartMfa',\r\n    TeamsCompleteMfa: 'TeamsCompleteMfa',\r\n    SyncLabUsers: 'SyncLabUsers',\r\n    ListTenants: 'ListTenants',\r\n    SelectTenant: 'SelectTenant',\r\n    RequestUserConsent: 'RequestUserConsent',\r\n    ListVNextLabsForSubscription: 'ListVNextLabsForSubscription',\r\n    ListLabPlansForSubscription: 'ListLabPlansForSubscription',\r\n    ListLabParentResources: 'ListLabParentResources',\r\n    ListLabPlanImages: 'ListLabPlanImages',\r\n    ListSkus: 'ListSkus',\r\n    LtiStartOidc: 'LtiStartOidc',\r\n    RefreshSubscriptionsAndLabParentResources: 'RefreshSubscriptionsAndLabParentResources',\r\n    UpdateLabTitleOrDescription: 'UpdateLabTitleOrDescription',\r\n    GetLabMetadata: 'GetLabMetadata',\r\n    UpdateLabSettings: 'UpdateLabSettings',\r\n    RedeployVirtualMachine: 'RedeployVirtualMachine',\r\n    ReimageUserVirtualMachine: 'ReimageUserVirtualMachine',\r\n    RedeployUserVirtualMachine: 'RedeployUserVirtualMachine',\r\n    RedeployVirtualMachineError: 'RedeployVirtualMachineError',\r\n    LtiSignIn: 'LtiSignIn',\r\n    GetLtiToken: 'GetLtiToken',\r\n    AccessWebStorage: 'AccessWebStorage',\r\n    LtiRequestBrowserStorageAccess: 'LtiRequestBrowserStorageAccess',\r\n    ListSkuData: 'GetSkuData',\r\n    ListUsageData: 'GetUsageData',\r\n    ListPriceData: 'ListPriceData',\r\n    CheckFeatureFlags: 'CheckFeatureFlags',\r\n    GetLabPlan: 'GetLabPlan',\r\n    LinkLabPlan: 'LinkLabPlan',\r\n    UnlinkLabPlan: 'UnlinkLabPlan',\r\n    UpdateLmsSettings: 'UpdateLmsSettings',\r\n    GetOperationsResultFailure: 'GetOperationsResultFailure',\r\n    GetUserOperationsResultFailure: 'GetUserOperationsResultFailure',\r\n};\r\nexport class MlClientError {\r\n    constructor(message, id, failureOperation, code, policyViolationDefinitionIds) {\r\n        this.message = message;\r\n        this.id = id;\r\n        this.failureOperation = failureOperation;\r\n        this.code = code;\r\n        this.policyViolationDefinitionIds = policyViolationDefinitionIds;\r\n    }\r\n}\r\n//export const REQUEST_DISALLOWED_BY_POLICY = 'RequestDisallowedByPolicy';\r\nexport const AzurePolicyViolation = {\r\n    CODE: 'RequestDisallowedByPolicy',\r\n    AUTOSHUTDOWN_POLICY: '/providers/Microsoft.Authorization/policyDefinitions/a6e9cf2d-7d76-440e-b795-8da246bd3aab',\r\n    REQUIRE_NONADMIN_USER_POLICY: '/providers/Microsoft.Authorization/policyDefinitions/0fd9915e-cab3-4f24-b200-6e20e1aa276a',\r\n    TEMPLATE_LABS_POLICY: '/providers/Microsoft.Authorization/policyDefinitions/e8a5a3eb-1ab6-4657-a701-7ae432cf14e1',\r\n    ALLOWED_VIRTUAL_MACHINES_POLICY: '/providers/Microsoft.Authorization/policyDefinitions/3e13d504-9083-4912-b935-39a085db2249',\r\n};\r\nexport const getAzurePolicyViolationErrorMessage = (error) => {\r\n    const errorMessages = [];\r\n    switch (error.code) {\r\n        case AzurePolicyViolation.CODE:\r\n            const errorCount = error.policyViolationDefinitionIds.length;\r\n            for (const policyViolationDefinitionId of error.policyViolationDefinitionIds) {\r\n                switch (policyViolationDefinitionId) {\r\n                    case AzurePolicyViolation.AUTOSHUTDOWN_POLICY:\r\n                        errorMessages.push(messages.PolicyEnforceAutoShutdown);\r\n                        break;\r\n                    case AzurePolicyViolation.REQUIRE_NONADMIN_USER_POLICY:\r\n                        errorMessages.push(messages.PolicyRequireNonAdminUser);\r\n                        break;\r\n                    case AzurePolicyViolation.TEMPLATE_LABS_POLICY:\r\n                        errorMessages.push(messages.PolicyTemplateLabsNotAllowed);\r\n                        break;\r\n                    case AzurePolicyViolation.ALLOWED_VIRTUAL_MACHINES_POLICY:\r\n                        errorMessages.push(messages.PolicyAllowedVirtualMachineSKUs);\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            // unknown policy violation occurred\r\n            if (errorMessages.length != errorCount) {\r\n                errorMessages.push(messages.UnknownPolicyViolationError);\r\n            }\r\n    }\r\n    return errorMessages;\r\n};\r\nexport default MlClientError;\r\n","import Settings from '../../settings/settings';\r\nimport { ApplicationInsights, PostChannel, } from '@microsoft/1ds-analytics-web-js';\r\nimport { PropertiesPlugin } from '@microsoft/1ds-properties-js';\r\nimport { QosPlugin } from '@microsoft/1ds-qos-js';\r\nimport { SeverityLevel } from '@microsoft/applicationinsights-web';\r\nexport class OneDSChannel {\r\n    constructor() {\r\n        this._isInitialized = false;\r\n        this._analytics = new ApplicationInsights();\r\n        this._propertiesPlugin = new PropertiesPlugin();\r\n        this._collectorChannelPlugin = new PostChannel();\r\n        this._qosPlugin = new QosPlugin();\r\n    }\r\n    initialize(telemetryInitializer) {\r\n        if (this._isInitialized) {\r\n            return;\r\n        }\r\n        const webAnalyticsConfig = {\r\n            autoCapture: {\r\n                scroll: false,\r\n                pageView: false,\r\n                onLoad: false,\r\n                onUnload: false,\r\n                click: false,\r\n                resize: false,\r\n                jsError: true,\r\n            },\r\n            shareAuthStatus: true,\r\n            autoPopulateParentIdAndParentName: true,\r\n        };\r\n        const propertiesPluginConfig = {\r\n            populateBrowserInfo: true,\r\n            populateOperatingSystemInfo: true,\r\n            enableApplicationInsightsTrace: true,\r\n            dropIdentifiers: true,\r\n        };\r\n        const qosPluginConfig = {\r\n            enableCorsCorrelation: true,\r\n            disableAjaxTracking: false,\r\n            disableFetchTracking: false,\r\n            enableRequestHeaderTracking: true,\r\n            enableResponseHeaderTracking: true,\r\n        };\r\n        const config = {\r\n            instrumentationKey: Settings.OneDS.InstrumentationKey,\r\n            endpointUrl: Settings.OneDS.CollectorEndpoint,\r\n            extensions: [this._qosPlugin, this._propertiesPlugin],\r\n            channels: [[this._collectorChannelPlugin]],\r\n            extensionConfig: { qosPluginIdentifier: qosPluginConfig },\r\n            webAnalyticsConfiguration: webAnalyticsConfig,\r\n            propertyConfiguration: propertiesPluginConfig,\r\n            disableCookiesUsage: true,\r\n            enableDebugExceptions: false,\r\n        };\r\n        //Initialize SDK\r\n        this._analytics.initialize(config, []);\r\n        this._analytics.addTelemetryInitializer(telemetryInitializer);\r\n        this._isInitialized = true;\r\n    }\r\n    trackPageView(name, uri, properties) {\r\n        this._analytics.trackPageView({ name, uri }, properties);\r\n    }\r\n    trackEvent(name, properties) {\r\n        this._analytics.trackEvent({ name }, properties);\r\n    }\r\n    trackDependencyData(id, responseCode, name, duration, success, correlationContext, type, data, properties) {\r\n        this._qosPlugin.trackDependencyData({ id, responseCode, name, duration, success, correlationContext, type, data }, properties);\r\n    }\r\n    trackException(id, exception, severityLevel, properties) {\r\n        this._analytics.trackException({ id, exception, severityLevel }, properties);\r\n    }\r\n    trackTrace(message, properties, severityLevel) {\r\n        const traceProperties = {\r\n            message: message,\r\n            severityLevel: severityLevel ? severityLevel.toString() : SeverityLevel.Verbose.toString(),\r\n        };\r\n        if (properties) {\r\n            properties['message'] = message;\r\n            properties['severityLevel'] = severityLevel ? severityLevel.toString() : SeverityLevel.Verbose.toString();\r\n        }\r\n        this._analytics.trackEvent({ name: 'TraceTelemetry' }, properties ? properties : traceProperties);\r\n    }\r\n    trackMetric(name, average, sampleCount, min, max) {\r\n        this._analytics.trackEvent({ name: 'MetricTelemetry' }, { metricName: name, average, sampleCount, min, max });\r\n    }\r\n    setAuthenticatedUserContext(authenticatedUserId, accountId, _storeInCookie) {\r\n        this._propertiesPlugin.setProperty('authenticatedUserId', authenticatedUserId);\r\n        if (accountId) {\r\n            this._propertiesPlugin.setProperty('accountId', accountId);\r\n        }\r\n    }\r\n    clearAuthenticatedUserContext() {\r\n        this._propertiesPlugin.setProperty('authenticatedUserId', '');\r\n    }\r\n    flush() {\r\n        this._collectorChannelPlugin.flush();\r\n    }\r\n}\r\n","import { DistributedTracingModes } from '@microsoft/applicationinsights-common';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport Settings from '../../settings/settings';\r\nexport class ApplicationInisightsChannel {\r\n    constructor() {\r\n        this._isInitialized = false;\r\n    }\r\n    initialize(telemetryInitializer) {\r\n        if (this._isInitialized) {\r\n            return;\r\n        }\r\n        const config = {\r\n            instrumentationKey: Settings.ApplicationInsights.InstrumentationKey,\r\n            emitLineDelimitedJson: true,\r\n            enableDebug: false,\r\n            isBrowserLinkTrackingEnabled: true,\r\n            disableExceptionTracking: false,\r\n            disableAjaxTracking: false,\r\n            disableFetchTracking: false,\r\n            isCookieUseDisabled: true,\r\n            enableSessionStorageBuffer: true,\r\n            isRetryDisabled: false,\r\n            isStorageUseDisabled: false,\r\n            isBeaconApiDisabled: true,\r\n            enableCorsCorrelation: true,\r\n            enableAutoRouteTracking: false,\r\n            enableRequestHeaderTracking: true,\r\n            enableResponseHeaderTracking: true,\r\n            distributedTracingMode: DistributedTracingModes.W3C,\r\n        };\r\n        this._appInsights = new ApplicationInsights({ config });\r\n        this._appInsights.loadAppInsights();\r\n        this._appInsights.addTelemetryInitializer(telemetryInitializer);\r\n        // Force appInsights to generate a new trace ID on piece of telemetry. We will look into correlating\r\n        // telemetry later, but right now we don't even use the W3CTraceContext for the client. So this is to\r\n        // benefit backend telemetry.\r\n        this._appInsights.context.telemetryTrace.traceID = '';\r\n        this._isInitialized = true;\r\n    }\r\n    trackPageView(name, uri, properties, measurements) {\r\n        this._appInsights.trackPageView({ name, uri, properties, measurements });\r\n    }\r\n    trackEvent(name, properties, measurements) {\r\n        this._appInsights.trackEvent({ name, properties, measurements });\r\n    }\r\n    trackDependencyData(id, responseCode, name, duration, success, correlationContext, type, data, properties, measurements) {\r\n        this._appInsights.trackDependencyData({\r\n            id,\r\n            responseCode,\r\n            name,\r\n            duration,\r\n            success,\r\n            correlationContext,\r\n            type,\r\n            data,\r\n            properties,\r\n            measurements,\r\n        });\r\n    }\r\n    trackException(id, exception, severityLevel, properties, measurements) {\r\n        this._appInsights.trackException({ id, exception, severityLevel, properties, measurements });\r\n    }\r\n    trackTrace(message, properties, severityLevel) {\r\n        this._appInsights.trackTrace({ message, properties, severityLevel });\r\n    }\r\n    trackMetric(name, average, sampleCount, min, max) {\r\n        this._appInsights.trackMetric({ name, average, sampleCount, min, max });\r\n    }\r\n    setAuthenticatedUserContext(authenticatedUserId, accountId, storeInCookie) {\r\n        this._appInsights.setAuthenticatedUserContext(authenticatedUserId, accountId, storeInCookie);\r\n    }\r\n    clearAuthenticatedUserContext() {\r\n        this._appInsights.clearAuthenticatedUserContext();\r\n    }\r\n    flush() {\r\n        this._appInsights.flush();\r\n    }\r\n}\r\n","import { OneDSChannel } from './1ds-channel';\r\nimport { ApplicationInisightsChannel } from './ai-channel';\r\nexport const TelemetryType = {\r\n    OneDS: 'ONEDS',\r\n    ApplicationInsights: 'AI',\r\n    All: 'ALL',\r\n};\r\nexport function getTelemetryChannelsFromType(telemetryType) {\r\n    switch (telemetryType) {\r\n        case TelemetryType.ApplicationInsights:\r\n            return [new ApplicationInisightsChannel()];\r\n        case TelemetryType.OneDS:\r\n            return [new OneDSChannel()];\r\n        default:\r\n            return [new ApplicationInisightsChannel(), new OneDSChannel()];\r\n    }\r\n}\r\n","import Settings from '../../settings/settings';\r\nimport { environmentType, EnvironmentType } from '../environment';\r\nimport { getResourceProperties, getLocale, getMarket, getLanguage, getRequestedLocale, getTimezone, getFeatures, getHost, getReferrer, } from '../../redux/selectors/common-selectors';\r\nimport MlClientError from '../../data/ml-client-error';\r\nimport { getRouteName } from '../../redux/selectors/route-selector';\r\nimport { getGroupId } from '../../redux/selectors/group-selectors';\r\nimport { getTelemetryChannelsFromType } from './telemetry-type';\r\nconst consolePrefix = 'TelemetryChannel';\r\nconst version = process.env.REACT_APP_VERSION;\r\nlet logToConsole = environmentType !== EnvironmentType.PROD;\r\nexport function enableConsoleLog() {\r\n    if (environmentType === EnvironmentType.PROD) {\r\n        logToConsole = true;\r\n    }\r\n}\r\nexport function disableConsoleLog() {\r\n    if (environmentType === EnvironmentType.PROD) {\r\n        logToConsole = false;\r\n    }\r\n}\r\nlet store = undefined;\r\nexport function setStore(newStore) {\r\n    store = newStore;\r\n}\r\nconst initializer = (item) => {\r\n    try {\r\n        if (!item.data) {\r\n            item.data = {};\r\n        }\r\n        // process our telemetry to extract the client request ID and remove any auth tokens\r\n        if (item.baseData && item.baseData.properties && item.baseData.properties.requestHeaders) {\r\n            delete item.baseData.properties.requestHeaders['authorization'];\r\n            delete item.baseData.properties.requestHeaders['Authorization'];\r\n            if (item.baseData.properties.requestHeaders['x-ms-client-request-id']) {\r\n                item.data['ClientRequestId'] =\r\n                    item.baseData.properties.requestHeaders['x-ms-client-request-id'];\r\n            }\r\n        }\r\n        // if URI in the data, scrub it\r\n        if (item.data?.uri) {\r\n            item.data['uri'] = scrubUri(item.data.uri);\r\n        }\r\n        // get some common info from our store\r\n        if (store) {\r\n            const state = store.getState();\r\n            const routeName = getRouteName(state);\r\n            const { subscriptionId, resourceGroup, labAccount, lab, template } = getResourceProperties(state);\r\n            const requestedLocale = getRequestedLocale(state);\r\n            const locale = getLocale(state);\r\n            const market = getMarket(state);\r\n            const language = getLanguage(state);\r\n            const timezone = getTimezone(state);\r\n            const features = getFeatures(state);\r\n            const host = getHost(state);\r\n            const referrer = getReferrer(state);\r\n            const groupId = getGroupId(state);\r\n            item.data['subscriptionId'] = subscriptionId;\r\n            item.data['resourceGroup'] = resourceGroup;\r\n            item.data['labAccount'] = labAccount;\r\n            item.data['lab'] = lab;\r\n            item.data['template'] = template;\r\n            item.data['requestedLocale'] = requestedLocale;\r\n            item.data['locale'] = locale;\r\n            item.data['market'] = market;\r\n            item.data['language'] = language;\r\n            item.data['timezone'] = timezone;\r\n            item.data['features'] = features && features.length > 0 ? JSON.stringify(features) : '';\r\n            item.data['routeName'] = routeName;\r\n            item.data['host'] = host;\r\n            item.data['referrer'] = referrer;\r\n            item.data['groupId'] = groupId;\r\n        }\r\n        item.data['version'] = version;\r\n        item.data['environmentType'] = environmentType;\r\n        item.data['clientType'] = 'React';\r\n        item.data['Service'] = 'mlclient'; // back compat with old client\r\n    }\r\n    catch (err) {\r\n        // Not logging to AI here since we don't want this to cause a logging loop.\r\n        // Only adding the try - catch to prevent the client from crashing due\r\n        // to telemetry bugs.\r\n        if (logToConsole) {\r\n            console.error(`TelemetryChannel: initializer failed: ${err ? JSON.stringify(err) : ''}`);\r\n        }\r\n    }\r\n};\r\nconst telemetryChannels = getTelemetryChannelsFromType(Settings.TelemetryChannelsEnabled);\r\nfunction init() {\r\n    try {\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.initialize(initializer);\r\n        });\r\n    }\r\n    catch (err) {\r\n        console.error(`TelemetryChannel: One or more channels failed to initialize: ${err ? JSON.stringify(err) : ''}`);\r\n    }\r\n}\r\nfunction handleAppInsightsException(func) {\r\n    try {\r\n        func();\r\n    }\r\n    catch (e) {\r\n        console.error(`TelemetryChannel error: ${e || {}}`);\r\n    }\r\n}\r\nfunction addMetadata(properties) {\r\n    // TODO: Setup whatever metadata properties we want to make available on all events\r\n    if (properties && properties['payload']) {\r\n        const payload = JSON.parse(properties['payload'], truncateProp);\r\n        properties = { ...properties, payload };\r\n    }\r\n    return properties || {};\r\n}\r\nconst truncate = (props) => {\r\n    // Truncate properties longer than 1024 characters\r\n    const truncatedProps = [];\r\n    Object.keys(props).forEach((key) => {\r\n        const prop = props[key];\r\n        if (prop && prop.length > 1024) {\r\n            props[key] = prop.substring(0, 1024);\r\n            truncatedProps.push(key);\r\n        }\r\n    });\r\n    props['truncatedProps'] = truncatedProps.toString();\r\n    return props;\r\n};\r\nconst truncateProp = (_, value) => {\r\n    if (Array.isArray(value) && JSON.stringify(value).length > 1024) {\r\n        // this shortens the length but still gets a nice array view in AI\r\n        while (JSON.stringify(value).length > 1024) {\r\n            value.pop();\r\n        }\r\n        return value;\r\n    }\r\n    if (typeof value === 'string' && value.length > 1024) {\r\n        return value.substring(0, 1024);\r\n    }\r\n    return value;\r\n};\r\nexport function trackPageView(name, uri, properties, measurements) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.trackPageView: name = \"${name || ''}\", uri = \"${uri || ''}\"`);\r\n        }\r\n        properties = truncate(addMetadata(properties));\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.trackPageView(name, uri, properties, measurements);\r\n        });\r\n    });\r\n}\r\nexport function trackEvent(name, properties, measurements) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            if (properties) {\r\n                console.groupCollapsed(`${consolePrefix}.trackEvent: name = \"${name} - ${properties['type']}\"`);\r\n                console.info(`properties =\"${JSON.stringify(properties)}\"`);\r\n                console.groupEnd();\r\n            }\r\n            else {\r\n                console.info(`${consolePrefix}.trackEvent: name = \"${name}`);\r\n            }\r\n        }\r\n        // todo: look into moving the logic in addMetadata to truncate\r\n        properties = addMetadata(properties);\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.trackEvent(name, properties, measurements);\r\n        });\r\n    });\r\n}\r\nexport function scrubUri(url) {\r\n    // Split the URL into the base and the hash (fragment)\r\n    // eslint-disable-next-line prefer-const\r\n    let [baseUrl, hash] = url.split('#');\r\n    if (hash) {\r\n        const params = new URLSearchParams(hash);\r\n        params.delete('id_token');\r\n        params.delete('access_token');\r\n        hash = params.toString();\r\n        if (hash) {\r\n            return `${baseUrl}#${hash}`;\r\n        }\r\n        else {\r\n            return baseUrl;\r\n        }\r\n    }\r\n    return url;\r\n}\r\nexport function scrubData(data) {\r\n    try {\r\n        const scrubbedData = JSON.parse(data);\r\n        if (scrubbedData && scrubbedData.uri) {\r\n            scrubbedData.uri = scrubUri(scrubbedData.uri);\r\n        }\r\n        return JSON.stringify(scrubbedData);\r\n    }\r\n    catch (e) {\r\n        return data;\r\n    }\r\n}\r\nexport function trackDependency(id, responseCode, name, duration, success, correlationContext, type, data, properties, measurements) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.trackDependency: id = \"${id}\", responseCode = \"${responseCode}\", name = \"${name}\", duration = \"${duration}\", success = \"${success}\", correlationContext = \"${correlationContext}\", type = \"${type}\", data = \"${data}\"`);\r\n        }\r\n        properties = truncate(addMetadata(properties));\r\n        if (properties && 'uri' in properties) {\r\n            properties['uri'] = scrubUri(properties['uri']);\r\n        }\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.trackDependencyData(id, responseCode, name, duration, success, correlationContext, type, scrubData(data), properties, measurements);\r\n        });\r\n    });\r\n}\r\nexport function trackException(id, exception, severityLevel, properties, measurements) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.error(`${consolePrefix}.trackException: id = \"${id}\", exception = \"${exception || {}}\"`);\r\n        }\r\n        properties = properties || {};\r\n        if (exception && exception instanceof MlClientError) {\r\n            const mlError = exception;\r\n            properties['isMlError'] = 'true';\r\n            properties['errorCode'] = mlError.code || '';\r\n            properties['id'] = mlError.id;\r\n            properties['failureOperation'] = mlError.failureOperation;\r\n        }\r\n        else {\r\n            properties['isMlError'] = 'false';\r\n            properties['errorCode'] = '';\r\n            properties['id'] = '';\r\n            properties['failureOperation'] = '';\r\n        }\r\n        properties = truncate(addMetadata(properties));\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.trackException(id, exception, severityLevel, properties, measurements);\r\n        });\r\n    });\r\n}\r\nexport function trackMetric(name, average, sampleCount, min, max) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.trackMetric: name = \"${name}\", average = \"${average}\", sampleCount = \"${sampleCount || ''}\", min = \"${min || ''}\", max = \"${max || ''}\"`);\r\n        }\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.trackMetric(name, average, sampleCount, min, max);\r\n        });\r\n    });\r\n}\r\nexport function trackTrace(message, properties, severityLevel) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.trackTrace: message = \"${message}\"`);\r\n        }\r\n        properties = truncate(addMetadata(properties));\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.trackTrace(message, properties, severityLevel);\r\n        });\r\n    });\r\n}\r\nexport function flush() {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.flush`);\r\n        }\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.flush();\r\n        });\r\n    });\r\n}\r\nexport function setAuthenticatedUserContext(authenticatedUserId, accountId, storeInCookie) {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.setAuthenticatedUserContext: authenticatedUserId = \"${authenticatedUserId}\", accountId = \"${accountId || ''}\", storeInCookie = \"${storeInCookie || false}\"`);\r\n        }\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.setAuthenticatedUserContext(authenticatedUserId, accountId, storeInCookie);\r\n        });\r\n    });\r\n}\r\nexport function clearAuthenticatedUserContext() {\r\n    handleAppInsightsException(() => {\r\n        if (logToConsole) {\r\n            console.info(`${consolePrefix}.clearAuthenticatedUserContext`);\r\n        }\r\n        telemetryChannels.forEach((channel) => {\r\n            channel.clearAuthenticatedUserContext();\r\n        });\r\n    });\r\n}\r\nconst TelemetryChannel = {\r\n    trackPageView,\r\n    trackEvent,\r\n    trackDependency,\r\n    trackException,\r\n    trackMetric,\r\n    trackTrace,\r\n    flush,\r\n    setAuthenticatedUserContext,\r\n    clearAuthenticatedUserContext,\r\n};\r\ntry {\r\n    init();\r\n}\r\ncatch (error) {\r\n    console.error(`Telemetry failed to initialize and will not be available. Error: ${JSON.stringify(error || {})}`);\r\n}\r\nexport default TelemetryChannel;\r\n","import 'js-detect-incognito-private-browsing';\r\nimport { trackTrace } from './telemetry/telemetry-channel';\r\nlet isPrivate = undefined;\r\nconst detector = new window.BrowsingModeDetector();\r\nexport async function detectInPrivate() {\r\n    if (isPrivate === undefined) {\r\n        const promise = new Promise((resolve, _reject) => {\r\n            detector.do((browsingInIncognitoMode) => {\r\n                trackTrace(`detectInPrivate: ${browsingInIncognitoMode}`);\r\n                resolve(browsingInIncognitoMode);\r\n            });\r\n        });\r\n        isPrivate = await promise;\r\n    }\r\n    return isPrivate;\r\n}\r\n","import { detect } from 'detect-browser';\r\nimport { trackTrace } from './telemetry/telemetry-channel';\r\nconst browser = detect();\r\ntrackTrace(`BrowserDetect: browser = ${JSON.stringify(browser)}`);\r\nexport const browserName = browser && browser.name ? browser.name : 'unknown';\r\n","export const ErrorCode = {\r\n    AuthenticationFailed: 'AuthenticationFailed',\r\n    AuthorizationFailed: 'AuthorizationFailed',\r\n    LabAccountAuthorizationFailed: 'LabAccountAuthorizationFailed',\r\n    LabAuthorizationFailed: 'LabAuthorizationFailed',\r\n    EnvironmentSettingsHasNoResources: 'EnvironmentSettingsHasNoResources',\r\n    GenericError: 'GenericError',\r\n    InvalidPropertyLength: 'InvalidPropertyLength',\r\n    InvalidUploadTargetToOverride: 'InvalidUploadTargetToOverride',\r\n    LabFailed: 'LabFailed',\r\n    MustBeGreaterThanProperty: 'MustBeGreaterThanProperty',\r\n    NoSharedImageGalleriesAttachedToTheLabAccount: 'NoSharedImageGalleriesAttachedToTheLabAccount',\r\n    NotFound: 'NotFound',\r\n    OperationAlradyInProgress: 'OperationAlradyInProgress',\r\n    ResourceDoesNotExist: 'ResourceDoesNotExist',\r\n    ResourceIdNotFound: 'ResourceIdNotFound',\r\n    ResourceInDeletingState: 'ResourceInDeletingState',\r\n    ResourceIsNotInValidState: 'ResourceIsNotInValidState',\r\n    ResourceNotFound: 'ResourceNotFound',\r\n    ResourceGroupNotFound: 'ResourceGroupNotFound',\r\n    ResourceNotInSucceededState: 'ResourceNotInSucceededState',\r\n    ResourceNotReady: 'ResourceNotReady',\r\n    ResourceInGroupDoesNotExist: 'ResourceInGroupDoesNotExist',\r\n    SessionExpired: 'SessionExpired',\r\n    IdleSessionExpired: 'IdleSessionExpired',\r\n    SubscriptionNotEnabled: 'SubscriptionNotEnabled',\r\n    TimeoutException: 'TimeoutException',\r\n    UnexpectedResourceId: 'UnexpectedResourceId',\r\n    LabCreationExceedsGpuCoresLimit: 'LabCreationExceedsGpuCoresLimit',\r\n    LabCreationExceedsStandardCoresLimit: 'LabCreationExceedsStandardCoresLimit',\r\n    PublishExceedsGpuCoresLimit: 'PublishExceedsGpuCoresLimit',\r\n    PublishExceedsStandardCoresLimit: 'PublishExceedsStandardCoresLimit',\r\n    LabCapacityUpdateExceedsGpuCoresLimit: 'LabCapacityUpdateExceedsGpuCoresLimit',\r\n    LabCapacityUpdateExceedsStandardCoresLimit: 'LabCapacityUpdateExceedsStandardCoresLimit',\r\n    PasswordNotValid: 'PasswordNotValid',\r\n    PeerVnetAddressRangeOutOfAddresses: 'PeerVnetAddressRangeOutOfAddresses',\r\n    VMAgentStatusCommunicationError: 'VMAgentStatusCommunicationError',\r\n    InvalidGrant: 'InvalidGrant',\r\n    InvalidGrantPopupBlocked: 'InvalidGrantPopupBlocked',\r\n    PopupWindowBlocked: 'PopupWindowBlocked',\r\n    LtiTokenExpired: 'LtiTokenExpired',\r\n    CookiesAndDataBlocked: 'CookiesAndDataBlocked',\r\n    LtiRequestStorageAccessNeeded: 'LtiRequestStorageAccessNeeded',\r\n    // V2\r\n    AllowedRegionsLimitExceeded: 'AllowedRegionsLimitExceeded',\r\n    TotalRegionalCoreLimit: 'TotalRegionalCoreLimit',\r\n    Arm64Incompatibility: 'Arm64Incompatibility',\r\n    InvalidDiskSize: 'InvalidDiskSize',\r\n    InvalidImagePlanInfo: 'InvalidImagePlanInfo',\r\n    InvalidAdminUsername: 'InvalidAdminUsername',\r\n    LabBeingDeleted: 'LabBeingDeleted',\r\n    ImageUnavailable: 'ImageUnavailable',\r\n    WebAccessVnetNotSupported: 'WebAccessVnetNotSupported',\r\n    InvalidSubnet: 'InvalidSubnet',\r\n    SaveImageRegionMismatch: 'SaveImageRegionMismatch',\r\n    SaveImageAlreadyInProgress: 'SaveImageAlreadyInProgress',\r\n    DiskSizeLesserThanExisting: 'DiskSizeLesserThanExisting',\r\n    SubnetIsFull: 'SubnetIsFull',\r\n};\r\nexport default ErrorCode;\r\n","import { trackTrace, trackException } from './telemetry/telemetry-channel';\r\nimport { detectInPrivate } from './detect-incognito';\r\nimport { MlClientError, FailureOperation } from '../data/ml-client-error';\r\nimport { browserName } from './browser';\r\nimport ErrorCode from '../common/error-codes';\r\nexport const StorageType = {\r\n    localStorage: 'localStorage',\r\n    sessionStorage: 'sessionStorage',\r\n};\r\nconst DomExceptionSecurityError = 'SecurityError';\r\nconst DomExceptionLegacySecurityError = 'SECURITY_ERR';\r\nlet isInitialized = false;\r\nlet storageType = StorageType.sessionStorage;\r\nasync function deriveStorageType() {\r\n    try {\r\n        const isPrivate = await detectInPrivate();\r\n        // use this switch to tweak specific storage settings by browser as\r\n        // well as whether the user is running in private or not\r\n        switch (browserName) {\r\n            case 'edge':\r\n                storageType = StorageType.localStorage;\r\n                break;\r\n            default:\r\n                storageType = isPrivate ? StorageType.sessionStorage : StorageType.localStorage;\r\n                break;\r\n        }\r\n        trackTrace(`Storage: isPrivate = ${isPrivate}, browserName = ${browserName}, storageType = ${storageType}`);\r\n    }\r\n    catch (err) {\r\n        trackTrace(`Storage: failed to derive a storage type. Falling back to ${storageType}.`);\r\n        trackException(err);\r\n    }\r\n}\r\nexport async function init() {\r\n    if (!isInitialized) {\r\n        await deriveStorageType();\r\n    }\r\n    isInitialized = true;\r\n}\r\nexport function getStorageType() {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('Storage was used before it was initialized.', '', FailureOperation.StorageInit);\r\n    }\r\n    return storageType;\r\n}\r\nfunction isDomExceptionSecurityError(errorName) {\r\n    return errorName === DomExceptionSecurityError || errorName === DomExceptionLegacySecurityError;\r\n}\r\nexport function setItem(key, value, shouldThrowError) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('Storage was used before it was initialized.', '', FailureOperation.StorageInit);\r\n    }\r\n    try {\r\n        storageType === StorageType.sessionStorage\r\n            ? sessionStorage.setItem(key, value)\r\n            : localStorage.setItem(key, value);\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n        trackTrace(`Storage: setItem - Failed to persist data for key = ${key}, value = ${value}`);\r\n        if (shouldThrowError && err instanceof DOMException) {\r\n            if (isDomExceptionSecurityError(err.name)) {\r\n                throw new MlClientError(err.message, '', FailureOperation.AccessWebStorage, ErrorCode.CookiesAndDataBlocked);\r\n            }\r\n            else {\r\n                throw new MlClientError(err.message, '', FailureOperation.AccessWebStorage, ErrorCode.GenericError);\r\n            }\r\n        }\r\n    }\r\n}\r\nexport function getItem(key) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('Storage was used before it was initialized.', '', FailureOperation.StorageInit);\r\n    }\r\n    try {\r\n        return storageType === StorageType.sessionStorage ? sessionStorage.getItem(key) : localStorage.getItem(key);\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n        trackTrace(`Storage: getItem - Failed to get data for key = ${key}`);\r\n    }\r\n    return null;\r\n}\r\nexport function removeItem(key) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('Storage was used before it was initialized.', '', FailureOperation.StorageInit);\r\n    }\r\n    try {\r\n        storageType === StorageType.sessionStorage ? sessionStorage.removeItem(key) : localStorage.removeItem(key);\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n        trackTrace(`Storage: removeItem - Failed to remove data for key = ${key}`);\r\n    }\r\n}\r\nexport function clear() {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('Storage was used before it was initialized.', '', FailureOperation.StorageInit);\r\n    }\r\n    try {\r\n        sessionStorage.clear();\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n        trackTrace('Storage: clear - Failed to clear sessionStorage items');\r\n    }\r\n    try {\r\n        localStorage.clear();\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n        trackTrace('Storage: clear - Failed to clear localStorage items');\r\n    }\r\n}\r\nexport const Storage = {\r\n    init,\r\n    getStorageType,\r\n    setItem,\r\n    getItem,\r\n    removeItem,\r\n    clear,\r\n};\r\nexport default Storage;\r\n","import enUS from '../l10n/resources.json';\r\nimport csCZ from '@generated/l10n/resources.cs.json';\r\nimport deDE from '@generated/l10n/resources.de.json';\r\nimport esES from '@generated/l10n/resources.es.json';\r\nimport frFR from '@generated/l10n/resources.fr.json';\r\nimport huHU from '@generated/l10n/resources.hu.json';\r\nimport idID from '@generated/l10n/resources.id.json';\r\nimport itIT from '@generated/l10n/resources.it.json';\r\nimport jaJP from '@generated/l10n/resources.ja.json';\r\nimport koKR from '@generated/l10n/resources.ko.json';\r\nimport nlNL from '@generated/l10n/resources.nl.json';\r\nimport plPL from '@generated/l10n/resources.pl.json';\r\nimport ptBR from '@generated/l10n/resources.pt-BR.json';\r\nimport ptPT from '@generated/l10n/resources.pt-PT.json';\r\nimport ruRU from '@generated/l10n/resources.ru.json';\r\nimport svSE from '@generated/l10n/resources.sv.json';\r\nimport trTR from '@generated/l10n/resources.tr.json';\r\nimport zhCN from '@generated/l10n/resources.zh-Hans.json';\r\nimport zhTW from '@generated/l10n/resources.zh-Hant.json';\r\nimport '@formatjs/intl-relativetimeformat/polyfill';\r\nimport '@formatjs/intl-pluralrules/polyfill';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/cs';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/cs';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/de';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/de';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/en';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/en';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/es';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/es';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/fr';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/fr';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/hu';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/hu';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/id';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/id';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/it';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/it';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/ja';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/ja';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/ko';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/ko';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/nl';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/nl';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/pl';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/pl';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/pt';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/pt';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/ru';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/ru';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/sv';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/sv';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/tr';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/tr';\r\nimport '@formatjs/intl-relativetimeformat/dist/locale-data/zh';\r\nimport '@formatjs/intl-pluralrules/dist/locale-data/zh';\r\nexport const defaultMarket = 'US';\r\nexport const defaultLanguage = 'en';\r\nexport const defaultLocale = `${defaultLanguage}-${defaultMarket}`;\r\nexport const defaultMessages = enUS;\r\nconst localizedMessages = {};\r\nlet isInitialized = false;\r\nexport function initLocaleData() {\r\n    if (isInitialized) {\r\n        return localizedMessages;\r\n    }\r\n    localizedMessages['cs'] = csCZ;\r\n    localizedMessages['cs-CZ'] = csCZ;\r\n    localizedMessages['de'] = deDE;\r\n    localizedMessages['de-DE'] = deDE;\r\n    localizedMessages[defaultLanguage] = enUS;\r\n    localizedMessages[defaultLocale] = enUS;\r\n    localizedMessages['es'] = esES;\r\n    localizedMessages['es-ES'] = esES;\r\n    localizedMessages['fr'] = frFR;\r\n    localizedMessages['fr-FR'] = frFR;\r\n    localizedMessages['hu'] = huHU;\r\n    localizedMessages['hu-HU'] = huHU;\r\n    localizedMessages['id'] = idID;\r\n    localizedMessages['id-ID'] = idID;\r\n    localizedMessages['it'] = itIT;\r\n    localizedMessages['it-IT'] = itIT;\r\n    localizedMessages['ja'] = jaJP;\r\n    localizedMessages['ja-JP'] = jaJP;\r\n    localizedMessages['ko'] = koKR;\r\n    localizedMessages['ko-KR'] = koKR;\r\n    localizedMessages['nl'] = nlNL;\r\n    localizedMessages['nl-NL'] = nlNL;\r\n    localizedMessages['pl'] = plPL;\r\n    localizedMessages['pl-PL'] = plPL;\r\n    localizedMessages['pt'] = ptPT;\r\n    localizedMessages['pt-PT'] = ptPT;\r\n    localizedMessages['pt-BR'] = ptBR;\r\n    localizedMessages['ru'] = ruRU;\r\n    localizedMessages['ru-RU'] = ruRU;\r\n    localizedMessages['sv'] = svSE;\r\n    localizedMessages['sv-SE'] = svSE;\r\n    localizedMessages['tr'] = trTR;\r\n    localizedMessages['tr-TR'] = trTR;\r\n    localizedMessages['zh'] = zhCN; // using zh-CN for all Chinese (simplified) locales and the default (no market)\r\n    localizedMessages['zh-CN'] = zhCN;\r\n    localizedMessages['zh-SG'] = zhCN;\r\n    localizedMessages['zh-TW'] = zhTW; // using zh-TW for all Chinese (traditional) locales\r\n    localizedMessages['zh-HK'] = zhTW;\r\n    localizedMessages['zh-MO'] = zhTW;\r\n    // only include pseudo-loc for development\r\n    if (process.env.NODE_ENV === 'development') {\r\n        // Disables annoying errors when developing from react-intl\r\n        const consoleError = console.error.bind(console);\r\n        console.error = (message, ...args) => {\r\n            if (typeof message === 'string' &&\r\n                (message.indexOf('React Intl') > -1 || message.indexOf('require(\"history\")') > -1)) {\r\n                return;\r\n            }\r\n            if (message && message.message && message.message.indexOf('React Intl') > -1) {\r\n                return;\r\n            }\r\n            consoleError(message, ...args);\r\n        };\r\n        // Disables annoying warnings when when developing from react-intl\r\n        const consoleWarn = console.warn.bind(console);\r\n        console.warn = (message, ...args) => {\r\n            if (typeof message === 'string' && message.indexOf('The icon') > -1) {\r\n                return;\r\n            }\r\n            consoleWarn(message, ...args);\r\n        };\r\n        try {\r\n            // remove the default language so we can ignore the JSON file when in\r\n            // development\r\n            localizedMessages[defaultLanguage] = {};\r\n            localizedMessages[defaultLocale] = {};\r\n            const qpsPloc = require('../l10n/resources.qps-ploc.json'); // eslint-disable-line @typescript-eslint/no-var-requires\r\n            localizedMessages['qps'] = qpsPloc;\r\n            localizedMessages['qps-ploc'] = qpsPloc;\r\n        }\r\n        catch (e) {\r\n            // these does not need to go to AI, it is purely for development\r\n            console.warn('The pseudo loc file was not found. Please run \"npm run build\" from /ClientApp to create it.');\r\n        }\r\n    }\r\n    isInitialized = true;\r\n    return localizedMessages;\r\n}\r\nexport function getAcceptLanguage(locale, lang) {\r\n    const language = lang ? lang : getLocaleLanguage(locale);\r\n    const acceptLanguage = `${locale}, ${language};q=0.5`;\r\n    return acceptLanguage;\r\n}\r\nexport function resolveSearchLocale(queryParams) {\r\n    const locale = queryParams.locale || queryParams.lang || navigator.language;\r\n    return locale;\r\n}\r\nexport function getLocaleData(requestedLocale) {\r\n    if (!isInitialized) {\r\n        initLocaleData();\r\n    }\r\n    const market = getLocaleMarket(requestedLocale);\r\n    let language = getLocaleLanguage(requestedLocale);\r\n    const supportedLocales = Object.keys(localizedMessages);\r\n    const isLanguageSupported = supportedLocales.some((lang) => lang === language);\r\n    if (!isLanguageSupported) {\r\n        language = defaultLanguage;\r\n    }\r\n    // NOTE: This logic doesn't support resolving locales like ca-ES-valencia, but\r\n    // we don't support anything like that at this time\r\n    const locale = `${language}-${market}`;\r\n    const messages = localizedMessages[locale] || localizedMessages[language] || defaultMessages;\r\n    return { locale, market, language, messages };\r\n}\r\nfunction getLocaleMarket(locale) {\r\n    if (!locale) {\r\n        return defaultMarket;\r\n    }\r\n    // special case specifically for zh and zh-ZH which are not supported in momentjs\r\n    if (locale === 'zh' || locale.toLowerCase() === 'zh-zh') {\r\n        return 'CN';\r\n    }\r\n    // logic to handle locales such as \"ca-ES-valencia\"\r\n    const tokens = locale.trim().split('-');\r\n    for (let i = tokens.length - 1; i > -1; --i) {\r\n        const token = tokens[i];\r\n        if (token.length === 2) {\r\n            return token.toUpperCase();\r\n        }\r\n    }\r\n    return defaultMarket;\r\n}\r\nfunction getLocaleLanguage(locale) {\r\n    if (!locale) {\r\n        return defaultLanguage;\r\n    }\r\n    // Gets only the first token of the locale. Example: if the parameter is 'en-US' this would return 'en'\r\n    const tokens = locale.trim().split('-');\r\n    if (tokens.length > 0) {\r\n        return tokens[0].toLowerCase();\r\n    }\r\n    return defaultLanguage;\r\n}\r\nconst languages = {\r\n    initLocaleData,\r\n    getLocaleData,\r\n};\r\nexport default languages;\r\n","import { v4 as uuid } from 'uuid';\r\nimport { Storage } from '../../utils/storage';\r\nimport { RestError, URLBuilder } from '@azure/ms-rest-js';\r\nimport { getAcceptLanguage } from '../../language/languages';\r\nimport Settings from '../../settings/settings';\r\nimport { ApiVersions, Urls } from '../../utils/constants';\r\nimport { browserName } from '../../utils/browser';\r\nconst stateStorageKey = 'lti_oidc_state';\r\nconst nonceStorageKey = 'lti_oidc_nonce';\r\nconst ltiTokenStorageKey = 'lti_token';\r\nexport function initialize() {\r\n    setState();\r\n    setNonce();\r\n}\r\nexport function oidcAuth(oidcUrl) {\r\n    const ltiAuthUrl = new URLBuilder();\r\n    ltiAuthUrl.setHost(oidcUrl);\r\n    ltiAuthUrl.setQueryParameter('state', Storage.getItem(stateStorageKey));\r\n    ltiAuthUrl.setQueryParameter('nonce', Storage.getItem(nonceStorageKey));\r\n    window.location.assign(ltiAuthUrl.toString());\r\n}\r\nfunction setState() {\r\n    Storage.setItem(stateStorageKey, uuid(), true);\r\n}\r\nfunction setNonce() {\r\n    Storage.setItem(nonceStorageKey, btoa(uuid()), true);\r\n}\r\nexport function getState() {\r\n    return Storage.getItem(stateStorageKey);\r\n}\r\nexport function getNonce() {\r\n    return Storage.getItem(nonceStorageKey);\r\n}\r\nexport function setLtiToken(token) {\r\n    Storage.setItem(ltiTokenStorageKey, token);\r\n}\r\nexport function getLtiToken() {\r\n    return Storage.getItem(ltiTokenStorageKey);\r\n}\r\nexport function setLtiItems(state, nonce, token) {\r\n    Storage.setItem(stateStorageKey, state);\r\n    Storage.setItem(nonceStorageKey, nonce);\r\n    Storage.setItem(ltiTokenStorageKey, token);\r\n}\r\nexport async function hasStorageAccess() {\r\n    return await document.hasStorageAccess();\r\n}\r\nexport async function requestStorageAccess() {\r\n    return await document.requestStorageAccess();\r\n}\r\nexport async function isEdgeBrowser() {\r\n    debugger;\r\n    if (browserName === 'edge-chromium') {\r\n        return true;\r\n    }\r\n    else {\r\n        return false;\r\n    }\r\n}\r\nexport async function linkLms(labPlanId, accessToken, locale, language, ltiToken, region) {\r\n    const headers = new Headers();\r\n    headers.append('Authorization', 'Bearer ' + accessToken);\r\n    headers.append('Accept-Language', getAcceptLanguage(locale, language));\r\n    headers.append('x-ml-lti-id-token', ltiToken);\r\n    headers.set('Content-Type', 'application/json;charset=utf-8');\r\n    const baseUri = Settings.LabsApiUrl;\r\n    const relativeUrl = `/${region}${Urls.LinkLabPlan}?api-version=${ApiVersions.labsCurrentPreview}`;\r\n    const url = `${baseUri}${relativeUrl}`;\r\n    const response = await fetch(url, {\r\n        headers: headers,\r\n        method: 'POST',\r\n        body: JSON.stringify({\r\n            labPlanId,\r\n        }),\r\n    });\r\n    if (response.status >= 400) {\r\n        const errorResponse = (await response.json());\r\n        const { Error } = errorResponse;\r\n        throw new RestError(Error?.Message || 'A request error occurred.', Error?.Code || response.statusText);\r\n    }\r\n}\r\nconst LtiProvider = {\r\n    initialize,\r\n    oidcAuth,\r\n    getState,\r\n    getNonce,\r\n    setLtiToken,\r\n    getLtiToken,\r\n    setLtiItems,\r\n    hasStorageAccess,\r\n    requestStorageAccess,\r\n    linkLms,\r\n    isEdgeBrowser,\r\n};\r\nexport default LtiProvider;\r\n","import { UserAgentApplication } from 'msal';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { IdentityErrorCode, preAuthorizedScopes } from '../models/identity';\r\nimport Settings from '../../settings/settings';\r\nimport Routes from '../../utils/routes';\r\nimport { trackTrace, trackDependency } from '../../utils/telemetry/telemetry-channel';\r\nimport { Storage } from '../../utils/storage';\r\nimport { MlClientError, FailureOperation } from '../ml-client-error';\r\nimport { browserName } from '../../utils/browser';\r\nimport { getLtiToken, getNonce as getLtiNonce, getState as getLtiState, setLtiItems } from './lti-provider';\r\nconst userCanceledErrorMessage = \"Cannot read property 'indexOf' of undefined\";\r\nconst authorityBase = Settings.AadAuthority;\r\nconst ambiguousTenantId = 'organizations';\r\nconst crossTenantAuthority = `${authorityBase}/${ambiguousTenantId}/`;\r\nconst returnUrlStorageKey = 'return_url';\r\nconst loginRequiredAttemptKey = 'login_required_attempt';\r\nlet isInitialized = false;\r\nlet storageType;\r\nlet context;\r\nlet authRedirectError;\r\nexport function init() {\r\n    if (!isInitialized) {\r\n        storageType = Storage.getStorageType();\r\n        trackTrace(`MsalProvider: storageType = ${storageType}`);\r\n        const configuration = {\r\n            auth: {\r\n                clientId: Settings.AadAppClientId,\r\n                authority: crossTenantAuthority,\r\n                validateAuthority: true,\r\n                navigateToLoginRequestUrl: false,\r\n                redirectUri: `https://${window.location.host}${Routes.SignInReturn}`,\r\n                postLogoutRedirectUri: `https://${window.location.host}${Routes.LoggedOut}`,\r\n            },\r\n            cache: {\r\n                cacheLocation: storageType,\r\n                storeAuthStateInCookie: browserName === 'edge' || browserName === 'ie' ? true : false,\r\n            },\r\n        };\r\n        context = new UserAgentApplication(configuration);\r\n        context.handleRedirectCallback((authError, _response) => {\r\n            const wasLoginRequiredAttempt = hasLoginRequiredAttemptState();\r\n            if (!!authError) {\r\n                authRedirectError = authError;\r\n                trackTrace(`MsalProvider: handleRedirectCallback - authRedirectError = ${JSON.stringify(authRedirectError)}, wasLoginRequiredAttempt = ${wasLoginRequiredAttempt}`);\r\n            }\r\n            else {\r\n                // clearing login required attempt state because we received MSAL hash params without errors (we got a token back)\r\n                clearLoginRequiredAttemptState();\r\n                trackTrace(`MsalProvider: handleRedirectCallback - no error received in hash params, wasLoginRequiredAttempt = ${wasLoginRequiredAttempt}`);\r\n            }\r\n        });\r\n        isInitialized = true;\r\n    }\r\n}\r\nfunction resolveErrorCode(authError) {\r\n    let errorCode = authError && authError.errorCode\r\n        ? authError.errorCode.toLowerCase()\r\n        : IdentityErrorCode.Unknown;\r\n    // HACK: MSA does not set any hash params when the user hits back from the login page\r\n    // which results in the error message below being returned from MSAL\r\n    if (errorCode === IdentityErrorCode.Unknown &&\r\n        authError &&\r\n        authError.message &&\r\n        authError.message.trim().toLowerCase() === userCanceledErrorMessage.toLowerCase()) {\r\n        errorCode = IdentityErrorCode.UserCanceled;\r\n    }\r\n    return errorCode;\r\n}\r\nexport function clearUserSession() {\r\n    // HACK: This lets us call a private method to clear the MSAL cache\r\n    if (isInitialized && context.clearCache) {\r\n        context.clearCache();\r\n    }\r\n    // HACK: MSAL keeps this id token in memory so we need to clear this property\r\n    // otherwise loginSilent will succeed after this method is called\r\n    if (!!context && context.account) {\r\n        context.account = null;\r\n    }\r\n    const ltiState = getLtiState();\r\n    const ltiNonce = getLtiNonce();\r\n    const ltiToken = getLtiToken();\r\n    Storage.clear();\r\n    // we should not clear lti items when signing out aad account\r\n    if (!!ltiState && !!ltiNonce && !!ltiToken) {\r\n        setLtiItems(ltiState, ltiNonce, ltiToken);\r\n    }\r\n}\r\nexport function clearCacheForScope(accessToken) {\r\n    if (isInitialized && context.clearCacheForScope) {\r\n        context.clearCacheForScope(accessToken);\r\n    }\r\n}\r\nfunction setReturnUrl(returnUrl) {\r\n    Storage.setItem(returnUrlStorageKey, returnUrl);\r\n}\r\nfunction setLoginRequiredAttemptState() {\r\n    Storage.setItem(loginRequiredAttemptKey, 'true');\r\n}\r\nfunction clearLoginRequiredAttemptState() {\r\n    Storage.removeItem(loginRequiredAttemptKey);\r\n}\r\nfunction hasLoginRequiredAttemptState() {\r\n    const state = Storage.getItem(loginRequiredAttemptKey);\r\n    return !!state;\r\n}\r\nexport function getRedirectAuthError() {\r\n    // resetting this state since it is no longer useful after this error check runs\r\n    const wasLoginRequiredAttempt = hasLoginRequiredAttemptState();\r\n    const authError = authRedirectError;\r\n    authRedirectError = undefined;\r\n    clearLoginRequiredAttemptState();\r\n    if (!!authError) {\r\n        const errorCode = resolveErrorCode(authError);\r\n        const message = authError.errorMessage || authError.message || 'An auth error occurred on redirect.';\r\n        return {\r\n            errorCode,\r\n            message,\r\n        };\r\n    }\r\n    if (wasLoginRequiredAttempt) {\r\n        return {\r\n            errorCode: IdentityErrorCode.LoginRequired,\r\n            message: 'Failed to acquire an access token after a login required error and no error was returned from MSAL.',\r\n        };\r\n    }\r\n    return undefined;\r\n}\r\nexport function getReturnUrl() {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('MsalProvider: The provider must be initialized before use.', '', FailureOperation.MsalProviderInit);\r\n    }\r\n    const returnUrl = Storage.getItem(returnUrlStorageKey);\r\n    return returnUrl;\r\n}\r\nexport async function loginSilent(tenantId) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('MsalProvider: The provider must be initialized before use.', '', FailureOperation.MsalProviderInit);\r\n    }\r\n    const account = context.getAccount();\r\n    if (!account) {\r\n        return {\r\n            isAuthenticated: false,\r\n            errorCode: IdentityErrorCode.LoginRequired,\r\n        };\r\n    }\r\n    if (!!tenantId) {\r\n        const tid = account.idTokenClaims['tid'];\r\n        if (tid !== tenantId) {\r\n            clearUserSession();\r\n            return {\r\n                isAuthenticated: false,\r\n                errorCode: IdentityErrorCode.LoginRequired,\r\n            };\r\n        }\r\n    }\r\n    return {\r\n        isAuthenticated: true,\r\n        account,\r\n    };\r\n}\r\nexport function loginRedirect(returnUrl, tenantId, loginHint, showPrompt = true) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('MsalProvider: The provider must be initialized before use.', '', FailureOperation.MsalProviderInit);\r\n    }\r\n    clearUserSession();\r\n    if (returnUrl) {\r\n        setReturnUrl(returnUrl);\r\n    }\r\n    const authority = !!tenantId ? `${authorityBase}/${tenantId}/` : crossTenantAuthority;\r\n    const request = {\r\n        scopes: [...preAuthorizedScopes],\r\n        prompt: showPrompt ? 'select_account' : undefined,\r\n        authority,\r\n        loginHint,\r\n    };\r\n    context.loginRedirect(request);\r\n}\r\nexport function loginPopup(tenantId, loginHint, showPrompt = true) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('MsalProvider: The provider must be initialized before use.', '', FailureOperation.MsalProviderInit);\r\n    }\r\n    clearUserSession();\r\n    const authority = !!tenantId ? `${authorityBase}/${tenantId}/` : crossTenantAuthority;\r\n    const request = {\r\n        scopes: [...preAuthorizedScopes],\r\n        prompt: showPrompt ? 'select_account' : undefined,\r\n        authority,\r\n        loginHint,\r\n    };\r\n    const result = context.loginPopup(request);\r\n    return result;\r\n}\r\nexport function logOut() {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('MsalProvider: The provider must be initialized before use.', '', FailureOperation.MsalProviderInit);\r\n    }\r\n    clearUserSession();\r\n    context.logout();\r\n}\r\nexport async function getAccessToken(scopes, tenantId, returnUrl, shouldOpenPopupWindow = false) {\r\n    if (!isInitialized) {\r\n        throw new MlClientError('MsalProvider: The provider must be initialized before use.', '', FailureOperation.MsalProviderInit);\r\n    }\r\n    const correlationId = uuid();\r\n    const authority = `${authorityBase}/${tenantId}/`;\r\n    const account = context.getAccount();\r\n    const request = {\r\n        scopes: [...scopes],\r\n        authority,\r\n        account,\r\n        correlationId,\r\n    };\r\n    // for dependency tracking\r\n    const startTime = new Date().getTime();\r\n    try {\r\n        const result = await context.acquireTokenSilent(request);\r\n        const endTime = new Date().getTime();\r\n        const duration = endTime - startTime;\r\n        // this shouldn't happen, but if it does we want to detect the MSAL bug\r\n        if (!result || !result.accessToken) {\r\n            trackDependency(correlationId, 500, 'MsalProvider-getAccessToken', duration, false);\r\n            return {\r\n                isRedirecting: false,\r\n                errorCode: IdentityErrorCode.Unknown,\r\n            };\r\n        }\r\n        // only recording the dependency when it isn't a cached result because this gets called\r\n        // a lot\r\n        const { accessToken, fromCache } = result;\r\n        if (!fromCache) {\r\n            trackDependency(correlationId, 200, 'MsalProvider-getAccessToken', duration, true);\r\n        }\r\n        return {\r\n            accessToken,\r\n            isRedirecting: false,\r\n        };\r\n    }\r\n    catch (error) {\r\n        const endTime = new Date().getTime();\r\n        const duration = endTime - startTime;\r\n        const authError = error;\r\n        const errorCode = resolveErrorCode(authError);\r\n        // some error codes are expected, so we can consider those successful dependencies\r\n        switch (errorCode) {\r\n            case IdentityErrorCode.LoginRequired:\r\n            case IdentityErrorCode.Renewal:\r\n            case IdentityErrorCode.InteractionRequired:\r\n            case IdentityErrorCode.UserLogin:\r\n                trackDependency(correlationId, 300, 'MsalProvider-getAccessToken', duration, true);\r\n                break;\r\n            case IdentityErrorCode.InvalidState:\r\n                trackDependency(correlationId, 400, 'MsalProvider-getAccessToken', duration, true);\r\n                break;\r\n            default:\r\n                trackDependency(correlationId, 500, 'MsalProvider-getAccessToken', duration, false);\r\n                break;\r\n        }\r\n        // if we can redirect or open popup, lets kick it off for the error codes that require it\r\n        if (returnUrl || shouldOpenPopupWindow) {\r\n            const startTime = new Date().getTime();\r\n            switch (errorCode) {\r\n                case IdentityErrorCode.LoginRequired:\r\n                    // setting state so we can record that we are attempting a full\r\n                    // frame redirect for an access token when hitting a login\r\n                    // required error\r\n                    if (!shouldOpenPopupWindow) {\r\n                        setLoginRequiredAttemptState();\r\n                    }\r\n                case IdentityErrorCode.Renewal:\r\n                case IdentityErrorCode.InteractionRequired:\r\n                    if (returnUrl) {\r\n                        setReturnUrl(returnUrl);\r\n                        context.acquireTokenRedirect(request);\r\n                        return {\r\n                            isRedirecting: true,\r\n                        };\r\n                    }\r\n                    else {\r\n                        try {\r\n                            const result = await context.acquireTokenPopup(request);\r\n                            const endTime = new Date().getTime();\r\n                            const duration = endTime - startTime;\r\n                            const { accessToken } = result;\r\n                            trackDependency(correlationId, 200, 'MsalProvider-getAccessTokenPopup', duration, true);\r\n                            return {\r\n                                accessToken,\r\n                                isRedirecting: false,\r\n                            };\r\n                        }\r\n                        catch (error) {\r\n                            const authError = error;\r\n                            const errorCode = resolveErrorCode(authError);\r\n                            return {\r\n                                isRedirecting: false,\r\n                                errorCode,\r\n                            };\r\n                        }\r\n                    }\r\n                case IdentityErrorCode.UserLogin:\r\n                    if (returnUrl) {\r\n                        loginRedirect(returnUrl);\r\n                        return {\r\n                            isRedirecting: true,\r\n                        };\r\n                    }\r\n                    else {\r\n                        try {\r\n                            const result = await loginPopup();\r\n                            const endTime = new Date().getTime();\r\n                            const duration = endTime - startTime;\r\n                            const { accessToken } = result;\r\n                            trackDependency(correlationId, 200, 'MsalProvider-getAccessTokenPopup', duration, true);\r\n                            return {\r\n                                accessToken,\r\n                                isRedirecting: false,\r\n                            };\r\n                        }\r\n                        catch (error) {\r\n                            const authError = error;\r\n                            const errorCode = resolveErrorCode(authError);\r\n                            return {\r\n                                isRedirecting: false,\r\n                                errorCode,\r\n                            };\r\n                        }\r\n                    }\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n        return {\r\n            isRedirecting: false,\r\n            errorCode,\r\n        };\r\n    }\r\n}\r\nexport function isMsalIframe() {\r\n    // this code was adapted from the MSAl WindowUtils to replicate\r\n    // functionality that is no longer intended to be exported as of\r\n    // MSAL 1.2.0, see: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-core/src/utils/WindowUtils.ts\r\n    if (window.parent !== window) {\r\n        try {\r\n            return window.parent.location.hostname === window.location.hostname;\r\n        }\r\n        catch (err) {\r\n            // blocked from accessing cross origin iframe info so we know the origin is not the same as our own\r\n            return false;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nexport function isMsalPopup() {\r\n    // this code was adapted from the MSAl WindowUtils to replicate\r\n    // functionality that is no longer intended to be exported as of\r\n    // MSAL 1.2.0, see: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-core/src/utils/WindowUtils.ts\r\n    if (!!(window.opener && window.opener !== window)) {\r\n        try {\r\n            // if the opener origin is the same as our own origin and it is not for Teams MFA flow\r\n            if (!!window.opener.location.origin && window.opener.location.search === '?host=Teams') {\r\n                return false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n        catch (err) {\r\n            // blocked from accessing cross origin info so we know the origin is not the same as our own\r\n            return false;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nconst MsalProvider = {\r\n    init,\r\n    getReturnUrl,\r\n    loginSilent,\r\n    loginRedirect,\r\n    loginPopup,\r\n    logOut,\r\n    getAccessToken,\r\n    isMsalIframe,\r\n    clearCacheForScope,\r\n    clearUserSession,\r\n    isMsalPopup,\r\n};\r\nexport default MsalProvider;\r\n","import { CryptoUtils } from 'msal/lib-es6/utils/CryptoUtils';\r\nimport { WindowUtils } from 'msal/lib-es6/utils/WindowUtils';\r\nimport { AuthorityFactory } from 'msal/lib-es6/authority/AuthorityFactory';\r\nimport { Base64 } from 'js-base64';\r\nimport Settings from '../../settings/settings';\r\nimport { trackTrace } from '../../utils/telemetry/telemetry-channel';\r\nimport { isMsalPopup } from './msal-provider';\r\nconst base64Encode = (input) => {\r\n    const result = Base64.encode(input);\r\n    return result;\r\n};\r\nconst base64Decode = (input) => {\r\n    const result = Base64.decode(input);\r\n    return result;\r\n};\r\n// Shim the decode and encode. Their implementations are buggy.\r\nCryptoUtils.base64Encode = base64Encode;\r\nCryptoUtils.base64Decode = base64Decode;\r\nexport const CryptoUtilsShim = {\r\n    base64Encode,\r\n    base64Decode,\r\n};\r\n// HACK: This fixes a bug where MSAL is detecting that we are in a popup\r\n// when we are opened as a link from the Azure Portal or Teams. Also we will\r\n// allow rendering our app in Teams MFA flow.\r\nWindowUtils.isInPopup = isMsalPopup;\r\n// The MSAL library makes a lot of calls to get OIDC data that we can assume is structured as below\r\n// for our application and these calls fail more often than we'd like. Shimming these defaults to\r\n// work around the issue for now when it fails.\r\n// NOTE: We'll need to keep an eye on this as we update MSAL\r\nexport const saveMetadataFromNetwork = async (authorityInstance, telemetryManager, correlationId) => {\r\n    let metadata;\r\n    try {\r\n        metadata = await authorityInstance.resolveEndpointsAsync(telemetryManager, correlationId);\r\n    }\r\n    catch (err) {\r\n        metadata = {\r\n            AuthorizationEndpoint: `${authorityInstance.CanonicalAuthority}oauth2/v2.0/authorize`,\r\n            EndSessionEndpoint: `${authorityInstance.CanonicalAuthority}oauth2/v2.0/logout`,\r\n            Issuer: authorityInstance.CanonicalAuthority.indexOf('/organizations/') > -1\r\n                ? `${Settings.AadAuthority}/{tenantId}/v2.0`\r\n                : `${authorityInstance.CanonicalAuthority}v2.0`,\r\n        };\r\n        trackTrace(`MsalShim: Failed to get OIDC metadata. Constructing metadata: ${JSON.stringify(metadata)}`);\r\n    }\r\n    AuthorityFactory.metadataMap.set(authorityInstance.CanonicalAuthority, metadata);\r\n    authorityInstance.tenantDiscoveryResponse = metadata;\r\n    return metadata;\r\n};\r\nAuthorityFactory.saveMetadataFromNetwork = saveMetadataFromNetwork;\r\nexport const AuthorityFactoryShim = {\r\n    saveMetadataFromNetwork,\r\n};\r\n","import * as React from 'react';\r\nexport class ErrorBoundary extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidCatch(error, _info) {\r\n        this.props.setUnhandledError(error);\r\n    }\r\n    render() {\r\n        if (this.props.hasError) {\r\n            return <></>;\r\n        }\r\n        else {\r\n            return this.props.children;\r\n        }\r\n    }\r\n}\r\nexport default ErrorBoundary;\r\n","export const CommonActionType = {\r\n    INITIALIZE: 'INITIALIZE',\r\n    INITIALIZE_CANCELLED: 'INITIALIZE_CANCELLED',\r\n    INITIALIZE_SUCCESS: 'INITIALIZE_SUCCESS',\r\n    INITIALIZE_ERROR: 'INITIALIZE_ERROR',\r\n    PROFESSOR_INITIALIZE: 'PROFESSOR_INITIALIZE',\r\n    PROFESSOR_INITIALIZE_CANCELLED: 'PROFESSOR_INITIALIZE_CANCELLED',\r\n    PROFESSOR_INITIALIZE_SUCCESS: 'PROFESSOR_INITIALIZE_SUCCESS',\r\n    PROFESSOR_INITIALIZE_ERROR: 'PROFESSOR_INITIALIZE_ERROR',\r\n    STUDENT_INITIALIZE: 'STUDENT_INITIALIZE',\r\n    STUDENT_INITIALIZE_CANCELLED: 'STUDENT_INITIALIZE_CANCELLED',\r\n    STUDENT_INITIALIZE_SUCCESS: 'STUDENT_INITIALIZE_SUCCESS',\r\n    STUDENT_INITIALIZE_ERROR: 'STUDENT_INITIALIZE_ERROR',\r\n    LAB_APP_INITIALIZE: 'LAB_APP_INITIALIZE',\r\n    LAB_APP_INITIALIZE_CANCELLED: 'LAB_APP_INITIALIZE_CANCELLED',\r\n    LAB_APP_INITIALIZE_SUCCESS: 'LAB_APP_INITIALIZE_SUCCESS',\r\n    LAB_APP_INITIALIZE_ERROR: 'LAB_APP_INITIALIZE_ERROR',\r\n    SET_HOST: 'SET_HOST',\r\n    SET_LOCALE: 'SET_LOCALE',\r\n    SET_TIMEZONE: 'SET_TIMEZONE',\r\n    SET_THEME: 'SET_THEME',\r\n    SET_REFERRER: 'SET_REFERRER',\r\n    FATAL_ERROR: 'FATAL_ERROR',\r\n    PROCESS_URL_FEATURES: 'PROCESS_URL_FEATURES',\r\n    PROCESS_URL_FEATURES_SUCCESS: 'PROCESS_URL_FEATURES_SUCCESS',\r\n    PROCESS_URL_FEATURES_ERROR: 'PROCESS_URL_FEATURES_ERROR',\r\n    ENABLE_FEATURE: 'ENABLE_FEATURE',\r\n    DISABLE_FEATURE: 'DISABLE_FEATURE',\r\n    CLEAR_FATAL_ERROR: 'CLEAR_FATAL_ERROR',\r\n    IDLE_TIMEOUT: 'IDLE_TIMEOUT',\r\n    PROCESS_QUERY_PARAMS: 'PROCESS_QUERY_PARAMS',\r\n    CLEAR_USER_SESSION: 'CLEAR_USER_SESSION',\r\n    ENABLE_FEATURE_SUCCESS: 'ENABLE_FEATURE_SUCCESS',\r\n    ENABLE_FEATURE_ERROR: 'ENABLE_FEATURE_ERROR',\r\n    SELECT_TENANT: 'SELECT_TENANT',\r\n};\r\n","import { CommonActionType, } from './common-actions';\r\nimport { ErrorCode } from '../../../common/error-codes';\r\nexport const fatalError = (errorCode = ErrorCode.GenericError, error) => ({\r\n    type: CommonActionType.FATAL_ERROR,\r\n    errorCode,\r\n    error,\r\n});\r\nexport const clearFatalError = () => ({\r\n    type: CommonActionType.CLEAR_FATAL_ERROR,\r\n});\r\nexport const initialize = (shouldSignInInteractively = false) => ({\r\n    type: CommonActionType.INITIALIZE,\r\n    shouldSignInInteractively,\r\n});\r\nexport const initializeCancelled = () => ({\r\n    type: CommonActionType.INITIALIZE_CANCELLED,\r\n});\r\nexport const initializeSuccess = () => ({\r\n    type: CommonActionType.INITIALIZE_SUCCESS,\r\n});\r\nexport const initializeError = (error) => ({\r\n    type: CommonActionType.INITIALIZE_ERROR,\r\n    error,\r\n});\r\nexport const professorInitialize = () => ({\r\n    type: CommonActionType.PROFESSOR_INITIALIZE,\r\n});\r\nexport const professorInitializeCancelled = () => ({\r\n    type: CommonActionType.PROFESSOR_INITIALIZE_CANCELLED,\r\n});\r\nexport const professorInitializeSuccess = () => ({\r\n    type: CommonActionType.PROFESSOR_INITIALIZE_SUCCESS,\r\n});\r\nexport const professorInitializeError = (error) => ({\r\n    type: CommonActionType.PROFESSOR_INITIALIZE_ERROR,\r\n    error,\r\n});\r\nexport const studentInitialize = () => ({\r\n    type: CommonActionType.STUDENT_INITIALIZE,\r\n});\r\nexport const studentInitializeCancelled = () => ({\r\n    type: CommonActionType.STUDENT_INITIALIZE_CANCELLED,\r\n});\r\nexport const studentInitializeSuccess = () => ({\r\n    type: CommonActionType.STUDENT_INITIALIZE_SUCCESS,\r\n});\r\nexport const studentInitializeError = (error) => ({\r\n    type: CommonActionType.STUDENT_INITIALIZE_ERROR,\r\n    error,\r\n});\r\nexport const labAppInitialize = (labId) => ({\r\n    type: CommonActionType.LAB_APP_INITIALIZE,\r\n    labId,\r\n});\r\nexport const labAppInitializeCancelled = () => ({\r\n    type: CommonActionType.LAB_APP_INITIALIZE_CANCELLED,\r\n});\r\nexport const labAppInitializeSuccess = () => ({\r\n    type: CommonActionType.LAB_APP_INITIALIZE_SUCCESS,\r\n});\r\nexport const labAppInitializeError = (error) => ({\r\n    type: CommonActionType.LAB_APP_INITIALIZE_ERROR,\r\n    error,\r\n});\r\nexport const setHost = (host) => ({\r\n    type: CommonActionType.SET_HOST,\r\n    host,\r\n});\r\nexport const setLocale = (locale) => ({\r\n    type: CommonActionType.SET_LOCALE,\r\n    locale,\r\n});\r\nexport const setTimezone = (timezone) => ({\r\n    type: CommonActionType.SET_TIMEZONE,\r\n    timezone,\r\n});\r\nexport const setTheme = (theme) => ({\r\n    type: CommonActionType.SET_THEME,\r\n    theme,\r\n});\r\nexport const setReferrer = (referrer) => ({\r\n    type: CommonActionType.SET_REFERRER,\r\n    referrer,\r\n});\r\nexport const processUrlFeatures = () => ({\r\n    type: CommonActionType.PROCESS_URL_FEATURES,\r\n});\r\nexport const processUrlFeaturesSuccess = () => ({\r\n    type: CommonActionType.PROCESS_URL_FEATURES_SUCCESS,\r\n});\r\nexport const processUrlFeaturesError = () => ({\r\n    type: CommonActionType.PROCESS_URL_FEATURES_ERROR,\r\n});\r\nexport const enableFeature = (feature) => ({\r\n    type: CommonActionType.ENABLE_FEATURE,\r\n    feature,\r\n});\r\nexport const enableFeatureSuccess = () => ({\r\n    type: CommonActionType.ENABLE_FEATURE_SUCCESS,\r\n});\r\nexport const enableFeatureError = () => ({\r\n    type: CommonActionType.ENABLE_FEATURE_ERROR,\r\n});\r\nexport const disableFeature = (feature) => ({\r\n    type: CommonActionType.DISABLE_FEATURE,\r\n    feature,\r\n});\r\nexport const idleTimeout = () => ({\r\n    type: CommonActionType.IDLE_TIMEOUT,\r\n});\r\nexport const processQueryParams = (search) => ({\r\n    type: CommonActionType.PROCESS_QUERY_PARAMS,\r\n    search,\r\n});\r\nexport const clearUserSession = () => ({\r\n    type: CommonActionType.CLEAR_USER_SESSION,\r\n});\r\nexport const selectTenant = (tenantId, isRedirect) => ({\r\n    type: CommonActionType.SELECT_TENANT,\r\n    tenantId,\r\n    isRedirect,\r\n});\r\nconst actions = {\r\n    fatalError,\r\n    clearFatalError,\r\n    initialize,\r\n    initializeCancelled,\r\n    initializeSuccess,\r\n    initializeError,\r\n    professorInitialize,\r\n    professorInitializeCancelled,\r\n    professorInitializeSuccess,\r\n    professorInitializeError,\r\n    studentInitialize,\r\n    studentInitializeCancelled,\r\n    studentInitializeSuccess,\r\n    studentInitializeError,\r\n    labAppInitialize,\r\n    labAppInitializeCancelled,\r\n    labAppInitializeSuccess,\r\n    labAppInitializeError,\r\n    setHost,\r\n    setLocale,\r\n    setTimezone,\r\n    setTheme,\r\n    setReferrer,\r\n    processUrlFeatures,\r\n    processUrlFeaturesSuccess,\r\n    processUrlFeaturesError,\r\n    enableFeature,\r\n    disableFeature,\r\n    idleTimeout,\r\n    processQueryParams,\r\n    clearUserSession,\r\n    enableFeatureSuccess,\r\n    enableFeatureError,\r\n    selectTenant,\r\n};\r\nexport default actions;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport ErrorBoundary from './error-boundary';\r\nimport { fatalError } from '../redux/actions/common/common-action-creators';\r\nimport { ErrorCode } from '../common/error-codes';\r\nclass ErrorBoundaryContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.setUnhandledError = this.setUnhandledError.bind(this);\r\n    }\r\n    setUnhandledError(error) {\r\n        this.props.fatalError(ErrorCode.GenericError, error);\r\n    }\r\n    render() {\r\n        const { hasError, children } = this.props;\r\n        return (<ErrorBoundary hasError={hasError} setUnhandledError={this.setUnhandledError}>\r\n                {children}\r\n            </ErrorBoundary>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const fatalErrorCode = commonStore.get('fatalErrorCode');\r\n    const hasError = fatalErrorCode !== undefined;\r\n    return {\r\n        hasError,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    fatalError,\r\n};\r\nexport const ErrorBoundaryContainer = connect(mapStateToProps, mapDispatchToProps)(ErrorBoundaryContainerInjected);\r\nexport default ErrorBoundaryContainer;\r\n","import { NeutralColors } from '@fluentui/theme';\r\nimport { merge } from 'lodash';\r\nconst commandBarSeparatorStyles = {\r\n    backgroundColor: '#b3b0ad',\r\n    width: '1px',\r\n    height: '25px',\r\n    margin: '10px 10px 0px 10px',\r\n};\r\nexport const DefaultCustomTheme = {\r\n    secondaryBackgroundColor: '#faf9f8',\r\n    pageTitleStyle: {\r\n        fontSize: '24px',\r\n        lineHeight: '28px',\r\n        fontWeight: 600,\r\n        height: '32px',\r\n        color: '#000000',\r\n        margin: '30px 0px 0px 30px',\r\n    },\r\n    accessDropdownStyle: {\r\n        margin: '30px 0px 0px 30px',\r\n    },\r\n    smallPageTitleStyle: {\r\n        fontSize: '20px',\r\n        lineHeight: '27px',\r\n        fontWeight: 600,\r\n        margin: '44px 0px 0px 30px',\r\n        color: '#323130',\r\n    },\r\n    panelStyles: {\r\n        main: {\r\n            marginTop: 54,\r\n            '.ms-TextField-fieldGroup:hover': { borderColor: '#0078d4' },\r\n        },\r\n        header: {\r\n            marginTop: 0,\r\n        },\r\n        scrollableContent: {\r\n            display: 'flex',\r\n            flexDirection: 'column',\r\n            flexWrap: 'nowrap',\r\n            flexShrink: 1,\r\n            flexGrow: 1,\r\n            overflowY: 'hidden',\r\n        },\r\n        content: {\r\n            display: 'flex',\r\n            flexDirection: 'column',\r\n            flexWrap: 'nowrap',\r\n            flexShrink: 1,\r\n            flexGrow: 1,\r\n            overflowY: 'auto',\r\n            paddingTop: 20,\r\n        },\r\n        footer: {\r\n            borderTop: '1px solid #edebe9',\r\n        },\r\n        footerInner: {\r\n            paddingLeft: 23,\r\n        },\r\n    },\r\n    primaryCommandButtonStyles: {\r\n        root: {\r\n            width: '100%',\r\n            padding: '0',\r\n            margin: '0',\r\n            border: '0',\r\n        },\r\n        rootHovered: {\r\n            color: '#323130',\r\n            backgroundColor: '#f3f2f1',\r\n        },\r\n        rootPressed: {\r\n            backgroundColor: 'rgb(237, 235, 233)',\r\n        },\r\n        iconPressed: {\r\n            color: 'undefined',\r\n        },\r\n        label: {\r\n            whiteSpace: 'nowrap',\r\n        },\r\n    },\r\n    primaryCommandBarStyles: {\r\n        root: {\r\n            borderBottom: '1px solid #f3f2f1',\r\n            height: 44,\r\n            '.ms-Button--command': { height: 44 },\r\n            '.command-bar-separator': {\r\n                ...commandBarSeparatorStyles,\r\n                backgroundColor: '#b3b0ad',\r\n            },\r\n        },\r\n    },\r\n    secondaryCommandBarStyles: {\r\n        root: {\r\n            backgroundColor: '#f3f2f1',\r\n            borderBottom: '1px solid #f3f2f1',\r\n            height: 44,\r\n            button: { backgroundColor: '#f3f2f1' },\r\n            'button:hover': { backgroundColor: '#edebe9' },\r\n            'button:active': { backgroundColor: '#e1dfdd' },\r\n            '.command-bar-separator': {\r\n                ...commandBarSeparatorStyles,\r\n                backgroundColor: '#b3b0ad',\r\n            },\r\n        },\r\n    },\r\n    filterBarStyles: {\r\n        root: {\r\n            height: 47,\r\n            marginTop: 12,\r\n            marginLeft: 25,\r\n            marginRight: 25,\r\n            '.ms-Icon': { color: '#3b3a39' },\r\n            '.ms-SearchBox-icon': { color: '#3b3a39' },\r\n        },\r\n    },\r\n    usageProgressTrackStyles: {\r\n        active: {\r\n            backgroundColor: '#d2d0ce',\r\n        },\r\n    },\r\n    dayPickerButtonStyles: {\r\n        root: {\r\n            minWidth: '32px',\r\n            maxWidth: '32px',\r\n            minHeight: '32px',\r\n            maxHeight: '32px',\r\n            borderRadius: '50%',\r\n            margin: '0px',\r\n            padding: '0px',\r\n            backgroundColor: '#edebe9',\r\n            border: 'none',\r\n        },\r\n        rootHovered: {\r\n            backgroundColor: 'rgb(225, 223, 221)',\r\n        },\r\n        label: {\r\n            fontWeight: 400,\r\n        },\r\n        rootChecked: {\r\n            backgroundColor: '#0078d4',\r\n            color: 'white',\r\n        },\r\n        rootCheckedHovered: {\r\n            backgroundColor: 'rgb(0, 108, 191)',\r\n            color: 'white',\r\n        },\r\n    },\r\n    shimmeredUserListStyles: {\r\n        root: {\r\n            '.ms-ShimmerLine-root': { height: '18px' },\r\n            '.ms-ShimmerGap-root': { height: '54px' },\r\n            '::after': {\r\n                backgroundImage: 'none',\r\n            },\r\n        },\r\n    },\r\n    messageBarStyles: {\r\n        root: {\r\n            '.ms-Link': { color: '#005a9e' },\r\n        },\r\n    },\r\n    pageHeaderStyles: {\r\n        root: {\r\n            height: '100%',\r\n            width: '100%',\r\n            backgroundColor: '#000000',\r\n            color: '#ffffff',\r\n            margin: '0 0 0 0',\r\n            padding: '0 0 0 0',\r\n        },\r\n    },\r\n    pageHeaderButtonStyles: {\r\n        root: {\r\n            height: '54px',\r\n            width: '100%',\r\n            backgroundColor: '#000000',\r\n            color: '#ffffff',\r\n            border: '0px',\r\n            borderRadius: '0px',\r\n        },\r\n        icon: {\r\n            color: '#ffffff',\r\n        },\r\n        iconHovered: {\r\n            color: '#ffffff',\r\n        },\r\n        iconPressed: {\r\n            color: '#ffffff',\r\n        },\r\n        rootHovered: {\r\n            backgroundColor: '#005A9E',\r\n            color: '#ffffff',\r\n        },\r\n        rootPressed: {\r\n            backgroundColor: '#004578',\r\n            color: '#ffffff',\r\n        },\r\n        rootExpanded: {\r\n            backgroundColor: '#F3F2F1',\r\n            color: '#000000',\r\n        },\r\n    },\r\n};\r\nexport const TeamsCustomTheme = merge({}, DefaultCustomTheme, {\r\n    transitionBackgroundColor: '#f3f2f1',\r\n    primaryBackgroundColor: '#faf9f8',\r\n    secondaryBackgroundColor: '#faf9f8',\r\n    pageTitleStyle: {\r\n        fontSize: '18px',\r\n        lineHeight: '24px',\r\n        margin: '20px 0px 0px 30px',\r\n    },\r\n    smallPageTitleStyle: {\r\n        fontSize: '18px',\r\n        lineHeight: '24px',\r\n        margin: '20px 0px 0px 30px',\r\n    },\r\n    panelStyles: {\r\n        main: {\r\n            marginTop: 0,\r\n            '.ms-TextField-fieldGroup:hover': { borderColor: '#6264a7' },\r\n        },\r\n    },\r\n    primaryCommandBarStyles: {\r\n        root: {\r\n            backgroundColor: '#faf9f8',\r\n            borderBottom: '1px solid #e1dfdd',\r\n            height: 54,\r\n            '.ms-Button--command': { height: 54 },\r\n        },\r\n        primarySet: {\r\n            button: { backgroundColor: '#faf9f8' },\r\n            'button:hover': { backgroundColor: '#f3f2f1' },\r\n            'button:active': { backgroundColor: '#edebe9' },\r\n            '.command-bar-separator': {\r\n                backgroundColor: '#e1dfdd',\r\n                margin: '15px 10px 0px 10px',\r\n            },\r\n        },\r\n        secondarySet: {\r\n            button: {\r\n                backgroundColor: '#faf9f8',\r\n                borderBottom: '3px solid transparent',\r\n            },\r\n            'button:hover': {\r\n                backgroundColor: '#faf9f8',\r\n                borderBottom: '3px solid rgba(98, 100, 167, 0.5)',\r\n            },\r\n            'button.selected': {\r\n                borderBottom: '3px solid #6264A7',\r\n                '.ms-Button-label': {\r\n                    color: '#6264A7',\r\n                    fontWeight: 600,\r\n                },\r\n            },\r\n        },\r\n    },\r\n    secondaryCommandBarStyles: {\r\n        root: {\r\n            backgroundColor: '#edebe9',\r\n            borderBottom: '1px solid #e1dfdd',\r\n            height: 54,\r\n            '.ms-Button': { backgroundColor: '#edebe9' },\r\n            '.ms-Button:hover': { backgroundColor: '#e1dfdd' },\r\n            '.ms-Button:active': { backgroundColor: '#d2d0ce' },\r\n            '.ms-Icon': { color: '#6264a7' },\r\n            '.command-bar-separator': {\r\n                backgroundColor: '#e1dfdd',\r\n                margin: '15px 10px 0px 10px',\r\n            },\r\n        },\r\n    },\r\n    detailsHeaderStyles: {\r\n        root: {\r\n            backgroundColor: '#faf9f8',\r\n            '.ms-DetailsHeader-cell:hover': { backgroundColor: '#edebe9' },\r\n        },\r\n    },\r\n    detailsRowStyles: {\r\n        root: {\r\n            backgroundColor: '#faf9f8',\r\n            '&:hover': { backgroundColor: '#edebe9' },\r\n        },\r\n    },\r\n    usageProgressTrackStyles: {\r\n        normal: {\r\n            backgroundColor: '#e1dfdd',\r\n        },\r\n        active: {\r\n            backgroundColor: '#ffffff',\r\n        },\r\n    },\r\n    dayPickerButtonStyles: {\r\n        rootChecked: {\r\n            backgroundColor: '#6264a7',\r\n        },\r\n        rootCheckedHovered: {\r\n            backgroundColor: '#464775',\r\n        },\r\n    },\r\n    shimmeredUserListStyles: {\r\n        root: {\r\n            '.ms-ShimmerLine-root': { height: '14px', borderColor: '#faf9f8' },\r\n            '.ms-ShimmerGap-root': { height: '50px', backgroundColor: '#faf9f8' },\r\n            '.ms-Shimmer-container': {\r\n                borderBottom: '1px solid #edebe9',\r\n            },\r\n        },\r\n    },\r\n    messageBarStyles: {\r\n        root: {\r\n            '.ms-Link': { color: '#6264a7' },\r\n            '.ms-Link:hover': { color: '#464775' },\r\n        },\r\n    },\r\n    labListCommandBarStyles: {\r\n        root: {\r\n            backgroundColor: '#faf9f8',\r\n            borderBottom: '1px solid #e1dfdd',\r\n            height: 54,\r\n        },\r\n        primarySet: {\r\n            button: { backgroundColor: '#faf9f8' },\r\n            'button:hover': { backgroundColor: '#f3f2f1' },\r\n            'button:active': { backgroundColor: '#edebe9' },\r\n        },\r\n    },\r\n});\r\nexport const LmsBasicsCustomTheme = merge({}, DefaultCustomTheme, {\r\n    pageHeaderStyles: {\r\n        root: {\r\n            height: '48px',\r\n            backgroundColor: NeutralColors.gray20,\r\n            color: '#292827',\r\n        },\r\n    },\r\n    pageHeaderButtonStyles: {\r\n        root: {\r\n            height: '48px',\r\n            backgroundColor: NeutralColors.gray20,\r\n            color: '#292827',\r\n        },\r\n        icon: {\r\n            color: '#292827',\r\n        },\r\n        iconHovered: {\r\n            color: '#292827',\r\n        },\r\n        iconPressed: {\r\n            color: '#292827',\r\n        },\r\n        rootHovered: {\r\n            backgroundColor: NeutralColors.gray30,\r\n            color: '#292827',\r\n        },\r\n        rootPressed: {\r\n            backgroundColor: NeutralColors.gray40,\r\n            color: '#292827',\r\n        },\r\n        rootExpanded: {\r\n            backgroundColor: NeutralColors.gray40,\r\n            color: '#292827',\r\n        },\r\n    },\r\n});\r\nexport const CanvasCustomTheme = merge({}, LmsBasicsCustomTheme, {\r\n    primaryBackgroundColor: '#ffffff',\r\n    secondaryBackgroundColor: '#ffffff',\r\n    pageTitleStyle: {\r\n        fontSize: '18px',\r\n        lineHeight: '24px',\r\n        margin: '20px 0px 0px 30px',\r\n    },\r\n    smallPageTitleStyle: {\r\n        fontSize: '18px',\r\n        lineHeight: '24px',\r\n        margin: '20px 0px 0px 30px',\r\n    },\r\n    primaryCommandBarStyles: {\r\n        root: {\r\n            borderBottom: '1px solid #e1dfdd',\r\n            height: 51,\r\n            '.ms-Button--command': { height: 51 },\r\n        },\r\n        primarySet: {\r\n            '.command-bar-separator': {\r\n                backgroundColor: '#e1dfdd',\r\n                margin: '15px 10px 0px 10px',\r\n            },\r\n        },\r\n        secondarySet: {\r\n            button: {\r\n                borderBottom: '3px solid transparent',\r\n            },\r\n            'button:hover': {\r\n                borderBottom: '3px solid rgba(72, 118, 192, 0.5)',\r\n            },\r\n            'button.selected': {\r\n                borderBottom: '3px solid #2275d3',\r\n                '.ms-Button-label': {\r\n                    color: '#2275d3',\r\n                    fontWeight: 600,\r\n                },\r\n            },\r\n        },\r\n    },\r\n    secondaryCommandBarStyles: {\r\n        root: {\r\n            height: 51,\r\n        },\r\n    },\r\n    dayPickerButtonStyles: {\r\n        rootChecked: {\r\n            backgroundColor: '#2275d3',\r\n        },\r\n        rootCheckedHovered: {\r\n            backgroundColor: '#1a59a1',\r\n        },\r\n    },\r\n    messageBarStyles: {\r\n        root: {\r\n            '.ms-Link': { color: '#2275d3' },\r\n            '.ms-Link:hover': { color: '#1a59a1' },\r\n        },\r\n    },\r\n    panelStyles: {\r\n        main: {\r\n            marginTop: 48,\r\n            '.ms-TextField-fieldGroup:hover': { borderColor: '#2275d3' },\r\n        },\r\n    },\r\n    labListCommandBarStyles: {\r\n        root: {\r\n            borderBottom: '1px solid #e1dfdd',\r\n            height: 51,\r\n        },\r\n    },\r\n});\r\n","import { getTheme } from '@fluentui/react';\r\nimport { DefaultCustomTheme } from './custom-themes';\r\nlet currentTheme = undefined;\r\n// Loads custom theme to become current.\r\nexport function loadCustomTheme(theme) {\r\n    const fluentTheme = getTheme();\r\n    currentTheme = { ...fluentTheme, ...theme };\r\n}\r\n// Returns current custom theme including Fluent theme + custom styles.\r\nexport function getCustomTheme() {\r\n    if (!currentTheme) {\r\n        loadCustomTheme(DefaultCustomTheme);\r\n    }\r\n    return currentTheme;\r\n}\r\nexport function getPageHeaderRootExpandedColor() {\r\n    const { pageHeaderButtonStyles } = getCustomTheme();\r\n    return pageHeaderButtonStyles?.rootExpanded;\r\n}\r\n","import * as React from 'react';\r\nimport _ from 'lodash';\r\nimport { Icon, PrimaryButton, Stack } from '@fluentui/react';\r\nimport { Link } from 'react-router-dom';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport './full-page-message.css';\r\nexport const FullPageMessage = (props) => {\r\n    const { image, message, messageDetails, buttonText, buttonLinkPath, imageSize, styles, buttonOnClick, messageDetailsMaxWidth, } = props;\r\n    const { primaryBackgroundColor } = getCustomTheme();\r\n    const stackStyles = _.merge({}, { root: { backgroundColor: primaryBackgroundColor } }, styles);\r\n    return (<Stack verticalAlign=\"center\" horizontalAlign=\"center\" tokens={{ childrenGap: '40px' }} styles={stackStyles} grow verticalFill>\r\n            <div id=\"full-page-message-container\">\r\n                <Stack.Item>\r\n                    <Icon iconName={image} className=\"full-page-message__icon\" styles={{\r\n        root: {\r\n            selectors: {\r\n                svg: { height: imageSize?.height ?? 300, width: imageSize?.width ?? 300 },\r\n            },\r\n        },\r\n    }}/>\r\n                    <div className=\"full-page-message__message ms-fontSize-xlPlus ms-fontWeight-semibold\">\r\n                        {message}\r\n                    </div>\r\n                </Stack.Item>\r\n                <Stack.Item styles={{ root: { maxWidth: messageDetailsMaxWidth } }}>\r\n                    {messageDetails && <div className=\"full-page-message__details ms-fontSize-m\">{messageDetails}</div>}\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    {buttonText && buttonLinkPath && (<Link to={buttonLinkPath} className=\"full-page-message__link\">\r\n                            <PrimaryButton text={buttonText} onClick={buttonOnClick}/>\r\n                        </Link>)}\r\n                </Stack.Item>\r\n                <Stack.Item styles={{ root: { marginTop: '20px' } }}>\r\n                    {buttonText && buttonOnClick && <PrimaryButton text={buttonText} onClick={buttonOnClick}/>}\r\n                </Stack.Item>\r\n            </div>\r\n        </Stack>);\r\n};\r\nexport default FullPageMessage;\r\n","import { defineMessages } from 'react-intl';\r\nexport const commonMessages = defineMessages({\r\n    signInButtonText: {\r\n        id: 'SignInButtonText',\r\n        defaultMessage: 'Sign in',\r\n        description: 'Text for sign in buttons across the site',\r\n    },\r\n    numberOne: {\r\n        id: 'CommonNumberOne',\r\n        defaultMessage: '1',\r\n        description: 'Text for the number one',\r\n    },\r\n    numberTwo: {\r\n        id: 'CommonNumberTwo',\r\n        defaultMessage: '2',\r\n        description: 'Text for the number two',\r\n    },\r\n    numberThree: {\r\n        id: 'CommonNumberThree',\r\n        defaultMessage: '3',\r\n        description: 'Text for the number three',\r\n    },\r\n    loadingText: {\r\n        id: 'LoadingStatusMessage',\r\n        defaultMessage: 'Loading...',\r\n        description: 'Text to indicate loading is in progress',\r\n    },\r\n    copy: {\r\n        id: 'CommonWordCopy',\r\n        defaultMessage: 'Copy',\r\n        description: 'The word copy.',\r\n    },\r\n    copied: {\r\n        id: 'CommonWordCopied',\r\n        defaultMessage: 'Copied',\r\n        description: 'The word copied.',\r\n    },\r\n    done: {\r\n        id: 'CommonWordDone',\r\n        defaultMessage: 'Done',\r\n        description: 'The word done.',\r\n    },\r\n    cancel: {\r\n        id: 'CommonWordCancel',\r\n        defaultMessage: 'Cancel',\r\n        description: 'The word cancel.',\r\n    },\r\n    edit: {\r\n        id: 'CommonWordEdit',\r\n        defaultMessage: 'Edit',\r\n        description: 'The word edit.',\r\n    },\r\n    change: {\r\n        id: 'CommonWordChange',\r\n        defaultMessage: 'Change',\r\n        description: 'The word change.',\r\n    },\r\n    virtualMachines: {\r\n        id: 'CommonPhraseVirtualMachines',\r\n        defaultMessage: 'Virtual machines',\r\n        description: 'Text for virtual machines',\r\n    },\r\n    schedule: {\r\n        id: 'CommonWordSchedule',\r\n        defaultMessage: 'Schedule',\r\n        description: 'Word for schedule',\r\n    },\r\n    users: {\r\n        id: 'CommonWordUsers',\r\n        defaultMessage: 'Users',\r\n        description: 'Word for users',\r\n    },\r\n    delete: {\r\n        id: 'CommonWordDelete',\r\n        defaultMessage: 'Delete',\r\n        description: 'Word for delete',\r\n    },\r\n    close: {\r\n        id: 'CommonWordClose',\r\n        defaultMessage: 'Close',\r\n        description: 'Word for close',\r\n    },\r\n    continue: {\r\n        id: 'CommonWordContinue',\r\n        defaultMessage: 'Continue',\r\n        description: 'Word for continue',\r\n    },\r\n    ok: {\r\n        id: 'CommonWordOk',\r\n        defaultMessage: 'OK',\r\n        description: 'Word for ok',\r\n    },\r\n    yes: {\r\n        id: 'CommonWordYes',\r\n        defaultMessage: 'Yes',\r\n        description: 'Word for yes',\r\n    },\r\n    no: {\r\n        id: 'CommonWordNo',\r\n        defaultMessage: 'No',\r\n        description: 'Word for no',\r\n    },\r\n    saving: {\r\n        id: 'CommonWordSaving',\r\n        defaultMessage: 'Saving...',\r\n        description: 'Word for saving with three dots to indicate progress in operation',\r\n    },\r\n    save: {\r\n        id: 'CommonWordSave',\r\n        defaultMessage: 'Save',\r\n        description: 'Word for save',\r\n    },\r\n    add: {\r\n        id: 'CommonWordAdd',\r\n        defaultMessage: 'Add',\r\n        description: 'Word for add',\r\n    },\r\n    send: {\r\n        id: 'CommonWordSend',\r\n        defaultMessage: 'Send',\r\n        description: 'Word for send',\r\n    },\r\n    discard: {\r\n        id: 'CommonWordDiscard',\r\n        defaultMessage: 'Discard',\r\n        description: 'Word for discard',\r\n    },\r\n    reset: {\r\n        id: 'CommonWordReset',\r\n        defaultMessage: 'Reimage',\r\n        description: 'Word for Reimage virtual machine',\r\n    },\r\n    start: {\r\n        id: 'CommonWordStart',\r\n        defaultMessage: 'Start',\r\n        description: 'Word for start',\r\n    },\r\n    stop: {\r\n        id: 'CommonWordStop',\r\n        defaultMessage: 'Stop',\r\n        description: 'Word for stop',\r\n    },\r\n    redeploy: {\r\n        id: 'CommonWordRedeploy',\r\n        defaultMessage: 'Redeploy',\r\n        description: 'Word for redeploy',\r\n    },\r\n    reimage: {\r\n        id: 'CommonWordReimage',\r\n        defaultMessage: 'Reimage',\r\n        description: 'Word for reimage',\r\n    },\r\n    setContact: {\r\n        id: 'CommonWordContact',\r\n        defaultMessage: 'Set contact',\r\n        description: 'Common label for setting a contact.',\r\n    },\r\n    none: {\r\n        id: 'CommonWordNone',\r\n        defaultMessage: 'None',\r\n        description: 'Word for none',\r\n    },\r\n    azure: {\r\n        id: 'CommonWordAzure',\r\n        defaultMessage: 'Azure',\r\n        description: 'Word for the Azure product.',\r\n    },\r\n    export: {\r\n        id: 'CommonWordExport',\r\n        defaultMessage: 'Export',\r\n        description: 'Word for export.',\r\n    },\r\n    labServices: {\r\n        id: 'CommonPhraseLabServices',\r\n        defaultMessage: 'Lab Services',\r\n        description: 'Common label that describes the product, which is called Lab Services.',\r\n    },\r\n    azureLabServices: {\r\n        id: 'CommonPhraseAzureLabServices',\r\n        defaultMessage: 'Azure Lab Services',\r\n        description: 'Common label that is the title of the product, Azure Lab Services.',\r\n    },\r\n    filterByName: {\r\n        id: 'CommonFilterByName',\r\n        defaultMessage: 'Filter by name',\r\n        description: 'Placeholder text for filter text box.',\r\n    },\r\n    selectedFormat: {\r\n        id: 'CommonSelectedFormat',\r\n        defaultMessage: '{numberOfObjects} selected',\r\n        description: 'Message indicating how many objects is selected on a page. {numberOfObjects} is an integer greater or equal to 1.',\r\n    },\r\n    clearSelectionCommand: {\r\n        id: 'CommonClearSelectionCommand',\r\n        defaultMessage: 'Clear selection',\r\n        description: 'Name of command bar command that clears current selection in a table.',\r\n    },\r\n    closeFilterCommand: {\r\n        id: 'CommonCloseFilterCommand',\r\n        defaultMessage: 'Close filter',\r\n        description: 'Name of command bar command that closes filter bar.',\r\n    },\r\n    clearFilters: {\r\n        id: 'CommonClearFilter',\r\n        defaultMessage: 'Clear',\r\n        description: 'Displayed in a filter menu as the option to clear what is being filtered.',\r\n    },\r\n    allFilter: {\r\n        id: 'CommonAllFilter',\r\n        defaultMessage: 'All',\r\n        description: 'Filter value indicating that all objects should be included.',\r\n    },\r\n    nameColumnHeader: {\r\n        id: 'CommonNameColumnHeader',\r\n        defaultMessage: 'Name',\r\n        description: 'Header for Name column of a table containing user or virtual machine name.',\r\n    },\r\n    usageColumnHeader: {\r\n        id: 'CommonUsageColumnHeader',\r\n        defaultMessage: 'Quota hours used',\r\n        description: 'Title for Usage column of a table containing number of hours a VM was used.',\r\n    },\r\n    usageDisclaimer: {\r\n        id: 'VmUsageColumnTooltip',\r\n        defaultMessage: 'Quota hours used and cost to date include only hours consumed by the user. This does not include hours consumed if the lab creator started the machine, manually or via a scheduled event.',\r\n        description: 'Tooltip show on VM/users pages.',\r\n    },\r\n    vmUsageColumnProgressFormat: {\r\n        id: 'VmUsageColumnProgressFormat',\r\n        defaultMessage: '{current}/{total} user hours',\r\n        description: 'Text showing usage of time quota by a user on VM. {current} is used number of hours from {total} number of hours.',\r\n    },\r\n    vmUsageColumnUsageFormat: {\r\n        id: 'VmUsageColumnUsageFormat',\r\n        defaultMessage: '{current} user hours',\r\n        description: 'Text showing current usage of a virtual machine. {current} is the number of used hours.',\r\n    },\r\n    usageProgressColumnHeader: {\r\n        id: 'CommonUsageProgressColumnHeader',\r\n        defaultMessage: 'Usage indicator',\r\n        description: 'Title for Usage indicator column of a table containing number of hours a VM was used.',\r\n    },\r\n    creatingState: {\r\n        id: 'CommonCreatingState',\r\n        defaultMessage: 'Creating',\r\n        description: 'State of a virtual machine when it is being created.',\r\n    },\r\n    deletingState: {\r\n        id: 'CommonDeletingState',\r\n        defaultMessage: 'Deleting',\r\n        description: 'State of a virtual machine or a user when it is being deleted from the lab.',\r\n    },\r\n    stoppedState: {\r\n        id: 'CommonStoppedState',\r\n        defaultMessage: 'Stopped',\r\n        description: 'State of a virtual machine when it is stopped.',\r\n    },\r\n    startingState: {\r\n        id: 'CommonStartingState',\r\n        defaultMessage: 'Starting',\r\n        description: 'State of a virtual machine when it is starting.',\r\n    },\r\n    runningState: {\r\n        id: 'CommonRunningState',\r\n        defaultMessage: 'Running',\r\n        description: 'State of a virtual machine when it is running.',\r\n    },\r\n    stoppingState: {\r\n        id: 'CommonStoppingState',\r\n        defaultMessage: 'Stopping',\r\n        description: 'State of a virtual machine when it is stopping.',\r\n    },\r\n    failedState: {\r\n        id: 'CommonFailedState',\r\n        defaultMessage: 'Failed',\r\n        description: 'State of a virtual machine when it has failed.',\r\n    },\r\n    unknownState: {\r\n        id: 'CommonUnknownState',\r\n        defaultMessage: 'Unknown',\r\n        description: 'Displayed when the state of a virtual machine is unknown.',\r\n    },\r\n    resettingPasswordState: {\r\n        id: 'CommonResettingPasswordState',\r\n        defaultMessage: 'Resetting password',\r\n        description: 'State of a virtual machine when it is resetting password.',\r\n    },\r\n    reimagingState: {\r\n        id: 'CommonReimagingState',\r\n        defaultMessage: 'Reimaging',\r\n        description: 'State of a virtual machine when it is reimaging.',\r\n    },\r\n    redeployingState: {\r\n        id: 'CommonRedeployingState',\r\n        defaultMessage: 'Redeploying',\r\n        description: 'State of a virtual machine when it is redeploying.',\r\n    },\r\n    sortedAtoZ: {\r\n        id: 'CommonSortedAtoZ',\r\n        defaultMessage: 'Sorted in alphabetical order',\r\n        description: 'Description of a table column that is sorted in alphabetical order.',\r\n    },\r\n    sortedZtoA: {\r\n        id: 'CommonSortedZtoA',\r\n        defaultMessage: 'Sorted in reverse alphabetical order',\r\n        description: 'Description of a table column that is sorted in reverse alphabetical order.',\r\n    },\r\n    sortedSmallerToLarger: {\r\n        id: 'CommonSortedSmallerToLarger',\r\n        defaultMessage: 'Sorted smaller to larger',\r\n        description: 'Description of a table column that is sorted from smaller to larger value.',\r\n    },\r\n    sortedLargerToSmaller: {\r\n        id: 'CommonSortedLargerToSmaller',\r\n        defaultMessage: 'Sorted larger to smaller',\r\n        description: 'Description of a table column that is sorted from larger to smaller value.',\r\n    },\r\n    toggleSelection: {\r\n        id: 'CommonToggleSelection',\r\n        defaultMessage: 'Toggle selection',\r\n        description: 'Description of a button to toggle selection on a list view item.',\r\n    },\r\n    toggleAllSelection: {\r\n        id: 'CommonToggleAllSelection',\r\n        defaultMessage: 'Toggle selection for all items',\r\n        description: 'Description of a button to toggle selection on all items in a list view.',\r\n    },\r\n    genericErrorMessage: {\r\n        id: 'GenericErrorMessage',\r\n        defaultMessage: `An error has occurred.`,\r\n        description: 'Message to indicate an error happened when we do not know the cause of the error.',\r\n    },\r\n    creating: {\r\n        id: 'VmCreatingMessage',\r\n        defaultMessage: 'Creating...',\r\n        description: 'Message displayed while creating a VM.',\r\n    },\r\n    starting: {\r\n        id: 'VmStartingMessage',\r\n        defaultMessage: 'Starting...',\r\n        description: 'Message displayed while starting a VM.',\r\n    },\r\n    deleting: {\r\n        id: 'VmDeletingMessage',\r\n        defaultMessage: 'Deleting...',\r\n        description: 'Message displayed while deleting a VM.',\r\n    },\r\n    stopping: {\r\n        id: 'VmStoppingMessage',\r\n        defaultMessage: 'Stopping...',\r\n        description: 'Message displayed while stopping a VM.',\r\n    },\r\n    resettingPassword: {\r\n        id: 'VmResettingPasswordMessage',\r\n        defaultMessage: 'Resetting password...',\r\n        description: 'Message displayed while resetting the password of a VM.',\r\n    },\r\n    settingPassword: {\r\n        id: 'VmSettingPasswordMessage',\r\n        defaultMessage: 'Setting password...',\r\n        description: 'Message displayed while setting a password for the first time.',\r\n    },\r\n    vmDownloadRdpFileTitle: {\r\n        id: 'VmDownloadRdpFileTitle',\r\n        defaultMessage: 'Download RDP file',\r\n        description: 'Title for the connect via RDP when in Teams',\r\n    },\r\n    vmSshConnectTitle: {\r\n        id: 'VmSshConnectTitle',\r\n        defaultMessage: 'Connect via SSH',\r\n        description: 'Title for the connect via SSH button.',\r\n    },\r\n    vmSshBrowserConnectTitle: {\r\n        id: 'VmSshBrowserConnectTitle',\r\n        defaultMessage: 'Connect via SSH in browser',\r\n        description: 'Title for the connect via SSH in browser button.',\r\n    },\r\n    vmRdpConnectTitle: {\r\n        id: 'VmRdpConnectTitle',\r\n        defaultMessage: 'Connect via RDP',\r\n        description: 'Title for the connect via RDP button.',\r\n    },\r\n    vmRdpBrowserConnectTitle: {\r\n        id: 'VmRdpBrowserConnectTitle',\r\n        defaultMessage: 'Connect via RDP in browser',\r\n        description: 'Title for the connect via RDP in browser button.',\r\n    },\r\n    apply: {\r\n        id: 'CommonWordApply',\r\n        defaultMessage: 'Apply',\r\n        description: 'Text for a button to apply changes.',\r\n    },\r\n    resetPassword: {\r\n        id: 'ResetPasswordDialogTitle',\r\n        defaultMessage: 'Reset password',\r\n        description: 'The title for the password dialog when the user has set a password before. This text is also used for the confirmation button, and command bar button as well.',\r\n    },\r\n    help: {\r\n        id: 'Help',\r\n        defaultMessage: 'Help',\r\n        description: 'Label for the title of flyout displaying help information.',\r\n    },\r\n    previous: {\r\n        id: 'CommonWordPrevious',\r\n        defaultMessage: 'Previous',\r\n        description: 'The word previous. Used for ARIA labels on buttons that go back.',\r\n    },\r\n    next: {\r\n        id: 'CommonWordNext',\r\n        defaultMessage: 'Next',\r\n        description: 'The word next. Used for ARIA labels on buttons that go forward.',\r\n    },\r\n    coreUsageExceedsErrorBannerMessage: {\r\n        id: 'CoreUsageExceedsErrorBannerMessage',\r\n        defaultMessage: 'Your account has reached its virtual machine cores limit in Azure Lab Services.  To proceed, you need to {requestLimitIncreaseLink}.  You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.',\r\n        description: 'The message displayed in the error banners whenever an action has exceeded the subscription core limits, along with instructions on how to increase quota.',\r\n    },\r\n    exportToCsv: {\r\n        id: 'ExportCommand',\r\n        defaultMessage: 'Export CSV',\r\n        description: 'The title for the Export CSV command menu item.',\r\n    },\r\n    myVirtualMachines: {\r\n        id: 'CommonPhraseMyVirtualMachines',\r\n        defaultMessage: 'My virtual machines',\r\n        description: 'Text for my virtual machines',\r\n    },\r\n    showRdpInfoTitle: {\r\n        id: 'ShowRdpInfoTitle',\r\n        defaultMessage: 'Show RDP information',\r\n        description: 'Title for the Show RDP info button.',\r\n    },\r\n    covidWarning: {\r\n        id: 'Covid19UnassignedVmsWarning',\r\n        defaultMessage: 'To enable remote learning experiences for more organizations, we will remove any virtual machines that are not assigned to a user within 30 days.',\r\n        description: 'A warning shown to users about new VM cleanup procedures.',\r\n    },\r\n    covidPublishWarning: {\r\n        id: 'Covid19UnassignedVmsPublishWarning',\r\n        defaultMessage: 'Any virtual machine that is not assigned to a user within 30 days will be automatically removed from the lab.',\r\n        description: 'A warning shown to users after publishing a lab about new VM cleanup procedures.',\r\n    },\r\n    oldV1GpuLabsGenericWarning: {\r\n        id: 'OldV1GpuLabsGenericWarning',\r\n        defaultMessage: 'One or more of your labs was created before February 21, 2024 and possibly uses a virtual machine size which is not going to be available in Azure past July 15, 2024 . If you plan to use these lab(s) beyond July 15, 2024, please recreate these labs to avoid an outage for them beyond this date. {gpuOutage}',\r\n        description: \"A warning shown to users that have old labs showing them that they may not work in the future. {gpuOutage} is a link to the documentation regarding this warning with message id 'OldV1GpuLabsWarningLink'.\",\r\n    },\r\n    oldV1GpuLabWarning: {\r\n        id: 'OldV1GpuLabWarning',\r\n        defaultMessage: 'This lab may not be accessible after July 15, 2024. If you plan to use this lab beyond this date, please recreate the lab. {gpuOutage}',\r\n        description: \"A warning shown to users that have an old lab showing them that it may not work in the future. {gpuOutage} is a link to the documentation regarding this warning with message id 'OldV1GpuLabWarningLink'.\"\r\n    },\r\n    permissionPropagationText: {\r\n        id: 'PermissionPropagationText',\r\n        defaultMessage: 'Please do not refresh the page. We are propagating the permissions while we create the lab. If you refresh the page, you may experience a delay in accessing the newly created lab.',\r\n        description: 'A information shown to users about delay in showing new lab after refresh when permission needs propagation.',\r\n    },\r\n    moreActionsMenu: {\r\n        id: 'MoreActionsMenuAriaLabel',\r\n        defaultMessage: 'Access additional features',\r\n        description: 'AriaLabel text for ellipses button on command bar.',\r\n    },\r\n    incrementAriaLabel: {\r\n        id: 'IncrementAriaLabel',\r\n        defaultMessage: 'Increment the value by one.',\r\n        description: 'AriaLabel text for increment button on a spin button control.',\r\n    },\r\n    decrementAriaLabel: {\r\n        id: 'DecrementAriaLabel',\r\n        defaultMessage: 'Decrement the value by one.',\r\n        description: 'AriaLabel text for decrement button on a spin button control.',\r\n    },\r\n    stepGetAnAzureSubscription: {\r\n        id: 'LandingPageGetAzureSubscriptionHeader',\r\n        defaultMessage: '{numberSpan} Get an Azure subscription',\r\n        description: 'Instructions for setting up an Azure subscription where numberSpan contains the step number with markup.',\r\n    },\r\n    stepAddLabAccount: {\r\n        id: 'LandingPageAddALabAccountHeader',\r\n        defaultMessage: '{numberSpan} Create a lab plan (preview) or lab account',\r\n        description: 'Instructions for setting up a lab account where numberSpan contains the step number with markup.',\r\n    },\r\n    stepAddLabPlan: {\r\n        id: 'LandingPageAddALabPlanHeader',\r\n        defaultMessage: '{numberSpan} Create a lab plan',\r\n        description: 'Instructions for setting up a lab plan where numberSpan contains the step number with markup.',\r\n    },\r\n    sync: {\r\n        id: 'UserListSync',\r\n        defaultMessage: 'Sync',\r\n        description: 'Name of the command on the users page command bar for syncing the user list with aadGroupId',\r\n    },\r\n    lastUserListGroupSyncTime: {\r\n        id: 'lastUserListGroupSyncTime',\r\n        defaultMessage: 'Last synced from \"<aadGroupName></aadGroupName>\" {lastGroupSyncRelativeTime}',\r\n        description: 'Description about last user list group sync time',\r\n    },\r\n    searchLabAccountText: {\r\n        id: 'LabAccountMenuSearchLabAccountPlaceholder',\r\n        defaultMessage: 'Search items',\r\n        description: 'Placeholder for resource group or lab account picker search box',\r\n    },\r\n    signOutButtonText: {\r\n        id: 'SignOutButtonText',\r\n        defaultMessage: 'Sign out',\r\n        description: 'Text for sign out buttons across the site',\r\n    },\r\n    retry: {\r\n        id: 'RetryButtonText',\r\n        defaultMessage: 'Retry',\r\n        description: 'Text for retry buttons',\r\n    },\r\n    troubleshoot: {\r\n        id: 'CommonWordTroubleshoot',\r\n        defaultMessage: 'Redeploy',\r\n        description: 'Word for Troubleshoot, changing it to Redeploy',\r\n    },\r\n    grantAccess: {\r\n        id: 'grantAccessButtonText',\r\n        defaultMessage: 'Grant access',\r\n        description: 'Text for grant web storage access',\r\n    },\r\n    standardSSD: {\r\n        id: 'StandardSSD',\r\n        defaultMessage: 'Standard SSD',\r\n        description: 'Text for the Standard SSD (solid state drive) storage type',\r\n    },\r\n    premiumSSD: {\r\n        id: 'PremiumSSD',\r\n        defaultMessage: 'Premium SSD',\r\n        description: 'Text for the Premium SSD (solid state drive) storage type',\r\n    },\r\n    privacyLink: {\r\n        id: 'PrivacyLink',\r\n        defaultMessage: 'Privacy',\r\n        description: 'Link to our privacy policy',\r\n    },\r\n    termsOfUseLink: {\r\n        id: 'TermsOfUseLink',\r\n        defaultMessage: 'Terms of use',\r\n        description: 'Link to our terms of use',\r\n    },\r\n    lmsLabPlanSettings: {\r\n        id: 'LmsLabPlanSettings',\r\n        defaultMessage: 'Lab plans',\r\n        description: 'Title of the LMS connect flyout.',\r\n    },\r\n    feedback: {\r\n        id: 'Feedback',\r\n        defaultMessage: 'Feedback',\r\n        description: 'Text for the feedback link.',\r\n    },\r\n});\r\nexport default commonMessages;\r\n","import { Link } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { ErrorCode } from '../common/error-codes';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { Urls } from '../utils/constants';\r\nclass ErrorViewInjected extends React.Component {\r\n    render() {\r\n        const { errorCode, hasMultipleTenants, isLmsHosted, hasWebStorageAccessGranted } = this.props;\r\n        let image;\r\n        const imageWidth = 300;\r\n        let imageHeight = 300;\r\n        let message;\r\n        let messageDetails = undefined;\r\n        let buttonText = undefined;\r\n        let buttonOnClick = undefined;\r\n        let messageDetailsMaxWidth;\r\n        const popupBlockedMessage = (<FormattedMessage id=\"ErrorMessageInvalidGrantPopupBlocked\" defaultMessage=\"Pop-up blocked\" description=\"Error message displayed during an invalid grant flow when the authentication popup has been blocked.\"/>);\r\n        switch (errorCode) {\r\n            case ErrorCode.SessionExpired:\r\n            case ErrorCode.IdleSessionExpired:\r\n                image = 'error-expired';\r\n                message = (<FormattedMessage id=\"ErrorMessageSessionExpired\" defaultMessage=\"You have been logged out because your session has expired.\" description=\"The error message displayed on the error page when the user has an expired session.\"/>);\r\n                buttonText = this.props.intl.formatMessage(commonMessages.signInButtonText);\r\n                buttonOnClick = () => {\r\n                    this.props.clearError();\r\n                    this.props.signIn();\r\n                };\r\n                break;\r\n            case ErrorCode.InvalidGrant:\r\n                image = 'error-registration';\r\n                imageHeight = 250;\r\n                message = (<FormattedMessage id=\"ErrorMessageInvalidGrant\" defaultMessage=\"Sign in required\" description=\"Error message displayed during an invalid grant flow.\"/>);\r\n                messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsInvalidGrant\" defaultMessage=\"Additional steps are required in order to connect to Azure Lab Services. Please sign in to continue.\" description=\"Error message details displayed during an invalid grant flow.\"/>);\r\n                buttonText = this.props.intl.formatMessage(commonMessages.signInButtonText);\r\n                buttonOnClick = () => {\r\n                    this.props.requestUserConsent();\r\n                };\r\n                break;\r\n            case ErrorCode.InvalidGrantPopupBlocked:\r\n                image = 'error-access';\r\n                imageHeight = 250;\r\n                message = popupBlockedMessage;\r\n                messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsInvalidGrantPopupBlocked\" defaultMessage=\"We need to sign you in to your account, but your browser is set to block pop-ups. Please <Link>enabled pop-ups for this site</Link>, and try again.\" description=\"Error message details displayed during an invalid grant flow when the authentication popup has been blocked.\" values={{\r\n                    Link: (chunks) => (<Link href={Urls.PopupHelp} target=\"_blank\">\r\n                                    {chunks}\r\n                                </Link>),\r\n                }}/>);\r\n                buttonText = this.props.intl.formatMessage(commonMessages.signInButtonText);\r\n                buttonOnClick = () => {\r\n                    this.props.requestUserConsent();\r\n                };\r\n                break;\r\n            case ErrorCode.PopupWindowBlocked:\r\n                image = 'error-access';\r\n                imageHeight = 250;\r\n                message = popupBlockedMessage;\r\n                messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsBrowserPopupBlocked\" defaultMessage=\"Your browser is set to block pop-ups, which are required to access Azure Lab Services. Please <Link>enable pop-ups for this site</Link>, or try again.\" description=\"Error message details displayed when the popups has been blocked in the browser.\" values={{\r\n                    Link: (chunks) => (<Link href={Urls.PopupHelp} target=\"_blank\">\r\n                                    {chunks}\r\n                                </Link>),\r\n                }}/>);\r\n                messageDetailsMaxWidth = 335;\r\n                buttonText = this.props.intl.formatMessage(commonMessages.retry);\r\n                buttonOnClick = () => {\r\n                    this.props.clearError();\r\n                    this.props.signIn();\r\n                };\r\n                break;\r\n            case ErrorCode.AuthenticationFailed:\r\n                image = 'error-access';\r\n                message = (<FormattedMessage id=\"ErrorMessageAuthenticationFailed\" defaultMessage=\"We were unable to sign you in. Please try again.\" description=\"The error message displayed on the error page when we receive an authentication failure.\"/>);\r\n                buttonText = this.props.intl.formatMessage(commonMessages.signInButtonText);\r\n                buttonOnClick = () => {\r\n                    this.props.clearError();\r\n                    this.props.signIn();\r\n                };\r\n                break;\r\n            case ErrorCode.AuthorizationFailed:\r\n            case ErrorCode.LabAccountAuthorizationFailed:\r\n            case ErrorCode.LabAuthorizationFailed:\r\n                image = 'error-access';\r\n                message = (<FormattedMessage id=\"ErrorMessage401\" defaultMessage=\"You are not authorized to access this resource.\" description=\"The error message displayed on the error page when we receive a 401 response code.\"/>);\r\n                break;\r\n            case ErrorCode.LabFailed:\r\n                image = 'error-failed';\r\n                message = (<FormattedMessage id=\"ErrorMessageLabFailed\" defaultMessage=\"Your lab is in a failed state.\" description=\"The error message displayed on the error page when the selected lab is in a failed state.\"/>);\r\n                messageDetails = (<FormattedMessage id=\"ErrorMessageLabFailedDetails\" defaultMessage=\"Delete and recreate the lab, or contact your lab administrator or support to correct the problem.\" description=\"The error message displayed on the error page when the selected lab is in a failed state.\"/>);\r\n                break;\r\n            case ErrorCode.ResourceGroupNotFound:\r\n            case ErrorCode.ResourceNotFound:\r\n                image = 'error-not-found';\r\n                message = (<FormattedMessage id=\"ErrorMessageResourceNotFound\" defaultMessage=\"We couldn't find that resource.\" description=\"The error message displayed on the error page when the selected lab is in a failed state.\"/>);\r\n                messageDetails = hasMultipleTenants ? (<FormattedMessage id=\"ErrorMessageResouceNotFoundWhenMultiTenants\" defaultMessage=\"It may be deleted, in another organization, or you may no longer have access. Please select a different organization.\" description=\"The error message displayed on the error page when resouce is not found in the current tenant.\"/>) : (<FormattedMessage id=\"ErrorMessageResourceNotFoundDetails\" defaultMessage=\"It may be deleted or outside your organization. Please double check the URL.\" description=\"The error message displayed on the error page when the selected lab is in a failed state.\"/>);\r\n                break;\r\n            case ErrorCode.LtiTokenExpired:\r\n                image = 'session-expired';\r\n                imageHeight = 160;\r\n                messageDetailsMaxWidth = 335;\r\n                message = (<FormattedMessage id=\"ErrorMessageAccessExpired\" defaultMessage=\"Access expired\" description=\"Error message displayed when lti token is expired.\"/>);\r\n                messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsAccessExpired\" defaultMessage=\"Please refresh your browser to access Azure Lab Services.\" description=\"Error message details displayed when lti token is expired and users need to refresh the page to acquire a new token.\"/>);\r\n                break;\r\n            case ErrorCode.CookiesAndDataBlocked:\r\n                image = 'error-failed';\r\n                messageDetailsMaxWidth = 282;\r\n                message = (<FormattedMessage id=\"ErrorMessageCookiesAndDataBlocked\" defaultMessage=\"Cookies and data blocked\" description=\"Error message displayed when the browser is set to block third-party cookies and site data.\"/>);\r\n                messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsCookiesAndDataBlocked\" defaultMessage=\"To use Azure Lab Services with your learning management system, third-party cookies and site data must be enabled in your browser.\" description=\"Error message details displayed when the browser is set to block third-party cookies and site data.\"/>);\r\n                break;\r\n            case ErrorCode.LtiRequestStorageAccessNeeded:\r\n                switch (hasWebStorageAccessGranted) {\r\n                    case true:\r\n                        image = 'session-expired';\r\n                        messageDetailsMaxWidth = 282;\r\n                        message = (<FormattedMessage id=\"AccessGranted\" defaultMessage=\"Access granted\" description=\"Error message displayed when need to reload the window after access has been granted.\"/>);\r\n                        messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsReloadWindowNeeded\" defaultMessage=\"Thank you for granting access. Please reload this window to use Azure Lab Services with your learning management system.\" description=\"Error message details displayed when when need to reload the window after access has been granted.\"/>);\r\n                        break;\r\n                    default:\r\n                        image = 'error-failed';\r\n                        messageDetailsMaxWidth = 282;\r\n                        message = (<FormattedMessage id=\"ErrorMessageRequestAccessNeeded\" defaultMessage=\"Access needed\" description=\"Error message displayed when users need to request web storage access.\"/>);\r\n                        messageDetails = (<FormattedMessage id=\"ErrorMessageDetailsRequestAccessNeeded\" defaultMessage=\"To use Azure Lab Services with your learning management system, please grant access to the application.\" description=\"Error message details displayed when users need to request web storage access.\"/>);\r\n                        (buttonText = this.props.intl.formatMessage(commonMessages.grantAccess)),\r\n                            (buttonOnClick = () => {\r\n                                this.props.ltiRequestWebStorageAccess();\r\n                            });\r\n                        break;\r\n                }\r\n                break;\r\n            case ErrorCode.GenericError:\r\n            default:\r\n                image = 'error-general';\r\n                message = (<FormattedMessage id=\"ErrorMessageGeneral\" defaultMessage=\"Oops, something went wrong.\" description=\"The generic error message we display on the error page when we do not have a more specific message to display.\"/>);\r\n                messageDetails = !isLmsHosted ? (<FormattedMessage id=\"ErrorMessageDetailsGeneral\" defaultMessage=\"Please <Link>refresh</Link>, or contact your lab administrator if this problem continues.\" description=\"Error message displayed when we do not have a more specific message to display. The value of {link} is a link back to the home page of the site.\" values={{ Link: (chunks) => <Link href=\"https://labs.azure.com\">{chunks}</Link> }}/>) : (<FormattedMessage id=\"ErrorMessageDetailsGeneralLms\" defaultMessage=\"Please refresh your browser to access Azure Lab Services. Contact your lab administrator if this problem continues.\" description=\"Error message displayed when we do not have a more specific message to display in Lms.\"/>);\r\n                break;\r\n        }\r\n        return (<FullPageMessage image={image} imageSize={{ width: imageWidth, height: imageHeight }} messageDetailsMaxWidth={messageDetailsMaxWidth} message={message} messageDetails={messageDetails} buttonText={buttonText} buttonOnClick={buttonOnClick} styles={{ root: { backgroundColor: 'inherit' } }}/>);\r\n    }\r\n}\r\nexport const ErrorView = injectIntl(ErrorViewInjected);\r\nexport default ErrorView;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const IdentityActionType = {\r\n    ...CommonActionType,\r\n    SIGN_IN: 'SIGN_IN',\r\n    SIGN_IN_SUCCESS: 'SIGN_IN_SUCCESS',\r\n    SIGN_IN_REDIRECTING: 'SIGN_IN_REDIRECTING',\r\n    SIGN_IN_FAILED: 'SIGN_IN_FAILED',\r\n    SIGN_IN_ERROR: 'SIGN_IN_ERROR',\r\n    SIGN_OUT: 'SIGN_OUT',\r\n    SIGN_OUT_ERROR: 'SIGN_OUT_ERROR',\r\n    RESOLVE_SIGN_IN_RETURN_URL: 'RESOLVE_SIGN_IN_RETURN_URL',\r\n    LOAD_USER_PHOTO: 'LOAD_USER_PHOTO',\r\n    LOAD_USER_PHOTO_SUCCESS: 'LOAD_USER_PHOTO_SUCCESS',\r\n    LOAD_USER_PHOTO_FAILED: 'LOAD_USER_PHOTO_FAILED',\r\n    LOAD_USER_PHOTO_ERROR: 'LOAD_USER_PHOTO_ERROR',\r\n    LOAD_USER_SETTINGS: 'LOAD_USER_SETTINGS',\r\n    LOAD_USER_SETTINGS_SUCCESS: 'LOAD_USER_SETTINGS_SUCCESS',\r\n    LOAD_USER_SETTINGS_ERROR: 'LOAD_USER_SETTINGS_ERROR',\r\n    UPDATE_USER_SETTINGS: 'UPDATE_USER_SETTINGS',\r\n    UPDATE_USER_SETTINGS_SUCCESS: 'UPDATE_USER_SETTINGS_SUCCESS',\r\n    UPDATE_USER_SETTINGS_ERROR: 'UPDATE_USER_SETTINGS_ERROR',\r\n    UPDATE_USER_SETTINGS_EXISTS: 'UPDATE_USER_SETTINGS_EXISTS',\r\n    UPDATE_USER_SETTINGS_CANCELLED: 'UPDATE_USER_SETTINGS_CANCELLED',\r\n    GET_ACCESS_TOKEN: 'GET_ACCESS_TOKEN',\r\n    GET_ACCESS_TOKEN_SUCCESS: 'GET_ACCESS_TOKEN_SUCCESS',\r\n    GET_ACCESS_TOKEN_REDIRECTING: 'GET_ACCESS_TOKEN_REDIRECTING',\r\n    GET_ACCESS_TOKEN_FAILED: 'GET_ACCESS_TOKEN_FAILED',\r\n    GET_ACCESS_TOKEN_ERROR: 'GET_ACCESS_TOKEN_ERROR',\r\n    SET_TENANT_ID: 'SET_TENANT_ID',\r\n    SET_LOGIN_HINT: 'SET_LOGIN_HINT',\r\n    REQUEST_USER_CONSENT: 'REQUEST_USER_CONSENT',\r\n    REQUEST_USER_CONSENT_SUCCESS: 'REQUEST_USER_CONSENT_SUCCESS',\r\n    REQUEST_USER_CONSENT_FAILED: 'REQUEST_USER_CONSENT_FAILED',\r\n    REQUEST_USER_CONSENT_ERROR: 'REQUEST_USER_CONSENT_ERROR',\r\n    SIGN_IN_POPPING_UP: 'SIGN_IN_POPPING_UP',\r\n    LMS_COMPLETE_SIGN_OUT: 'LMS_COMPLETE_SIGN_OUT',\r\n};\r\n","export const settingsCacheKey = 'user_settings';\r\nexport const defaultSettings = {\r\n    lastUsedParentResource: '',\r\n    dismissedLabListFirstRun: false,\r\n    showRetirementAlert: true,\r\n    disableHints: false,\r\n    hasDismissedCovidBanner: false,\r\n    hasDismissedOldV1GpuLabBanner: false,\r\n};\r\nexport const settingsUpdateDebounceInMs = 5000;\r\n","import { IdentityActionType, } from './identity-actions';\r\nimport { IdentityErrorCode, graphScopes, armScopes, labsApiScopes } from '../../../data/models/identity';\r\nimport { defaultSettings } from '../../../data/models/user-settings';\r\nexport const signIn = (isInteractive = true, persistUrl = true) => ({\r\n    type: IdentityActionType.SIGN_IN,\r\n    isInteractive,\r\n    persistUrl,\r\n});\r\nexport const signInSuccess = (account) => ({\r\n    type: IdentityActionType.SIGN_IN_SUCCESS,\r\n    account,\r\n});\r\nexport const signInRedirecting = () => ({\r\n    type: IdentityActionType.SIGN_IN_REDIRECTING,\r\n});\r\nexport const signInPoppingUp = () => ({\r\n    type: IdentityActionType.SIGN_IN_POPPING_UP,\r\n});\r\nexport const signInFailed = (errorCode) => ({\r\n    type: IdentityActionType.SIGN_IN_FAILED,\r\n    errorCode: errorCode || IdentityErrorCode.Unknown,\r\n});\r\nexport const signInError = (errorCode, error) => ({\r\n    type: IdentityActionType.SIGN_IN_ERROR,\r\n    errorCode,\r\n    error,\r\n});\r\nexport const signOut = () => ({\r\n    type: IdentityActionType.SIGN_OUT,\r\n});\r\nexport const signOutError = (error) => ({\r\n    type: IdentityActionType.SIGN_OUT_ERROR,\r\n    errorCode: IdentityErrorCode.Unknown,\r\n    error,\r\n});\r\nexport const lmsCompleteSignOut = () => ({\r\n    type: IdentityActionType.LMS_COMPLETE_SIGN_OUT,\r\n});\r\nexport const resolveSignInReturnUrl = (returnUrl) => ({\r\n    type: IdentityActionType.RESOLVE_SIGN_IN_RETURN_URL,\r\n    returnUrl,\r\n});\r\nexport const loadUserPhoto = () => ({\r\n    type: IdentityActionType.LOAD_USER_PHOTO,\r\n});\r\nexport const loadUserPhotoSuccess = (imageUrl) => ({\r\n    type: IdentityActionType.LOAD_USER_PHOTO_SUCCESS,\r\n    imageUrl,\r\n});\r\nexport const loadUserPhotoFailed = () => ({\r\n    type: IdentityActionType.LOAD_USER_PHOTO_FAILED,\r\n});\r\nexport const loadUserPhotoError = (error) => ({\r\n    type: IdentityActionType.LOAD_USER_PHOTO_ERROR,\r\n    error,\r\n});\r\nexport const loadUserSettings = (canRedirect = false) => ({\r\n    type: IdentityActionType.LOAD_USER_SETTINGS,\r\n    canRedirect,\r\n});\r\nexport const loadUserSettingsSuccess = (settings) => ({\r\n    type: IdentityActionType.LOAD_USER_SETTINGS_SUCCESS,\r\n    settings,\r\n});\r\nexport const loadUserSettingsError = (error, cachedSettings) => ({\r\n    type: IdentityActionType.LOAD_USER_SETTINGS_ERROR,\r\n    error,\r\n    cachedSettings,\r\n});\r\nexport const updateUserSettings = (settings) => ({\r\n    type: IdentityActionType.UPDATE_USER_SETTINGS,\r\n    settings,\r\n});\r\nexport const toggleDisableHints = (disableHints) => updateUserSettings({ disableHints });\r\nexport const dismissLabListFirstRun = () => updateUserSettings({ dismissedLabListFirstRun: true });\r\nexport const dismissRetirementAlert = () => updateUserSettings({ showRetirementAlert: false });\r\nexport const resetShowRetirementAlert = () => updateUserSettings({ showRetirementAlert: true });\r\nexport const dismissCovidBanner = () => updateUserSettings({ hasDismissedCovidBanner: true });\r\nexport const dismissOldV1GpuLabBanner = () => updateUserSettings({ hasDismissedOldV1GpuLabBanner: true });\r\nexport const resetUserSettings = () => updateUserSettings(defaultSettings);\r\nexport const updateUserSettingsSuccess = () => ({\r\n    type: IdentityActionType.UPDATE_USER_SETTINGS_SUCCESS,\r\n});\r\nexport const updateUserSettingsError = (error) => ({\r\n    type: IdentityActionType.UPDATE_USER_SETTINGS_ERROR,\r\n    error,\r\n});\r\nexport const updateUserSettingsExists = () => ({\r\n    type: IdentityActionType.UPDATE_USER_SETTINGS_EXISTS,\r\n});\r\nexport const updateUserSettingsCancelled = () => ({\r\n    type: IdentityActionType.UPDATE_USER_SETTINGS_CANCELLED,\r\n});\r\nexport const getAccessToken = (resolve, reject, scopes, tenantId, canRedirect = false, isErrorTerminal = true, returnUrl) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN,\r\n    scopes,\r\n    isErrorTerminal,\r\n    tenantId,\r\n    resolve,\r\n    reject,\r\n    canRedirect,\r\n    returnUrl,\r\n});\r\nexport const getArmAccessToken = (resolve, reject, tenantId, canRedirect = false, returnUrl) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN,\r\n    scopes: armScopes,\r\n    isErrorTerminal: true,\r\n    tenantId,\r\n    resolve,\r\n    reject,\r\n    canRedirect,\r\n    returnUrl,\r\n});\r\nexport const getGraphAccessToken = (resolve, reject, tenantId, canRedirect = false, returnUrl) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN,\r\n    scopes: graphScopes,\r\n    isErrorTerminal: false,\r\n    tenantId,\r\n    resolve,\r\n    reject,\r\n    canRedirect,\r\n    returnUrl,\r\n});\r\nexport const getLabsApiAccessToken = (resolve, reject, tenantId, canRedirect = false, returnUrl) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN,\r\n    scopes: labsApiScopes,\r\n    isErrorTerminal: true,\r\n    tenantId,\r\n    resolve,\r\n    reject,\r\n    canRedirect,\r\n    returnUrl,\r\n});\r\nexport const getAccessTokenSuccess = () => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN_SUCCESS,\r\n});\r\nexport const getAccessTokenRedirecting = (scopes, tenantId) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN_REDIRECTING,\r\n    scopes,\r\n    tenantId,\r\n});\r\nexport const getAccessTokenFailed = (errorCode) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN_FAILED,\r\n    errorCode: errorCode || IdentityErrorCode.Unknown,\r\n});\r\nexport const getAccessTokenError = (errorCode, error) => ({\r\n    type: IdentityActionType.GET_ACCESS_TOKEN_ERROR,\r\n    errorCode,\r\n    error,\r\n});\r\nexport const setTenantId = (tenantId) => ({\r\n    type: IdentityActionType.SET_TENANT_ID,\r\n    tenantId,\r\n});\r\nexport const setLoginHint = (loginHint) => ({\r\n    type: IdentityActionType.SET_LOGIN_HINT,\r\n    loginHint,\r\n});\r\nexport const requestUserConsent = (scopes) => ({\r\n    type: IdentityActionType.REQUEST_USER_CONSENT,\r\n    scopes,\r\n});\r\nexport const requestUserConsentSuccess = (result) => ({\r\n    type: IdentityActionType.REQUEST_USER_CONSENT_SUCCESS,\r\n    result,\r\n});\r\nexport const requestUserConsentFailed = () => ({\r\n    type: IdentityActionType.REQUEST_USER_CONSENT_FAILED,\r\n});\r\nexport const requestUserConsentError = (error) => ({\r\n    type: IdentityActionType.REQUEST_USER_CONSENT_ERROR,\r\n    error,\r\n});\r\nconst actions = {\r\n    signIn,\r\n    signInSuccess,\r\n    signInRedirecting,\r\n    signInFailed,\r\n    signInError,\r\n    signOut,\r\n    signOutError,\r\n    resolveSignInReturnUrl,\r\n    loadUserPhoto,\r\n    loadUserPhotoSuccess,\r\n    loadUserPhotoFailed,\r\n    loadUserPhotoError,\r\n    loadUserSettings,\r\n    loadUserSettingsSuccess,\r\n    loadUserSettingsError,\r\n    updateUserSettings,\r\n    toggleDisableHints,\r\n    dismissCovidBanner,\r\n    dismissLabListFirstRun,\r\n    dismissRetirementAlert,\r\n    resetShowRetirementAlert,\r\n    resetUserSettings,\r\n    updateUserSettingsSuccess,\r\n    updateUserSettingsError,\r\n    getAccessToken,\r\n    getArmAccessToken,\r\n    getGraphAccessToken,\r\n    getAccessTokenSuccess,\r\n    getAccessTokenRedirecting,\r\n    getAccessTokenFailed,\r\n    getAccessTokenError,\r\n    setTenantId,\r\n    setLoginHint,\r\n    requestUserConsent,\r\n    requestUserConsentSuccess,\r\n    requestUserConsentFailed,\r\n    requestUserConsentError,\r\n    signInPoppingUp,\r\n    lmsCompleteSignOut,\r\n    updateUserSettingsCancelled,\r\n};\r\nexport default actions;\r\n","import * as React from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport { injectIntl, defineMessages } from 'react-intl';\r\nimport { commonMessages } from '../../language/common-messages';\r\nconst messages = defineMessages({\r\n    pageTitleWithSubtitle: {\r\n        id: 'PageTitleWithSubtitle',\r\n        defaultMessage: '{subtitle} - Azure Lab Services',\r\n        description: 'The page title to display when we have a subtitle. The value of {subtitle} is the subtitle.',\r\n    },\r\n});\r\nclass PageTitleInjected extends React.Component {\r\n    render() {\r\n        const { subtitle } = this.props;\r\n        const titleMessage = subtitle\r\n            ? this.props.intl.formatMessage(messages.pageTitleWithSubtitle, {\r\n                subtitle,\r\n            })\r\n            : this.props.intl.formatMessage(commonMessages.azureLabServices);\r\n        return (<Helmet>\r\n                <title>{titleMessage}</title>\r\n            </Helmet>);\r\n    }\r\n}\r\nexport const PageTitle = injectIntl(PageTitleInjected);\r\nexport default PageTitle;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const CommonLabParentResourceActionType = {\r\n    SELECT_LAB_PARENT_RESOURCE: 'SELECT_LAB_PARENT_RESOURCE',\r\n    CLEAR_SELECTED_LAB_PARENT_RESOURCE: 'CLEAR_SELECTED_LAB_PARENT_RESOURCE',\r\n};\r\nexport const LabParentResourceActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_LAB_PARENT_RESOURCES: 'LIST_LAB_PARENT_RESOURCES',\r\n    LIST_LAB_PARENT_RESOURCES_SUCCESS: 'LIST_LAB_PARENT_RESOURCES_SUCCESS',\r\n    LIST_LAB_PARENT_RESOURCES_ERROR: 'LIST_LAB_PARENT_RESOURCES_ERROR',\r\n    REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES: 'REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES',\r\n    REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_SUCCESS: 'REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_SUCCESS',\r\n    REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_ERROR: 'REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_ERROR',\r\n};\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const CommonLabActionType = {\r\n    SELECT_LAB: 'SELECT_LAB',\r\n    CREATE_LAB_SUCCESS: 'CREATE_LAB_SUCCESS',\r\n    UPDATE_LAB_SUCCESS: 'UPDATE_LAB_SUCCESS',\r\n    CLEAR_SELECTED_LAB: 'CLEAR_SELECTED_LAB',\r\n    PUBLISH_LAB: 'PUBLISH_LAB',\r\n};\r\nexport const LabActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_LABS: 'LIST_LABS',\r\n    LIST_LABS_SUCCESS: 'LIST_LABS_SUCCESS',\r\n    LIST_LABS_ERROR: 'LIST_LABS_ERROR',\r\n    LIST_LABS_CANCELLED: 'LIST_LABS_CANCELLED',\r\n    GET_LAB: 'GET_LAB',\r\n    GET_LAB_SUCCESS: 'GET_LAB_SUCCESS',\r\n    GET_LAB_CANCELLED: 'GET_LAB_CANCELLED',\r\n    GET_LAB_ERROR: 'GET_LAB_ERROR',\r\n    FILTER_BY_LAB_ACCESS_TYPE: 'FILTER_BY_LAB_ACCESS_TYPE',\r\n    DELETE_LAB: 'DELETE_LAB',\r\n    DELETE_LAB_SUCCESS: 'DELETE_LAB_SUCCESS',\r\n    DELETE_LAB_ERROR: 'DELETE_LAB_ERROR',\r\n    CHECK_VNEXT_CREATELAB_PERMISSION: 'CHECK_VNEXT_CREATELAB_PERMISSION',\r\n    UPDATE_VNEXT_CREATELAB_PERMISSION: 'UPDATE_VNEXT_CREATELAB_PERMISSION',\r\n    UPDATE_VNEXT_PERMISSION_PROPAGATION: 'UPDATE_VNEXT_PERMISSION_PROPAGATION',\r\n    ADD_VNEXT_PERMISSION_PROPAGATING_LAB: 'ADD_VNEXT_PERMISSION_PROPAGATING_LAB',\r\n    REMOVE_VNEXT_PERMISSION_PROPAGATING_LAB: 'REMOVE_VNEXT_PERMISSION_PROPAGATING_LAB',\r\n    CREATE_LAB: 'CREATE_LAB',\r\n    CREATE_LAB_ERROR: 'CREATE_LAB_ERROR',\r\n    UPDATE_LAB: 'UPDATE_LAB',\r\n    UPDATE_LAB_ERROR: 'UPDATE_LAB_ERROR',\r\n    UPDATE_LAB_ACCESS_MODE: 'UPDATE_LAB_ACCESS_MODE',\r\n    UPDATE_LAB_ACCESS_MODE_SUCCESS: 'UPDATE_LAB_ACCESS_MODE_SUCCESS',\r\n    UPDATE_LAB_ACCESS_MODE_ERROR: 'UPDATE_LAB_ACCESS_MODE_ERROR',\r\n    CLEAR_LAB_ERROR: 'CLEAR_LAB_ERROR',\r\n    CLEAR_LAB_UPDATE_ERROR: 'CLEAR_LAB_UPDATE_ERROR',\r\n    CLEAR_LAB_CAPACITY_EXCEEDS_CORES_ERROR: 'CLEAR_LAB_CAPACITY_EXCEEDS_CORES_ERROR',\r\n    CLEAR_PUBLISH_LAB_ERROR: 'CLEAR_PUBLISH_LAB_ERROR',\r\n    POLL_LAB_START: 'POLL_LAB_START',\r\n    POLL_LAB_STOP: 'POLL_LAB_STOP',\r\n    POLL_LAB_CANCELLED: 'POLL_LAB_CANCELLED',\r\n    SYNC_LAB_USERS: 'SYNC_LAB_USERS',\r\n    SYNC_LAB_USERS_ERROR: 'SYNC_LAB_USERS_ERROR',\r\n    POLL_LAB_LIST_START: 'POLL_LAB_LIST_START',\r\n    POLL_LAB_LIST_STOP: 'POLL_LAB_LIST_STOP',\r\n    POLL_LAB_LIST_CANCELLED: 'POLL_LAB_LIST_CANCELLED',\r\n    LOAD_SUBSCRIPTION_VNEXT_LABS_ERROR: 'LOAD_SUBSCRIPTION_VNEXT_LABS_ERROR',\r\n    PUBLISH_LAB_ACCEPTED: 'PUBLISH_LAB_ACCEPTED',\r\n    PUBLISH_LAB_ERROR: 'PUBLISH_LAB_ERROR',\r\n    PUBLISH_LAB_CANCELLED: 'PUBLISH_LAB_CANCELLED',\r\n    UPDATE_LAB_METADATA: 'UPDATE_LAB_METADATA',\r\n    UPDATE_LAB_METADATA_SUCCESS: 'UPDATE_LAB_METADATA_SUCCESS',\r\n    UPDATE_LAB_METADATA_ERROR: 'UPDATE_LAB_METADATA_ERROR',\r\n    GET_LAB_METADATA: 'GET_LAB_METADATA',\r\n    GET_LAB_METADATA_SUCCESS: 'GET_LAB_METADATA_SUCCESS',\r\n    GET_LAB_METADATA_ERROR: 'GET_LAB_METADATA_ERROR',\r\n};\r\n","export const Context = {\r\n    VNext: 'VNext',\r\n};\r\nexport default Context;\r\n","import { LabUpdateOperation } from '../../../data/models/lab';\r\nimport { LabActionType, } from './lab-actions';\r\nimport Context from '../../action-context';\r\nexport const selectLab = (labId) => ({\r\n    type: LabActionType.SELECT_LAB,\r\n    labId,\r\n});\r\nexport const filterByLabAccessType = (labAccessType) => ({\r\n    type: LabActionType.FILTER_BY_LAB_ACCESS_TYPE,\r\n    labAccessType,\r\n});\r\nexport const listLabs = (labParentId, filterWriteAccess = true) => ({\r\n    type: LabActionType.LIST_LABS,\r\n    labParentId,\r\n    filterWriteAccess,\r\n});\r\nexport const listLabsSuccess = (labs) => ({\r\n    type: LabActionType.LIST_LABS_SUCCESS,\r\n    labs,\r\n});\r\nexport const listVNextLabsSuccess = (labs, labParentId) => ({\r\n    type: LabActionType.LIST_LABS_SUCCESS,\r\n    // when the lab parent id specified in the url is a lab account, the vnext-middleware won't add context for the action since the current lab parent id is a lab account.\r\n    // add the action context here so that it will use vNext reducer to update vNext store.\r\n    context: Context.VNext,\r\n    labs,\r\n    labParentId,\r\n});\r\nexport const listLabsError = (error) => ({\r\n    type: LabActionType.LIST_LABS_ERROR,\r\n    error,\r\n});\r\nexport const listLabsCancelled = () => ({\r\n    type: LabActionType.LIST_LABS_CANCELLED,\r\n});\r\nexport const getLab = (labId, includeRoles = true, includeMetadata = false) => ({\r\n    type: LabActionType.GET_LAB,\r\n    labId,\r\n    includeRoles,\r\n    includeMetadata,\r\n});\r\nexport const getLabCancelled = () => ({\r\n    type: LabActionType.GET_LAB_CANCELLED,\r\n});\r\nexport const getLabSuccess = (lab) => ({\r\n    type: LabActionType.GET_LAB_SUCCESS,\r\n    lab,\r\n});\r\nexport const getVNextLabSuccess = (lab) => ({\r\n    type: LabActionType.GET_LAB_SUCCESS,\r\n    lab,\r\n});\r\nexport const getLabError = (error) => ({\r\n    type: LabActionType.GET_LAB_ERROR,\r\n    error,\r\n});\r\nexport const deleteLab = (labId) => ({\r\n    type: LabActionType.DELETE_LAB,\r\n    labId,\r\n});\r\nexport const deleteLabSuccess = (labId) => ({\r\n    type: LabActionType.DELETE_LAB_SUCCESS,\r\n    labId,\r\n});\r\nexport const deleteLabError = (error) => ({\r\n    type: LabActionType.DELETE_LAB_ERROR,\r\n    error,\r\n});\r\nexport const createLab = (labParentId, props, getCompleteRoute) => ({\r\n    type: LabActionType.CREATE_LAB,\r\n    labParentId,\r\n    props,\r\n    getCompleteRoute,\r\n});\r\nexport const checkVnextCreatelabPermission = (labPlanId) => ({\r\n    type: LabActionType.CHECK_VNEXT_CREATELAB_PERMISSION,\r\n    labPlanId,\r\n});\r\nexport const updateVnextCreatelabPermission = (createLabPermissionOnLabPlan) => ({\r\n    type: LabActionType.UPDATE_VNEXT_CREATELAB_PERMISSION,\r\n    createLabPermissionOnLabPlan,\r\n});\r\nexport const updateVnextPermissionPropagation = (vNextLabPermissionPropagating) => ({\r\n    type: LabActionType.UPDATE_VNEXT_PERMISSION_PROPAGATION,\r\n    vNextLabPermissionPropagating,\r\n});\r\nexport const addVnextPermissionPropagatingLab = (lab, labParentId) => ({\r\n    type: LabActionType.ADD_VNEXT_PERMISSION_PROPAGATING_LAB,\r\n    // when the lab parent id specified in the url is a lab account, the vnext-middleware won't add context for the action since the current lab parent id is a lab account.\r\n    // add the action context here so that it will use vNext reducer to update vNext store.\r\n    context: Context.VNext,\r\n    lab,\r\n    labParentId,\r\n});\r\nexport const removeVnextPermissionPropagatingLab = (lab, labParentId) => ({\r\n    type: LabActionType.REMOVE_VNEXT_PERMISSION_PROPAGATING_LAB,\r\n    // when the lab parent id specified in the url is a lab account, the vnext-middleware won't add context for the action since the current lab parent id is a lab account.\r\n    // add the action context here so that it will use vNext reducer to update vNext store.\r\n    context: Context.VNext,\r\n    lab,\r\n    labParentId,\r\n});\r\nexport const createVNextLab = (labParentId, props, getCompleteRoute) => ({\r\n    type: LabActionType.CREATE_LAB,\r\n    labParentId,\r\n    props,\r\n    getCompleteRoute,\r\n});\r\nexport const createLabSuccess = (lab) => ({\r\n    type: LabActionType.CREATE_LAB_SUCCESS,\r\n    lab,\r\n});\r\nexport const createVNextLabSuccess = (lab) => ({\r\n    type: LabActionType.CREATE_LAB_SUCCESS,\r\n    lab,\r\n});\r\nexport const createLabError = (error) => ({\r\n    type: LabActionType.CREATE_LAB_ERROR,\r\n    error,\r\n});\r\nexport const updateLab = (lab, updateOperation = LabUpdateOperation.Update) => ({\r\n    type: LabActionType.UPDATE_LAB,\r\n    lab,\r\n    updateOperation,\r\n});\r\nexport const updateLabSuccess = (lab) => ({\r\n    type: LabActionType.UPDATE_LAB_SUCCESS,\r\n    lab,\r\n});\r\nexport const updateLabError = (error) => ({\r\n    type: LabActionType.UPDATE_LAB_ERROR,\r\n    error,\r\n});\r\nexport const updateLabAccessMode = (labId, userAccessMode) => ({\r\n    type: LabActionType.UPDATE_LAB_ACCESS_MODE,\r\n    labId,\r\n    userAccessMode,\r\n});\r\nexport const updateVNextLabAccessMode = (labId, openAccess) => ({\r\n    type: LabActionType.UPDATE_LAB_ACCESS_MODE,\r\n    labId,\r\n    openAccess,\r\n});\r\nexport const updateLabAccessModeSuccess = () => ({\r\n    type: LabActionType.UPDATE_LAB_ACCESS_MODE_SUCCESS,\r\n});\r\nexport const updateLabAccessModeError = (labId) => ({\r\n    type: LabActionType.UPDATE_LAB_ACCESS_MODE_ERROR,\r\n    labId,\r\n});\r\nexport const clearLabsError = (id, errorIndex) => ({\r\n    type: LabActionType.CLEAR_LAB_ERROR,\r\n    id,\r\n    errorIndex,\r\n});\r\nexport const clearPublishLabError = (id) => ({\r\n    type: LabActionType.CLEAR_PUBLISH_LAB_ERROR,\r\n    id,\r\n});\r\nexport const clearLabUpdateError = () => ({\r\n    type: LabActionType.CLEAR_LAB_UPDATE_ERROR,\r\n});\r\nexport const clearLabCapacityExceedsCoresError = () => ({\r\n    type: LabActionType.CLEAR_LAB_CAPACITY_EXCEEDS_CORES_ERROR,\r\n});\r\nexport const pollLabStart = (id, intervalMs, initialDelayMs) => ({\r\n    type: LabActionType.POLL_LAB_START,\r\n    id,\r\n    intervalMs,\r\n    initialDelayMs,\r\n});\r\nexport const pollLabUntilTerminalStateStart = (id, intervalMs, initialDelayMs, shouldStopWhenTerminalState = true) => ({\r\n    type: LabActionType.POLL_LAB_START,\r\n    id,\r\n    intervalMs,\r\n    initialDelayMs,\r\n    shouldStopWhenTerminalState,\r\n});\r\nexport const pollLabStop = () => ({\r\n    type: LabActionType.POLL_LAB_STOP,\r\n});\r\nexport const pollLabCancelled = () => ({\r\n    type: LabActionType.POLL_LAB_CANCELLED,\r\n});\r\nexport const syncLabUsers = (labId) => ({\r\n    type: LabActionType.SYNC_LAB_USERS,\r\n    labId,\r\n});\r\nexport const syncLabUsersError = (labId, syncUsersError) => ({\r\n    type: LabActionType.SYNC_LAB_USERS_ERROR,\r\n    labId,\r\n    syncUsersError,\r\n});\r\nexport const pollLabListStart = (labParentId, intervalMs, initialDelayMs) => ({\r\n    type: LabActionType.POLL_LAB_LIST_START,\r\n    labParentId,\r\n    intervalMs,\r\n    initialDelayMs,\r\n});\r\nexport const pollLabListCancelled = () => ({\r\n    type: LabActionType.POLL_LAB_LIST_CANCELLED,\r\n});\r\nexport const pollLabListStop = () => ({\r\n    type: LabActionType.POLL_LAB_LIST_STOP,\r\n});\r\nexport const loadSubscriptionVNextLabsError = (subscription, error, resourceGroupName) => ({\r\n    type: LabActionType.LOAD_SUBSCRIPTION_VNEXT_LABS_ERROR,\r\n    context: Context.VNext,\r\n    subscription,\r\n    error,\r\n    resourceGroupName,\r\n});\r\nexport const updateVNextLab = (labId, labUpdate, updateOperation = LabUpdateOperation.Update) => ({\r\n    type: LabActionType.UPDATE_LAB,\r\n    labId,\r\n    labUpdate,\r\n    updateOperation,\r\n});\r\nexport const updateVNextLabSuccess = (lab) => ({\r\n    type: LabActionType.UPDATE_LAB_SUCCESS,\r\n    lab,\r\n});\r\nexport const clearSelectedLab = () => ({\r\n    type: LabActionType.CLEAR_SELECTED_LAB,\r\n});\r\nexport const publishVNextLab = (labId, capacity, shouldUpdateCapacity) => ({\r\n    type: LabActionType.PUBLISH_LAB,\r\n    labId,\r\n    capacity,\r\n    shouldUpdateCapacity,\r\n});\r\nexport const publishVNextLabAccepted = (operation) => ({\r\n    type: LabActionType.PUBLISH_LAB_ACCEPTED,\r\n    operation,\r\n});\r\nexport const publishVNextLabError = (labId, error) => ({\r\n    type: LabActionType.PUBLISH_LAB_ERROR,\r\n    labId,\r\n    error,\r\n});\r\nexport const publishVNextLabCancelled = (labId) => ({\r\n    type: LabActionType.PUBLISH_LAB_CANCELLED,\r\n    labId,\r\n});\r\nexport const getLabMetadata = (labId) => ({\r\n    type: LabActionType.GET_LAB_METADATA,\r\n    labId,\r\n});\r\nexport const getLabMetadataSuccess = (labId, labMetadata) => ({\r\n    type: LabActionType.GET_LAB_METADATA_SUCCESS,\r\n    labId,\r\n    labMetadata,\r\n});\r\nexport const getLabMetadataError = (error) => ({\r\n    type: LabActionType.GET_LAB_METADATA_ERROR,\r\n    error,\r\n});\r\nconst actions = {\r\n    selectLab,\r\n    filterByLabAccessType,\r\n    listLabs,\r\n    listLabsSuccess,\r\n    listLabsError,\r\n    listLabsCancelled,\r\n    getLab,\r\n    getLabCancelled,\r\n    getLabSuccess,\r\n    getLabError,\r\n    deleteLab,\r\n    deleteLabSuccess,\r\n    deleteLabError,\r\n    createLab,\r\n    createLabSuccess,\r\n    createLabError,\r\n    updateLab,\r\n    updateLabSuccess,\r\n    updateLabError,\r\n    updateLabAccessMode,\r\n    updateLabAccessModeSuccess,\r\n    updateLabAccessModeError,\r\n    clearLabsError,\r\n    clearPublishLabError,\r\n    clearLabUpdateError,\r\n    clearLabCapacityExceedsCoresError,\r\n    pollLabStart,\r\n    pollLabStop,\r\n    pollLabCancelled,\r\n    syncLabUsers,\r\n    syncLabUsersError,\r\n    pollLabListStart,\r\n    pollLabListCancelled,\r\n    pollLabListStop,\r\n    listVNextLabsSuccess,\r\n    loadSubscriptionVNextLabsError,\r\n    checkVnextCreatelabPermission,\r\n    updateVnextCreatelabPermission,\r\n    updateVnextPermissionPropagation,\r\n    addVnextPermissionPropagatingLab,\r\n    removeVnextPermissionPropagatingLab,\r\n    createVNextLab,\r\n    createVNextLabSuccess,\r\n    updateVNextLab,\r\n    updateVNextLabSuccess,\r\n    clearSelectedLab,\r\n    getVNextLabSuccess,\r\n    updateVNextLabAccessMode,\r\n    publishVNextLab,\r\n    publishVNextLabCancelled,\r\n    publishVNextLabError,\r\n    pollLabUntilTerminalStateStart,\r\n    getLabMetadataError,\r\n    getLabMetadata,\r\n    getLabMetadataSuccess,\r\n};\r\nexport default actions;\r\n","import { CommandButton, DefaultButton, Dropdown, Icon } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nconst messages = defineMessages({\r\n    featureMenu: {\r\n        id: 'FeatureMenu',\r\n        defaultMessage: 'Preview features',\r\n        description: 'Title of a preview feature menu.',\r\n    },\r\n});\r\nconst FeatureMenuInjected = (props) => {\r\n    const { intl, styles, allFeatures, enabledFeatures, enableFeature, disableFeature, resetUserSettings } = props;\r\n    const title = intl.formatMessage(messages.featureMenu);\r\n    const options = allFeatures.map((feature) => ({\r\n        key: feature.toLowerCase(),\r\n        text: feature,\r\n    }));\r\n    const toggleFeature = (feature) => {\r\n        if (enabledFeatures.includes(feature)) {\r\n            disableFeature(feature);\r\n        }\r\n        else {\r\n            enableFeature(feature);\r\n        }\r\n    };\r\n    const button = (<CommandButton styles={styles} title={title} ariaLabel={title}>\r\n            <Icon iconName=\"GiftboxOpen\" styles={{ root: { fontSize: 16, padding: 16 } }}/>\r\n        </CommandButton>);\r\n    // fabric components do not support immutables\r\n    const selectedKeys = enabledFeatures.toArray();\r\n    return (<Dropdown styles={{\r\n        title: { padding: 0, border: 0, height: 'unset' },\r\n        caretDown: { display: 'none' },\r\n    }} dropdownWidth={200} multiSelect={true} options={options} selectedKeys={selectedKeys} onChange={(_, option) => toggleFeature(option.key)} onRenderList={(renderProps, defaultRender) => {\r\n        return (<>\r\n                        {defaultRender && defaultRender(renderProps)}\r\n                        \r\n                        <DefaultButton text=\"Reset User Settings\" onClick={resetUserSettings}/>\r\n                    </>);\r\n    }} onRenderTitle={() => button} onRenderPlaceholder={() => button}/>);\r\n};\r\nexport const FeatureMenu = injectIntl(FeatureMenuInjected);\r\nexport default FeatureMenu;\r\n","import * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { DefaultButton, Icon } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nimport { commonMessages } from '../../language/common-messages';\r\nimport './home-button.css';\r\nexport const HomeButton = (props) => {\r\n    const { navigateHome, styles, isLmsIntegrationEnabled } = props;\r\n    const azureSpan = (<span className=\"home-button__logo-brand ms-fontWeight-semibold\">\r\n            <FormattedMessage {...commonMessages.azure}/>\r\n        </span>);\r\n    const defaultStyles = {\r\n        root: {\r\n            padding: '0 15px 0 15px',\r\n            margin: 0,\r\n            height: '100%',\r\n        },\r\n        flexContainer: {\r\n            flex: '1 1 0',\r\n            padding: 0,\r\n            margin: 0,\r\n            justifyContent: 'flex-start',\r\n        },\r\n    };\r\n    const buttonStyles = _.merge({}, defaultStyles, styles || {});\r\n    return (<DefaultButton onClick={navigateHome} styles={buttonStyles}>\r\n            {!isLmsIntegrationEnabled && <Icon iconName=\"logo\" className=\"home-button__logo-icon\"/>}\r\n            {isLmsIntegrationEnabled && <Icon iconName=\"lms-logo\" className=\"home-button__logo-icon\"/>}\r\n            <span className=\"ms-fontWeight-semibold\">\r\n                <FormattedMessage id=\"HeaderFormattedAzureLabServicesLabel\" defaultMessage=\"{azureSpan} Lab Services\" description=\"Used to format the product name, Azure Lab Services, with special formatting around the word Azure. The parameter {azureSpan} will contain this formatted version of the word Azure.\" values={{ azureSpan }}/>\r\n            </span>\r\n        </DefaultButton>);\r\n};\r\n","import * as React from 'react';\r\nimport { DefaultButton, Spinner, SpinnerSize } from '@fluentui/react';\r\nimport { useIntl } from 'react-intl';\r\nimport { commonMessages } from '../../../language/common-messages';\r\nexport const LoadingItem = (props) => {\r\n    const intl = useIntl();\r\n    const { formatMessage } = intl;\r\n    const label = formatMessage(commonMessages.loadingText);\r\n    return (<DefaultButton {...props}>\r\n            <Spinner labelPosition=\"right\" size={SpinnerSize.medium} label={label} styles={{\r\n        root: {\r\n            height: '100%',\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n            verticalAlign: 'middle',\r\n            backgroundColor: 'inherit',\r\n            color: 'inherit',\r\n        },\r\n        label: {\r\n            backgroundColor: 'inherit',\r\n            color: 'inherit',\r\n        },\r\n    }}/>\r\n        </DefaultButton>);\r\n};\r\nexport default LoadingItem;\r\n","import * as React from 'react';\r\nimport { DefaultButton } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nexport const DropdownItem = (props) => {\r\n    const { item, onRenderItem, onClick, styles } = props;\r\n    const defaultStyles = {\r\n        root: {\r\n            padding: '0 4px 0 4px',\r\n            width: '100%',\r\n            backgroundColor: 'inherit',\r\n            border: 0,\r\n            height: '36px',\r\n        },\r\n    };\r\n    const buttonStyles = _.merge({}, defaultStyles, styles);\r\n    return (<DefaultButton onClick={onClick} role=\"menuitem\" styles={buttonStyles}>\r\n            {onRenderItem(item)}\r\n        </DefaultButton>);\r\n};\r\nexport default DropdownItem;\r\n","import * as React from 'react';\r\nimport { DefaultButton, SearchBox, } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nimport { LoadingItem } from './loading-item';\r\nimport { DropdownItem } from './dropdown-item';\r\nconst PageHeaderFilteredDropdownExpanded = (props) => {\r\n    const { placeholder, ariaLabel, filter, menuListProps, onChange, defaultRender } = props;\r\n    return (<>\r\n            <div style={{ borderBottom: '1px solid #d6d6d6' }}>\r\n                <SearchBox ariaLabel={ariaLabel} placeholder={placeholder} value={filter} onChange={(_, value) => onChange(value || '')} styles={{\r\n        root: {\r\n            margin: '10px',\r\n        },\r\n    }}/>\r\n            </div>\r\n            <div style={{ verticalAlign: 'middle' }}>{defaultRender(menuListProps)}</div>\r\n            {!!props.onRenderFooter && (<div style={{\r\n        borderTop: '1px solid #d6d6d6',\r\n        paddingLeft: '8px',\r\n        paddingTop: '4px',\r\n        paddingBottom: '4px',\r\n    }}>\r\n                    {props.onRenderFooter()}\r\n                </div>)}\r\n        </>);\r\n};\r\nexport class PageHeaderFilteredDropdown extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            filter: '',\r\n        };\r\n        this._updateFilter = this._updateFilter.bind(this);\r\n    }\r\n    _updateFilter(filter) {\r\n        this.setState({\r\n            filter,\r\n        });\r\n    }\r\n    render() {\r\n        const { items, filterPlaceholder, filterAriaLabel, selected, isLoading, minExpandedWidth, onChange, onRenderSelected, onRenderItem, onFilterItems, onRenderPlaceholder, onRenderNoResults, onRenderFooter, styles, ariaLabel, } = this.props;\r\n        const { filter } = this.state;\r\n        const defaultStyles = {\r\n            root: {\r\n                verticalAlign: 'middle',\r\n                minWidth: '10px',\r\n            },\r\n        };\r\n        const buttonStyles = _.merge({}, defaultStyles, styles || undefined);\r\n        if (isLoading) {\r\n            return <LoadingItem styles={buttonStyles}/>;\r\n        }\r\n        if (items.length < 1) {\r\n            return null;\r\n        }\r\n        const filteredItems = onFilterItems(filter, items);\r\n        const menuItems = filteredItems.length > 0\r\n            ? filteredItems.map((item) => ({\r\n                key: item.value,\r\n                onRender: (menuItem, dismissMenu) => {\r\n                    return (<DropdownItem item={item} onRenderItem={onRenderItem} onClick={() => {\r\n                        onChange(item);\r\n                        dismissMenu();\r\n                    }}/>);\r\n                },\r\n            }))\r\n            : [\r\n                {\r\n                    key: 'noResults',\r\n                    onRender: () => {\r\n                        return (<DefaultButton styles={{\r\n                            root: {\r\n                                padding: '0 4px 0 4px',\r\n                                width: '100%',\r\n                                backgroundColor: 'inherit',\r\n                                border: 0,\r\n                            },\r\n                        }}>\r\n                                      {onRenderNoResults()}\r\n                                  </DefaultButton>);\r\n                    },\r\n                },\r\n            ];\r\n        const selectedItem = selected ? onRenderSelected(selected) : onRenderPlaceholder();\r\n        // NOTE: Setting ariaLabel as ariaDescription so that the screen reader\r\n        // still reads out the selected value of the dropdown\r\n        return (<DefaultButton styles={buttonStyles} ariaDescription={ariaLabel} menuIconProps={{\r\n            styles: {\r\n                root: {\r\n                    marginLeft: '8px',\r\n                    backgroundColor: 'inherit',\r\n                    color: 'inherit',\r\n                },\r\n            },\r\n        }} menuProps={{\r\n            items: menuItems,\r\n            styles: {\r\n                list: {\r\n                    minWidth: minExpandedWidth,\r\n                    maxHeight: '300px',\r\n                    overflowY: 'auto',\r\n                },\r\n            },\r\n            onMenuDismissed: () => this._updateFilter(''),\r\n            onRenderMenuList: (menuListProps, defaultRender) => (<PageHeaderFilteredDropdownExpanded placeholder={filterPlaceholder} ariaLabel={filterAriaLabel} filter={filter} menuListProps={menuListProps} onChange={this._updateFilter} defaultRender={defaultRender} onRenderFooter={onRenderFooter}/>),\r\n        }}>\r\n                {selectedItem}\r\n            </DefaultButton>);\r\n    }\r\n}\r\nexport default PageHeaderFilteredDropdown;\r\n","import { Icon, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport PageHeaderFilteredDropdown from './dropdown/page-header-filtered-dropdown';\r\nimport './lab-parent-picker.css';\r\nconst messages = defineMessages({\r\n    ariaLabel: {\r\n        id: 'LabAccountPickerAriaLabel',\r\n        defaultMessage: 'Select an item',\r\n        description: 'Aria label for the combo box control',\r\n    },\r\n    noLabAccountsInFilterText: {\r\n        id: 'LabAccountMenuNoAccountsMatchFilterText',\r\n        defaultMessage: 'No items found',\r\n        description: 'Message to inform user that no items in a listbox have been found matching the filter criteria',\r\n    },\r\n});\r\nexport const Selected = (props) => {\r\n    const { item } = props;\r\n    return (<Stack className=\"lab-parent-picker__item-container\" horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" tokens={{ childrenGap: '4px' }} grow styles={{ root: { marginRight: '5px' } }}>\r\n            <Stack.Item>\r\n                <Icon iconName=\"EngineeringGroup\" styles={{ root: { margin: '5px 4px 5px 5px' } }}/>\r\n            </Stack.Item>\r\n\r\n            <Stack.Item>\r\n                {item.name}\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const Item = (props) => {\r\n    const { item } = props;\r\n    return (<Stack className=\"lab-parent-picker__item-container\" horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" tokens={{ childrenGap: '4px', padding: '0 0 0 10px' }} grow>\r\n            <Stack.Item>\r\n                <Icon iconName=\"EngineeringGroup\"/>\r\n            </Stack.Item>\r\n\r\n            <Stack.Item>\r\n                {item.name}\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const Placeholder = () => {\r\n    return (<Stack className=\"lab-parent-picker__item-container\" horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" grow styles={{ root: { marginRight: '5px' } }}>\r\n            <Stack.Item>\r\n                <span className=\"lab-parent-picker__item-container\">\r\n                    <FormattedMessage id=\"LabAccountPickerPlaceholder\" defaultMessage=\"Select an item\" description=\"The placeholder message displayed in the combo box when no item is selected.\"/>\r\n                </span>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nconst NoResultsInjected = (props) => {\r\n    const message = props.intl.formatMessage(messages.noLabAccountsInFilterText);\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" tokens={{ childrenGap: '4px', padding: '0 0 0 10px' }} grow>\r\n            <Stack.Item>\r\n                <Icon iconName=\"SearchIssue\" title={message}/>\r\n            </Stack.Item>\r\n            <Stack.Item>{message}</Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const NoResults = injectIntl(NoResultsInjected);\r\nfunction convertItemToOption(item) {\r\n    return {\r\n        value: item.id,\r\n    };\r\n}\r\nfunction mapItemsToOptions(items) {\r\n    return items.map((a) => convertItemToOption(a)).toJS();\r\n}\r\nfunction filterDropdownOptions(filter, items) {\r\n    const filteredItems = items.filter((o) => o.name.toLowerCase().indexOf(filter.toLowerCase()) > -1);\r\n    return mapItemsToOptions(filteredItems);\r\n}\r\nfunction getItemFromOption(option, items) {\r\n    return items.find((a) => a.id === option.value);\r\n}\r\nconst LabParentPickerInjected = (props) => {\r\n    const { isLoading, isTeamsOrLmsIntegrationEnabled, labParentItems, selectedItem, onChange, styles, intl } = props;\r\n    const placeholder = intl.formatMessage(commonMessages.searchLabAccountText);\r\n    const ariaLabel = intl.formatMessage(messages.ariaLabel);\r\n    const options = isLoading ? [] : mapItemsToOptions(labParentItems);\r\n    const selectedOption = !!selectedItem ? convertItemToOption(selectedItem) : undefined;\r\n    return (<PageHeaderFilteredDropdown items={options} styles={styles} ariaLabel={ariaLabel} filterPlaceholder={placeholder} filterAriaLabel={placeholder} selected={selectedOption} isLoading={isLoading} minExpandedWidth={'300px'} onChange={(value) => {\r\n        onChange(getItemFromOption(value, labParentItems));\r\n    }} onRenderSelected={(selected) => (<Selected item={getItemFromOption(selected, labParentItems)} isTeamsOrLmsIntegrationEnabled={isTeamsOrLmsIntegrationEnabled}/>)} onRenderItem={(item) => (<Item item={getItemFromOption(item, labParentItems)} isTeamsOrLmsIntegrationEnabled={isTeamsOrLmsIntegrationEnabled}/>)} onFilterItems={(filter) => filterDropdownOptions(filter, labParentItems)} onRenderPlaceholder={() => <Placeholder />} onRenderNoResults={() => <NoResults />}/>);\r\n};\r\nexport const LabParentPicker = injectIntl(LabParentPickerInjected);\r\n","import { ActionButton, Icon, Stack, TooltipHost, getTheme } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport { PageHeaderFilteredDropdown } from './dropdown/page-header-filtered-dropdown';\r\nconst messages = defineMessages({\r\n    ariaLabel: {\r\n        id: 'LabPickerAriaLabel',\r\n        defaultMessage: 'Select a lab',\r\n        description: 'Aria label for the lab picker control',\r\n    },\r\n    searchLabsText: {\r\n        id: 'LabPickerSearchPlaceholder',\r\n        defaultMessage: 'Search labs',\r\n        description: 'Placeholder for the lab picker search box',\r\n    },\r\n    noLabsFoundFilterText: {\r\n        id: 'LabPickerSearchNoLabsMatchFilterText',\r\n        defaultMessage: 'No labs found',\r\n        description: 'Message to inform the user that no labs were found that match the filter criteria',\r\n    },\r\n});\r\nexport const Selected = (props) => {\r\n    const { lab, isVNextLab } = props;\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" grow styles={{ root: { marginRight: '5px' } }}>\r\n            <Stack.Item>\r\n                <span className=\"lab-picker__item-container\">\r\n                    {getDisplayName(lab, isVNextLab)}\r\n                </span>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nfunction getDisplayName(lab, isVNextLab) {\r\n    return isVNextLab ? lab?.title ?? lab.name : lab.name;\r\n}\r\nexport const Item = (props) => {\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" tokens={{ padding: '0 0 0 10px' }} horizontalAlign=\"start\" grow>\r\n            <Stack.Item>\r\n                <span className=\"lab-picker__item-container\">\r\n                    {getDisplayName(props.lab, props.isVNextLab)}\r\n                </span>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const Placeholder = () => {\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" grow>\r\n            <Stack.Item>\r\n                <span className=\"lab-picker__item-container\">\r\n                    <FormattedMessage id=\"LabPickerPlaceholder\" defaultMessage=\"Select a lab\" description=\"The placeholder message displayed in the lab picker when no lab is selected.\"/>\r\n                </span>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const Footer = (props) => {\r\n    const { onNewLab, isNewLabCreationDisabled } = props;\r\n    return (<TooltipHost content={isNewLabCreationDisabled ? (<FormattedMessage id=\"NoCoresForSubscriptionNewLabButtonTooltip\" defaultMessage=\"Your admin needs to request a limit increase in Azure Lab Services for virtual machine cores before you can create a lab. Please contact your Lab Services administator.\" description=\"Message displayed on tooltip of disabled new lab buttonnpm  when customer subscription type has no cores available by default.\"/>) : ('')}>\r\n            <ActionButton onClick={onNewLab} disabled={isNewLabCreationDisabled} className=\"custom-link-button\" styles={{ root: { color: getTheme().palette.themePrimary } }}>\r\n                <Stack horizontal tokens={{ childrenGap: '5px' }} verticalAlign=\"center\">\r\n                    <Stack.Item>\r\n                        <Icon iconName=\"CirclePlus\"/>\r\n                    </Stack.Item>\r\n                    <Stack.Item styles={{ root: { paddingBottom: '2px' } }}>\r\n                        <FormattedMessage id=\"LabPickerFooter\" defaultMessage=\"New lab\" description=\"Action button text displayed in the lab picker to create a new lab.\"/>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </ActionButton>\r\n        </TooltipHost>);\r\n};\r\nconst NoResultsInjected = (props) => {\r\n    const message = props.intl.formatMessage(messages.noLabsFoundFilterText);\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" tokens={{ childrenGap: '4px', padding: '0 0 0 10px' }} grow>\r\n            <Stack.Item>\r\n                <Icon iconName=\"SearchIssue\" title={message}/>\r\n            </Stack.Item>\r\n            <Stack.Item>{message}</Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const NoResults = injectIntl(NoResultsInjected);\r\nfunction convertLabToOption(lab) {\r\n    return { value: lab.id };\r\n}\r\nfunction mapLabsToOptions(labs, isVNextLabs) {\r\n    return isVNextLabs\r\n        ? labs.map((l) => convertLabToOption(l)).toJS()\r\n        : labs.map((l) => convertLabToOption(l)).toJS();\r\n}\r\nfunction getLabFromOption(option, labs) {\r\n    return labs.find((l) => l.id === option.value);\r\n}\r\nfunction filterLabs(filter, labs, isVNextLabs) {\r\n    const lowerCaseFilter = filter.toLowerCase();\r\n    const filteredLabs = isVNextLabs\r\n        ? labs.filter((lab) => getDisplayName(lab, isVNextLabs).toLowerCase().indexOf(lowerCaseFilter) > -1)\r\n        : labs.filter((lab) => getDisplayName(lab, isVNextLabs).toLowerCase().indexOf(lowerCaseFilter) > -1);\r\n    return mapLabsToOptions(filteredLabs, isVNextLabs);\r\n}\r\nconst LabPickerInjected = (props) => {\r\n    const { isLoading, isTeamsOrLmsIntegrationEnabled, labs, selected, onChange, isNewLabCreationDisabled, styles, intl, isVNextLabs, } = props;\r\n    const placeholder = intl.formatMessage(messages.searchLabsText);\r\n    const ariaLabel = intl.formatMessage(messages.ariaLabel);\r\n    const options = isLoading ? [] : mapLabsToOptions(labs, isVNextLabs);\r\n    const selectedOption = selected ? convertLabToOption(selected) : undefined;\r\n    return (<PageHeaderFilteredDropdown items={options} styles={styles} ariaLabel={ariaLabel} filterPlaceholder={placeholder} filterAriaLabel={placeholder} selected={selectedOption} isLoading={isLoading} minExpandedWidth={'300px'} onChange={(option) => {\r\n        onChange(getLabFromOption(option, labs));\r\n    }} onRenderSelected={(selected) => (<Selected lab={getLabFromOption(selected, labs)} isVNextLab={isVNextLabs} isTeamsOrLmsIntegrationEnabled={isTeamsOrLmsIntegrationEnabled}/>)} onRenderItem={(item) => (<Item lab={getLabFromOption(item, labs)} isVNextLab={isVNextLabs}/>)} onFilterItems={(filter) => filterLabs(filter, labs, isVNextLabs)} onRenderPlaceholder={() => <Placeholder />} onRenderNoResults={() => <NoResults />} onRenderFooter={() => (<Footer isNewLabCreationDisabled={isNewLabCreationDisabled} onNewLab={props.newLab}/>)}/>);\r\n};\r\nexport const LabPicker = injectIntl(LabPickerInjected);\r\n","import { Link } from '@fluentui/react';\r\nimport { toASCII } from 'punycode';\r\nimport * as React from 'react';\r\nimport ReactLinkify from 'react-linkify';\r\nexport class Linkify extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._componentDecorator = this._componentDecorator.bind(this);\r\n    }\r\n    _componentDecorator(href, text, _key) {\r\n        const { target } = this.props;\r\n        return (<Link target={target ?? '_blank'} href={href} rel=\"noopener\">\r\n                {toASCII(text)}\r\n            </Link>);\r\n    }\r\n    render() {\r\n        return <ReactLinkify componentDecorator={this._componentDecorator}>{this.props.children}</ReactLinkify>;\r\n    }\r\n}\r\nexport default Linkify;\r\n","import { DocumentCard, DocumentCardTitle, Dropdown, Link, Panel, PanelType, Stack, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { commonMessages } from '../../language/common-messages';\r\nimport { Constants } from '../../utils/constants';\r\nimport Linkify from '../linkify';\r\nimport { getCustomTheme } from '../themes/selectors';\r\nimport './help-flyout.css';\r\nconst messages = defineMessages({\r\n    labDropDownLabel: {\r\n        id: 'HelpFlyoutLabDropDownLabel',\r\n        defaultMessage: 'Lab',\r\n        description: 'Label for the lab drop-down on help flyout.',\r\n    },\r\n    labAccountSupportCardTitle: {\r\n        id: 'LabAccountSupportCardTitle',\r\n        defaultMessage: 'Lab account support',\r\n        description: 'Title for the card of lab account support',\r\n    },\r\n    needHelpCardTitle: {\r\n        id: 'NeedHelpCardTitle',\r\n        defaultMessage: 'Need help?',\r\n        description: 'Title for the card of need help',\r\n    },\r\n    aboutServicesCardTitle: {\r\n        id: 'AboutAzureLabServicesCardTitle',\r\n        defaultMessage: 'About Azure Lab Services',\r\n        description: 'Title for the card of about azure lab services',\r\n    },\r\n    labSupportCardTitle: {\r\n        id: 'LabSupportCardTitle',\r\n        defaultMessage: 'Lab support',\r\n        description: 'Title for the card of lab support',\r\n    },\r\n});\r\nconst documentCardStyle = {\r\n    root: {\r\n        fontSize: '14px',\r\n        maxWidth: 500,\r\n        marginBottom: '24px',\r\n        paddingBottom: '25px',\r\n        boxShadow: ' 0px 0.6px 1.8px rgba(0, 0, 0, 0.108), 0px 3.2px 7.2px rgba(0, 0, 0, 0.132)',\r\n    },\r\n};\r\nconst documentCardTitleStyle = {\r\n    root: { fontWeight: 600, lineHeight: '20px', height: '20px', padding: '22px', fontSize: '14px' },\r\n};\r\nconst stackItemStyle = {\r\n    root: {\r\n        overflowWrap: 'break-word',\r\n        marginLeft: '22px',\r\n        marginBottom: '10px',\r\n        marginRight: '22px',\r\n    },\r\n};\r\nconst SupportSection = (props) => {\r\n    const { url, email, phone, instructions, isLabAccount } = props;\r\n    const intl = useIntl();\r\n    const title = !!isLabAccount\r\n        ? intl.formatMessage(messages.labAccountSupportCardTitle)\r\n        : intl.formatMessage(messages.labSupportCardTitle);\r\n    return (<DocumentCard styles={documentCardStyle} aria-label={title}>\r\n            <DocumentCardTitle title={title} styles={documentCardTitleStyle}/>\r\n\r\n            <Stack tokens={{ childrenGap: 15 }}>\r\n                {(url || email || phone) && (<Stack.Item>\r\n                        {url && (<div className=\"help-flyout__card-content\">\r\n                                <FormattedMessage id=\"SupportUrlLink\" defaultMessage=\"<Link>View support website</Link>\" description=\"Link to support web site. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href={url} target=\"_blank\">\r\n                                                {chunks}\r\n                                            </Link>),\r\n    }}/>\r\n                            </div>)}\r\n                        {email && (<div className=\"help-flyout__card-content\">\r\n                                <FormattedMessage id=\"SupportEmailLink\" defaultMessage=\"<Link>Email support</Link>\" description=\"Link to support email. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => <Link href={`mailto:${email}`}>{chunks}</Link>,\r\n    }}/>\r\n                            </div>)}\r\n                        {phone && (<div className=\"help-flyout__card-content\">\r\n                                <FormattedMessage id=\"SupportPhoneLabel\" defaultMessage=\"Phone support: {phoneNumber}\" description=\"Text showing support phone number. {phoneNumber} is the phone number.\" values={{ phoneNumber: phone }}/>\r\n                            </div>)}\r\n                    </Stack.Item>)}\r\n                {instructions && (<Stack.Item styles={stackItemStyle}>\r\n                        <Linkify>{instructions}</Linkify>\r\n                    </Stack.Item>)}\r\n                {!url && !email && !phone && !instructions && (<Stack.Item styles={stackItemStyle}>\r\n                        <FormattedMessage id=\"ContactAdminMessage\" defaultMessage=\"Please contact your lab administrator if you need help with your virtual machine.\" description=\"The generic message shown when support info is not provided\"/>\r\n                    </Stack.Item>)}\r\n            </Stack>\r\n        </DocumentCard>);\r\n};\r\nconst NeedHelpSection = () => {\r\n    const intl = useIntl();\r\n    return (<DocumentCard styles={documentCardStyle} aria-label={intl.formatMessage(messages.needHelpCardTitle)}>\r\n            <DocumentCardTitle title={intl.formatMessage(messages.needHelpCardTitle)} styles={documentCardTitleStyle}/>\r\n            <div className=\"help-flyout__card-content\">\r\n                <FormattedMessage id=\"GettingStartedLink\" defaultMessage=\"<Link>Getting started</Link>\" description=\"Link to getting started help information. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-getstarted\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n    }}/>\r\n            </div>\r\n            <div className=\"help-flyout__card-content\">\r\n                <FormattedMessage id=\"ServiceStatusLink\" defaultMessage=\"<Link>Service status</Link>\" description=\"Link to view Azure service status. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-status\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n    }}/>\r\n            </div>\r\n            <div className=\"help-flyout__card-content\">\r\n                <FormattedMessage id=\"AskAQuestionLink\" defaultMessage=\"<Link>Ask a question</Link>\" description=\"Link to question and answer platform. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-answers\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n    }}/>\r\n            </div>\r\n            <div className=\"help-flyout__card-content\">\r\n                <FormattedMessage id=\"ReportAProblemLink\" defaultMessage=\"<Link>Report a problem</Link>\" description=\"Link to report a problem with Azure Lab Services. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-support\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n    }}/>\r\n            </div>\r\n            <div className=\"help-flyout__card-content\">\r\n                <FormattedMessage id=\"MakeASuggestionLink\" defaultMessage=\"<Link>Make a suggestion</Link>\" description=\"Link to make a suggestion. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-suggest\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n    }}/>\r\n            </div>\r\n        </DocumentCard>);\r\n};\r\nconst NewsAndUpdateSection = () => {\r\n    const intl = useIntl();\r\n    return (<DocumentCard styles={documentCardStyle} aria-label={intl.formatMessage(messages.aboutServicesCardTitle)}>\r\n            <DocumentCardTitle title={intl.formatMessage(messages.aboutServicesCardTitle)} styles={documentCardTitleStyle}/>\r\n            <div className=\"help-flyout__card-content\">\r\n                <FormattedMessage id=\"NewsAndUpdatesLink\" defaultMessage=\"<Link>News and updates</Link>\" description=\"Link to learn news and updates of azure lab services. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-blog\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n    }}/>\r\n            </div>\r\n        </DocumentCard>);\r\n};\r\nconst PrivacyAndTerms = (props) => {\r\n    const intl = useIntl();\r\n    const isGermanLocale = props.locale.toLowerCase().startsWith('de');\r\n    const isItalianLocale = props.locale.toLowerCase().startsWith('it');\r\n    return (<span className=\"help-flyout__privacy-and-terms-of-use\">\r\n            <Link href=\"https://go.microsoft.com/fwlink/?LinkId=521839\" target=\"_blank\">\r\n                {intl.formatMessage(commonMessages.privacyLink)}\r\n            </Link>\r\n            &nbsp;|&nbsp;\r\n            <Link href=\"https://aka.ms/azlabs-termsofuse\" target=\"_blank\">\r\n                {intl.formatMessage(commonMessages.termsOfUseLink)}\r\n            </Link>\r\n            {isGermanLocale && (<>\r\n                    &nbsp;|&nbsp;\r\n                    <Link href=\"https://aka.ms/impressum_de\" target=\"_blank\">\r\n                        \r\n                        Impressum\r\n                    </Link>\r\n                </>)}\r\n            {isItalianLocale && (<>\r\n                    &nbsp;|&nbsp;\r\n                    <Link href=\"https://www.microsoft.com/it-it/accessibility/declarations\" target=\"_blank\">\r\n                        \r\n                        Dichiarazione di accessibilità\r\n                    </Link>\r\n                </>)}\r\n        </span>);\r\n};\r\nexport const HelpFlyout = (props) => {\r\n    const { sections, defaultSection, onDismiss, isLabAccount, isStudentVmList, locale } = props;\r\n    const intl = useIntl();\r\n    const msg = intl.formatMessage;\r\n    let showDropdown = false;\r\n    let options = undefined;\r\n    if (sections) {\r\n        options = sections\r\n            .map((value, key) => ({\r\n            key,\r\n            id: key,\r\n            text: key,\r\n            data: value,\r\n        }))\r\n            .toList()\r\n            .toArray();\r\n        showDropdown = options.some((o) => !!o.id);\r\n    }\r\n    const [selectedSection, setSelectedSection] = React.useState(defaultSection ?? (options ? options[0].id : undefined));\r\n    const currentSection = !!sections && selectedSection !== undefined ? sections.get(selectedSection) : undefined;\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={true} onDismiss={onDismiss} headerText={msg(commonMessages.help)} closeButtonAriaLabel={msg(commonMessages.close)} styles={{\r\n        main: { backgroundColor: '#FAF9F8' },\r\n        ...getCustomTheme().panelStyles,\r\n    }}>\r\n            {showDropdown && (<Dropdown label={msg(messages.labDropDownLabel)} ariaLabel={msg(messages.labDropDownLabel)} options={options} selectedKey={selectedSection} onChange={(_, option) => setSelectedSection(option.id)} styles={{ root: { paddingBottom: 20 } }}/>)}\r\n            {currentSection && <SupportSection {...currentSection} isLabAccount={isLabAccount}/>}\r\n            {!isStudentVmList && (<div>\r\n                    <NeedHelpSection />\r\n                    <NewsAndUpdateSection />\r\n                </div>)}\r\n            <PrivacyAndTerms locale={locale ?? ''}/>\r\n        </Panel>);\r\n};\r\nexport default HelpFlyout;\r\n","import _ from 'lodash';\r\nimport { CommandButton, DefaultButton, PersonaCoin, PersonaSize, ActivityItem, Link, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { commonMessages } from '../../language/common-messages';\r\nimport './user-menu.css';\r\nconst messages = defineMessages({\r\n    userMenu: {\r\n        id: 'UserMenu',\r\n        defaultMessage: 'User menu',\r\n        description: 'Aria label for user menu button',\r\n    },\r\n});\r\nexport const UserMenu = (props) => {\r\n    const { isAuthenticating, isAuthenticated, imageUrl, name, initials, displayId, signIn, signOut, styles, isLmsIntegrationEnabled, } = props;\r\n    const [showNameTitle, setShowNameTitle] = React.useState(false);\r\n    const [showDisplayIdTitle, setShowDisplayIdTitle] = React.useState(false);\r\n    const intl = useIntl();\r\n    const divNameRef = React.useCallback((node) => {\r\n        if (!showNameTitle && node && node.scrollWidth > node.offsetWidth) {\r\n            setShowNameTitle(true);\r\n        }\r\n    }, []);\r\n    const divDisplayIdRef = React.useCallback((node) => {\r\n        if (!showDisplayIdTitle && node && node.scrollWidth > node.offsetWidth) {\r\n            setShowDisplayIdTitle(true);\r\n        }\r\n    }, []);\r\n    if (isAuthenticating) {\r\n        return null;\r\n    }\r\n    if (!isAuthenticated) {\r\n        const defaultStyles = {\r\n            textContainer: {\r\n                fontWeight: 'lighter',\r\n            },\r\n        };\r\n        const buttonStyles = _.merge({}, defaultStyles, styles || {});\r\n        return (<DefaultButton onClick={signIn} styles={buttonStyles}>\r\n                <span className=\"ms-fontSize-mPlus\">\r\n                    <FormattedMessage {...commonMessages.signInButtonText}/>\r\n                </span>\r\n            </DefaultButton>);\r\n    }\r\n    if (isLmsIntegrationEnabled) {\r\n        return (<DefaultButton onClick={signOut} styles={styles}>\r\n                <FormattedMessage {...commonMessages.signOutButtonText}/>\r\n            </DefaultButton>);\r\n    }\r\n    const userMenu = intl.formatMessage(messages.userMenu);\r\n    const contactCardItem = {\r\n        activityDescription: [\r\n            <div className=\"user-menu__activity-item-name\" key=\"Name\" ref={divNameRef} title={showNameTitle ? name : undefined}>\r\n                {name}\r\n            </div>,\r\n            <div className=\"user-menu__activity-item-display-id\" key=\"DisplayId\" ref={divDisplayIdRef} title={showDisplayIdTitle ? displayId : undefined}>\r\n                {displayId}\r\n            </div>,\r\n            <div className=\"user-menu__activity-item-link\" key=\"MyProfile\">\r\n                <FormattedMessage id=\"MyProfileLink\" defaultMessage=\"<Link>My profile</Link>\" description=\"Link to the profile of the user. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n                Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-profile\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n            }}/>\r\n            </div>,\r\n            <div className=\"user-menu__activity-item-link\" key=\"SignOut\">\r\n                <FormattedMessage id=\"SignOutLink\" defaultMessage=\"<Link>Sign out</Link>\" description=\"Link to sign out Azure Lab Services. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n                Link: (chunks) => <Link onClick={() => signOut()}>{chunks}</Link>,\r\n            }}/>\r\n            </div>,\r\n        ],\r\n        activityPersonas: [{ imageUrl: imageUrl, imageInitials: initials, coinSize: 80 }],\r\n    };\r\n    const items = [\r\n        {\r\n            key: 'FullIdentity',\r\n            onRender: () => (<ActivityItem {...contactCardItem} styles={{\r\n                root: { width: '340px', height: '160px' },\r\n                activityPersona: { padding: '30px 0px 35px 35px' },\r\n            }}/>),\r\n        },\r\n    ];\r\n    const defaultStyles = {\r\n        root: {\r\n            verticalAlign: 'center',\r\n        },\r\n    };\r\n    const buttonStyles = _.merge({}, defaultStyles, styles || {});\r\n    return (<CommandButton styles={buttonStyles} ariaLabel={userMenu} menuProps={{ items, calloutProps: { minPagePadding: 0 } }} menuIconProps={{\r\n        style: { display: 'none ' },\r\n    }}>\r\n            <PersonaCoin imageUrl={imageUrl} imageInitials={initials} size={PersonaSize.size32} styles={{\r\n        initials: { fontWeight: 'normal' },\r\n        coin: { padding: '0 10px 0 10px' },\r\n    }}/>\r\n        </CommandButton>);\r\n};\r\nexport default UserMenu;\r\n","export const EnvironmentState = {\r\n    Unknown: '',\r\n    Creating: 'creating',\r\n    Created: 'created',\r\n    Failed: 'failed',\r\n};\r\nexport const PowerState = {\r\n    Unknown: '',\r\n    None: 'none',\r\n    Running: 'running',\r\n    Starting: 'starting',\r\n    Stopping: 'stopping',\r\n    Stopped: 'stopped',\r\n};\r\nexport const VmState = {\r\n    Unknown: '',\r\n    None: 'none',\r\n    Creating: 'creating',\r\n    Failed: 'failed',\r\n    Starting: 'starting',\r\n    Stopping: 'stopping',\r\n    Stopped: 'stopped',\r\n    ResettingPassword: 'resetting-password',\r\n    Running: 'running',\r\n    Deleting: 'deleting',\r\n    Updating: 'updating',\r\n    Moving: 'moving',\r\n    Reimaging: 'reimaging',\r\n    Redeploying: 'redeploying',\r\n};\r\nexport const OperatingSystem = {\r\n    Unknown: '',\r\n    Windows: 'Windows',\r\n    Linux: 'Linux',\r\n};\r\nexport const VmAssignmentType = {\r\n    Assigned: 'assigned',\r\n    Unassigned: 'unassigned',\r\n    Unknown: '',\r\n};\r\nexport const ConnectionType = {\r\n    Unknown: '',\r\n    Rdp: 'RDP',\r\n    Ssh: 'SSH',\r\n    RdpInBrowser: 'RdpInBrowser',\r\n    SshInBrowser: 'SshInBrowser',\r\n};\r\n","import { ConnectionType } from '../../data/models/environment-common';\r\nimport { commonMessages } from '../../language/common-messages';\r\nexport const getConnectionTypes = (rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl, isWindows, isLinuxRdpEnabled) => {\r\n    // TODO: Remove the extra isWindows and isLinuxEnabled checks once connection info is cached\r\n    const connectionTypes = [];\r\n    if (rdpInBrowserUrl) {\r\n        connectionTypes.push(ConnectionType.RdpInBrowser);\r\n    }\r\n    if (sshInBrowserUrl) {\r\n        connectionTypes.push(ConnectionType.SshInBrowser);\r\n    }\r\n    if (rdpAuthority || isWindows === true || isLinuxRdpEnabled === true) {\r\n        connectionTypes.push(ConnectionType.Rdp);\r\n    }\r\n    if (sshAuthority || isWindows === false) {\r\n        connectionTypes.push(ConnectionType.Ssh);\r\n    }\r\n    return connectionTypes;\r\n};\r\nexport const getVNextConnectionTypes = (rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl) => {\r\n    const connectionTypes = [];\r\n    if (rdpInBrowserUrl) {\r\n        connectionTypes.push(ConnectionType.RdpInBrowser);\r\n    }\r\n    if (sshInBrowserUrl) {\r\n        connectionTypes.push(ConnectionType.SshInBrowser);\r\n    }\r\n    if (rdpAuthority) {\r\n        connectionTypes.push(ConnectionType.Rdp);\r\n    }\r\n    if (sshAuthority) {\r\n        connectionTypes.push(ConnectionType.Ssh);\r\n    }\r\n    return connectionTypes;\r\n};\r\nexport const getConnectionTypeStringMap = (intl, isTeamsIntegrationEnabled) => {\r\n    const msg = intl.formatMessage;\r\n    const vmConnectSshTitle = msg(commonMessages.vmSshConnectTitle);\r\n    const vmConnectSshBrowserTitle = msg(commonMessages.vmSshBrowserConnectTitle);\r\n    const vmConnectRdpTitle = isTeamsIntegrationEnabled\r\n        ? msg(commonMessages.vmDownloadRdpFileTitle)\r\n        : msg(commonMessages.vmRdpConnectTitle);\r\n    const vmConnectRdpBrowserTitle = msg(commonMessages.vmRdpBrowserConnectTitle);\r\n    const map = {};\r\n    map[ConnectionType.Rdp] = vmConnectRdpTitle;\r\n    map[ConnectionType.RdpInBrowser] = vmConnectRdpBrowserTitle;\r\n    map[ConnectionType.Ssh] = vmConnectSshTitle;\r\n    map[ConnectionType.SshInBrowser] = vmConnectSshBrowserTitle;\r\n    return map;\r\n};\r\nexport const getConnectionContextMenuItems = (canConnect, item, connectionTypes, onConnect, intl, isTeamsIntegrationEnabled) => {\r\n    const connectionTypeMap = getConnectionTypeStringMap(intl, isTeamsIntegrationEnabled);\r\n    const items = [];\r\n    connectionTypes.map((type) => {\r\n        items.push({\r\n            key: type,\r\n            text: connectionTypeMap[type],\r\n            disabled: !canConnect,\r\n            onClick: () => {\r\n                onConnect(item, type);\r\n            },\r\n        });\r\n    });\r\n    return items;\r\n};\r\n","import * as React from 'react';\r\nimport { TooltipHost, Toggle, getId } from '@fluentui/react';\r\nexport class ToggleToolTip extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        const { content, disabled } = this.props;\r\n        const toolTipHostId = getId('toggleTipHost');\r\n        return (<TooltipHost id={toolTipHostId} content={disabled ? undefined : content}>\r\n                <Toggle {...this.props} aria-describedby={toolTipHostId}/>\r\n            </TooltipHost>);\r\n    }\r\n}\r\nexport default ToggleToolTip;\r\n","import { Spinner, SpinnerSize, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport { VmState } from '../../data/models/environment-common';\r\nimport commonMessages from '../../language/common-messages';\r\nimport ToggleToolTip from '../toggle-tooltip';\r\nconst messages = defineMessages({\r\n    startTooltip: {\r\n        id: 'VmPowerStateStartTooltip',\r\n        defaultMessage: 'Click to start virtual machine.',\r\n        description: 'Tooltip on toggle to start virtual machine',\r\n    },\r\n    stopTooltip: {\r\n        id: 'VmPowerStateStopTooltip',\r\n        defaultMessage: 'Click to stop virtual machine.',\r\n        description: 'Tooltip on toggle to stop virtual machine',\r\n    },\r\n});\r\nexport const VmPowerStateInjected = (props) => {\r\n    const { intl, vmState, forceDisable, onStart, onStop } = props;\r\n    const msg = intl.formatMessage;\r\n    let stateText = '';\r\n    let title = undefined;\r\n    switch (vmState) {\r\n        case VmState.Creating:\r\n            stateText = msg(commonMessages.creating);\r\n            break;\r\n        case VmState.Deleting:\r\n            stateText = msg(commonMessages.deleting);\r\n            break;\r\n        case VmState.ResettingPassword:\r\n            stateText = msg(commonMessages.resettingPassword);\r\n            break;\r\n        case VmState.Running:\r\n            stateText = msg(commonMessages.runningState);\r\n            title = msg(messages.stopTooltip);\r\n            break;\r\n        case VmState.Starting:\r\n            stateText = msg(commonMessages.starting);\r\n            break;\r\n        case VmState.Stopped:\r\n            stateText = msg(commonMessages.stoppedState);\r\n            title = msg(messages.startTooltip);\r\n            break;\r\n        case VmState.Stopping:\r\n            stateText = msg(commonMessages.stopping);\r\n            break;\r\n        case VmState.Redeploying:\r\n            stateText = msg(commonMessages.redeployingState);\r\n            break;\r\n        case VmState.Reimaging:\r\n            stateText = msg(commonMessages.reimagingState);\r\n            break;\r\n    }\r\n    const showToggle = vmState !== VmState.Creating && vmState !== VmState.Deleting;\r\n    const showSpinner = vmState !== VmState.Stopped && vmState !== VmState.Running;\r\n    const isDisabled = !!forceDisable || showSpinner;\r\n    return (<Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 8 }} style={{ height: '100%', paddingLeft: 5 }}>\r\n            {showToggle && (<Stack.Item>\r\n                    <ToggleToolTip content={title} ariaLabel={stateText} inlineLabel={true} styles={{ root: { marginBottom: 0 } }} disabled={isDisabled} checked={vmState === VmState.Starting || vmState === VmState.Running} onChange={(_, value) => (value ? onStart() : onStop())}/>\r\n                </Stack.Item>)}\r\n            {showSpinner && (<Stack.Item>\r\n                    <Spinner size={showToggle ? SpinnerSize.xSmall : SpinnerSize.small}/>\r\n                </Stack.Item>)}\r\n            <Stack.Item>\r\n                <span className=\"ms-fontSize-14\">{stateText}</span>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const VmPowerState = injectIntl(VmPowerStateInjected);\r\nexport default VmPowerState;\r\n","export const OperationType = {\r\n    StartOperation: 'StartOperation',\r\n    StopOperation: 'StopOperation',\r\n    ReimageOperation: 'ReimageOperation',\r\n    RedeployOperation: 'RedeployOperation',\r\n    Unknown: '',\r\n};\r\nexport const OperationStatus = {\r\n    Succeeded: 'Succeeded',\r\n    Failed: 'Failed',\r\n    InProgress: 'InProgress',\r\n};\r\nfunction getOperationTypeFromAction(action) {\r\n    switch (action) {\r\n        case 'StartOperation':\r\n            return OperationType.StartOperation;\r\n        case 'StopOperation':\r\n            return OperationType.StopOperation;\r\n        case 'ReimageOperation':\r\n            return OperationType.ReimageOperation;\r\n        case 'RedeployOperation':\r\n            return OperationType.RedeployOperation;\r\n        default:\r\n            return OperationType.Unknown;\r\n    }\r\n}\r\nexport function mapResourceErrorToOperation(resourceError) {\r\n    if (!resourceError) {\r\n        return;\r\n    }\r\n    if (getOperationTypeFromAction(resourceError.action) === OperationType.Unknown) {\r\n        return;\r\n    }\r\n    const operation = {\r\n        operationType: getOperationTypeFromAction(resourceError.action),\r\n        status: OperationStatus.Failed,\r\n        id: 'resourceOperationError',\r\n        name: 'resourceOperationError',\r\n        error: {\r\n            code: resourceError.code,\r\n            message: resourceError.message,\r\n        },\r\n        endTime: resourceError.timestamp.toDateString(),\r\n        startTime: '',\r\n    };\r\n    return operation;\r\n}\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    pageTitle: {\r\n        id: 'VmListPageTitle',\r\n        defaultMessage: 'Virtual machine pool',\r\n        description: 'Virtual machines page title.',\r\n    },\r\n    operationResultGenericSuccess: {\r\n        id: 'OperationResultSuccess',\r\n        defaultMessage: '{Operation} operation succeeded.',\r\n        description: 'The message displayed on tooltip  icon for virtual machines when start or stop operation succeeded.',\r\n    },\r\n    SubmitSupportRequest: {\r\n        id: 'SubmitSupportRequest',\r\n        defaultMessage: 'submit a support request',\r\n        description: 'A Link to submit a support request for requesting help on start or stop failure operations.',\r\n    },\r\n    StartOperation: {\r\n        id: 'StartOperation',\r\n        defaultMessage: 'start',\r\n        description: 'Start virtual machine Operation',\r\n    },\r\n    StopOperation: {\r\n        id: 'StopOperation',\r\n        defaultMessage: 'stop',\r\n        description: 'Stop virtual machine Operation',\r\n    },\r\n    ReimageOperation: {\r\n        id: 'ResetOperation',\r\n        defaultMessage: 'reimage',\r\n        description: 'Reimage virtual machine Operation',\r\n    },\r\n    RedeployOperation: {\r\n        id: 'RedeployOperation',\r\n        defaultMessage: 'redeploy',\r\n        description: 'Redeploy virtual machine Operation',\r\n    },\r\n});\r\nexport default messages;\r\n","import * as React from 'react';\r\nimport { Icon, TooltipHost } from '@fluentui/react';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport { useIntl, FormattedMessage } from 'react-intl';\r\nimport { Link } from '@fluentui/react';\r\nimport { Constants } from '../utils/constants';\r\nimport { OperationType } from '../data/models/vnext/operation';\r\nimport { messages } from '../vm-list/vm-list-messages';\r\nexport const VmOperationError = (props) => {\r\n    const intl = useIntl();\r\n    const tenantId = props.tenantId;\r\n    const subscriptionId = props.subscriptionId;\r\n    const vmOperationType = props.operationType;\r\n    return (<TooltipHost content={tenantId && subscriptionId ? (<FormattedMessage id=\"OperationResultGenericError\" defaultMessage=\"Virtual machine {Operation} operation failed. Try redeploying the virtual machine. If the issue persists, consider reimaging it. For further assistance submit a support request.\" description=\"The error message displayed on tooltip error icon for virtual machines when start or stop operation failure.\" values={{\r\n        Link: () => (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={Constants.Urls.SupportRequestForVmIssues(tenantId, subscriptionId)}>\r\n                                    {intl.formatMessage(messages.SubmitSupportRequest)}\r\n                                </Link>),\r\n        Operation: vmOperationType === OperationType.StartOperation\r\n            ? intl.formatMessage(messages.StartOperation)\r\n            : vmOperationType === OperationType.StopOperation\r\n                ? intl.formatMessage(messages.StopOperation)\r\n                : vmOperationType === OperationType.ReimageOperation\r\n                    ? intl.formatMessage(messages.ReimageOperation)\r\n                    : vmOperationType === OperationType.RedeployOperation\r\n                        ? intl.formatMessage(messages.RedeployOperation)\r\n                        : '',\r\n    }}/>) : (<FormattedMessage id=\"OperationResultStudentViewError\" defaultMessage=\"Virtual machine {Operation} operation failed. Try redeploying the virtual machine. If the issue persists, consider reimaging it. For further assistance, request your IT administrator to submit a support request.\" description=\"Error message shown when start or stop operation failed in student view\" values={{\r\n        Operation: vmOperationType === OperationType.StartOperation\r\n            ? intl.formatMessage(messages.StartOperation)\r\n            : vmOperationType === OperationType.StopOperation\r\n                ? intl.formatMessage(messages.StopOperation)\r\n                : '',\r\n    }}/>)}>\r\n            <Icon iconName=\"StatusErrorFull\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            color: getCustomTheme().palette?.redDark,\r\n        },\r\n    }}/>\r\n        </TooltipHost>);\r\n};\r\nexport const VmAgentError = (props) => {\r\n    const tenantId = props.tenantId;\r\n    const subscriptionId = props.subscriptionId;\r\n    return (<TooltipHost content={tenantId && subscriptionId ? (<FormattedMessage id=\"VmOperationResultGenericError\" defaultMessage=\"The lab service agent failed to install on your virtual machine. Refer to the {TroubleshootingGuide} to understand how to reimage the virtual machine to resolve the issue.\" description=\"The error message displayed on tooltip error icon for virtual machines when Als agent to provision the VM.\" values={{\r\n        TroubleshootingGuide: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={\"https://learn.microsoft.com/en-us/azure/lab-services/troubleshoot-access-lab-vm\"}>\r\n                                        <FormattedMessage id=\"agentTroubleshootingGuideLink\" defaultMessage=\"troubleshooting guidelines\" description=\"a link to the vm issues troubleshooting guidelines page.\"/>\r\n                                </Link>)\r\n    }}/>) : (<FormattedMessage id=\"VmOperationResultStudentViewError\" defaultMessage=\"The lab service agent failed to install on your virtual machine. Refer to the {TroubleshootingGuide} to understand how to reimage the virtual machine to resolve the issue.\" description=\"Error message shown when Als agent failed to provision the VM.\" values={{\r\n        TroubleshootingGuide: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={\"https://learn.microsoft.com/en-us/azure/lab-services/troubleshoot-access-lab-vm\"}>\r\n                                        <FormattedMessage id=\"agentStudentViewTroubleshootingGuideLink\" defaultMessage=\"troubleshooting guidelines\" description=\"a link to the vm issues troubleshooting guidelines page.\"/>\r\n                                </Link>)\r\n    }}/>)}>\r\n            <Icon iconName=\"StatusErrorFull\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            color: getCustomTheme().palette?.redDark,\r\n        },\r\n    }}/>\r\n        </TooltipHost>);\r\n};\r\nexport const VmHeartbeatError = (props) => {\r\n    const tenantId = props.tenantId;\r\n    const subscriptionId = props.subscriptionId;\r\n    return (<TooltipHost content={tenantId && subscriptionId ? (<FormattedMessage id=\"VmHeartbeatError\" defaultMessage=\"Your cloud virtual machine has become non-responsive and will be stopped automatically to avoid overbilling. You may want to refer to the {TroubleshootingGuide} to resolve the issue.\" description=\"The error message displayed on tooltip error icon for virtual machines when VM heartbeat was not received.\" values={{\r\n        TroubleshootingGuide: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={\"https://learn.microsoft.com/en-us/azure/lab-services/troubleshoot-access-lab-vm\"}>\r\n                                        <FormattedMessage id=\"adminTroubleshootingGuideLink\" defaultMessage=\"troubleshooting guidelines\" description=\"a link to the vm issues troubleshooting guidelines page.\"/>\r\n                                </Link>)\r\n    }}/>) : (<FormattedMessage id=\"VmHeartbeatStudentViewError\" defaultMessage=\"Your cloud virtual machine has become non-responsive and will be stopped automatically to avoid overbilling. You may want to refer to the {TroubleshootingGuide} to resolve the issue.\" description=\"Error message shown when VM heartbeat was not received.\" values={{\r\n        TroubleshootingGuide: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href=\"https://learn.microsoft.com/en-us/azure/lab-services/troubleshoot-access-lab-vm\">\r\n                                        <FormattedMessage id=\"studentTroubleshootingGuideLink\" defaultMessage=\"troubleshooting guidelines\" description=\"a link to the vm issues troubleshooting guidelines page.\"/>\r\n                                </Link>)\r\n    }}/>)}>\r\n            <Icon iconName=\"WarningSolid\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            color: getCustomTheme().palette?.yellowDark,\r\n        },\r\n    }}/>\r\n        </TooltipHost>);\r\n};\r\n","import * as React from 'react';\r\nimport { Icon, TooltipHost } from '@fluentui/react';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport { useIntl } from 'react-intl';\r\nimport { OperationType } from '../data/models/vnext/operation';\r\nimport { messages } from '../vm-list/vm-list-messages';\r\nexport const VmOperationSuccess = (props) => {\r\n    const intl = useIntl();\r\n    const vmOperationType = props.operationType;\r\n    return (<TooltipHost content={intl.formatMessage(messages.operationResultGenericSuccess, {\r\n        Operation: vmOperationType === OperationType.StartOperation\r\n            ? intl.formatMessage(messages.StartOperation)\r\n            : vmOperationType === OperationType.StopOperation\r\n                ? intl.formatMessage(messages.StopOperation)\r\n                : '',\r\n    })}>\r\n            <Icon iconName=\"SkypeCheck\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            color: getCustomTheme().palette?.green,\r\n        },\r\n    }}/>\r\n        </TooltipHost>);\r\n};\r\n","import { ButtonType, DirectionalHint, DocumentCard, DocumentCardActions, DocumentCardLogo, DocumentCardTitle, DocumentCardType, Icon, ProgressIndicator, Spinner, SpinnerSize, TooltipHost, Stack, MessageBar, MessageBarType, Link, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport './student-vm-card.css';\r\nimport { getConnectionContextMenuItems } from '../common/selectors/vm-connect';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport { VmPowerState } from '../common/vm/vm-power-state';\r\nimport { ConnectionType } from '../data/models/environment-common';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { isValidResourceId } from '../utils/resource-id';\r\nimport { VmOperationError, VmHeartbeatError } from '../vm-list/vm-operation-error';\r\nimport OperationStatus from '../utils/operation-status';\r\nimport { VmOperationSuccess } from '../vm-list/vm-operation-success';\r\nimport { OperationType, mapResourceErrorToOperation } from '../data/models/vnext/operation';\r\nimport { messages as VmListMessages } from '../vm-list/vm-list-messages';\r\nconst messages = defineMessages({\r\n    vmConnectAria: {\r\n        id: 'VmConnectAria',\r\n        defaultMessage: 'Connect to the virtual machine',\r\n        description: 'Aria label for a button that connects to a VM.',\r\n    },\r\n    vmResetPasswordTitle: {\r\n        id: 'VmResetPasswordTitle',\r\n        defaultMessage: 'Reset password',\r\n        description: 'Title for the reset password button.',\r\n    },\r\n    vmQuotaProgressMessage: {\r\n        id: 'VmQuotaProgressMessage',\r\n        defaultMessage: '{hoursUsed} / {quotaHours} hour(s) used',\r\n        description: 'Message to display the amount of quota hours that have been consumed.',\r\n    },\r\n    moreVmActionsAria: {\r\n        id: 'MoreVmActionsAria',\r\n        defaultMessage: 'More actions menu',\r\n        description: 'Aria label for a button that contains additional VM actions.',\r\n    },\r\n    vmScheduleInProgressTooltip: {\r\n        id: 'VmScheduleInProgressTooltip',\r\n        defaultMessage: 'Usage is not tracked during scheduled class time.',\r\n        description: 'Message displayed in a callout / tooltip when hovering over the hour quota bar when a class is in progress.',\r\n    },\r\n    vmUnavailableMessage: {\r\n        id: 'VMUnavailableMessage',\r\n        defaultMessage: 'You have registered for this lab, but the virtual machine is not yet available.',\r\n        description: 'Message to display when the virtual machine is not available.',\r\n    },\r\n});\r\nconst VmScheduleAndPasswordResetStatusInjected = (props) => {\r\n    let message;\r\n    const { palette } = getCustomTheme();\r\n    if (props.isResettingPassword) {\r\n        const resettingPasswordMessage = props.intl.formatMessage(commonMessages.resettingPassword);\r\n        const settingPasswordMessage = props.intl.formatMessage(commonMessages.settingPassword);\r\n        return (<div className=\"student-vm-card__change-password-status-container ms-fontSize-12\">\r\n                <Spinner size={SpinnerSize.medium} labelPosition=\"right\" label={(!props.lastPasswordReset && settingPasswordMessage) || resettingPasswordMessage} styles={{\r\n            root: {\r\n                alignContent: 'flex-start',\r\n                justifyContent: 'flex-start',\r\n            },\r\n        }}/>\r\n                <div className=\"student-vm-card__change-password-status-message\" style={{ color: palette?.themePrimary, marginLeft: '30px' }}>\r\n                    <FormattedMessage id=\"VmPasswordChangeMessage\" defaultMessage=\"This may take several minutes...\" description=\"Message shown below the loading spinner while password changes are in progress.\"/>\r\n                </div>\r\n            </div>);\r\n    }\r\n    else if (props.isScheduleRunning) {\r\n        message = (<FormattedMessage id=\"VmScheduleInProgressMessage\" defaultMessage=\"Class in progress\" description=\"Message displayed on the VM card when the lab scheduled hours are in progress.\"/>);\r\n    }\r\n    else if (props.isScheduleOnly) {\r\n        message = (<FormattedMessage id=\"VmScheduleOnlyMessage\" defaultMessage=\"Available during classes only\" description=\"Message displayed on the VM card when the VM is only available during scheduled hours.\"/>);\r\n    }\r\n    else if (props.hasUnlimitedQuota) {\r\n        message = (<FormattedMessage id=\"VmUnlimitedHoursMessage\" defaultMessage=\"Unlimited hours\" description=\"Message displayed on the VM card when the user has unlimited hours to use.\"/>);\r\n    }\r\n    else {\r\n        return null;\r\n    }\r\n    return (<div className=\"student-vm-card__content-hours-note\">\r\n            <Icon iconName=\"Clock\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            marginRight: '6px',\r\n            color: palette?.themePrimary,\r\n        },\r\n    }}/>\r\n            <div className=\"ms-fontWeight-semibold\">{message}</div>\r\n        </div>);\r\n};\r\nconst VmScheduleAndPasswordResetStatus = injectIntl(VmScheduleAndPasswordResetStatusInjected);\r\nconst VmQuotaProgressInjected = (props) => {\r\n    const { isScheduleRunning, hoursUsed, quotaHours, intl } = props;\r\n    return (<ProgressIndicator description={!isScheduleRunning\r\n        ? props.intl.formatMessage(messages.vmQuotaProgressMessage, {\r\n            hoursUsed: intl.formatNumber(hoursUsed, {\r\n                maximumFractionDigits: 1,\r\n            }),\r\n            quotaHours: intl.formatNumber(quotaHours, {\r\n                maximumFractionDigits: 0,\r\n            }),\r\n        })\r\n        : ''} percentComplete={hoursUsed / quotaHours} barHeight={4} styles={{\r\n        root: {\r\n            flexGrow: 1,\r\n        },\r\n        itemProgress: {\r\n            paddingTop: 6,\r\n            paddingBottom: 6,\r\n        },\r\n        progressBar: {\r\n            // todo: get the color from the theme\r\n            background: (isScheduleRunning && '#979593') || (hoursUsed >= quotaHours && '#DA3B01') || undefined,\r\n        },\r\n        progressTrack: {\r\n            background: '#EDEBE9',\r\n        },\r\n    }}/>);\r\n};\r\nexport const VmQuotaProgress = injectIntl(VmQuotaProgressInjected);\r\nconst StudentVmCardInjected = (props) => {\r\n    const { item, intl, isBastionEnabled, isTeamsIntegrationEnabled } = props;\r\n    const { formatMessage: msg } = intl;\r\n    const vmConnectAria = msg(messages.vmConnectAria);\r\n    const vmScheduleInProgressTooltip = msg(messages.vmScheduleInProgressTooltip);\r\n    const isVCurrentVM = isValidResourceId(item.id);\r\n    const connectionTypes = isVCurrentVM\r\n        ? item.connectionTypes.filter((type) => isBastionEnabled || (type !== ConnectionType.RdpInBrowser && type !== ConnectionType.SshInBrowser))\r\n        : item.connectionTypes;\r\n    const isRdpConnectionInTeams = isTeamsIntegrationEnabled && item.connectionTypes.indexOf(ConnectionType.Rdp) > -1;\r\n    const connectAction = {\r\n        ariaLabel: vmConnectAria,\r\n        disabled: !item.canConnect,\r\n        iconProps: {\r\n            iconName: 'ConnectVirtualMachine',\r\n            styles: {\r\n                root: {\r\n                    fontSize: '16px',\r\n                    lineHeight: '16px',\r\n                },\r\n            },\r\n        },\r\n        title: vmConnectAria,\r\n        buttonType: ButtonType.icon,\r\n        menuIconProps: {\r\n            // this is used to hide the chevron\r\n            style: { display: 'none' },\r\n        },\r\n        onClick: connectionTypes.length === 1 && !isRdpConnectionInTeams\r\n            ? () => props.onConnect(item, connectionTypes[0])\r\n            : undefined,\r\n    };\r\n    if (connectionTypes.length > 1 || isRdpConnectionInTeams) {\r\n        const items = getConnectionContextMenuItems(item.canConnect, item, connectionTypes, props.onConnect, intl, isTeamsIntegrationEnabled);\r\n        connectAction.menuProps = { items, isSubMenu: true };\r\n    }\r\n    const moreActions = [connectAction];\r\n    const menuItems = [];\r\n    const vmOperation = item.operation || mapResourceErrorToOperation(item.resourceOperationError);\r\n    const vmOperationError = item.resourceOperationError;\r\n    if (!item.useSharedPassword && (isVCurrentVM || item.isRunning)) {\r\n        menuItems.push({\r\n            key: 'ResetPassword',\r\n            text: msg(messages.vmResetPasswordTitle),\r\n            disabled: !item.canResetPassword,\r\n            iconProps: {\r\n                iconName: 'Permissions',\r\n                styles: {\r\n                    root: {\r\n                        fontSize: '16px',\r\n                        lineHeight: '16px',\r\n                    },\r\n                },\r\n            },\r\n            onClick: () => {\r\n                props.onResetPassword(item);\r\n            },\r\n        });\r\n    }\r\n    if (!isValidResourceId(item.id)) {\r\n        if (item.canRedeploy) {\r\n            menuItems.push({\r\n                key: 'troubleshoot',\r\n                text: msg(commonMessages.troubleshoot),\r\n                iconProps: { iconName: 'Repair' },\r\n                onClick: () => {\r\n                    props.onShowTroubleshootDialog(item);\r\n                },\r\n            });\r\n        }\r\n        menuItems.push({\r\n            key: 'reimage',\r\n            iconProps: { iconName: 'Refresh' },\r\n            text: msg(commonMessages.reset),\r\n            onClick: () => {\r\n                props.onReimage(item);\r\n            },\r\n            disabled: !item.canReimage,\r\n        });\r\n    }\r\n    if (item.connectionTypes.includes(ConnectionType.Rdp) && !!item.rdpAuthority) {\r\n        menuItems.push({\r\n            key: 'ShowRdpInfo',\r\n            text: msg(commonMessages.showRdpInfoTitle),\r\n            iconProps: {\r\n                iconName: 'ClipboardList',\r\n                styles: {\r\n                    root: {\r\n                        fontSize: '16px',\r\n                        lineHeight: '16px',\r\n                    },\r\n                },\r\n            },\r\n            onClick: () => {\r\n                props.onShowRdpInfo(item);\r\n            },\r\n        });\r\n    }\r\n    if (menuItems.length > 0) {\r\n        const moreVmActionsAria = msg(messages.moreVmActionsAria);\r\n        moreActions.push({\r\n            ariaLabel: moreVmActionsAria,\r\n            menuIconProps: {\r\n                iconName: 'MoreVertical',\r\n                ariaLabel: moreVmActionsAria,\r\n                title: moreVmActionsAria,\r\n                styles: {\r\n                    root: {\r\n                        fontSize: '16px',\r\n                        lineHeight: '16px',\r\n                    },\r\n                },\r\n            },\r\n            menuProps: {\r\n                items: menuItems,\r\n            },\r\n            disabled: menuItems.findIndex((item) => !item.disabled) < 0,\r\n        });\r\n    }\r\n    return (<DocumentCard type={DocumentCardType.normal} styles={{\r\n        root: {\r\n            margin: '10px',\r\n            width: '330px',\r\n            maxWidth: '330px',\r\n            height: '300px',\r\n            maxHeight: '300px',\r\n            display: 'flex',\r\n            flex: '0 0',\r\n            flexDirection: 'column',\r\n            boxShadow: '0px 1.2px 3.6px rgba(0, 0, 0, 0.108), 0px 6.4px 14.4px rgba(0, 0, 0, 0.132)',\r\n            borderRadius: '2px',\r\n            backgroundColor: item.isMoving || item.isUnavailable ? '#FAF9F8' : undefined,\r\n        },\r\n    }}>\r\n            <div className=\"student-vm-card__header\">\r\n                <div className=\"student-vm-card__header-title-container\">\r\n                    {!isVCurrentVM && (vmOperation?.status == OperationStatus.Failed) && vmOperationError?.code !== \"HeartbeatNotReceived\" && (<Stack styles={{ root: { paddingTop: '13px', paddingLeft: '10px' } }}>\r\n                            <VmOperationError operationType={vmOperation?.operationType}/>\r\n                        </Stack>)}\r\n                    {!isVCurrentVM && vmOperation?.status == OperationStatus.Succeeded && vmOperationError?.code !== \"HeartbeatNotReceived\" && (<Stack styles={{ root: { paddingTop: '13px', paddingLeft: '10px' } }}>\r\n                            <VmOperationSuccess operationType={vmOperation?.operationType}/>\r\n                        </Stack>)}\r\n                    {!isVCurrentVM && vmOperationError?.code == \"HeartbeatNotReceived\" && (<Stack styles={{ root: { paddingTop: '13px', paddingLeft: '10px' } }}>\r\n                            <VmHeartbeatError />\r\n                        </Stack>)}\r\n\r\n                    <DocumentCardTitle title={item.title || ''} styles={{\r\n        root: {\r\n            overflow: 'hidden',\r\n            whiteSpace: 'nowrap',\r\n            textOverflow: 'ellipsis',\r\n            fontWeight: 600,\r\n            height: '38px',\r\n            marginTop: '25px',\r\n            paddingTop: '0px',\r\n            paddingBottom: '0px',\r\n            paddingRight: '0px',\r\n            paddingLeft: '11px',\r\n        },\r\n    }}/>\r\n                </div>\r\n                <div className=\"student-vm-card__header-logo-container\">\r\n                    <span className={(!item.isWindows && 'student-vm-card__linux-logo') || ''}>\r\n                        <DocumentCardLogo logoIcon={item.isWindows ? 'WindowsLogo' : 'LinuxLogo32'} styles={{\r\n        root: {\r\n            fontSize: '28px',\r\n            lineHeight: '16px',\r\n            color: '#8A8886',\r\n        },\r\n    }}/>\r\n                    </span>\r\n                </div>\r\n            </div>\r\n\r\n            {!!item.isUnavailable && (<div className=\"student-vm-card__content\">\r\n                    <div className=\"student-vm-card__content-description\">\r\n                        <DocumentCardTitle title={msg(messages.vmUnavailableMessage)} shouldTruncate showAsSecondaryTitle styles={{\r\n        root: {\r\n            height: '100%',\r\n        },\r\n    }}/>\r\n                    </div>\r\n                </div>)}\r\n            {!item.isUnavailable && (<>\r\n                    <div className=\"student-vm-card__content\">\r\n                        \r\n                        {!isVCurrentVM && (vmOperation?.status == OperationStatus.Failed) && <MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={props.intl.formatMessage(commonMessages.close)}>\r\n                            <FormattedMessage id=\"VmOperationErrorBannerGenericMessage\" defaultMessage=\"Virtual machine {Operation} operation failed. Try {redeploying} the virtual machine. If the issue persists, consider {reimaging} it. For further assistance, request your IT administrator to submit a support request.\" description=\"Message displayed on a student VM card when the VM is under maintenance and can't be accessed.\" values={{\r\n        redeploying: (<Link onClick={() => props.onShowTroubleshootDialog(item)}>\r\n                                            <FormattedMessage id=\"VmOperationErrorBannerRedeploy\" defaultMessage=\"redeploying\" description=\"clickable action for redeploying the VM in the error message.\"/>\r\n                                        </Link>),\r\n        reimaging: (<Link onClick={() => props.onReimage(item)}>\r\n                                            <FormattedMessage id=\"VmOperationErrorBannerReimage\" defaultMessage='reimaging' description=\"clickable action for reimaging the VM in the error message.\"/>\r\n                                        </Link>),\r\n        Operation: vmOperation?.operationType === OperationType.StartOperation\r\n            ? intl.formatMessage(VmListMessages.StartOperation)\r\n            : (vmOperation?.operationType === OperationType.StopOperation)\r\n                ? intl.formatMessage(VmListMessages.StopOperation)\r\n                : '',\r\n    }}/>\r\n                        </MessageBar>}\r\n                        <div className=\"student-vm-card__content-description\">\r\n                            <DocumentCardTitle shouldTruncate={true} title={item.description || ''} showAsSecondaryTitle={true} styles={{\r\n        root: {\r\n            height: '100%',\r\n        },\r\n    }}/>                   \r\n                        </div>                  \r\n                        <div className=\"student-vm-card__content-hours-used\">\r\n                            <div className=\"student-vm-card__progress-bar-container\">\r\n                                {!item.isMoving &&\r\n        !item.isResettingPassword &&\r\n        !item.hasUnlimitedQuota &&\r\n        !item.isScheduleOnly && (<TooltipHost content={vmScheduleInProgressTooltip} directionalHint={DirectionalHint.topLeftEdge} hidden={!item.isScheduleRunning} calloutProps={{\r\n        calloutMaxWidth: 244,\r\n        directionalHint: DirectionalHint.topLeftEdge,\r\n        className: 'student-vm-card__progress-bar-tooltip-container',\r\n    }}>                                           \r\n                                            <VmQuotaProgress {...item}/>\r\n                                        </TooltipHost>)}\r\n                            </div>\r\n                            <VmScheduleAndPasswordResetStatus {...item}/>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"student-vm-card__divider ms-bgColor-neutralLight\"/>\r\n                    <div className=\"student-vm-card__footer\">\r\n                        {item.isMoving && (<div className=\"student-vm-card__footer-message\">\r\n                                <FormattedMessage id=\"StudentVmCardMaintenanceMessage\" defaultMessage=\"This virtual machine is part of a lab that is under maintenance. You can't access it at this time.\" description=\"Message displayed on a student VM card when the VM is under maintenance and can't be accessed.\"/>\r\n                            </div>)}\r\n                        {!item.isMoving && (<>\r\n                                {!item.isResettingPassword && (<div style={{ marginLeft: 8 }}>\r\n                                        <VmPowerState vmState={item.vmState} forceDisable={item.isResettingPassword || (!item.canStart && !item.canStop)} onStart={() => props.onStart(item)} onStop={() => props.onStop(item)}/>\r\n                                    </div>)}\r\n                                <div className=\"student-vm-card__footer-more-menu\">\r\n                                    {moreActions.length > 0 ? (<DocumentCardActions actions={moreActions} styles={{\r\n        root: {\r\n            paddingLeft: '0px',\r\n            paddingRight: '0px',\r\n            selectors: {\r\n                ':hover': getCustomTheme().palette?.themePrimary,\r\n            },\r\n        },\r\n    }}/>) : (<div className=\"student-vm-card__footer-more-menu--placeholder\"/>)}\r\n                                </div>\r\n                            </>)}\r\n                    </div>\r\n                </>)}\r\n        </DocumentCard>);\r\n};\r\nexport const StudentVmCard = injectIntl(StudentVmCardInjected);\r\nexport default StudentVmCard;\r\n","import { Announced } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useIntl, defineMessages } from 'react-intl';\r\nimport { VmState } from '../data/models/environment-common';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nconst messages = defineMessages({\r\n    studentVmListAnnouncedInfomation: {\r\n        id: 'StudentVmListAnnounceInfomation',\r\n        defaultMessage: 'Virtual machine of {labName} is now {vmState}',\r\n        description: 'Information about the change of virtual machine state that need to be announced to users.',\r\n    },\r\n});\r\nexport const StudentVmListAnnounced = (props) => {\r\n    const { vms } = props;\r\n    const intl = useIntl();\r\n    const msg = intl.formatMessage;\r\n    const map = {};\r\n    map[VmState.Creating] = msg(commonMessages.creatingState);\r\n    map[VmState.Starting] = msg(commonMessages.startingState);\r\n    map[VmState.Running] = msg(commonMessages.runningState);\r\n    map[VmState.Deleting] = msg(commonMessages.deletingState);\r\n    map[VmState.Stopping] = msg(commonMessages.stoppingState);\r\n    map[VmState.Stopped] = msg(commonMessages.stoppedState);\r\n    map[VmState.Failed] = msg(commonMessages.failedState);\r\n    map[VmState.ResettingPassword] = msg(commonMessages.resettingPasswordState);\r\n    map[VmState.Unknown] = msg(commonMessages.unknownState);\r\n    const [announced, setAnnounced] = React.useState(null);\r\n    const previousVms = usePrevious(vms);\r\n    React.useEffect(() => {\r\n        if (!previousVms) {\r\n            return;\r\n        }\r\n        const updatedVms = [];\r\n        for (const vm of vms) {\r\n            const vmIndex = previousVms.findIndex((o) => o.id === vm.id);\r\n            if (vmIndex > -1 && vm.vmState !== previousVms[vmIndex].vmState) {\r\n                updatedVms.push(vm);\r\n            }\r\n        }\r\n        if (updatedVms.length > 0) {\r\n            const announcedItems = updatedVms.map((vm) => (<Announced key={vm.id} message={intl.formatMessage(messages.studentVmListAnnouncedInfomation, {\r\n                labName: vm.title,\r\n                vmState: map[vm.vmState],\r\n            })} aria-live=\"assertive\"/>));\r\n            setAnnounced(<>{announcedItems}</>);\r\n        }\r\n    }, [vms]);\r\n    return <>{announced}</>;\r\n};\r\nexport default StudentVmListAnnounced;\r\n","import { MessageBar, MessageBarType } from '@fluentui/react/lib/MessageBar';\r\nimport * as React from 'react';\r\nimport { injectIntl, FormattedMessage, useIntl } from 'react-intl';\r\nimport { ErrorCode } from '../common/error-codes';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { commonMessages } from '../language/common-messages';\r\nconst ErrorMessage = ({ error, labName }) => {\r\n    switch (error.failureOperation) {\r\n        case FailureOperation.StartUserEnvironment:\r\n            return (<FormattedMessage id=\"StartUserEnvironmentFailedErrorMessage\" defaultMessage=\"Failed to start the virtual machine ‘{labName}’.\" description=\"The error message displayed to users when we fail to start a virtual machine. {labName} is the name of the lab that failed.\" values={{ labName }}/>);\r\n        case FailureOperation.StopUserEnvironment:\r\n            return (<FormattedMessage id=\"StopUserEnvironmentFailedErrorMessage\" defaultMessage=\"Failed to stop the virtual machine ‘{labName}’.\" description=\"The error message displayed to users when we fail to stop a virtual machine. {labName} is the name of the lab that failed.\" values={{ labName }}/>);\r\n        case FailureOperation.ResetUserEnvironmentPassword: {\r\n            switch (error.code) {\r\n                case ErrorCode.PasswordNotValid:\r\n                    return (<FormattedMessage id=\"ResetUserEnvironmentPasswordInvalidErrorMessage\" defaultMessage=\"Unable to reset the password for the virtual machine ‘{labName}’ because it doesn't meet password policies.\" description=\"Message to indicate that the provided password wasn't complex enough, long enough, or reused an older password. {labName} is the name of the lab that failed.\" values={{ labName }}/>);\r\n                default:\r\n                    return (<FormattedMessage id=\"ResetUserEnvironmentPasswordFailedErrorMessage\" defaultMessage=\"Failed to reset the password for the virtual machine ‘{labName}’.\" description=\"The error message displayed to users when we fail to reset the password for a virtual machine. {labName} is the name of the lab that failed.\" values={{ labName }}/>);\r\n            }\r\n        }\r\n        case FailureOperation.ReimageUserVirtualMachine:\r\n            return (<FormattedMessage id=\"ReimageUserVirtualMachineFailedErrorMessage\" defaultMessage=\"Failed to reimage the virtual machine ‘{labName}’.\" description=\"The error message displayed to users when we fail to reimage a virtual machine. {labName} is the name of the lab that failed.\" values={{ labName }}/>);\r\n        default:\r\n            return (<FormattedMessage id=\"RedeployUserVirtualMachineFailedErrorMessage\" defaultMessage=\"Failed to redeploy the virtual machine ‘{labName}’.\" description=\"The error message displayed to users when we fail to redeploy a virtual machine. {labName} is the name of the lab that failed.\" values={{ labName }}/>);\r\n    }\r\n};\r\nconst ErrorMapMessageBars = (props) => {\r\n    const intl = useIntl();\r\n    const { errors, vms, dismissError } = props;\r\n    const messageBarCloseAria = intl.formatMessage(commonMessages.close);\r\n    return (<>\r\n            {errors.count() > 0 &&\r\n        errors\r\n            .map((errors, environmentId) => {\r\n            const vm = vms.find((vm) => vm.id === environmentId);\r\n            const labName = vm ? vm.title : '';\r\n            return errors.map((error, errorIndex) => {\r\n                return (<MessageBar key={errorIndex} messageBarType={MessageBarType.error} dismissButtonAriaLabel={messageBarCloseAria} onDismiss={() => dismissError(environmentId, errorIndex)}>\r\n                                    <ErrorMessage error={error} labName={labName}/>\r\n                                </MessageBar>);\r\n            });\r\n        })\r\n            .toList()}\r\n        </>);\r\n};\r\nconst ErrorBannersInjected = (props) => {\r\n    const { vms, listEnvironmentsError, vCurrentStartErrors, vCurrentStopErrors, vCurrentResetPasswordErrors, vNextResetPasswordErrors, vNextStopErrors, vNextStartErrors, redeployErrors, reimageErrors, dismissListEnvironmentsError, dismissStartEnvironmentError, dismissStopEnvironmentError, dismissResetEnvironmentPasswordError, dismissReimageError, dismissRedeployError, } = props;\r\n    return (<>\r\n            <ListErrorBanner listEnvironmentsError={listEnvironmentsError} dismissListEnvironmentsError={dismissListEnvironmentsError}/>\r\n            {vCurrentStartErrors.count() > 0 && (<ErrorMapMessageBars errors={vCurrentStartErrors} vms={vms} dismissError={dismissStartEnvironmentError}/>)}\r\n            {!!vNextStartErrors && vNextStartErrors.count() > 0 && (<ErrorMapMessageBars errors={vNextStartErrors} vms={vms} dismissError={dismissStartEnvironmentError}/>)}\r\n            {vCurrentStopErrors.count() > 0 && (<ErrorMapMessageBars errors={vCurrentStopErrors} vms={vms} dismissError={dismissStopEnvironmentError}/>)}\r\n            {!!vNextStopErrors && vNextStopErrors.count() > 0 && (<ErrorMapMessageBars errors={vNextStopErrors} vms={vms} dismissError={dismissStopEnvironmentError}/>)}\r\n            {vCurrentResetPasswordErrors.count() > 0 && (<ErrorMapMessageBars errors={vCurrentResetPasswordErrors} vms={vms} dismissError={dismissResetEnvironmentPasswordError}/>)}\r\n            {!!vNextResetPasswordErrors && vNextResetPasswordErrors.count() > 0 && (<ErrorMapMessageBars errors={vNextResetPasswordErrors} vms={vms} dismissError={dismissResetEnvironmentPasswordError}/>)}\r\n            {!!reimageErrors && reimageErrors.count() > 0 && (<ErrorMapMessageBars errors={reimageErrors} vms={vms} dismissError={dismissReimageError}/>)}\r\n            {!!redeployErrors && redeployErrors.count() > 0 && (<ErrorMapMessageBars errors={redeployErrors} vms={vms} dismissError={dismissRedeployError}/>)}\r\n        </>);\r\n};\r\nexport const ErrorBanners = injectIntl(ErrorBannersInjected);\r\nconst ListErrorBannerInjected = (props) => {\r\n    const { listEnvironmentsError } = props;\r\n    const isPartial = listEnvironmentsError?.failureOperation === FailureOperation.ListUserEnvironmentsPartial;\r\n    const intl = useIntl();\r\n    const messageBarCloseAria = intl.formatMessage(commonMessages.close);\r\n    return (<>\r\n            {listEnvironmentsError && (<MessageBar messageBarType={isPartial ? MessageBarType.warning : MessageBarType.error} dismissButtonAriaLabel={messageBarCloseAria} onDismiss={props.dismissListEnvironmentsError}>\r\n                    {isPartial ? (<FormattedMessage id=\"ListUserEnvironmentsPartiallyFailedErrorMessage\" defaultMessage=\"This list may be incomplete - an error occurred while trying to retrieve or update the list of virtual machines.\" description=\"The error message displayed to users when we partially fail to retrieve or refresh the list of virtual machines.\"/>) : (<FormattedMessage id=\"ListUserEnvironmentsFailedErrorMessage\" defaultMessage=\"An error occurred while trying to retrieve or update the list of virtual machines.\" description=\"The error message displayed to users when we fail to retrieve or refresh the list of virtual machines.\"/>)}\r\n                </MessageBar>)}\r\n        </>);\r\n};\r\nexport const ListErrorBanner = injectIntl(ListErrorBannerInjected);\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    virtualMachinesPageHeader: {\r\n        id: 'VirtualMachinesPageHeader',\r\n        defaultMessage: 'My virtual machines',\r\n        description: 'The page header for the student virtual machines page.',\r\n    },\r\n});\r\nexport default messages;\r\n","export const ProvisioningState = {\r\n    Unknown: '',\r\n    None: 'none',\r\n    Succeeded: 'succeeded',\r\n    Failed: 'failed',\r\n    Creating: 'creating',\r\n    Deleting: 'deleting',\r\n    Moving: 'moving',\r\n};\r\nexport const OperationResultStatus = {\r\n    Running: 'Running',\r\n    Succeeded: 'Succeeded',\r\n    Failed: 'Failed',\r\n};\r\n","import _ from 'lodash';\r\nimport ip from 'ip';\r\nimport { caseInsensitiveLocaleCompare } from './string-comparison';\r\nexport function objectKeySorter(key, isSortDescending, stateToLabelMap) {\r\n    const objectComparer = (a, b) => {\r\n        const aValue = a[key];\r\n        const bValue = b[key];\r\n        // HACK: Need a better way to specify to do IP address sorting\r\n        if (key === 'privateIpAddress') {\r\n            if (!aValue && !bValue) {\r\n                return 0;\r\n            }\r\n            else if (!aValue) {\r\n                return 1;\r\n            }\r\n            else if (!bValue) {\r\n                return -1;\r\n            }\r\n            const aLong = ip.toLong(aValue);\r\n            const bLong = ip.toLong(bValue);\r\n            const numberComparer = numberSorter(isSortDescending);\r\n            return numberComparer(aLong, bLong);\r\n        }\r\n        else if (_.isString(aValue) || _.isString(bValue)) {\r\n            const stringComparer = stringSorter(isSortDescending, stateToLabelMap);\r\n            return stringComparer(aValue, bValue);\r\n        }\r\n        else if (_.isNumber(aValue) || _.isNumber(bValue)) {\r\n            const numberComparer = numberSorter(isSortDescending);\r\n            return numberComparer(aValue, bValue);\r\n        }\r\n        else {\r\n            if (aValue < bValue) {\r\n                return isSortDescending ? 1 : -1;\r\n            }\r\n            else if (aValue < bValue) {\r\n                return isSortDescending ? -1 : 1;\r\n            }\r\n            return 0;\r\n        }\r\n    };\r\n    return objectComparer;\r\n}\r\nexport const stringSorter = (isSortDescending, stateToLabelMap) => {\r\n    const stringComparer = (a, b) => {\r\n        if (!a && !b) {\r\n            return 0;\r\n        }\r\n        else if (!a) {\r\n            return 1;\r\n        }\r\n        else if (!b) {\r\n            return -1;\r\n        }\r\n        if (stateToLabelMap) {\r\n            a = stateToLabelMap[a];\r\n            b = stateToLabelMap[b];\r\n        }\r\n        if (caseInsensitiveLocaleCompare(a, b) < 0) {\r\n            return isSortDescending ? 1 : -1;\r\n        }\r\n        else if (caseInsensitiveLocaleCompare(a, b) > 0) {\r\n            return isSortDescending ? -1 : 1;\r\n        }\r\n        else {\r\n            return 0;\r\n        }\r\n    };\r\n    return stringComparer;\r\n};\r\nexport const numberSorter = (isSortDescending) => {\r\n    const numberComparer = (a, b) => {\r\n        if (a < b) {\r\n            return isSortDescending ? 1 : -1;\r\n        }\r\n        else if (a > b) {\r\n            return isSortDescending ? -1 : 1;\r\n        }\r\n        return 0;\r\n    };\r\n    return numberComparer;\r\n};\r\nexport function objectMultiKeySorter(keys, isSortDescending, stateToLabelMaps) {\r\n    const objectMultiKeyComparer = (a, b) => {\r\n        for (let index = 0; index < keys.length; index++) {\r\n            const key = keys[index];\r\n            if (a[key] !== b[key] || index == keys.length - 1) {\r\n                const stateToLabelMap = stateToLabelMaps ? stateToLabelMaps[index] : undefined;\r\n                const objectKeyComparer = objectKeySorter(key, isSortDescending, stateToLabelMap);\r\n                return objectKeyComparer(a, b);\r\n            }\r\n        }\r\n        return 0;\r\n    };\r\n    return objectMultiKeyComparer;\r\n}\r\n","import { Map } from 'immutable';\r\nimport memoize from 'memoize-one';\r\nimport { getConnectionTypes, getVNextConnectionTypes } from '../common/selectors/vm-connect';\r\nimport { ProvisioningState } from '../data/models/common';\r\nimport { VmState, OperatingSystem } from '../data/models/environment-common';\r\nimport { storeIsLoading, isTeamsMode, isVNextFeatureEnabledOrLms, isLmsMode, isBastionFeatureEnabled, } from '../redux/selectors/common-selectors';\r\nimport { getGroupId, shouldFilterLabsByGroupId } from '../redux/selectors/group-selectors';\r\nimport { isValidSupportInfo } from '../redux/selectors/lab-account-selectors';\r\nimport { stringSorter } from '../utils/sorting';\r\nimport { LabsApiModels } from 'lab-services-internal';\r\nimport moment from 'moment';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { isLmsStudent } from '../redux/selectors/lti-selectors';\r\nexport const mustResetPasswordBeforeConnect = (item) => !item.useSharedPassword && !item.lastPasswordReset;\r\nexport const vmCanStartAgain = (item) => item.isScheduleRunning || item.hasUnlimitedQuota || item.hoursUsed < item.quotaHours;\r\nexport const vmCanRdpAndSsh = (item) => !!item.rdpAuthority && !!item.sshAuthority;\r\nexport const isVmMoving = (environment) => {\r\n    return environment.provisioningState.toLowerCase() === ProvisioningState.Moving;\r\n};\r\nexport const studentVmList = memoize((environments) => {\r\n    const studentVms = [];\r\n    environments.forEach((environment) => {\r\n        const { provisioningState } = environment;\r\n        if (provisioningState === ProvisioningState.Deleting) {\r\n            return;\r\n        }\r\n        const { id, name: title, vmState, pendingVmState, usageQuota, totalUsage, runningInSchedule: isScheduleRunning, description, passwordLastReset: lastPasswordReset, vmUsername: username, vmRdpAuthority: rdpAuthority, vmRdpBrowserUrl: rdpBrowserUrl, vmSshAuthority: sshAuthority, vmSshBrowserUrl: sshBrowserUrl, useSharedPassword, os, supportInfo, } = environment;\r\n        const quotaHours = usageQuota ? usageQuota.asHours() : undefined;\r\n        const hoursUsed = totalUsage ? totalUsage.asHours() : undefined;\r\n        // prefer our pending state if we have one to track in progress operations\r\n        const state = pendingVmState !== VmState.None ? pendingVmState : vmState;\r\n        const isMoving = isVmMoving(environment);\r\n        const isStarting = state === VmState.Starting;\r\n        const isStopping = state === VmState.Stopping;\r\n        const isRunning = state === VmState.Running;\r\n        const isStopped = state === VmState.Stopped;\r\n        const isResettingPassword = state === VmState.ResettingPassword;\r\n        const isCreating = state === VmState.Creating;\r\n        const canResetPassword = !isMoving && (isRunning || isStopped) && !isResettingPassword && !useSharedPassword;\r\n        const hasUnlimitedQuota = usageQuota === undefined;\r\n        const isScheduleOnly = !hasUnlimitedQuota && !(quotaHours > 0);\r\n        const canStart = !isMoving && isStopped && (isScheduleRunning || hasUnlimitedQuota || hoursUsed < quotaHours);\r\n        const connectionTypes = getConnectionTypes(rdpAuthority, rdpBrowserUrl, sshAuthority, sshBrowserUrl);\r\n        studentVms.push({\r\n            vmState: state,\r\n            canConnect: isRunning,\r\n            canStart,\r\n            canStop: isRunning,\r\n            canResetPassword,\r\n            description,\r\n            hoursUsed,\r\n            id,\r\n            quotaHours,\r\n            title,\r\n            hasUnlimitedQuota,\r\n            isScheduleOnly,\r\n            isCreating,\r\n            isStarting,\r\n            isRunning,\r\n            isStopping,\r\n            isStopped,\r\n            isMoving,\r\n            isResettingPassword,\r\n            lastPasswordReset,\r\n            username,\r\n            rdpAuthority,\r\n            rdpBrowserUrl,\r\n            sshAuthority,\r\n            sshBrowserUrl,\r\n            isScheduleRunning,\r\n            isWindows: os === OperatingSystem.Windows,\r\n            isVNextLab: false,\r\n            useSharedPassword,\r\n            connectionTypes,\r\n            supportInfo,\r\n        });\r\n    });\r\n    return studentVms;\r\n});\r\nfunction convertLabsApiVirtualMachineStateToVmState(virutalMachineState) {\r\n    switch (virutalMachineState) {\r\n        case LabsApiModels.VirtualMachineState.Creating:\r\n            return VmState.Creating;\r\n        case LabsApiModels.VirtualMachineState.Deleting:\r\n            return VmState.Deleting;\r\n        case LabsApiModels.VirtualMachineState.Moving:\r\n            return VmState.Moving;\r\n        case LabsApiModels.VirtualMachineState.ResettingPassword:\r\n            return VmState.ResettingPassword;\r\n        case LabsApiModels.VirtualMachineState.Reimaging:\r\n            return VmState.Reimaging;\r\n        case LabsApiModels.VirtualMachineState.Redeploying:\r\n            return VmState.Redeploying;\r\n        case LabsApiModels.VirtualMachineState.Running:\r\n            return VmState.Running;\r\n        case LabsApiModels.VirtualMachineState.Starting:\r\n            return VmState.Starting;\r\n        case LabsApiModels.VirtualMachineState.Stopped:\r\n            return VmState.Stopped;\r\n        case LabsApiModels.VirtualMachineState.Stopping:\r\n            return VmState.Stopping;\r\n        case LabsApiModels.VirtualMachineState.Updating:\r\n            return VmState.Updating;\r\n        default:\r\n            return VmState.Unknown;\r\n    }\r\n}\r\nexport const studentVNextVmList = memoize((virtualMachines, operations) => {\r\n    const studentVms = [];\r\n    let operationsArr = operations?.toArray();\r\n    virtualMachines.forEach((virtualMachine) => {\r\n        const { state: originalState } = virtualMachine;\r\n        if (originalState === LabsApiModels.VirtualMachineState.Deleting) {\r\n            return;\r\n        }\r\n        const { id, title, pendingVmState, quotaUsed, totalQuota, description, username, rdpAuthority, rdpInBrowserUrl: rdpBrowserUrl, sshAuthority, sshInBrowserUrl: sshBrowserUrl, osType, supportInfo, lastPasswordReset, scheduleEndTime, useSharedPassword, resourceOperationError, } = virtualMachine;\r\n        const quotaHours = moment.duration(totalQuota).asHours();\r\n        const hoursUsed = moment.duration(quotaUsed).asHours();\r\n        const state = convertLabsApiVirtualMachineStateToVmState(originalState);\r\n        const connectionTypes = getVNextConnectionTypes(rdpAuthority, rdpBrowserUrl, sshAuthority, sshBrowserUrl);\r\n        const vmState = pendingVmState !== VmState.None ? pendingVmState : state;\r\n        const isMoving = vmState === VmState.Moving;\r\n        const isStarting = vmState === VmState.Starting;\r\n        const isStopping = vmState === VmState.Stopping;\r\n        const isRunning = vmState === VmState.Running;\r\n        const isStopped = vmState === VmState.Stopped;\r\n        const isResettingPassword = vmState === VmState.ResettingPassword;\r\n        const isUnavailable = vmState === VmState.Creating;\r\n        const isReimaging = vmState === VmState.Reimaging;\r\n        const isRedeploying = vmState === VmState.Redeploying;\r\n        const hasUnlimitedQuota = quotaHours === undefined;\r\n        const isScheduleOnly = !hasUnlimitedQuota && !(quotaHours > 0);\r\n        const quotaNotExceeded = hasUnlimitedQuota || hoursUsed < quotaHours;\r\n        const canResetPassword = !isMoving && (isRunning || isStopped) && !isResettingPassword && quotaNotExceeded;\r\n        const canStart = !isMoving && isStopped && quotaNotExceeded;\r\n        const canStop = isRunning && quotaNotExceeded;\r\n        const canReimage = (isRunning || isStopped) && quotaNotExceeded;\r\n        const canRedeploy = (isRunning || isStopped) && quotaNotExceeded;\r\n        const operation = operationsArr?.find((op) => op.ResourceId?.id == id);\r\n        studentVms.push({\r\n            vmState,\r\n            canConnect: isRunning,\r\n            canStart,\r\n            canStop,\r\n            canResetPassword,\r\n            description,\r\n            hoursUsed,\r\n            id,\r\n            quotaHours,\r\n            title,\r\n            hasUnlimitedQuota,\r\n            isScheduleOnly,\r\n            isStarting,\r\n            isRunning,\r\n            isStopping,\r\n            isStopped,\r\n            isMoving,\r\n            isResettingPassword,\r\n            isReimaging,\r\n            isRedeploying,\r\n            username,\r\n            rdpAuthority,\r\n            rdpBrowserUrl,\r\n            sshAuthority,\r\n            sshBrowserUrl,\r\n            isWindows: osType === LabsApiModels.OsType.Windows,\r\n            isVNextLab: true,\r\n            connectionTypes,\r\n            supportInfo,\r\n            isScheduleRunning: !!scheduleEndTime,\r\n            useSharedPassword: useSharedPassword === LabServicesModels.EnableState.Enabled,\r\n            lastPasswordReset,\r\n            canRedeploy,\r\n            canReimage,\r\n            isUnavailable,\r\n            operation,\r\n            resourceOperationError,\r\n        });\r\n    });\r\n    return studentVms;\r\n});\r\nexport const getStudentVmListViewModel = memoize((state) => {\r\n    const isVNext = isVNextFeatureEnabledOrLms(state);\r\n    const isBastionEnabled = isBastionFeatureEnabled(state);\r\n    const isTeamsIntegrationEnabled = isTeamsMode(state);\r\n    const isLmsIntegrationEnabled = isLmsMode(state);\r\n    const shouldHideUserMenu = isLmsStudent(state);\r\n    const registerStore = state.get('registerStore');\r\n    const userEnvironmentStore = state.get('userEnvironmentStore');\r\n    const environments = userEnvironmentStore.get('environments');\r\n    let vms = studentVmList(environments);\r\n    const vCurrentStartErrors = userEnvironmentStore.get('startErrors');\r\n    const vCurrentStopErrors = userEnvironmentStore.get('stopErrors');\r\n    const vCurrentResetPasswordErrors = userEnvironmentStore.get('resetPasswordErrors');\r\n    const sorter = stringSorter(false);\r\n    let supportSections = Map(vms\r\n        .filter((o) => o.title)\r\n        .sort((a, b) => sorter(a.title ?? '', b.title ?? ''))\r\n        .map((o) => [o.title, isValidSupportInfo(o.supportInfo) ? o.supportInfo : {}]));\r\n    let registrationState = registerStore.get('registrationState');\r\n    if (!isVNext) {\r\n        const isLoading = storeIsLoading(userEnvironmentStore.loadState);\r\n        const listEnvironmentsError = userEnvironmentStore.get('listEnvironmentsError');\r\n        return {\r\n            vms,\r\n            listEnvironmentsError,\r\n            vCurrentStartErrors,\r\n            vCurrentStopErrors,\r\n            vCurrentResetPasswordErrors,\r\n            supportSections,\r\n            registrationState,\r\n            isLoading,\r\n            isBastionEnabled,\r\n            isTeamsIntegrationEnabled,\r\n            isVNextFeaureEnabled: isVNext,\r\n            isLmsIntegrationEnabled,\r\n            shouldHideUserMenu,\r\n        };\r\n    }\r\n    else {\r\n        const vNextRegisterStore = state.get('vNextRegisterStore');\r\n        const vNextUserVirtualMachineStore = state.get('vNextUserVirtualMachineStore');\r\n        const vNextVirtualMachines = vNextUserVirtualMachineStore.get('virtualMachines');\r\n        const vNextListEnvironmentsError = vNextUserVirtualMachineStore.get('listVirtualMachinesError');\r\n        const vNextStartErrors = vNextUserVirtualMachineStore.get('startErrors');\r\n        const vNextStopErrors = vNextUserVirtualMachineStore.get('stopErrors');\r\n        const vNextResetPasswordErrors = vNextUserVirtualMachineStore.get('resetPasswordErrors');\r\n        const reimageErrors = vNextUserVirtualMachineStore.get('reimageErrors');\r\n        const redeployErrors = vNextUserVirtualMachineStore.get('redeployErrors');\r\n        const operations = vNextUserVirtualMachineStore.get('operations');\r\n        const vNextVms = studentVNextVmList(vNextVirtualMachines, operations);\r\n        const vNextRegistrationState = vNextRegisterStore.get('registrationState');\r\n        const vNextStoreIsLoading = storeIsLoading(vNextUserVirtualMachineStore.loadState);\r\n        vms = vms.concat(vNextVms);\r\n        supportSections = Map(vms\r\n            .filter((o) => o.title)\r\n            .sort((a, b) => sorter(a.title ?? '', b.title ?? ''))\r\n            .map((o) => [o.title, isValidSupportInfo(o.supportInfo) ? o.supportInfo : {}]));\r\n        registrationState = vNextRegistrationState;\r\n        return {\r\n            vms,\r\n            supportSections,\r\n            listEnvironmentsError: vNextListEnvironmentsError,\r\n            vCurrentStartErrors,\r\n            vCurrentStopErrors,\r\n            vCurrentResetPasswordErrors,\r\n            isLoading: vNextStoreIsLoading,\r\n            registrationState,\r\n            isBastionEnabled,\r\n            isTeamsIntegrationEnabled,\r\n            reimageErrors,\r\n            redeployErrors,\r\n            isVNextFeaureEnabled: isVNext,\r\n            vNextStartErrors,\r\n            vNextStopErrors,\r\n            vNextResetPasswordErrors,\r\n            isLmsIntegrationEnabled,\r\n            shouldHideUserMenu,\r\n            operations,\r\n        };\r\n    }\r\n});\r\nexport const getStudentVmListContainerModel = memoize((state) => {\r\n    const groupId = getGroupId(state);\r\n    const studentVmListViewModel = getStudentVmListViewModel(state);\r\n    const shouldFilterByGroupId = shouldFilterLabsByGroupId(state);\r\n    return {\r\n        studentVmListViewModel,\r\n        groupId,\r\n        shouldFilterByGroupId,\r\n    };\r\n});\r\n","import * as React from 'react';\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\nimport { Icon, Stack, Link } from '@fluentui/react';\r\nimport './student-vm-no-vms-message.css';\r\nconst messages = defineMessages({\r\n    teamsStudentNoVmsHeading: {\r\n        id: 'TeamsStudentNoVmsHeading',\r\n        defaultMessage: \"This lab isn't available yet.\",\r\n        description: 'Heading for a page shown to students in Teams when they have no VMs.',\r\n    },\r\n});\r\nconst PanelViewContent = (props) => {\r\n    const { isTeamsOrLmsIntegrationEnabled } = props;\r\n    return (<Stack horizontalAlign=\"center\" style={{ textAlign: 'center' }}>\r\n            <div id=\"no-vms-message-icon-container\" style={{ paddingTop: '30px' }}>\r\n                <Icon iconName=\"empty-state\"/>\r\n            </div>\r\n            <div className=\"ms-fontWeight-semibold\">\r\n                {!isTeamsOrLmsIntegrationEnabled && (<FormattedMessage id=\"StudentNoVmsPanelTitle\" defaultMessage=\"No virtual machines are assigned to you\" description=\"The text on 'my virtual machines' flyout\"/>)}\r\n                {isTeamsOrLmsIntegrationEnabled && <FormattedMessage {...messages.teamsStudentNoVmsHeading}/>}\r\n            </div>\r\n            <div className=\"ms-fontSize-semibold\" style={{ maxWidth: '272px' }}>\r\n                {!isTeamsOrLmsIntegrationEnabled && (<FormattedMessage id=\"StudentNoVmsPanelDescription\" defaultMessage=\"Register yourself on the Users screen within a lab to access your machines here.\" description=\"The text on 'my virtual machines' flyout\"/>)}\r\n                {isTeamsOrLmsIntegrationEnabled && (<FormattedMessage id=\"TeamsStudentNoVmsPanelDescription\" defaultMessage=\"Your virtual machine will appear here when the lab is published.\" description=\"The text on 'my virtual machines' flyout\"/>)}\r\n            </div>\r\n        </Stack>);\r\n};\r\nexport const NoVmsMessage = (props) => {\r\n    const { isPanelView, isTeamsIntegrationEnabled, isLmsIntegrationEnabled } = props;\r\n    if (isPanelView) {\r\n        return (<PanelViewContent isTeamsOrLmsIntegrationEnabled={isTeamsIntegrationEnabled || isLmsIntegrationEnabled}/>);\r\n    }\r\n    if (isTeamsIntegrationEnabled || isLmsIntegrationEnabled) {\r\n        return (<Stack horizontalAlign=\"center\" verticalAlign=\"center\" grow verticalFill>\r\n                <div id=\"no-vms-message-container\">\r\n                    <Stack.Item>\r\n                        <div id=\"no-vms-message-header-container\">\r\n                            <div className=\"ms-fontSize-24 ms-fontWeight-semibold\">\r\n                                <FormattedMessage {...messages.teamsStudentNoVmsHeading}/>\r\n                            </div>\r\n                        </div>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <Stack horizontal verticalAlign=\"center\" horizontalAlign=\"center\">\r\n                            <Stack.Item>\r\n                                <div id=\"no-vms-message-icon-container\">\r\n                                    <Icon iconName=\"teams-student-empty-state\"/>\r\n                                </div>\r\n                            </Stack.Item>\r\n                            {isTeamsIntegrationEnabled && (<Stack.Item styles={{ root: { maxWidth: '330px' } }}>\r\n                                    <FormattedMessage id=\"TeamsStudentNoVmsDescription\" defaultMessage=\"The lab associated with this team hasn't been published by the lab owner, or you have not yet been added. If you need immediate access to this lab, please contact the team owner.\" description=\"Description about the availability to the virtual machines for students in Teams mode.\"/>\r\n                                </Stack.Item>)}\r\n                            {isLmsIntegrationEnabled && (<Stack.Item styles={{ root: { maxWidth: '330px' } }}>\r\n                                    <FormattedMessage id=\"LmsStudentNoVmsDescription\" defaultMessage=\"Please try again later. If you need immediate access to this lab, please contact the lab owner.\" description=\"Description about the availability to the virtual machines for students in Lms mode.\"/>\r\n                                </Stack.Item>)}\r\n                        </Stack>\r\n                    </Stack.Item>\r\n                </div>\r\n            </Stack>);\r\n    }\r\n    const createLabLink = (<Link href=\"https://aka.ms/azlabs-getstarted\">\r\n            <FormattedMessage id=\"StudentNoVmsCreateLabLinkText\" defaultMessage=\"steps to get started\" description=\"The text for the link to instruct users how to create labs. This link tag, which includes this string, will be used by string 'StudentNoVmsCreateALabAccountInstructions' as parameter {link}.\"/>\r\n        </Link>);\r\n    const registrationLinkExample = <strong>https://labs.azure.com/register/abcdefg</strong>;\r\n    return (<Stack horizontalAlign=\"center\" verticalAlign=\"center\" grow verticalFill>\r\n            <div id=\"no-vms-message-container\">\r\n                <Stack.Item>\r\n                    <div id=\"no-vms-message-header-container\">\r\n                        <div id=\"no-vms-message-header\" className=\"ms-fontSize-24 ms-fontWeight-semibold\">\r\n                            <FormattedMessage id=\"StudentNoVmsHeading\" defaultMessage=\"We can't find anything that belongs to you.\" description=\"Heading for a page shown to students when they have no VMs.\"/>\r\n                        </div>\r\n                    </div>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"center\" wrap>\r\n                        <Stack.Item>\r\n                            <div id=\"no-vms-message-icon-container\">\r\n                                <Icon iconName=\"empty-state\" styles={{\r\n        root: {\r\n            selectors: {\r\n                svg: { width: 300, height: 200 },\r\n            },\r\n        },\r\n    }}/>\r\n                            </div>\r\n                        </Stack.Item>\r\n                        <Stack.Item>\r\n                            <Stack>\r\n                                <div id=\"no-vms-message-instructions-container\">\r\n                                    <Stack.Item>\r\n                                        <div id=\"no-vms-message-create-a-lab-section\">\r\n                                            <div id=\"no-vms-message-create-a-lab-section-title\" className=\"ms-fontSize-16 ms-fontWeight-semibold\">\r\n                                                <FormattedMessage id=\"StudentNoVmsCreateALabHeading\" defaultMessage=\"Did you want to create a lab?\" description=\"Heading for a section of the page which instructs users how to create labs.\"/>\r\n                                            </div>\r\n                                            <div>\r\n                                                <FormattedMessage id=\"StudentNoVmsCreateALabAccountInstructions\" defaultMessage=\"You first need to have access to a lab plan or lab account to be able to create labs. If your work or school organization already has Azure Lab Services enabled, contact your administrator to be added. If you want to create your own, follow the {link}.\" description=\"Instructions for creating a lab account. The parameter {link} contains a link to further instructions for creating lab accounts. The text for the link is localized as string 'StudentNoVmsCreateLabLinkText'\" values={{ link: createLabLink }}/>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Stack.Item>\r\n                                    <Stack.Item>\r\n                                        <div id=\"no-vms-message-registration-section\">\r\n                                            <div id=\"no-vms-message-registration-section-title\" className=\"ms-fontSize-16 ms-fontWeight-semibold\">\r\n                                                <FormattedMessage id=\"StudentNoVmsLabRegistrationHeading\" defaultMessage=\"Were you invited to a lab?\" description=\"Heading for a section of the page which helps users with lab registration.\"/>\r\n                                            </div>\r\n                                            <div>\r\n                                                <FormattedMessage id=\"StudentNoVmsLabRegistrationInstructions\" defaultMessage=\"If you were, you should have received an access link. Go to the link to access the lab. The access link should look like this: {link}\" description=\"Instructions for lab registration. The parameter {link} contains an example registration link that is formatted in bold. It will look like https://labs.azure.com/register/abcdefg\" values={{ link: registrationLinkExample }}/>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Stack.Item>\r\n                                </div>\r\n                            </Stack>\r\n                        </Stack.Item>\r\n                    </Stack>\r\n                </Stack.Item>\r\n            </div>\r\n        </Stack>);\r\n};\r\nexport default NoVmsMessage;\r\n","import { DefaultButton, Dialog, DialogFooter, DialogType, PrimaryButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nimport './student-vm-stop-dialog.css';\r\nconst messages = defineMessages({\r\n    dialogTitle: {\r\n        id: 'StopVMDialogTitle',\r\n        defaultMessage: 'Stop virtual machine',\r\n        description: 'The title of the stop VM dialog.',\r\n    },\r\n    dialogMessage: {\r\n        id: 'StopVMDialogMessage',\r\n        defaultMessage: 'Hours are not available for this virtual machine. You will not be able to turn it on once it is stopped. Do you want to continue?',\r\n        description: 'The message displayed in the stop VM dialog.',\r\n    },\r\n});\r\nconst StopVmDialogInjected = (props) => {\r\n    const { vm, onDismiss, onSubmit } = props;\r\n    const title = props.intl.formatMessage(messages.dialogTitle);\r\n    const subText = props.intl.formatMessage(messages.dialogMessage);\r\n    const confirmText = props.intl.formatMessage(commonMessages.yes);\r\n    const cancelText = props.intl.formatMessage(commonMessages.no);\r\n    return (<Dialog hidden={false} onDismiss={onDismiss} maxWidth={Constants.DefaultDialogWidth} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title,\r\n        subText,\r\n    }}>\r\n            <DialogFooter>\r\n                <PrimaryButton onClick={() => vm && onSubmit(vm)} text={confirmText}/>\r\n                <DefaultButton autoFocus onClick={onDismiss} text={cancelText}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const StopVmDialog = injectIntl(StopVmDialogInjected);\r\nexport default StopVmDialog;\r\n","export function getSshConnectData(sshAuthority) {\r\n    const sshParts = sshAuthority.split(':');\r\n    const port = sshParts[1];\r\n    const url = sshParts[0];\r\n    return { port, url };\r\n}\r\nexport function getSshCommand(port, username, url) {\r\n    return `ssh -p ${port} ${username}@${url}`;\r\n}\r\nconst invalidFilenameChars = /[\"<>:*?\\\\\\/\\|]|[\\u0000-\\u001F]/g;\r\nexport function getRdpConnectData(rdpAuthority, isWindows, username, title) {\r\n    const fileContent = `full address:s:${rdpAuthority}\\nprompt for credentials:i:1\\nusername:s:${isWindows ? '~\\\\' : ''}${username}`;\r\n    const safeTitle = (title ?? '').replace(invalidFilenameChars, '') || 'connect';\r\n    const fileName = `${safeTitle}.rdp`;\r\n    return { fileContent, fileName };\r\n}\r\nconst VmConnectUtilities = {\r\n    getSshConnectData,\r\n    getRdpConnectData,\r\n    getSshCommand,\r\n};\r\nexport default VmConnectUtilities;\r\n","import * as React from 'react';\r\nimport { DefaultButton, Icon } from '@fluentui/react';\r\nimport { injectIntl } from 'react-intl';\r\nimport CopyToClipboard from 'react-copy-to-clipboard';\r\nimport commonMessages from '../../language/common-messages';\r\nimport './copy-to-clipboard-button.css';\r\nconst CopyToClipboardButtonInjected = (props) => {\r\n    const { intl } = props;\r\n    const { formatMessage: msg } = intl;\r\n    const [copied, updateCopied] = React.useState(false);\r\n    const label = copied ? msg(commonMessages.copied) : msg(commonMessages.copy);\r\n    return (<CopyToClipboard text={props.text} onCopy={() => updateCopied(true)}>\r\n            <DefaultButton ariaLabel={label} styles={{\r\n        root: {\r\n            backgroundColor: 'transparent',\r\n            paddingLeft: '0',\r\n            paddingRight: '0',\r\n            marginTop: '15px',\r\n            minWidth: 'auto',\r\n            height: 'auto',\r\n            border: 0,\r\n        },\r\n        rootHovered: {\r\n            backgroundColor: 'transparent',\r\n        },\r\n        rootPressed: {\r\n            backgroundColor: 'transparent',\r\n        },\r\n    }}>\r\n                <div className=\"copy-to-clipboard-button-icon-container\">\r\n                    <Icon iconName=\"ClipboardList\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '19px',\r\n            color: '#323130',\r\n        },\r\n    }}/>\r\n                </div>\r\n                <span className=\"copy-to-clipboard-button-text-container\">{label}</span>\r\n            </DefaultButton>\r\n        </CopyToClipboard>);\r\n};\r\nexport const CopyToClipboardButton = injectIntl(CopyToClipboardButtonInjected);\r\nexport default CopyToClipboardButton;\r\n","import { Dialog, DialogFooter, PrimaryButton, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport CopyToClipboardButton from '../../common/copy-to-clipboard-button/copy-to-clipboard-button';\r\nimport commonMessages from '../../language/common-messages';\r\nimport Constants from '../../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'RdpInfoDialogTitle',\r\n        defaultMessage: 'Remote desktop information',\r\n        description: 'Title of the dialog showing VM RDP info.',\r\n    },\r\n    label: {\r\n        id: 'RdpInfoDialogLabel',\r\n        defaultMessage: 'Remote computer address',\r\n        description: 'Label of the RDP info text box.',\r\n    },\r\n});\r\nconst RdpInfoDialogInjected = (props) => {\r\n    const msg = props.intl.formatMessage;\r\n    return (<Dialog hidden={false} onDismiss={props.onDismiss} dialogContentProps={{ title: msg(messages.title) }} closeButtonAriaLabel={msg(commonMessages.close)} maxWidth={Constants.DefaultDialogWidth}>\r\n            <FormattedMessage id=\"RdpInfoDialogText\" defaultMessage=\"Use the following host and port number to connect to the virtual machine via RDP:\" description=\"Text on the dialog showing VM RDP info.\"/>\r\n            <TextField name={msg(messages.label)} ariaLabel={msg(messages.label)} readOnly={true} value={props.rdpInfo} multiline={true} resizable={false} autoAdjustHeight={true} styles={{ root: { marginTop: 16, maxWidth: '402px' } }}/>\r\n            <CopyToClipboardButton text={props.rdpInfo}/>\r\n            <DialogFooter>\r\n                <PrimaryButton text={msg(commonMessages.done)} onClick={props.onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const RdpInfoDialog = injectIntl(RdpInfoDialogInjected);\r\nexport default RdpInfoDialog;\r\n","import * as React from 'react';\r\nimport { Dialog, DialogFooter, PrimaryButton, DialogType, TextField } from '@fluentui/react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport CopyToClipboardButton from '../copy-to-clipboard-button/copy-to-clipboard-button';\r\nimport Constants from '../../utils/constants';\r\nimport './ssh-connect-dialog.css';\r\nconst messages = defineMessages({\r\n    connectDialogTitle: {\r\n        id: 'VmConnectDialogTitle',\r\n        defaultMessage: 'Connect to your virtual machine',\r\n        description: 'The title of the VM connect dialog.',\r\n    },\r\n    connectDialogMessage: {\r\n        id: 'VmConnectDialogMessage',\r\n        defaultMessage: 'To connect to your Linux virtual machine using SSH, use the following command:',\r\n        description: 'The message displayed in the VM connect dialog.',\r\n    },\r\n    inputLabel: {\r\n        id: 'VmConnectDialogSshConnectionInputLabel',\r\n        defaultMessage: 'SSH connection command',\r\n        description: 'Label for the input that contains SSH connection info.',\r\n    },\r\n});\r\nconst ConnectToVmDialogInjected = (props) => {\r\n    const { sshCommand, onDismiss, onDismissed, intl } = props;\r\n    const { formatMessage: msg } = intl;\r\n    const connectDialogTitle = msg(messages.connectDialogTitle);\r\n    const connectDialogMessage = msg(messages.connectDialogMessage);\r\n    const doneText = msg(commonMessages.done);\r\n    const inputLabel = msg(messages.inputLabel);\r\n    return (<Dialog hidden={false} onDismiss={onDismiss} maxWidth={Constants.DefaultDialogWidth} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: connectDialogTitle,\r\n        subText: connectDialogMessage,\r\n    }} modalProps={{\r\n        onDismissed: onDismissed,\r\n        containerClassName: 'ssh-connect-dialog',\r\n    }}>\r\n            <TextField name=\"sshKey\" multiline disabled={false} autoAdjustHeight resizable={false} readOnly={true} value={sshCommand} ariaLabel={inputLabel} styles={{\r\n        root: {\r\n            maxWidth: '402px',\r\n        },\r\n    }}/>\r\n            <CopyToClipboardButton text={sshCommand}/>\r\n            <DialogFooter>\r\n                <PrimaryButton onClick={onDismiss} text={doneText} styles={{\r\n        root: {\r\n            minWidth: '80px',\r\n            height: '32px',\r\n        },\r\n    }}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const ConnectToVmDialog = injectIntl(ConnectToVmDialogInjected);\r\nexport default ConnectToVmDialog;\r\n","import { Spinner, SpinnerSize, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport _ from 'lodash';\r\nimport commonMessages from '../language/common-messages';\r\nimport { getCustomTheme } from './themes/selectors';\r\nexport const LoadingContainer = (props) => {\r\n    const { styles } = props;\r\n    const { formatMessage: msg } = useIntl();\r\n    const { transitionBackgroundColor } = getCustomTheme();\r\n    const stackStyles = _.merge({}, { root: { backgroundColor: transitionBackgroundColor } }, styles);\r\n    return (<Stack grow verticalFill verticalAlign=\"center\" styles={stackStyles}>\r\n            <Stack.Item>\r\n                <Spinner size={SpinnerSize.large} label={msg(commonMessages.loadingText)}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default LoadingContainer;\r\n","const reservedPasswords = [\r\n    'abc@123',\r\n    'p@$$w0rd',\r\n    'p@ssw0rd',\r\n    'p@ssword123',\r\n    'pa$$word',\r\n    'pass@word1',\r\n    'password!',\r\n    'password1',\r\n    'password22',\r\n    'iloveyou!',\r\n    ' www.3hidc.com',\r\n    '!!aaaa11',\r\n    '!$%)3)cw',\r\n    '!@#$%^&*(987654321qq',\r\n    '!@#$%^654321qaz',\r\n    '!@#$%9876weungbtxcn',\r\n    '!@#$qwerasdf',\r\n    '!@#123abc',\r\n    '!@#abc123',\r\n    '!@#admin123',\r\n    '!@#lanqing0902',\r\n    '!@#qwe123',\r\n    '!jingdian.com1982',\r\n    '!qaz2wsx',\r\n    '!qazxsw@@mxy',\r\n    '!qazxsw2',\r\n    '!qazxsw2@',\r\n    '#x4%a68k3l5q0d7x1z9d0z',\r\n    '#x4%a6d7x1z9d0z8k3l5q0',\r\n    '%username%12',\r\n    '%username%123',\r\n    '%username%1234',\r\n    '%username%123445',\r\n    '%username%123456',\r\n    '*woaini1',\r\n    ',,,debia56',\r\n    '@!$fsa_hgf3w343',\r\n    '@!65367016s',\r\n    '@#$%415abc',\r\n    '@123qwe@',\r\n    '@1q2w3e@',\r\n    '@q1w2e3r4@',\r\n    '@song1234@',\r\n    '@yh780202',\r\n    '[ylh510212-8-5]',\r\n    'â¨ã¨â©mâ©â«â¡â¡oo0o00',\r\n    '00gdty@)!!',\r\n    '0168.com',\r\n    '018idc.cn',\r\n    '021hb.com2008',\r\n    '0527idc.com',\r\n    '0575@chinaidc!@#',\r\n    '0769dns.com',\r\n    '0p;/9ol.8ik,7ujm',\r\n    '100asp.com',\r\n    '10idc.com',\r\n    '111qqq!!!',\r\n    '111qqq...',\r\n    '123!@#abc',\r\n    '123.com.com',\r\n    '123.mama/bufu',\r\n    '123.qwert',\r\n    '123.qwerty',\r\n    '123321.com',\r\n    '1234/add',\r\n    '123456.com',\r\n    '1234567890!@#$%^qaz',\r\n    '123654.com',\r\n    '123abc!@#',\r\n    '123qwe!@#',\r\n    '123qwer!',\r\n    '14361256malin.,',\r\n    '163ns.com',\r\n    '167.167kk',\r\n    '17tf123654.com',\r\n    '19810zax',\r\n    '19890607.com',\r\n    '1a2s3d4f5g6h7j8k9l0;',\r\n    '1q@w#e$r',\r\n    '1q@w#e$r%t',\r\n    '1q@w#e$r%t^y',\r\n    '1q@w#e$r%t^y&u',\r\n    '1q@w#e$r%t^y&u*i',\r\n    '1q@w#e$r%t^y&u*i(o',\r\n    '1q@w#e$r%t^y&u*i(o)p',\r\n    '1q@w3e$r',\r\n    '1q2w3e,./? ><',\r\n    '1qaz@wsx',\r\n    '1qaz@wsx#edc',\r\n    '1qaz2wsx!@#',\r\n    '1qazxsw@',\r\n    '1qazxsw2@mxy',\r\n    '200550616@qq.com',\r\n    '2008sxidc@))*',\r\n    '201234.com',\r\n    '2100idc.com',\r\n    '21idc.com',\r\n    '21vnet!@#',\r\n    '21vnet.com',\r\n    '26dgidc!@#',\r\n    '26idc.com',\r\n    '293idc!@#',\r\n    '3322.org',\r\n    '35inter.com',\r\n    '365obsserver!',\r\n    '3h8idc!!#',\r\n    '3h8idc72sanhe000',\r\n    '3inaidc!@#',\r\n    '3s3w.com',\r\n    '3sina.net',\r\n    '4399.net',\r\n    '513tyml.com',\r\n    '523000.com',\r\n    '52marykay.com.c',\r\n    '52marykay.com.cn',\r\n    '52xxx.cn',\r\n    '52yj#1314@',\r\n    '530@163.com',\r\n    '544jtlfdks%#@%(~_&fgvd11',\r\n    '58cto.com',\r\n    '59.cn4563',\r\n    '59.cn666',\r\n    '59.cn999',\r\n    '59.com999',\r\n    '75800.com',\r\n    '7751688mzhjkl1q2w3e',\r\n    '7791/815zxc',\r\n    '789789qaz.com',\r\n    '7ujm,ki8',\r\n    '7ujm8ik,',\r\n    '85bs.com',\r\n    '870226linjin.',\r\n    '88310000.com',\r\n    '8hgame@xuhao888',\r\n    '9000idc.com!@#',\r\n    '95599malin.,',\r\n    '999ah.com',\r\n    '99dvd.net',\r\n    'a#9l@1q3$p4%5&zm',\r\n    'a123.123',\r\n    'a123.321',\r\n    'a123.456',\r\n    'a168ball@!$552',\r\n    'a321.123',\r\n    'a321.321',\r\n    'a6266005*',\r\n    'aaa123!@#',\r\n    'aaaidc.com444284',\r\n    'abc!@#123',\r\n    'abc123!@#',\r\n    'abcd!@#1234',\r\n    'abcd000***',\r\n    'abcd000...',\r\n    'abcd111!!!',\r\n    'abcd123!@#',\r\n    'abcd123!@#12345',\r\n    'abcd1234!@#',\r\n    'abcd1234!@#$',\r\n    'abcd1234!@#$%',\r\n    'abcd12345!@#',\r\n    'abcd12345!@#$%',\r\n    'admin!2#',\r\n    'admin.369',\r\n    'admin@123',\r\n    'admin@1234',\r\n    'admin@12345',\r\n    'admin123.0',\r\n    'admin1522',\r\n    'admin5!@',\r\n    'admin5.com',\r\n    'admin68admin!@#',\r\n    'admin789+',\r\n    'ahshengqiang9935.net',\r\n    'aistar123<>!n',\r\n    'amyaqi!#(!*!)#$^%sh63536719qll',\r\n    'anada325!@#',\r\n    'andariel@123',\r\n    'angel19871002!@#',\r\n    'angel9350!@#',\r\n    'as1234@sfqas.com',\r\n    'asd123!@#',\r\n    'asd123.0',\r\n    'asdf123.',\r\n    'asdf1234%^&*',\r\n    'auto@12345',\r\n    'ba0260!#%#%',\r\n    'ba0260!#%#% ',\r\n    'bao_zj2010',\r\n    'bbs-hz0752-net',\r\n    'beijin2008',\r\n    'biyi0791.com',\r\n    'bl-kj@123',\r\n    'btc-43477557',\r\n    'c123456.',\r\n    'c3net_co.ltd',\r\n    'ccfeng66131421',\r\n    'ceshi100m168',\r\n    'ceshichina35',\r\n    'changed0731@2008',\r\n    'chat6.cn',\r\n    'chenzhidongidc99.cn',\r\n    'chiefun2009*',\r\n    'china!@#2011',\r\n    'china!@#2012',\r\n    'china111idc',\r\n    'china123!@#',\r\n    'china123idc',\r\n    'china123love!@#',\r\n    'china2008@))*',\r\n    'china222idc',\r\n    'china333idc',\r\n    'china35.cn',\r\n    'china35.com',\r\n    'china35.idc',\r\n    'china35.net',\r\n    'china353idc',\r\n    'china488idc',\r\n    'china555idc',\r\n    'china566idc',\r\n    'china653idc',\r\n    'china666idc',\r\n    'china888idc',\r\n    'china999idc',\r\n    'chinaidc!!!123',\r\n    'chinaidc!@#123',\r\n    'chinaidc`12',\r\n    'chinaidc0805',\r\n    'chinaidc123!@#',\r\n    'chinaidc35.com',\r\n    'clyj#520@1314',\r\n    'cqidc!@#2008',\r\n    'cqidc2008!@#',\r\n    'cqrzgs159357!@#',\r\n    'cqscszww8848#',\r\n    'csjhj7^^gdsghwq222199jkjkndwsdw^&%()',\r\n    'cszwwtlxsw8848#',\r\n    'cznut9527!@#$',\r\n    'dell1950=hdsms',\r\n    'dezhou!!)69',\r\n    'dezhou!!)69 ',\r\n    'dg10!#%#%',\r\n    'dg130.$(',\r\n    'dhlxm83840309~',\r\n    'dhlxm83840309~!',\r\n    'djdesaitt1..',\r\n    'dkw0.123',\r\n    'dns65!@#',\r\n    'dns99+588',\r\n    'dong!@#456',\r\n    'ds.dw587~!@dd..',\r\n    'duriel@123',\r\n    'dy8848ert&@#',\r\n    'e963.com',\r\n    'edong123456789.0',\r\n    'edongidc!@#2008',\r\n    'edongidc@123',\r\n    'edongidc123456789.0',\r\n    'edongidc2008!@#',\r\n    'ef126mlkm69136116',\r\n    'erenb.com6688',\r\n    'erenb.net6688',\r\n    'eta_server-101',\r\n    'fg56.com',\r\n    'fqwegqwggwewgwgklqwgg*(@#tghq',\r\n    'gd6eetkg2qoy',\r\n    'geeidc123456**',\r\n    'geiscctv48.209',\r\n    'gmaj123#123',\r\n    'gmaj123#123#123',\r\n    'good7lw.com',\r\n    'goodj0bidc',\r\n    'google576cd6fab584a010.html',\r\n    'guangxi123445!@#$%^',\r\n    'guangxi123456!@#$%^',\r\n    'h@ppyt00#@!',\r\n    'hao123.com',\r\n    'hdsms=dell1950',\r\n    'hdsms=h2d4t6x8',\r\n    'heedann_530',\r\n    'heedann_530@163.com',\r\n    'hengdong2008//',\r\n    'hezu86new',\r\n    'hf#chinaidc@idccenter',\r\n    'hi19810zax',\r\n    'hk@maya0769.com',\r\n    'hlwj0519-1205.jf',\r\n    'hongyanxuwenxingguo03',\r\n    'hsnuc0sdq2',\r\n    'huacheng123!@#',\r\n    'huayun1234!@#',\r\n    'hucgynxz!&#it',\r\n    'hz2654321!@#$%^',\r\n    'idc!@#$1234',\r\n    'idc.10.cn',\r\n    'idc.26idc.com',\r\n    'idc.dns99',\r\n    'idc.dns99.cn',\r\n    'idc^%$#@!2654321',\r\n    'idc_2008',\r\n    'idc_2009',\r\n    'idc0.1230',\r\n    'idc0123.0',\r\n    'idc123!@#',\r\n    'idc123&123',\r\n    'idc123,abc',\r\n    'idc123.0',\r\n    'idc123.com',\r\n    'idc1234%^&*',\r\n    'idc123445!@#$%^',\r\n    'idc123456!@#$%^',\r\n    'idc1654321!@#$%^',\r\n    'idc196.@^',\r\n    'idc2007@))&',\r\n    'idc2008@))*',\r\n    'idc2011!@#',\r\n    'idc2654321!@#$%^',\r\n    'idc2654321^%$#@!',\r\n    'idc5.net',\r\n    'idc517.com',\r\n    'idc78.com',\r\n    'idckk.com198134',\r\n    'idckk.com198171',\r\n    'iis_99yu_1',\r\n    'ip345.com123',\r\n    'jd8idc.com',\r\n    'jh2654321!@#$%^',\r\n    'jianrong#&^^**@&6688',\r\n    'jiezu@520',\r\n    'jifang360.com',\r\n    'jones123',\r\n    'jspower123.0',\r\n    'jxidc0105!@#$%',\r\n    'kiss&129116',\r\n    'kongmima41@#',\r\n    'ky!#%&(er987',\r\n    'lanmang@idc2007',\r\n    'lanmang@idc2008',\r\n    'ldserver123123123',\r\n    'ldserver123445',\r\n    'ldserver1234457',\r\n    'ldserver123456',\r\n    'ldserver1234567',\r\n    'ldserver147258',\r\n    'ldserver456789',\r\n    'least123!@#',\r\n    'leet87362275',\r\n    'leo_zj2010',\r\n    'lg@123456',\r\n    'lgg1234.0',\r\n    'ligang_2007',\r\n    'linduinc3456789(*&^%$#@!',\r\n    'liuhan522!@#',\r\n    'liusc522$#@!',\r\n    'llwl507cn.1314',\r\n    'ln5203344***',\r\n    'luofei520!@#123',\r\n    'lvye135~!@',\r\n    'lzwl0.123',\r\n    'm&g_2008',\r\n    'mailserver@peiying.cnff8',\r\n    'mama.123/bufu',\r\n    'manmancai8.com',\r\n    'maya0769.com',\r\n    'min1985minzkdns.com!(*%',\r\n    'min21minzkdns.com!(*%',\r\n    'min86minzkdns.com!(*%',\r\n    'mir2.com',\r\n    'mlkmef12669136116',\r\n    'mmddkk88pp,./',\r\n    'mrgool_010',\r\n    'n1.zj.cn',\r\n    'ncbiyi0791.com',\r\n    'netlan1234%^&*',\r\n    'ngncn.com2010',\r\n    'niubi99china',\r\n    'oaoidc123',\r\n    'oaoidc123!@#',\r\n    'onlyidc123789+',\r\n    'oo0',\r\n    'p$ssw0rd',\r\n    'p@ss1234',\r\n    'p@ssw0rd!',\r\n    'p@ssw0rd1',\r\n    'p@ssword',\r\n    'pa$$w0rd',\r\n    'pa55word',\r\n    'pass@word',\r\n    'password123',\r\n    'pengzhufuqq..5',\r\n    'pollyo0o!#%&',\r\n    'power0.123',\r\n    'power123.0',\r\n    'q1w2e3$%^&',\r\n    'qaz!@#123...',\r\n    'qaz#@!321',\r\n    'qaz000...',\r\n    'qaz123!@#',\r\n    'qaz47991798',\r\n    'qazwsx!@#123',\r\n    'qazwsxedc!@#123',\r\n    'qeeka^%@@!%@@',\r\n    'qq()#*(*',\r\n    'qq123.com',\r\n    'qq123.com  ',\r\n    'qq123456.com',\r\n    'qq520520--++',\r\n    'qs1234!@#',\r\n    'qsx6059410172.',\r\n    'qwe!@#123',\r\n    'qwe123!@#',\r\n    'qwe123.0',\r\n    'qwe-5158-dsa',\r\n    'qwe-5158-sa',\r\n    'qwe789!@#',\r\n    'qweasd!@#123',\r\n    'qweasd123!@#',\r\n    'qy_0901gd',\r\n    'qy0668-2196688',\r\n    'qy520.cn',\r\n    'qy521.cn',\r\n    's#d885fk9981',\r\n    'sa!@#123',\r\n    'sa123!@#',\r\n    'sa890-=\\\\',\r\n    'sanhe000~!@#',\r\n    'sanhe000~!@#  ',\r\n    'sauoo.com153',\r\n    'say236.219',\r\n    'sbkjef12669136116',\r\n    'scm2988#shnet',\r\n    'sdf#$d567dsqew',\r\n    'sdfwerqfr42de',\r\n    'sdr%tw0308',\r\n    'sdr%tw564',\r\n    'sever1<jyyy>)*',\r\n    'sh(8&6%4#2!',\r\n    'sha^5$3@1',\r\n    'shaidc!2#4',\r\n    'shaidc!23',\r\n    'shaidc%4#2!',\r\n    'shaidc*90',\r\n    'shaidc^5$3@1',\r\n    'shaidc^5$3@12008',\r\n    'shaidc2008!@#',\r\n    'shaidc2008$3@1',\r\n    'shaidc2008%^&*',\r\n    'shanghai%4#2!',\r\n    'shdadapic@&63536719',\r\n    'sino_webserver',\r\n    'sky_master!1986',\r\n    'soft.v01.cn',\r\n    'spbo3@#$071810',\r\n    'sport#@%5535',\r\n    'star-x/van',\r\n    'stdx2008!!',\r\n    'sujianguocqzc168',\r\n    'sujianguocqzc558',\r\n    'sun198527@',\r\n    'sun99999.com',\r\n    'sxidc!@#456',\r\n    'sys168.com',\r\n    'tangchao20!!',\r\n    'tangke*80231314',\r\n    'taotao_!@#110220',\r\n    'taotao_!@#50715655',\r\n    'tcidcseo20%#',\r\n    'think#$!',\r\n    'ting5201314`',\r\n    'tkggja850518`1',\r\n    'tnhoo15862380404',\r\n    'topset4227232.152..',\r\n    'topset4227232.70..',\r\n    'trista188#**',\r\n    'tt8sports^%$com',\r\n    'ttixe008jnsj#',\r\n    'tztour.com123',\r\n    'un-idc0503',\r\n    'v01.cnidc',\r\n    'vip.51.la',\r\n    'vlan35idc%^&',\r\n    'wangzi123345,./',\r\n    'wdmdjdesaill1..',\r\n    'webadmin!@#$%^123445',\r\n    'webadmin!@#$%^123456',\r\n    'webadmin!@#321',\r\n    'webadmin123!@#',\r\n    'webadmin123445!@#$%^',\r\n    'webadmin123456!@#$%^',\r\n    'webadmin321!@#',\r\n    'webamin!@#123',\r\n    'weidc35.com',\r\n    'wenzhou.o4.com.cn',\r\n    'wh1979522.89',\r\n    'winner!@#00',\r\n    'woool@2008',\r\n    'write_au',\r\n    'wt1223@126',\r\n    'wt1223@126.com',\r\n    'wukai,./88',\r\n    'wukai,./8899',\r\n    'wusheng123!@#',\r\n    'www.0168.com',\r\n    'www.0527idc.com',\r\n    'www.0769dns.com',\r\n    'www.10.cn',\r\n    'www.10idc.com',\r\n    'www.126.com',\r\n    'www.163.com',\r\n    'www.1818gm.cn',\r\n    'www.1818gm.com',\r\n    'www.2100idc.com',\r\n    'www.21vnet.com',\r\n    'www.26idc.com',\r\n    'www.293.net',\r\n    'www.31w.cn',\r\n    'www.3h8.com',\r\n    'www.3hidc.com',\r\n    'www.3s3w.com',\r\n    'www.3sina.net',\r\n    'www.3tvps.net',\r\n    'www.523000.com',\r\n    'www.666idc.com',\r\n    'www.6h.com',\r\n    'www.7x24.cn',\r\n    'www.88310000.com',\r\n    'www.9000idc.com',\r\n    'www.9tao.com',\r\n    'www.admin5.com',\r\n    'www.chat6.cn',\r\n    'www.dns65.com',\r\n    'www.fg56.com',\r\n    'www.fj163.com',\r\n    'www.idc123.com',\r\n    'www.idc5.net',\r\n    'www.idc78.com',\r\n    'www.jifang360.com',\r\n    'www.mir2.com',\r\n    'www.n1.zj.cn',\r\n    'www.peng34654',\r\n    'www.v009.cn',\r\n    'www.v01.cn',\r\n    'www.v01.cn.com',\r\n    'www.v01.cn123456',\r\n    'www.v02.cn',\r\n    'www.v03.cn',\r\n    'www.zj3000.cn',\r\n    'wz2654321!@#$%^',\r\n    'xfx1989_2008',\r\n    'xh772-ap',\r\n    'xiefei5201314.',\r\n    'xijiaoyuan123)(',\r\n    'xs2008@cpgestion',\r\n    'xtzj.com',\r\n    'xubo!@#$1234',\r\n    'xueddiesheng@2008',\r\n    'xyidc_2006',\r\n    'xyz!@#$1234abc',\r\n    'yanhuang2010',\r\n    'yanhuangidc123',\r\n    'yanhuangyanhuang2010',\r\n    'yantaowan_!@#110220',\r\n    'yb888mail/./',\r\n    'yisence#@200512',\r\n    'yz@cnidc@563idc#2618$zf',\r\n    'zaq1@wsx',\r\n    'zguoshengmlp13908462030~!@',\r\n    'zhao520123.',\r\n    'zhengbiao1!@#!@#',\r\n    'zhenzhi123!@#',\r\n    'zhida.160',\r\n    'zhongguo$#@!999@',\r\n    'zj112.($',\r\n    'zj124.70./*-',\r\n    'zjewww6168!qaz',\r\n    'zkdns2008!@#',\r\n    'zlzy.com87',\r\n    'znhyy10599@!',\r\n    'zxc123.0',\r\n    'zxf1984@gmail.cn',\r\n    'zxf1984@gmail.com',\r\n    'zzmlkmef12669136116',\r\n];\r\nexport const lowercaseReservedPasswords = reservedPasswords.map((password) => password.toLowerCase());\r\nexport default lowercaseReservedPasswords;\r\n","import LowerCaseReservedPasswords from './reserved-passwords';\r\nconst lowerCaseTest = new RegExp('^(?=.*[a-z])');\r\nconst upperCaseTest = new RegExp('^(?=.*[A-Z])');\r\nconst numericTest = new RegExp('^(?=.*[0-9])');\r\nconst specialCharsTest = new RegExp('^(?=.*[!@#$%^&*])');\r\nexport function isPasswordComplex(password, requiredComplexity = 3) {\r\n    let complexity = 0;\r\n    const trimmedPassword = password ? password.trim() : '';\r\n    if (lowerCaseTest.test(trimmedPassword)) {\r\n        complexity++;\r\n    }\r\n    if (upperCaseTest.test(trimmedPassword)) {\r\n        complexity++;\r\n    }\r\n    if (numericTest.test(trimmedPassword)) {\r\n        complexity++;\r\n    }\r\n    if (specialCharsTest.test(trimmedPassword)) {\r\n        complexity++;\r\n    }\r\n    return complexity >= requiredComplexity;\r\n}\r\nexport function isPasswordReserved(password) {\r\n    const lowerCasePassword = password ? password.trim().toLowerCase() : '';\r\n    return LowerCaseReservedPasswords.indexOf(lowerCasePassword) > -1;\r\n}\r\nexport function isPasswordLengthIncorrect(password, minLength, maxLength) {\r\n    const trimmedPassword = password ? password.trim() : '';\r\n    return trimmedPassword.length < minLength || trimmedPassword.length > maxLength;\r\n}\r\n","import { TooltipHost, Icon } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport _ from 'lodash';\r\nconst defaultIconStyles = {\r\n    root: {\r\n        marginLeft: '7px',\r\n        cursor: 'default',\r\n    },\r\n};\r\nexport const InfoTip = (props) => {\r\n    const iconStyles = props.iconStyles ? _.merge({}, defaultIconStyles, props.iconStyles) : defaultIconStyles;\r\n    return (<TooltipHost {...props}>\r\n            <Icon aria-label={props.ariaLabel} role=\"none\" aria-hidden=\"false\" iconName=\"Info\" className=\"ms-fontSize-16\" styles={iconStyles} tabIndex={props.iconTabIndex || 0}/>\r\n        </TooltipHost>);\r\n};\r\nexport default InfoTip;\r\n","import * as React from 'react';\r\nimport { TextField, Stack, DirectionalHint } from '@fluentui/react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport { isPasswordReserved, isPasswordLengthIncorrect, isPasswordComplex } from './password-validator';\r\nimport './password-field.css';\r\nimport InfoTip from '../info-tip';\r\nconst messages = defineMessages({\r\n    passwordShowHideAriaLabel: {\r\n        id: 'PasswordShowHideAriaLabel',\r\n        defaultMessage: 'Show your password',\r\n        description: 'Text for a button that toggles showing a password in a password input field',\r\n    },\r\n    passwordFieldLabel: {\r\n        id: 'PasswordFieldLabel',\r\n        defaultMessage: 'Password',\r\n        description: 'The label displayed for the password field.',\r\n    },\r\n    passwordRequiredError: {\r\n        id: 'PasswordRequiredError',\r\n        defaultMessage: 'Password is required',\r\n        description: 'The error shown to indicate that a password is required.',\r\n    },\r\n    passwordRestrictedError: {\r\n        id: 'PasswordRestrictedError',\r\n        defaultMessage: 'Commonly used passwords are not allowed',\r\n        description: 'The error shown to indicate that a password contains restricted words.',\r\n    },\r\n    passwordLengthInvalidError: {\r\n        id: 'PasswordLengthInvalidError',\r\n        defaultMessage: 'Passwords must be between {minLength} and {maxLength} characters long',\r\n        description: 'The error shown to indicate that a passwords length is invalid with {minLength} being the minimum password length and {maxLength} the maximum password length.',\r\n    },\r\n    passwordComplexityInvalidError: {\r\n        id: 'PasswordComplexityInvalidError',\r\n        defaultMessage: 'Password must include 3 of the following: a number, uppercase character, lowercase character, or a special character',\r\n        description: 'The error shown to indicate that a passwords complexity is invalid.',\r\n    },\r\n});\r\nfunction getPasswordValidationErrorMessage(password, props) {\r\n    const { minLength, maxLength } = props;\r\n    let errorMessage = '';\r\n    if (!password) {\r\n        errorMessage = props.intl.formatMessage(messages.passwordRequiredError);\r\n    }\r\n    else if (isPasswordReserved(password)) {\r\n        errorMessage = props.intl.formatMessage(messages.passwordRestrictedError);\r\n    }\r\n    else if (isPasswordLengthIncorrect(password, minLength, maxLength)) {\r\n        errorMessage = props.intl.formatMessage(messages.passwordLengthInvalidError, {\r\n            minLength,\r\n            maxLength,\r\n        });\r\n    }\r\n    else if (!isPasswordComplex(password)) {\r\n        errorMessage = props.intl.formatMessage(messages.passwordComplexityInvalidError);\r\n    }\r\n    return errorMessage;\r\n}\r\nconst PasswordFieldInjected = (props) => {\r\n    const ariaLabel = props.intl.formatMessage(messages.passwordShowHideAriaLabel);\r\n    const type = 'password';\r\n    const resolvedProps = {\r\n        ...props,\r\n        type,\r\n        canRevealPassword: true,\r\n        revealPasswordAriaLabel: ariaLabel,\r\n        styles: {\r\n            suffix: {\r\n                backgroundColor: 'transparent',\r\n                display: 'none',\r\n            },\r\n            errorMessage: {\r\n                paddingTop: '5px',\r\n            },\r\n            revealButton: {\r\n                color: 'black',\r\n                cursor: 'pointer',\r\n                '&:hover': {\r\n                    backgroundColor: 'transparent',\r\n                },\r\n            },\r\n            ...props.styles,\r\n        },\r\n    };\r\n    const calloutContent = (<span>\r\n            <FormattedMessage id=\"PasswordLabelInfoMessage\" defaultMessage=\"This  password can't be too similar to the existing password in the virtual machine image, or lab creation will fail.\" description=\"Password label info message callout for specialized images when non-admin is enabled.\"/>\r\n        </span>);\r\n    // set a default label if one was not provided or if infotip is enabled.\r\n    if (!props.infoTipEnabled) {\r\n        resolvedProps.label = props.customLabel\r\n            ? props.customLabel\r\n            : props.intl.formatMessage(messages.passwordFieldLabel);\r\n    }\r\n    else {\r\n        // this does not mean that the password is not required,\r\n        // it just removes the * from the textfield as it is added to the label with the infotip.\r\n        resolvedProps.required = false;\r\n    }\r\n    // setup our password validation\r\n    resolvedProps.onGetErrorMessage = (value) => {\r\n        const errorMessage = getPasswordValidationErrorMessage(value, props);\r\n        // trigger a validation change\r\n        const isValid = !errorMessage;\r\n        if (props.isValid !== isValid) {\r\n            props.onValidationChange(isValid);\r\n        }\r\n        return errorMessage;\r\n    };\r\n    return (<Stack>\r\n            {props.infoTipEnabled && (<Stack.Item styles={{\r\n        root: { padding: '5px 0' },\r\n    }}>\r\n                    <span style={{ fontWeight: 600 }}>\r\n                        <FormattedMessage id=\"CustomPasswordLabel\" defaultMessage=\"{passwordLabel}\" description=\"Custom password label for when infotip is enabled.\" values={{ passwordLabel: props.customLabel }}/>\r\n                    </span>\r\n                    <span>\r\n                        <InfoTip content={calloutContent} calloutProps={{ gapSpace: 10 }} directionalHint={DirectionalHint.rightTopEdge} iconStyles={{\r\n        root: {\r\n            marginLeft: '0px',\r\n            paddingLeft: '4px',\r\n            fontSize: '12px !important',\r\n        },\r\n    }}/>\r\n                    </span>\r\n                    <span style={{ color: 'rgb(164, 38, 44)' }}> *</span>\r\n                </Stack.Item>)}\r\n            <Stack.Item>\r\n                <TextField {...resolvedProps} aria-required={resolvedProps.required || undefined}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const PasswordField = injectIntl(PasswordFieldInjected);\r\nexport default PasswordField;\r\n","import * as React from 'react';\r\nimport { Dialog, Label, Text, DialogFooter, PrimaryButton, DefaultButton, DialogType } from '@fluentui/react';\r\nimport { FormattedMessage, injectIntl, defineMessages } from 'react-intl';\r\nimport PasswordField from '../password-field/password-field';\r\nimport commonMessages from '../../language/common-messages';\r\nimport Constants from '../../utils/constants';\r\nimport './reset-password-dialog.css';\r\nconst messages = defineMessages({\r\n    setPasswordDialogTitleAndButtonText: {\r\n        id: 'SetPasswordDialogTitle',\r\n        defaultMessage: 'Set password',\r\n        description: 'The title for the password dialog when the user has never set a password before. This text is also used for the confirmation button as well.',\r\n    },\r\n    setPasswordDialogContent: {\r\n        id: 'SetPasswordDialogContent',\r\n        defaultMessage: 'Enter a new password to be used when logging in. Setting the password may take several minutes.',\r\n        description: 'The content of the password dialog when a user has never set a password before.',\r\n    },\r\n    resetPasswordDialogContent: {\r\n        id: 'ResetPasswordDialogContent',\r\n        defaultMessage: 'Enter a new password to be used when logging in. Resetting the password may take several minutes.',\r\n        description: 'The content of the password dialog when a user has set a password before.',\r\n    },\r\n});\r\nconst ResetPasswordDialogInjected = (props) => {\r\n    const [password, updatePassword] = React.useState('');\r\n    const [isValidPassword, updateIsValidPassword] = React.useState(false);\r\n    const { canShowNonLocalizedMessages, isWindows, isResetting, id, username, onDismiss, onDismissed, onSubmit, } = props;\r\n    const setPasswordDialogTitleAndButtonText = props.intl.formatMessage(messages.setPasswordDialogTitleAndButtonText);\r\n    const setPasswordDialogContent = props.intl.formatMessage(messages.setPasswordDialogContent);\r\n    const resetPasswordDialogTitleAndButtonText = props.intl.formatMessage(commonMessages.resetPassword);\r\n    const resetPasswordDialogContent = props.intl.formatMessage(messages.resetPasswordDialogContent);\r\n    const cancelButtonLabel = props.intl.formatMessage(commonMessages.cancel);\r\n    const title = isResetting ? resetPasswordDialogTitleAndButtonText : setPasswordDialogTitleAndButtonText;\r\n    const subText = isResetting ? resetPasswordDialogContent : setPasswordDialogContent;\r\n    const onChange = (_event, newValue) => {\r\n        updatePassword(newValue || '');\r\n    };\r\n    const dismiss = () => {\r\n        onDismiss();\r\n    };\r\n    const dismissed = () => {\r\n        updatePassword('');\r\n        onDismissed();\r\n    };\r\n    return (<Dialog hidden={false} onDismiss={dismiss} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title,\r\n        subText,\r\n        styles: {\r\n            subText: { fontSize: '14px', fontWeight: 'normal', lineHeight: '20px' },\r\n        },\r\n    }} modalProps={{\r\n        onDismissed: dismissed,\r\n        containerClassName: 'reset-password-dialog',\r\n    }} minWidth={Constants.DefaultDialogSmallWidth}>\r\n            <div>\r\n                <Label htmlFor=\"reset-password-username-text\" styles={{\r\n        root: {\r\n            fontSize: '14px',\r\n            lineHeight: '19px',\r\n            paddingBottom: '6px',\r\n        },\r\n    }}>\r\n                    <FormattedMessage id=\"UsernameFieldLabel\" defaultMessage=\"Username\" description=\"The label for the username field.\"/>\r\n                </Label>\r\n                <Text id=\"reset-password-username-text\">{username}</Text>\r\n            </div>\r\n            <div className=\"reset-password-dialog-password-field-container\">\r\n                <PasswordField name=\"password\" styles={{\r\n        suffix: { marginTop: '1px', marginBottom: '1px', backgroundColor: 'transparent' },\r\n        errorMessage: { paddingTop: '0px' },\r\n    }} {...(isWindows ? Constants.WindowsPasswordLength : Constants.LinuxPasswordLength)} onChange={onChange} onValidationChange={updateIsValidPassword} isValid={isValidPassword} validateOnLoad={false} autoFocus={true} value={password}/>\r\n            </div>\r\n            {canShowNonLocalizedMessages && (<div className=\"reset-password-dialog-password-complexity-requirements\">\r\n                    <FormattedMessage id=\"VirtualMachinePasswordComplexityRequirements\" defaultMessage=\"Password must include 3 of the following: a number, uppercase character, lowercase character, and a special character.\" description=\"Guidelines on the required complexity of a password\"/>\r\n                </div>)}\r\n            <DialogFooter styles={{ actions: { marginTop: '58px' } }}>\r\n                <PrimaryButton onClick={() => {\r\n        id && username && onSubmit(id, username, password);\r\n        onDismiss();\r\n    }} text={title} ariaLabel={title} disabled={!isValidPassword}/>\r\n                <DefaultButton onClick={dismiss} ariaLabel={cancelButtonLabel} text={cancelButtonLabel}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const ResetPasswordDialog = injectIntl(ResetPasswordDialogInjected);\r\nexport default ResetPasswordDialog;\r\n","export async function createAndDownloadFile(fileName, data, forceUtf8 = false) {\r\n    const isAscii = !forceUtf8 && data.toString().match(/[\\u0000-\\u00FF]/);\r\n    const blob = new Blob([(isAscii ? '' : '\\ufeff') + data], {\r\n        type: `application/x-rdp;charset=${isAscii ? 'us-ascii' : 'utf-8'};`,\r\n    });\r\n    if (navigator.msSaveOrOpenBlob) {\r\n        navigator.msSaveOrOpenBlob(blob, fileName);\r\n    }\r\n    else {\r\n        const fileData = await readBlob(blob);\r\n        const downloadLink = document.createElement('a');\r\n        downloadLink.setAttribute('href', fileData);\r\n        downloadLink.setAttribute('download', fileName);\r\n        downloadLink.style.visibility = 'hidden';\r\n        document.body.appendChild(downloadLink);\r\n        downloadLink.click();\r\n        document.body.removeChild(downloadLink);\r\n    }\r\n}\r\nasync function readBlob(blob) {\r\n    const promise = new Promise((resolve, reject) => {\r\n        const reader = new FileReader();\r\n        reader.onload = () => resolve(reader.result);\r\n        reader.onerror = (event) => reject(event?.target?.error || new Error('Failed to create file.'));\r\n        reader.readAsDataURL(blob);\r\n    });\r\n    const data = await promise;\r\n    return data;\r\n}\r\n","import { DefaultButton, Dialog, DialogFooter, PrimaryButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'ResetVmsDialogTitle',\r\n        defaultMessage: 'Reimage virtual machine(s)',\r\n        description: 'Title of confirmation dialog when reimaging one or more virtual machines.',\r\n    },\r\n    studentVMTitle: {\r\n        id: 'ResetStudentVMDialogTitle',\r\n        defaultMessage: 'Reimage virtual machine',\r\n        description: 'Title of confirmation dialog when reimaging one student virtual machines',\r\n    },\r\n});\r\nconst ResetVmsDialogInjected = (props) => {\r\n    const { numberOfMachines, isStudentVM, onDismiss, onSubmit } = props;\r\n    const msg = props.intl.formatMessage;\r\n    const cantBeUndoneSpan = (<b>\r\n            <FormattedMessage id=\"ResetVmsDialogCantBeUndoneMessage\" defaultMessage=\"This operation cannot be undone.\" description=\"This message will be displayed as part of DeleteUsersDialogTextFormat\"/>\r\n        </b>);\r\n    return (<Dialog hidden={false} onDismiss={onDismiss} dialogContentProps={{ title: !isStudentVM ? msg(messages.title) : msg(messages.studentVMTitle) }} closeButtonAriaLabel={msg(commonMessages.cancel)} maxWidth={Constants.DefaultDialogWidth}>\r\n            {!!numberOfMachines && !isStudentVM && (<FormattedMessage id=\"ResetVmsDialogTextFormat\" defaultMessage=\"{numberOfMachines} virtual machine(s) will be reset to the original state(s) and all of your data on the disk(s) will be lost. {cantBeUndoneSpan}\" description=\"Text of confirmation dialog when resetting one or more virtual machines. {numberOfMachines} is an integer indicating number of machines (greater or equal to 1). {cantBeUndoneSpan} is the bolded resolved value of ResetVmsDialogCantBeUndoneMessage.\" values={{ numberOfMachines, cantBeUndoneSpan }}/>)}\r\n            {!!isStudentVM && (<FormattedMessage id=\"ResetStudentVMDialogTextFormat\" defaultMessage=\"Your virtual machine will be reset to the original state and all of your data on the disk will be lost. {cantBeUndoneSpan}\" description=\"Text of confirmation dialog when resetting student virtual machine. {cantBeUndoneSpan} is the bolded resolved value of ResetVmsDialogCantBeUndoneMessage.\" values={{ cantBeUndoneSpan }}/>)}\r\n            <DialogFooter>\r\n                <PrimaryButton text={msg(commonMessages.reset)} onClick={onSubmit}/>\r\n                <DefaultButton autoFocus text={msg(commonMessages.cancel)} onClick={onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const ResetVmsDialog = injectIntl(ResetVmsDialogInjected);\r\nexport default ResetVmsDialog;\r\n","import * as React from 'react';\r\nimport { Dialog, DialogFooter, PrimaryButton, DialogType } from '@fluentui/react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport Constants from '../../utils/constants';\r\nimport commonMessages from '../../language/common-messages';\r\nimport './troubleshoot-dialog.css';\r\nconst messages = defineMessages({\r\n    troubleshootDialogButtonText: {\r\n        id: 'TroubleshootDialogTitle',\r\n        defaultMessage: 'Redeploy virtual machine',\r\n        description: 'Redeploy dialog title',\r\n    },\r\n    troubleshootDialogContent: {\r\n        id: 'TroubleshootDialogContent',\r\n        defaultMessage: 'If you are facing difficulties starting or accessing your virtual machine, redeploying the virtual machine may provide a quick resolution for the issue. Redeploying the virtual machine will shut it down, move it to a new Azure host, and restart it. All your data, saved in the operating system disk, will remain on the machine. Anything saved on the temporary disk will be lost. ',\r\n        description: 'Troubleshoot dialog content',\r\n    },\r\n});\r\nconst TroubleshootDialog = (props) => {\r\n    const intl = useIntl();\r\n    const { onDismiss, onRedeploy } = props;\r\n    const troubleshootDialogButtonText = intl.formatMessage(messages.troubleshootDialogButtonText);\r\n    const troubleshootDialogContent = intl.formatMessage(messages.troubleshootDialogContent);\r\n    const title = troubleshootDialogButtonText;\r\n    const subText = troubleshootDialogContent;\r\n    const dismiss = () => {\r\n        onDismiss();\r\n    };\r\n    return (<Dialog hidden={false} onDismiss={dismiss} dialogContentProps={{\r\n        showCloseButton: true,\r\n        type: DialogType.normal,\r\n        title,\r\n        subText,\r\n        styles: {\r\n            subText: { fontSize: '14px', fontWeight: 'normal', lineHeight: '20px' },\r\n        },\r\n    }} modalProps={{\r\n        containerClassName: 'troubleshoot-dialog',\r\n    }} minWidth={Constants.DefaultDialogSmallWidth}>\r\n            <DialogFooter>\r\n                <PrimaryButton onClick={() => {\r\n        onRedeploy();\r\n        onDismiss();\r\n    }} text={intl.formatMessage(commonMessages.redeploy)} ariaLabel={'redeploy'} disabled={false}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport default TroubleshootDialog;\r\n","import { List } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { StudentVmCard } from './student-vm-card';\r\nimport './student-vm-list.css';\r\nimport StudentVmListAnnounced from './student-vm-list-announced';\r\nimport { ErrorBanners, ListErrorBanner } from './student-vm-list-banners';\r\nimport { messages } from './student-vm-list-messages';\r\nimport { mustResetPasswordBeforeConnect, vmCanStartAgain } from './student-vm-list-selectors';\r\nimport { NoVmsMessage } from './student-vm-no-vms-message';\r\nimport { StopVmDialog } from './student-vm-stop-dialog';\r\nimport { getRdpConnectData, getSshCommand, getSshConnectData } from '../common/connect-to-vm/connect-utilities';\r\nimport RdpInfoDialog from '../common/connect-to-vm/rdp-info-dialog';\r\nimport { ConnectToVmDialog } from '../common/connect-to-vm/ssh-connect-dialog';\r\nimport LoadingContainer from '../common/loading-section';\r\nimport { ResetPasswordDialog } from '../common/reset-password-dialog/reset-password-dialog';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport { ConnectionType } from '../data/models/environment-common';\r\nimport { createAndDownloadFile } from '../utils/files';\r\nimport { caseInsensitiveLocaleCompare } from '../utils/string-comparison';\r\nimport ResetVmsDialog from '../vm-list/reset-vms-dialog';\r\nimport TroubleshootDialog from '../common/troubleshoot-dialog/troubleshoot-dialog';\r\nclass StudentVmList extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        // initialize state\r\n        this.state = {\r\n            showResetPasswordDialog: false,\r\n            resetPasswordDialogVM: undefined,\r\n            showRdpInfoDialog: false,\r\n            rdpInfoDialogVm: undefined,\r\n            showConnectDialog: false,\r\n            connectDialogSshCommand: undefined,\r\n            showStopVMDialog: false,\r\n            stopDialogVM: undefined,\r\n            showReimageDialog: false,\r\n            reimageDialogVM: undefined,\r\n            showTroubleshootDialog: false,\r\n            troubleshootDialogVm: undefined,\r\n        };\r\n        // bind events to this class\r\n        this._renderVm = this._renderVm.bind(this);\r\n        this._renderErrorBanners = this._renderErrorBanners.bind(this);\r\n        this._vmStartClicked = this._vmStartClicked.bind(this);\r\n        this._vmStopClicked = this._vmStopClicked.bind(this);\r\n        this._vmStopConfirmedClicked = this._vmStopConfirmedClicked.bind(this);\r\n        this._vmConnectClicked = this._vmConnectClicked.bind(this);\r\n        this._setRdpConnectData = this._setRdpConnectData.bind(this);\r\n        this._setSshConnectData = this._setSshConnectData.bind(this);\r\n        this._rdpInBrowser = this._rdpInBrowser.bind(this);\r\n        this._sshInBrowser = this._sshInBrowser.bind(this);\r\n        this._setConnectData = this._setConnectData.bind(this);\r\n        this._resetPasswordClicked = this._resetPasswordClicked.bind(this);\r\n        this._showRdpInfoClicked = this._showRdpInfoClicked.bind(this);\r\n        this._changePasswordClicked = this._changePasswordClicked.bind(this);\r\n        this._dismissResetPasswordDialog = this._dismissResetPasswordDialog.bind(this);\r\n        this._dismissRdpInfoDialog = this._dismissRdpInfoDialog.bind(this);\r\n        this._dismissedResetPasswordDialog = this._dismissedResetPasswordDialog.bind(this);\r\n        this._dismissConnectDialog = this._dismissConnectDialog.bind(this);\r\n        this._dismissedConnectDialog = this._dismissedConnectDialog.bind(this);\r\n        this._dismissStopDialog = this._dismissStopDialog.bind(this);\r\n        this._vmReimageClicked = this._vmReimageClicked.bind(this);\r\n        this._vmRedeployClicked = this._vmRedeployClicked.bind(this);\r\n        this._dismissReimageDialog = this._dismissReimageDialog.bind(this);\r\n        this._reimageSubmitted = this._reimageSubmitted.bind(this);\r\n        this._showTroubleshootDialogClicked = this._showTroubleshootDialogClicked.bind(this);\r\n        this._dismissTroubleshootDialog = this._dismissTroubleshootDialog.bind(this);\r\n    }\r\n    render() {\r\n        const { studentVmListViewModel, isPanelView } = this.props;\r\n        const { vms, isLoading, isTeamsIntegrationEnabled, isLmsIntegrationEnabled } = studentVmListViewModel;\r\n        const { resetPasswordDialogVM, showResetPasswordDialog, showRdpInfoDialog, rdpInfoDialogVm, showConnectDialog, connectDialogSshCommand, showStopVMDialog, stopDialogVM, showReimageDialog, showTroubleshootDialog, troubleshootDialogVm, } = this.state;\r\n        const { secondaryBackgroundColor, transitionBackgroundColor } = getCustomTheme();\r\n        if (isLoading) {\r\n            return <LoadingContainer />;\r\n        }\r\n        if (!isLoading && vms.length < 1) {\r\n            return (<div id=\"student-vm-list\" style={isPanelView ? undefined : { backgroundColor: transitionBackgroundColor }}>\r\n                    {this._renderListErrorBanner()}\r\n                    <NoVmsMessage isPanelView={isPanelView} isTeamsIntegrationEnabled={isTeamsIntegrationEnabled} isLmsIntegrationEnabled={isLmsIntegrationEnabled}/>\r\n                </div>);\r\n        }\r\n        const sortedVms = vms.sort((a, b) => {\r\n            if (a.title && b.title) {\r\n                return caseInsensitiveLocaleCompare(a.title, b.title);\r\n            }\r\n            else {\r\n                return 0;\r\n            }\r\n        });\r\n        const mustSetPassword = resetPasswordDialogVM && mustResetPasswordBeforeConnect(resetPasswordDialogVM);\r\n        return (<>\r\n                <div id=\"student-vm-list\" style={isPanelView ? undefined : { backgroundColor: secondaryBackgroundColor }}>\r\n                    {!isPanelView && (<>\r\n                            {this._renderErrorBanners()}\r\n                            <div id=\"student-vm-list-page-title\">\r\n                                <FormattedMessage {...messages.virtualMachinesPageHeader}/>\r\n                            </div>\r\n                        </>)}\r\n\r\n                    <>\r\n                        <div id=\"student-vm-list-content\">\r\n                            <StudentVmListAnnounced vms={vms}/>\r\n                            <List items={sortedVms} onRenderCell={this._renderVm} getItemCountForPage={() => sortedVms.length}/>\r\n                        </div>\r\n                    </>\r\n                </div>\r\n\r\n                {showResetPasswordDialog && (<ResetPasswordDialog isResetting={!mustSetPassword} isWindows={resetPasswordDialogVM && resetPasswordDialogVM.isWindows} username={resetPasswordDialogVM && resetPasswordDialogVM.username} id={resetPasswordDialogVM && resetPasswordDialogVM.id} onDismiss={this._dismissResetPasswordDialog} onDismissed={this._dismissedResetPasswordDialog} onSubmit={this._changePasswordClicked}/>)}\r\n                {showConnectDialog && (<ConnectToVmDialog sshCommand={connectDialogSshCommand || ''} onDismiss={this._dismissConnectDialog} onDismissed={this._dismissedConnectDialog}/>)}\r\n                {showStopVMDialog && (<StopVmDialog vm={stopDialogVM} onDismiss={this._dismissStopDialog} onSubmit={this._vmStopConfirmedClicked}/>)}\r\n                {showRdpInfoDialog && (<RdpInfoDialog rdpInfo={(rdpInfoDialogVm && rdpInfoDialogVm.rdpAuthority) || ''} onDismiss={this._dismissRdpInfoDialog}/>)}\r\n                {showReimageDialog && (<ResetVmsDialog isStudentVM={true} onSubmit={this._reimageSubmitted} onDismiss={this._dismissReimageDialog}/>)}\r\n                {showTroubleshootDialog && (<TroubleshootDialog onDismiss={() => this._dismissTroubleshootDialog()} onRedeploy={() => this._vmRedeployClicked(troubleshootDialogVm)}/>)}\r\n            </>);\r\n    }\r\n    _renderVm(item, index) {\r\n        if (!item) {\r\n            return null;\r\n        }\r\n        const { isBastionEnabled, isTeamsIntegrationEnabled } = this.props.studentVmListViewModel;\r\n        return (<StudentVmCard item={item} index={index} isBastionEnabled={isBastionEnabled} isTeamsIntegrationEnabled={isTeamsIntegrationEnabled} onStart={this._vmStartClicked} onStop={this._vmStopClicked} onConnect={this._vmConnectClicked} onResetPassword={this._resetPasswordClicked} onShowRdpInfo={this._showRdpInfoClicked} onRedeploy={this._vmRedeployClicked} onReimage={this._vmReimageClicked} onShowTroubleshootDialog={this._showTroubleshootDialogClicked}/>);\r\n    }\r\n    _renderListErrorBanner() {\r\n        const { studentVmListViewModel, onClearListError } = this.props;\r\n        const { listEnvironmentsError } = studentVmListViewModel;\r\n        return (<ListErrorBanner listEnvironmentsError={listEnvironmentsError} dismissListEnvironmentsError={onClearListError}/>);\r\n    }\r\n    _renderErrorBanners() {\r\n        const { studentVmListViewModel, onClearListError, onClearStartError, onClearStopError, onClearResetPasswordError, onClearRedeployError, onClearReimageError, } = this.props;\r\n        const { vms, listEnvironmentsError, vCurrentStartErrors, vCurrentStopErrors, vCurrentResetPasswordErrors, vNextStartErrors, vNextStopErrors, vNextResetPasswordErrors, reimageErrors, redeployErrors, } = studentVmListViewModel;\r\n        return (<ErrorBanners vms={vms} listEnvironmentsError={listEnvironmentsError} vCurrentStartErrors={vCurrentStartErrors} vCurrentStopErrors={vCurrentStopErrors} vCurrentResetPasswordErrors={vCurrentResetPasswordErrors} dismissListEnvironmentsError={onClearListError} dismissStartEnvironmentError={onClearStartError} dismissStopEnvironmentError={onClearStopError} dismissResetEnvironmentPasswordError={onClearResetPasswordError} vNextStartErrors={vNextStartErrors} vNextStopErrors={vNextStopErrors} vNextResetPasswordErrors={vNextResetPasswordErrors} reimageErrors={reimageErrors} redeployErrors={redeployErrors} dismissRedeployError={onClearRedeployError} dismissReimageError={onClearReimageError}/>);\r\n    }\r\n    _resetPasswordClicked(vm) {\r\n        this.setState({\r\n            showResetPasswordDialog: true,\r\n            resetPasswordDialogVM: vm,\r\n        });\r\n    }\r\n    _showRdpInfoClicked(vm) {\r\n        this.setState({\r\n            showRdpInfoDialog: true,\r\n            rdpInfoDialogVm: vm,\r\n        });\r\n    }\r\n    _showTroubleshootDialogClicked(vm) {\r\n        this.setState({\r\n            showTroubleshootDialog: true,\r\n            troubleshootDialogVm: vm,\r\n        });\r\n    }\r\n    _vmStartClicked(vm) {\r\n        this.props.onStart(vm.id);\r\n    }\r\n    _vmStopClicked(vm) {\r\n        // we want to tell a user that they won't be able to re-start their\r\n        // VMs after they stop them\r\n        if (vmCanStartAgain(vm)) {\r\n            this.props.onStop(vm.id);\r\n        }\r\n        else {\r\n            this.setState({\r\n                showStopVMDialog: true,\r\n                stopDialogVM: vm,\r\n            });\r\n        }\r\n    }\r\n    _vmReimageClicked(vm) {\r\n        this.setState({ showReimageDialog: true, reimageDialogVM: vm });\r\n    }\r\n    _reimageSubmitted() {\r\n        const { reimageDialogVM } = this.state;\r\n        if (!!reimageDialogVM) {\r\n            this.props.onReimage(reimageDialogVM.id);\r\n        }\r\n        this._dismissReimageDialog();\r\n    }\r\n    _dismissReimageDialog() {\r\n        this.setState({\r\n            showReimageDialog: false,\r\n            reimageDialogVM: undefined,\r\n        });\r\n    }\r\n    _vmRedeployClicked(vm) {\r\n        this.props.onRedeploy(vm.id);\r\n    }\r\n    _vmStopConfirmedClicked(vm) {\r\n        this.props.onStop(vm.id);\r\n        this._dismissStopDialog();\r\n    }\r\n    _vmConnectClicked(vm, type) {\r\n        if (mustResetPasswordBeforeConnect(vm)) {\r\n            this.setState({\r\n                showResetPasswordDialog: true,\r\n                resetPasswordDialogVM: vm,\r\n            });\r\n        }\r\n        else {\r\n            this._setConnectData(vm, type);\r\n        }\r\n    }\r\n    _setSshConnectData(vm) {\r\n        const { port, url } = getSshConnectData(vm.sshAuthority);\r\n        this.setState({\r\n            showConnectDialog: true,\r\n            // note: this is not localizable because it's a command\r\n            connectDialogSshCommand: getSshCommand(port, vm.username, url),\r\n        });\r\n    }\r\n    _setRdpConnectData(vm) {\r\n        const { fileName, fileContent } = getRdpConnectData(vm.rdpAuthority, vm.isWindows, vm.username, vm.title);\r\n        createAndDownloadFile(fileName, fileContent);\r\n    }\r\n    _rdpInBrowser(vm) {\r\n        window.open(vm.rdpBrowserUrl, `rdp-${vm.title}`); // eslint-disable-line security/detect-non-literal-fs-filename\r\n    }\r\n    _sshInBrowser(vm) {\r\n        window.open(vm.sshBrowserUrl, `ssh-${vm.title}`); // eslint-disable-line security/detect-non-literal-fs-filename\r\n    }\r\n    _setConnectData(vm, type) {\r\n        switch (type) {\r\n            case ConnectionType.Rdp:\r\n                this._setRdpConnectData(vm);\r\n                break;\r\n            case ConnectionType.Ssh:\r\n                this._setSshConnectData(vm);\r\n                break;\r\n            case ConnectionType.RdpInBrowser:\r\n                this._rdpInBrowser(vm);\r\n                break;\r\n            case ConnectionType.SshInBrowser:\r\n                this._sshInBrowser(vm);\r\n                break;\r\n            default:\r\n                throw new Error(`Unsupported connection type: ${type}`);\r\n        }\r\n    }\r\n    _changePasswordClicked(id, username, password) {\r\n        this.props.onPasswordReset(id, username, password);\r\n        this._dismissResetPasswordDialog();\r\n    }\r\n    _dismissResetPasswordDialog() {\r\n        this.setState({\r\n            showResetPasswordDialog: false,\r\n        });\r\n    }\r\n    _dismissRdpInfoDialog() {\r\n        this.setState({\r\n            showRdpInfoDialog: false,\r\n            rdpInfoDialogVm: undefined,\r\n        });\r\n    }\r\n    _dismissTroubleshootDialog() {\r\n        this.setState({\r\n            showTroubleshootDialog: false,\r\n            troubleshootDialogVm: undefined,\r\n        });\r\n    }\r\n    _dismissedResetPasswordDialog() {\r\n        this.setState({\r\n            resetPasswordDialogVM: undefined,\r\n        });\r\n    }\r\n    _dismissConnectDialog() {\r\n        this.setState({\r\n            showConnectDialog: false,\r\n        });\r\n    }\r\n    _dismissedConnectDialog() {\r\n        this.setState({\r\n            connectDialogSshCommand: undefined,\r\n        });\r\n    }\r\n    _dismissStopDialog() {\r\n        this.setState({\r\n            showStopVMDialog: false,\r\n            stopDialogVM: undefined,\r\n        });\r\n    }\r\n}\r\nexport default injectIntl(StudentVmList);\r\n","export const RegistrationState = {\r\n    None: '',\r\n    Registering: 'registering',\r\n    Registered: 'registered',\r\n    Failed: 'failed',\r\n};\r\nexport const RegistrationErrorCode = {\r\n    RestrictedLabAccessDenied: 'RestrictedLabAccessDenied',\r\n    InsufficientEnvironmentsToClaim: 'InsufficientEnvironmentsToClaim',\r\n    InvalidRegistrationCode: 'InvalidRegistrationCode',\r\n    CannotRegisterToUnpublishedLab: 'CannotRegisterToUnpublishedLab',\r\n    ResourceOperationNotSupported: 'ResourceOperationNotSupported',\r\n};\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const RegisterActionType = {\r\n    ...CommonActionType,\r\n    REGISTER_USER: 'REGISTER_USER',\r\n    REGISTER_USER_SUCCESS: 'REGISTER_USER_SUCCESS',\r\n    REGISTER_USER_FAILED: 'REGISTER_USER_FAILED',\r\n    CLEAR_REGISTER_ERRORS: 'CLEAR_REGISTER_ERRORS',\r\n    CLEAR_REGISTER_STATE: 'CLEAR_REGISTER_STATE',\r\n};\r\n","import { RegisterActionType, } from './register-actions';\r\nexport const registerUser = (registrationCode) => ({\r\n    type: RegisterActionType.REGISTER_USER,\r\n    registrationCode,\r\n});\r\nexport const clearRegistrationErrors = () => ({\r\n    type: RegisterActionType.CLEAR_REGISTER_ERRORS,\r\n});\r\nexport const clearRegistrationState = () => ({\r\n    type: RegisterActionType.CLEAR_REGISTER_STATE,\r\n});\r\nexport const registerUserSuccess = () => ({\r\n    type: RegisterActionType.REGISTER_USER_SUCCESS,\r\n});\r\nexport const registerUserFailed = (error) => ({\r\n    type: RegisterActionType.REGISTER_USER_FAILED,\r\n    error,\r\n});\r\nconst actions = {\r\n    registerUser,\r\n    clearRegistrationErrors,\r\n    clearRegistrationState,\r\n    registerUserSuccess,\r\n    registerUserFailed,\r\n};\r\nexport default actions;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const UserEnvironmentActionType = {\r\n    ...CommonActionType,\r\n    POLL_LIST_GLOBAL_USER_ENVIRONMENTS_START: 'POLL_LIST_GLOBAL_USER_ENVIRONMENTS_START',\r\n    POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP: 'POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP',\r\n    POLL_LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED: 'POLL_LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED',\r\n    LIST_GLOBAL_USER_ENVIRONMENTS: 'LIST_GLOBAL_USER_ENVIRONMENTS',\r\n    LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED: 'LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED',\r\n    LIST_GLOBAL_USER_ENVIRONMENTS_SUCCESS: 'LIST_GLOBAL_USER_ENVIRONMENTS_SUCCESS',\r\n    LIST_GLOBAL_USER_ENVIRONMENTS_ERROR: 'LIST_GLOBAL_USER_ENVIRONMENTS_ERROR',\r\n    CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR: 'CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR',\r\n    START_GLOBAL_USER_ENVIRONMENT: 'START_GLOBAL_USER_ENVIRONMENT',\r\n    START_GLOBAL_USER_ENVIRONMENT_FAILED: 'START_GLOBAL_USER_ENVIRONMENT_FAILED',\r\n    START_GLOBAL_USER_ENVIRONMENT_ACCEPTED: 'START_GLOBAL_USER_ENVIRONMENT_ACCEPTED_ACTION',\r\n    CLEAR_START_USER_ENVIRONMENT_ERROR: 'CLEAR_START_USER_ENVIRONMENT_ERROR',\r\n    STOP_GLOBAL_USER_ENVIRONMENT: 'STOP_GLOBAL_USER_ENVIRONMENT',\r\n    STOP_GLOBAL_USER_ENVIRONMENT_FAILED: 'STOP_GLOBAL_USER_ENVIRONMENT_FAILED',\r\n    STOP_GLOBAL_USER_ENVIRONMENT_ACCEPTED: 'STOP_GLOBAL_USER_ENVIRONMENT_ACCEPTED_ACTION',\r\n    CLEAR_STOP_USER_ENVIRONMENT_ERROR: 'CLEAR_STOP_USER_ENVIRONMENT_ERROR',\r\n    RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD: 'RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD',\r\n    RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED: 'RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED',\r\n    CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR: 'CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR',\r\n    CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS: 'CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS',\r\n    REIMAGE_USER_VIRTUAL_MACHINE: 'REIMAGE_USER_VIRTUAL_MACHINE',\r\n    REIMAGE_USER_VIRTUAL_MACHINE_ERROR: 'REIMAGE_USER_VIRTUAL_MACHINE_ERROR',\r\n    REIMAGE_USER_VIRTUAL_MACHINE_ACCEPTED: 'REIMAGE_USER_VIRTUAL_MACHINE_ACCEPTED',\r\n    REDEPLOY_USER_VIRTUAL_MACHINE: 'REDEPLOY_USER_VIRTUAL_MACHINE',\r\n    REDEPLOY_USER_VIRTUAL_MACHINE_ERROR: 'REDEPLOY_USER_VIRTUAL_MACHINE_ERROR',\r\n    REDEPLOY_USER_VIRTUAL_MACHINE_ACCEPTED: 'REDEPLOY_USER_VIRTUAL_MACHINE_ACCEPTED',\r\n    CLEAR_REIMAGE_USER_VIRTUAL_MACHINE_ERROR: 'CLEAR_REIMAGE_USER_VIRTUAL_MACHINE_ERROR',\r\n    CLEAR_REDEPLOY_USER_VIRTUAL_MACHINE_ERROR: 'CLEAR_REDEPLOY_USER_VIRTUAL_MACHINE_ERROR',\r\n    LIST_VNEXT_USER_VIRTUAL_MACHINES: 'LIST_VNEXT_USER_VIRTUAL_MACHINES',\r\n    LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS: 'LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS',\r\n    LIST_VNEXT_USER_VIRTUAL_MACHINES_FAILURE: 'LIST_VNEXT_USER_VIRTUAL_MACHINES_FAILURE',\r\n    LIST_VCURRENT_USER_VIRTUAL_MACHINES: 'LIST_VCURRENT_USER_VIRTUAL_MACHINES',\r\n    LIST_VCURRENT_USER_VIRTUAL_MACHINES_FAILURE: 'LIST_VCURRENT_USER_VIRTUAL_MACHINES_FAILURE',\r\n    LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS: 'LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS',\r\n};\r\n","import { UserEnvironmentActionType, } from './user-environment-actions';\r\nexport const pollListUserEnvironmentsStart = (intervalMs, aadGroupId, initialDelayMs) => ({\r\n    type: UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_START,\r\n    intervalMs,\r\n    initialDelayMs,\r\n    aadGroupId,\r\n});\r\nexport const pollListUserEnvironmentsStop = () => ({\r\n    type: UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP,\r\n});\r\nexport const pollListUserEnvironmentsCancelled = () => ({\r\n    type: UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED,\r\n});\r\nexport const listUserEnvironments = (aadGroupId) => ({\r\n    type: UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS,\r\n    aadGroupId,\r\n});\r\nexport const listUserEnvironmentsCancelled = () => ({\r\n    type: UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED,\r\n});\r\nexport const listUserEnvironmentsSuccess = (environments) => ({\r\n    type: UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_SUCCESS,\r\n    environments,\r\n});\r\nexport const listUserEnvironmentsError = (error) => ({\r\n    type: UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_ERROR,\r\n    error,\r\n});\r\nexport const clearListUserEnvironmentError = () => ({\r\n    type: UserEnvironmentActionType.CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR,\r\n});\r\nexport const startEnvironment = (environmentId) => ({\r\n    type: UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT,\r\n    environmentId,\r\n});\r\nexport const startUserEnvironmentFailed = (environmentId, error) => ({\r\n    type: UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT_FAILED,\r\n    environmentId,\r\n    error,\r\n});\r\nexport const startUserEnvironmentAccepted = (environmentId, operationIds) => ({\r\n    type: UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT_ACCEPTED,\r\n    environmentId,\r\n    operationIds,\r\n});\r\nexport const stopUserEnvironmentAccepted = (environmentId, operationIds) => ({\r\n    type: UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT_ACCEPTED,\r\n    environmentId,\r\n    operationIds,\r\n});\r\nexport const redeployUserEnvironmentAccepted = (environmentId, operationIds) => ({\r\n    type: UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE_ACCEPTED,\r\n    environmentId,\r\n    operationIds,\r\n});\r\nexport const reimageUserEnvironmentAccepted = (environmentId, operationIds) => ({\r\n    type: UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE_ACCEPTED,\r\n    environmentId,\r\n    operationIds,\r\n});\r\nexport const clearStartUserEnvironmentError = (environmentId, errorIndex) => ({\r\n    type: UserEnvironmentActionType.CLEAR_START_USER_ENVIRONMENT_ERROR,\r\n    environmentId,\r\n    errorIndex,\r\n});\r\nexport const stopEnvironment = (environmentId) => ({\r\n    type: UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT,\r\n    environmentId,\r\n});\r\nexport const stopUserEnvironmentFailed = (environmentId, error) => ({\r\n    type: UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT_FAILED,\r\n    environmentId,\r\n    error,\r\n});\r\nexport const clearStopUserEnvironmentError = (environmentId, errorIndex) => ({\r\n    type: UserEnvironmentActionType.CLEAR_STOP_USER_ENVIRONMENT_ERROR,\r\n    environmentId,\r\n    errorIndex,\r\n});\r\nexport const resetEnvironmentPassword = (environmentId, username, password) => ({\r\n    type: UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD,\r\n    environmentId,\r\n    username,\r\n    password,\r\n});\r\nexport const resetUserEnvironmentPasswordFailed = (environmentId, error) => ({\r\n    type: UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED,\r\n    environmentId,\r\n    error,\r\n});\r\nexport const clearResetUserEnvironmentPasswordError = (environmentId, errorIndex) => ({\r\n    type: UserEnvironmentActionType.CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR,\r\n    environmentId,\r\n    errorIndex,\r\n});\r\nexport const clearUserEnvironmentErrors = () => ({\r\n    type: UserEnvironmentActionType.CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS,\r\n});\r\nexport const reimageUserVirtualMachine = (environmentId) => ({\r\n    type: UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE,\r\n    environmentId,\r\n});\r\nexport const reimageUserVirtualMachineError = (environmentId, error) => ({\r\n    type: UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE_ERROR,\r\n    environmentId,\r\n    error,\r\n});\r\nexport const redeployUserVirtualMachine = (environmentId) => ({\r\n    type: UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE,\r\n    environmentId,\r\n});\r\nexport const redeployUserVirtualMachineError = (environmentId, error) => ({\r\n    type: UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE_ERROR,\r\n    environmentId,\r\n    error,\r\n});\r\nexport const clearReimageUserVirtualMachineError = (environmentId, errorIndex) => ({\r\n    type: UserEnvironmentActionType.CLEAR_REIMAGE_USER_VIRTUAL_MACHINE_ERROR,\r\n    environmentId,\r\n    errorIndex,\r\n});\r\nexport const clearRedeployUserVirtualMachineError = (environmentId, errorIndex) => ({\r\n    type: UserEnvironmentActionType.CLEAR_REDEPLOY_USER_VIRTUAL_MACHINE_ERROR,\r\n    environmentId,\r\n    errorIndex,\r\n});\r\nexport const listAllUserVirtualMachinesSuccess = () => ({\r\n    type: UserEnvironmentActionType.LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS,\r\n});\r\nexport const listVNextUserVirtualMachines = (aadGroupId) => ({\r\n    type: UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES,\r\n    aadGroupId,\r\n});\r\nexport const listVNextUserVirtualMachinesSuccess = (virtualMachines) => ({\r\n    type: UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS,\r\n    virtualMachines,\r\n});\r\nexport const listVNextUserVirtualMachinesFailure = () => ({\r\n    type: UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_FAILURE,\r\n});\r\nexport const listVCurrentUserVirtualMachines = (aadGroupId) => ({\r\n    type: UserEnvironmentActionType.LIST_VCURRENT_USER_VIRTUAL_MACHINES,\r\n    aadGroupId,\r\n});\r\nexport const listVCurrentUserVirtualMachinesFailures = () => ({\r\n    type: UserEnvironmentActionType.LIST_VCURRENT_USER_VIRTUAL_MACHINES_FAILURE,\r\n});\r\nexport const actions = {\r\n    pollListUserEnvironmentsStart,\r\n    pollListUserEnvironmentsStop,\r\n    pollListUserEnvironmentsCancelled,\r\n    listUserEnvironments,\r\n    listUserEnvironmentsCancelled,\r\n    listUserEnvironmentsSuccess,\r\n    listUserEnvironmentsError,\r\n    clearListUserEnvironmentError,\r\n    startEnvironment,\r\n    startUserEnvironmentFailed,\r\n    clearStartUserEnvironmentError,\r\n    stopEnvironment,\r\n    stopUserEnvironmentFailed,\r\n    clearStopUserEnvironmentError,\r\n    resetEnvironmentPassword,\r\n    resetUserEnvironmentPasswordFailed,\r\n    clearResetUserEnvironmentPasswordError,\r\n    clearUserEnvironmentErrors,\r\n    reimageUserVirtualMachine,\r\n    reimageUserVirtualMachineError,\r\n    redeployUserVirtualMachine,\r\n    redeployUserVirtualMachineError,\r\n    redeployUserEnvironmentAccepted,\r\n    reimageUserEnvironmentAccepted,\r\n    clearReimageUserVirtualMachineError,\r\n    clearRedeployUserVirtualMachineError,\r\n    listAllUserVirtualMachinesSuccess,\r\n    listVNextUserVirtualMachines,\r\n    listVNextUserVirtualMachinesSuccess,\r\n    listVNextUserVirtualMachinesFailure,\r\n    listVCurrentUserVirtualMachinesFailures,\r\n    listVCurrentUserVirtualMachines,\r\n};\r\nexport default actions;\r\n","import { DefaultPollingDelayInterval, FifteenSecondInterval } from '../../utils/constants';\r\nimport { VmState } from '../../data/models/environment-common';\r\nexport function determinePollingInitialDelay(vms, isVNext, isTemplateVM) {\r\n    let isStarting, isStopping;\r\n    if (isTemplateVM) {\r\n        isStarting = vms.isStarting;\r\n        isStopping = vms.isStopping;\r\n    }\r\n    else {\r\n        const vmDetails = vms;\r\n        isStarting = vmDetails.some((vm) => vm.vmState === VmState.Starting);\r\n        isStopping = vmDetails.some((vm) => vm.vmState === VmState.Stopping);\r\n    }\r\n    if (isVNext && (isStarting || isStopping)) {\r\n        return FifteenSecondInterval;\r\n    }\r\n    return DefaultPollingDelayInterval;\r\n}\r\n","import * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport StudentVmList from './student-vm-list';\r\nimport { messages } from './student-vm-list-messages';\r\nimport { getStudentVmListContainerModel } from './student-vm-list-selectors';\r\nimport { Page } from '../common/page/page';\r\nimport { RegistrationState } from '../data/models/register-user';\r\nimport { registerUser } from '../redux/actions/register/register-action-creators';\r\nimport { clearListUserEnvironmentError, clearRedeployUserVirtualMachineError, clearReimageUserVirtualMachineError, clearResetUserEnvironmentPasswordError, clearStartUserEnvironmentError, clearStopUserEnvironmentError, pollListUserEnvironmentsStart, pollListUserEnvironmentsStop, redeployUserVirtualMachine, reimageUserVirtualMachine, resetEnvironmentPassword, startEnvironment, stopEnvironment, } from '../redux/actions/user-environment/user-environment-action-creators';\r\nimport { FiveSecondInterval, OneMinuteInterval, ThirtySecondInterval } from '../utils/constants';\r\nimport { determinePollingInitialDelay } from '../common/vm/vm-polling-initial-delay';\r\nfunction determinePollingIntervalLength(vms) {\r\n    if (vms.findIndex((vm) => vm.isStarting || vm.isStopping) > -1) {\r\n        return FiveSecondInterval;\r\n    }\r\n    else if (vms.findIndex((vm) => vm.isCreating || vm.isResettingPassword || !!vm.isRedeploying || !!vm.isReimaging) > -1) {\r\n        return ThirtySecondInterval;\r\n    }\r\n    return OneMinuteInterval;\r\n}\r\nclass StudentVmListContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._setPollingInterval = this._setPollingInterval.bind(this);\r\n    }\r\n    componentDidMount() {\r\n        const { studentVmListViewModel, groupId, registerUser, isPanelView, shouldFilterByGroupId } = this.props;\r\n        const { vms, registrationState } = studentVmListViewModel;\r\n        const shouldSkipRegisterationInPanel = isPanelView && !shouldFilterByGroupId;\r\n        if (!!groupId && !shouldSkipRegisterationInPanel) {\r\n            // When in AAD group mode (i.e. running inside Teams), run registration first.\r\n            if (registrationState !== RegistrationState.Registering) {\r\n                registerUser(groupId);\r\n                return;\r\n            }\r\n        }\r\n        const initialPollingIntervalMs = determinePollingIntervalLength(vms);\r\n        this._setPollingInterval(initialPollingIntervalMs);\r\n    }\r\n    componentDidUpdate() {\r\n        const { studentVmListViewModel, groupId, pollListUserEnvironmentsStop } = this.props;\r\n        const { vms, registrationState, isVNextFeaureEnabled } = studentVmListViewModel;\r\n        // In AAD group mode (i.e. running inside teams) we run registration first.\r\n        if (!!groupId) {\r\n            // Wait for registration to complete before polling.\r\n            if (registrationState === RegistrationState.Registering) {\r\n                return;\r\n            }\r\n            // Initialize polling after registration is complete.\r\n            else if (!this._pollingIntervalMs) {\r\n                const initialPollingIntervalMs = determinePollingIntervalLength(vms);\r\n                this._setPollingInterval(initialPollingIntervalMs);\r\n                return;\r\n            }\r\n        }\r\n        const nextPollingIntervalMs = determinePollingIntervalLength(vms);\r\n        if (this._pollingIntervalMs !== nextPollingIntervalMs) {\r\n            pollListUserEnvironmentsStop();\r\n            const initialDelayMs = determinePollingInitialDelay(vms, isVNextFeaureEnabled);\r\n            this._setPollingInterval(nextPollingIntervalMs, initialDelayMs);\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        this.props.pollListUserEnvironmentsStop();\r\n    }\r\n    render() {\r\n        const { studentVmListViewModel, isPanelView, clearListUserEnvironmentError, startEnvironment, clearStartUserEnvironmentError, stopEnvironment, clearStopUserEnvironmentError, resetEnvironmentPassword, clearResetUserEnvironmentPasswordError, reimageUserVirtualMachine, redeployUserVirtualMachine, clearRedeployUserVirtualMachineError, clearReimageUserVirtualMachineError, } = this.props;\r\n        const { vms, supportSections, isTeamsIntegrationEnabled, shouldHideUserMenu, isLoading, } = studentVmListViewModel;\r\n        const props = {\r\n            studentVmListViewModel,\r\n            isPanelView: isPanelView ?? false,\r\n            onClearListError: clearListUserEnvironmentError,\r\n            onStart: startEnvironment,\r\n            onClearStartError: clearStartUserEnvironmentError,\r\n            onStop: stopEnvironment,\r\n            onClearStopError: clearStopUserEnvironmentError,\r\n            onPasswordReset: resetEnvironmentPassword,\r\n            onClearResetPasswordError: clearResetUserEnvironmentPasswordError,\r\n            onReimage: reimageUserVirtualMachine,\r\n            onRedeploy: redeployUserVirtualMachine,\r\n            onClearRedeployError: clearRedeployUserVirtualMachineError,\r\n            onClearReimageError: clearReimageUserVirtualMachineError,\r\n        };\r\n        const pageTitle = this.props.intl.formatMessage(messages.virtualMachinesPageHeader);\r\n        return isPanelView ? (<StudentVmList {...props}/>) : (<Page title={pageTitle} isScrollable={true} hideHeader={isTeamsIntegrationEnabled && vms.length === 0} headerProps={{\r\n            hideLabParentPicker: true,\r\n            hideLabPicker: true,\r\n            useCurrentPathForHome: true,\r\n            hideVmListButton: true,\r\n            supportSections,\r\n            isStudentVmList: true,\r\n            hideUserMenu: shouldHideUserMenu,\r\n            hideFeedback: isLoading,\r\n        }}>\r\n                <StudentVmList {...props}/>\r\n            </Page>);\r\n    }\r\n    _setPollingInterval(pollingIntervalMs, initialDelayMs) {\r\n        const { groupId, isPanelView, shouldFilterByGroupId } = this.props;\r\n        const shouldListAllVMs = isPanelView && !shouldFilterByGroupId;\r\n        this._pollingIntervalMs = pollingIntervalMs;\r\n        this.props.pollListUserEnvironmentsStart(pollingIntervalMs, shouldListAllVMs ? undefined : groupId, initialDelayMs);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getStudentVmListContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    pollListUserEnvironmentsStart,\r\n    pollListUserEnvironmentsStop,\r\n    clearListUserEnvironmentError,\r\n    startEnvironment,\r\n    clearStartUserEnvironmentError,\r\n    stopEnvironment,\r\n    clearStopUserEnvironmentError,\r\n    resetEnvironmentPassword,\r\n    clearResetUserEnvironmentPasswordError,\r\n    registerUser,\r\n    reimageUserVirtualMachine,\r\n    redeployUserVirtualMachine,\r\n    clearReimageUserVirtualMachineError,\r\n    clearRedeployUserVirtualMachineError,\r\n};\r\nexport const StudentVmListContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(StudentVmListContainerInjected));\r\nexport default StudentVmListContainer;\r\n","import { Panel, PanelType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { getCustomTheme } from '../../common/themes/selectors';\r\nimport { commonMessages } from '../../language/common-messages';\r\nimport StudentVmListContainer from '../../student-vm-list/student-vm-list-container';\r\nimport { Constants } from '../../utils/constants';\r\nconst VmListFlyoutInjected = (props) => {\r\n    const { onDismiss, intl } = props;\r\n    const { formatMessage: msg } = intl;\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={true} onDismiss={onDismiss} headerText={msg(commonMessages.myVirtualMachines)} closeButtonAriaLabel={msg(commonMessages.close)} styles={{ content: { padding: 0 }, ...getCustomTheme().panelStyles }}>\r\n            <StudentVmListContainer isPanelView={true}/>\r\n        </Panel>);\r\n};\r\nexport const VmListFlyout = injectIntl(VmListFlyoutInjected);\r\nexport default VmListFlyout;\r\n","import * as React from 'react';\r\nimport { DefaultButton, } from '@fluentui/react';\r\nimport { LoadingItem } from './loading-item';\r\nimport _ from 'lodash';\r\nimport DropdownItem from './dropdown-item';\r\nconst PageHeaderDropdownExpanded = (props) => {\r\n    const { menuListProps, defaultRender } = props;\r\n    return <div style={{ verticalAlign: 'middle' }}>{defaultRender(menuListProps)}</div>;\r\n};\r\nexport class PageHeaderDropdown extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        const { items, selected, isLoading, minExpandedWidth, onChange, onRenderSelected, onRenderItem, onRenderPlaceholder, styles, ariaLabel, directionalHint, } = this.props;\r\n        const defaultStyles = {\r\n            root: {\r\n                verticalAlign: 'middle',\r\n                minWidth: '10px',\r\n            },\r\n        };\r\n        const buttonStyles = _.merge({}, defaultStyles, styles || undefined);\r\n        if (isLoading) {\r\n            return <LoadingItem styles={buttonStyles}/>;\r\n        }\r\n        if (items.length < 1) {\r\n            return null;\r\n        }\r\n        let selectedItem = undefined;\r\n        const menuItems = items.map((item) => ({\r\n            key: item.value,\r\n            onRender: (menuItem, dismissMenu) => {\r\n                return (<DropdownItem item={item} onRenderItem={onRenderItem} onClick={() => {\r\n                    onChange(item);\r\n                    dismissMenu();\r\n                }} styles={{\r\n                    root: {\r\n                        padding: '8px 4px',\r\n                        width: '100%',\r\n                        backgroundColor: 'inherit',\r\n                        border: 0,\r\n                        height: '55px',\r\n                    },\r\n                }}/>);\r\n            },\r\n        }));\r\n        selectedItem = selected ? onRenderSelected(selected) : onRenderPlaceholder();\r\n        // NOTE: Setting ariaLabel as ariaDescription so that the screen reader\r\n        // still reads out the selected value of the dropdown\r\n        return (<DefaultButton styles={buttonStyles} ariaDescription={ariaLabel} menuIconProps={{\r\n            styles: {\r\n                root: {\r\n                    marginLeft: '8px',\r\n                    backgroundColor: 'inherit',\r\n                    color: 'inherit',\r\n                },\r\n            },\r\n        }} menuProps={{\r\n            items: menuItems,\r\n            styles: {\r\n                list: {\r\n                    minWidth: minExpandedWidth,\r\n                    maxHeight: '300px',\r\n                    overflowY: 'auto',\r\n                },\r\n            },\r\n            directionalHint,\r\n            onRenderMenuList: (menuListProps, defaultRender) => (<PageHeaderDropdownExpanded menuListProps={menuListProps} defaultRender={defaultRender}/>),\r\n        }}>\r\n                {selectedItem}\r\n            </DefaultButton>);\r\n    }\r\n}\r\nexport default PageHeaderDropdown;\r\n","import { DirectionalHint, Icon, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport PageHeaderDropdown from './dropdown/page-header-dropdown';\r\nimport { NeutralColors } from '@fluentui/theme';\r\nconst messages = defineMessages({\r\n    ariaLabel: {\r\n        id: 'TenantPickerAriaLabel',\r\n        defaultMessage: 'Select a tenant',\r\n        description: 'Aria label for the tenant picker control',\r\n    },\r\n});\r\nexport const Selected = (props) => {\r\n    const { tenant } = props;\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" grow styles={{ root: { marginRight: '5px' } }}>\r\n            <Stack.Item>{tenant.displayName}</Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const TenantPickerPlaceholder = () => {\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" grow styles={{ root: { marginRight: '5px' } }}>\r\n            <Stack.Item>\r\n                <FormattedMessage id=\"TenantPickerPlaceholder\" defaultMessage=\"Select a tenant\" description=\"The placeholder message displayed in the tenant picker when no tenant is selected.\"/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const Item = (props) => {\r\n    const { tenant, isSelected } = props;\r\n    return (<Stack horizontal={true} verticalAlign=\"center\" horizontalAlign=\"start\" grow>\r\n            {isSelected && (<Stack.Item>\r\n                    <Icon iconName=\"Accept\" styles={{ root: { paddingLeft: '8px' } }}/>\r\n                </Stack.Item>)}\r\n            <Stack styles={{ root: { paddingLeft: isSelected ? '8px' : '30px', paddingRight: '12px' } }}>\r\n                <Stack.Item align=\"start\">{tenant.displayName}</Stack.Item>\r\n                <Stack.Item align=\"start\" styles={{ root: { color: NeutralColors.gray130 } }}>\r\n                    {tenant.defaultDomain}\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Stack>);\r\n};\r\nfunction convertTenantToOption(tenant) {\r\n    return { value: tenant.tenantId };\r\n}\r\nfunction mapTenantsToOptions(tenants) {\r\n    return tenants.map((a) => convertTenantToOption(a)).toJS();\r\n}\r\nfunction getTenantFromOption(option, tenants) {\r\n    return tenants.find((a) => a.tenantId === option.value);\r\n}\r\nexport const TenantPicker = (props) => {\r\n    const { isLoading, tenants, selected, onChange, styles } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage } = intl;\r\n    const ariaLabel = formatMessage(messages.ariaLabel);\r\n    const options = isLoading ? [] : mapTenantsToOptions(tenants);\r\n    const selectedOption = selected ? convertTenantToOption(selected) : undefined;\r\n    return (<PageHeaderDropdown items={options} styles={styles} ariaLabel={ariaLabel} selected={selectedOption} isLoading={isLoading} minExpandedWidth={'50px'} onChange={(value) => {\r\n        onChange(getTenantFromOption(value, tenants));\r\n    }} onRenderSelected={(selected) => (<Selected tenant={getTenantFromOption(selected, tenants)}/>)} onRenderItem={(item) => (<Item tenant={getTenantFromOption(item, tenants)} isSelected={item.value === selected?.tenantId}/>)} onRenderPlaceholder={() => <TenantPickerPlaceholder />} directionalHint={DirectionalHint.bottomRightEdge}/>);\r\n};\r\nexport default TenantPicker;\r\n","import { PrimaryButton, Spinner, SpinnerSize } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport _ from 'lodash';\r\nexport const SubmitButton = (props) => {\r\n    const { isSubmitting, buttonText, disabled, spinnerStyles: providedSpinnerStyles, styles: providedStyles } = props;\r\n    const spinnerStyles = _.merge({}, { root: { marginRight: 8 } }, providedSpinnerStyles);\r\n    const styles = _.merge({}, { root: { fontWeight: 600, width: 'fit-content' } }, providedStyles);\r\n    const mergedProps = { ...props, ...{ disabled: disabled || isSubmitting, text: undefined, styles } };\r\n    return (<PrimaryButton {...mergedProps}>\r\n            {isSubmitting && <Spinner size={SpinnerSize.small} styles={spinnerStyles}/>}\r\n            {buttonText}\r\n        </PrimaryButton>);\r\n};\r\nexport default SubmitButton;\r\n","import memoize from 'memoize-one';\r\nimport { objectMultiKeySorter } from '../../utils/sorting';\r\nexport const getTenants = memoize((state) => {\r\n    const tenantStore = state.get('tenantStore');\r\n    const tenants = tenantStore.get('tenants');\r\n    const keys = ['displayName', 'defaultDomain'];\r\n    const sorter = objectMultiKeySorter(keys);\r\n    return tenants.sort(sorter);\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { getCurrentLabAccount } from '../lab-account-selectors';\r\nimport { getCurrentLab, isVNextLab } from '../lab-selectors';\r\nimport { getLabPlan, getLabPlans } from './lab-plan-selectors';\r\nexport const getCurrentSupportInfo = memoize((state) => {\r\n    const currentLabAccount = getCurrentLabAccount(state);\r\n    let currentSupportInfo = !!currentLabAccount ? currentLabAccount.supportInfo : undefined;\r\n    const labPlans = getLabPlans(state);\r\n    const currentLab = getCurrentLab(state);\r\n    if (!!currentLab && isVNextLab(currentLab.id) && !!currentLab.labPlanId) {\r\n        const labPlan = getLabPlan(labPlans, currentLab.labPlanId);\r\n        currentSupportInfo = labPlan?.supportInfo;\r\n    }\r\n    return currentSupportInfo;\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { AuthenticationState } from '../../data/models/identity';\r\nimport { getLocale, isDevMode, isLmsHost, isLmsMode, isTeamsMode, storeIsLoading, } from '../../redux/selectors/common-selectors';\r\nimport { getCurrentLabId, getLabStoreLoadState, getSelectableLabs } from '../../redux/selectors/lab-selectors';\r\nimport { getLabRoute, getRoute, getSearch, isLtiOidcRoute } from '../../redux/selectors/route-selector';\r\nimport { compareByName } from '../../utils/common';\r\nimport { isHealthyState } from '../../utils/provisioning-state';\r\nimport { getTenants } from '../../redux/selectors/tenant-selectors';\r\nimport { getAuthenticationState } from '../../redux/selectors/identity-selector';\r\nimport { getCurrentResourceGroup, getResourceGroups, isCurrentLabParentLabAccount, isLoadingLabParents, shouldDisableNewLabCreation, } from '../../redux/selectors/lab-parent-resource-selectors';\r\nimport { getCurrentLabAccount } from '../../redux/selectors/lab-account-selectors';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { getCurrentSupportInfo } from '../../redux/selectors/vnext/support-info-selectors';\r\nimport { getLinkableLabPlans } from '../../redux/selectors/vnext/lab-plan-selectors';\r\nimport { getCurrentLmsInstance, isLmsAdministrator } from '../../redux/selectors/lti-selectors';\r\nfunction getInitials(name, displayId) {\r\n    if (name) {\r\n        const nameParts = name.trim().split(' ');\r\n        if (nameParts.length < 2) {\r\n            return nameParts[0][0].toUpperCase();\r\n        }\r\n        return `${nameParts[0][0]}${nameParts[nameParts.length - 1][0]}`.toUpperCase();\r\n    }\r\n    if (displayId) {\r\n        const idParts = displayId.trim().split(/\\.|@/);\r\n        if (idParts.length < 2 || idParts[1].length < 1) {\r\n            return idParts[0][0].toUpperCase();\r\n        }\r\n        const secondPart = (idParts[1].length === 1 && idParts.length > 2 ? idParts[2] : idParts[1])[0];\r\n        return `${idParts[0][0]}${secondPart}`.toUpperCase();\r\n    }\r\n    return '?';\r\n}\r\nexport function convertResourceGroupToItem(resourceGroupId) {\r\n    const resourceGroup = new ResourceId(resourceGroupId);\r\n    return {\r\n        name: resourceGroup.resourceGroupName,\r\n        id: resourceGroupId,\r\n    };\r\n}\r\nfunction mapLabAccountsToItems(accounts) {\r\n    return accounts.map((a) => convertLabAccountToItem(a));\r\n}\r\nfunction convertLabAccountToItem(account) {\r\n    return {\r\n        name: account.name,\r\n        id: account.id,\r\n    };\r\n}\r\nfunction mapResourceGroupsToItems(resourceGroups) {\r\n    return resourceGroups.map((a) => convertResourceGroupToItem(a));\r\n}\r\nexport function mapLabParentResourcesToItems(accounts, resourceGroups) {\r\n    let items = mapLabAccountsToItems(accounts);\r\n    items = items.concat(mapResourceGroupsToItems(resourceGroups));\r\n    return items;\r\n}\r\nexport const getPageHeaderContainerModel = memoize((state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const labAccountStore = state.get('labAccountStore');\r\n    const identityStore = state.get('identityStore');\r\n    const labPlanStore = state.get('labPlanStore');\r\n    const identityState = getAuthenticationState(state);\r\n    const displayId = identityStore.get('displayId');\r\n    const name = identityStore.get('name');\r\n    const imageUrl = identityStore.get('imageUrl');\r\n    const isAuthenticating = identityState === AuthenticationState.NotStarted ||\r\n        identityState === AuthenticationState.Authenticating ||\r\n        identityState === AuthenticationState.Redirecting;\r\n    const isAuthenticated = identityState === AuthenticationState.Authenticated;\r\n    const initials = getInitials(name, displayId);\r\n    const selectedTenantId = identityStore.get('tenantId');\r\n    const labAccounts = labAccountStore.get('labAccounts').filter((o) => isHealthyState(o));\r\n    const currentLabAccount = getCurrentLabAccount(state);\r\n    const isLoadingLabParentResources = isLoadingLabParents(state);\r\n    const pathname = getRoute(state);\r\n    const search = getSearch(state);\r\n    const labPath = getLabRoute(state);\r\n    const labLoadState = getLabStoreLoadState(state);\r\n    const isLabAccount = isCurrentLabParentLabAccount(state);\r\n    const labs = getSelectableLabs(state);\r\n    const currentLabId = getCurrentLabId(state);\r\n    const isLoadingLabs = storeIsLoading(labLoadState);\r\n    const currentLab = labs.find((lab) => lab.id?.toUpperCase() === currentLabId.toUpperCase());\r\n    const tenants = getTenants(state);\r\n    const tenantStore = state.get('tenantStore');\r\n    const tenantLoadingState = tenantStore.get('loadingState');\r\n    const isLoadingTenants = storeIsLoading(tenantLoadingState);\r\n    const fatalErrorCode = commonStore.get('fatalErrorCode');\r\n    const hasFatalError = !!fatalErrorCode;\r\n    const featureStore = state.get('commonStore');\r\n    const isDevModeEnabled = isDevMode(state);\r\n    const enabledFeatures = featureStore.get('features');\r\n    const isNewLabCreationDisabled = shouldDisableNewLabCreation(state);\r\n    const isTeamsIntegrationEnabled = isTeamsMode(state);\r\n    const isLmsIntegrationEnabled = isLmsMode(state);\r\n    const resourceGroups = getResourceGroups(state);\r\n    const currentResourceGroup = getCurrentResourceGroup(state);\r\n    const labParentItems = mapLabParentResourcesToItems(labAccounts, resourceGroups).sort(compareByName);\r\n    const currentLabParentItem = !!currentLabAccount\r\n        ? convertLabAccountToItem(currentLabAccount)\r\n        : !!currentResourceGroup\r\n            ? convertResourceGroupToItem(currentResourceGroup)\r\n            : undefined;\r\n    const currentSupportInfo = getCurrentSupportInfo(state);\r\n    const shouldLoginWithPopupWindow = isLmsHost(state);\r\n    const isLtiStartOidcRoute = isLtiOidcRoute(state);\r\n    const locale = getLocale(state);\r\n    let labPlans = getLinkableLabPlans(state);\r\n    labPlans = labPlans.sort(compareByName);\r\n    const lmsInstance = getCurrentLmsInstance(state);\r\n    const isLmsAdmin = isLmsAdministrator(state);\r\n    const labPlanLoadState = labPlanStore.get('loadState');\r\n    const isLoadingLabPlans = storeIsLoading(labPlanLoadState);\r\n    const isUpdatingLms = labPlanStore.get('isUpdatingLms');\r\n    return {\r\n        isAuthenticating,\r\n        isAuthenticated,\r\n        isDevModeEnabled,\r\n        hasFatalError,\r\n        fatalErrorCode,\r\n        initials,\r\n        displayId,\r\n        name,\r\n        imageUrl,\r\n        isLoadingLabParents: isLoadingLabParentResources,\r\n        pathname,\r\n        search,\r\n        labPath,\r\n        isLoadingLabs,\r\n        labs,\r\n        currentLab,\r\n        isLoadingTenants,\r\n        tenants,\r\n        selectedTenantId,\r\n        isNewLabCreationDisabled,\r\n        enabledFeatures,\r\n        isTeamsIntegrationEnabled,\r\n        labParentItems,\r\n        currentLabParentItem,\r\n        currentSupportInfo,\r\n        isCurrentLabParentLabAccount: isLabAccount,\r\n        isLmsIntegrationEnabled,\r\n        shouldLoginWithPopupWindow,\r\n        isLtiStartOidcRoute,\r\n        locale,\r\n        labPlans,\r\n        lmsInstance,\r\n        isUpdatingLms,\r\n        isLoadingLabPlans,\r\n        isLmsAdmin,\r\n    };\r\n});\r\n","import { Checkbox, DefaultButton, Link, Panel, PanelType, Separator, SharedColors, Stack } from '@fluentui/react';\r\nimport { Set } from 'immutable';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport Constants from '../../utils/constants';\r\nimport SubmitButton from '../submit-button';\r\nimport { getCustomTheme } from '../themes/selectors';\r\nimport memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nimport LoadingContainer from '../loading-section';\r\nimport { usePrevious } from '../../utils/common';\r\nimport { convertResourceGroupToItem } from './page-header-selectors';\r\nconst mapLabPlanToCheckbox = (labPlan, linkedLabPlans, disabled, check, uncheck) => {\r\n    return (<Checkbox key={labPlan.id} label={labPlan.name} disabled={disabled} checked={linkedLabPlans.contains(labPlan.id)} onChange={(_, checked) => {\r\n        checked ? check(labPlan.id) : uncheck(labPlan.id);\r\n    }}/>);\r\n};\r\nconst getOptions = memoize((labPlans, linkedLabPlans, isSubmitting, check, uncheck) => {\r\n    return (<>\r\n                {labPlans.map((labPlan) => mapLabPlanToCheckbox(labPlan, linkedLabPlans, isSubmitting, check, uncheck))}\r\n            </>);\r\n});\r\nconst getLinkedLabPlans = memoize((labPlans) => {\r\n    return labPlans\r\n        .filter((o) => !!o.linkedLmsInstance)\r\n        .map((o) => o.id)\r\n        .toSet();\r\n});\r\nconst getUnlinkedLabPlans = memoize((labPlans) => {\r\n    return labPlans\r\n        .filter((o) => !o.linkedLmsInstance)\r\n        .map((o) => o.id)\r\n        .toSet();\r\n});\r\nconst getAllIds = memoize((labPlans) => {\r\n    return labPlans.map((o) => o.id).toSet();\r\n});\r\nconst getLabPlansToLink = memoize((labPlans, linkIds) => {\r\n    return labPlans\r\n        .filter((o) => !o.linkedLmsInstance &&\r\n        linkIds.find((id) => caseInsensitiveCultureInvariantCompare(o.id, id) === 0))\r\n        .map((lp) => lp.id);\r\n});\r\nconst getLabPlansToUnlink = memoize((labPlans, unlinkedIds) => {\r\n    return labPlans\r\n        .filter((o) => !!o.linkedLmsInstance &&\r\n        unlinkedIds.find((id) => caseInsensitiveCultureInvariantCompare(o.id, id) === 0))\r\n        .map((lp) => lp.id);\r\n});\r\n// Flyout to connect lab plans to LMS by the admin.\r\nexport const LmsLabPlanSettingsFlyout = (props) => {\r\n    const { isSubmitting, onDismiss, labPlans, lmsInstance, onSubmit, isLoading, currentLabParentId, selectLabParentItem, } = props;\r\n    const { formatMessage: msg } = useIntl();\r\n    const [linkedLabPlans, setLinkedLabPlans] = React.useState(Set());\r\n    const [unlinkedLabPlans, setUnlinkedLabPlans] = React.useState(Set());\r\n    // close the flyout after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    const labPlansToLink = getLabPlansToLink(labPlans, linkedLabPlans);\r\n    const labPlansToUnlink = getLabPlansToUnlink(labPlans, unlinkedLabPlans);\r\n    const shouldDisable = labPlansToLink.size === 0 && labPlansToUnlink.size === 0;\r\n    React.useEffect(() => {\r\n        if (!isSubmitting && !isLoading) {\r\n            const linkedLabPlans = getLinkedLabPlans(labPlans);\r\n            setLinkedLabPlans(linkedLabPlans);\r\n            const unlinkedLabPlans = getUnlinkedLabPlans(labPlans);\r\n            setUnlinkedLabPlans(unlinkedLabPlans);\r\n            if (previousIsSubmitting && onDismiss) {\r\n                onDismiss();\r\n            }\r\n            if (currentLabParentId && selectLabParentItem) {\r\n                const currentLabParent = convertResourceGroupToItem(currentLabParentId);\r\n                selectLabParentItem(currentLabParent);\r\n            }\r\n        }\r\n    }, [isSubmitting, isLoading]);\r\n    const onClick = React.useCallback(() => {\r\n        onSubmit(labPlansToLink.toArray(), labPlansToUnlink.toArray(), lmsInstance);\r\n    }, [labPlans, linkedLabPlans, unlinkedLabPlans]);\r\n    const check = React.useCallback((id) => {\r\n        setLinkedLabPlans(linkedLabPlans.add(id));\r\n        setUnlinkedLabPlans(unlinkedLabPlans.remove(id));\r\n    }, [linkedLabPlans, unlinkedLabPlans]);\r\n    const uncheck = React.useCallback((id) => {\r\n        setUnlinkedLabPlans(unlinkedLabPlans.add(id));\r\n        setLinkedLabPlans(linkedLabPlans.remove(id));\r\n    }, [linkedLabPlans, unlinkedLabPlans]);\r\n    const allIds = getAllIds(labPlans);\r\n    const checkAll = React.useCallback(() => {\r\n        setLinkedLabPlans(allIds);\r\n        setUnlinkedLabPlans(Set());\r\n    }, [allIds]);\r\n    const uncheckAll = React.useCallback(() => {\r\n        setUnlinkedLabPlans(allIds);\r\n        setLinkedLabPlans(Set());\r\n    }, [allIds]);\r\n    const options = getOptions(labPlans, linkedLabPlans, isSubmitting, check, uncheck);\r\n    const isEmpty = labPlans.size === 0;\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(commonMessages.lmsLabPlanSettings)} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={{ content: { padding: 0 }, ...getCustomTheme().panelStyles }} onRenderFooterContent={() => (<>\r\n                    {!isLoading && !isEmpty && (<Stack horizontal tokens={{ childrenGap: '8px' }}>\r\n                            <Stack.Item>\r\n                                <SubmitButton default={true} buttonText={msg(commonMessages.save)} onClick={onClick} isSubmitting={isSubmitting} disabled={shouldDisable}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                                    {msg(commonMessages.cancel)}\r\n                                </DefaultButton>\r\n                            </Stack.Item>\r\n                        </Stack>)}\r\n                </>)}>\r\n            {isLoading && <LoadingContainer />}\r\n            {!isLoading && (<Stack>\r\n                    <Stack.Item>\r\n                        <FormattedMessage id=\"LmsLabPlanSettingsDescription\" defaultMessage=\"The lab plans linked to your LMS determine which virtual machine images, sizes, and other configurations are available when creating labs. <Link>Learn more</Link>\" description=\"Description about linking lab plan to LMS\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-linklms\" target=\"_blank\">\r\n                                        {chunks}\r\n                                    </Link>),\r\n    }}/>\r\n                    </Stack.Item>\r\n                    {isEmpty && (<Stack.Item styles={{ root: { paddingTop: '15px', color: SharedColors.red20 } }}>\r\n                            <FormattedMessage id=\"LmsConnectNoSeletableLabPlans\" defaultMessage=\"No lab plans can be linked to this LMS. Creation of new labs will not be available.\" description=\"Message shown whe we cannot find any lab plans that could be linked to this LMS instance.\"/>\r\n                        </Stack.Item>)}\r\n                    {!isEmpty && (<>\r\n                            <Stack.Item styles={{ root: { paddingTop: '15px' } }}>\r\n                                <FormattedMessage id=\"LmsLabPlanSettingsSelectedLabPlans\" defaultMessage=\"{numberOfSelectedLabPlans} plans selected.\" description=\"Description about number of selected lab plans to connect to LMS.\" values={{\r\n        numberOfSelectedLabPlans: linkedLabPlans.size,\r\n    }}/>\r\n                            </Stack.Item>\r\n\r\n                            <Stack.Item styles={{ root: { paddingTop: '10px' } }}>\r\n                                <Checkbox key=\"all\" label={msg(commonMessages.allFilter)} disabled={isSubmitting} checked={linkedLabPlans.size === labPlans.size} onChange={(_, checked) => {\r\n        checked ? checkAll() : uncheckAll();\r\n    }}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <Separator />\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <Stack className=\"vertical-scrollable-content\" tokens={{ childrenGap: '10px' }}>\r\n                                    {options}\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                        </>)}\r\n                </Stack>)}\r\n        </Panel>);\r\n};\r\nexport default LmsLabPlanSettingsFlyout;\r\n","import _ from 'lodash';\r\nimport { CommandBar, ContextualMenuItemType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl, useIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport FeatureMenu from './feature-menu';\r\nimport { HomeButton } from './home-button';\r\nimport { LabParentPicker } from './lab-parent-picker';\r\nimport { LabPicker } from './lab-picker';\r\nimport HelpFlyout from './help-flyout';\r\nimport { UserMenu } from './user-menu';\r\nimport VmListFlyout from './vm-list-flyout';\r\nimport { TenantPicker } from './tenant-picker';\r\nimport { getCustomTheme, getPageHeaderRootExpandedColor } from '../themes/selectors';\r\nimport LmsLabPlanSettingsFlyout from './lms-lab-plan-settings-flyout';\r\nimport './page-header.css';\r\nconst PageHeaderInjected = (props) => {\r\n    const { homeButtonProps, labParentPickerProps, labPickerProps, userMenuProps, featureMenuProps, tenantPickerProps, helpFlyoutPropsForSupportSection, isVmListEnabled, lmsLabPlanSettingsFlyoutProps, showFeedbackButton, feedbackSurvey, } = props;\r\n    const [showHelpFlyout, setShowHelpFlyout] = React.useState(false);\r\n    const [showVmListFlyout, setShowVmListFlyout] = React.useState(false);\r\n    const [showLmsLabPlanSettingsFlyout, setShowLmsLabPlanSettingsFlyout] = React.useState(false);\r\n    const { pageHeaderStyles, pageHeaderButtonStyles: styles } = getCustomTheme();\r\n    const rootExpandedStyle = getPageHeaderRootExpandedColor();\r\n    const { backgroundColor: rootExpandedBackgroundColor, color: rootExpandedColor } = rootExpandedStyle;\r\n    const msg = useIntl().formatMessage;\r\n    const homeStyles = _.merge({}, styles, { root: { minWidth: '230px' } });\r\n    const items = [\r\n        {\r\n            key: 'Home',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <HomeButton {...homeButtonProps} styles={homeStyles}/>\r\n                </div>),\r\n        },\r\n    ];\r\n    if (labParentPickerProps) {\r\n        const pickerStyles = _.merge({}, styles, {\r\n            root: { paddingLeft: 8, paddingRight: 8 },\r\n        });\r\n        items.push({\r\n            key: 'LabAccountPicker',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <LabParentPicker {...labParentPickerProps} styles={pickerStyles}/>\r\n                </div>),\r\n        });\r\n        if (labPickerProps) {\r\n            items.push({\r\n                key: 'LabAccountLabSeparator',\r\n                itemType: ContextualMenuItemType.Divider,\r\n                onRender: () => <span className=\"page-header__separator ms-fontSize-mPlus\">/</span>,\r\n            });\r\n            items.push({\r\n                key: 'LabPicker',\r\n                onRender: () => (<div role=\"menuitem\">\r\n                        <LabPicker {...labPickerProps} styles={pickerStyles}/>\r\n                    </div>),\r\n            });\r\n        }\r\n    }\r\n    const farItems = [];\r\n    if (lmsLabPlanSettingsFlyoutProps) {\r\n        const text = msg(commonMessages.lmsLabPlanSettings);\r\n        farItems.push({\r\n            key: 'LmsConnect',\r\n            text,\r\n            label: text,\r\n            iconProps: {\r\n                iconName: 'Settings',\r\n                style: { color: showLmsLabPlanSettingsFlyout ? rootExpandedColor : undefined },\r\n            },\r\n            iconOnly: true,\r\n            buttonStyles: _.merge({}, styles, {\r\n                root: {\r\n                    padding: 16,\r\n                    backgroundColor: showLmsLabPlanSettingsFlyout ? rootExpandedBackgroundColor : undefined,\r\n                },\r\n            }),\r\n            onClick: () => setShowLmsLabPlanSettingsFlyout(true),\r\n        });\r\n    }\r\n    if (isVmListEnabled) {\r\n        const text = msg(commonMessages.myVirtualMachines);\r\n        farItems.push({\r\n            key: 'VirtualMachines',\r\n            text,\r\n            ariaLabel: text,\r\n            iconProps: { iconName: 'TVMonitor', style: { color: showVmListFlyout ? rootExpandedColor : undefined } },\r\n            iconOnly: true,\r\n            buttonStyles: _.merge({}, styles, {\r\n                root: { padding: 16, backgroundColor: showVmListFlyout ? rootExpandedBackgroundColor : undefined },\r\n            }),\r\n            onClick: () => setShowVmListFlyout(true),\r\n        });\r\n    }\r\n    if (showFeedbackButton) {\r\n        const text = msg(commonMessages.feedback);\r\n        farItems.push({\r\n            key: 'Feedback',\r\n            iconOnly: true,\r\n            text,\r\n            ariaLabel: text,\r\n            iconProps: { iconName: 'Emoji2' },\r\n            buttonStyles: _.merge({}, styles, {\r\n                root: { padding: 16 },\r\n            }),\r\n            onClick: () => {\r\n                window.open(feedbackSurvey, '_blank');\r\n            },\r\n        });\r\n    }\r\n    const text = msg(commonMessages.help);\r\n    farItems.push({\r\n        key: 'StatusCircleQuestionMark',\r\n        text,\r\n        ariaLabel: text,\r\n        iconProps: { iconName: 'Help', style: { color: showHelpFlyout ? rootExpandedColor : undefined } },\r\n        iconOnly: true,\r\n        buttonStyles: _.merge({}, styles, {\r\n            root: { padding: 16, backgroundColor: showHelpFlyout ? rootExpandedBackgroundColor : undefined },\r\n        }),\r\n        onClick: () => setShowHelpFlyout(true),\r\n    });\r\n    if (featureMenuProps) {\r\n        farItems.push({\r\n            key: 'FeatureMenu',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <FeatureMenu {...featureMenuProps} styles={styles}/>\r\n                </div>),\r\n        });\r\n    }\r\n    if (tenantPickerProps) {\r\n        farItems.push({\r\n            key: 'TenantPicker',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <TenantPicker {...tenantPickerProps} styles={styles}/>\r\n                </div>),\r\n        });\r\n    }\r\n    if (userMenuProps) {\r\n        farItems.push({\r\n            key: 'UserMenu',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <UserMenu {...userMenuProps} styles={styles}/>\r\n                </div>),\r\n        });\r\n    }\r\n    return (<div id=\"page-header-container\" role=\"banner\">\r\n            <CommandBar items={items} farItems={farItems} overflowButtonProps={{\r\n        styles,\r\n    }} styles={pageHeaderStyles}/>\r\n            {showHelpFlyout && (<HelpFlyout {...helpFlyoutPropsForSupportSection} onDismiss={() => setShowHelpFlyout(false)}/>)}\r\n            {isVmListEnabled && showVmListFlyout && <VmListFlyout onDismiss={() => setShowVmListFlyout(false)}/>}\r\n            {!!lmsLabPlanSettingsFlyoutProps && showLmsLabPlanSettingsFlyout && (<LmsLabPlanSettingsFlyout {...lmsLabPlanSettingsFlyoutProps} onDismiss={() => setShowLmsLabPlanSettingsFlyout(false)}/>)}\r\n        </div>);\r\n};\r\nexport const PageHeader = injectIntl(PageHeaderInjected);\r\nexport default PageHeader;\r\n","import { CommandBar, ContextualMenuItemType, DefaultButton, } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport FeatureMenu from './feature-menu';\r\nimport HelpFlyout from './help-flyout';\r\nimport { LabPicker } from './lab-picker';\r\nimport VmListFlyout from './vm-list-flyout';\r\nimport { LoadingItem } from './dropdown/loading-item';\r\nimport { Selected } from './lab-parent-picker';\r\nimport './page-header.css';\r\nconst styles = {\r\n    root: {\r\n        height: '52px',\r\n        width: '100%',\r\n        backgroundColor: '#F3F2F1',\r\n        color: '#484644',\r\n        border: '0px',\r\n        borderRadius: '0px',\r\n    },\r\n    rootHovered: {\r\n        backgroundColor: '#EDEBE9',\r\n    },\r\n    rootPressed: {\r\n        backgroundColor: '#E1DFDD',\r\n    },\r\n    icon: {\r\n        color: '#252424',\r\n    },\r\n};\r\nconst TeamsPageHeader = (props) => {\r\n    const { isLoading, currentLabParentItem, onClick, labPickerProps, featureMenuProps, isVmListEnabled, helpFlyoutPropsForSupportSection, } = props;\r\n    const [showHelpFlyout, setShowHelpFlyout] = React.useState(false);\r\n    const [showVmListFlyout, setShowVmListFlyout] = React.useState(false);\r\n    const intl = useIntl();\r\n    const items = [];\r\n    const buttonStyles = _.merge({}, styles, {\r\n        root: { paddingLeft: 8, paddingRight: 8 },\r\n    });\r\n    if (!!currentLabParentItem) {\r\n        items.push({\r\n            key: 'CurrentLabAccount',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    {!!labPickerProps && (<DefaultButton onClick={() => onClick && onClick(currentLabParentItem)} role=\"menuitem\" styles={buttonStyles}>\r\n                            <Selected item={currentLabParentItem} isTeamsOrLmsIntegrationEnabled={true}/>\r\n                        </DefaultButton>)}\r\n                    {!labPickerProps && <Selected item={currentLabParentItem} isTeamsOrLmsIntegrationEnabled={true}/>}\r\n                </div>),\r\n        });\r\n    }\r\n    else if (!!isLoading) {\r\n        items.push({\r\n            key: 'Loading',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <LoadingItem styles={buttonStyles}/>\r\n                </div>),\r\n        });\r\n    }\r\n    if (labPickerProps) {\r\n        items.push({\r\n            key: 'LabAccountLabSeparator',\r\n            itemType: ContextualMenuItemType.Divider,\r\n            onRender: () => <span className=\"page-header__separator ms-fontSize-mPlus\">/</span>,\r\n        });\r\n        items.push({\r\n            key: 'LabPicker',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <LabPicker {...labPickerProps} styles={buttonStyles}/>\r\n                </div>),\r\n        });\r\n    }\r\n    const farItems = [];\r\n    if (isVmListEnabled) {\r\n        const text = intl.formatMessage(commonMessages.myVirtualMachines);\r\n        farItems.push({\r\n            key: 'VirtualMachines',\r\n            text,\r\n            ariaLabel: text,\r\n            iconProps: { iconName: 'TVMonitor' },\r\n            iconOnly: true,\r\n            buttonStyles: styles,\r\n            onClick: () => setShowVmListFlyout(true),\r\n        });\r\n    }\r\n    const text = intl.formatMessage(commonMessages.help);\r\n    farItems.push({\r\n        key: 'StatusCircleQuestionMark',\r\n        text,\r\n        ariaLabel: text,\r\n        iconProps: { iconName: 'Help' },\r\n        iconOnly: true,\r\n        buttonStyles: styles,\r\n        onClick: () => setShowHelpFlyout(true),\r\n    });\r\n    if (featureMenuProps) {\r\n        farItems.push({\r\n            key: 'FeatureMenu',\r\n            onRender: () => (<div role=\"menuitem\">\r\n                    <FeatureMenu {...featureMenuProps} styles={styles}/>\r\n                </div>),\r\n        });\r\n    }\r\n    return (<div id=\"teams-page-header-container\" role=\"banner\">\r\n            <CommandBar items={items} farItems={farItems} overflowButtonProps={{\r\n        styles,\r\n    }} styles={{\r\n        root: {\r\n            height: '100%',\r\n            width: '100%',\r\n            backgroundColor: '#F3F2F1',\r\n            color: '#484644',\r\n            margin: '0 0 0 0',\r\n            padding: '0 0 0 0',\r\n        },\r\n    }}/>\r\n            {showHelpFlyout && (<HelpFlyout {...helpFlyoutPropsForSupportSection} onDismiss={() => setShowHelpFlyout(false)}/>)}\r\n            {isVmListEnabled && showVmListFlyout && <VmListFlyout onDismiss={() => setShowVmListFlyout(false)}/>}\r\n        </div>);\r\n};\r\nexport default TeamsPageHeader;\r\n","import { LabParentResourceActionType, } from './lab-parent-resource-actions';\r\nexport const selectLabParentResource = (resourceId) => ({\r\n    type: LabParentResourceActionType.SELECT_LAB_PARENT_RESOURCE,\r\n    resourceId,\r\n});\r\nexport const clearSelectedLabParentResource = () => ({\r\n    type: LabParentResourceActionType.CLEAR_SELECTED_LAB_PARENT_RESOURCE,\r\n});\r\nexport const listLabParentResources = (selectFirst, selectFirstIfSelectedNotFound) => ({\r\n    type: LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES,\r\n    selectFirst,\r\n    selectFirstIfSelectedNotFound,\r\n});\r\nexport const listLabParentResourcesSuccess = () => ({\r\n    type: LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES_SUCCESS,\r\n});\r\nexport const listLabParentResourcesError = (error) => ({\r\n    type: LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES_ERROR,\r\n    error,\r\n});\r\nexport const refreshSubscriptionsAndLabParentResources = () => ({\r\n    type: LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES,\r\n});\r\nexport const refreshSubscriptionsAndLabParentResourcesSuccess = () => ({\r\n    type: LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_SUCCESS,\r\n});\r\nexport const refreshSubscriptionsAndLabParentResourcesError = (refreshError) => ({\r\n    type: LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_ERROR,\r\n    refreshError,\r\n});\r\nconst actions = {\r\n    selectLabParentResource,\r\n    listLabParentResources,\r\n    listLabParentResourcesError,\r\n    listLabParentResourcesSuccess,\r\n    refreshSubscriptionsAndLabParentResources,\r\n    refreshSubscriptionsAndLabParentResourcesSuccess,\r\n    refreshSubscriptionsAndLabParentResourcesError,\r\n    clearSelectedLabParentResource,\r\n};\r\nexport default actions;\r\n","import Routes from '../../utils/routes';\r\nimport { isLabParentLabAccount } from '../../redux/selectors/lab-parent-resource-selectors';\r\nexport function getLabListRoute(id) {\r\n    if (isLabParentLabAccount(id)) {\r\n        return Routes.LabList(id);\r\n    }\r\n    else {\r\n        return Routes.VNextLabList(id);\r\n    }\r\n}\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const CommonLabPlanActionType = {\r\n    SELECT_LAB_PLAN: 'SELECT_LAB_PLAN',\r\n};\r\nexport const LabPlanActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabPlanActionType,\r\n    LIST_LAB_PLANS: 'LIST_LAB_PLANS',\r\n    LIST_LAB_PLANS_SUCCESS: 'LIST_LAB_PLANS_SUCCESS',\r\n    LIST_LAB_PLANS_ERROR: 'LIST_LAB_PLANS_ERROR',\r\n    LOAD_SUBSCRIPTION_LAB_PLANS_ERROR: 'LOAD_SUBSCRIPTION_LAB_PLANS_ERROR',\r\n    GET_LAB_PLAN: 'GET_LAB_PLAN',\r\n    GET_LAB_PLAN_SUCCESS: 'GET_LAB_PLAN_SUCCESS',\r\n    GET_LAB_PLAN_ERROR: 'GET_LAB_PLAN_ERROR',\r\n    UPDATE_LAB_PLANS_LMS_SETTINGS: 'UPDATE_LAB_PLAN_LMS_SETTINGS',\r\n    UPDATE_LAB_PLANS_LMS_SETTINGS_SUCCESS: 'UPDATE_LAB_PLANS_LMS_SETTINGS_SUCCESS',\r\n    UPDATE_LAB_PLANS_LMS_SETTINGS_ERROR: 'UPDATE_LAB_PLANS_LMS_SETTINGS_ERROR',\r\n    CLEAR_UPDATE_LMS_ERROR: 'CLEAR_UPDATE_LMS_ERRORS',\r\n};\r\n","import { LabPlanActionType, } from './lab-plan-actions';\r\nexport const listLabPlans = (labParentId) => ({\r\n    type: LabPlanActionType.LIST_LAB_PLANS,\r\n    labParentId,\r\n});\r\nexport const listLabPlansSuccess = (labPlans) => ({\r\n    type: LabPlanActionType.LIST_LAB_PLANS_SUCCESS,\r\n    labPlans,\r\n});\r\nexport const loadSubscriptionLabPlansError = (subscription, error, resourceGroupName) => ({\r\n    type: LabPlanActionType.LOAD_SUBSCRIPTION_LAB_PLANS_ERROR,\r\n    subscription,\r\n    error,\r\n    resourceGroupName,\r\n});\r\nexport const selectLabPlan = (labPlanId) => ({\r\n    type: LabPlanActionType.SELECT_LAB_PLAN,\r\n    labPlanId,\r\n});\r\nexport const getLabPlan = (labPlanId) => ({\r\n    type: LabPlanActionType.GET_LAB_PLAN,\r\n    labPlanId,\r\n});\r\nexport const getLabPlanSuccess = (labPlan) => ({\r\n    type: LabPlanActionType.GET_LAB_PLAN_SUCCESS,\r\n    labPlan,\r\n});\r\nexport const getLabPlanError = (error) => ({\r\n    type: LabPlanActionType.GET_LAB_PLAN_ERROR,\r\n    error,\r\n});\r\nexport const updateLabPlansLmsSettings = (linkIds, unlinkIds, lmsInstance) => ({\r\n    type: LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS,\r\n    linkIds,\r\n    unlinkIds,\r\n    lmsInstance,\r\n});\r\nexport const updateLabPlansLmsSettingsSuccess = (labPlans) => ({\r\n    type: LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS_SUCCESS,\r\n    labPlans,\r\n});\r\nexport const updateLabPlansLmsSettingsError = (errors) => ({\r\n    type: LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS_ERROR,\r\n    errors,\r\n});\r\nexport const clearUpdateLinkedLmsError = (id) => ({\r\n    type: LabPlanActionType.CLEAR_UPDATE_LMS_ERROR,\r\n    id,\r\n});\r\nconst actions = {\r\n    listLabPlans,\r\n    listLabPlansSuccess,\r\n    loadSubscriptionLabPlansError,\r\n    selectLabPlan,\r\n    getLabPlan,\r\n    getLabPlanSuccess,\r\n    getLabPlanError,\r\n    updateLabPlansLmsSettings,\r\n    updateLabPlansLmsSettingsSuccess,\r\n    updateLabPlansLmsSettingsError,\r\n    clearUpdateLinkedLmsError,\r\n};\r\nexport default actions;\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport { Map } from 'immutable';\r\nimport * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearFatalError, disableFeature, enableFeature, initialize, } from '../../redux/actions/common/common-action-creators';\r\nimport { resetUserSettings, signIn, signOut } from '../../redux/actions/identity/identity-action-creators';\r\nimport { clearSelectedLab, selectLab } from '../../redux/actions/lab/lab-action-creators';\r\nimport { isValidSupportInfo } from '../../redux/selectors/lab-account-selectors';\r\nimport { Feature } from '../../utils/features';\r\nimport { Routes } from '../../utils/routes';\r\nimport ErrorCode from '../error-codes';\r\nimport { PageHeader } from './page-header';\r\nimport TeamsPageHeader from './teams-page-header';\r\nimport { selectTenant } from '../../redux/actions/common/common-action-creators';\r\nimport { getPageHeaderContainerModel } from './page-header-selectors';\r\nimport { selectLabParentResource } from '../../redux/actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nimport { getLabListRoute } from '../../data/helpers/route-helpers';\r\nimport { updateLabPlansLmsSettings } from '../../redux/actions/lab-plan/lab-plan-action-creators';\r\nimport { Constants } from '../../utils/constants';\r\nconst PageHeaderContainerInjected = (props) => {\r\n    const { isAuthenticated, isAuthenticating, isDevModeEnabled, hasFatalError, fatalErrorCode, imageUrl, name, initials, displayId, hideLabParentPicker, hideLabPicker, hideUserMenu, hideVmListButton, hideTenantPicker, hideFeedback, isLoadingLabParents, isLoadingLabs, labs, labPath, currentLab, isLoadingTenants, tenants, selectedTenantId, isNewLabCreationDisabled, push, pathname, search, clearFatalError, signIn, signOut, selectLab, useCurrentPathForHome: useCurrentPath, enableFeature, disableFeature, enabledFeatures, resetUserSettings, selectTenant, supportSections, defaultSupportSection, isTeamsIntegrationEnabled, labParentItems, currentLabParentItem, currentSupportInfo, selectLabParentResource, isCurrentLabParentLabAccount, isStudentVmList, clearSelectedLab, isLmsIntegrationEnabled, initialize, shouldLoginWithPopupWindow, isLtiStartOidcRoute, locale, labPlans, lmsInstance, updateLabPlansLmsSettings, isLoadingLabPlans, isUpdatingLms, isLmsAdmin, } = props;\r\n    let labParentPickerProps = undefined;\r\n    let labPickerProps = undefined;\r\n    let tenantPickerProps = undefined;\r\n    let onLabParentItemChange = undefined;\r\n    if (!hideLabParentPicker) {\r\n        onLabParentItemChange = (labParentItem) => {\r\n            const { id } = labParentItem;\r\n            const switchingLabParent = !currentLabParentItem || currentLabParentItem.id !== id;\r\n            if (switchingLabParent) {\r\n                selectLabParentResource(id);\r\n            }\r\n            push({ pathname: getLabListRoute(id), search });\r\n            if (hasFatalError) {\r\n                switch (fatalErrorCode) {\r\n                    case ErrorCode.LabAccountAuthorizationFailed:\r\n                        if (switchingLabParent) {\r\n                            clearFatalError();\r\n                        }\r\n                        break;\r\n                    case ErrorCode.AuthenticationFailed:\r\n                    case ErrorCode.SessionExpired:\r\n                        break;\r\n                    default:\r\n                        clearFatalError();\r\n                        break;\r\n                }\r\n            }\r\n        };\r\n        labParentPickerProps = {\r\n            isLoading: isLoadingLabParents,\r\n            isTeamsOrLmsIntegrationEnabled: isTeamsIntegrationEnabled || isLmsIntegrationEnabled,\r\n            selectedItem: currentLabParentItem,\r\n            labParentItems,\r\n            onChange: onLabParentItemChange,\r\n        };\r\n        if (!hideLabPicker && !!currentLabParentItem) {\r\n            const onLabChange = (lab) => {\r\n                const { id } = lab;\r\n                const switchingLab = !currentLab || currentLab.id !== id;\r\n                if (switchingLab) {\r\n                    selectLab(id);\r\n                    if (labPath) {\r\n                        push({ pathname: `${id}${labPath}`, search });\r\n                    }\r\n                    else {\r\n                        push({ pathname: Routes.Template(id), search });\r\n                    }\r\n                }\r\n                if (hasFatalError) {\r\n                    switch (fatalErrorCode) {\r\n                        case ErrorCode.LabAuthorizationFailed:\r\n                            if (switchingLab) {\r\n                                clearFatalError();\r\n                            }\r\n                            break;\r\n                        case ErrorCode.AuthenticationFailed:\r\n                        case ErrorCode.SessionExpired:\r\n                            break;\r\n                        default:\r\n                            clearFatalError();\r\n                            break;\r\n                    }\r\n                }\r\n            };\r\n            labPickerProps = {\r\n                isVNextLabs: !isCurrentLabParentLabAccount,\r\n                isLoading: isLoadingLabs,\r\n                isTeamsOrLmsIntegrationEnabled: isTeamsIntegrationEnabled || isLmsIntegrationEnabled,\r\n                labs,\r\n                selected: currentLab,\r\n                onChange: onLabChange,\r\n                isNewLabCreationDisabled,\r\n                newLab: isCurrentLabParentLabAccount\r\n                    ? () => push({ pathname: Routes.NewLab(currentLabParentItem.id), search })\r\n                    : () => {\r\n                        clearSelectedLab();\r\n                        push({ pathname: Routes.NewVNextLab(currentLabParentItem.id), search });\r\n                    },\r\n            };\r\n        }\r\n    }\r\n    if (!hideTenantPicker && tenants.size > 1) {\r\n        const onTenantChange = (tenant) => {\r\n            const { tenantId } = tenant;\r\n            const switchingTenant = selectedTenantId !== tenantId;\r\n            if (switchingTenant) {\r\n                selectTenant(tenantId, !isLmsIntegrationEnabled);\r\n                if (hasFatalError) {\r\n                    switch (fatalErrorCode) {\r\n                        case ErrorCode.AuthenticationFailed:\r\n                        case ErrorCode.SessionExpired:\r\n                            break;\r\n                        default:\r\n                            clearFatalError();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        tenantPickerProps = {\r\n            isLoading: isLoadingTenants,\r\n            tenants,\r\n            selected: tenants.find((a) => a.tenantId === selectedTenantId),\r\n            onChange: onTenantChange,\r\n        };\r\n    }\r\n    let userMenuProps = undefined;\r\n    if (!hideUserMenu) {\r\n        userMenuProps = {\r\n            isAuthenticated,\r\n            isAuthenticating,\r\n            imageUrl,\r\n            name,\r\n            initials,\r\n            displayId,\r\n            isLmsIntegrationEnabled,\r\n            signIn: shouldLoginWithPopupWindow ? () => initialize(true) : () => signIn(true),\r\n            signOut,\r\n        };\r\n    }\r\n    const homeButtonProps = {\r\n        isLmsIntegrationEnabled,\r\n        navigateHome: () => {\r\n            const path = useCurrentPath || isLtiStartOidcRoute ? pathname : Routes.Home;\r\n            if (!isLtiStartOidcRoute) {\r\n                clearSelectedLab();\r\n            }\r\n            push({ pathname: path, search });\r\n            if (hasFatalError && !isLtiStartOidcRoute) {\r\n                switch (fatalErrorCode) {\r\n                    case ErrorCode.LabAccountAuthorizationFailed:\r\n                        if (labParentItems.size > 0) {\r\n                            const firstItem = labParentItems.get(0);\r\n                            selectLabParentResource(firstItem.id);\r\n                            clearFatalError();\r\n                        }\r\n                        break;\r\n                    case ErrorCode.LabAuthorizationFailed:\r\n                        selectLab('');\r\n                        clearFatalError();\r\n                        break;\r\n                    case ErrorCode.AuthenticationFailed:\r\n                    case ErrorCode.SessionExpired:\r\n                        break;\r\n                    default:\r\n                        clearFatalError();\r\n                        break;\r\n                }\r\n            }\r\n        },\r\n    };\r\n    let featureMenuProps;\r\n    if (isDevModeEnabled) {\r\n        const allFeatures = Object.getOwnPropertyNames(Feature)\r\n            .sort()\r\n            .map((o) => o);\r\n        featureMenuProps = {\r\n            allFeatures,\r\n            enabledFeatures,\r\n            enableFeature,\r\n            disableFeature,\r\n            resetUserSettings,\r\n        };\r\n    }\r\n    let helpFlyoutPropsForSupportSection = { isStudentVmList, locale };\r\n    if (supportSections && supportSections.count() > 0) {\r\n        helpFlyoutPropsForSupportSection = {\r\n            sections: supportSections,\r\n            defaultSection: defaultSupportSection,\r\n            isLabAccount: isCurrentLabParentLabAccount,\r\n            isStudentVmList,\r\n            locale,\r\n        };\r\n    }\r\n    else if (isValidSupportInfo(currentSupportInfo)) {\r\n        helpFlyoutPropsForSupportSection = {\r\n            sections: Map([['', currentSupportInfo]]),\r\n            isLabAccount: isCurrentLabParentLabAccount,\r\n            isStudentVmList,\r\n            locale,\r\n        };\r\n    }\r\n    let lmsLabPlanSettingsFlyoutProps = undefined;\r\n    if (isLmsAdmin && isAuthenticated) {\r\n        lmsLabPlanSettingsFlyoutProps = {\r\n            labPlans,\r\n            lmsInstance,\r\n            isSubmitting: isUpdatingLms,\r\n            currentLabParentId: currentLabParentItem?.id,\r\n            onSubmit: updateLabPlansLmsSettings,\r\n            isLoading: isLoadingLabPlans,\r\n            selectLabParentItem: onLabParentItemChange,\r\n        };\r\n    }\r\n    if (isTeamsIntegrationEnabled) {\r\n        return (<TeamsPageHeader isLoading={!!hideLabParentPicker ? undefined : isLoadingLabParents} currentLabParentItem={currentLabParentItem} onClick={onLabParentItemChange} labPickerProps={!!hideLabPicker ? undefined : labPickerProps} featureMenuProps={featureMenuProps} helpFlyoutPropsForSupportSection={helpFlyoutPropsForSupportSection} isVmListEnabled={!hideVmListButton && isAuthenticated}/>);\r\n    }\r\n    else {\r\n        return (<PageHeader homeButtonProps={homeButtonProps} labParentPickerProps={labParentPickerProps} labPickerProps={labPickerProps} tenantPickerProps={tenantPickerProps} featureMenuProps={featureMenuProps} userMenuProps={userMenuProps} helpFlyoutPropsForSupportSection={helpFlyoutPropsForSupportSection} isVmListEnabled={!hideVmListButton && isAuthenticated} lmsLabPlanSettingsFlyoutProps={lmsLabPlanSettingsFlyoutProps} showFeedbackButton={isAuthenticated && !isLmsIntegrationEnabled && !hideFeedback} feedbackSurvey={isStudentVmList ? Constants.Urls.StudentFeedback : Constants.Urls.ProfessorFeedback}/>);\r\n    }\r\n};\r\nconst mapStateToProps = (state) => {\r\n    return getPageHeaderContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    clearFatalError,\r\n    signIn,\r\n    signOut,\r\n    selectLab,\r\n    enableFeature,\r\n    disableFeature,\r\n    resetUserSettings,\r\n    selectTenant,\r\n    selectLabParentResource,\r\n    clearSelectedLab,\r\n    push: routerActions.push,\r\n    initialize,\r\n    updateLabPlansLmsSettings,\r\n};\r\nexport const PageHeaderContainer = connect(mapStateToProps, mapDispatchToProps)(PageHeaderContainerInjected);\r\nexport default PageHeaderContainer;\r\n","import { Stack, Link } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport './page-footer.css';\r\nexport const PageFooter = () => {\r\n    const intl = useIntl();\r\n    const year = new Date().getFullYear();\r\n    return (<Stack id=\"page-footer-container\" horizontalAlign=\"end\" horizontal={true} role=\"contentinfo\">\r\n            <Stack.Item>\r\n                <div className=\"page-footer__items\">© {year} Microsoft</div>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <div className=\"page-footer__items\">\r\n                    <Link className=\"page-footer__links\" href=\"https://www.microsoft.com/servicesagreement\" target=\"_blank\" styles={{\r\n        root: {\r\n            color: 'inherit',\r\n            textDecoration: 'none',\r\n        },\r\n    }}>\r\n                        {intl.formatMessage(commonMessages.termsOfUseLink)}\r\n                    </Link>\r\n                </div>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <div className=\"page-footer__items\">\r\n                    <Link className=\"page-footer__links\" href=\"https://go.microsoft.com/fwlink/?LinkId=521839\" target=\"_blank\" rel=\"noopener noreferrer\" styles={{\r\n        root: {\r\n            color: 'inherit',\r\n            textDecoration: 'none',\r\n        },\r\n    }}>\r\n                        <FormattedMessage id=\"PrivacyAndCookiePolicyLink\" defaultMessage=\"Privacy & cookies\" description=\"Link to our privacy and cookie policies\"/>\r\n                    </Link>\r\n                </div>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default PageFooter;\r\n","import * as React from 'react';\r\nimport { FocusZone } from '@fluentui/react';\r\nimport { PageTitle } from './page-title';\r\nimport { PageHeaderContainer } from '../page-header/page-header-container';\r\nimport { PageFooter } from './page-footer';\r\nimport './page.css';\r\nexport class Page extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        const { headerProps, showFooter, isScrollable, title, hideHeader } = this.props;\r\n        return (<>\r\n                <PageTitle subtitle={title}/>\r\n                <div id=\"page-container\" className={isScrollable ? 'page-container-scrollable' : 'page-container-fixed'}>\r\n                    {!hideHeader && (<FocusZone>\r\n                            <PageHeaderContainer {...(headerProps || {})}/>\r\n                        </FocusZone>)}\r\n                    <div role=\"main\" id=\"page-content\" className={isScrollable ? 'page-content-scrollable' : 'page-content-fixed'}>\r\n                        \r\n                        {this.props.children}\r\n                    </div>\r\n                    {showFooter && (<div id=\"page-footer\">\r\n                            <FocusZone>\r\n                                <PageFooter />\r\n                            </FocusZone>\r\n                        </div>)}\r\n                </div>\r\n            </>);\r\n    }\r\n}\r\nexport default Page;\r\n","export const LtiActionType = {\r\n    LTI_START_OIDC: 'LTI_START_OIDC',\r\n    LTI_START_OIDC_ERROR: 'LTI_START_OIDC_ERROR',\r\n    LTI_START_OIDC_REDIRECTING: 'LTI_START_OIDC_REDIRECTING',\r\n    LTI_SIGN_IN: 'LTI_SIGN_IN',\r\n    LTI_SIGN_IN_SUCCESS: 'LTI_SIGN_IN_SUCCESS',\r\n    LTI_SIGN_IN_ERROR: 'LTI_SIGN_IN_ERROR',\r\n    SET_LTI_CONTEXT: 'SET_LTI_CONTEXT',\r\n    SET_MEMBERSHIP_URL: 'SET_MEMBERSHIP_URL',\r\n    SET_LTI_ROLES: 'SET_LTI_ROLES',\r\n    GET_LTI_TOKEN: 'GET_LTI_TOKEN',\r\n    GET_LTI_TOKEN_ERROR: 'GET_LTI_TOKEN_ERROR',\r\n    GET_LTI_TOKEN_SUCCESS: 'GET_LTI_TOKEN_SUCCESS',\r\n    LTI_REQUEST_WEB_STORAGE_ACCESS: 'LTI_REQUEST_WEB_STORAGE_ACCESS',\r\n    LTI_REQUEST_WEB_STORAGE_ACCESS_SUCCESS: 'LTI_REQUEST_WEB_STORAGE_ACCESS_SUCCESS',\r\n    LTI_REQUEST_WEB_STORAGE_ACCESS_ERROR: 'LTI_REQUEST_WEB_STORAGE_ACCESS_ERROR',\r\n    SET_LMS_INSTANCE: 'SET_LMS_INSTANCE',\r\n};\r\n","import { LtiActionType, } from './lti-actions';\r\nexport const ltiStartOidc = () => ({\r\n    type: LtiActionType.LTI_START_OIDC,\r\n});\r\nexport const ltiStartOidcError = (error) => ({\r\n    type: LtiActionType.LTI_START_OIDC_ERROR,\r\n    error,\r\n});\r\nexport const ltiStartOidcRedirecting = () => ({\r\n    type: LtiActionType.LTI_START_OIDC_REDIRECTING,\r\n});\r\nexport const ltiSignIn = () => ({\r\n    type: LtiActionType.LTI_SIGN_IN,\r\n});\r\nexport const ltiSignInSuccess = () => ({\r\n    type: LtiActionType.LTI_SIGN_IN_SUCCESS,\r\n});\r\nexport const ltiSignInError = (error) => ({\r\n    type: LtiActionType.LTI_SIGN_IN_ERROR,\r\n    error,\r\n});\r\nexport const setLtiContext = (ltiContext) => ({\r\n    type: LtiActionType.SET_LTI_CONTEXT,\r\n    ltiContext,\r\n});\r\nexport const setMembershipUrl = (membershipUrl) => ({\r\n    type: LtiActionType.SET_MEMBERSHIP_URL,\r\n    membershipUrl,\r\n});\r\nexport const setLtiRoles = (roles) => ({\r\n    type: LtiActionType.SET_LTI_ROLES,\r\n    roles,\r\n});\r\nexport const getLtiToken = (resolve, reject) => ({\r\n    type: LtiActionType.GET_LTI_TOKEN,\r\n    resolve,\r\n    reject,\r\n});\r\nexport const getLtiTokenError = (error) => ({\r\n    type: LtiActionType.GET_LTI_TOKEN_ERROR,\r\n    error,\r\n});\r\nexport const getLtiTokenSuccess = () => ({\r\n    type: LtiActionType.GET_LTI_TOKEN_SUCCESS,\r\n});\r\nexport const ltiRequestWebStorageAccess = () => ({\r\n    type: LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS,\r\n});\r\nexport const ltiRequestWebStorageAccessSuccess = () => ({\r\n    type: LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS_SUCCESS,\r\n});\r\nexport const ltiRequestWebStorageAccessError = (error) => ({\r\n    type: LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS_ERROR,\r\n    error,\r\n});\r\nexport const setLmsInstance = (lmsInstance) => ({\r\n    type: LtiActionType.SET_LMS_INSTANCE,\r\n    lmsInstance,\r\n});\r\nconst actions = {\r\n    ltiStartOidc,\r\n    ltiStartOidcError,\r\n    ltiStartOidcRedirecting,\r\n    ltiSignIn,\r\n    ltiSignInSuccess,\r\n    ltiSignInError,\r\n    setLtiContext,\r\n    setMembershipUrl,\r\n    setLtiRoles,\r\n    getLtiToken,\r\n    getLtiTokenError,\r\n    ltiRequestWebStorageAccess,\r\n    ltiRequestWebStorageAccessSuccess,\r\n    ltiRequestWebStorageAccessError,\r\n    setLmsInstance,\r\n};\r\nexport default actions;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport ErrorView from './error-view';\r\nimport { clearFatalError, initialize } from '../redux/actions/common/common-action-creators';\r\nimport { signIn, requestUserConsent } from '../redux/actions/identity/identity-action-creators';\r\nimport { getSearch, isLtiOidcRoute, isRouteTeamsConfig } from '../redux/selectors/route-selector';\r\nimport { Page } from '../common/page/page';\r\nimport { getTenants } from '../redux/selectors/tenant-selectors';\r\nimport { isLmsHost } from '../redux/selectors/common-selectors';\r\nimport { hasGrantedWebStorageAccess, isLmsStudent } from '../redux/selectors/lti-selectors';\r\nimport { ltiRequestWebStorageAccess } from '../redux/actions/lti/lti-action-creators';\r\nconst ErrorViewContainerInjected = (props) => {\r\n    const { hasError, search, fatalErrorCode: errorCode, clearFatalError: clearError, signIn, requestUserConsent, hideHeader, hasMultipleTenants, initialize, isLmsHosted, isRouteLtiOidc, isLmsStudent, ltiRequestWebStorageAccess, hasWebStorageAccessGranted, } = props;\r\n    if (!hasError) {\r\n        return null;\r\n    }\r\n    return (<Page hideHeader={hideHeader} headerProps={isRouteLtiOidc || isLmsStudent\r\n        ? {\r\n            hideLabParentPicker: true,\r\n            hideLabPicker: true,\r\n            hideVmListButton: true,\r\n            hideUserMenu: true,\r\n            hideFeedback: true,\r\n        }\r\n        : { hideFeedback: true }}>\r\n            <ErrorView search={search} errorCode={errorCode} clearError={clearError} signIn={isLmsHosted ? () => initialize(true) : () => signIn} requestUserConsent={requestUserConsent} hasMultipleTenants={hasMultipleTenants} isLmsHosted={isLmsHosted} ltiRequestWebStorageAccess={ltiRequestWebStorageAccess} hasWebStorageAccessGranted={hasWebStorageAccessGranted}/>\r\n        </Page>);\r\n};\r\nconst mapStateToProps = (state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const fatalErrorCode = commonStore.get('fatalErrorCode');\r\n    const hasError = fatalErrorCode !== undefined;\r\n    const search = getSearch(state);\r\n    const hideHeader = isRouteTeamsConfig(state);\r\n    const tenants = getTenants(state);\r\n    const hasMultipleTenants = tenants.size > 1;\r\n    const isRouteLtiOidc = isLtiOidcRoute(state);\r\n    const isLmsHosted = isLmsHost(state) || isRouteLtiOidc;\r\n    const isCourseStudent = isLmsStudent(state);\r\n    const hasWebStorageAccessGranted = hasGrantedWebStorageAccess(state);\r\n    return {\r\n        hasError,\r\n        search,\r\n        fatalErrorCode,\r\n        hideHeader,\r\n        hasMultipleTenants,\r\n        isLmsHosted,\r\n        isRouteLtiOidc,\r\n        isLmsStudent: isCourseStudent,\r\n        hasWebStorageAccessGranted,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    clearFatalError,\r\n    signIn,\r\n    requestUserConsent,\r\n    initialize,\r\n    ltiRequestWebStorageAccess,\r\n};\r\nexport const ErrorViewContainer = connect(mapStateToProps, mapDispatchToProps)(ErrorViewContainerInjected);\r\nexport default ErrorViewContainer;\r\n","import * as React from 'react';\r\nimport { FormattedMessage, injectIntl, defineMessages } from 'react-intl';\r\nimport { Icon, PrimaryButton, Link, Stack } from '@fluentui/react';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport './landing-page.css';\r\nconst messages = defineMessages({\r\n    createFreeAccountButtonText: {\r\n        id: 'LandingPageCreateFreeAccountButtonText',\r\n        defaultMessage: 'Create a free Azure account',\r\n        description: 'Text for a button to create a free azure account',\r\n    },\r\n    setupLabPlanButtonText: {\r\n        id: 'LandingPageSetupLabPlanButtonText',\r\n        defaultMessage: 'Set up a lab plan',\r\n        description: 'Text for a button to setup a lab plan',\r\n    },\r\n    goToMyLabsButtonText: {\r\n        id: 'LandingPageGoToMyLabsButtonText',\r\n        defaultMessage: 'Sign in to create a lab',\r\n        description: 'Text for a button to sign in to create a lab',\r\n    },\r\n});\r\nconst SectionNumber = (numberMessage) => {\r\n    return (<span className=\"ms-fontSize-xxl ms-fontWeight-bold landing-page__getting-started-section-number\">\r\n            {numberMessage}\r\n        </span>);\r\n};\r\nclass LandingPageInjected extends React.Component {\r\n    render() {\r\n        const { intl } = this.props;\r\n        const numberOne = SectionNumber(<FormattedMessage {...commonMessages.numberOne}/>);\r\n        const numberTwo = SectionNumber(<FormattedMessage {...commonMessages.numberTwo}/>);\r\n        const numberThree = SectionNumber(<FormattedMessage {...commonMessages.numberThree}/>);\r\n        const createFreeAccountButtonText = intl.formatMessage(messages.createFreeAccountButtonText);\r\n        const setupLabPlanButtonText = intl.formatMessage(messages.setupLabPlanButtonText);\r\n        const goToMyLabsButtonText = intl.formatMessage(messages.goToMyLabsButtonText);\r\n        return (<div id=\"landing-page-container\">\r\n                <Stack id=\"landing-page-header-section\" horizontalAlign=\"center\">\r\n                    <Stack.Item>\r\n                        <h1 id=\"landing-page-header-title\" className=\"ms-fontSize-su ms-fontWeight-bold\">\r\n                            <FormattedMessage id=\"LandingPageTitle\" defaultMessage=\"Welcome to Azure Lab Services\" description=\"Title displayed on the landing page\"/>\r\n                        </h1>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <div id=\"landing-page-header-text\">\r\n                            <FormattedMessage id=\"LandingPageMessage\" defaultMessage=\"Azure Lab Services enable you to easily set up a class, run a training lab, host a hackathon, experiment, and test your proof-of-concept ideas in the cloud.\" description=\"The message displayed below the landing page title\"/>\r\n                        </div>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <div id=\"landing-page-header-existing-user\">\r\n                            <FormattedMessage id=\"LandingPageExistingUserMessage\" defaultMessage=\"Already a user?\" description=\"Messaging asking if the user is an existing user of the product\"/>\r\n                            <Link onClick={this.props.signIn} styles={{\r\n            root: {\r\n                paddingLeft: '5px',\r\n            },\r\n        }}>\r\n                                <FormattedMessage {...commonMessages.signInButtonText}/>\r\n                            </Link>\r\n                        </div>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <Icon id=\"landing-page-header-icon\" iconName=\"hero-illustration\"/>\r\n                    </Stack.Item>\r\n                </Stack>\r\n                <Stack id=\"landing-page-instructions-container\" grow>\r\n                    <Stack.Item>\r\n                        <Stack id=\"landing-page-instructions-section\" horizontalAlign=\"center\">\r\n                            <Stack.Item>\r\n                                <Stack id=\"landing-page-instructions-heading-section\" horizontalAlign=\"center\" tokens={{ childrenGap: '3px' }}>\r\n                                    <Stack.Item>\r\n                                        <div className=\"ms-fontSize-xl ms-fontWeight-semibold\">\r\n                                            <FormattedMessage id=\"LandingPageNewToLabServicesMessage\" defaultMessage=\"Are you new to Azure Lab Services?\" description=\"Message asking users if they are new to lab services\"/>\r\n                                        </div>\r\n                                    </Stack.Item>\r\n                                    <Stack.Item>\r\n                                        <div className=\"ms-fontWeight-semilight ms-fontSize-l\">\r\n                                            <FormattedMessage id=\"LandingPageFollowTheseSteps\" defaultMessage=\"Follow the steps below to get started.\" description=\"Text on the landing page telling users to follow steps to create a lab account\"/>\r\n                                        </div>\r\n                                    </Stack.Item>\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                            <Stack.Item grow>\r\n                                <Stack id=\"landing-page-instructions-content-section\" horizontal={true} horizontalAlign=\"center\" wrap={true}>\r\n                                    <Stack id=\"landing-page-instructions-get-subscription-section\" className=\"landing-page__instructions-item\" horizontalAlign=\"center\">\r\n                                        <Stack.Item>\r\n                                            <div className=\"ms-fontSize-l ms-fontWeight-bold landing-page__getting-started-heading-format\">\r\n                                                <FormattedMessage {...commonMessages.stepGetAnAzureSubscription} values={{ numberSpan: numberOne }}/>\r\n                                            </div>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__instructions-icon-container\">\r\n                                            <Icon iconName=\"illustration-1\"/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__getting-started-summary-format\" grow>\r\n                                            <FormattedMessage id=\"LandingPageGetAzureSubscriptionSummary\" defaultMessage=\"Use your personal Microsoft account (MSA) or a Work or school account to create an Azure subscription.\" description=\"Summary for the get azure subscription step\"/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item>\r\n                                            <PrimaryButton text={createFreeAccountButtonText} onClick={() => {\r\n            window.open('https://aka.ms/azlabs-getazure', '_blank');\r\n        }}/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                    <Stack id=\"landing-page-instructions-add-lab-plan-section\" className=\"landing-page__instructions-item\" horizontalAlign=\"center\">\r\n                                        <Stack.Item>\r\n                                            <div className=\"ms-fontSize-l ms-fontWeight-bold landing-page__getting-started-heading-format\">\r\n                                                <FormattedMessage {...commonMessages.stepAddLabPlan} values={{ numberSpan: numberTwo }}/>\r\n                                            </div>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__instructions-icon-container\">\r\n                                            <Icon iconName=\"illustration-2\"/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__getting-started-summary-format\" grow>\r\n                                            <FormattedMessage id=\"LandingPageAddALabPlanSummary\" defaultMessage=\"In the Azure portal, use your Azure subscription to create a lab plan for configuring and managing your labs.\" description=\"Summary for the add lab plan step\"/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__getting-started-action-statement\">\r\n                                            <Link href=\"https://docs.microsoft.com/azure/lab-services/tutorial-setup-lab-plan\" target=\"_blank\">\r\n                                                <FormattedMessage id=\"LandingPageAddLabPlanTutorialLinkText\" defaultMessage=\"See a detailed tutorial here.\" description=\"A link to see a detailed tutorial for creating a lab plan.\"/>\r\n                                            </Link>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item>\r\n                                            <PrimaryButton text={setupLabPlanButtonText} onClick={() => {\r\n            window.open('https://aka.ms/azlabs/new-labplan', '_blank');\r\n        }}/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                    <Stack id=\"landing-page-instructions-create-lab-section\" className=\"landing-page__instructions-item\" horizontalAlign=\"center\">\r\n                                        <Stack.Item>\r\n                                            <div className=\"ms-fontSize-l ms-fontWeight-bold landing-page__getting-started-heading-format\">\r\n                                                <FormattedMessage id=\"LandingPageCreateYourFirstLabStepHeader\" defaultMessage=\"{numberSpan} Create your first lab\" description=\"Instructions for setting up a lab account where numberSpan contains the step number with markup.\" values={{ numberSpan: numberThree }}/>\r\n                                            </div>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__instructions-icon-container\">\r\n                                            <Icon iconName=\"illustration-3\"/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item className=\"landing-page__getting-started-summary-format\" grow>\r\n                                            <FormattedMessage id=\"LandingPageCreateYourFirstLabSummary\" defaultMessage=\"Create a lab for your class, training, hackathon, and more!\" description=\"Summary for the create your first lab step\"/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item>\r\n                                            <PrimaryButton text={goToMyLabsButtonText} onClick={this.props.signIn}/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                        </Stack>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </div>);\r\n    }\r\n}\r\nexport const LandingPage = injectIntl(LandingPageInjected);\r\nexport default LandingPage;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { signIn } from '../redux/actions/identity/identity-action-creators';\r\nimport { LandingPage } from './landing-page';\r\nimport { Page } from '../common/page/page';\r\nimport { isLmsHost } from '../redux/selectors/common-selectors';\r\nimport { initialize } from '../redux/actions/common/common-action-creators';\r\nclass LandingPageContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        const { signIn, initialize, shouldLoginWithPopupWindow } = this.props;\r\n        return (<Page headerProps={{ hideLabParentPicker: true, hideLabPicker: true }} isScrollable={true} showFooter={true}>\r\n                \r\n                <LandingPage signIn={shouldLoginWithPopupWindow ? () => initialize(true) : () => signIn(true)}/>\r\n            </Page>);\r\n    }\r\n}\r\nconst mapDispatchToProps = {\r\n    signIn,\r\n    initialize,\r\n};\r\nconst mapStateToProps = (state) => {\r\n    const shouldLoginWithPopupWindow = isLmsHost(state);\r\n    return {\r\n        shouldLoginWithPopupWindow,\r\n    };\r\n};\r\nexport const LandingPageContainer = connect(mapStateToProps, mapDispatchToProps)(LandingPageContainerInjected);\r\nexport default LandingPageContainer;\r\n","import { Spinner, SpinnerSize, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Page } from '../common/page/page';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport { commonMessages } from '../language/common-messages';\r\nexport const Loading = (props) => {\r\n    const { hideHeader } = props;\r\n    const loadingMessage = useIntl().formatMessage(commonMessages.loadingText);\r\n    const { transitionBackgroundColor } = getCustomTheme();\r\n    return (<Page hideHeader={hideHeader} headerProps={{ hideLabParentPicker: true, hideUserMenu: true, hideTenantPicker: true, hideFeedback: true }}>\r\n            <Stack horizontalAlign=\"center\" verticalAlign=\"center\" grow verticalFill styles={{ root: { backgroundColor: transitionBackgroundColor } }}>\r\n                <Stack.Item>\r\n                    <h2 className=\"ms-fontSize-xxl ms-fontWeight-semibold\">\r\n                        <FormattedMessage id=\"InitialLoadingSpinnerHeader\" defaultMessage=\"Welcome to Azure Lab Services\" description=\"Heading displayed above a loading spinner on the initial page load while we are initializing / loading.\"/>\r\n                    </h2>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <Spinner size={SpinnerSize.large} label={loadingMessage} ariaLive=\"assertive\"/>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Page>);\r\n};\r\nexport default Loading;\r\n","import * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { ResourceId } from '../utils/resource-id';\r\nimport { Constants } from '../utils/constants';\r\nimport { Link } from '@fluentui/react';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nexport const RequestLimitIncreaseInSentenceLink = (props) => {\r\n    let { tenantId, labParentId, labId } = props; // eslint-disable-line prefer-const\r\n    if (!labParentId && !labId) {\r\n        return <></>;\r\n    }\r\n    if (!labParentId && labId) {\r\n        const isVNext = isVNextLab(labId);\r\n        const labResourceId = new ResourceId(labId, isVNext);\r\n        labParentId = labResourceId.parent.id;\r\n    }\r\n    const id = new ResourceId(labParentId);\r\n    return (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={Constants.Urls.SupportRequest(tenantId, id.subscriptionId)}>\r\n            <FormattedMessage id=\"SupportRequestLink\" defaultMessage=\"request a limit increase\" description=\"Link to submit a support request to increase core quota limits for the subscription.\"/>\r\n        </Link>);\r\n};\r\nexport const RequestLimitIncreaseLink = (props) => {\r\n    let { tenantId, labParentId, labId } = props; // eslint-disable-line prefer-const\r\n    if (!labParentId && !labId) {\r\n        return <></>;\r\n    }\r\n    if (!labParentId && labId) {\r\n        const isVNext = isVNextLab(labId);\r\n        const labResourceId = new ResourceId(labId, isVNext);\r\n        labParentId = labResourceId.parent.id;\r\n    }\r\n    const id = new ResourceId(labParentId);\r\n    return (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={Constants.Urls.SupportRequest(tenantId, id.subscriptionId)}>\r\n            <FormattedMessage id=\"RequestLimitIncreaseLink\" defaultMessage=\"Request a limit increase\" description=\"Link to submit a support request to increase core quota limits for the subscription.\"/>\r\n        </Link>);\r\n};\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { LabServicesModels } from 'lab-services';\r\n/**\r\n * For now, we are going to set 'Public' as the connection state if the state is true, else \"None\"\r\n * @param value\r\n * @returns\r\n */\r\nexport function toConnectionType(value) {\r\n    return value ? LabServicesModels.ConnectionType.Public : LabServicesModels.ConnectionType.None;\r\n}\r\nexport function toEnableState(value) {\r\n    return value ? Ml.EnableState.Enabled : Ml.EnableState.Disabled;\r\n}\r\nexport function isEnabled(value) {\r\n    return value === Ml.EnableState.Enabled;\r\n}\r\nexport function isGeneralized(value) {\r\n    return value === Ml.ImageType.Generalized;\r\n}\r\n","export const DefaultGracePeriod = 15;\r\nexport const MaxGracePeriod = 59;\r\nexport const MinIdleGracePeriod = 15;\r\nexport const MinNoConnectGracePeriod = 15;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport _ from 'lodash';\r\nimport memoize from 'memoize-one';\r\nimport { duration } from 'moment';\r\nimport { isCurrentLabParentLabAccount } from '../../redux/selectors/lab-parent-resource-selectors';\r\nimport { getCurrentLabPlan } from '../../redux/selectors/vnext/lab-plan-selectors';\r\nimport { isEnabled, toEnableState } from '../../data/helpers/enum-helpers';\r\nimport { getCurrentLabAccount } from '../../redux/selectors/lab-account-selectors';\r\nimport { DefaultGracePeriod } from './idle-config';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport moment from 'moment';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nconst supportedLinuxImages = [\r\n    { offer: 'centos', publisher: 'openlogic', sku: '6.10' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '6.5' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '6.8' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '7.1' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '7.3' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '7.4' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '7.6' },\r\n    { offer: 'centos-hpc', publisher: 'openlogic', sku: '7.7' },\r\n    { offer: 'centos-lvm', publisher: 'openlogic', sku: '7-lvm' },\r\n    { offer: 'centos', publisher: 'openlogic', sku: '7.5' },\r\n    { offer: 'centos', publisher: 'openlogic', sku: '7.6' },\r\n    { offer: 'centos', publisher: 'openlogic', sku: '7.7' },\r\n    { offer: 'centos', publisher: 'openlogic', sku: '7_4' },\r\n    { offer: 'centos', publisher: 'openlogic', sku: '7_8' },\r\n    { offer: 'centos', publisher: 'openlogic', sku: '7.5' },\r\n    { offer: 'debian', publisher: 'credativ', sku: '9' },\r\n    { offer: 'debian', publisher: 'credativ', sku: '9-backports' },\r\n    { offer: 'sql2019-rhel7', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2019-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2019-rhel7', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2019-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2017-rhel7', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2017-sles12sp2', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2017-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2017-rhel7', publisher: 'microsoftsqlserver', sku: 'express' },\r\n    { offer: 'sql2017-sles12sp2', publisher: 'microsoftsqlserver', sku: 'express' },\r\n    { offer: 'sql2017-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'express' },\r\n    { offer: 'iot_edge_vm_ubuntu', publisher: 'microsoft_iot_edge', sku: 'ubuntu_1604_edgeruntimeonly' },\r\n    { offer: 'linux-data-science-vm', publisher: 'microsoft-ads', sku: 'linuxdsvm' },\r\n    { offer: 'opensuse-leap', publisher: 'suse', sku: '15-1' },\r\n    { offer: 'opensuse-leap', publisher: 'suse', sku: '15-2' },\r\n    { offer: 'oracle-database-19-3', publisher: 'oracle', sku: 'oracle-db-19300' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '77' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '77-ci' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '78' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '6.10' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '6.8' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '6.9' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '7.3' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '7.4' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '7.5' },\r\n    { offer: 'oracle-linux', publisher: 'oracle', sku: '7.6' },\r\n    { offer: 'rhel-sap', publisher: 'redhat', sku: '76-ci' },\r\n    { offer: 'sles-12-sp5-basic', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sles-12-sp5-byos', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sles-12-sp5-hpc-byos', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sles-12-sp5-hpc', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sles-12-sp5', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sles-byos', publisher: 'suse', sku: '12-sp2' },\r\n    { offer: 'sles-byos', publisher: 'suse', sku: '12-sp4' },\r\n    { offer: 'sles-sap-12-sp5-byos', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sles-sap-12-sp5', publisher: 'suse', sku: 'gen1' },\r\n    { offer: 'sql2019-rhel7', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2019-rhel7', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2019-sles12sp5', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2019-sles12sp5', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2019-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2019-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2019-ubuntu1804', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2019-ubuntu1804', publisher: 'microsoftsqlserver', sku: 'sqldev' },\r\n    { offer: 'sql2019-ubuntu1804', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2019-ubuntu1804', publisher: 'microsoftsqlserver', sku: 'web' },\r\n    { offer: 'sql2017-rhel7', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2017-sles12sp2', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2017-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'enterprise' },\r\n    { offer: 'sql2017-rhel7', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2017-sles12sp2', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2017-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'standard' },\r\n    { offer: 'sql2017-rhel7', publisher: 'microsoftsqlserver', sku: 'web' },\r\n    { offer: 'sql2017-sles12sp2', publisher: 'microsoftsqlserver', sku: 'web' },\r\n    { offer: 'sql2017-ubuntu1604', publisher: 'microsoftsqlserver', sku: 'web' },\r\n    { offer: 'sles-byos', publisher: 'suse', sku: '12-sp3' },\r\n    { offer: 'sles-hpc-priority', publisher: 'suse', sku: '12-sp3' },\r\n    { offer: 'sles-sap-byos', publisher: 'suse', sku: '12-sp2' },\r\n    { offer: 'sles-sap', publisher: 'suse', sku: '12-sp2' },\r\n    { offer: 'sles-sap-byos', publisher: 'suse', sku: '12-sp3' },\r\n    { offer: 'sles-sap', publisher: 'suse', sku: '12-sp3' },\r\n    { offer: 'sles-byos', publisher: 'suse', sku: '12-sp4' },\r\n    { offer: 'sles-sap', publisher: 'suse', sku: '12-sp4' },\r\n    { offer: 'sles-sap-byos', publisher: 'suse', sku: '12-sp4' },\r\n    { offer: 'ubuntuserver', publisher: 'canonical', sku: '16.04-lts' },\r\n    { offer: 'ubuntuserver', publisher: 'canonical', sku: '14.04.5-lts' },\r\n    { offer: 'ubuntuserver', publisher: 'canonical', sku: '16.04-lts' },\r\n    { offer: 'ubuntuserver', publisher: 'canonical', sku: '18.04-lts' },\r\n];\r\nconst unsupportedWindowsImages = [\r\n    { offer: 'windows-7', publisher: 'microsoftwindowsdesktop', sku: 'win7-enterprise' },\r\n    { offer: 'windowsserver', publisher: 'microsoftwindowsserver', sku: '2008-r2-sp1-smalldisk' },\r\n];\r\nconst isSameImage = (left, right) => {\r\n    return (!!left.offer &&\r\n        !!right.offer &&\r\n        caseInsensitiveCultureInvariantCompare(left.offer, right.offer) === 0 &&\r\n        !!left.publisher &&\r\n        !!right.publisher &&\r\n        caseInsensitiveCultureInvariantCompare(left.publisher, right.publisher) === 0 &&\r\n        !!left.sku &&\r\n        !!right.sku &&\r\n        caseInsensitiveCultureInvariantCompare(left.sku, right.sku) === 0);\r\n};\r\n// Returns whether idle is supported for a given image.\r\nexport const isIdleExtensionSupported = memoize((image) => {\r\n    const { isWindows, isCustomImage, imageReference: imageRef } = image;\r\n    if (isWindows) {\r\n        if (imageRef) {\r\n            return !unsupportedWindowsImages.some((o) => isSameImage(o, imageRef));\r\n        }\r\n        return true;\r\n    }\r\n    else if (imageRef) {\r\n        // When image reference is provided check against list of supported images.\r\n        return supportedLinuxImages.some((o) => isSameImage(o, imageRef));\r\n    }\r\n    else {\r\n        // Otherwise return false except for custom images (which we can't inspect).\r\n        return isCustomImage;\r\n    }\r\n});\r\n// Returns IdleConfig based on current lab account settings.\r\nexport const getDefaultIdleConfig = memoize((state) => {\r\n    const isLabAccount = isCurrentLabParentLabAccount(state);\r\n    if (isLabAccount) {\r\n        const labAccount = getCurrentLabAccount(state);\r\n        return {\r\n            shutdownOnDisconnectSupported: true,\r\n            shutdownOnDisconnect: labAccount?.idleShutdownMode === Ml.IdleShutdownMode.OnDisconnect,\r\n            shutdownOnDisconnectGracePeriod: labAccount?.idleGracePeriod?.asMinutes() ?? DefaultGracePeriod,\r\n            shutdownOnNoConnectSupported: true,\r\n            shutdownWhenNotConnected: isEnabled(labAccount?.enableNoConnectShutdown),\r\n            shutdownOnNoConnectGracePeriod: labAccount?.idleNoConnectGracePeriod?.asMinutes() ?? DefaultGracePeriod,\r\n            disconnectOnIdleSupported: true,\r\n            disconnectOnIdleEnabled: isEnabled(labAccount?.enableDisconnectOnIdle),\r\n            disconnectOnIdleGracePeriod: labAccount?.idleOsGracePeriod?.asMinutes() ?? DefaultGracePeriod,\r\n        };\r\n    }\r\n    else {\r\n        const labPlan = getCurrentLabPlan(state);\r\n        return {\r\n            shutdownOnDisconnectSupported: true,\r\n            shutdownOnDisconnect: labPlan?.defaultAutoShutdownProfile?.shutdownOnDisconnect === LabServicesModels.EnableState.Enabled,\r\n            shutdownOnDisconnectGracePeriod: !!labPlan?.defaultAutoShutdownProfile?.disconnectDelay\r\n                ? moment.duration(labPlan.defaultAutoShutdownProfile.disconnectDelay).asMinutes()\r\n                : DefaultGracePeriod,\r\n            shutdownOnNoConnectSupported: true,\r\n            shutdownWhenNotConnected: labPlan?.defaultAutoShutdownProfile?.shutdownWhenNotConnected ===\r\n                LabServicesModels.EnableState.Enabled,\r\n            shutdownOnNoConnectGracePeriod: !!labPlan?.defaultAutoShutdownProfile?.noConnectDelay\r\n                ? moment.duration(labPlan.defaultAutoShutdownProfile.noConnectDelay).asMinutes()\r\n                : DefaultGracePeriod,\r\n            shutdownOnIdle: labPlan?.defaultAutoShutdownProfile?.shutdownOnIdle ?? LabServicesModels.ShutdownOnIdleMode.None,\r\n            shutdownOnIdleGracePeriod: !!labPlan?.defaultAutoShutdownProfile?.idleDelay\r\n                ? moment.duration(labPlan.defaultAutoShutdownProfile.idleDelay).asMinutes()\r\n                : DefaultGracePeriod,\r\n        };\r\n    }\r\n});\r\n// Creates IdleConfig for a given VM image.\r\nexport function getImageIdleConfig(defaultConfig, image) {\r\n    const isIdleSupported = isIdleExtensionSupported(image);\r\n    const isWindows = image.isWindows;\r\n    const isLinuxSIG = image.isCustomImage && !image.isWindows;\r\n    return _.merge({}, defaultConfig, {\r\n        shutdownOnDisconnectSupported: defaultConfig.shutdownOnDisconnectSupported && isIdleSupported,\r\n        shutdownOnDisconnect: isLinuxSIG ? false : defaultConfig.shutdownOnDisconnect && isIdleSupported,\r\n        shutdownOnNoConnectSupported: defaultConfig.shutdownOnNoConnectSupported && isIdleSupported,\r\n        shutdownWhenNotConnected: isLinuxSIG ? false : defaultConfig.shutdownWhenNotConnected && isIdleSupported,\r\n        disconnectOnIdleSupported: defaultConfig.disconnectOnIdleSupported && isWindows && isIdleSupported,\r\n        disconnectOnIdleEnabled: isLinuxSIG\r\n            ? false\r\n            : defaultConfig.disconnectOnIdleEnabled && isWindows && isIdleSupported,\r\n    });\r\n}\r\n// Creates partial LabParameters from IdleConfig.\r\nexport function idleConfigToLabParameters(config) {\r\n    return {\r\n        idleShutdownMode: config.shutdownOnDisconnectSupported\r\n            ? config.shutdownOnDisconnect\r\n                ? Ml.IdleShutdownMode.OnDisconnect\r\n                : Ml.IdleShutdownMode.None\r\n            : Ml.IdleShutdownMode.NotSupported,\r\n        idleGracePeriod: duration(config.shutdownOnDisconnectGracePeriod, 'm'),\r\n        enableNoConnectShutdown: toEnableState(config.shutdownOnNoConnectSupported && config.shutdownWhenNotConnected),\r\n        idleNoConnectGracePeriod: duration(config.shutdownOnNoConnectGracePeriod, 'm'),\r\n        enableDisconnectOnIdle: toEnableState(!!config.disconnectOnIdleSupported && !!config.disconnectOnIdleEnabled),\r\n        idleOsGracePeriod: duration(config.disconnectOnIdleGracePeriod, 'm'),\r\n    };\r\n}\r\nexport function idleConfigToAutoShutdownProfile(config) {\r\n    return {\r\n        shutdownOnDisconnect: toEnableState(config.shutdownOnDisconnectSupported && config.shutdownOnDisconnect),\r\n        shutdownWhenNotConnected: toEnableState(config.shutdownOnNoConnectSupported && config.shutdownWhenNotConnected),\r\n        shutdownOnIdle: config.shutdownOnIdle,\r\n        disconnectDelay: duration(config.shutdownOnDisconnectGracePeriod, 'm').toISOString(),\r\n        noConnectDelay: duration(config.shutdownOnNoConnectGracePeriod, 'm').toISOString(),\r\n        idleDelay: duration(config.shutdownOnIdleGracePeriod, 'm').toISOString(),\r\n    };\r\n}\r\n// Creates IdleConfig for a given Lab.\r\nexport function getLabIdleConfig(defaultConfig, lab, isWindows) {\r\n    const isIdleSupported = lab.idleShutdownMode !== Ml.IdleShutdownMode.NotSupported;\r\n    return {\r\n        shutdownOnDisconnectSupported: isIdleSupported && defaultConfig.shutdownOnDisconnectSupported,\r\n        shutdownOnDisconnect: lab.idleShutdownMode === Ml.IdleShutdownMode.OnDisconnect,\r\n        shutdownOnDisconnectGracePeriod: lab.idleGracePeriod?.asMinutes() ?? defaultConfig.shutdownOnDisconnectGracePeriod,\r\n        shutdownOnNoConnectSupported: isIdleSupported && defaultConfig.shutdownOnNoConnectSupported,\r\n        shutdownWhenNotConnected: isEnabled(lab.enableNoConnectShutdown),\r\n        shutdownOnNoConnectGracePeriod: lab.idleNoConnectGracePeriod?.asMinutes() ?? defaultConfig.shutdownOnNoConnectGracePeriod,\r\n        disconnectOnIdleSupported: isWindows && isIdleSupported && defaultConfig.disconnectOnIdleSupported,\r\n        disconnectOnIdleEnabled: isEnabled(lab.enableDisconnectOnIdle),\r\n        disconnectOnIdleGracePeriod: lab.idleOsGracePeriod?.asMinutes() ?? defaultConfig.disconnectOnIdleGracePeriod,\r\n    };\r\n}\r\nexport function getVNextLabIdleConfig(lab) {\r\n    const isIdleSupported = true;\r\n    return {\r\n        shutdownOnDisconnectSupported: isIdleSupported,\r\n        shutdownOnDisconnect: lab?.autoShutdownProfile?.shutdownOnDisconnect === LabServicesModels.EnableState.Enabled,\r\n        shutdownOnDisconnectGracePeriod: moment.duration(lab?.autoShutdownProfile?.disconnectDelay).asMinutes(),\r\n        shutdownOnNoConnectSupported: isIdleSupported,\r\n        shutdownWhenNotConnected: lab?.autoShutdownProfile?.shutdownWhenNotConnected === LabServicesModels.EnableState.Enabled,\r\n        shutdownOnNoConnectGracePeriod: moment.duration(lab?.autoShutdownProfile?.noConnectDelay).asMinutes(),\r\n        shutdownOnIdle: lab?.autoShutdownProfile?.shutdownOnIdle ?? LabServicesModels.ShutdownOnIdleMode.None,\r\n        shutdownOnIdleGracePeriod: moment.duration(lab?.autoShutdownProfile?.idleDelay).asMinutes(),\r\n    };\r\n}\r\n// Creates partial Lab from IdleConfig.\r\nexport function idleConfigToLab(config) {\r\n    return {\r\n        idleShutdownMode: config.shutdownOnDisconnectSupported\r\n            ? config.shutdownOnDisconnect\r\n                ? Ml.IdleShutdownMode.OnDisconnect\r\n                : Ml.IdleShutdownMode.None\r\n            : Ml.IdleShutdownMode.NotSupported,\r\n        idleGracePeriod: duration(config.shutdownOnDisconnectGracePeriod, 'm'),\r\n        enableNoConnectShutdown: toEnableState(config.shutdownOnNoConnectSupported && config.shutdownWhenNotConnected),\r\n        idleNoConnectGracePeriod: duration(config.shutdownOnNoConnectGracePeriod, 'm'),\r\n        enableDisconnectOnIdle: toEnableState(!!config.disconnectOnIdleSupported && !!config.disconnectOnIdleEnabled),\r\n        idleOsGracePeriod: duration(config.disconnectOnIdleGracePeriod, 'm'),\r\n    };\r\n}\r\n// Returns whether at least one idle option is supported.\r\nexport function isIdleSupported(config) {\r\n    return (config.disconnectOnIdleSupported || config.shutdownOnNoConnectSupported || config.shutdownOnDisconnectSupported);\r\n}\r\nexport function isShutdownOnIdleEnabled(config) {\r\n    return !!config.shutdownOnIdle && config.shutdownOnIdle !== LabServicesModels.ShutdownOnIdleMode.None;\r\n}\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const GalleryImageActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_GALLERY_IMAGES: 'LIST_GALLERY_IMAGES',\r\n    LIST_GALLERY_IMAGES_SUCCESS: 'LIST_GALLERY_IMAGES_SUCCESS',\r\n    LIST_GALLERY_IMAGES_ERROR: 'LIST_GALLERY_IMAGES_ERROR',\r\n};\r\n","import { GalleryImageActionType, } from './gallery-image-actions';\r\nexport const listGalleryImages = (labAccountId) => ({\r\n    type: GalleryImageActionType.LIST_GALLERY_IMAGES,\r\n    labAccountId,\r\n});\r\nexport const listGalleryImagesSuccess = (images) => ({\r\n    type: GalleryImageActionType.LIST_GALLERY_IMAGES_SUCCESS,\r\n    images,\r\n});\r\nexport const listGalleryImagesError = (error) => ({\r\n    type: GalleryImageActionType.LIST_GALLERY_IMAGES_ERROR,\r\n    error,\r\n});\r\nconst actions = {\r\n    listGalleryImages,\r\n    listGalleryImagesSuccess,\r\n    listGalleryImagesError,\r\n};\r\nexport default actions;\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const CommonSharedImageActionType = {\r\n    CREATE_SHARED_IMAGE: 'CREATE_SHARED_IMAGE',\r\n    CREATE_SHARED_IMAGE_ERROR: 'CREATE_SHARED_IMAGE_ERROR',\r\n    UPDATE_SHARED_IMAGE: 'UPDATE_SHARED_IMAGE',\r\n    UPDATE_SHARED_IMAGE_ERROR: 'UPDATE_SHARED_IMAGE_ERROR',\r\n};\r\nexport const SharedImageActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonSharedImageActionType,\r\n    LIST_SHARED_IMAGES: 'LIST_SHARED_IMAGES',\r\n    LIST_SHARED_IMAGES_SUCCESS: 'LIST_SHARED_IMAGES_SUCCESS',\r\n    LIST_SHARED_IMAGES_ERROR: 'LIST_SHARED_IMAGES_ERROR',\r\n    GET_SHARED_GALLERY: 'GET_SHARED_GALLERY',\r\n    GET_SHARED_GALLERY_SUCCESS: 'GET_SHARED_GALLERY_SUCCESS',\r\n    GET_SHARED_GALLERY_ERROR: 'GET_SHARED_GALLERY_ERROR',\r\n    UPDATE_SHARED_IMAGE_SUCCESS: 'UPDATE_SHARED_IMAGE_SUCCESS',\r\n};\r\n","import { SharedImageActionType, } from './shared-image-actions';\r\nexport const listSharedImages = (labAccountId) => ({\r\n    type: SharedImageActionType.LIST_SHARED_IMAGES,\r\n    labAccountId,\r\n});\r\nexport const listSharedImagesSuccess = (images) => ({\r\n    type: SharedImageActionType.LIST_SHARED_IMAGES_SUCCESS,\r\n    images,\r\n});\r\nexport const listSharedImagesError = (error) => ({\r\n    type: SharedImageActionType.LIST_SHARED_IMAGES_ERROR,\r\n    error,\r\n});\r\nexport const getSharedGallery = (labAccountId) => ({\r\n    type: SharedImageActionType.GET_SHARED_GALLERY,\r\n    labAccountId,\r\n});\r\nexport const getSharedGallerySuccess = (sharedGalleries) => ({\r\n    type: SharedImageActionType.GET_SHARED_GALLERY_SUCCESS,\r\n    sharedGalleries,\r\n});\r\nexport const getSharedGalleryError = (error) => ({\r\n    type: SharedImageActionType.GET_SHARED_GALLERY_ERROR,\r\n    error,\r\n});\r\nexport const createSharedImage = (templateId, displayName) => ({\r\n    type: SharedImageActionType.CREATE_SHARED_IMAGE,\r\n    templateId,\r\n    displayName,\r\n});\r\nexport const createSharedImageError = (templateId, error) => ({\r\n    type: SharedImageActionType.CREATE_SHARED_IMAGE_ERROR,\r\n    templateId,\r\n    error,\r\n});\r\nexport const updateSharedImage = (sharedImageId, templateId) => ({\r\n    type: SharedImageActionType.UPDATE_SHARED_IMAGE,\r\n    sharedImageId,\r\n    templateId,\r\n});\r\nexport const updateSharedImageSuccess = () => ({\r\n    type: SharedImageActionType.UPDATE_SHARED_IMAGE_SUCCESS,\r\n});\r\nexport const updateSharedImageError = (templateId, error) => ({\r\n    type: SharedImageActionType.UPDATE_SHARED_IMAGE_ERROR,\r\n    templateId,\r\n    error,\r\n});\r\nconst actions = {\r\n    getSharedGallery,\r\n    getSharedGallerySuccess,\r\n    getSharedGalleryError,\r\n    listSharedImages,\r\n    listSharedImagesSuccess,\r\n    listSharedImagesError,\r\n    createSharedImage,\r\n    createSharedImageError,\r\n    updateSharedImageError,\r\n};\r\nexport default actions;\r\n","import { DefaultButton, Dialog, DialogFooter, PrimaryButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nconst UnsavedChangesDialogInjected = (props) => {\r\n    const { title, message, onOk, onCancel, intl } = props;\r\n    const msg = intl.formatMessage;\r\n    return (<Dialog hidden={false} dialogContentProps={{ title }} maxWidth={Constants.DefaultDialogSmallWidth} onDismiss={onCancel} closeButtonAriaLabel={msg(commonMessages.cancel)}>\r\n            {message}\r\n            <DialogFooter styles={{ actions: { marginTop: 30 } }}>\r\n                <PrimaryButton text={msg(commonMessages.ok)} onClick={onOk}/>\r\n                <DefaultButton autoFocus text={msg(commonMessages.cancel)} onClick={onCancel}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const UnsavedChangesDialog = injectIntl(UnsavedChangesDialogInjected);\r\nexport default UnsavedChangesDialog;\r\n","import * as React from 'react';\r\nimport { injectIntl, FormattedMessage } from 'react-intl';\r\nimport { PrimaryButton, DialogFooter, Dialog, DefaultButton, Link } from '@fluentui/react';\r\nconst LinuxRdpDialogInjected = (props) => {\r\n    const doesNotInstallSpan = (<b>\r\n            <FormattedMessage id=\"LinuxRdpDialogDoesNotInstallSpan\" defaultMessage=\"does not install RDP or GUI packages\" description=\"Bolded text that will be composed into LinuxRdpDialogText\"/>\r\n        </b>);\r\n    return (<Dialog hidden={false} onDismiss={props.onDismiss} dialogContentProps={{\r\n        title: (<FormattedMessage id=\"LinuxRdpDialogTitle\" defaultMessage=\"Enable Remote Desktop Connection\" description=\"Title of the dialog which pops up when user enables RDP connection for a new linux lab.\"/>),\r\n    }} minWidth={510}>\r\n            <FormattedMessage id=\"LinuxRdpDialogText\" defaultMessage=\"This only opens the Remote Desktop port. It {doesNotInstallSpan} on lab virtual machines. You must install these packages on the virtual machines to use a Remote Desktop Connection.\" description=\"Text on the dialog which pops up when user enables RDP connection for a new Linux lab.\" values={{ doesNotInstallSpan }}/>\r\n            <div style={{ marginTop: 10 }}>\r\n                <Link href=\"https://aka.ms/azlabs-linuxrdp\" target=\"_blank\">\r\n                    <FormattedMessage id=\"LinuxRdpDialogLearnMore\" defaultMessage=\"Learn more\" description=\"Text of a link navigating to a page with more information.\"/>\r\n                </Link>\r\n            </div>\r\n            <DialogFooter>\r\n                <PrimaryButton onClick={props.onSubmit}>\r\n                    <FormattedMessage id=\"LinuxRdpContinueButtonText\" defaultMessage=\"Continue with Remote Desktop\" description=\"Text of a button a user clicks to continue with enabling RDP on a new Linux lab.\"/>\r\n                </PrimaryButton>\r\n                <DefaultButton autoFocus onClick={props.onDismiss}>\r\n                    <FormattedMessage id=\"LinuxRdpBackButtonText\" defaultMessage=\"Back\" description=\"Text of a button a user clicks to cancel enabling RDP on a new Linux lab.\"/>\r\n                </DefaultButton>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const LinuxRdpDialog = injectIntl(LinuxRdpDialogInjected);\r\nexport default LinuxRdpDialog;\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    nameLabel: {\r\n        id: 'NewLabConfigPageNameLabel',\r\n        defaultMessage: 'Name your lab',\r\n        description: 'Label for lab name text box on new lab flyout dialog.',\r\n    },\r\n    simplifiedNameLabel: {\r\n        id: 'NewLabConfigPageSimplifiedNameLabel',\r\n        defaultMessage: 'Name',\r\n        description: 'Label for lab name text box on new lab flyout dialog based on simplified designs.',\r\n    },\r\n    namePlaceholder: {\r\n        id: 'NewLabConfigPageNamePlaceholder',\r\n        defaultMessage: 'Lab name (visible to students)',\r\n        description: 'Placeholder text for lab name text box on new lab flyout dialog.',\r\n    },\r\n    sizeLabel: {\r\n        id: 'NewLabConfigPageSizeLabel',\r\n        defaultMessage: 'Which virtual machine size do you need?',\r\n        description: 'Label for size drop-down on new lab flyout dialog.',\r\n    },\r\n    imageLabel: {\r\n        id: 'NewLabConfigPageImageLabel',\r\n        defaultMessage: 'Which virtual machine image do you want to use?',\r\n        description: 'Label for VM image drop-down  on new lab flyout dialog.',\r\n    },\r\n    simplifiedImageLabel: {\r\n        id: 'NewLabConfigPageSimplifiedImageLabel',\r\n        defaultMessage: 'Virtual machine image',\r\n        description: 'Label for VM image drop-down  on new lab flyout dialog based on simplified designs.',\r\n    },\r\n    searchImages: {\r\n        id: 'NewLabConfigPagePickerSearchImages',\r\n        defaultMessage: 'Search images',\r\n        description: 'Placeholder for search text box inside VM image drop-down.',\r\n    },\r\n    searchImagesResult: {\r\n        id: 'NewLabConfigPagePickerSearchImagesResult',\r\n        defaultMessage: 'Filtered to show {numResults} images',\r\n        description: 'Text for screen reader to announce number of search results in VM image picker.',\r\n    },\r\n    locationLabel: {\r\n        id: 'NewLabConfigPageLocationLabel',\r\n        defaultMessage: 'Which location will host your lab?',\r\n        description: 'Label for the location dropdown on the new lab flyout dialog.',\r\n    },\r\n    rdpLabel: {\r\n        id: 'NewLabConfigPageRdpLabel',\r\n        defaultMessage: 'Enable Remote Desktop Connection',\r\n        description: 'Label for RDP toggle on new lab flyout dialog.',\r\n    },\r\n    gpuLabel: {\r\n        id: 'NewLabConfigPageGpuLabel',\r\n        defaultMessage: 'Install GPU drivers',\r\n        description: 'Label for GPU driver toggle on new lab flyout dialog.',\r\n    },\r\n    gpuDriverTooltipText: {\r\n        id: 'GpuDriverTooltipText',\r\n        defaultMessage: 'You have selected a GPU machine size, which requires GPU driver installation. We can automatically install drivers for the selected virtual machine image.',\r\n        description: 'Text on tooltip for info icon next to GPU driver toggle',\r\n    },\r\n    customizeImageLabel: {\r\n        id: 'NewLabConfigPageCustomizeImageLabel',\r\n        defaultMessage: 'Customize the virtual machine image',\r\n        description: 'Label for Customize the image toggle on new lab flyout dialog.',\r\n    },\r\n    customizeImageDescription: {\r\n        id: 'NewLabConfigPageCustomizeImageDescription',\r\n        defaultMessage: 'Enabling this setting will create a template virtual machine from your chosen image. You can use it to install additional software and tools. It will add up to 20 minutes to the lab creation process. If the image you chose already includes everything you need, disable this setting to speed up the lab creation process.',\r\n        description: 'Text on tooltip for info icon next to Customize the image toggle.',\r\n    },\r\n    customizeImageNoSharedPasswordDescription: {\r\n        id: 'NewLabCredentialsPageCustomizeImageDescription',\r\n        defaultMessage: 'This option is not available when you choose not to customize the virtual machine image.',\r\n        description: 'Text on tooltip for info icon next to Use shared password toggle.',\r\n    },\r\n    usernameLabel: {\r\n        id: 'NewLabCredentialsPageUsernamelabel',\r\n        defaultMessage: 'Username',\r\n        description: 'Label for username text box on new lab flyout dialog.',\r\n    },\r\n    usernameAdminLabel: {\r\n        id: 'NewLabCredentialsPageUsernameAdminlabel',\r\n        defaultMessage: 'Admin username',\r\n        description: 'Label for username text box on new lab flyout dialog if non-admin is enabled.',\r\n    },\r\n    usernameNonAdminLabel: {\r\n        id: 'NewLabCredentialsPageUsernameNonAdminlabel',\r\n        defaultMessage: 'Username (non-admin)',\r\n        description: 'Label for non-admin username text box on new lab flyout dialog.',\r\n    },\r\n    usernamePlaceholder: {\r\n        id: 'NewLabCredentialsPageUsernamePlaceholder',\r\n        defaultMessage: 'Default username',\r\n        description: 'Placeholder for username text box on new lab flyout dialog.',\r\n    },\r\n    usernameSpecializedPlaceholder: {\r\n        id: 'NewLabCredentialsPageUsernameSpecializedPlaceholder',\r\n        defaultMessage: 'Username ',\r\n        description: 'Placeholder for username text box on new lab flyout dialog when using a specialized image.',\r\n    },\r\n    usernameSpecializedAdminPlaceholder: {\r\n        id: 'UsernameSpecializedAdminPlaceholder',\r\n        defaultMessage: 'Admin username ',\r\n        description: 'Placeholder for username text box on new lab flyout dialog when using a specialized image and non-admin is enabled.',\r\n    },\r\n    passwordLabel: {\r\n        id: 'NewLabCredentialsPagePasswordLabel',\r\n        defaultMessage: 'Password',\r\n        description: 'Label for password text box on new lab flyout dialog.',\r\n    },\r\n    passwordAdminLabel: {\r\n        id: 'NewLabCredentialsPagePasswordAdminLabel',\r\n        defaultMessage: 'Admin password',\r\n        description: 'Label for password text box on new lab flyout dialog, if non-admin is enabled.',\r\n    },\r\n    passwordNonAdminLabel: {\r\n        id: 'NewLabCredentialsPagePasswordNonAdminLabel',\r\n        defaultMessage: 'Password (non-admin)',\r\n        description: 'Label for non-admin password text box on new lab flyout dialog.',\r\n    },\r\n    passwordPlaceholder: {\r\n        id: 'NewLabCredentialsPagePasswordPlaceholder',\r\n        defaultMessage: 'Default password',\r\n        description: 'Placeholder for password text box on new lab flyout dialog.',\r\n    },\r\n    passwordSpecializedPlaceholder: {\r\n        id: 'NewLabCredentialsPagePasswordSpecializedPlaceholder',\r\n        defaultMessage: 'New password',\r\n        description: 'Placeholder for password text box on new lab flyout dialog when using a specialized image.',\r\n    },\r\n    passwordSpecializedAdminPlaceholder: {\r\n        id: 'NewLabCredentialsPagePasswordSpecializedAdminPlaceholder',\r\n        defaultMessage: 'New admin password',\r\n        description: 'Placeholder for password text box on new lab flyout dialog for a specialized image when a non-admin is enabled.',\r\n    },\r\n    useSharedPasswordEnabledMessage: {\r\n        id: 'UseSharedPasswordEnabledMessage',\r\n        defaultMessage: 'If this setting is disabled, each student will be prompted for a new password at first logon.',\r\n        description: 'Text for use shared password enabled check box.',\r\n    },\r\n    useSharedPasswordCheckboxLabel: {\r\n        id: 'useSharedPasswordCheckboxLabel',\r\n        defaultMessage: 'Use same password for all virtual machines',\r\n        description: 'Text the checkbox option for use shared password.',\r\n    },\r\n    title1: {\r\n        id: 'NewLabFlyoutTitle1',\r\n        defaultMessage: 'New lab',\r\n        description: 'Title of the first page of flyout for creating a new lab.',\r\n    },\r\n    title2: {\r\n        id: 'NewLabFlyoutTitle2',\r\n        defaultMessage: 'Virtual machine credentials',\r\n        description: 'Title of second page of flyout for creating a new lab.',\r\n    },\r\n    title3: {\r\n        id: 'NewLabFlyoutTitle3',\r\n        defaultMessage: 'Lab policies',\r\n        description: 'Title of third page of flyout for creating a new lab.',\r\n    },\r\n    title4: {\r\n        id: 'NewLabFlyoutTitle4',\r\n        defaultMessage: 'Template virtual machine settings',\r\n        description: 'Title of fourth page of flyout for creating a new lab.',\r\n    },\r\n    next: {\r\n        id: 'NewLabFlyoutNextButton',\r\n        defaultMessage: 'Next',\r\n        description: 'Text of a button to switch to next flyout page.',\r\n    },\r\n    back: {\r\n        id: 'NewLabFlyoutBackButton',\r\n        defaultMessage: 'Back',\r\n        description: 'Text of a button to switch to previous flyout page.',\r\n    },\r\n    finish: {\r\n        id: 'NewLabFlyoutFinishButton',\r\n        defaultMessage: 'Finish',\r\n        description: 'Text of a button to finalize new lab creation.',\r\n    },\r\n    quotaLabel: {\r\n        id: 'NewLabPoliciesPageQuotaLabel',\r\n        defaultMessage: 'Lab hours available to each user outside of scheduled events',\r\n        description: 'Label for quota text box on new lab flyout dialog.',\r\n    },\r\n    newLabConfigPageIntro: {\r\n        id: 'NewLabConfigPageIntro',\r\n        defaultMessage: 'A template virtual machine will be created for the lab from the choices you make here. Once the template is published, each user will get a virtual machine that is a copy of the template.',\r\n        description: 'Message at the top of new lab flyout dialog.',\r\n    },\r\n    newLabConfigPageModifiedIntro: {\r\n        id: 'NewLabConfigPageModifiedIntro',\r\n        defaultMessage: 'The settings here will be used for all virtual machines in this lab. <Link>Learn more</Link>',\r\n        description: 'Message at the top of new lab flyout dialog for vnext.',\r\n    },\r\n    newLabConfigPageGpuOptOutText: {\r\n        id: 'NewLabConfigPageGpuOptOutText',\r\n        defaultMessage: 'When this setting is disabled, GPU drivers will need to be manually installed in order to use GPU compute functionality.',\r\n        description: 'Message when GPU toggle is off.',\r\n    },\r\n    newLabConfigPageTotalPriceFormat: {\r\n        id: 'NewLabConfigPageTotalPriceFormat',\r\n        defaultMessage: 'Total price: {price} per hour',\r\n        description: 'Text on new lab flyout dialog. {price} is amount of US dollars',\r\n    },\r\n    newLabConfigPagePricePerVmFormat: {\r\n        id: 'NewLabConfigPagePricePerVmFormat',\r\n        defaultMessage: 'Price per virtual machine: {price}/hour',\r\n        description: 'Text on new lab flyout dialog for VM-level price. {price} is the cost with unit',\r\n    },\r\n    newLabCredentialsPageIntro: {\r\n        id: 'NewLabCredentialsPageIntro',\r\n        defaultMessage: 'Set login credentials for the template virtual machine.',\r\n        description: 'Message at the top of new lab flyout dialog.',\r\n    },\r\n    newLabCredentialsPageIntroVnextGeneralized: {\r\n        id: 'newLabCredentialsPageIntroVnextGeneralized',\r\n        defaultMessage: 'Set the default login credentials for all virtual machines in the lab. Passwords must include 3 of the following: a number, uppercase character, lowercase character, and a special character.',\r\n        description: 'Message at the top of new lab flyout dialog for vnext when a generalized image is selected.',\r\n    },\r\n    newLabCredentialsPageIntroVnextSpecialized: {\r\n        id: 'newLabCredentialsPageIntroVnextSpecialized',\r\n        defaultMessage: 'Enter the username for the virtual machine image and a new password. Passwords must include 3 of the following: a number, uppercase character, lowercase character, and a special character.',\r\n        description: 'Message at the top of new lab flyout dialog for vnext when a specialized image is selected.',\r\n    },\r\n    newLabCredentialsPagePasswordDescription: {\r\n        id: 'NewLabCredentialsPagePasswordDescription',\r\n        defaultMessage: 'Passwords must include 3 of the following: a number, uppercase character, lowercase character, or a special character.',\r\n        description: 'Text on the new lab flyout dialog.',\r\n    },\r\n    newLabCredentialsPageNonAdminOption: {\r\n        id: 'newLabCredentialsPageNonAdminOption',\r\n        defaultMessage: 'Give lab users a non-admin account on their virtual machines',\r\n        description: 'Option header for the non-admin users in the new lab flyout dialog.',\r\n    },\r\n    newLabCredentialsPageNonAdminOptionDescription: {\r\n        id: 'newLabCredentialsPageNonAdminOptionDescription',\r\n        defaultMessage: 'Non-administrator accounts prevent the user from installing software or changing the configuration.',\r\n        description: 'Option description for the non-admin users in the new lab flyout dialog.',\r\n    },\r\n    newLabCredentialsPageNonAdminOptionBottomDescription: {\r\n        id: 'newLabCredentialsPageNonAdminOptionBottomDescription',\r\n        defaultMessage: 'Each lab user will use the non-admin password.',\r\n        description: 'Option description for the non-admin users in the new lab flyout dialog at the bottom after the password field.',\r\n    },\r\n    newLabFlyoutProgressFormat: {\r\n        id: 'NewLabFlyoutProgressFormat',\r\n        defaultMessage: 'Step {stepNumber} of {maxStepNumber}',\r\n        description: 'Indicator of progress within new lab flyout. {stepNumber} can be between 1 and {maxStepNumber}.',\r\n    },\r\n    newLabFlyoutLoadError: {\r\n        id: 'NewLabFlyoutLoadError',\r\n        defaultMessage: 'Cannot create new lab',\r\n        description: 'Error shown on new lab flyout when it fails to load necessary data from the server.',\r\n    },\r\n    newLabFlyoutLoadErrorDetails: {\r\n        id: 'NewLabFlyoutLoadErrorDetails',\r\n        defaultMessage: 'Your container does not appear to be configured to create new labs at this time. Please try again later or contact your Lab Services administator for support.',\r\n        description: 'Error shown on new lab flyout when it fails to load necessary data from the server.',\r\n    },\r\n    newLabFlyoutImagesError: {\r\n        id: 'NewLabFlyoutImagesError',\r\n        defaultMessage: 'No images available',\r\n        description: 'Error shown on new lab flyout when it fails to find any base VM images to create a new lab.',\r\n    },\r\n    newLabFlyoutImagesErrorDetails: {\r\n        id: 'NewLabFlyoutImagesErrorDetails',\r\n        defaultMessage: 'There are no VM images enabled. Please use Azure portal to enable some images or contact your Lab Services administator for support.',\r\n        description: 'Error shown on new lab flyout when it fails to find any base VM images to create a new lab.',\r\n    },\r\n    newLabFlyoutCapacityErrorDetails: {\r\n        id: 'NewLabFlyoutCapacityErrorDetails',\r\n        defaultMessage: 'Lab creation is currently constrained. Please use the Azure Portal to adjust settings, or contact your Lab Services administator for support.',\r\n        description: 'Error shown on new lab flyout when it fails to find any VM capacity to create a new lab.',\r\n    },\r\n    newLabFlyoutDiscardTitle: {\r\n        id: 'NewLabFlyoutDiscardTitle',\r\n        defaultMessage: 'Discard lab',\r\n        description: 'Title of the dialog shown when user dismisses New Lab flyout without saving changes.',\r\n    },\r\n    newLabFlyoutDiscardMessage: {\r\n        id: 'NewLabFlyoutDiscardMessage',\r\n        defaultMessage: 'Are you sure you want to discard this lab?',\r\n        description: 'Message on the dialog shown when user dismisses New Lab flyout without saving changes.',\r\n    },\r\n    newLabPoliciesPageTimeEstimate: {\r\n        id: 'NewLabPoliciesPageTimeEstimate',\r\n        defaultMessage: '20 minutes',\r\n        description: 'Bolded text that will be composed into NewLabPoliciesPageTimeMessage',\r\n    },\r\n    newLabPoliciesPageIntro: {\r\n        id: 'NewLabPoliciesPageIntro',\r\n        defaultMessage: 'Policy settings can always be changed after the lab is created.',\r\n        description: 'Message at the top of new lab flyout dialog.',\r\n    },\r\n    newLabPoliciesPageTimeMessage: {\r\n        id: 'NewLabPoliciesPageTimeMessage',\r\n        defaultMessage: 'Lab creation will take up to {fillInboldedMessage}.',\r\n        description: \"Message at the top of new lab flyout dialog. {fillInboldedMessage} is the bolded text '20 minutes'.\",\r\n    },\r\n    vmSizePickerFormat: {\r\n        id: 'VmSizePickerFormat',\r\n        defaultMessage: '{numberOfCores} cores, {memorySize}GB RAM',\r\n        description: 'Virtual machine size specification. {numberOfCores} is the number of CPU cores, {memorySize} is the number of GB of memory.',\r\n    },\r\n    templateVmSettingsPageMainMessage: {\r\n        id: 'TemplateVmSettingsPageMainMessage',\r\n        defaultMessage: 'Creating a template virtual machine enables you to customize the content of the virtual machines in the lab (by installing additional software, adjusting settings, or adding files). This will add 5-15 minutes to the lab creation time.',\r\n        description: 'Message at the top of new lab flyout dialog.',\r\n    },\r\n    createTemplateVmOption: {\r\n        id: 'CreateTemplateVmOption',\r\n        defaultMessage: 'Create a template virtual machine',\r\n        description: 'The create template VM option in the VM customization page.',\r\n    },\r\n    useVmImageWithoutCustomization: {\r\n        id: 'UseVmImageWithoutCustomization',\r\n        defaultMessage: 'Use virtual machine image without customization',\r\n        description: 'The use VM image without customization option in the VM customization page.',\r\n    },\r\n    templateVmSettingsMaxVmTitle: {\r\n        id: 'TemplateVmSettingsMaxVmTitle',\r\n        defaultMessage: 'Maximum number of virtual machines in the lab',\r\n        description: 'Title for the max number of virtual machines in the lab.',\r\n    },\r\n    customTemplateVmPageTimeEstimate: {\r\n        id: 'CustomTemplateVmPageTimeEstimate',\r\n        defaultMessage: '15 minutes',\r\n        description: 'Bolded text that will be composed into TemplateVmSettingsPageTimeMessage',\r\n    },\r\n    noTemplateVmPageTimeEstimate: {\r\n        id: 'NoTemplateVmPageTimeEstimate',\r\n        defaultMessage: '5 minutes',\r\n        description: 'Bolded text that will be composed into TemplateVmSettingsPageTimeMessage',\r\n    },\r\n    sizesAndGeoNotAvailableCreateLabLinkText: {\r\n        id: 'SizesAndGeoNotAvailableCreateLabLinkText',\r\n        defaultMessage: 'Why are some sizes and/or regions not available?',\r\n        description: 'Text for a link to a document that explains why sizes or regions may be unavailable.',\r\n    },\r\n    searchSkus: {\r\n        id: 'NewLabConfigPagePickerSearchSkus',\r\n        defaultMessage: 'Search sizes',\r\n        description: 'Placeholder for search text box inside VM image drop-down.',\r\n    },\r\n    newLabFlyoutLabPlanRegions: {\r\n        id: 'NewLabFlyoutLabPlanRegionsLinkText',\r\n        defaultMessage: 'Learn more',\r\n        description: 'Text for a link to a document that explains how to enable regions for a lab plan.'\r\n    },\r\n    newLabFlyoutTechnicalSupportRequest: {\r\n        id: 'NewLabFlyoutTechnicalSupportRequestLinkText',\r\n        defaultMessage: 'file a support request',\r\n        description: 'Link to submit a general technical support request for the subscription.'\r\n    },\r\n    showUnavailableSimplified: {\r\n        id: 'VmImagePickerSimplifiedShowUnavailable',\r\n        defaultMessage: 'Show unavailable images',\r\n        description: 'Label for a checkbox to show / hide unavailable images.',\r\n    },\r\n    linuxDistributionsInfo: {\r\n        id: 'LinuxDistributionsInfoText',\r\n        defaultMessage: 'Some Linux distributions don\\'t support Idle auto-shutdown.  To see which distributions support it, please see <Link>documentation</Link>.',\r\n        description: 'Message at the bottom of new lab flyout dialog for vnext that warns about Linux distrubutions.',\r\n    },\r\n});\r\nexport default messages;\r\n","import { defineMessages } from 'react-intl';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nconst messages = defineMessages({\r\n    customLinuxImage: {\r\n        id: 'VmImageInfoCustomLinuxImage',\r\n        defaultMessage: 'Custom Linux image',\r\n        description: 'Description for a custom Linux VM image.',\r\n    },\r\n    customWindowsImage: {\r\n        id: 'VmImageInfoCustomWindowsImage',\r\n        defaultMessage: 'Custom Windows image',\r\n        description: 'Description for a custom Windows VM image.',\r\n    },\r\n});\r\nexport const getGalleryImageInfo = (image) => {\r\n    return {\r\n        id: image.id,\r\n        isWindows: image.imageReference.osType !== 'Linux',\r\n        key: image.id,\r\n        text: image.name,\r\n        subTitle: image.author,\r\n        description: image.description,\r\n        iconUrl: image.icon,\r\n        isCustomImage: false,\r\n        imageReference: {\r\n            offer: image.imageReference?.offer ?? '',\r\n            publisher: image.imageReference?.publisher ?? '',\r\n            sku: image.imageReference?.sku ?? '',\r\n        },\r\n        availableRegions: [],\r\n        isSpecialized: false,\r\n    };\r\n};\r\nexport const getSharedImageInfo = (image, intl) => {\r\n    const isWindows = image.osType === Ml.OsType.Windows;\r\n    return {\r\n        id: image.id,\r\n        isWindows: isWindows,\r\n        key: image.id,\r\n        text: image.displayName,\r\n        subTitle: intl\r\n            ? intl.formatMessage(isWindows ? messages.customWindowsImage : messages.customLinuxImage)\r\n            : undefined,\r\n        isCustomImage: true,\r\n        imageReference: undefined,\r\n        availableRegions: [],\r\n        isSpecialized: false,\r\n    };\r\n};\r\n","import memoize from 'memoize-one';\r\nexport const getPricingAndAvailabilityData = memoize((store) => store.get('pricingAndAvailabilityStore').get('data'));\r\nexport const getPricingAndAvailabilityLoadState = memoize((store) => store.get('pricingAndAvailabilityStore').get('loadState'));\r\nexport const getPricingAndAvailabilityLoadError = memoize((store) => store.get('pricingAndAvailabilityStore').get('error'));\r\nexport const getLabPricingAndAvailabilityData = memoize((store) => store.get('pricingAndAvailabilityStore').get('labData'));\r\nexport const getLabPricingAndAvailabilityLoadState = memoize((store) => store.get('pricingAndAvailabilityStore').get('labLoadState'));\r\nexport const getLabPricingAndAvailabilityLoadError = memoize((store) => store.get('pricingAndAvailabilityStore').get('labError'));\r\n","import memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { getCurrentLabId } from '../lab-selectors';\r\nimport { getVNextLab } from './lab-selectors';\r\nexport const getVNextImages = memoize((store) => {\r\n    return store.get('vNextImageStore').get('images');\r\n});\r\nexport const getVNextSharedImages = memoize((store) => {\r\n    const images = getVNextImages(store);\r\n    return images.filter((o) => !!o.sharedGalleryId);\r\n});\r\nexport const getCurrentLabImage = memoize((store) => {\r\n    const images = getVNextImages(store);\r\n    const labId = getCurrentLabId(store);\r\n    const lab = getVNextLab(store, labId);\r\n    if (!lab?.virtualMachineProfile?.imageReference) {\r\n        return;\r\n    }\r\n    const imageReference = lab.virtualMachineProfile.imageReference;\r\n    if (!!imageReference.id) {\r\n        return images.find((o) => !!o.sharedGalleryId &&\r\n            caseInsensitiveCultureInvariantCompare(o.sharedGalleryId, imageReference.id) === 0);\r\n    }\r\n    if (!!imageReference.sku && !!imageReference.offer && !!imageReference.publisher) {\r\n        return images.find((o) => !!o.sku &&\r\n            !!o.offer &&\r\n            !!o.publisher &&\r\n            caseInsensitiveCultureInvariantCompare(o.sku, imageReference.sku) === 0 &&\r\n            caseInsensitiveCultureInvariantCompare(o.offer, imageReference.offer) === 0 &&\r\n            caseInsensitiveCultureInvariantCompare(o.publisher, imageReference.publisher) === 0);\r\n    }\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { getTenantId, getUserSettings } from '../redux/selectors/identity-selector';\r\nimport { getSupportInfoEmail } from '../redux/selectors/lab-account-selectors';\r\nimport { getFilteredLabs, getLabAccessType, hasBlockedLabs, hasOldV1Labs } from '../redux/selectors/lab-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { isFeatureEnabled, isLmsMode, isTeamsMode, storeIsLoading } from '../redux/selectors/common-selectors';\r\nimport Feature from '../utils/features';\r\nimport { getCurrentLabParentId, isCurrentLabParentLabAccount, shouldDisableNewLabCreation, } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { doesCurrentLabParentExist, isLoadingLabParents } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { isLoadingVNextLabs } from '../redux/selectors/vnext/lab-selectors';\r\nimport { determineVCurrentQuotaStatus, getCoreLimits } from '../redux/selectors/core-limit-selectors';\r\nimport { ResourceId, vNextLabOrLabPlanIdLength } from '../utils/resource-id';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nimport { getUpdateLmsErrors } from '../redux/selectors/vnext/lab-plan-selectors';\r\nimport { getVnextLabPermissionPropagating, getCreateLabPermissionOnLabPlan, } from '../redux/selectors/vnext/lab-selectors';\r\nexport function isLabInCurrentResourceGroup(id, currentLabParent) {\r\n    const parts = id.split('/').filter((n) => n !== '');\r\n    if (parts.length < vNextLabOrLabPlanIdLength) {\r\n        return false;\r\n    }\r\n    const resourceId = new ResourceId(id, true);\r\n    return caseInsensitiveCultureInvariantCompare(resourceId.getResourceGroupId(), currentLabParent) === 0;\r\n}\r\nexport const getLabListViewModel = memoize((state) => {\r\n    const isLoadingLabParentResources = isLoadingLabParents(state);\r\n    const currentLabParentExist = doesCurrentLabParentExist(state);\r\n    const isVNextLabs = !isCurrentLabParentLabAccount(state);\r\n    const isVnextLabPermissionPropagating = getVnextLabPermissionPropagating(state);\r\n    const isVnextAuthErrorPermissionPropagationRelated = getCreateLabPermissionOnLabPlan(state);\r\n    const labs = getFilteredLabs(state);\r\n    const currentLabParentId = getCurrentLabParentId(state);\r\n    const isIntroCheckboxEnabled = isFeatureEnabled(state, Feature.LabListIntroCheckbox);\r\n    const currentTenantId = getTenantId(state);\r\n    const showBlockedLabsBanner = hasBlockedLabs(state);\r\n    const isNewLabCreationDisabled = shouldDisableNewLabCreation(state);\r\n    const settings = getUserSettings(state);\r\n    const showOldGpuLabsGenericBanner = !isVNextLabs && !settings.get('hasDismissedOldV1GpuLabBanner') && hasOldV1Labs(state);\r\n    const hintsEnabled = !settings.get('disableHints');\r\n    const showIntro = !settings.get('dismissedLabListFirstRun');\r\n    const showRetirementAlert = settings.get('showRetirementAlert');\r\n    const showCovidBanner = !settings.get('hasDismissedCovidBanner');\r\n    const isTeamsIntegrationEnabled = isTeamsMode(state);\r\n    const isLmsIntegrationEnabled = isLmsMode(state);\r\n    const updateLinkedLmsErrors = getUpdateLmsErrors(state);\r\n    if (!isVNextLabs) {\r\n        const labStore = state.get('labStore');\r\n        const coreLimitStore = state.get('coreLimitStore');\r\n        const labStoreLoadState = labStore.get('loadState');\r\n        const isLoadingLabs = storeIsLoading(labStoreLoadState);\r\n        const coreQuotaLoadState = coreLimitStore.get('loadState');\r\n        const isLoadingCoreQuota = storeIsLoading(coreQuotaLoadState);\r\n        const isInitialized = !isLoadingLabs &&\r\n            !isLoadingCoreQuota &&\r\n            (labs.count() > 0 || (!isLoadingLabParentResources && currentLabParentExist));\r\n        const isLoading = !isInitialized;\r\n        const isDeleting = labStore.get('isDeleting');\r\n        const administratorEmailAddress = getSupportInfoEmail(state);\r\n        const errors = labStore.get('errors');\r\n        const coreQuotaData = getCoreLimits(state);\r\n        const quotaStatus = determineVCurrentQuotaStatus(coreQuotaData);\r\n        return {\r\n            isLoading,\r\n            labs,\r\n            isDeleting,\r\n            currentTenantId,\r\n            currentLabParentId,\r\n            administratorEmailAddress,\r\n            quotaStatus,\r\n            hintsEnabled,\r\n            showIntro,\r\n            showRetirementAlert,\r\n            showCovidBanner,\r\n            showBlockedLabsBanner,\r\n            showOldGpuLabsGenericBanner,\r\n            errors,\r\n            isIntroCheckboxEnabled,\r\n            isVNextLabs,\r\n            isVnextLabPermissionPropagating,\r\n            isVnextAuthErrorPermissionPropagationRelated,\r\n            isNewLabCreationDisabled,\r\n            isTeamsIntegrationEnabled,\r\n            isLmsIntegrationEnabled,\r\n            updateLinkedLmsErrors,\r\n        };\r\n    }\r\n    else {\r\n        const vNextLabStore = state.get('vNextLabStore');\r\n        const vNextSkuStore = state.get('vNextSkuStore');\r\n        const isLoadingLabs = isLoadingVNextLabs(state);\r\n        const isDeleting = vNextLabStore.get('isDeleting');\r\n        // we only show banners for errors of labs in the current resource group\r\n        const errors = vNextLabStore\r\n            .get('errors')\r\n            .filter((value, key) => isLabInCurrentResourceGroup(key, currentLabParentId));\r\n        const skuLoadState = vNextSkuStore.get('loadState');\r\n        const isLoadingSku = storeIsLoading(skuLoadState);\r\n        const isInitialized = !isLoadingLabs &&\r\n            !isLoadingSku &&\r\n            (labs.count() > 0 || (!isLoadingLabParentResources && currentLabParentExist));\r\n        const isLoading = !isInitialized;\r\n        return {\r\n            isLoading,\r\n            labs,\r\n            isDeleting,\r\n            currentTenantId,\r\n            currentLabParentId,\r\n            hintsEnabled,\r\n            showIntro,\r\n            showRetirementAlert,\r\n            showCovidBanner,\r\n            showBlockedLabsBanner,\r\n            showOldGpuLabsGenericBanner,\r\n            errors,\r\n            isIntroCheckboxEnabled,\r\n            isVNextLabs,\r\n            isVnextLabPermissionPropagating,\r\n            isVnextAuthErrorPermissionPropagationRelated,\r\n            isNewLabCreationDisabled,\r\n            isTeamsIntegrationEnabled,\r\n            isLmsIntegrationEnabled,\r\n            updateLinkedLmsErrors,\r\n        };\r\n    }\r\n});\r\nexport const getLabListContainerModel = memoize((state) => {\r\n    const labStore = state.get('labStore');\r\n    const labStoreLoadState = labStore.get('loadState');\r\n    const isLoadingLabs = storeIsLoading(labStoreLoadState);\r\n    const isLoadingLabParentResources = isLoadingLabParents(state);\r\n    const currentLabParentExist = doesCurrentLabParentExist(state);\r\n    const search = getSearch(state);\r\n    const labListViewModel = getLabListViewModel(state);\r\n    const labAccessType = getLabAccessType(state);\r\n    return {\r\n        isLoadingLabs,\r\n        isLoadingLabParentResources,\r\n        search,\r\n        currentLabParentExist,\r\n        labListViewModel,\r\n        labAccessType,\r\n    };\r\n});\r\n","import memoize from 'memoize-one';\r\nexport const getCoreUsage = memoize((state) => {\r\n    const coreUsageStore = state.get('vNextCoreUsageStore');\r\n    return coreUsageStore.get('coreUsage');\r\n});\r\n","import { Map } from 'immutable';\r\nimport memoize from 'memoize-one';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { getCurrentLabId } from '../lab-selectors';\r\nimport { getCoreUsage } from './core-usage-selectors';\r\nimport { getVNextLab } from './lab-selectors';\r\nimport { getCurrentLabSkuInfo, isCurrentVNextLabOldSku } from './sku-selectors';\r\nexport const getVNextUsageByRegion = memoize((store) => store.get('vNextUsageStore').get('usageByRegion'));\r\nexport const getVNextUsageLoadState = memoize((store) => store.get('vNextUsageStore').get('loadState'));\r\nexport const getVNextUsageLoadError = memoize((store) => store.get('vNextUsageStore').get('error'));\r\n// Get a map (key by region) of maps (key by SKU family) of usage\r\n// e.g. { westus: { dsv4: {...}, esv4: {...} }, eastus: { dsv4: {...}, esv4: {...} } }\r\nexport const getVNextProcessedUsage = memoize((store) => {\r\n    const usageByRegion = getVNextUsageByRegion(store);\r\n    let processedUsage = Map();\r\n    for (const [region, usages] of usageByRegion) {\r\n        let skuFamilyUsage = Map();\r\n        usages.forEach((usage) => {\r\n            skuFamilyUsage = skuFamilyUsage.set(usage.name?.value ?? '', usage);\r\n        });\r\n        processedUsage = processedUsage.set(region, skuFamilyUsage);\r\n    }\r\n    return processedUsage;\r\n});\r\nexport const getCurrentLabCoreUsageInfo = memoize((store) => {\r\n    const currentLabId = getCurrentLabId(store);\r\n    const currentVNextLab = getVNextLab(store, currentLabId);\r\n    if (!currentVNextLab) {\r\n        return undefined;\r\n    }\r\n    const skuInfo = getCurrentLabSkuInfo(store);\r\n    if (!skuInfo) {\r\n        return undefined;\r\n    }\r\n    const isGpu = skuInfo.isGpu;\r\n    const skuFamily = skuInfo.skuFamilyName;\r\n    if (!skuFamily) {\r\n        return undefined;\r\n    }\r\n    const isOldSku = isCurrentVNextLabOldSku(store);\r\n    // if new sku\r\n    if (!isOldSku) {\r\n        const labLocation = currentVNextLab.location;\r\n        const usageByRegion = getVNextUsageByRegion(store);\r\n        const usage = usageByRegion?.get(labLocation);\r\n        const skuUsage = usage?.find((o) => caseInsensitiveCultureInvariantCompare(o.name?.value ?? '', skuFamily) === 0);\r\n        if (!!skuUsage && skuUsage.limit !== undefined && skuUsage.currentValue !== undefined) {\r\n            return {\r\n                limit: skuUsage.limit,\r\n                currentValue: skuUsage.currentValue,\r\n            };\r\n        }\r\n    }\r\n    else {\r\n        // if old sku\r\n        const coreUsage = getCoreUsage(store);\r\n        return {\r\n            limit: isGpu ? coreUsage.alloted.gpu : coreUsage.alloted.standard,\r\n            currentValue: isGpu ? coreUsage.used.gpu : coreUsage.used.standard,\r\n        };\r\n    }\r\n});\r\n","import memoize from 'memoize-one';\r\nexport const filterImagesByLabplanRegions = memoize((images, labPlan) => {\r\n    if (!labPlan?.allowedRegions) {\r\n        return [];\r\n    }\r\n    const allowedRegions = labPlan.allowedRegions;\r\n    return images.filter((o) => !o.isCustomImage || o.availableRegions.some((region) => allowedRegions.includes(region)));\r\n});\r\n","import { Map } from 'immutable';\r\nimport { numberSorter } from '../../utils/sorting';\r\nconst skuFamilyOrdinal = Map({\r\n    FSV2: 0,\r\n    DSV4: 1,\r\n    DSV3: 2,\r\n    NCAST4V3: 3,\r\n    NCSV3: 4,\r\n    NC: 5,\r\n    NVV4: 6,\r\n    NVV3: 7,\r\n    NVADSA10V5: 8,\r\n    NV: 9,\r\n    ESV4: 10,\r\n});\r\nconst diskTypeOrdinal = Map({\r\n    STANDARDSSD: 0,\r\n    PREMIUMSSD: 1,\r\n});\r\nexport const vmSkuSorter = () => {\r\n    const vmSkuComparer = (a, b) => {\r\n        if (!a && !b) {\r\n            return 0;\r\n        }\r\n        else if (!a) {\r\n            return 1;\r\n        }\r\n        else if (!b) {\r\n            return -1;\r\n        }\r\n        // TODO: Classic skus will come first for now, but eventually we want standard skus to be default.\r\n        if (a.isClassic && !b.isClassic) {\r\n            return -1;\r\n        }\r\n        else if (!a.isClassic && b.isClassic) {\r\n            return 1;\r\n        }\r\n        const numSorter = numberSorter();\r\n        const aFamilyOrdinal = skuFamilyOrdinal.get(a.family.toUpperCase());\r\n        const bFamliyOrdinal = skuFamilyOrdinal.get(b.family.toUpperCase());\r\n        if (aFamilyOrdinal !== undefined && bFamliyOrdinal !== undefined) {\r\n            const familyResult = numSorter(aFamilyOrdinal, bFamliyOrdinal);\r\n            if (familyResult !== 0) {\r\n                return familyResult;\r\n            }\r\n        }\r\n        else if (bFamliyOrdinal !== undefined) {\r\n            return 1;\r\n        }\r\n        else if (aFamilyOrdinal !== undefined) {\r\n            return -1;\r\n        }\r\n        const coresResult = numSorter(a.size.cores, b.size.cores);\r\n        if (coresResult !== 0) {\r\n            return coresResult;\r\n        }\r\n        const diskSizeResult = numSorter(a.size.storageGB, b.size.storageGB);\r\n        if (diskSizeResult !== 0) {\r\n            return diskSizeResult;\r\n        }\r\n        const aDiskTypeOrdinal = diskTypeOrdinal.get(a.size.storageType.toUpperCase());\r\n        const bDiskTypeOrdinal = diskTypeOrdinal.get(b.size.storageType.toUpperCase());\r\n        if (aDiskTypeOrdinal !== undefined && bDiskTypeOrdinal !== undefined) {\r\n            return numSorter(aDiskTypeOrdinal, bDiskTypeOrdinal);\r\n        }\r\n        else if (bDiskTypeOrdinal !== undefined) {\r\n            return 1;\r\n        }\r\n        else if (aDiskTypeOrdinal !== undefined) {\r\n            return -1;\r\n        }\r\n        return 0;\r\n    };\r\n    return vmSkuComparer;\r\n};\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { Map } from 'immutable';\r\nimport memoize from 'memoize-one';\r\nimport { isEnabled } from '../../data/helpers/enum-helpers';\r\nimport { MlCoreFamily } from '../../data/models/core-quota-data';\r\nimport { ConnectionType } from '../../data/models/environment-common';\r\nimport { safeGetRestrictions, safeGetUsages } from '../../redux/selectors/core-limit-selectors';\r\nimport { Constants } from '../../utils/constants';\r\nimport { getGalleryImageInfo, getSharedImageInfo } from './vm-image-info';\r\nimport { getDefaultIdleConfig } from '../../common/shutdown-policy/selectors';\r\nimport { getLocale, isBastionFeatureEnabled, isFeatureEnabled, isLmsHost, storeHasLoadError, storeIsLoading, } from '../../redux/selectors/common-selectors';\r\nimport Feature from '../../utils/features';\r\nimport { getPricingAndAvailabilityData } from '../../redux/selectors/pricing-and-availability-selectors';\r\nimport { getCurrentLabAccount } from '../..//redux/selectors/lab-account-selectors';\r\nimport { getGroupId, getGroupName, shouldFilterLabsByGroupId } from '../../redux/selectors/group-selectors';\r\nimport { getTenantId } from '../../redux/selectors/identity-selector';\r\nimport { getCurrentLabParentId, isCurrentLabParentLabAccount, } from '../../redux/selectors/lab-parent-resource-selectors';\r\nimport { getLabNames } from '../../redux/selectors/lab-selectors';\r\nimport { getVNextImages } from '../../redux/selectors/vnext/image-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { getCurrentLabPlan, getCurrentResourceGroupLabPlans } from '../../redux/selectors/vnext/lab-plan-selectors';\r\nimport { compareByName, compareByText } from '../../utils/common';\r\nimport { caseInsensitiveCultureInvariantCompare, caseInsensitiveLocaleCompare } from '../../utils/string-comparison';\r\nimport { isLabInCurrentResourceGroup } from '../lab-list-selectors';\r\nimport { getLtiContextTitle } from '../../redux/selectors/lti-selectors';\r\nimport { getVNextSkuData } from '../../redux/selectors/vnext/sku-selectors';\r\nimport { getVNextProcessedUsage } from '../../redux/selectors/vnext/usage-selectors';\r\nimport { getVNextProcessedPrice } from '../../redux/selectors/vnext/price-selectors';\r\nimport { convertSkuCapabilityToVmSzie, getSkuCostTargetUnit, isClassicSku } from '../../common/selectors/sku-selectors';\r\nimport { filterImagesByLabplanRegions } from '../../common/selectors/image-selectors';\r\nimport { vmSkuSorter } from './vm-size-picker-sorter';\r\nimport { subscriptionHasFeature } from '../../redux/selectors/subscription-selector';\r\nexport const getVCurrentSizeData = (data, osType) => {\r\n    const osData = data[osType];\r\n    return osData ? osData.sizes : {};\r\n};\r\nexport const getVCurrentGeographyData = (data, size) => {\r\n    const sizeInfo = data[size.sizeName];\r\n    return sizeInfo ? sizeInfo.geographies : {};\r\n};\r\nexport const hasVCurrentAvailableSize = memoize((data) => {\r\n    // make sure we have at least one size that is available\r\n    const keys = Object.keys(data);\r\n    if (keys.length < 1) {\r\n        return false;\r\n    }\r\n    for (let i = 0; i < keys.length; ++i) {\r\n        const { availability, sizes } = data[keys[i]];\r\n        if (availability !== Ml.Availability.Available) {\r\n            continue;\r\n        }\r\n        const sizeKeys = Object.keys(sizes);\r\n        if (sizeKeys.length < 1) {\r\n            continue;\r\n        }\r\n        for (let j = 0; j < sizeKeys.length; ++j) {\r\n            const { availability, geographies } = sizes[sizeKeys[j]];\r\n            if (availability !== Ml.Availability.Available) {\r\n                continue;\r\n            }\r\n            const geoKeys = Object.keys(geographies);\r\n            if (geoKeys.length < 1) {\r\n                continue;\r\n            }\r\n            for (let k = 0; k < geoKeys.length; ++k) {\r\n                const { availability } = geographies[geoKeys[k]];\r\n                if (availability === Ml.Availability.Available) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n});\r\n/**\r\n * Determine if we have the availability and core capacity to create a VM with the given size.\r\n */\r\nexport const isVCurrentSizeDisabled = (size, coreQuotaData) => {\r\n    if (size.availability !== Ml.Availability.Available) {\r\n        return true;\r\n    }\r\n    if (isSizeDisabledForCores(size, coreQuotaData)) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n/**\r\n * Only returns true if all VM sizes are available for lab creation.\r\n */\r\nexport const areAllVCurrentSizesAvailable = memoize((data, coreQuotaData) => {\r\n    return Object.keys(data).every((key) => !isVCurrentSizeDisabled(data[key], coreQuotaData));\r\n});\r\n/**\r\n * Determine if we have the core capacity to create a VM with the given size.\r\n */\r\nconst isSizeDisabledForCores = (size, coreQuotaData) => {\r\n    if (!coreQuotaData) {\r\n        return false;\r\n    }\r\n    if (coreQuotaData.isExempt) {\r\n        return false;\r\n    }\r\n    const coreFamily = size.gpu === Ml.GpuType.Gpu ? MlCoreFamily.GPU : MlCoreFamily.Standard;\r\n    const restriction = safeGetRestrictions(coreFamily, coreQuotaData);\r\n    const usage = safeGetUsages(coreFamily, coreQuotaData);\r\n    if (restriction === undefined) {\r\n        return false;\r\n    }\r\n    if (usage === undefined) {\r\n        return false;\r\n    }\r\n    return usage + size.coresCount > restriction;\r\n};\r\nexport const getVCurrentRemainingCores = (coreQuotaData) => {\r\n    if (coreQuotaData.isExempt) {\r\n        return { remainingGpuCores: undefined, remainingStandardCores: undefined };\r\n    }\r\n    const gpuRestriction = safeGetRestrictions(MlCoreFamily.GPU, coreQuotaData);\r\n    const standardRestriction = safeGetRestrictions(MlCoreFamily.Standard, coreQuotaData);\r\n    const gpuUsage = safeGetUsages(MlCoreFamily.GPU, coreQuotaData);\r\n    const standardUsage = safeGetUsages(MlCoreFamily.Standard, coreQuotaData);\r\n    if (gpuRestriction === undefined ||\r\n        standardRestriction === undefined ||\r\n        gpuUsage === undefined ||\r\n        standardUsage === undefined) {\r\n        return { remainingGpuCores: undefined, remainingStandardCores: undefined };\r\n    }\r\n    return {\r\n        remainingGpuCores: gpuRestriction - gpuUsage,\r\n        remainingStandardCores: standardRestriction - standardUsage,\r\n    };\r\n};\r\nexport const getVCurrentMinMaxVmCores = memoize((gpuType, data) => {\r\n    const sizes = Object.keys(data).filter((key) => data[key].gpu === gpuType);\r\n    let min;\r\n    let max;\r\n    sizes.forEach((size) => {\r\n        const cores = data[size].coresCount;\r\n        min = !min || cores < min ? cores : min;\r\n        max = !max || cores > max ? cores : max;\r\n    });\r\n    return { minVmCores: min, maxVmCores: max };\r\n});\r\n/**\r\n * Only returns true if all geographics are available for lab creation.\r\n */\r\nexport const areAllGeosAvailable = (data) => {\r\n    return Object.keys(data).every((key) => isGeographyAvailable(data[key]));\r\n};\r\nexport const isGeographyAvailable = (geo) => {\r\n    return geo.availability === Ml.Availability.Available;\r\n};\r\nexport const isUbuntuImage = (image) => {\r\n    return !!image && !!image.text && image.text.toLowerCase().indexOf('ubuntu') > -1;\r\n};\r\nexport const getDefaultImage = (images) => {\r\n    if (images.length < 1) {\r\n        return undefined;\r\n    }\r\n    const image = images.find((o) => caseInsensitiveCultureInvariantCompare(o.text, Constants.DefaultImageName) === 0);\r\n    return image ?? images[0];\r\n};\r\nexport const getVCurrentDefaultSize = (data, coreQuotaData) => {\r\n    let defaultSize = undefined;\r\n    Object.keys(data).map((key) => {\r\n        const size = data[key];\r\n        const disabled = isVCurrentSizeDisabled(size, coreQuotaData);\r\n        if (!disabled && (!defaultSize || defaultSize.ordinal > size.ordinal)) {\r\n            defaultSize = size;\r\n        }\r\n    });\r\n    return defaultSize;\r\n};\r\nexport const getVCurrentDefaultGeography = (data, defaultGeoName) => {\r\n    // first we try to pick the geo that matches the lab account default (defaultGeoName)\r\n    const geoNames = Object.keys(data);\r\n    if (!!defaultGeoName && geoNames.indexOf(defaultGeoName) > -1) {\r\n        const geo = data[defaultGeoName];\r\n        if (!!geo && isGeographyAvailable(geo)) {\r\n            return geo;\r\n        }\r\n    }\r\n    // if no match, then we try to pick the geo with the lowest price, and if there are conflicts, then\r\n    // fallback to alphabetical\r\n    let defaultGeo = undefined;\r\n    Object.keys(data).map((key) => {\r\n        const geo = data[key];\r\n        if (isGeographyAvailable(geo) &&\r\n            (!defaultGeo ||\r\n                defaultGeo.price > geo.price ||\r\n                caseInsensitiveLocaleCompare(defaultGeo.localizedDisplayName, geo.localizedDisplayName) > 0)) {\r\n            defaultGeo = geo;\r\n        }\r\n    });\r\n    return defaultGeo;\r\n};\r\nexport const isGeographySelectable = (labAccount) => {\r\n    return labAccount.enabledRegionSelection !== false;\r\n};\r\nexport const getLabAccountDefaultGeoName = (labAccount) => {\r\n    return labAccount?.geo;\r\n};\r\nexport const isRegionSelectable = (labPlan) => {\r\n    return !!labPlan.allowedRegions && labPlan.allowedRegions.length > 0;\r\n};\r\nexport const getIsBastionSupported = (labAccount, isBastionEnabled, labPlan, isV2BastionEnabled) => {\r\n    if (isBastionEnabled) {\r\n        if (!!labAccount) {\r\n            return !labAccount.virtualNetworkAddressRange && !labAccount.virtualNetworkResourceId;\r\n        }\r\n    }\r\n    // for V2 labs, we support bastion if the subscription has the feature flag\r\n    return isV2BastionEnabled;\r\n};\r\nexport const getDefaultConnectionTypes = (isWindows, labAccount, labPlan, isBastionEnabled, isV2BastionEnabled) => {\r\n    const result = [isWindows ? ConnectionType.Rdp : ConnectionType.Ssh];\r\n    if (getIsBastionSupported(labAccount, isBastionEnabled, labPlan, isV2BastionEnabled)) {\r\n        if (!!labAccount && isEnabled(labAccount.enableBastion)) {\r\n            result.push(isWindows ? ConnectionType.RdpInBrowser : ConnectionType.SshInBrowser);\r\n        }\r\n    }\r\n    return result;\r\n};\r\nexport const combineImages = (galleryImages, sharedImages, locale) => {\r\n    const images = [\r\n        ...galleryImages.map((o) => getGalleryImageInfo(o)),\r\n        ...sharedImages.filter((o) => isEnabled(o.enableState)).map((o) => getSharedImageInfo(o)),\r\n    ];\r\n    return images.sort((a, b) => a.text.localeCompare(b.text, locale));\r\n};\r\nexport const isVCurrentGpuSize = (size) => {\r\n    return size.gpu === Ml.GpuType.Gpu;\r\n};\r\nexport function convertVNextImageToVmImageInfo(image) {\r\n    return {\r\n        id: image.id,\r\n        isWindows: image.osType === LabServicesModels.OsType.Windows,\r\n        key: image.id,\r\n        text: image.displayName,\r\n        description: image.description,\r\n        isCustomImage: !!image.sharedGalleryId,\r\n        iconUrl: image.iconUrl,\r\n        imageReference: {\r\n            id: image.sharedGalleryId,\r\n            offer: image.offer,\r\n            publisher: image.publisher,\r\n            sku: image.sku,\r\n            version: image.version,\r\n        },\r\n        availableRegions: image.availableRegions ?? [],\r\n        isSpecialized: image.osState === LabServicesModels.OsState.Specialized,\r\n    };\r\n}\r\nexport const getSkuCostFromImageOS = (location, targetUnit) => {\r\n    const targetCost = location?.costs?.find((c) => caseInsensitiveCultureInvariantCompare(c.unit, targetUnit) === 0);\r\n    return targetCost?.value ?? 0;\r\n};\r\nexport const getSkuCostsFromImage = (locations, image) => {\r\n    let skuCosts = Map();\r\n    const targetUnit = getSkuCostTargetUnit(image.isWindows);\r\n    locations.forEach((location) => {\r\n        if (isLocationAvailable(location, targetUnit, image)) {\r\n            skuCosts = skuCosts.set(location.name, getSkuCostFromImageOS(location, targetUnit));\r\n        }\r\n    });\r\n    return skuCosts;\r\n};\r\nexport const getSkuMinMaxCostFromImage = (locations, image) => {\r\n    let min = Number.MAX_VALUE, max = Number.MIN_VALUE;\r\n    const targetUnit = getSkuCostTargetUnit(image.isWindows);\r\n    let hasFoundAtLeastOneValidCost = false;\r\n    locations.forEach((location) => {\r\n        const isValid = isLocationAvailable(location, targetUnit, image);\r\n        if (isValid) {\r\n            hasFoundAtLeastOneValidCost = true;\r\n            const cost = getSkuCostFromImageOS(location, targetUnit);\r\n            if (cost < min) {\r\n                min = cost;\r\n            }\r\n            if (cost > max) {\r\n                max = cost;\r\n            }\r\n        }\r\n    });\r\n    return {\r\n        min: hasFoundAtLeastOneValidCost ? min : 0,\r\n        max: hasFoundAtLeastOneValidCost ? max : 0,\r\n    };\r\n};\r\nexport const getSkuMinCostFromImage = (sku, image) => {\r\n    const locations = sku.locations;\r\n    if (locations.length === 0) {\r\n        return undefined;\r\n    }\r\n    let min = Number.MAX_VALUE;\r\n    let minLocation;\r\n    const targetUnit = getSkuCostTargetUnit(image.isWindows);\r\n    locations.forEach((location) => {\r\n        const cost = getSkuCostFromImageOS(location, targetUnit);\r\n        if (isLocationAvailable(location, targetUnit, image) && cost < min) {\r\n            min = cost;\r\n            minLocation = location;\r\n        }\r\n    });\r\n    return minLocation;\r\n};\r\nexport const getLocationMinCostFromImage = memoize((skus, image, location) => {\r\n    let min = Number.MAX_VALUE;\r\n    let minSku;\r\n    const targetUnit = getSkuCostTargetUnit(image.isWindows);\r\n    skus.forEach((sku) => {\r\n        const isValid = isSkuLocationAvailable(sku, location, image);\r\n        if (isValid) {\r\n            const vmSkuLocation = sku.locations.find((o) => caseInsensitiveCultureInvariantCompare(o.name, location) === 0);\r\n            const cost = getSkuCostFromImageOS(vmSkuLocation, targetUnit);\r\n            if (cost < min) {\r\n                min = cost;\r\n                minSku = sku;\r\n            }\r\n        }\r\n    });\r\n    return minSku;\r\n});\r\nexport const getSkuAndLocationMinCostFromImage = memoize((skus, image) => {\r\n    let min = Number.MAX_VALUE;\r\n    let minSku;\r\n    let minLocation;\r\n    const targetUnit = getSkuCostTargetUnit(image.isWindows);\r\n    skus.forEach((sku) => {\r\n        const minSkuLocation = getSkuMinCostFromImage(sku, image);\r\n        if (!!minSkuLocation) {\r\n            const cost = getSkuCostFromImageOS(minSkuLocation, targetUnit);\r\n            if (cost < min) {\r\n                min = cost;\r\n                minSku = sku;\r\n                minLocation = minSkuLocation;\r\n            }\r\n        }\r\n    });\r\n    return {\r\n        sku: minSku,\r\n        location: minLocation,\r\n    };\r\n});\r\nexport const getSkusFromData = memoize((skuSettings, usageData, priceData) => {\r\n    if (!usageData || !priceData) {\r\n        return [];\r\n    }\r\n    const skus = [];\r\n    let skuMap = Map();\r\n    skuSettings.forEach((sku) => {\r\n        const size = convertSkuCapabilityToVmSzie(sku.capabilities, sku.size);\r\n        const locations = [];\r\n        sku.locations?.forEach((skuLocation) => {\r\n            const usageByLocation = usageData.get(skuLocation);\r\n            const priceByLocation = priceData.get(skuLocation);\r\n            if (usageByLocation && priceByLocation) {\r\n                const usageByLocationSkuFamily = usageByLocation.get(sku.family);\r\n                const priceByLocationSkuName = priceByLocation.get(sku.name);\r\n                let usage = undefined;\r\n                if (usageByLocationSkuFamily) {\r\n                    usage = {\r\n                        unit: usageByLocationSkuFamily.unit,\r\n                        currentValue: usageByLocationSkuFamily.currentValue,\r\n                        limit: usageByLocationSkuFamily.limit,\r\n                    };\r\n                }\r\n                const location = {\r\n                    key: skuLocation,\r\n                    name: skuLocation,\r\n                    costs: priceByLocationSkuName ?? [],\r\n                    usage,\r\n                };\r\n                locations.push(location);\r\n            }\r\n        });\r\n        const target = skuMap.get(sku.name);\r\n        if (target != undefined) {\r\n            locations.forEach((loc) => {\r\n                if (!target.locations.find((tl) => caseInsensitiveCultureInvariantCompare(tl.name, loc.name) === 0)) {\r\n                    target.locations.push(loc);\r\n                    skuMap = skuMap.set(target.name, target);\r\n                }\r\n                else {\r\n                    // TODO: this is unexpected. log?\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            const newSku = {\r\n                key: sku.name,\r\n                name: sku.name,\r\n                family: sku.family,\r\n                size,\r\n                locations,\r\n                isClassic: isClassicSku(sku.name),\r\n            };\r\n            skus.push(newSku);\r\n            skuMap = skuMap.set(newSku.name, newSku);\r\n        }\r\n    });\r\n    const sorter = vmSkuSorter();\r\n    return skus.sort((a, b) => sorter(a, b));\r\n});\r\nexport const getDefaultSku = (skus, vmImageInfo) => {\r\n    if (skus.length === 0) {\r\n        return undefined;\r\n    }\r\n    for (let index = 0; index < skus.length; index++) {\r\n        if (!!getDefaultLocationFromSku(skus[index], vmImageInfo)) {\r\n            return skus[index];\r\n        }\r\n    }\r\n    return undefined;\r\n};\r\nexport const isSkuLocationAvailable = memoize((sku, location, vmImageInfo) => {\r\n    const targetPriceUnit = getSkuCostTargetUnit(vmImageInfo.isWindows);\r\n    for (let index = 0; index < sku.locations.length; index++) {\r\n        const skuLocation = sku.locations[index];\r\n        if (caseInsensitiveCultureInvariantCompare(skuLocation.name, location) === 0 &&\r\n            isLocationAvailable(skuLocation, targetPriceUnit, vmImageInfo)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n});\r\nconst isLocationAvailable = (location, targetPriceUnit, vmImageInfo) => {\r\n    const locationIndex = location.costs.findIndex((o) => !!o.unit && caseInsensitiveCultureInvariantCompare(o.unit, targetPriceUnit) === 0);\r\n    const canFindPriceAndUsage = !!location.usage &&\r\n        !!location.costs &&\r\n        locationIndex >= 0 &&\r\n        location.costs[locationIndex].availability === 'Available';\r\n    return canFindPriceAndUsage && isLocationAllowedForImage(vmImageInfo, location.name);\r\n};\r\nexport const isLocationAllowedForImage = (vmImageInfo, location) => {\r\n    return vmImageInfo.isCustomImage\r\n        ? vmImageInfo.availableRegions.findIndex((o) => caseInsensitiveCultureInvariantCompare(o, location) === 0) >= 0\r\n        : true;\r\n};\r\nexport const isSkuAvailable = memoize((sku, vmImageInfo) => {\r\n    const targetPriceUnit = getSkuCostTargetUnit(vmImageInfo.isWindows);\r\n    for (let index = 0; index < sku.locations.length; index++) {\r\n        const location = sku.locations[index];\r\n        if (isLocationAvailable(location, targetPriceUnit, vmImageInfo)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n});\r\nexport const getDefaultLocationFromSku = (sku, vmImageInfo) => {\r\n    for (let index = 0; index < sku.locations.length; index++) {\r\n        if (isSkuLocationAvailable(sku, sku.locations[index].name, vmImageInfo)) {\r\n            return sku.locations[index];\r\n        }\r\n    }\r\n};\r\nexport const getCreateLabViewModel = memoize((state) => {\r\n    const currentLabParentId = getCurrentLabParentId(state);\r\n    const isLabAccount = isCurrentLabParentLabAccount(state);\r\n    const isBastionEnabled = isBastionFeatureEnabled(state);\r\n    const isV2BastionEnabled = subscriptionHasFeature(state, Constants.V2BastionFeature);\r\n    const isSkipTemplateEnabled = isFeatureEnabled(state, Feature.SkipTemplate) && isLabAccount;\r\n    const labNames = getLabNames(state);\r\n    const isSetGroupIdInQueryString = shouldFilterLabsByGroupId(state);\r\n    const aadGroupName = isSetGroupIdInQueryString ? getGroupName(state) : '';\r\n    let validateNameOnLoad = !!aadGroupName;\r\n    const currentTenantId = getTenantId(state);\r\n    const defaultIdleConfig = getDefaultIdleConfig(state);\r\n    if (isLabAccount) {\r\n        const labStore = state.get('labStore');\r\n        const labAccountStore = state.get('labAccountStore');\r\n        const galleryImageStore = state.get('galleryImageStore');\r\n        const sharedImageStore = state.get('sharedImageStore');\r\n        const pricingAndAvailabilityStore = state.get('pricingAndAvailabilityStore');\r\n        const coreLimitStore = state.get('coreLimitStore');\r\n        const labStoreLoadState = labStore.get('loadState');\r\n        const labAccountLoadState = labAccountStore.get('loadState');\r\n        const galleryImageLoadState = galleryImageStore.get('loadState');\r\n        const sharedImageLoadState = sharedImageStore.get('loadState');\r\n        const pricingAndAvailabilityLoadState = pricingAndAvailabilityStore.get('loadState');\r\n        const coreLimitLoadState = coreLimitStore.get('loadState');\r\n        const isLoading = storeIsLoading(labStoreLoadState) ||\r\n            storeIsLoading(labAccountLoadState) ||\r\n            storeIsLoading(galleryImageLoadState) ||\r\n            storeIsLoading(sharedImageLoadState) ||\r\n            storeIsLoading(pricingAndAvailabilityLoadState) ||\r\n            storeIsLoading(coreLimitLoadState);\r\n        const hasLoadError = storeHasLoadError(labStoreLoadState) ||\r\n            storeHasLoadError(labAccountLoadState) ||\r\n            storeHasLoadError(galleryImageLoadState) ||\r\n            storeHasLoadError(sharedImageLoadState) ||\r\n            storeHasLoadError(pricingAndAvailabilityLoadState) ||\r\n            storeHasLoadError(coreLimitLoadState);\r\n        const labAccount = getCurrentLabAccount(state);\r\n        const isCreating = labStore.get('isCreating');\r\n        const coreQuotaData = coreLimitStore.get('coreQuotaData');\r\n        const pricingAndAvailabilityData = getPricingAndAvailabilityData(state);\r\n        const hasCapacityError = !isLoading && !hasVCurrentAvailableSize(pricingAndAvailabilityData);\r\n        const galleryImages = galleryImageStore.get('images');\r\n        const sharedImages = sharedImageStore.get('images');\r\n        const locale = getLocale(state);\r\n        const images = combineImages(galleryImages, sharedImages, locale);\r\n        const hasImageError = !isLoading && images.length < 1;\r\n        const addImagesUrl = labAccount ? Constants.Urls.AddImages(currentTenantId, labAccount.id) : undefined;\r\n        return {\r\n            isSubmitting: isCreating,\r\n            labNames,\r\n            defaultIdleConfig,\r\n            isBastionEnabled,\r\n            isV2BastionEnabled,\r\n            isSkipTemplateEnabled,\r\n            coreQuotaData,\r\n            images,\r\n            labAccount,\r\n            currentTenantId,\r\n            addImagesUrl,\r\n            pricingAndAvailabilityData,\r\n            hasCapacityError,\r\n            hasImageError,\r\n            validateNameOnLoad,\r\n            isLoading,\r\n            hasLoadError,\r\n            isCurrentLabParentLabAccount: isLabAccount,\r\n            currentLabParentId,\r\n        };\r\n    }\r\n    else {\r\n        const labStore = state.get('vNextLabStore');\r\n        const imageStore = state.get('vNextImageStore');\r\n        const labPlanStore = state.get('labPlanStore');\r\n        const labParentResourceStore = state.get('labParentResourceStore');\r\n        const skuStore = state.get('vNextSkuStore');\r\n        const usageStore = state.get('vNextUsageStore');\r\n        const priceStore = state.get('vNextPriceStore');\r\n        const labLoadState = labStore.get('loadState');\r\n        const labParentLoadState = labParentResourceStore.get('loadState');\r\n        const imageLoadState = imageStore.get('loadState');\r\n        const labPlanLoadState = labPlanStore.get('loadState');\r\n        const skuLoadState = skuStore.get('loadState');\r\n        const usageLoadState = usageStore.get('loadState');\r\n        const priceLoadState = priceStore.get('loadState');\r\n        const isLoading = storeIsLoading(labLoadState) ||\r\n            storeIsLoading(labParentLoadState) ||\r\n            storeIsLoading(skuLoadState) ||\r\n            storeIsLoading(labPlanLoadState);\r\n        const hasLoadError = storeHasLoadError(labLoadState) ||\r\n            storeHasLoadError(labParentLoadState) ||\r\n            storeHasLoadError(skuLoadState) ||\r\n            storeHasLoadError(labPlanLoadState);\r\n        const isGettingLabPlan = labPlanStore.get('isGettingLabPlan');\r\n        const isLoadingOnSelectLabPlan = storeIsLoading(imageLoadState) ||\r\n            storeIsLoading(skuLoadState) ||\r\n            storeIsLoading(usageLoadState) ||\r\n            storeIsLoading(priceLoadState) ||\r\n            isGettingLabPlan;\r\n        const hasSelectLabPlanLoadError = storeHasLoadError(imageLoadState) ||\r\n            storeHasLoadError(usageLoadState) ||\r\n            storeHasLoadError(priceLoadState);\r\n        const isCreating = labStore.get('isCreating');\r\n        const rawSkuData = getVNextSkuData(state);\r\n        const usageData = getVNextProcessedUsage(state);\r\n        const priceData = getVNextProcessedPrice(state);\r\n        const skuData = getSkusFromData(rawSkuData, usageData, priceData);\r\n        const vNextImages = getVNextImages(state);\r\n        const filteredImages = vNextImages.filter((o) => o.enabledState === LabServicesModels.EnableState.Enabled);\r\n        const hasCapacityError = !isLoading && !rawSkuData;\r\n        const labPlans = getCurrentResourceGroupLabPlans(state).sort(compareByName);\r\n        const selectedLabPlan = getCurrentLabPlan(state);\r\n        const addImagesUrl = selectedLabPlan\r\n            ? Constants.Urls.AddImages(currentTenantId, selectedLabPlan.id)\r\n            : undefined;\r\n        let images = filteredImages.map((o) => convertVNextImageToVmImageInfo(o)).toArray();\r\n        images = filterImagesByLabplanRegions(images, selectedLabPlan);\r\n        const hasImageError = !isLoading && images.length < 1;\r\n        const ltiContextTitle = getLtiContextTitle(state);\r\n        validateNameOnLoad = !!aadGroupName || !!ltiContextTitle;\r\n        return {\r\n            isSubmitting: isCreating,\r\n            labNames,\r\n            defaultIdleConfig,\r\n            isBastionEnabled,\r\n            isV2BastionEnabled,\r\n            isSkipTemplateEnabled,\r\n            images: images.sort(compareByText),\r\n            hasImageError,\r\n            currentTenantId,\r\n            addImagesUrl,\r\n            hasCapacityError,\r\n            validateNameOnLoad,\r\n            isLoading,\r\n            hasLoadError,\r\n            selectedLabPlan,\r\n            labPlans,\r\n            isCurrentLabParentLabAccount: isLabAccount,\r\n            currentLabParentId,\r\n            isLoadingOnSelectLabPlan,\r\n            hasSelectLabPlanLoadError,\r\n            skuData,\r\n        };\r\n    }\r\n});\r\nexport const getCreateLabContainerModel = memoize((state) => {\r\n    const currentLabParentId = getCurrentLabParentId(state);\r\n    const isLabAccount = isCurrentLabParentLabAccount(state);\r\n    let hasLabErrors;\r\n    if (isLabAccount) {\r\n        const labStore = state.get('labStore');\r\n        hasLabErrors = !labStore.get('errors').isEmpty();\r\n    }\r\n    else {\r\n        const labStore = state.get('vNextLabStore');\r\n        const errors = labStore\r\n            .get('errors')\r\n            .filter((value, key) => isLabInCurrentResourceGroup(key, currentLabParentId));\r\n        hasLabErrors = !errors.isEmpty();\r\n    }\r\n    const isSetGroupIdInQueryString = shouldFilterLabsByGroupId(state);\r\n    const aadGroupId = isSetGroupIdInQueryString ? getGroupId(state) : '';\r\n    const aadGroupName = isSetGroupIdInQueryString ? getGroupName(state) : '';\r\n    const labPlanStore = state.get('labPlanStore');\r\n    const labPlanLoadState = labPlanStore.get('loadState');\r\n    const isLoadingLabPlans = storeIsLoading(labPlanLoadState);\r\n    const hasLabPlanLoadError = storeHasLoadError(labPlanLoadState);\r\n    const createLabViewModel = getCreateLabViewModel(state);\r\n    const ltiContextTitle = getLtiContextTitle(state);\r\n    const isLms = isLmsHost(state);\r\n    let defaultLabName = '';\r\n    if (isLms) {\r\n        defaultLabName = ltiContextTitle ?? '';\r\n    }\r\n    else if (aadGroupName) {\r\n        defaultLabName = aadGroupName;\r\n    }\r\n    return {\r\n        hasLabErrors,\r\n        aadGroupId,\r\n        createLabViewModel,\r\n        defaultLabName,\r\n        isLoadingLabPlans,\r\n        hasLabPlanLoadError,\r\n    };\r\n});\r\n","import { defineMessages } from 'react-intl';\r\nconst messages = defineMessages({\r\n    requiredError: {\r\n        id: 'LabNameValidatorRequiredError',\r\n        defaultMessage: 'Lab name is required.',\r\n        description: 'Error shown for invalid lab name values.',\r\n    },\r\n    specialCharsError: {\r\n        id: 'LabNameValidatorSpecialCharsError',\r\n        defaultMessage: 'Lab name cannot contain special characters.',\r\n        description: 'Error shown for invalid lab name values.',\r\n    },\r\n    duplicateNameError: {\r\n        id: 'LabNameValidatorDuplicateNameError',\r\n        defaultMessage: 'A lab with this name already exists.',\r\n        description: 'Error shown for invalid lab name values.',\r\n    },\r\n});\r\nconst labNameRegex = /^[^<>%&:\\\\?/@#$^*().;+=~`\\u0000—\\u001F]+$/;\r\nexport function validateLabName(name, labNames, intl) {\r\n    if (!name || name.trim().length === 0) {\r\n        return intl.formatMessage(messages.requiredError);\r\n    }\r\n    else if (!labNameRegex.test(name)) {\r\n        return intl.formatMessage(messages.specialCharsError);\r\n    }\r\n    else if (labNames.some((o) => o.toLowerCase() === name.toLowerCase())) {\r\n        return intl.formatMessage(messages.duplicateNameError);\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    showUnavailable: {\r\n        id: 'VmGeographyPickerShowUnavailable',\r\n        defaultMessage: 'Show unavailable locations for this size',\r\n        description: 'Label for a checkbox to show / hide unavailable geographies for the selected size.',\r\n    },\r\n    showUnavailableSimplified: {\r\n        id: 'VmGeographyPickerSimplifiedShowUnavailable',\r\n        defaultMessage: 'Show unavailable locations',\r\n        description: 'Label for a checkbox to show / hide unavailable geographies for the selected size and image.',\r\n    },\r\n    placeholder: {\r\n        id: 'VmGeographyPickerPlaceholderText',\r\n        defaultMessage: 'Please select a location',\r\n        description: 'Placeholder text for the location picker when nothing is selected.',\r\n    },\r\n    simplifiedLocationLabel: {\r\n        id: 'NewLabConfigPageSimplifiedLocationLabel',\r\n        defaultMessage: 'Location',\r\n        description: 'Label for the location dropdown on the new lab flyout dialog based on simplified designs.',\r\n    },\r\n});\r\n","import { Checkbox, Dropdown, Separator } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, FormattedNumber, useIntl } from 'react-intl';\r\nimport { stringSorter } from '../../utils/sorting';\r\nimport { isGeographyAvailable } from './create-lab-selectors';\r\nimport { messages } from './vm-geography-picker-shared';\r\nconst Option = (option) => {\r\n    const { data, disabled, text } = option;\r\n    const { price, currencyCode } = data;\r\n    return disabled ? (<span>{text}</span>) : (<FormattedMessage id=\"VmGeoPickerTitle\" defaultMessage=\"{geo} ({price}/hr)\" description=\"The name of a geography and its price per hour.\" values={{\r\n        geo: text,\r\n        price: <FormattedNumber value={price} style=\"currency\" currency={currencyCode}/>,\r\n    }}/>);\r\n};\r\nconst getKey = (data) => {\r\n    return data.geographyName;\r\n};\r\nconst getText = (data) => {\r\n    return data.localizedDisplayName;\r\n};\r\nconst getOptions = (data) => {\r\n    const options = [];\r\n    Object.keys(data).forEach((key) => {\r\n        const geo = data[key];\r\n        const disabled = !isGeographyAvailable(geo);\r\n        const option = {\r\n            disabled,\r\n            key: getKey(geo),\r\n            text: getText(geo),\r\n            data: geo,\r\n        };\r\n        options.push(option);\r\n    });\r\n    const sorter = stringSorter();\r\n    return options.sort((a, b) => sorter(a.text, b.text));\r\n};\r\nexport const VmGeographyPicker = (props) => {\r\n    const { label, data, selected, required, onChange } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [showUnavailable, setShowUnavailable] = React.useState(false);\r\n    const options = getOptions(data);\r\n    const filteredOptions = !showUnavailable ? options.filter((o) => !o.disabled) : options;\r\n    const hasDisabledOptions = options.findIndex((o) => o.disabled === true) > -1;\r\n    const dropdownProps = {\r\n        label,\r\n        required,\r\n        options: filteredOptions,\r\n        placeholder: msg(messages.placeholder),\r\n        selectedKey: selected ? [getKey(selected)] : [],\r\n        styles: {\r\n            callout: { maxHeight: 300, overflowY: 'auto' },\r\n            root: { paddingBottom: '8px' },\r\n        },\r\n        onChange: (_, value) => {\r\n            const option = value;\r\n            // ignoring changes on focus so the dropdown doesn't pre-select something\r\n            // when the user clicks on it / focuses on it for the first time\r\n            if (_.type.toLowerCase() !== 'focus' && !option.disabled) {\r\n                onChange(option.data);\r\n            }\r\n        },\r\n        onRenderOption: (option) => (option ? <Option {...option}/> : null),\r\n        onRenderTitle: (options) => (options ? <Option {...options[0]}/> : null),\r\n        onRenderList: (renderProps, defaultRender) => {\r\n            return (<>\r\n                    <div style={{ maxHeight: '200px', overflowY: 'auto', overflowX: 'hidden' }}>\r\n                        {defaultRender && defaultRender(renderProps)}\r\n                    </div>\r\n                    {hasDisabledOptions && (<>\r\n                            <Separator styles={{ root: { padding: '0', margin: '0', height: '1px' } }}/>\r\n                            <Checkbox styles={{ root: { padding: '15px' } }} checked={showUnavailable} onChange={(_event, value) => setShowUnavailable(value || false)} label={msg(messages.showUnavailable)}/>\r\n                        </>)}\r\n                </>);\r\n        },\r\n    };\r\n    return <Dropdown {...dropdownProps} aria-required={required || undefined}/>;\r\n};\r\nexport default VmGeographyPicker;\r\n","import { Announced, DirectionalHint, Dropdown, Icon, Link, SearchBox, Separator, Stack, TooltipHost, getTheme, Checkbox, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { messages } from './create-lab-messages';\r\nimport { isSkuAvailable } from './create-lab-selectors';\r\nconst Footer = (props) => (<Link href={props.addImagesUrl} target=\"_blank\" className=\"custom-link-button\" styles={{ root: { color: getTheme().palette.themePrimary } }}>\r\n        <Stack horizontal tokens={{ childrenGap: '5' }} verticalAlign=\"center\" styles={{ root: { padding: 15 } }}>\r\n            <Stack.Item>\r\n                <Icon iconName=\"CirclePlus\"/>\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { paddingBottom: '2px' } }}>\r\n                <FormattedMessage id=\"VmImagePickerAdddImagesLink\" defaultMessage=\"Enable more image options\" description=\"Link text displayed in the VM image picker to add more images.\"/>\r\n            </Stack.Item>\r\n        </Stack>\r\n    </Link>);\r\nexport const VmImagePicker = (props) => {\r\n    const { onChange, skus, searchPlaceholder, addImagesUrl, required } = props;\r\n    const [filter, setFilter] = React.useState('');\r\n    const [showUnavailable, setShowUnavailable] = React.useState(false);\r\n    const [announce, setAnnounce] = React.useState(null);\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const itemStyle = {\r\n        paddingTop: 4,\r\n        paddingBottom: 4,\r\n        height: 'fit-content',\r\n        selectors: {\r\n            '.ms-Button-flexContainer': {\r\n                width: '100%',\r\n            },\r\n        },\r\n    };\r\n    const getOptions = (filterStr) => {\r\n        return props.options.filter((o) => o.text.toLowerCase().indexOf(filterStr) >= 0 ||\r\n            (o.subTitle && o.subTitle.toLowerCase().indexOf(filterStr) >= 0)).map((o) => ({\r\n            ...o,\r\n            disabled: !!skus && skus.every(s => !isSkuAvailable(s, o))\r\n        }));\r\n    };\r\n    const onSearchChange = (_, value) => {\r\n        const filterValue = value?.toLowerCase() || '';\r\n        setFilter(filterValue);\r\n        const options = getOptions(filterValue);\r\n        const searchResultAnnounce = (<Announced message={msg(messages.searchImagesResult, { numResults: options.length })} aria-live=\"assertive\"/>);\r\n        setAnnounce(searchResultAnnounce);\r\n    };\r\n    const options = getOptions(filter);\r\n    const filteredOptions = !showUnavailable ? options.filter((o) => !o.disabled) : options;\r\n    const hasDisabledOptions = options.some((o) => o.disabled);\r\n    const resolvedProps = {\r\n        ...props,\r\n        options: filteredOptions,\r\n        onDismiss: () => setFilter(''),\r\n        onChange: (_, value) => {\r\n            const option = value;\r\n            if (!option.disabled) {\r\n                onChange(option);\r\n            }\r\n        },\r\n        onRenderOption: (option) => (option ? renderOption(option) : null),\r\n        onRenderTitle: (options) => (options ? renderOption(options[0]) : null),\r\n        onRenderList: (renderProps, defaultRender) => {\r\n            return (<>\r\n                    {announce}\r\n                    <SearchBox placeholder={searchPlaceholder} styles={{ root: { margin: 10 } }} onChange={onSearchChange}/>\r\n                    <div style={{ maxHeight: '300px', overflowY: 'auto', overflowX: 'hidden' }}>\r\n                        {defaultRender && defaultRender(renderProps)}\r\n                    </div>\r\n                    {hasDisabledOptions && (<>\r\n                                <Separator styles={{ root: { padding: '0', margin: '0', height: '1px' } }}/>\r\n                                <Checkbox styles={{ root: { padding: '15px' } }} checked={showUnavailable} onChange={(_, value) => setShowUnavailable(value || false)} label={msg(messages.showUnavailableSimplified)}/>\r\n                            </>)}\r\n                    {addImagesUrl && (<>\r\n                            <Separator styles={{ root: { padding: '0', margin: '0', height: '1px' } }}/>\r\n                            <Footer addImagesUrl={addImagesUrl}/>\r\n                        </>)}\r\n                </>);\r\n        },\r\n        styles: {\r\n            title: {\r\n                lineHeight: 20,\r\n                height: 50,\r\n                paddingTop: 5,\r\n            },\r\n            dropdownItem: itemStyle,\r\n            dropdownItemSelected: itemStyle,\r\n            dropdownItemDisabled: itemStyle,\r\n            dropdownItemSelectedAndDisabled: itemStyle\r\n        },\r\n    };\r\n    return <Dropdown {...resolvedProps} aria-required={required || undefined}/>;\r\n};\r\nconst renderOption = (option) => {\r\n    const item = (<Stack horizontal verticalAlign=\"center\" styles={{ root: { overflow: 'hidden', width: '100%' } }}>\r\n            <Stack.Item>\r\n                <div style={{ marginRight: 7 }}>\r\n                    {option.iconUrl ? (<img width={35} aria-hidden src={option.iconUrl}/>) : (<Icon iconName={option.isWindows ? 'WindowsLogo' : 'LinuxLogo32'} styles={{\r\n        root: {\r\n            color: option.isWindows ? '#00BCF2' : '#484644',\r\n            fontSize: 30,\r\n            marginTop: 10,\r\n            marginRight: 7,\r\n        },\r\n    }}/>)}\r\n                </div>\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { overflow: 'hidden' } }}>\r\n                <div style={{\r\n        whiteSpace: 'nowrap',\r\n        overflow: 'hidden',\r\n        textOverflow: 'ellipsis',\r\n    }}>\r\n                    {option.text}\r\n                </div>\r\n                <div style={{\r\n        color: !option.disabled ? '#555555' : undefined,\r\n        fontSize: 12,\r\n    }}>\r\n                    {option.subTitle}\r\n                </div>\r\n            </Stack.Item>\r\n        </Stack>);\r\n    return !option.description ? (item) : (<TooltipHost content={<div dangerouslySetInnerHTML={{ __html: option.description || '' }}/>} directionalHint={DirectionalHint.leftCenter} styles={{ root: { width: '100%' } }}>\r\n            {item}\r\n        </TooltipHost>);\r\n};\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    showUnavailable: {\r\n        id: 'VmSizePickerShowUnavailable',\r\n        defaultMessage: 'Show unavailable sizes',\r\n        description: 'Label for a checkbox to show / hide unavailable sizes.',\r\n    },\r\n    placeholder: {\r\n        id: 'VmSizePickerPlaceholderText',\r\n        defaultMessage: 'Please select a size',\r\n        description: 'Placeholder text for the size picker when nothing is selected.',\r\n    },\r\n    simplifiedSizeLabel: {\r\n        id: 'NewLabConfigPageSimplifiedSizeLabel',\r\n        defaultMessage: 'Virtual machine size',\r\n        description: 'Label for size drop-down on new lab flyout dialog based on simplified designs.',\r\n    },\r\n});\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { Checkbox, DirectionalHint, Dropdown, Separator, Stack, TooltipHost, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, FormattedNumber, useIntl } from 'react-intl';\r\nimport memoize from 'memoize-one';\r\nimport { DefaultCurrencyCode } from '../../utils/constants';\r\nimport { numberSorter } from '../../utils/sorting';\r\nimport { messages as createLabMessages } from './create-lab-messages';\r\nimport { messages } from './vm-size-picker-shared';\r\nimport { isVCurrentSizeDisabled } from './create-lab-selectors';\r\nconst Option = (option) => {\r\n    const { data, minPrice, maxPrice, currencyCode, disabled } = option;\r\n    const localizedDescription = data.localizedDescription;\r\n    const localizedDisplayName = data.localizedDisplayName;\r\n    const coresCount = data.coresCount;\r\n    const memoryInGb = data.memoryInGb;\r\n    let label;\r\n    if (disabled) {\r\n        label = <span>{localizedDisplayName}</span>;\r\n    }\r\n    else if (minPrice !== maxPrice) {\r\n        label = (<FormattedMessage id=\"VmSizePickerTitleMinAndMaxPrice\" defaultMessage=\"{size} ({minPrice}-{maxPrice}/hr)\" description=\"The name of a size and its min and max price per hour. {size} is the name of the size, {minPrice} is the minimum price, {maxPrice} is the maximum price.\" values={{\r\n            size: localizedDisplayName,\r\n            minPrice: <FormattedNumber value={minPrice} style=\"currency\" currency={currencyCode}/>,\r\n            maxPrice: <FormattedNumber value={maxPrice} style=\"currency\" currency={currencyCode}/>,\r\n        }}/>);\r\n    }\r\n    else {\r\n        label = (<FormattedMessage id=\"VmSizePickerTitle\" defaultMessage=\"{size} ({price}/hr)\" description=\"The name of a size and its price per hour. {size} is the name of the size and {price} is the price.\" values={{\r\n            size: localizedDisplayName,\r\n            price: <FormattedNumber value={minPrice} style=\"currency\" currency={currencyCode}/>,\r\n        }}/>);\r\n    }\r\n    return (<TooltipHost content={localizedDescription} directionalHint={DirectionalHint.leftCenter} styles={{ root: { width: '100%' } }}>\r\n            <Stack styles={{ root: { width: '100%' } }}>\r\n                <Stack.Item>{label}</Stack.Item>\r\n                <Stack.Item>\r\n                    <div style={{ color: !option.disabled ? '#555555' : undefined, fontSize: 12 }}>\r\n                        <FormattedMessage {...createLabMessages.vmSizePickerFormat} values={{\r\n        numberOfCores: coresCount,\r\n        memorySize: memoryInGb,\r\n    }}/>\r\n                    </div>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </TooltipHost>);\r\n};\r\nconst getKey = (size) => {\r\n    return size.sizeName;\r\n};\r\nconst getText = (size) => {\r\n    return size.localizedDisplayName;\r\n};\r\nconst getMinPriceMaxPriceAndCurrency = (size) => {\r\n    let minPrice = 0;\r\n    let maxPrice = 0;\r\n    let currency = undefined;\r\n    const geographies = size.geographies || size.locations;\r\n    Object.keys(geographies).forEach((key) => {\r\n        const geography = geographies[key];\r\n        if (geography.availability !== Ml.Availability.Available) {\r\n            return;\r\n        }\r\n        const { price, currencyCode } = geography;\r\n        if (!currency) {\r\n            currency = currencyCode;\r\n        }\r\n        if (!minPrice || minPrice > price) {\r\n            minPrice = price;\r\n        }\r\n        if (!maxPrice || maxPrice < price) {\r\n            maxPrice = price;\r\n        }\r\n    });\r\n    return { minPrice, maxPrice, currencyCode: currency || DefaultCurrencyCode };\r\n};\r\nconst getOptions = memoize((data, coreQuotaData) => {\r\n    const options = [];\r\n    Object.keys(data).forEach((key) => {\r\n        const size = data[key];\r\n        const disabled = isVCurrentSizeDisabled(size, coreQuotaData);\r\n        const { minPrice, maxPrice, currencyCode } = getMinPriceMaxPriceAndCurrency(size);\r\n        const option = {\r\n            disabled,\r\n            key: getKey(size),\r\n            text: getText(size),\r\n            minPrice,\r\n            maxPrice,\r\n            currencyCode,\r\n            data: size,\r\n        };\r\n        options.push(option);\r\n    });\r\n    const sorter = numberSorter();\r\n    return options.sort((a, b) => sorter(a.data.ordinal, b.data.ordinal));\r\n});\r\nconst itemStyle = {\r\n    paddingTop: 4,\r\n    paddingBottom: 4,\r\n    height: 'fit-content',\r\n    selectors: {\r\n        '.ms-Button-flexContainer': {\r\n            width: '100%',\r\n        },\r\n    },\r\n};\r\nexport const VmSizePicker = (props) => {\r\n    const { label, data, coreQuotaData, selected, required, onChange } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [showUnavailable, setShowUnavailable] = React.useState(false);\r\n    const options = getOptions(data, coreQuotaData);\r\n    const filteredOptions = !showUnavailable ? options.filter((o) => !o.disabled) : options;\r\n    const hasDisabledSize = options.some((x) => x.disabled);\r\n    const dropdownProps = {\r\n        label,\r\n        required,\r\n        options: filteredOptions,\r\n        placeholder: msg(messages.placeholder),\r\n        selectedKey: selected ? [getKey(selected)] : [],\r\n        styles: {\r\n            callout: {\r\n                maxHeight: '300px',\r\n                overflowY: 'auto',\r\n                overflowX: 'hidden',\r\n            },\r\n            title: {\r\n                lineHeight: 20,\r\n                height: 50,\r\n                paddingTop: 5,\r\n            },\r\n            dropdownItem: itemStyle,\r\n            dropdownItemSelected: itemStyle,\r\n            dropdownItemDisabled: itemStyle,\r\n            dropdownItemSelectedAndDisabled: itemStyle,\r\n            root: {\r\n                paddingBottom: '8px',\r\n            },\r\n        },\r\n        onChange: (_, value) => {\r\n            const option = value;\r\n            if (!option.disabled) {\r\n                onChange(option.data);\r\n            }\r\n        },\r\n        onRenderOption: (option) => (option ? <Option {...option}/> : null),\r\n        onRenderTitle: (options) => (options ? <Option {...options[0]}/> : null),\r\n        onRenderList: (renderProps, defaultRender) => {\r\n            return (<>\r\n                    <div style={{ maxHeight: '200px', overflowY: 'auto', overflowX: 'hidden' }}>\r\n                        {defaultRender && defaultRender(renderProps)}\r\n                    </div>\r\n                    {hasDisabledSize && (<>\r\n                            <Separator styles={{ root: { padding: '0', margin: '0', height: '1px' } }}/>\r\n                            <Checkbox styles={{ root: { padding: '15px 5px 15px 15px' } }} checked={showUnavailable} onChange={(_, value) => setShowUnavailable(value || false)} label={msg(messages.showUnavailable)}/>\r\n                        </>)}\r\n                </>);\r\n        },\r\n    };\r\n    return <Dropdown {...dropdownProps} aria-required={required || undefined}/>;\r\n};\r\nexport default VmSizePicker;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { ShimmerElementsGroup, ShimmerElementType } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { RequestLimitIncreaseLink } from '../../common/request-limit-increase-link';\r\nimport { getVCurrentMinMaxVmCores, getVCurrentRemainingCores } from './create-lab-selectors';\r\nconst labelShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.line, width: '75%', height: 18 },\r\n    { type: ShimmerElementType.gap, width: '25%', height: 18 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 7 }]}/>\r\n    </>);\r\nconst gapShimmer = (<ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: '100%', height: 31 }]}/>);\r\nexport const LabConfigShimmer = (<>\r\n        {labelShimmer}\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 50 }]}/>\r\n        {gapShimmer}\r\n        {labelShimmer}\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 50 }]}/>\r\n        {gapShimmer}\r\n        {labelShimmer}\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.line, width: '100%', height: 33 }]}/>\r\n    </>);\r\nexport const CoresNotAvailableMessage = (props) => {\r\n    const { labParentId, currentTenantId, coreQuotaData, sizes } = props;\r\n    const { minVmCores: minGpuVmCores, maxVmCores: maxGpuVmCores } = getVCurrentMinMaxVmCores(Ml.GpuType.Gpu, sizes);\r\n    const { minVmCores: minStandardVmCores, maxVmCores: maxStandardVmCores } = getVCurrentMinMaxVmCores(Ml.GpuType.None, sizes);\r\n    if (!coreQuotaData) {\r\n        return <></>;\r\n    }\r\n    const { remainingGpuCores, remainingStandardCores } = getVCurrentRemainingCores(coreQuotaData);\r\n    if (minGpuVmCores === undefined ||\r\n        maxGpuVmCores === undefined ||\r\n        minStandardVmCores === undefined ||\r\n        maxStandardVmCores === undefined ||\r\n        remainingGpuCores === undefined ||\r\n        remainingStandardCores === undefined) {\r\n        return <></>;\r\n    }\r\n    let message;\r\n    if ((remainingGpuCores < minGpuVmCores && remainingStandardCores < maxStandardVmCores) ||\r\n        (remainingStandardCores < minStandardVmCores && remainingGpuCores < maxGpuVmCores)) {\r\n        message = (<FormattedMessage id=\"SizesLimitedForLabCreationMessage\" defaultMessage=\"Some sizes are not available due to virtual machine limits on your account.\" description=\"Message on lab create flyout informing user some sizes are limited for lab creation.\"/>);\r\n    }\r\n    else if (remainingGpuCores < minGpuVmCores) {\r\n        message = (<FormattedMessage id=\"GpuSizeNotAvailableForLabCreationMessage\" defaultMessage=\"GPU sizes are not available due to virtual machine limits on your account.\" description=\"Message on lab create flyout informing user they cannot create any GPU machines.\"/>);\r\n    }\r\n    else if (remainingStandardCores < minStandardVmCores) {\r\n        message = (<FormattedMessage id=\"StandardSizeNotAvailableForLabCreationMessage\" defaultMessage=\"Standard sizes are not available due to virtual machine limits on your account.\" description=\"Message on lab create flyout informing user they cannot create any Standard machines.\"/>);\r\n    }\r\n    if (!message) {\r\n        return <></>;\r\n    }\r\n    return (<div style={{ fontSize: '12px', marginTop: '30px' }}>\r\n            {message}\r\n            <RequestLimitIncreaseLink labParentId={labParentId} tenantId={currentTenantId}/>\r\n        </div>);\r\n};\r\n","import { Stack, TextField, Toggle, Link, Shimmer } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, FormattedNumber, useIntl } from 'react-intl';\r\nimport LinuxRdpDialog from '../../common/connection-type/linux-rdp-dialog';\r\nimport InfoTip from '../../common/info-tip';\r\nimport { OperatingSystem } from '../../data/models/environment-common';\r\nimport Constants, { DefaultCurrencyCode } from '../../utils/constants';\r\nimport { messages } from './create-lab-messages';\r\nimport { isGeographyAvailable, areAllGeosAvailable, getVCurrentSizeData, getVCurrentGeographyData, areAllVCurrentSizesAvailable, isVCurrentGpuSize, } from './create-lab-selectors';\r\nimport { validateLabName } from './lab-name-validator';\r\nimport { VmGeographyPicker } from './vm-geography-picker';\r\nimport { VmImagePicker } from './vm-image-picker';\r\nimport { VmSizePicker } from './vm-size-picker';\r\nimport { CoresNotAvailableMessage, LabConfigShimmer } from './create-lab-config-page-shared';\r\nexport const NewLabConfigPage = (props) => {\r\n    const { name, validateNameOnLoad, image, size, geography, pricingAndAvailabilityData, coreQuotaData, images, labNames, labParentId, currentTenantId, canSelectGeography, isRdpEnabled, installGpuDriverEnabled, customizeTemplate, isBastionEnabled, addImagesUrl, isLoadingLabPlanImages, onNameChange, onNameValidation, onImageChange, onSizeChange, onGeographyChange, onRdpEnabledChange, onInstallGpuDriverEnabledChange, onCustomizeTemplateChange, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const newLabConfigIntro = messages.newLabConfigPageIntro;\r\n    const labNameLabel = msg(messages.nameLabel);\r\n    const vmImagePickerLabel = msg(messages.imageLabel);\r\n    const vmSizePickerLabel = msg(messages.sizeLabel);\r\n    const vmGeographyPickerLabel = msg(messages.locationLabel);\r\n    const [linuxRdpDialogAcknowledged, setLinuxRdpDialogAcknowledged] = React.useState(false);\r\n    const [showLinuxRdpDialog, setShowLinuxRdpDialog] = React.useState(false);\r\n    let sizes;\r\n    let geographies;\r\n    let shouldShowSizeGeoAvailabilityLink;\r\n    if (!isLoadingLabPlanImages && !!image && !!pricingAndAvailabilityData) {\r\n        sizes = getVCurrentSizeData(pricingAndAvailabilityData, image.isWindows ? OperatingSystem.Windows : OperatingSystem.Linux);\r\n        geographies = size ? getVCurrentGeographyData(sizes, size) : {};\r\n        shouldShowSizeGeoAvailabilityLink =\r\n            !areAllGeosAvailable(geographies) || !areAllVCurrentSizesAvailable(sizes, coreQuotaData);\r\n    }\r\n    const handleSizeChange = (value) => {\r\n        if (!pricingAndAvailabilityData) {\r\n            return;\r\n        }\r\n        if (!!size) {\r\n            if (value.sizeName === size.sizeName) {\r\n                return;\r\n            }\r\n        }\r\n        const sizeData = getVCurrentSizeData(pricingAndAvailabilityData, image.isWindows ? OperatingSystem.Windows : OperatingSystem.Linux);\r\n        const geoData = getVCurrentGeographyData(sizeData, value);\r\n        const geoNames = Object.keys(geoData)\r\n            .map((key) => geoData[key])\r\n            .filter((geo) => isGeographyAvailable(geo))\r\n            .map((geo) => geo.geographyName);\r\n        if (geoNames.length === 1) {\r\n            const geo = geoData[geoNames[0]];\r\n            onSizeChange(value, geo);\r\n        }\r\n        else {\r\n            onSizeChange(value, geography);\r\n        }\r\n    };\r\n    return (<>\r\n            <Stack tokens={{ childrenGap: 30 }}>\r\n                <Stack.Item>\r\n                    <FormattedMessage {...newLabConfigIntro}/>\r\n                    {shouldShowSizeGeoAvailabilityLink && (<div style={{ fontSize: '12px' }}>\r\n                            <Link href={Constants.Urls.DisabledSizesGeo} styles={{ root: { textDecoration: 'underline' } }} target=\"_blank\">\r\n                                <FormattedMessage {...messages.sizesAndGeoNotAvailableCreateLabLinkText}/>\r\n                            </Link>\r\n                        </div>)}\r\n                    {!!sizes && (<CoresNotAvailableMessage labParentId={labParentId} currentTenantId={currentTenantId} sizes={sizes} coreQuotaData={coreQuotaData}/>)}\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <TextField label={labNameLabel} placeholder={msg(messages.namePlaceholder)} autoFocus={true} spellCheck={false} maxLength={100} value={name} validateOnLoad={validateNameOnLoad} onChange={(_, value) => onNameChange(value || '')} required={true} aria-required={true} onGetErrorMessage={(value) => {\r\n        // trimming for validation name so we compare correctly against the list of lab\r\n        // names that already exist\r\n        const result = validateLabName(value.trim(), labNames, intl);\r\n        onNameValidation(!result);\r\n        return result || '';\r\n    }}/>\r\n                </Stack.Item>\r\n                <Shimmer isDataLoaded={!isLoadingLabPlanImages} customElementsGroup={LabConfigShimmer} width=\"100%\">\r\n                    {!!sizes && !!geographies && (<Stack tokens={{ childrenGap: 30 }}>\r\n                            <Stack.Item>\r\n                                <VmImagePicker label={vmImagePickerLabel} searchPlaceholder={msg(messages.searchImages)} options={images} selectedKey={image.key} required={true} addImagesUrl={addImagesUrl} onChange={onImageChange}/>\r\n                            </Stack.Item>\r\n                            {props.isSkipTemplateEnabled && (<Stack.Item>\r\n                                    <Stack horizontal styles={{ root: { marginTop: '15px !important' } }}>\r\n                                        <Stack.Item>\r\n                                            <Toggle label={msg(messages.customizeImageLabel)} ariaLabel={msg(messages.customizeImageLabel)} inlineLabel={true} checked={customizeTemplate} onChange={(_, value) => onCustomizeTemplateChange(value || false)}/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item>\r\n                                            <InfoTip content={msg(messages.customizeImageDescription)} styles={{ root: { paddingTop: '7px' } }}/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                </Stack.Item>)}\r\n                            <Stack.Item>\r\n                                <Stack>\r\n                                    <Stack.Item>\r\n                                        <VmSizePicker label={vmSizePickerLabel} data={sizes} coreQuotaData={coreQuotaData} selected={size} required={true} onChange={handleSizeChange}/>\r\n                                    </Stack.Item>\r\n                                    {size && isVCurrentGpuSize(size) && (<Stack.Item>\r\n                                            <Stack horizontal styles={{ root: { paddingTop: '15px' } }}>\r\n                                                <Stack.Item>\r\n                                                    <Toggle label={msg(messages.gpuLabel)} inlineLabel={true} checked={installGpuDriverEnabled} onChange={(_, value) => onInstallGpuDriverEnabledChange(value || false)}/>\r\n                                                </Stack.Item>\r\n                                                <Stack.Item styles={{ root: { paddingTop: '7px' } }}>\r\n                                                    <InfoTip content={msg(messages.gpuDriverTooltipText)} styles={{ root: { paddingTop: '7px' } }}/>\r\n                                                </Stack.Item>\r\n                                            </Stack>\r\n                                            {!installGpuDriverEnabled && (<Stack.Item>\r\n                                                    <FormattedMessage {...messages.newLabConfigPageGpuOptOutText}/>\r\n                                                </Stack.Item>)}\r\n                                        </Stack.Item>)}\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <Stack>\r\n                                    {canSelectGeography && (<Stack.Item>\r\n                                            <VmGeographyPicker label={vmGeographyPickerLabel} data={geographies} selected={geography} required={true} onChange={onGeographyChange}/>\r\n                                        </Stack.Item>)}\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                            {!image.isWindows && !isBastionEnabled && (<Stack.Item>\r\n                                    <Toggle label={msg(messages.rdpLabel)} inlineLabel={true} checked={isRdpEnabled} onChange={(_, value) => !linuxRdpDialogAcknowledged && !isRdpEnabled\r\n        ? setShowLinuxRdpDialog(true)\r\n        : onRdpEnabledChange(value || false)}/>\r\n                                </Stack.Item>)}\r\n                            <Stack.Item>\r\n                                <span id=\"totalPice\" style={{ backgroundColor: '#F3F2F1', fontWeight: 600, padding: 8 }}>\r\n                                    <FormattedMessage {...messages.newLabConfigPageTotalPriceFormat} values={{\r\n        price: (<FormattedNumber value={geography ? geography.price : 0} style=\"currency\" currency={geography ? geography.currencyCode : DefaultCurrencyCode}/>),\r\n    }}/>\r\n                                </span>\r\n                            </Stack.Item>\r\n                        </Stack>)}\r\n                </Shimmer>\r\n            </Stack>\r\n            {showLinuxRdpDialog && (<LinuxRdpDialog onSubmit={() => {\r\n        setLinuxRdpDialogAcknowledged(true);\r\n        onRdpEnabledChange(true);\r\n        setShowLinuxRdpDialog(false);\r\n    }} onDismiss={() => setShowLinuxRdpDialog(false)}/>)}\r\n        </>);\r\n};\r\nexport default NewLabConfigPage;\r\n","import { defineMessages } from 'react-intl';\r\nconst messages = defineMessages({\r\n    requiredError: {\r\n        id: 'UsernameValidatorRequiredError',\r\n        defaultMessage: 'Username is required.',\r\n        description: 'Error shown for invalid username values.',\r\n    },\r\n    reservedError: {\r\n        id: 'UsernameValidatorReservedError',\r\n        defaultMessage: 'Usernames cannot match one of the reserved words.',\r\n        description: 'Error shown for invalid username values.',\r\n    },\r\n    endsWithPeriodError: {\r\n        id: 'UsernameValidatorEndsWithPeriodError',\r\n        defaultMessage: 'Usernames cannot end with a period (.)',\r\n        description: 'Error shown for invalid username values.',\r\n    },\r\n    windowsSpecialCharsError: {\r\n        id: 'UsernameValidatorWindowsSpecialCharsError',\r\n        defaultMessage: 'Usernames cannot contain the following characters: {invalidChars}',\r\n        description: 'Error shown for invalid username values. {invalidChars} is a list of invalid characters.',\r\n    },\r\n    startsWithNumberError: {\r\n        id: 'UsernameValidatorStartsWithNumberError',\r\n        defaultMessage: \"Usernames cannot start with a number, '$', '~', or '-'\",\r\n        description: 'Error shown for invalid username values.',\r\n    },\r\n    linuxSpecialCharsError: {\r\n        id: 'UsernameValidatorLinuxSpecialCharsError',\r\n        defaultMessage: 'Usernames cannot contain uppercase letters or the following characters: {invalidChars}',\r\n        description: 'Error shown for invalid username values. {invalidChars} is a list of invalid characters.',\r\n    },\r\n    unicodeCharsError: {\r\n        id: 'UsernameValidatorUnicodeCharsError',\r\n        defaultMessage: 'Usernames cannot contain Unicode characters with codes below 0x20 or above 0x7E.',\r\n        description: 'Error shown for invalid username values.',\r\n    },\r\n});\r\n// The reserved user name list is copied from the managed lab service code\r\n// `EnvironmentSetting.Business.Validators.ReservedUsernames`\r\nconst reservedUsernames = [\r\n    'administrator',\r\n    'admin',\r\n    'user',\r\n    'user1',\r\n    'user2',\r\n    'user3',\r\n    'user4',\r\n    'user5',\r\n    'admin1',\r\n    'admin2',\r\n    '1',\r\n    '123',\r\n    'a',\r\n    'actuser',\r\n    'adm',\r\n    'aspnet',\r\n    'backup',\r\n    'console',\r\n    'david',\r\n    'guest',\r\n    'john',\r\n    'owner',\r\n    'root',\r\n    'server',\r\n    'sql',\r\n    'support',\r\n    'support_388945a0',\r\n    'sys',\r\n    'test',\r\n    'test1',\r\n    'test2',\r\n    'test3',\r\n];\r\n// Allowed username characters.\r\nconst allowedCharactersRegex = /^[\\u0020-\\u007E]*$/;\r\n// Windows user name cannot end with a period (.) or contain the following characters\r\n// \\/\"[]:|<>+=;,?*@\r\nconst windowsInvalidCharactersRegex = /[\\\\/\"\\[\\]:|<>+=;,?*@]/;\r\nconst windowsInvalidChars = '\\\\/\"[]:|<>+=;,?*@';\r\nconst windowsEndsWithPeriodRegex = /\\.$/;\r\n// Linux username cannot start with '$', '-' or contain the following characters\r\n// A-Z \\/\"\"[]:|<>+=;,?*@#()!\r\nconst linuxInvalidCharactersRegex = /[A-Z \\\\/\"\\[\\]:|<>+=;,?*@#()!]/;\r\nconst linuxInvalidChars = ' \\\\/\"[]:|<>+=;,?*@#()!';\r\nconst linuxInvalidStartChars = /^[$~\\-]/;\r\nconst linuxStartsWithNumberRegex = /^[0-9]/;\r\nexport function validateUsername(name, isWindows, intl) {\r\n    if (!name || name.trim().length === 0) {\r\n        return intl.formatMessage(messages.requiredError);\r\n    }\r\n    else if (reservedUsernames.indexOf(name.toLowerCase()) >= 0) {\r\n        return intl.formatMessage(messages.reservedError);\r\n    }\r\n    else if (isWindows && windowsEndsWithPeriodRegex.test(name)) {\r\n        return intl.formatMessage(messages.endsWithPeriodError);\r\n    }\r\n    else if (isWindows && windowsInvalidCharactersRegex.test(name)) {\r\n        return intl.formatMessage(messages.windowsSpecialCharsError, { invalidChars: windowsInvalidChars });\r\n    }\r\n    else if (!isWindows && (linuxStartsWithNumberRegex.test(name) || linuxInvalidStartChars.test(name))) {\r\n        return intl.formatMessage(messages.startsWithNumberError);\r\n    }\r\n    else if (!isWindows && linuxInvalidCharactersRegex.test(name)) {\r\n        return intl.formatMessage(messages.linuxSpecialCharsError, { invalidChars: linuxInvalidChars });\r\n    }\r\n    else if (!allowedCharactersRegex.test(name)) {\r\n        return intl.formatMessage(messages.unicodeCharsError);\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\n","import { Stack, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport PasswordField from '../../common/password-field/password-field';\r\nimport Constants from '../../utils/constants';\r\nimport { validateUsername } from './username-validator';\r\nexport const CreateLabCredentials = (props) => {\r\n    const { username, password, isPasswordValid, usernamePlaceholder, passwordPlaceholder, usernameLabel, passwordLabel, passwordInfoTipEnabled, headerMessage, isWindows, isVNext, onUsernameChange, onPasswordChange, onUsernameValidationChange, onPasswordValidationChange, } = props;\r\n    const intl = useIntl();\r\n    return (<Stack tokens={{ childrenGap: isVNext ? 19 : 30 }}>\r\n            <Stack.Item style={{ paddingTop: 0 }}>\r\n                <FormattedMessage {...headerMessage}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <TextField label={usernameLabel} placeholder={usernamePlaceholder} autoFocus={true} spellCheck={false} maxLength={isWindows ? 20 : 64} value={username} validateOnLoad={!!username} required={true} aria-required={true} onChange={(_event, value) => onUsernameChange(value || '')} onGetErrorMessage={(value) => {\r\n        const result = validateUsername(value, isWindows, intl);\r\n        onUsernameValidationChange(!result);\r\n        return result || '';\r\n    }}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <PasswordField infoTipEnabled={passwordInfoTipEnabled} customLabel={passwordLabel} placeholder={passwordPlaceholder} {...(isWindows ? Constants.WindowsPasswordLength : Constants.LinuxPasswordLength)} value={password} validateOnLoad={!!password} isValid={isPasswordValid} required={true} onValidationChange={(value) => onPasswordValidationChange(value)} onChange={(_event, value) => onPasswordChange(value || '')}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default CreateLabCredentials;\r\n","import { Stack, Toggle } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport InfoTip from './info-tip';\r\nexport const PasswordSettingsField = (props) => {\r\n    const { showHeader, disabled, disabledReason, input: { value, onChange }, } = props;\r\n    return (<>\r\n            {showHeader && (<div className=\"ms-fontWeight-semibold\" style={{ marginBottom: 12 }}>\r\n                    <FormattedMessage id=\"PasswordSettingsFieldHeader\" defaultMessage=\"Password settings\" description=\"Subtitle on the Settings page.\"/>\r\n                </div>)}\r\n            <Stack horizontal>\r\n                <Stack.Item>\r\n                    <Toggle label={<FormattedMessage id=\"PasswordSettingsFieldLabel\" defaultMessage=\"Use same password for all virtual machines\" description=\"Label for enable shared password toggle on the Settings page.\"/>} disabled={disabled} inlineLabel={true} checked={value} onChange={(_, value) => onChange(value)}/>\r\n                </Stack.Item>\r\n                {disabledReason && (<Stack.Item>\r\n                        <InfoTip content={disabledReason} styles={{ root: { paddingTop: '7px' } }}/>\r\n                    </Stack.Item>)}\r\n            </Stack>\r\n            <FormattedMessage id=\"PasswordSettingsFieldDescription\" defaultMessage=\"If this setting is disabled, each student will be prompted for a new password at first logon.\" description=\"Text on the Settings page.\"/>\r\n        </>);\r\n};\r\n","import { Checkbox, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { CreateLabCredentials } from './create-lab-credentials';\r\nimport { PasswordSettingsField } from '../../common/password-settings-field';\r\nimport { messages } from './create-lab-messages';\r\nimport { isUbuntuImage } from './create-lab-selectors';\r\nimport { Collapse } from 'react-collapse';\r\nimport './create-lab-credentials-page.css';\r\nexport const NewLabCredentialsPage = (props) => {\r\n    const { isVNext, image, customizeTemplate, username, password, nonAdminUsername, nonAdminPassword, useSharedPassword, isNonAdminEnabled, isPasswordValid, isNonAdminPasswordValid, onUsernameChange, onPasswordChange, onUseSharedPasswordChange, onUsernameValidationChange, onPasswordValidationChange, onNonAdminUsernameValidationChange, onNonAdminPasswordValidationChange, onNonAdminEnabledChange, onNonAdminUsernameChange, onNonAdminPasswordChange, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const isUseSharedPasswordEnabled = (!isUbuntuImage(image) && customizeTemplate) || isVNext;\r\n    const imageText = '[' + image.text + ']';\r\n    const headerMessage = image.isSpecialized\r\n        ? messages.newLabCredentialsPageIntroVnextSpecialized\r\n        : messages.newLabCredentialsPageIntroVnextGeneralized;\r\n    const [usernamePlaceholder, setUsernamePlaceholder] = React.useState(msg(messages.usernamePlaceholder));\r\n    const [usernameLabel, setUsernameLabel] = React.useState(msg(messages.usernameLabel));\r\n    const [passwordPlaceholder, setPasswordPlaceholder] = React.useState(msg(messages.passwordPlaceholder));\r\n    const [passwordLabel, setPasswordLabel] = React.useState(msg(messages.passwordLabel));\r\n    const [passwordInfoTipEnabled, setPasswordInfoTipEnabled] = React.useState(false);\r\n    const [useSharedPasswordCheckbox, setUseSharedPasswordCheckbox] = React.useState(true);\r\n    React.useEffect(() => {\r\n        if (isVNext) {\r\n            // state logic is here to maintain dependent states\r\n            if (isNonAdminEnabled) {\r\n                setUsernameLabel(msg(messages.usernameAdminLabel));\r\n                setPasswordLabel(msg(messages.passwordAdminLabel));\r\n                setPasswordInfoTipEnabled(image.isSpecialized);\r\n                if (!image.isSpecialized) {\r\n                    setUsernamePlaceholder(msg(messages.usernamePlaceholder));\r\n                    setPasswordPlaceholder(msg(messages.passwordPlaceholder));\r\n                }\r\n                else {\r\n                    setUsernamePlaceholder(msg(messages.usernameSpecializedAdminPlaceholder) + imageText);\r\n                    setPasswordPlaceholder(msg(messages.passwordSpecializedAdminPlaceholder));\r\n                }\r\n            }\r\n            else {\r\n                //if non-admin is disabled\r\n                setUsernameLabel(msg(messages.usernameLabel));\r\n                setPasswordLabel(msg(messages.passwordLabel));\r\n                setPasswordInfoTipEnabled(false);\r\n                if (!image.isSpecialized) {\r\n                    setUsernamePlaceholder(msg(messages.usernamePlaceholder));\r\n                    setPasswordPlaceholder(msg(messages.passwordPlaceholder));\r\n                }\r\n                else {\r\n                    setUsernamePlaceholder(msg(messages.usernameSpecializedPlaceholder) + imageText);\r\n                    setPasswordPlaceholder(msg(messages.passwordSpecializedPlaceholder));\r\n                }\r\n            }\r\n        }\r\n    }, [isNonAdminEnabled]);\r\n    // We need both the states, one that controls the state the ui checkbox,and the other for API request.\r\n    const onUseSharedPasswordOptionChange = (isUseSharedPasswordEnabled) => {\r\n        setUseSharedPasswordCheckbox(isUseSharedPasswordEnabled);\r\n        onUseSharedPasswordChange(isUseSharedPasswordEnabled);\r\n    };\r\n    const onNonAdminEnabledOptionChange = (isNonAdminOptionEnabled) => {\r\n        onNonAdminEnabledChange(isNonAdminOptionEnabled);\r\n    };\r\n    return (<>\r\n            {!isVNext ? (<Stack tokens={{ childrenGap: 30 }}>\r\n                    <Stack.Item>\r\n                        <CreateLabCredentials username={username} password={password} isPasswordValid={isPasswordValid} usernamePlaceholder={msg(messages.usernamePlaceholder)} passwordPlaceholder={msg(messages.passwordPlaceholder)} usernameLabel={msg(messages.usernameLabel)} passwordLabel={msg(messages.passwordLabel)} passwordInfoTipEnabled={false} headerMessage={messages.newLabCredentialsPageIntro} isWindows={image.isWindows} isVNext onUsernameChange={onUsernameChange} onPasswordChange={onPasswordChange} onUsernameValidationChange={onUsernameValidationChange} onPasswordValidationChange={onPasswordValidationChange}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <FormattedMessage {...messages.newLabCredentialsPagePasswordDescription}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <PasswordSettingsField showHeader={false} disabled={!isUseSharedPasswordEnabled} disabledReason={customizeTemplate || isVNext\r\n        ? undefined\r\n        : msg(messages.customizeImageNoSharedPasswordDescription)} input={{\r\n        value: isUseSharedPasswordEnabled ? useSharedPassword : false,\r\n        onChange: (value) => onUseSharedPasswordChange(value),\r\n    }}/>\r\n                    </Stack.Item>\r\n                </Stack>) : (<Stack>\r\n                    <Stack.Item styles={{\r\n        root: {\r\n            paddingBottom: '30px',\r\n            borderBottom: '1px solid #EDEBE9',\r\n            marginBottom: '25px',\r\n        },\r\n    }}>\r\n                        <CreateLabCredentials username={username} password={password} isPasswordValid={isPasswordValid} usernamePlaceholder={usernamePlaceholder} passwordPlaceholder={passwordPlaceholder} usernameLabel={usernameLabel} passwordLabel={passwordLabel} passwordInfoTipEnabled={passwordInfoTipEnabled} headerMessage={headerMessage} isWindows={image.isWindows} isVNext onUsernameChange={onUsernameChange} onPasswordChange={onPasswordChange} onUsernameValidationChange={onUsernameValidationChange} onPasswordValidationChange={onPasswordValidationChange}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <Checkbox checked={isNonAdminEnabled} label={msg(messages.newLabCredentialsPageNonAdminOption)} onChange={(_event, checked) => onNonAdminEnabledOptionChange(checked === true)}/>\r\n                        <Collapse isOpened={isNonAdminEnabled}>\r\n                            <Stack.Item styles={{\r\n        root: {\r\n            paddingTop: '10px',\r\n            paddingBottom: '16px',\r\n        },\r\n    }}>\r\n                                <CreateLabCredentials username={nonAdminUsername} password={nonAdminPassword} isPasswordValid={isNonAdminPasswordValid} usernamePlaceholder={msg(messages.usernamePlaceholder)} passwordPlaceholder={msg(messages.passwordPlaceholder)} usernameLabel={msg(messages.usernameNonAdminLabel)} passwordLabel={msg(messages.passwordNonAdminLabel)} passwordInfoTipEnabled={false} headerMessage={messages.newLabCredentialsPageNonAdminOptionDescription} isWindows={image.isWindows} isVNext onUsernameChange={onNonAdminUsernameChange} onPasswordChange={onNonAdminPasswordChange} onUsernameValidationChange={onNonAdminUsernameValidationChange} onPasswordValidationChange={onNonAdminPasswordValidationChange}/>\r\n                                <div style={{ paddingTop: '16px' }}>\r\n                                    <FormattedMessage {...messages.newLabCredentialsPageNonAdminOptionBottomDescription}/>\r\n                                </div>\r\n                            </Stack.Item>\r\n                        </Collapse>\r\n                    </Stack.Item>\r\n                    {<Stack.Item styles={{\r\n        root: {\r\n            paddingTop: '23px',\r\n            paddingBottom: '13px',\r\n        },\r\n    }}>\r\n                            <Checkbox label={msg(messages.useSharedPasswordCheckboxLabel)} checked={useSharedPassword} onChange={(_event, checked) => onUseSharedPasswordOptionChange(checked === true)}/>\r\n                            {useSharedPasswordCheckbox && (<Stack.Item styles={{\r\n        root: { paddingTop: '13px' },\r\n    }}>\r\n                                    <FormattedMessage {...messages.useSharedPasswordEnabledMessage}/>\r\n                                </Stack.Item>)}\r\n                        </Stack.Item>}\r\n                    {!useSharedPasswordCheckbox && !isNonAdminEnabled && (<Stack.Item>\r\n                            <FormattedMessage id=\"NoOptionSelectedMessage\" defaultMessage=\"Each lab user will be prompted for a new password at first logon.\" description=\"Message is displayed after the checkboxes when neither the non-admin nor the shared password boxes are checked.\"/>\r\n                        </Stack.Item>)}\r\n                </Stack>)}\r\n        </>);\r\n};\r\nexport default NewLabCredentialsPage;\r\n","import { Position, SpinButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nexport const SafeSpinButton = (props) => {\r\n    const msg = useIntl().formatMessage;\r\n    const { styles, autoFocus, label, ariaLabel, value, disabled, min, max, onChange, labelPosition } = props;\r\n    const validate = (value, delta, min, max) => {\r\n        const num = Number(value.trim()) + delta;\r\n        let result;\r\n        if (isNaN(num) || num < min) {\r\n            result = String(min);\r\n        }\r\n        else if (num > max) {\r\n            result = String(max);\r\n        }\r\n        else {\r\n            result = num.toFixed(0);\r\n        }\r\n        onChange(Number(result));\r\n        return result;\r\n    };\r\n    return (<SpinButton styles={styles} inputProps={{ autoFocus }} label={label} labelPosition={labelPosition ?? Position.top} ariaLabel={ariaLabel ?? label} incrementButtonAriaLabel={msg(commonMessages.incrementAriaLabel)} decrementButtonAriaLabel={msg(commonMessages.decrementAriaLabel)} disabled={disabled} min={min} max={max} value={value.toString()} onValidate={(value) => validate(value, 0, min, max)} onIncrement={(value) => validate(value, 1, min, max)} onDecrement={(value) => validate(value, -1, min, max)}/>);\r\n};\r\nexport default SafeSpinButton;\r\n","import { Dropdown, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\r\nimport { ConnectionType } from '../../data/models/environment-common';\r\nimport LinuxRdpDialog from './linux-rdp-dialog';\r\nimport InfoTip from '../info-tip';\r\nimport './connection-type-dropdown.css';\r\nconst messages = defineMessages({\r\n    label: {\r\n        id: 'ConnectionTypeFieldLabel',\r\n        defaultMessage: 'Enabled connection types',\r\n        description: 'Label for connection type drop-down.',\r\n    },\r\n    sshInBrowser: {\r\n        id: 'ConnectionTypeFieldSshInBrowser',\r\n        defaultMessage: 'Web access (SSH in browser)',\r\n        description: 'Connection type drop-down entry for accessing a VM through SSH protocol from a web browser.',\r\n    },\r\n    rdpInBrowser: {\r\n        id: 'ConnectionTypeFieldRdpInBrowser',\r\n        defaultMessage: 'Web access (RDP in browser)',\r\n        description: 'Connection type drop-down entry for accessing a VM through RDP protocol from a web browser.',\r\n    },\r\n    ssh: {\r\n        id: 'ConnectionTypeFieldSsh',\r\n        defaultMessage: 'Client connection (SSH)',\r\n        description: 'Connection type drop-down entry for accessing a VM through SSH protocol from a client.',\r\n    },\r\n    rdp: {\r\n        id: 'ConnectionTypeFieldRdp',\r\n        defaultMessage: 'Client connection (RDP)',\r\n        description: 'Connection type drop-down entry for accessing a VM through RDP protocol from a client.',\r\n    },\r\n    connectionTypeError: {\r\n        id: 'CommonConnectionTypeError',\r\n        defaultMessage: 'Select at least one connection type.',\r\n        description: 'Error message shown when no VM connection types are selected in a drop-down.',\r\n    },\r\n});\r\nconst getConnectionTypeLabelMap = (intl) => {\r\n    const { formatMessage: msg } = intl;\r\n    const map = {};\r\n    map[ConnectionType.Rdp] = msg(messages.rdp);\r\n    map[ConnectionType.Ssh] = msg(messages.ssh);\r\n    map[ConnectionType.RdpInBrowser] = msg(messages.rdpInBrowser);\r\n    map[ConnectionType.SshInBrowser] = msg(messages.sshInBrowser);\r\n    return map;\r\n};\r\nconst getOption = (connectionType, disabled, labelMap) => {\r\n    return {\r\n        key: connectionType,\r\n        text: labelMap[connectionType],\r\n        disabled,\r\n    };\r\n};\r\nconst getOptions = (isLinux, isBastionSupported, clientTypesDisabled, labelMap, isVNext) => {\r\n    const result = [];\r\n    if (isLinux) {\r\n        result.push(getOption(ConnectionType.Ssh, !isVNext, labelMap));\r\n        result.push(getOption(ConnectionType.Rdp, clientTypesDisabled, labelMap));\r\n        if (isBastionSupported) {\r\n            result.push(getOption(ConnectionType.SshInBrowser, !isVNext, labelMap));\r\n        }\r\n    }\r\n    else {\r\n        result.push(getOption(ConnectionType.Rdp, !isVNext, labelMap));\r\n        if (isBastionSupported) {\r\n            result.push(getOption(ConnectionType.RdpInBrowser, !isVNext, labelMap));\r\n        }\r\n    }\r\n    return result;\r\n};\r\nconst ConnectionTypeDropdownInjected = (props) => {\r\n    const { intl, clientTypesDisabled, isLinux, isBastionSupported, disabled, required, value, onChange, pristine, valid, isVNext, } = props;\r\n    const { formatMessage: msg } = intl;\r\n    const [showLinuxRdpDialog, setShowLinuxRdpDialog] = React.useState(false);\r\n    const toggleOption = (type) => {\r\n        const newValue = [...value];\r\n        const index = newValue.indexOf(type);\r\n        if (index > -1) {\r\n            newValue.splice(index, 1);\r\n        }\r\n        else {\r\n            newValue.push(type);\r\n        }\r\n        onChange(newValue);\r\n    };\r\n    const labelMap = getConnectionTypeLabelMap(intl);\r\n    const options = getOptions(isLinux, isBastionSupported, clientTypesDisabled, labelMap, isVNext);\r\n    const errorMessage = !pristine && !valid ? msg(messages.connectionTypeError) : undefined;\r\n    return (<>\r\n            {options.length > 1 && (<Dropdown label={msg(messages.label)} disabled={disabled} multiSelect={true} options={options} selectedKeys={value} required={required} aria-required={required || undefined} errorMessage={errorMessage} onChange={(_, option) => {\r\n        if (!option) {\r\n            return;\r\n        }\r\n        const { key, selected } = option;\r\n        if (isLinux && key == ConnectionType.Rdp && selected) {\r\n            setShowLinuxRdpDialog(true);\r\n        }\r\n        else {\r\n            toggleOption(key);\r\n        }\r\n    }} onRenderLabel={(props, defaultRender) => (<Stack horizontal verticalAlign=\"center\">\r\n                            <Stack.Item>{defaultRender(props)}</Stack.Item>\r\n                            {!isVNext && (<Stack.Item>\r\n                                    <InfoTip content={<FormattedMessage id=\"ConnectionTypeTooltip\" defaultMessage=\"The option to connect to virtual machines in a web browser is now available in preview. It can support up to 25 concurrent users, so labs with less than 25 users are best suited for this preview.\" description=\"Tooltip describing connection types setting.\"/>}/>\r\n                                </Stack.Item>)}\r\n                        </Stack>)} onRenderOption={(props, defaultRender) => (<Stack horizontal verticalAlign=\"center\">\r\n                            <Stack.Item>{defaultRender(props)}</Stack.Item>\r\n                            {(props?.key === ConnectionType.RdpInBrowser ||\r\n        props?.key === ConnectionType.SshInBrowser) &&\r\n        !isVNext && (<Stack.Item>\r\n                                        <span className=\"connection-type-dropdown-preview-tag\">\r\n                                            <FormattedMessage id=\"ConnectionTypePreview\" defaultMessage=\"preview\" description=\"Label next to connectype type drop-down item for connection types that are currently in preview state.\"/>\r\n                                        </span>\r\n                                    </Stack.Item>)}\r\n                        </Stack>)}/>)}\r\n            {showLinuxRdpDialog && (<LinuxRdpDialog onSubmit={() => {\r\n        toggleOption(ConnectionType.Rdp);\r\n        setShowLinuxRdpDialog(false);\r\n    }} onDismiss={() => {\r\n        setShowLinuxRdpDialog(false);\r\n    }}/>)}\r\n        </>);\r\n};\r\nexport const ConnectionTypeDropdown = injectIntl(ConnectionTypeDropdownInjected);\r\nexport default ConnectionTypeDropdown;\r\n","import { ConnectionType } from '../../data/models/environment-common';\r\nexport const areConnectionTypesValid = (isLinux, connectionTypes, isVNext) => {\r\n    if (!connectionTypes || connectionTypes.length === 0) {\r\n        // Must have at least one connection type\r\n        return false;\r\n    }\r\n    else if (!isVNext &&\r\n        isLinux &&\r\n        !(connectionTypes.includes(ConnectionType.Ssh) || connectionTypes.includes(ConnectionType.SshInBrowser))) {\r\n        // Linux OS must have at least one SSH connection type\r\n        return false;\r\n    }\r\n    else {\r\n        return true;\r\n    }\r\n};\r\n","import { Icon, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nconst InfoIcon = () => {\r\n    return (<Icon iconName=\"Info\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            paddingTop: '2px',\r\n        },\r\n    }}/>);\r\n};\r\nexport const InfoSection = ({ children }) => {\r\n    return (<Stack horizontal tokens={{ childrenGap: 8 }} verticalFill style={{ marginTop: 20, marginBottom: 20 }}>\r\n            <Stack.Item>\r\n                <InfoIcon />\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { paddingBottom: '2px', fontSize: '12px' } }}>{children}</Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default InfoSection;\r\n","import { Position, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport SafeSpinButton from '../safe-spin-button';\r\nconst GracePeriodInput = (props) => {\r\n    return (<Stack horizontal>\r\n            <Stack.Item>\r\n                <SafeSpinButton {...props} labelPosition={Position.end} styles={{ spinButtonWrapper: { maxWidth: 75 }, label: { fontWeight: 400 } }}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default GracePeriodInput;\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    title: {\r\n        id: 'ShutdownPolicyTitle',\r\n        defaultMessage: 'Automatic shutdown & disconnect',\r\n        description: 'Header for shutdown policy group of settings.',\r\n    },\r\n    disconnectOnIdleLabel: {\r\n        id: 'DisconnectOnIdleLabel',\r\n        defaultMessage: 'Disconnect users when virtual machines are idle',\r\n        description: 'Label for a checkbox inside shutdown policy group of settings.',\r\n    },\r\n    disconnectOnIdleInputLabel: {\r\n        id: 'DisconnectOnIdleInputLabel',\r\n        defaultMessage: 'minutes after idle state is detected',\r\n        description: 'Label which is shown after the input that specifies number of minutes before a shutdown policy setting is activated.',\r\n    },\r\n    disconnectOnIdleWarningText: {\r\n        id: 'DisconnectOnIdleWarningText',\r\n        defaultMessage: 'The changes here will not take effect until you restart the machine.',\r\n        description: 'Warning for disconnect on idle field (only shown when VM is running and field has been changed) that the changes will not take effect until the machine has been restarted.',\r\n    },\r\n    disconnectOnIdleInfoTipAriaLabel: {\r\n        id: 'DisconnectOnIdleInfoTipAriaLabel',\r\n        defaultMessage: 'This setting uses Window OS definition of idle, which uses two criteria: user absence, no keyboard or mouse input. And lack of resource consumption, all the processors and all the disks were idle for a certain percentage of time.',\r\n        description: 'Aria label for disconnect on idle info tip',\r\n    },\r\n    shutdownOnDisconnectLabel: {\r\n        id: 'ShutdownOnDisconnectLabel',\r\n        defaultMessage: 'Shut down virtual machines when users disconnect',\r\n        description: 'Label for a checkbox inside shutdown policy group of settings.',\r\n    },\r\n    shutdownOnDisconnectInputLabel: {\r\n        id: 'ShutdownOnDisconnectInputLabel',\r\n        defaultMessage: 'minutes after user disconnects',\r\n        description: 'Label which is shown after the input that specifies number of minutes before a shutdown policy setting is activated.',\r\n    },\r\n    shutdownOnDisconnectInfoTipAriaLabel: {\r\n        id: 'ShutdownOnDisconnectInfoTipAriaLabel',\r\n        defaultMessage: 'Shut down will occur when a Remote Desktop connection is disconnected for Windows machines, or an SSH connection is disconnected for Linux machines (only specific distrubutions and verisons of Linux are supported). You can specify how long the virtual machines should wait for the user to reconnect before automatically shutting down.',\r\n        description: 'Aria label for shutdown on disconnect info tip',\r\n    },\r\n    vNextShutdownOnDisconnectInfoTipAriaLabel: {\r\n        id: 'VNextShutdownOnDisconnectInfoTipAriaLabel',\r\n        defaultMessage: 'Shut down will occur when a Remote Desktop connection is disconnected for Windows machines, or an SSH connection is disconnected for Linux machines. You can specify how long the virtual machines should wait for the user to reconnect before automatically shutting down.',\r\n        description: 'Aria label for shutdown on disconnect info tip',\r\n    },\r\n    shutdownOnNoConnectLabel: {\r\n        id: 'ShutdownOnNoConnectLabel',\r\n        defaultMessage: 'Shut down virtual machines when users do not connect',\r\n        description: 'Label for a checkbox inside shutdown policy group of settings.',\r\n    },\r\n    shutdownOnNoConnectInputLabel: {\r\n        id: 'ShutdownOnNoConnectInputLabel',\r\n        defaultMessage: 'minutes after machine is started',\r\n        description: 'Label which is shown after the input that specifies number of minutes before a shutdown policy setting is activated.',\r\n    },\r\n    shutdownOnIdleLabel: {\r\n        id: 'ShutdownOnIdleLabel',\r\n        defaultMessage: 'Shut down idle virtual machines',\r\n        description: 'Label for a checkbox inside shutdown policy group of settings.',\r\n    },\r\n    shutdownOnIdleInfoTipAriaLabel: {\r\n        id: 'ShutdownOnIdleInfoTipAriaLabel',\r\n        defaultMessage: 'Shut down on idle helps manage costs in your labs. Idle based on absence is effective in most cases, but absence and resource usage allows machines in your lab to stay connected until long-running compute operations are complete. This is useful in data science classes, for example.',\r\n        description: 'Aria label for shutdown on idle info tip',\r\n    },\r\n});\r\nexport default messages;\r\n","import { Link } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport InfoTip from '../info-tip';\r\nexport const ShutdownOnDisconnectInfoTip = (props) => (<InfoTip ariaLabel={props.ariaLabel} content={<>\r\n                <p>\r\n                    <FormattedMessage id=\"ShutdownOnDisconnectTooltip1\" defaultMessage=\"Shut down will occur when a Remote Desktop connection is disconnected for Windows machines, or an SSH connection is disconnected for Linux machines (only <Link>specific distrubutions and verisons of Linux</Link> are supported).\" description=\"First line of tooltip for Shutdown on Disconnect setting. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n    Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-linuxidle\" target=\"_blank\">\r\n                                    {chunks}\r\n                                </Link>),\r\n}}/>\r\n                </p>\r\n                <p>\r\n                    <FormattedMessage id=\"ShutdownOnDisconnectTooltip2\" defaultMessage=\"You can specify how long the virtual machines should wait for the user to reconnect before automatically shutting down.\" description=\"Second line of tooltip for Shutdown on Disconnect setting.\"/>\r\n                </p>\r\n            </>}/>);\r\nexport const VNextShutdownOnDisconnectInfoTip = (props) => (<InfoTip ariaLabel={props.ariaLabel} content={<>\r\n                <p>\r\n                    <FormattedMessage id=\"VNextShutdownOnDisconnectTooltip1\" defaultMessage=\"Shut down will occur when a Remote Desktop connection is disconnected for Windows machines, or an SSH connection is disconnected for Linux machines.\" description=\"First line of tooltip for Shutdown on Disconnect setting.\"/>\r\n                </p>\r\n                <p>\r\n                    <FormattedMessage id=\"VNextShutdownOnDisconnectTooltip2\" defaultMessage=\"You can specify how long the virtual machines should wait for the user to reconnect before automatically shutting down.\" description=\"Second line of tooltip for Shutdown on Disconnect setting.\"/>\r\n                </p>\r\n            </>}/>);\r\nexport const DisconnectOnIdleInfoTip = (props) => (<InfoTip ariaLabel={props.ariaLabel} content={<>\r\n                <FormattedMessage id=\"DisconnectOnIdleTooltip1\" defaultMessage=\"This setting uses <Link>Window OS's definition of idle</Link>, which uses two criteria:\" description=\"First line of tooltip for Disconnect on Idle setting (list of points follows). <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n    Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-windowsidle\" target=\"_blank\">\r\n                                {chunks}\r\n                            </Link>),\r\n}}/>\r\n                <p>\r\n                    <FormattedMessage id=\"DisconnectOnIdleTooltip2\" defaultMessage=\"User absence - no keyboard or mouse input.\" description=\"Numbered item  under list of reasons why disconnect on idle occurs.\"/>\r\n                </p>\r\n                <p>\r\n                    <FormattedMessage id=\"DisconnectOnIdleTooltip3\" defaultMessage=\"Lack of resource consumption - all the processors and all the disks were idle for a certain % of time.\" description=\"Numbered item  under list of reasons why disconnect on idle occurs.\"/>\r\n                </p>\r\n            </>}/>);\r\nexport const ShutdownOnIdleInfoTip = (props) => (<InfoTip ariaLabel={props.ariaLabel} content={<>\r\n                <p>\r\n                    <FormattedMessage id=\"ShutdownOnIdleTooltip1\" defaultMessage=\"Shut down on idle helps manage costs in your labs.\" description=\"Description about enabling shutdown on Idle.\"/>\r\n                </p>\r\n                <p>\r\n                    <FormattedMessage id=\"ShutdownOnIdleTooltip2\" defaultMessage=\"Idle based on absence is effective in most cases, but absence and resource usage allows machines in your lab to stay connected until long-running compute operations are complete. This is useful in data science classes, for example.\" description=\"Description about idle contions for shutdown on Idle.\"/>\r\n                </p>\r\n            </>}/>);\r\n","import { Dropdown, Stack } from '@fluentui/react';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nconst messages = defineMessages({\r\n    idleUserAbsenceOption: {\r\n        id: 'IdleUserAbsenceOption',\r\n        defaultMessage: 'Detect idle based on user absence',\r\n        description: 'Checkbox option for custom idle detection based on user absence.',\r\n    },\r\n    idleUserAbsenceAndUsageOption: {\r\n        id: 'IdleUserAbsenceAndUsageOption',\r\n        defaultMessage: 'Detect idle based on user absence and resource usage',\r\n        description: 'Checkbox option for custom idle detection based on user absence and resource usage.',\r\n    },\r\n    idleCustomizeDropdownAriaLabel: {\r\n        id: 'IdleCustomizeDropdownAriaLabel',\r\n        defaultMessage: 'Custom idle detection dropdown based on either user absence or user absence and resource usage',\r\n        description: 'Aria label for custom idle detection based on user absence only or user absence and resource usage.',\r\n    },\r\n});\r\nexport const CustomIdleShutdownDropdown = (props) => {\r\n    const { value, onChange, disabled } = props;\r\n    const msg = useIntl().formatMessage;\r\n    const dropdownOptions = [\r\n        { key: LabServicesModels.ShutdownOnIdleMode.LowUsage, text: msg(messages.idleUserAbsenceAndUsageOption) },\r\n        { key: LabServicesModels.ShutdownOnIdleMode.UserAbsence, text: msg(messages.idleUserAbsenceOption) },\r\n    ];\r\n    const onSelectionChange = (option) => {\r\n        if (option) {\r\n            onChange(option.key === LabServicesModels.ShutdownOnIdleMode.UserAbsence\r\n                ? LabServicesModels.ShutdownOnIdleMode.UserAbsence\r\n                : LabServicesModels.ShutdownOnIdleMode.LowUsage);\r\n        }\r\n    };\r\n    return (<Stack horizontal styles={{\r\n        root: {\r\n            marginTop: '8px',\r\n            width: '100%',\r\n        },\r\n    }}>\r\n            <Stack.Item grow>\r\n                <Dropdown options={dropdownOptions} selectedKey={value} ariaLabel={msg(messages.idleCustomizeDropdownAriaLabel)} onChange={(_event, option, _index) => onSelectionChange(option)} disabled={disabled}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default CustomIdleShutdownDropdown;\r\n","import { Checkbox, Link, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport InfoSection from '../info-section';\r\nimport GracePeriodInput from './grace-period-input';\r\nimport { MaxGracePeriod, MinIdleGracePeriod, MinNoConnectGracePeriod } from './idle-config';\r\nimport messages from './messages';\r\nimport { isShutdownOnIdleEnabled } from './selectors';\r\nimport { DisconnectOnIdleInfoTip, ShutdownOnDisconnectInfoTip, ShutdownOnIdleInfoTip, VNextShutdownOnDisconnectInfoTip, } from './tooltips';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { CustomIdleShutdownDropdown } from './customize-shutdown-dropdown';\r\nexport const ShutdownPolicyGroup = (props) => {\r\n    const msg = useIntl().formatMessage;\r\n    const { idleConfig, disabled, onChange, isVNext, isLinuxSIG } = props;\r\n    const shutdownOnDisconnectInfoTipAriaLabel = isVNext\r\n        ? msg(messages.vNextShutdownOnDisconnectInfoTipAriaLabel)\r\n        : msg(messages.shutdownOnDisconnectInfoTipAriaLabel);\r\n    const disconnectOnIdleInfoTipAriaLabel = msg(messages.disconnectOnIdleInfoTipAriaLabel);\r\n    const shutdownOnIdleInfoTipAriaLabel = msg(messages.shutdownOnIdleInfoTipAriaLabel);\r\n    return (<Stack tokens={{ childrenGap: 15 }}>\r\n            <div className=\"ms-fontWeight-semibold\">\r\n                <FormattedMessage {...messages.title}/>\r\n            </div>\r\n            <Stack tokens={{ childrenGap: 26 }}>\r\n                {!isVNext && !!idleConfig.disconnectOnIdleSupported && (<Stack tokens={{ childrenGap: 8 }}>\r\n                        <Stack horizontal>\r\n                            <Checkbox label={msg(messages.disconnectOnIdleLabel)} checked={idleConfig.disconnectOnIdleEnabled} onChange={(_, value) => onChange({ ...idleConfig, disconnectOnIdleEnabled: value || false })} disabled={disabled}/>\r\n                            <DisconnectOnIdleInfoTip ariaLabel={disconnectOnIdleInfoTipAriaLabel}/>\r\n                        </Stack>\r\n                        {!!idleConfig.disconnectOnIdleEnabled && (<GracePeriodInput label={msg(messages.disconnectOnIdleInputLabel)} value={idleConfig.disconnectOnIdleGracePeriod} onChange={(value) => onChange({ ...idleConfig, disconnectOnIdleGracePeriod: value })} disabled={disabled} min={MinIdleGracePeriod} max={MaxGracePeriod}/>)}\r\n                    </Stack>)}\r\n                {isVNext && (<Stack tokens={{ childrenGap: 8 }}>\r\n                        <Stack horizontal>\r\n                            <Checkbox label={msg(messages.shutdownOnIdleLabel)} checked={isShutdownOnIdleEnabled(idleConfig)} onChange={(_, value) => onChange({\r\n        ...idleConfig,\r\n        shutdownOnIdle: value\r\n            ? LabServicesModels.ShutdownOnIdleMode.LowUsage\r\n            : LabServicesModels.ShutdownOnIdleMode.None,\r\n    })} disabled={disabled}/>\r\n                            <ShutdownOnIdleInfoTip ariaLabel={shutdownOnIdleInfoTipAriaLabel}/>\r\n                        </Stack>\r\n                        {isShutdownOnIdleEnabled(idleConfig) && (<Stack.Item>\r\n                                <GracePeriodInput label={msg(messages.disconnectOnIdleInputLabel)} value={idleConfig.shutdownOnIdleGracePeriod} onChange={(value) => onChange({ ...idleConfig, shutdownOnIdleGracePeriod: value })} disabled={disabled} min={MinIdleGracePeriod} max={MaxGracePeriod}/>\r\n                                <CustomIdleShutdownDropdown value={idleConfig.shutdownOnIdle} onChange={(value) => {\r\n        onChange({ ...idleConfig, shutdownOnIdle: value });\r\n    }} disabled={disabled}/>\r\n                            </Stack.Item>)}\r\n                    </Stack>)}\r\n                {idleConfig.shutdownOnDisconnectSupported && (<Stack tokens={{ childrenGap: 8 }}>\r\n                        <Stack horizontal>\r\n                            <Checkbox label={msg(messages.shutdownOnDisconnectLabel)} checked={idleConfig.shutdownOnDisconnect} onChange={(_, value) => onChange({ ...idleConfig, shutdownOnDisconnect: value || false })} disabled={disabled}/>\r\n                            {!isVNext && (<ShutdownOnDisconnectInfoTip ariaLabel={shutdownOnDisconnectInfoTipAriaLabel}/>)}\r\n                            {isVNext && (<VNextShutdownOnDisconnectInfoTip ariaLabel={shutdownOnDisconnectInfoTipAriaLabel}/>)}\r\n                        </Stack>\r\n                        {idleConfig.shutdownOnDisconnect && (<GracePeriodInput label={msg(messages.shutdownOnDisconnectInputLabel)} value={idleConfig.shutdownOnDisconnectGracePeriod} onChange={(value) => onChange({ ...idleConfig, shutdownOnDisconnectGracePeriod: value })} disabled={disabled} min={0} max={MaxGracePeriod}/>)}\r\n                    </Stack>)}\r\n                {idleConfig.shutdownOnNoConnectSupported && (<Stack tokens={{ childrenGap: 8 }}>\r\n                        <Checkbox label={msg(messages.shutdownOnNoConnectLabel)} checked={idleConfig.shutdownWhenNotConnected} onChange={(_, value) => onChange({ ...idleConfig, shutdownWhenNotConnected: value || false })} disabled={disabled}/>\r\n                        {idleConfig.shutdownWhenNotConnected && (<GracePeriodInput label={msg(messages.shutdownOnNoConnectInputLabel)} value={idleConfig.shutdownOnNoConnectGracePeriod} onChange={(value) => onChange({ ...idleConfig, shutdownOnNoConnectGracePeriod: value })} disabled={disabled} min={MinNoConnectGracePeriod} max={MaxGracePeriod}/>)}\r\n                    </Stack>)}\r\n                {isLinuxSIG && !isVNext && (<InfoSection>\r\n                        <FormattedMessage id=\"SupportedLinuxDistributions\" defaultMessage=\"This lab uses a Linux image from the Azure Compute Gallery. Please confirm that this image's Linux <Link>version is supported</Link> before enabling disconnect and shutdown settings for this lab. Configuring these settings on an unsupported image will fail and may cause issues when publishing.\" description=\"<Link> and </Link> should not be localized, but the other text should be.\" values={{\r\n        Link: (text) => (<Link href=\"https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/diagnostics-linux#supported-linux-distributions\" target=\"_blank\">\r\n                                        {text}\r\n                                    </Link>),\r\n    }}/>\r\n                    </InfoSection>)}\r\n            </Stack>\r\n        </Stack>);\r\n};\r\nexport default ShutdownPolicyGroup;\r\n","import * as React from 'react';\r\nimport { Icon } from '@fluentui/react';\r\nimport { getCustomTheme } from './themes/selectors';\r\nexport const ClockIcon = () => {\r\n    return (<Icon iconName=\"Clock\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            paddingTop: '2px',\r\n            color: getCustomTheme().palette?.themePrimary,\r\n        },\r\n    }}/>);\r\n};\r\n","import { Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { ClockIcon } from './clock-icon';\r\nimport { FormattedMessage } from 'react-intl';\r\nexport const CreateLabTimeEstimate = (props) => {\r\n    const { timeEstimateMessage } = props;\r\n    return (<Stack horizontal tokens={{ childrenGap: 10 }} verticalAlign=\"end\" verticalFill style={{ marginBottom: 20, verticalAlign: 'bottom' }}>\r\n            <Stack.Item>\r\n                <ClockIcon />\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { paddingBottom: '2px' } }}>\r\n                <FormattedMessage id=\"TemplateVmSettingsPageTimeMessage\" defaultMessage=\"Lab creation will take up to <b>{timeEstimateMessage}</b>.\" description=\"Message at the top of new lab flyout dialog. {timeEstimateMessage} is the bolded text '20 minutes'.\" values={{\r\n        b: (chunks) => <b>{chunks}</b>,\r\n        timeEstimateMessage,\r\n    }}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default CreateLabTimeEstimate;\r\n","import { Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { SafeSpinButton } from '../../common/safe-spin-button';\r\nimport { ConnectionTypeDropdown } from '../../common/connection-type/connection-type-dropdown';\r\nimport { areConnectionTypesValid } from '../../common/connection-type/validators';\r\nimport { isIdleSupported } from '../../common/shutdown-policy/selectors';\r\nimport { ShutdownPolicyGroup } from '../../common/shutdown-policy/shutdown-policy-group';\r\nimport Constants from '../../utils/constants';\r\nimport { messages } from './create-lab-messages';\r\nimport PanelTimeEstimate from '../../common/create-lab-time-estimate';\r\nexport const NewLabPoliciesPage = (props) => {\r\n    const { isVNext, image, isSubmitting, quota, idleConfig, isBastionEnabled, isBastionSupported, connectionTypes, isConnectionTypesValid, onQuotaChange, onConnectionTypesChange, onIdleConfigChange, onConnectionTypesValidationChange, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const setConnectionTypes = (value) => {\r\n        const isValid = areConnectionTypesValid(!image.isWindows, value, isVNext);\r\n        onConnectionTypesChange(value);\r\n        onConnectionTypesValidationChange(isValid);\r\n    };\r\n    return (<Stack tokens={{ childrenGap: 30 }} style={{ height: '100%' }}>\r\n            <Stack.Item>\r\n                <FormattedMessage {...messages.newLabPoliciesPageIntro}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <SafeSpinButton label={msg(messages.quotaLabel)} autoFocus min={0} max={Constants.MaxLabQuota} disabled={isSubmitting} value={quota} onChange={onQuotaChange}/>\r\n            </Stack.Item>\r\n            {isBastionEnabled && (<Stack.Item>\r\n                    <ConnectionTypeDropdown isVNext={isVNext} isLinux={!image.isWindows} isBastionSupported={isBastionSupported} clientTypesDisabled={false} disabled={isSubmitting} required={true} valid={isConnectionTypesValid} value={connectionTypes} onChange={setConnectionTypes}/>\r\n                </Stack.Item>)}\r\n            {isIdleSupported(idleConfig) && (<Stack.Item>\r\n                    <ShutdownPolicyGroup disabled={isSubmitting} idleConfig={idleConfig} isLinuxSIG={image.isCustomImage && !image.isWindows} onChange={onIdleConfigChange} isVNext={isVNext}/>\r\n                </Stack.Item>)}\r\n            {!isVNext && (<Stack.Item styles={{ root: { height: '100%' } }}>\r\n                    <PanelTimeEstimate timeEstimateMessage={msg(messages.newLabPoliciesPageTimeEstimate)}/>\r\n                </Stack.Item>)}\r\n        </Stack>);\r\n};\r\nexport default NewLabPoliciesPage;\r\n","import { DefaultButton, Panel, PanelType, PrimaryButton, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport LoadingContainer from '../../common/loading-section';\r\nimport { getImageIdleConfig } from '../../common/shutdown-policy/selectors';\r\nimport { SubmitButton } from '../../common/submit-button';\r\nimport { getCustomTheme } from '../../common/themes/selectors';\r\nimport UnsavedChangesDialog from '../../common/unsaved-changes-dialog';\r\nimport FullPageMessage from '../../full-page-message/full-page-message';\r\nimport commonMessages from '../../language/common-messages';\r\nimport Constants from '../../utils/constants';\r\nimport { trackEvent } from '../../utils/telemetry/telemetry-channel';\r\nimport CreateLabConfigPage from './create-lab-config-page';\r\nimport CreateLabCredentialsPage from './create-lab-credentials-page';\r\nimport { messages } from './create-lab-messages';\r\nimport CreateLabPoliciesPage from './create-lab-policies-page';\r\nimport { getDefaultConnectionTypes, getIsBastionSupported, isGeographySelectable, isRegionSelectable, } from './create-lab-selectors';\r\nexport const NewLabFlyout = (props) => {\r\n    const { isLoading, formState, onFormStateChange, createLabViewModel } = props;\r\n    const { isSubmitting, hasCapacityError, hasImageError, defaultIdleConfig, isBastionEnabled, isV2BastionEnabled, isSkipTemplateEnabled, currentTenantId, labNames, images, pricingAndAvailabilityData, coreQuotaData, labAccount, addImagesUrl, validateNameOnLoad, hasLoadError, selectedLabPlan, isCurrentLabParentLabAccount, currentLabParentId, isLoadingOnSelectLabPlan, } = createLabViewModel;\r\n    const { name, image, size, geography, isRdpEnabled, installGpuDriverEnabled, customizeTemplate, username, password, nonAdminUsername, nonAdminPassword, isNonAdminEnabled, useSharedPassword, quota, connectionTypes, idleConfig, } = formState;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [page, setPage] = React.useState(1);\r\n    const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\r\n    // TODO: Migrate to final-form to handle all of this better\r\n    const [isLabNameValid, setIsLabNameValid] = React.useState(false);\r\n    const [isUsernameValid, setIsUsernameValid] = React.useState(false);\r\n    const [isPasswordValid, setIsPasswordValid] = React.useState(false);\r\n    const [isConnectionTypesValid, setIsConnectionTypesValid] = React.useState(true);\r\n    const { panelStyles } = getCustomTheme();\r\n    const canSelectGeography = labAccount ? isGeographySelectable(labAccount) : false;\r\n    const canSelectRegion = selectedLabPlan ? isRegionSelectable(selectedLabPlan) : false;\r\n    const canSelectLocation = labAccount ? canSelectGeography : selectedLabPlan ? canSelectRegion : false;\r\n    const isPageOneValid = isLabNameValid && !!size && (!canSelectLocation || !!geography);\r\n    const isPageTwoValid = isUsernameValid && isPasswordValid;\r\n    const isPageThreeValid = isConnectionTypesValid;\r\n    const isFormValid = isPageOneValid && isPageTwoValid && isPageThreeValid;\r\n    const isBastionSupported = getIsBastionSupported(labAccount, isBastionEnabled, selectedLabPlan, isV2BastionEnabled);\r\n    const onExit = () => {\r\n        trackEvent('CREATE_LAB_CANCELLED');\r\n        props.onDismiss();\r\n    };\r\n    const onDismiss = () => {\r\n        if (page > 1) {\r\n            setShowConfirmDialog(true);\r\n        }\r\n        else {\r\n            onExit();\r\n        }\r\n    };\r\n    const goBack = () => {\r\n        if (page > 1) {\r\n            trackEvent('CREATE_LAB_GO_TO_PREVIOUS_PAGE');\r\n            setPage(page - 1);\r\n        }\r\n    };\r\n    const loadPageTwo = () => {\r\n        trackEvent('CREATE_LAB_GO_TO_PAGE_TWO');\r\n        setPage(2);\r\n    };\r\n    const loadPageThree = () => {\r\n        trackEvent('CREATE_LAB_GO_TO_PAGE_THREE');\r\n        setPage(3);\r\n    };\r\n    const formSubmit = () => {\r\n        if (isFormValid) {\r\n            trackEvent('CREATE_LAB_FORM_SUBMITTED');\r\n            props.onSubmit();\r\n        }\r\n    };\r\n    const onImageChange = (image) => {\r\n        const { isWindows } = image;\r\n        const connectionTypes = getDefaultConnectionTypes(isWindows, labAccount, selectedLabPlan, isBastionEnabled, isV2BastionEnabled);\r\n        const idleConfig = getImageIdleConfig(defaultIdleConfig, image);\r\n        onFormStateChange({ image, idleConfig, connectionTypes });\r\n    };\r\n    const headerText = page === 1 ? messages.title1 : page === 2 ? messages.title2 : page === 3 ? messages.title3 : messages.title4;\r\n    return (<>\r\n            <Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} styles={panelStyles} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(headerText)} closeButtonAriaLabel={msg(commonMessages.close)} onRenderFooterContent={() => (<>\r\n                        {!isLoading && (<Stack horizontal tokens={{ childrenGap: 8 }} verticalFill verticalAlign=\"center\">\r\n                                <Stack.Item grow={1}>\r\n                                    <FormattedMessage {...messages.newLabFlyoutProgressFormat} values={{ stepNumber: page, maxStepNumber: 3 }}/>\r\n                                </Stack.Item>\r\n                                <Stack.Item grow={0}>\r\n                                    {page === 1 ? (<PrimaryButton disabled={!isPageOneValid} onClick={loadPageTwo}>\r\n                                            {msg(messages.next)}\r\n                                        </PrimaryButton>) : page === 2 ? (<PrimaryButton disabled={!isPageTwoValid} onClick={loadPageThree}>\r\n                                            {msg(messages.next)}\r\n                                        </PrimaryButton>) : (<SubmitButton buttonText={msg(messages.finish)} isSubmitting={isSubmitting} disabled={!isFormValid} onClick={formSubmit}/>)}\r\n                                </Stack.Item>\r\n                                <Stack.Item grow={0}>\r\n                                    {page === 1 ? (<DefaultButton onClick={onDismiss} styles={{ root: { minWidth: 85 } }}>\r\n                                            {msg(commonMessages.cancel)}\r\n                                        </DefaultButton>) : (<DefaultButton onClick={goBack} styles={{ root: { minWidth: 85 } }} disabled={isSubmitting}>\r\n                                            {msg(messages.back)}\r\n                                        </DefaultButton>)}\r\n                                </Stack.Item>\r\n                            </Stack>)}\r\n                    </>)}>\r\n                {hasLoadError ? (<FullPageMessage image=\"error-general\" message={<FormattedMessage {...messages.newLabFlyoutLoadError}/>} messageDetails={<FormattedMessage {...messages.newLabFlyoutLoadErrorDetails}/>}/>) : hasImageError ? (<FullPageMessage image=\"error-general\" message={<FormattedMessage {...messages.newLabFlyoutImagesError}/>} messageDetails={<FormattedMessage {...messages.newLabFlyoutImagesErrorDetails}/>}/>) : hasCapacityError ? (<FullPageMessage image=\"error-general\" message={<FormattedMessage {...messages.newLabFlyoutLoadError}/>} messageDetails={<FormattedMessage {...messages.newLabFlyoutCapacityErrorDetails}/>}/>) : isLoading ? (<LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>) : page === 1 ? (<CreateLabConfigPage validateNameOnLoad={validateNameOnLoad} name={name} image={image} size={size} geography={geography} coreQuotaData={coreQuotaData} isRdpEnabled={isRdpEnabled} installGpuDriverEnabled={installGpuDriverEnabled} customizeTemplate={customizeTemplate} canSelectGeography={canSelectGeography || canSelectRegion} pricingAndAvailabilityData={pricingAndAvailabilityData} images={images} labNames={labNames} isLoadingLabPlanImages={isLoadingOnSelectLabPlan} labParentId={currentLabParentId} currentTenantId={currentTenantId} isBastionEnabled={isBastionEnabled} isSkipTemplateEnabled={isSkipTemplateEnabled} addImagesUrl={addImagesUrl} onNameChange={(name) => onFormStateChange({ name })} onImageChange={(image) => onImageChange(image)} onSizeChange={(size, geography) => onFormStateChange({ size, geography })} onGeographyChange={(geography) => onFormStateChange({ geography })} onRdpEnabledChange={(isRdpEnabled) => onFormStateChange({ isRdpEnabled })} onNameValidation={(isValid) => setIsLabNameValid(isValid)} onInstallGpuDriverEnabledChange={(installGpuDriverEnabled) => onFormStateChange({ installGpuDriverEnabled })} onCustomizeTemplateChange={(customizeTemplate) => onFormStateChange({ customizeTemplate })}/>) : page === 2 ? (<CreateLabCredentialsPage isVNext={!isCurrentLabParentLabAccount} image={image} customizeTemplate={customizeTemplate} username={username} password={password} nonAdminUsername={nonAdminUsername} nonAdminPassword={nonAdminPassword} useSharedPassword={useSharedPassword} isNonAdminEnabled={isNonAdminEnabled} isPasswordValid={isPasswordValid} isNonAdminPasswordValid={true} // not used for vCurrent\r\n     onPasswordChange={(password) => onFormStateChange({ password })} onUsernameChange={(username) => onFormStateChange({ username })} onNonAdminPasswordChange={(nonAdminPassword) => onFormStateChange({ nonAdminPassword })} onNonAdminUsernameChange={(nonAdminUsername) => onFormStateChange({ nonAdminUsername })} onUseSharedPasswordChange={(useSharedPassword) => onFormStateChange({ useSharedPassword })} onNonAdminEnabledChange={(isNonAdminEnabled) => onFormStateChange({ isNonAdminEnabled })} onUsernameValidationChange={(isValid) => setIsUsernameValid(isValid)} onPasswordValidationChange={(isValid) => setIsPasswordValid(isValid)} onNonAdminUsernameValidationChange={() => {\r\n        return; // no-op for vCurrent\r\n    }} onNonAdminPasswordValidationChange={() => {\r\n        return; // no-op for vCurrent\r\n    }}/>) : (<CreateLabPoliciesPage isVNext={!isCurrentLabParentLabAccount} image={image} isSubmitting={isSubmitting} quota={quota} idleConfig={idleConfig} isBastionEnabled={isBastionEnabled} isBastionSupported={isBastionSupported} connectionTypes={connectionTypes} isConnectionTypesValid={isConnectionTypesValid} onQuotaChange={(quota) => onFormStateChange({ quota })} onConnectionTypesChange={(connectionTypes) => onFormStateChange({ connectionTypes })} onIdleConfigChange={(idleConfig) => onFormStateChange({ idleConfig })} onConnectionTypesValidationChange={(isValid) => setIsConnectionTypesValid(isValid)}/>)}\r\n            </Panel>\r\n            {showConfirmDialog && (<UnsavedChangesDialog title={<FormattedMessage {...messages.newLabFlyoutDiscardTitle}/>} message={<FormattedMessage {...messages.newLabFlyoutDiscardMessage}/>} onOk={onExit} onCancel={() => setShowConfirmDialog(false)}/>)}\r\n        </>);\r\n};\r\nexport default NewLabFlyout;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { duration } from 'moment';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { getImageIdleConfig, idleConfigToLabParameters } from '../../common/shutdown-policy/selectors';\r\nimport { toEnableState } from '../../data/helpers/enum-helpers';\r\nimport { ConnectionType, OperatingSystem } from '../../data/models/environment-common';\r\nimport { listGalleryImages } from '../../redux/actions/gallery-image/gallery-image-action-creators';\r\nimport { createLab } from '../../redux/actions/lab/lab-action-creators';\r\nimport { listSharedImages } from '../../redux/actions/shared-image/shared-image-action-creators';\r\nimport { trackEvent } from '../../utils/telemetry/telemetry-channel';\r\nimport NewLabFlyout from './create-lab-flyout';\r\nimport { getCreateLabContainerModel, getDefaultConnectionTypes, getDefaultImage, getVCurrentDefaultSize, getVCurrentSizeData, isUbuntuImage, isVCurrentGpuSize, getVCurrentGeographyData, getLabAccountDefaultGeoName, getVCurrentDefaultGeography, } from './create-lab-selectors';\r\nclass CreateLabFlyoutContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._loadLabAccountImages = () => {\r\n            const { labParentId } = this.props;\r\n            this.props.listGalleryImages(labParentId);\r\n            this.props.listSharedImages(labParentId);\r\n        };\r\n        this._onFormStateChange = (newState) => {\r\n            const { formState: oldState } = this.state;\r\n            const formState = { ...oldState, ...newState };\r\n            this.setState({ formState });\r\n        };\r\n        this._updateFormDataOnImageLoaded = (shouldInitializeName) => {\r\n            const { createLabViewModel, defaultLabName } = this.props;\r\n            const { name } = this.state.formState;\r\n            const { username, password, nonAdminUsername, nonAdminPassword, isNonAdminEnabled } = this.state.formState;\r\n            const { images, labAccount, pricingAndAvailabilityData, coreQuotaData, defaultIdleConfig, isBastionEnabled, isV2BastionEnabled, } = createLabViewModel;\r\n            const image = getDefaultImage(images);\r\n            const idleConfig = image ? getImageIdleConfig(defaultIdleConfig, image) : defaultIdleConfig;\r\n            const sizeData = image && pricingAndAvailabilityData\r\n                ? getVCurrentSizeData(pricingAndAvailabilityData, image.isWindows ? OperatingSystem.Windows : OperatingSystem.Linux)\r\n                : undefined;\r\n            const defaultGeoName = getLabAccountDefaultGeoName(labAccount);\r\n            const size = sizeData ? getVCurrentDefaultSize(sizeData, coreQuotaData) : undefined;\r\n            const geoData = size && sizeData ? getVCurrentGeographyData(sizeData, size) : undefined;\r\n            const geography = geoData ? getVCurrentDefaultGeography(geoData, defaultGeoName) : undefined;\r\n            const connectionTypes = image\r\n                ? getDefaultConnectionTypes(image.isWindows, labAccount, undefined, isBastionEnabled, isV2BastionEnabled)\r\n                : [];\r\n            this._onFormStateChange({\r\n                name: !!shouldInitializeName ? defaultLabName : name,\r\n                image,\r\n                geography,\r\n                size,\r\n                connectionTypes,\r\n                idleConfig,\r\n                useSharedPassword: true,\r\n                isNonAdminEnabled,\r\n                username,\r\n                password,\r\n                nonAdminUsername,\r\n                nonAdminPassword,\r\n                isTemplateVmEnabled: true,\r\n            });\r\n        };\r\n        this._initializeFormData = () => {\r\n            this._updateFormDataOnImageLoaded(true);\r\n            this.setState({ formStateInitialized: true });\r\n        };\r\n        this.state = {\r\n            formStateInitialized: false,\r\n            formState: {\r\n                name: '',\r\n                image: undefined,\r\n                size: undefined,\r\n                geography: undefined,\r\n                isRdpEnabled: false,\r\n                installGpuDriverEnabled: true,\r\n                customizeTemplate: true,\r\n                username: '',\r\n                password: '',\r\n                useSharedPassword: false,\r\n                nonAdminUsername: '',\r\n                nonAdminPassword: '',\r\n                isNonAdminEnabled: false,\r\n                quota: 10,\r\n                connectionTypes: [],\r\n                idleConfig: undefined,\r\n                isTemplateVmEnabled: true,\r\n                labCapacity: 1,\r\n            },\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        trackEvent('CREATE_LAB_STARTED');\r\n        const { createLabViewModel } = this.props;\r\n        const { isLoading, hasLoadError } = createLabViewModel;\r\n        if (this.props.labParentId) {\r\n            this._loadLabAccountImages();\r\n            if (!isLoading && !hasLoadError) {\r\n                this._initializeFormData();\r\n            }\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { isLoading, hasLoadError } = this.props.createLabViewModel;\r\n        if (prevProps.labParentId !== this.props.labParentId) {\r\n            this._loadLabAccountImages();\r\n        }\r\n        if (prevProps.createLabViewModel.isLoading && !isLoading && !hasLoadError) {\r\n            this._initializeFormData();\r\n        }\r\n        if (prevProps.createLabViewModel.isSubmitting != this.props.createLabViewModel.isSubmitting &&\r\n            !this.props.createLabViewModel.isSubmitting) {\r\n            if (this.props.hasLabErrors) {\r\n                this.props.onDismiss();\r\n            }\r\n        }\r\n    }\r\n    render() {\r\n        const { onDismiss, createLabViewModel } = this.props;\r\n        const { isLoading } = createLabViewModel;\r\n        const { formStateInitialized, formState } = this.state;\r\n        return (<NewLabFlyout createLabViewModel={createLabViewModel} isLoading={isLoading || !formStateInitialized} formState={formState} onFormStateChange={this._onFormStateChange} onSubmit={() => this._onSubmit()} onDismiss={onDismiss} onSelectLabPlan={() => {\r\n            return; // no-op, this is only needed in vnext\r\n        }}/>);\r\n    }\r\n    _onSubmit() {\r\n        const { onCreatedRoute, createLabViewModel, aadGroupId } = this.props;\r\n        const { isBastionEnabled } = createLabViewModel;\r\n        const { formState } = this.state;\r\n        const { name, size, geography, image, isRdpEnabled, installGpuDriverEnabled, customizeTemplate, useSharedPassword, username, password, quota, idleConfig, connectionTypes, } = formState;\r\n        const vCurrentSize = size;\r\n        const vCurrentGeography = geography;\r\n        this.props.createLab(this.props.labParentId, {\r\n            name: name,\r\n            labParameters: {\r\n                ...idleConfigToLabParameters(idleConfig),\r\n                vmSize: vCurrentSize.sizeName,\r\n                geography: vCurrentGeography.geographyName,\r\n                galleryImageResourceId: (!image.isCustomImage && image.id) || undefined,\r\n                sharedImageResourceId: (image.isCustomImage && image.id) || undefined,\r\n                templateVmState: customizeTemplate ? Ml.EnableState.Enabled : Ml.EnableState.Disabled,\r\n                linuxRdpState: toEnableState(isRdpEnabled),\r\n                installGpuDriverEnabled: isVCurrentGpuSize(vCurrentSize)\r\n                    ? toEnableState(installGpuDriverEnabled)\r\n                    : undefined,\r\n                sharedPasswordState: isUbuntuImage(image) || !customizeTemplate\r\n                    ? Ml.EnableState.Disabled\r\n                    : toEnableState(useSharedPassword),\r\n                username,\r\n                password,\r\n                userQuota: duration(quota, 'h'),\r\n                connectivityPolicy: isBastionEnabled\r\n                    ? {\r\n                        rdpEnabled: toEnableState(connectionTypes.includes(ConnectionType.Rdp)),\r\n                        rdpInBrowserEnabled: toEnableState(connectionTypes.includes(ConnectionType.RdpInBrowser)),\r\n                        sshEnabled: toEnableState(connectionTypes.includes(ConnectionType.Ssh)),\r\n                        sshInBrowserEnabled: toEnableState(connectionTypes.includes(ConnectionType.SshInBrowser)),\r\n                    }\r\n                    : {\r\n                        rdpEnabled: toEnableState(isRdpEnabled || image.isWindows),\r\n                        sshEnabled: toEnableState(!image.isWindows),\r\n                    },\r\n                aadGroupId,\r\n            },\r\n        }, onCreatedRoute);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getCreateLabContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    listGalleryImages,\r\n    listSharedImages,\r\n    createLab,\r\n};\r\nexport const CreateLabFlyoutContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(CreateLabFlyoutContainerInjected));\r\nexport default CreateLabFlyoutContainer;\r\n","import * as React from 'react';\r\nimport { Link } from '@fluentui/react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { Constants } from \"../utils/constants\";\r\nexport const LabPlanSettingsInSentenceLink = (props) => {\r\n    let { tenantId, labPlanId } = props;\r\n    if (!labPlanId) {\r\n        return <></>;\r\n    }\r\n    return (<Link target=\"_blank\" href={Constants.Urls.LabPlanSettings(tenantId, labPlanId)}>\r\n            <FormattedMessage id=\"LabPlanSettingsLink\" defaultMessage=\"Azure portal\" description=\"Link to the lab plan settings\"/>\r\n        </Link>);\r\n};\r\n","import { defineMessages } from 'react-intl';\r\nconst messages = defineMessages({\r\n    requiredError: {\r\n        id: 'LabNameVnextValidatorRequiredError',\r\n        defaultMessage: 'Lab name is required.',\r\n        description: 'Error shown for invalid lab name values.',\r\n    },\r\n    specialCharsError: {\r\n        id: 'LabNameVnextValidatorSpecialCharsError',\r\n        defaultMessage: 'Lab name can only contain alphanumeric characters, periods, underscores, and hyphens.',\r\n        description: 'Error shown for invalid lab name values.',\r\n    },\r\n    duplicateNameError: {\r\n        id: 'LabNameVnextValidatorDuplicateNameError',\r\n        defaultMessage: 'A lab with this name already exists.',\r\n        description: 'Error shown for invalid lab name values.',\r\n    },\r\n    nameTooLongError: {\r\n        id: 'LabNameVnextValidatorNameTooLongError',\r\n        defaultMessage: 'The lab name should be less than 100 characters in length.',\r\n        description: 'Error shown for lab name values that are too long.',\r\n    },\r\n});\r\nconst labNameRegex = /^[0-9A-Za-z-._~]+$/;\r\nexport function validateVnextLabName(name, labNames, intl) {\r\n    if (!name || name.trim().length === 0) {\r\n        return intl.formatMessage(messages.requiredError);\r\n    }\r\n    else if (!labNameRegex.test(name)) {\r\n        return intl.formatMessage(messages.specialCharsError);\r\n    }\r\n    else if (labNames.some((o) => o.toLowerCase() === name.toLowerCase())) {\r\n        return intl.formatMessage(messages.duplicateNameError);\r\n    }\r\n    else if (name.trim().length > 100) {\r\n        return intl.formatMessage(messages.nameTooLongError);\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\n","import { Dropdown } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport memoize from 'memoize-one';\r\nconst messages = defineMessages({\r\n    labPlanLabel: {\r\n        id: 'NewLabConfigPageLabPlanLabel',\r\n        defaultMessage: 'Which plan will be used for this lab?',\r\n        description: 'Label for lab plan picker on new lab flyout.',\r\n    },\r\n});\r\nconst getOptions = memoize((labPlans) => {\r\n    const options = [];\r\n    labPlans.map((o) => {\r\n        const option = {\r\n            key: o.id,\r\n            text: o.name,\r\n            data: o,\r\n        };\r\n        options.push(option);\r\n    });\r\n    return options;\r\n});\r\nexport const LabPlanPicker = (props) => {\r\n    const { labPlans, selected, required, onChange } = props;\r\n    const intl = useIntl();\r\n    const options = getOptions(labPlans);\r\n    const dropdownProps = {\r\n        options,\r\n        label: intl.formatMessage(messages.labPlanLabel),\r\n        selectedKey: !selected ? undefined : selected.id,\r\n        onChange: (_, option) => !!option && !!option.data && onChange(option.data.id),\r\n        required,\r\n    };\r\n    return <Dropdown {...dropdownProps}/>;\r\n};\r\nexport default LabPlanPicker;\r\n","import { defineMessages } from 'react-intl';\r\nexport const getLocalizedLocationName = (location, intl) => {\r\n    switch (location) {\r\n        case AzureRegions.centralus:\r\n            return intl.formatMessage(messages.centralus);\r\n        case AzureRegions.eastus:\r\n            return intl.formatMessage(messages.eastus);\r\n        case AzureRegions.eastus2:\r\n            return intl.formatMessage(messages.eastus2);\r\n        case AzureRegions.northcentralus:\r\n            return intl.formatMessage(messages.northcentralus);\r\n        case AzureRegions.southcentralus:\r\n            return intl.formatMessage(messages.southcentralus);\r\n        case AzureRegions.westcentralus:\r\n            return intl.formatMessage(messages.westcentralus);\r\n        case AzureRegions.westus:\r\n            return intl.formatMessage(messages.westus);\r\n        case AzureRegions.westus2:\r\n            return intl.formatMessage(messages.westus2);\r\n        case AzureRegions.westus3:\r\n            return intl.formatMessage(messages.westus3);\r\n        case AzureRegions.australiacentral:\r\n            return intl.formatMessage(messages.australiacentral);\r\n        case AzureRegions.australiacentral2:\r\n            return intl.formatMessage(messages.australiacentral2);\r\n        case AzureRegions.australiaeast:\r\n            return intl.formatMessage(messages.australiaeast);\r\n        case AzureRegions.australiasoutheast:\r\n            return intl.formatMessage(messages.australiasoutheast);\r\n        case AzureRegions.brazilsouth:\r\n            return intl.formatMessage(messages.brazilsouth);\r\n        case AzureRegions.brazilsoutheast:\r\n            return intl.formatMessage(messages.brazilsoutheast);\r\n        case AzureRegions.canadacentral:\r\n            return intl.formatMessage(messages.canadacentral);\r\n        case AzureRegions.canadaeast:\r\n            return intl.formatMessage(messages.canadaeast);\r\n        case AzureRegions.francecentral:\r\n            return intl.formatMessage(messages.francecentral);\r\n        case AzureRegions.francesouth:\r\n            return intl.formatMessage(messages.francesouth);\r\n        case AzureRegions.germanynorth:\r\n            return intl.formatMessage(messages.germanynorth);\r\n        case AzureRegions.germanywestcentral:\r\n            return intl.formatMessage(messages.germanywestcentral);\r\n        case AzureRegions.japaneast:\r\n            return intl.formatMessage(messages.japaneast);\r\n        case AzureRegions.japanwest:\r\n            return intl.formatMessage(messages.japanwest);\r\n        case AzureRegions.koreacentral:\r\n            return intl.formatMessage(messages.koreacentral);\r\n        case AzureRegions.koreasouth:\r\n            return intl.formatMessage(messages.koreasouth);\r\n        case AzureRegions.northeurope:\r\n            return intl.formatMessage(messages.northeurope);\r\n        case AzureRegions.westeurope:\r\n            return intl.formatMessage(messages.westeurope);\r\n        case AzureRegions.norwayeast:\r\n            return intl.formatMessage(messages.norwayeast);\r\n        case AzureRegions.norwaywest:\r\n            return intl.formatMessage(messages.norwaywest);\r\n        case AzureRegions.southafricanorth:\r\n            return intl.formatMessage(messages.southafricanorth);\r\n        case AzureRegions.southafricawest:\r\n            return intl.formatMessage(messages.southafricawest);\r\n        case AzureRegions.centralindia:\r\n            return intl.formatMessage(messages.centralindia);\r\n        case AzureRegions.southindia:\r\n            return intl.formatMessage(messages.southindia);\r\n        case AzureRegions.westindia:\r\n            return intl.formatMessage(messages.westindia);\r\n        case AzureRegions.southeastasia:\r\n            return intl.formatMessage(messages.southeastasia);\r\n        case AzureRegions.eastasia:\r\n            return intl.formatMessage(messages.eastasia);\r\n        case AzureRegions.swedencentral:\r\n            return intl.formatMessage(messages.swedencentral);\r\n        case AzureRegions.swedensouth:\r\n            return intl.formatMessage(messages.swedensouth);\r\n        case AzureRegions.switzerlandnorth:\r\n            return intl.formatMessage(messages.switzerlandnorth);\r\n        case AzureRegions.switzerlandwest:\r\n            return intl.formatMessage(messages.switzerlandwest);\r\n        case AzureRegions.uaecentral:\r\n            return intl.formatMessage(messages.uaecentral);\r\n        case AzureRegions.uaenorth:\r\n            return intl.formatMessage(messages.uaenorth);\r\n        case AzureRegions.uksouth:\r\n            return intl.formatMessage(messages.uksouth);\r\n        case AzureRegions.ukwest:\r\n            return intl.formatMessage(messages.ukwest);\r\n        case AzureRegions.centraluseuap:\r\n            return intl.formatMessage(messages.centraluseuap);\r\n        case AzureRegions.eastus2euap:\r\n            return intl.formatMessage(messages.eastus2euap);\r\n        default:\r\n            // TODO: this is unexpected. log?\r\n            return intl.formatMessage(messages.unknown);\r\n    }\r\n};\r\nvar AzureRegions;\r\n(function (AzureRegions) {\r\n    AzureRegions[\"centralus\"] = \"centralus\";\r\n    AzureRegions[\"eastus\"] = \"eastus\";\r\n    AzureRegions[\"eastus2\"] = \"eastus2\";\r\n    AzureRegions[\"northcentralus\"] = \"northcentralus\";\r\n    AzureRegions[\"southcentralus\"] = \"southcentralus\";\r\n    AzureRegions[\"westcentralus\"] = \"westcentralus\";\r\n    AzureRegions[\"westus\"] = \"westus\";\r\n    AzureRegions[\"westus2\"] = \"westus2\";\r\n    AzureRegions[\"westus3\"] = \"westus3\";\r\n    AzureRegions[\"australiacentral\"] = \"australiacentral\";\r\n    AzureRegions[\"australiacentral2\"] = \"australiacentral2\";\r\n    AzureRegions[\"australiaeast\"] = \"australiaeast\";\r\n    AzureRegions[\"australiasoutheast\"] = \"australiasoutheast\";\r\n    AzureRegions[\"brazilsouth\"] = \"brazilsouth\";\r\n    AzureRegions[\"brazilsoutheast\"] = \"brazilsoutheast\";\r\n    AzureRegions[\"canadacentral\"] = \"canadacentral\";\r\n    AzureRegions[\"canadaeast\"] = \"canadaeast\";\r\n    AzureRegions[\"francecentral\"] = \"francecentral\";\r\n    AzureRegions[\"francesouth\"] = \"francesouth\";\r\n    AzureRegions[\"germanynorth\"] = \"germanynorth\";\r\n    AzureRegions[\"germanywestcentral\"] = \"germanywestcentral\";\r\n    AzureRegions[\"japaneast\"] = \"japaneast\";\r\n    AzureRegions[\"japanwest\"] = \"japanwest\";\r\n    AzureRegions[\"koreacentral\"] = \"koreacentral\";\r\n    AzureRegions[\"koreasouth\"] = \"koreasouth\";\r\n    AzureRegions[\"northeurope\"] = \"northeurope\";\r\n    AzureRegions[\"westeurope\"] = \"westeurope\";\r\n    AzureRegions[\"norwayeast\"] = \"norwayeast\";\r\n    AzureRegions[\"norwaywest\"] = \"norwaywest\";\r\n    AzureRegions[\"southafricanorth\"] = \"southafricanorth\";\r\n    AzureRegions[\"southafricawest\"] = \"southafricawest\";\r\n    AzureRegions[\"centralindia\"] = \"centralindia\";\r\n    AzureRegions[\"southindia\"] = \"southindia\";\r\n    AzureRegions[\"westindia\"] = \"westindia\";\r\n    AzureRegions[\"southeastasia\"] = \"southeastasia\";\r\n    AzureRegions[\"eastasia\"] = \"eastasia\";\r\n    AzureRegions[\"swedencentral\"] = \"swedencentral\";\r\n    AzureRegions[\"swedensouth\"] = \"swedensouth\";\r\n    AzureRegions[\"switzerlandnorth\"] = \"switzerlandnorth\";\r\n    AzureRegions[\"switzerlandwest\"] = \"switzerlandwest\";\r\n    AzureRegions[\"uaecentral\"] = \"uaecentral\";\r\n    AzureRegions[\"uaenorth\"] = \"uaenorth\";\r\n    AzureRegions[\"uksouth\"] = \"uksouth\";\r\n    AzureRegions[\"ukwest\"] = \"ukwest\";\r\n    AzureRegions[\"centraluseuap\"] = \"centraluseuap\";\r\n    AzureRegions[\"eastus2euap\"] = \"eastus2euap\";\r\n    AzureRegions[\"unknown\"] = \"unknown\";\r\n})(AzureRegions || (AzureRegions = {}));\r\nconst messages = defineMessages({\r\n    centralus: {\r\n        id: 'CentralUS',\r\n        defaultMessage: 'Central US',\r\n        description: 'Text for Azure region Central US',\r\n    },\r\n    eastus: {\r\n        id: 'EastUS',\r\n        defaultMessage: 'East US',\r\n        description: 'Text for Azure region East US',\r\n    },\r\n    eastus2: {\r\n        id: 'EastUS2',\r\n        defaultMessage: 'East US 2',\r\n        description: 'Text for Azure region East US 2',\r\n    },\r\n    northcentralus: {\r\n        id: 'NorthCentralUS',\r\n        defaultMessage: 'North Central US',\r\n        description: 'Text for Azure region North Central US',\r\n    },\r\n    southcentralus: {\r\n        id: 'SouthCentralUS',\r\n        defaultMessage: 'South Central US',\r\n        description: 'Text for Azure region South Central US',\r\n    },\r\n    westcentralus: {\r\n        id: 'WestCentralUS',\r\n        defaultMessage: 'West Central US',\r\n        description: 'Text for Azure region West Central US',\r\n    },\r\n    westus: {\r\n        id: 'WestUS',\r\n        defaultMessage: 'West US',\r\n        description: 'Text for Azure region West US',\r\n    },\r\n    westus2: {\r\n        id: 'WestUS2',\r\n        defaultMessage: 'West US 2',\r\n        description: 'Text for Azure region West US 2',\r\n    },\r\n    westus3: {\r\n        id: 'WestUS3',\r\n        defaultMessage: 'West US 3',\r\n        description: 'Text for Azure region West US 3',\r\n    },\r\n    australiacentral: {\r\n        id: 'AustraliaCentral',\r\n        defaultMessage: 'Australia Central',\r\n        description: 'Text for Azure region Australia Central',\r\n    },\r\n    australiacentral2: {\r\n        id: 'AustraliaCentral2',\r\n        defaultMessage: 'Australia Central 2',\r\n        description: 'Text for Azure region Australia Central 2',\r\n    },\r\n    australiaeast: {\r\n        id: 'AustraliaEast',\r\n        defaultMessage: 'Australia East',\r\n        description: 'Text for Azure region Australia East',\r\n    },\r\n    australiasoutheast: {\r\n        id: 'AustraliaSoutheast',\r\n        defaultMessage: 'Australia Southeast',\r\n        description: 'Text for Azure region Australia Southeast',\r\n    },\r\n    brazilsouth: {\r\n        id: 'BrazilSouth',\r\n        defaultMessage: 'Brazil South',\r\n        description: 'Text for Azure region Brazil South',\r\n    },\r\n    brazilsoutheast: {\r\n        id: 'BrazilSoutheast',\r\n        defaultMessage: 'Brazil Southeast',\r\n        description: 'Text for Azure region Brazil Southeast',\r\n    },\r\n    canadacentral: {\r\n        id: 'CanadaCentral',\r\n        defaultMessage: 'Canada Central',\r\n        description: 'Text for Azure region Canada Central',\r\n    },\r\n    canadaeast: {\r\n        id: 'CanadaEast',\r\n        defaultMessage: 'Canada East',\r\n        description: 'Text for Azure region Canada East',\r\n    },\r\n    francecentral: {\r\n        id: 'FranceCentral',\r\n        defaultMessage: 'France Central',\r\n        description: 'Text for Azure region France Central',\r\n    },\r\n    francesouth: {\r\n        id: 'FranceSouth',\r\n        defaultMessage: 'France South',\r\n        description: 'Text for Azure region France South',\r\n    },\r\n    germanynorth: {\r\n        id: 'GermanyNorth',\r\n        defaultMessage: 'Germany North',\r\n        description: 'Text for Azure region Germany North',\r\n    },\r\n    germanywestcentral: {\r\n        id: 'GermanyWestCentral',\r\n        defaultMessage: 'Germany West Central',\r\n        description: 'Text for Azure region Germany West Central',\r\n    },\r\n    japaneast: {\r\n        id: 'JapanEast',\r\n        defaultMessage: 'Japan East',\r\n        description: 'Text for Azure region Japan East',\r\n    },\r\n    japanwest: {\r\n        id: 'JapanWest',\r\n        defaultMessage: 'Japan West',\r\n        description: 'Text for Azure region Japan West',\r\n    },\r\n    koreacentral: {\r\n        id: 'KoreaCentral',\r\n        defaultMessage: 'Korea Central',\r\n        description: 'Text for Azure region Korea Central',\r\n    },\r\n    koreasouth: {\r\n        id: 'KoreaSouth',\r\n        defaultMessage: 'Korea South',\r\n        description: 'Text for Azure region Korea South',\r\n    },\r\n    northeurope: {\r\n        id: 'NorthEurope',\r\n        defaultMessage: 'North Europe',\r\n        description: 'Text for Azure region North Europe',\r\n    },\r\n    westeurope: {\r\n        id: 'WestEurope',\r\n        defaultMessage: 'West Europe',\r\n        description: 'Text for Azure region West Europe',\r\n    },\r\n    norwayeast: {\r\n        id: 'NorwayEast',\r\n        defaultMessage: 'Norway East',\r\n        description: 'Text for Azure region Norway East',\r\n    },\r\n    norwaywest: {\r\n        id: 'NorwayWest',\r\n        defaultMessage: 'Norway West',\r\n        description: 'Text for Azure region Norway West',\r\n    },\r\n    southafricanorth: {\r\n        id: 'SouthAfricaNorth',\r\n        defaultMessage: 'South Africa North',\r\n        description: 'Text for Azure region South Africa North',\r\n    },\r\n    southafricawest: {\r\n        id: 'SouthAfricaWest',\r\n        defaultMessage: 'South Africa West',\r\n        description: 'Text for Azure region South Africa West',\r\n    },\r\n    centralindia: {\r\n        id: 'CentralIndia',\r\n        defaultMessage: 'Central India',\r\n        description: 'Text for Azure region Central India',\r\n    },\r\n    southindia: {\r\n        id: 'SouthIndia',\r\n        defaultMessage: 'South India',\r\n        description: 'Text for Azure region South India',\r\n    },\r\n    westindia: {\r\n        id: 'WestIndia',\r\n        defaultMessage: 'West India',\r\n        description: 'Text for Azure region West India',\r\n    },\r\n    southeastasia: {\r\n        id: 'SoutheastAsia',\r\n        defaultMessage: 'Southeast Asia',\r\n        description: 'Text for Azure region Southeast Asia',\r\n    },\r\n    eastasia: {\r\n        id: 'EastAsia',\r\n        defaultMessage: 'East Asia',\r\n        description: 'Text for Azure region East Asia',\r\n    },\r\n    swedencentral: {\r\n        id: 'SwedenCentral',\r\n        defaultMessage: 'Sweden Central',\r\n        description: 'Text for Azure region Sweden Central',\r\n    },\r\n    swedensouth: {\r\n        id: 'SwedenSouth',\r\n        defaultMessage: 'Sweden South',\r\n        description: 'Text for Azure region Sweden South',\r\n    },\r\n    switzerlandnorth: {\r\n        id: 'SwitzerlandNorth',\r\n        defaultMessage: 'Switzerland North',\r\n        description: 'Text for Azure region Switzerland North',\r\n    },\r\n    switzerlandwest: {\r\n        id: 'SwitzerlandWest',\r\n        defaultMessage: 'Switzerland West',\r\n        description: 'Text for Azure region Switzerland West',\r\n    },\r\n    uaecentral: {\r\n        id: 'UAECentral',\r\n        defaultMessage: 'UAE Central',\r\n        description: 'Text for Azure region UAE Central',\r\n    },\r\n    uaenorth: {\r\n        id: 'UAENorth',\r\n        defaultMessage: 'UAE North',\r\n        description: 'Text for Azure region UAE North',\r\n    },\r\n    uksouth: {\r\n        id: 'UKSouth',\r\n        defaultMessage: 'UK South',\r\n        description: 'Text for Azure region UK South',\r\n    },\r\n    ukwest: {\r\n        id: 'UKWest',\r\n        defaultMessage: 'UK West',\r\n        description: 'Text for Azure region UK West',\r\n    },\r\n    centraluseuap: {\r\n        id: 'CentralUSEUAP',\r\n        defaultMessage: 'Central US EUAP',\r\n        description: 'Text for Azure region centraluseuap',\r\n    },\r\n    eastus2euap: {\r\n        id: 'EastUS2EUAP',\r\n        defaultMessage: 'East US 2 EUAP',\r\n        description: 'Text for Azure region eastus2euap',\r\n    },\r\n    unknown: {\r\n        id: 'UnknownRegion',\r\n        defaultMessage: 'Unknown Region',\r\n        description: 'Text for an Azure region that we could not find in the current display name map.',\r\n    },\r\n});\r\n","import { Checkbox, Dropdown, Separator } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, FormattedNumber, useIntl } from 'react-intl';\r\nimport { DefaultCurrencyCode } from '../../utils/constants';\r\nimport { numberSorter } from '../../utils/sorting';\r\nimport { getSkuCostsFromImage, isLocationAllowedForImage, isSkuLocationAvailable } from './create-lab-selectors';\r\nimport { getLocalizedLocationName } from './location-helpers';\r\nimport { messages } from './vm-geography-picker-shared';\r\nconst Option = (option) => {\r\n    const { cost, disabled, text } = option;\r\n    return disabled ? (<span>{text}</span>) : (<FormattedMessage id=\"VNext_VmLocationPickerTitle\" defaultMessage=\"{location} - {price}/hr\" description=\"The name of a location and its price per hour.\" values={{\r\n        location: text,\r\n        price: <FormattedNumber value={cost} style=\"currency\" currency={DefaultCurrencyCode}/>,\r\n    }}/>);\r\n};\r\nconst getOptions = (sku, vmImageInfo, intl) => {\r\n    const locations = sku.locations.filter((o) => isLocationAllowedForImage(vmImageInfo, o.name));\r\n    const options = [];\r\n    const costs = getSkuCostsFromImage(locations, vmImageInfo);\r\n    locations.forEach((location) => {\r\n        const option = {\r\n            disabled: !isSkuLocationAvailable(sku, location.name, vmImageInfo),\r\n            key: location.name,\r\n            text: getLocalizedLocationName(location.name, intl),\r\n            cost: costs.get(location.name) ?? 0,\r\n            location,\r\n            title: '',\r\n        };\r\n        options.push(option);\r\n    });\r\n    // Sort by price (min to max cost)\r\n    const sorter = numberSorter();\r\n    return options.sort((a, b) => sorter(a.cost, b.cost));\r\n};\r\nexport const VNextVmLocationPicker = (props) => {\r\n    const { sku, selected, vmImageInfo, onChange, onChangeReset } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [showUnavailable, setShowUnavailable] = React.useState(false);\r\n    const options = getOptions(sku, vmImageInfo, intl);\r\n    const filteredOptions = !showUnavailable ? options.filter((o) => !o.disabled) : options;\r\n    const hasDisabledOptions = options.some((o) => o.disabled);\r\n    const dropdownProps = {\r\n        label: msg(messages.simplifiedLocationLabel),\r\n        options: filteredOptions,\r\n        placeholder: msg(messages.placeholder),\r\n        selectedKey: selected ? [selected.key] : [],\r\n        styles: {\r\n            callout: { maxHeight: 300, overflowY: 'auto' },\r\n            root: { paddingBottom: '8px' },\r\n        },\r\n        onChange: (_, value) => {\r\n            const option = value;\r\n            // ignoring changes on focus so the dropdown doesn't pre-select something\r\n            // when the user clicks on it / focuses on it for the first time\r\n            if (_.type.toLowerCase() !== 'focus' && !option.disabled) {\r\n                onChange(option.location);\r\n                onChangeReset();\r\n            }\r\n        },\r\n        onRenderOption: (option) => (option ? <Option {...option}/> : null),\r\n        onRenderTitle: (options) => (options ? <Option {...options[0]}/> : null),\r\n        onRenderList: (renderProps, defaultRender) => {\r\n            return (<>\r\n                    <div style={{ maxHeight: '200px', overflowY: 'auto', overflowX: 'hidden' }}>\r\n                        {defaultRender && defaultRender(renderProps)}\r\n                    </div>\r\n                    {hasDisabledOptions && (<>\r\n                            <Separator styles={{ root: { padding: '0', margin: '0', height: '1px' } }}/>\r\n                            <Checkbox styles={{ root: { padding: '15px' } }} checked={showUnavailable} onChange={(_event, value) => setShowUnavailable(value || false)} label={msg(messages.showUnavailableSimplified)}/>\r\n                        </>)}\r\n                </>);\r\n        },\r\n    };\r\n    return <Dropdown {...dropdownProps} aria-required={true}/>;\r\n};\r\nexport default VNextVmLocationPicker;\r\n","import { Checkbox, Dropdown, Separator, Stack, SearchBox, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { useIntl, defineMessages } from 'react-intl';\r\nimport memoize from 'memoize-one';\r\nimport { DefaultCurrencyCode } from '../../utils/constants';\r\nimport { caseInsensitiveLocaleCompare } from '../../utils/string-comparison';\r\nimport { getSkuMinMaxCostFromImage, isSkuAvailable } from './create-lab-selectors';\r\nimport { messages as vmSizePickerSharedMessages } from './vm-size-picker-shared';\r\nimport { getLocalizedSkuDisplayName, isLegacySku, SkuConstants } from '../../common/selectors/sku-selectors';\r\nimport commonMessages from '../../language/common-messages';\r\nconst messages = defineMessages({\r\n    vNextVmSizePickerTitleMinAndMaxPrice: {\r\n        id: 'VNext_VmSizePickerTitleMinAndMaxPrice',\r\n        defaultMessage: '{size} - {minPrice}-{maxPrice}/hr',\r\n        description: 'The name of a size and its min and max price per hour. {size} is the name of the size, {minPrice} is the minimum price, {maxPrice} is the maximum price.',\r\n    },\r\n    vNextVmSizePickerTitle: {\r\n        id: 'VNext_VmSizePickerTitle',\r\n        defaultMessage: '{size} - {price}/hr',\r\n        description: 'The name of a size and its price per hour. {size} is the name of the size and {price} is the price.',\r\n    },\r\n    vmSizePickerFormatVNext: {\r\n        id: 'VmSizePickerFormatVNext',\r\n        defaultMessage: '{numberOfCores} vCPUs, {memorySize}GB RAM, {storageSize}GB, {storageType}',\r\n        description: 'Virtual machine size specification. {numberOfCores} is the number of CPU cores, {memorySize} is the number of GB of memory, {storageSize} is the disk size in GB, {storageType} is the disk type',\r\n    },\r\n});\r\nconst Option = (option) => {\r\n    const { text, subTitle } = option;\r\n    return (<Stack styles={{ root: { width: '100%' } }}>\r\n            <Stack.Item>{text}</Stack.Item>\r\n            <Stack.Item styles={{ root: { color: !option.disabled ? '#555555' : undefined, fontSize: 12 } }}>\r\n                {subTitle}\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nconst getText = memoize((sku, vmImageInfo, intl, disabled) => {\r\n    const { formatMessage: msg, formatNumber } = intl;\r\n    const skuDisplayName = getLocalizedSkuDisplayName(sku, intl);\r\n    if (disabled) {\r\n        return skuDisplayName;\r\n    }\r\n    const { min: minPrice, max: maxPrice } = getMinPriceMaxPriceAndCurrency(sku, vmImageInfo);\r\n    return minPrice !== maxPrice\r\n        ? msg(messages.vNextVmSizePickerTitleMinAndMaxPrice, {\r\n            size: skuDisplayName,\r\n            minPrice: formatNumber(minPrice, { style: 'currency', currency: DefaultCurrencyCode }),\r\n            maxPrice: formatNumber(maxPrice, { style: 'currency', currency: DefaultCurrencyCode }),\r\n        })\r\n        : msg(messages.vNextVmSizePickerTitle, {\r\n            size: skuDisplayName,\r\n            price: formatNumber(minPrice, { style: 'currency', currency: DefaultCurrencyCode }),\r\n        });\r\n});\r\nconst getSubtitle = memoize((sku, intl) => {\r\n    const { formatMessage: msg } = intl;\r\n    const storageType = caseInsensitiveLocaleCompare(sku.size.storageType, SkuConstants.StandardSSD) === 0\r\n        ? msg(commonMessages.standardSSD)\r\n        : msg(commonMessages.premiumSSD);\r\n    return msg(messages.vmSizePickerFormatVNext, {\r\n        numberOfCores: sku.size.cores,\r\n        memorySize: sku.size.memoryGB,\r\n        storageSize: sku.size.storageGB,\r\n        storageType,\r\n    });\r\n});\r\nconst getMinPriceMaxPriceAndCurrency = (sku, vmImageInfo) => {\r\n    const { min, max } = getSkuMinMaxCostFromImage(sku.locations, vmImageInfo);\r\n    return {\r\n        min,\r\n        max,\r\n    };\r\n};\r\nconst getOptions = memoize((skus, vmImageInfo, filterStr, intl) => {\r\n    let options = [];\r\n    skus.forEach((sku) => {\r\n        // It's probably not worth storing a generation discriminator in data to make this cleaner because we shouldn't \r\n        // continue to deal with legacy skus. These should only be for the purpose of migration.\r\n        const disabled = !isSkuAvailable(sku, vmImageInfo) || (isLegacySku(sku.family.toUpperCase()) && vmImageInfo.text.endsWith('(Gen2)'));\r\n        const option = {\r\n            disabled,\r\n            key: sku.name,\r\n            title: '',\r\n            text: getText(sku, vmImageInfo, intl, disabled),\r\n            sku,\r\n            subTitle: getSubtitle(sku, intl),\r\n        };\r\n        options.push(option);\r\n    });\r\n    options = options.filter((o) => o.subTitle.toLocaleLowerCase().indexOf(filterStr) >= 0 ||\r\n        o.text.toLocaleLowerCase().indexOf(filterStr) >= 0);\r\n    return options;\r\n});\r\nconst itemStyle = {\r\n    paddingTop: 4,\r\n    paddingBottom: 4,\r\n    height: 'fit-content',\r\n    selectors: {\r\n        '.ms-Button-flexContainer': {\r\n            width: '100%',\r\n        },\r\n    },\r\n};\r\nexport const VNextVmSizePicker = (props) => {\r\n    const { skus, selected, vmImageInfo, onChange } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [showUnavailable, setShowUnavailable] = React.useState(false);\r\n    const [filter, setFilter] = React.useState('');\r\n    const options = getOptions(skus, vmImageInfo, filter, intl);\r\n    const filteredOptions = !showUnavailable ? options.filter((o) => !o.disabled) : options;\r\n    const hasDisabledOptions = options.some((o) => o.disabled);\r\n    const onSearchChange = (_, value) => {\r\n        const filterValue = value?.toLowerCase() || '';\r\n        setFilter(filterValue);\r\n    };\r\n    const dropdownProps = {\r\n        label: msg(vmSizePickerSharedMessages.simplifiedSizeLabel),\r\n        options: filteredOptions,\r\n        placeholder: msg(vmSizePickerSharedMessages.placeholder),\r\n        selectedKey: selected ? [selected.key] : [],\r\n        styles: {\r\n            title: {\r\n                lineHeight: 20,\r\n                height: 50,\r\n                paddingTop: 5,\r\n            },\r\n            dropdownItem: itemStyle,\r\n            dropdownItemSelected: itemStyle,\r\n            dropdownItemDisabled: itemStyle,\r\n            dropdownItemSelectedAndDisabled: itemStyle,\r\n            root: {\r\n                paddingBottom: '8px',\r\n            },\r\n        },\r\n        onDismiss: () => setFilter(''),\r\n        onChange: (_, value) => {\r\n            const option = value;\r\n            if (!option.disabled) {\r\n                onChange(option.sku);\r\n            }\r\n        },\r\n        onRenderOption: (option) => (option ? <Option {...option}/> : null),\r\n        onRenderTitle: (options) => (options ? <Option {...options[0]}/> : null),\r\n        onRenderList: (renderProps, defaultRender) => {\r\n            return (<>\r\n                    <SearchBox placeholder={props.searchPlaceholder} styles={{ root: { margin: 10 } }} onChange={onSearchChange}/>\r\n                    <div style={{ maxHeight: '200px', overflowY: 'auto', overflowX: 'hidden' }}>\r\n                        {defaultRender && defaultRender(renderProps)}\r\n                    </div>\r\n                    {hasDisabledOptions && (<>\r\n                            <Separator styles={{ root: { padding: '0', margin: '0', height: '1px' } }}/>\r\n                            <Checkbox styles={{ root: { padding: '15px 5px 15px 15px' } }} checked={showUnavailable} onChange={(_, value) => setShowUnavailable(value || false)} label={msg(vmSizePickerSharedMessages.showUnavailable)}/>\r\n                        </>)}\r\n                </>);\r\n        },\r\n    };\r\n    return <Dropdown {...dropdownProps} aria-required={true}/>;\r\n};\r\nexport default VNextVmSizePicker;\r\n","import { Stack, TextField, Toggle, Link, Shimmer, Icon, StackItem } from '@fluentui/react';\r\nimport { SharedColors } from '@fluentui/theme';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, FormattedNumber, useIntl } from 'react-intl';\r\nimport LinuxRdpDialog from '../../common/connection-type/linux-rdp-dialog';\r\nimport InfoSection from '../../common/info-section';\r\nimport InfoTip from '../../common/info-tip';\r\nimport { DefaultCurrencyCode, QuotaRequestNeededNumberOfVMs } from '../../utils/constants';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../utils/string-comparison';\r\nimport { LabConfigShimmer } from './create-lab-config-page-shared';\r\nimport { messages } from './create-lab-messages';\r\nimport { getDefaultConnectionTypes, getLocationMinCostFromImage, getSkuAndLocationMinCostFromImage, getSkuCostFromImageOS, getSkuMinCostFromImage, isSkuAvailable, isSkuLocationAvailable, } from './create-lab-selectors';\r\nimport { validateVnextLabName } from './lab-name-validator-vnext';\r\nimport { LabPlanPicker } from './lab-plan-picker';\r\nimport { getLocalizedLocationName } from './location-helpers';\r\nimport VNextVmLocationPicker from './vm-location-picker-vnext';\r\nimport { VmImagePicker } from './vm-image-picker';\r\nimport VNextVmSizePicker from './vm-size-picker-vnext';\r\nimport { getNumberOfRemainingVms, getSkuCostTargetUnit, getLocalizedSkuDisplayName, getNumberOfAvailableCores, } from '../../common/selectors/sku-selectors';\r\nimport { RequestLimitIncreaseInSentenceLink } from '../../common/request-limit-increase-link';\r\nimport { areConnectionTypesValid } from '../../common/connection-type/validators';\r\nexport const VNextNewLabConfigPage = (props) => {\r\n    const { name, image, sku, location, skus, images, isRdpEnabled, installGpuDriverEnabled, customizeTemplate, addImagesUrl, isLoadingOnSelectLabPlan, labPlans, selectedLabPlan, onSizeChange, onRdpEnabledChange, onLabPlanChange, onImageChange, onConnectionTypesValidation, hasSelectLabPlanLoadError, currentTenantId, labParentId, isV2BastionEnabled, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [linuxRdpDialogAcknowledged, setLinuxRdpDialogAcknowledged] = React.useState(false);\r\n    const [showLinuxRdpDialog, setShowLinuxRdpDialog] = React.useState(false);\r\n    const [locationBeforeSizeChange, setLocationBeforeSizeChange] = React.useState('');\r\n    const [sizeBeforeLocationChange, setSizeBeforeLocationChange] = React.useState('');\r\n    const availableCores = !location ? 0 : getNumberOfAvailableCores(location);\r\n    const numberOfVms = !sku || !location ? 0 : getNumberOfRemainingVms(sku, location);\r\n    const resetSizeAndLocationChange = () => {\r\n        setLocationBeforeSizeChange('');\r\n        setSizeBeforeLocationChange('');\r\n    };\r\n    const handleSizeChange = (value) => {\r\n        if (!!sku) {\r\n            if (caseInsensitiveCultureInvariantCompare(value.name, sku.name) === 0) {\r\n                return;\r\n            }\r\n        }\r\n        // Reset value\r\n        resetSizeAndLocationChange();\r\n        // Check if currently selected location is available on newly selected SKU\r\n        // If not, select cheapest available location and mark flag to show that we changed location\r\n        if (!!location?.name && isSkuLocationAvailable(value, location.name, image)) {\r\n            const skuLocation = value.locations.find((l) => caseInsensitiveCultureInvariantCompare(l.name, location?.name) === 0);\r\n            onSizeChange(value, skuLocation);\r\n        }\r\n        else {\r\n            const minLocation = getSkuMinCostFromImage(value, image);\r\n            const locationName = getLocalizedLocationName(location?.name ?? '', intl);\r\n            setLocationBeforeSizeChange(locationName);\r\n            onSizeChange(value, minLocation);\r\n        }\r\n    };\r\n    const handleImageChange = (value) => {\r\n        if (caseInsensitiveCultureInvariantCompare(value.id, image.id) === 0) {\r\n            return;\r\n        }\r\n        if (!skus) {\r\n            return;\r\n        }\r\n        resetSizeAndLocationChange();\r\n        const { isWindows } = value;\r\n        const connectionTypes = getDefaultConnectionTypes(isWindows, undefined, selectedLabPlan, false, isV2BastionEnabled);\r\n        const isValid = areConnectionTypesValid(!value.isWindows, connectionTypes, true);\r\n        onConnectionTypesValidation(isValid);\r\n        // Check if currently selected location is available on newly selected image\r\n        if (!!sku && !!location?.name && isSkuLocationAvailable(sku, location.name, value)) {\r\n            onImageChange(value, connectionTypes, sku, location);\r\n            return;\r\n        }\r\n        let newSku, newLocation;\r\n        const previousLocationName = !!location?.name ? getLocalizedLocationName(location?.name, intl) : '';\r\n        // Check if other locations of the current sku is available\r\n        if (!!sku && isSkuAvailable(sku, value)) {\r\n            // Get location\r\n            newLocation = getSkuMinCostFromImage(sku, value);\r\n            if (!!location?.name && newLocation) {\r\n                setLocationBeforeSizeChange(previousLocationName);\r\n                onImageChange(value, connectionTypes, sku, newLocation);\r\n                return;\r\n            }\r\n        }\r\n        // Check if other skus of the current location is available\r\n        const previousSkuName = !!sku ? getLocalizedSkuDisplayName(sku, intl) : '';\r\n        const minSkuSameLoction = !!location ? getLocationMinCostFromImage(skus, value, location.name) : undefined;\r\n        if (!!minSkuSameLoction) {\r\n            newSku = minSkuSameLoction;\r\n            newLocation = newSku.locations.find((o) => caseInsensitiveCultureInvariantCompare(o.name, location.name) === 0);\r\n            setSizeBeforeLocationChange(previousSkuName);\r\n        }\r\n        else {\r\n            // Find sku and location of min cost\r\n            const minSkuAndLocation = getSkuAndLocationMinCostFromImage(skus, value);\r\n            newSku = minSkuAndLocation?.sku;\r\n            newLocation = minSkuAndLocation?.location;\r\n            if (!!newSku && !!newLocation) {\r\n                setSizeBeforeLocationChange(previousSkuName);\r\n                setLocationBeforeSizeChange(previousLocationName);\r\n            }\r\n        }\r\n        onImageChange(value, connectionTypes, newSku, newLocation);\r\n    };\r\n    const handleLabPlanChange = (labPlanId) => {\r\n        resetSizeAndLocationChange();\r\n        onLabPlanChange(labPlanId);\r\n    };\r\n    const pricePerVm = getSkuCostFromImageOS(location, getSkuCostTargetUnit(image.isWindows));\r\n    return (<>\r\n            <Stack tokens={{ childrenGap: 30 }}>\r\n                <Stack.Item>\r\n                    <FormattedMessage {...messages.newLabConfigPageModifiedIntro} values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-setup-lab\" target=\"_blank\">\r\n                                    {chunks}\r\n                                </Link>),\r\n    }}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <TextField label={msg(messages.simplifiedNameLabel)} placeholder={msg(messages.namePlaceholder)} autoFocus={true} spellCheck={false} maxLength={100} value={name} validateOnLoad={props.validateNameOnLoad} onChange={(_, value) => props.onNameChange(value || '')} aria-required={true} onGetErrorMessage={(value) => {\r\n        // trimming for validation name so we compare correctly against the list of lab\r\n        // names that already exist\r\n        const result = validateVnextLabName(value.trim(), props.labNames, intl);\r\n        props.onNameValidation(!result);\r\n        return result || '';\r\n    }}/>\r\n                </Stack.Item>\r\n                {!!labPlans && labPlans.size > 1 && (<Stack.Item>\r\n                        <LabPlanPicker labPlans={labPlans} selected={selectedLabPlan} onChange={handleLabPlanChange}/>\r\n                    </Stack.Item>)}\r\n                {props.hasSelectLabPlanLoadError && !!selectedLabPlan && (<Stack horizontal tokens={{ childrenGap: 10 }}>\r\n                        <StackItem>\r\n                            <Icon iconName=\"Warning\" styles={{ root: { color: SharedColors.red20 } }}></Icon>\r\n                        </StackItem>\r\n                        <StackItem styles={{ root: { color: SharedColors.red20 } }}>\r\n                            {!!labPlans && labPlans.size > 1 && (<FormattedMessage id=\"NewLabConfigPageImageSizeLocationLoadErrorMultipleLabPlans\" defaultMessage=\"We failed to load the virtual machine images, sizes, or location information for the selected lab plan. Please <Link>try again</Link>, or select another plan.\" description=\"Message when loading images, sizes, or location information for the current lab plan failed and users have more than one lab plan.\" values={{\r\n        Link: (chunks) => (\r\n        // eslint-disable-next-line react/prop-types\r\n        <Link onClick={() => handleLabPlanChange(selectedLabPlan.id ?? '')}>\r\n                                                {chunks}\r\n                                            </Link>),\r\n    }}></FormattedMessage>)}\r\n                            {!!labPlans && labPlans.size === 1 && (<FormattedMessage id=\"NewLabConfigPageImageSizeLocationLoadErrorSingleLabPlan\" defaultMessage=\"We failed to load the virtual machine images, sizes, or location information for your lab plan. Please <Link>try again</Link>, or contact your IT administrator if the problem persists.\" description=\"Message when loading images, sizes, or location information for the current lab plan failed and users have only one available lab plan.\" values={{\r\n        Link: (chunks) => (\r\n        // eslint-disable-next-line react/prop-types\r\n        <Link onClick={() => handleLabPlanChange(selectedLabPlan.id)}>\r\n                                                {chunks}\r\n                                            </Link>),\r\n    }}></FormattedMessage>)}\r\n                        </StackItem>\r\n                    </Stack>)}\r\n                <Shimmer isDataLoaded={!isLoadingOnSelectLabPlan} customElementsGroup={LabConfigShimmer} width=\"100%\">\r\n                    {!hasSelectLabPlanLoadError && (<Stack tokens={{ childrenGap: 30 }}>\r\n                            <Stack.Item>\r\n                                <VmImagePicker label={msg(messages.simplifiedImageLabel)} searchPlaceholder={msg(messages.searchImages)} options={images} skus={skus} selectedKey={image.key} addImagesUrl={addImagesUrl} onChange={handleImageChange}/>\r\n                            </Stack.Item>\r\n                            {props.isSkipTemplateEnabled && (<Stack.Item>\r\n                                    <Stack horizontal styles={{ root: { marginTop: '15px !important' } }}>\r\n                                        <Stack.Item>\r\n                                            <Toggle label={msg(messages.customizeImageLabel)} ariaLabel={msg(messages.customizeImageLabel)} inlineLabel={true} checked={customizeTemplate} onChange={(_, value) => props.onCustomizeTemplateChange(value || false)}/>\r\n                                        </Stack.Item>\r\n                                        <Stack.Item>\r\n                                            <InfoTip content={msg(messages.customizeImageDescription)} styles={{ root: { paddingTop: '7px' } }}/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                </Stack.Item>)}\r\n                            <Stack.Item>\r\n                                <Stack>\r\n                                    {!!skus && (<Stack.Item>\r\n                                            <VNextVmSizePicker skus={skus} selected={sku} searchPlaceholder={msg(messages.searchSkus)} vmImageInfo={image} onChange={handleSizeChange}/>\r\n                                        </Stack.Item>)}\r\n                                    {sku && sku.size.isGpu && (<Stack.Item>\r\n                                            <Stack horizontal styles={{ root: { paddingTop: '15px' } }}>\r\n                                                <Stack.Item>\r\n                                                    <Toggle label={msg(messages.gpuLabel)} inlineLabel={true} checked={installGpuDriverEnabled} onChange={(_, value) => props.onInstallGpuDriverEnabledChange(value || false)}/>\r\n                                                </Stack.Item>\r\n                                                <Stack.Item styles={{ root: { paddingTop: '7px' } }}>\r\n                                                    <InfoTip content={msg(messages.gpuDriverTooltipText)} styles={{ root: { paddingTop: '7px' } }}/>\r\n                                                </Stack.Item>\r\n                                            </Stack>\r\n                                            {!installGpuDriverEnabled && (<Stack.Item>\r\n                                                    <FormattedMessage {...messages.newLabConfigPageGpuOptOutText}/>\r\n                                                </Stack.Item>)}\r\n                                        </Stack.Item>)}\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <Stack>\r\n                                    {props.canSelectGeography && !!sku && (<Stack.Item>\r\n                                            <VNextVmLocationPicker sku={sku} selected={location} onChange={props.onLocationChange} onChangeReset={resetSizeAndLocationChange} vmImageInfo={image}/>\r\n                                        </Stack.Item>)}\r\n                                    {sizeBeforeLocationChange && (<InfoSection>\r\n                                            <FormattedMessage id=\"SizeChangedFromImageChange\" defaultMessage=\"Your previously selected size ({previousSize}) is unavailable for this location, so we selected the lowest cost size available. \" description=\"Text describing when the lab creation size has been changed to another that has availability based on the selected image.\" values={{ previousSize: sizeBeforeLocationChange }}/>\r\n                                        </InfoSection>)}\r\n                                    {locationBeforeSizeChange && (<InfoSection>\r\n                                            <FormattedMessage id=\"LocationChangedFromSizeChange\" defaultMessage=\"Your previously selected location ({previousLocation}) is unavailable for this size, so we selected the lowest cost location available. \" description=\"Text describing when the lab creation location has been changed to a location that has availability based on the selected SKU size.\" values={{ previousLocation: locationBeforeSizeChange }}/>\r\n                                        </InfoSection>)}\r\n                                </Stack>\r\n                            </Stack.Item>\r\n                            {!image.isWindows && !props.isBastionEnabled && (<Stack.Item>\r\n                                    <Toggle label={msg(messages.rdpLabel)} inlineLabel={true} checked={isRdpEnabled} onChange={(_, value) => !linuxRdpDialogAcknowledged && !isRdpEnabled\r\n        ? setShowLinuxRdpDialog(true)\r\n        : onRdpEnabledChange(value || false)}/>\r\n                                </Stack.Item>)}\r\n                            <Stack.Item>\r\n                                <span style={{ backgroundColor: '#F3F2F1', fontWeight: 600, padding: 8 }}>\r\n                                    <FormattedMessage {...messages.newLabConfigPagePricePerVmFormat} values={{\r\n        price: (<FormattedNumber value={pricePerVm} style=\"currency\" currency={DefaultCurrencyCode}/>),\r\n    }}/>\r\n                                </span>\r\n                            </Stack.Item>\r\n                            {!!sku && !!location?.usage && (<Stack.Item>\r\n                                    <Stack horizontal tokens={{ childrenGap: 5 }}>\r\n                                        <Stack.Item styles={{ root: { paddingTop: '2px' } }}>\r\n                                            {numberOfVms <= 0 && (<Icon iconName=\"Warning\" styles={{ root: { color: SharedColors.red20 } }}/>)}\r\n                                            {numberOfVms > 0 && <InfoTip />}\r\n                                        </Stack.Item>\r\n                                        <Stack.Item styles={{\r\n        root: { color: numberOfVms <= 0 ? SharedColors.red20 : undefined },\r\n    }}>\r\n                                            <FormattedMessage id=\"NewLabConfigPageAvailableVms\" defaultMessage=\"{available} of {limit} {skuFamily} vCPUs are available in {location}. You can create {numOfVms} VM(s) of the selected size.\" description=\"Text describing how many cores are available for a given SKU family and region in a lab plan. Indicates the number of VMs that could be created based on number of cores available and size of selected VM.\" values={{\r\n        available: availableCores,\r\n        limit: location.usage.limit,\r\n        skuFamily: sku.family,\r\n        location: !!location?.name\r\n            ? getLocalizedLocationName(location.name, intl)\r\n            : '',\r\n        numOfVms: numberOfVms,\r\n    }}/>\r\n                                            {numberOfVms <= 0 && (<FormattedMessage id=\"VNextLimitExceededMessage\" defaultMessage=\" Before you can create a new lab, you need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message displayed on lab creation page when remaining cores are not enough for lab creation.\" values={{\r\n        requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labParentId={labParentId} tenantId={currentTenantId}/>),\r\n    }}/>)}\r\n                                            {numberOfVms > 0 && numberOfVms < QuotaRequestNeededNumberOfVMs && (<FormattedMessage id=\"VNextLimitNotEnoughMessage\" defaultMessage=\" If more VMs will be created in this lab, you need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message displayed on lab creation page when less than 30 VMs can be created due to quota limit.\" values={{\r\n        requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labParentId={labParentId} tenantId={currentTenantId}/>),\r\n    }}/>)}\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                    <Stack horizontal tokens={{ childrenGap: 5 }}>\r\n                                        <Stack.Item styles={{ root: { paddingTop: '2px' } }}>\r\n                                            <InfoTip />\r\n                                        </Stack.Item>\r\n                                        <Stack.Item styles={{\r\n        root: { color: undefined },\r\n    }}>\r\n                                            <FormattedMessage {...messages.linuxDistributionsInfo} values={{\r\n        Link: (chunks) => (<Link href=\"https://learn.microsoft.com/en-us/azure/lab-services/how-to-configure-auto-shutdown-lab-plans#supported-linux-distributions-for-automatic-shutdown\" target=\"_blank\">\r\n                                                            {chunks}\r\n                                                        </Link>),\r\n    }}/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                </Stack.Item>)}\r\n                        </Stack>)}\r\n                </Shimmer>\r\n            </Stack>\r\n            {showLinuxRdpDialog && (<LinuxRdpDialog onSubmit={() => {\r\n        setLinuxRdpDialogAcknowledged(true);\r\n        onRdpEnabledChange(true);\r\n        setShowLinuxRdpDialog(false);\r\n    }} onDismiss={() => setShowLinuxRdpDialog(false)}/>)}\r\n        </>);\r\n};\r\nexport default VNextNewLabConfigPage;\r\n","import { ChoiceGroup, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { messages } from './create-lab-messages';\r\nimport { CreateLabTimeEstimate } from '../../common/create-lab-time-estimate';\r\nexport const VmTemplateSettingsPage = (props) => {\r\n    const { isSubmitting, onIsTemplateVmEnabledChange } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const VmImageWithCustomization = 'createTemplateVm';\r\n    const VmImageWithoutCustomization = 'useVmImageWithoutCustomization';\r\n    const [selectedChoice, setSelectedChoice] = React.useState('createTemplateVm');\r\n    const [timeEstimateMessage, setTimeEstimateMessage] = React.useState(msg(messages.customTemplateVmPageTimeEstimate));\r\n    const optionsToCustomizeVmCreation = [\r\n        { key: VmImageWithCustomization, text: msg(messages.createTemplateVmOption) },\r\n        { key: VmImageWithoutCustomization, text: msg(messages.useVmImageWithoutCustomization) },\r\n    ];\r\n    const onSelectedChoiceChange = (selectedChoice) => {\r\n        setSelectedChoice(selectedChoice);\r\n        onIsTemplateVmEnabledChange(selectedChoice == VmImageWithCustomization);\r\n        if (selectedChoice == VmImageWithoutCustomization) {\r\n            setTimeEstimateMessage(msg(messages.noTemplateVmPageTimeEstimate));\r\n        }\r\n        else {\r\n            setTimeEstimateMessage(msg(messages.customTemplateVmPageTimeEstimate));\r\n        }\r\n    };\r\n    return (<Stack tokens={{ childrenGap: 20 }} style={{ height: '100%' }}>\r\n            <Stack.Item>\r\n                <FormattedMessage {...messages.templateVmSettingsPageMainMessage}/>\r\n            </Stack.Item>\r\n            <Stack.Item style={{ marginBottom: 10 }}>\r\n                <ChoiceGroup selectedKey={selectedChoice} options={optionsToCustomizeVmCreation} onChange={(_event, option) => onSelectedChoiceChange(option.key)} disabled={isSubmitting}/>\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { height: '100%' } }}>\r\n                <CreateLabTimeEstimate timeEstimateMessage={timeEstimateMessage}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default VmTemplateSettingsPage;\r\n","import { DefaultButton, Panel, PanelType, PrimaryButton, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { LabPlanSettingsInSentenceLink } from '../../common/lab-plan-settings-link';\r\nimport LoadingContainer from '../../common/loading-section';\r\nimport { SubmitButton } from '../../common/submit-button';\r\nimport { getCustomTheme } from '../../common/themes/selectors';\r\nimport UnsavedChangesDialog from '../../common/unsaved-changes-dialog';\r\nimport FullPageMessage from '../../full-page-message/full-page-message';\r\nimport commonMessages from '../../language/common-messages';\r\nimport Constants from '../../utils/constants';\r\nimport { trackEvent } from '../../utils/telemetry/telemetry-channel';\r\nimport VNextNewLabConfigPage from './create-lab-config-page-vnext';\r\nimport CreateLabCredentialsPage from './create-lab-credentials-page';\r\nimport { messages } from './create-lab-messages';\r\nimport CreateLabPoliciesPage from './create-lab-policies-page';\r\nimport { getIsBastionSupported, isRegionSelectable, isSkuAvailable } from './create-lab-selectors';\r\nimport { VmTemplateSettingsPage } from './create-lab-template-settings-page';\r\nimport { Link } from '@fluentui/react';\r\nexport const VNext_NewLabFlyout = (props) => {\r\n    const { isLoading, formState, onFormStateChange, createLabViewModel, onSelectLabPlan } = props;\r\n    const { isSubmitting, hasCapacityError, isBastionEnabled, isV2BastionEnabled, isSkipTemplateEnabled, currentTenantId, labNames, images, labAccount, addImagesUrl, validateNameOnLoad, hasLoadError, selectedLabPlan, isCurrentLabParentLabAccount, currentLabParentId, isLoadingOnSelectLabPlan, labPlans, hasSelectLabPlanLoadError, skuData, } = createLabViewModel;\r\n    const { name, image, sku, location, isRdpEnabled, installGpuDriverEnabled, customizeTemplate, username, password, nonAdminUsername, nonAdminPassword, isNonAdminEnabled, useSharedPassword, quota, connectionTypes, idleConfig, isTemplateVmEnabled, } = formState;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [page, setPage] = React.useState(1);\r\n    const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\r\n    // TODO: Migrate to final-form to handle all of this better\r\n    const [isLabNameValid, setIsLabNameValid] = React.useState(false);\r\n    const [isUsernameValid, setIsUsernameValid] = React.useState(false);\r\n    const [isPasswordValid, setIsPasswordValid] = React.useState(false);\r\n    const [isNonAdminUsernameValid, setIsNonAdminUsernameValid] = React.useState(false);\r\n    const [isNonAdminPasswordValid, setIsNonAdminPasswordValid] = React.useState(false);\r\n    const [isConnectionTypesValid, setIsConnectionTypesValid] = React.useState(true);\r\n    const { panelStyles } = getCustomTheme();\r\n    const canSelectRegion = selectedLabPlan ? isRegionSelectable(selectedLabPlan) : false;\r\n    const isPageOneValid = isLabNameValid &&\r\n        !!sku &&\r\n        !!location?.usage &&\r\n        !!selectedLabPlan &&\r\n        location.usage.limit - location.usage.currentValue >= sku.size.cores;\r\n    const isPageTwoValid = isUsernameValid &&\r\n        isPasswordValid &&\r\n        (!isNonAdminEnabled || (isNonAdminUsernameValid && isNonAdminPasswordValid));\r\n    const isPageThreeValid = isConnectionTypesValid;\r\n    const isFormValid = isPageOneValid && isPageTwoValid && isPageThreeValid;\r\n    const isBastionSupported = getIsBastionSupported(labAccount, isBastionEnabled, selectedLabPlan, isV2BastionEnabled);\r\n    const onExit = () => {\r\n        trackEvent('CREATE_LAB_CANCELLED');\r\n        props.onDismiss();\r\n    };\r\n    const onDismiss = () => {\r\n        if (page > 1) {\r\n            setShowConfirmDialog(true);\r\n        }\r\n        else {\r\n            onExit();\r\n        }\r\n    };\r\n    const goBack = () => {\r\n        if (page > 1) {\r\n            trackEvent('CREATE_LAB_GO_TO_PREVIOUS_PAGE');\r\n            setPage(page - 1);\r\n        }\r\n    };\r\n    const loadPageTwo = () => {\r\n        trackEvent('CREATE_LAB_GO_TO_PAGE_TWO');\r\n        setPage(2);\r\n    };\r\n    const loadPageThree = () => {\r\n        trackEvent('CREATE_LAB_GO_TO_PAGE_THREE');\r\n        setPage(3);\r\n    };\r\n    const loadPageFour = () => {\r\n        trackEvent('CREATE_LAB_GO_TO_PAGE_FOUR');\r\n        setPage(4);\r\n    };\r\n    const formSubmit = () => {\r\n        if (isFormValid) {\r\n            trackEvent('CREATE_LAB_FORM_SUBMITTED');\r\n            props.onSubmit();\r\n        }\r\n    };\r\n    const headerText = page === 1 ? messages.title1 : page === 2 ? messages.title2 : page === 3 ? messages.title3 : messages.title4;\r\n    // the sku location and images might be initially empty as we change from one lab plan to another\r\n    const areAllSkuOptionsDisabled = !!skuData && images.length > 0 && images.every(im => skuData.every(s => s.locations.length > 0 && !isSkuAvailable(s, im)));\r\n    return (<>\r\n            <Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} styles={panelStyles} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(headerText)} closeButtonAriaLabel={msg(commonMessages.close)} onRenderFooterContent={() => (<>\r\n                        {!isLoading && (<Stack horizontal tokens={{ childrenGap: 8 }} verticalFill verticalAlign=\"center\">\r\n                                <Stack.Item grow={1}>\r\n                                    <FormattedMessage {...messages.newLabFlyoutProgressFormat} values={{ stepNumber: page, maxStepNumber: 4 }}/>\r\n                                </Stack.Item>\r\n                                <Stack.Item grow={0}>\r\n                                    {page === 1 ? (<PrimaryButton disabled={!isPageOneValid} onClick={loadPageTwo}>\r\n                                            {msg(messages.next)}\r\n                                        </PrimaryButton>) : page === 2 ? (<PrimaryButton disabled={!isPageTwoValid} onClick={loadPageThree}>\r\n                                            {msg(messages.next)}\r\n                                        </PrimaryButton>) : page === 3 ? (<PrimaryButton disabled={!isPageThreeValid} onClick={loadPageFour}>\r\n                                            {msg(messages.next)}\r\n                                        </PrimaryButton>) : (<SubmitButton buttonText={msg(messages.finish)} isSubmitting={isSubmitting} disabled={!isFormValid} onClick={formSubmit}/>)}\r\n                                </Stack.Item>\r\n                                <Stack.Item grow={0}>\r\n                                    {page === 1 ? (<DefaultButton onClick={onDismiss} styles={{ root: { minWidth: 85 } }}>\r\n                                            {msg(commonMessages.cancel)}\r\n                                        </DefaultButton>) : (<DefaultButton onClick={goBack} styles={{ root: { minWidth: 85 } }} disabled={isSubmitting}>\r\n                                            {msg(messages.back)}\r\n                                        </DefaultButton>)}\r\n                                </Stack.Item>\r\n                            </Stack>)}\r\n                    </>)}>\r\n                {hasLoadError ? (<FullPageMessage image=\"error-general\" message={<FormattedMessage {...messages.newLabFlyoutLoadError}/>} messageDetails={<FormattedMessage {...messages.newLabFlyoutLoadErrorDetails}/>}/>) : areAllSkuOptionsDisabled ? (<FullPageMessage image=\"error-access\" message={<></>} messageDetails={<>\r\n                                <FormattedMessage id=\"VNextUnavailableSizesMessage\" defaultMessage=\"There are no virtual machine sizes available for your selected region. Please use {labPlanSettingsLink} to enable other regions for your lab plan and try creating the lab again. {labPlanRegionsLink}\" description=\"Error shown on new lab flyout when no VM sizes are enabled for all the regions in the lab plan.\" values={{\r\n        labPlanSettingsLink: (<LabPlanSettingsInSentenceLink labPlanId={selectedLabPlan?.id} tenantId={currentTenantId}/>),\r\n        labPlanRegionsLink: (<Link href={Constants.Urls.LabPlanRegions} target=\"_blank\">\r\n                                                <FormattedMessage {...messages.newLabFlyoutLabPlanRegions}/>\r\n                                            </Link>)\r\n    }}/>\r\n                                <br /><br />\r\n                                <FormattedMessage id=\"VNextUnavailableSizesAdminMessage\" defaultMessage=\"Please contact your lab administrator to report the issue. If you are an administrator, please enable additional regions for your lab plan, or {technicalSupportRequestLink}.\" description=\"Call to action shown for admins on new lab flyout when no VM sizes are enabled for all regions in the lab plan.\" values={{\r\n        technicalSupportRequestLink: (<Link href={Constants.Urls.TechnicalSupportRequest(currentTenantId)} target=\"_blank\">\r\n                                                <FormattedMessage {...messages.newLabFlyoutTechnicalSupportRequest}/>\r\n                                            </Link>)\r\n    }}/>\r\n                            </>}/>) : hasCapacityError ? (<FullPageMessage image=\"error-general\" message={<FormattedMessage {...messages.newLabFlyoutLoadError}/>} messageDetails={<FormattedMessage {...messages.newLabFlyoutCapacityErrorDetails}/>}/>) : isLoading ? (<LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>) : page === 1 ? (<VNextNewLabConfigPage validateNameOnLoad={validateNameOnLoad} name={name} image={image} sku={sku} location={location} isRdpEnabled={isRdpEnabled} installGpuDriverEnabled={installGpuDriverEnabled} customizeTemplate={customizeTemplate} canSelectGeography={canSelectRegion} skus={skuData} images={images} labNames={labNames} labPlans={labPlans} isLoadingOnSelectLabPlan={isLoadingOnSelectLabPlan} selectedLabPlan={selectedLabPlan} labParentId={currentLabParentId} currentTenantId={currentTenantId} isBastionEnabled={isBastionEnabled} isV2BastionEnabled={isV2BastionEnabled} isSkipTemplateEnabled={isSkipTemplateEnabled} addImagesUrl={addImagesUrl} hasSelectLabPlanLoadError={hasSelectLabPlanLoadError} onConnectionTypesValidation={(isValid) => setIsConnectionTypesValid(isValid)} onNameChange={(name) => onFormStateChange({ name })} onImageChange={(image, connectionTypes, sku, location) => onFormStateChange({ image, connectionTypes, sku, location })} onSizeChange={(sku, location) => onFormStateChange({ sku, location })} onLocationChange={(location) => onFormStateChange({ location })} onRdpEnabledChange={(isRdpEnabled) => onFormStateChange({ isRdpEnabled })} onNameValidation={(isValid) => setIsLabNameValid(isValid)} onInstallGpuDriverEnabledChange={(installGpuDriverEnabled) => onFormStateChange({ installGpuDriverEnabled })} onCustomizeTemplateChange={(customizeTemplate) => onFormStateChange({ customizeTemplate })} onLabPlanChange={onSelectLabPlan}/>) : page === 2 ? (<CreateLabCredentialsPage isVNext={!isCurrentLabParentLabAccount} image={image} customizeTemplate={customizeTemplate} username={username} password={password} nonAdminUsername={nonAdminUsername} nonAdminPassword={nonAdminPassword} useSharedPassword={useSharedPassword} isNonAdminEnabled={isNonAdminEnabled} isPasswordValid={isPasswordValid} isNonAdminPasswordValid={isNonAdminPasswordValid} onPasswordChange={(password) => onFormStateChange({ password })} onUsernameChange={(username) => onFormStateChange({ username })} onNonAdminPasswordChange={(nonAdminPassword) => onFormStateChange({ nonAdminPassword })} onNonAdminUsernameChange={(nonAdminUsername) => onFormStateChange({ nonAdminUsername })} onUseSharedPasswordChange={(useSharedPassword) => onFormStateChange({ useSharedPassword })} onNonAdminEnabledChange={(isNonAdminEnabled) => onFormStateChange({ isNonAdminEnabled })} onUsernameValidationChange={(isValid) => setIsUsernameValid(isValid)} onPasswordValidationChange={(isValid) => setIsPasswordValid(isValid)} onNonAdminUsernameValidationChange={(isValid) => setIsNonAdminUsernameValid(isValid)} onNonAdminPasswordValidationChange={(isValid) => setIsNonAdminPasswordValid(isValid)}/>) : page === 3 ? (<CreateLabPoliciesPage isVNext={!isCurrentLabParentLabAccount} image={image} isSubmitting={isSubmitting} quota={quota} idleConfig={idleConfig} isBastionEnabled={isBastionEnabled} isBastionSupported={isBastionSupported} connectionTypes={connectionTypes} isConnectionTypesValid={isConnectionTypesValid} onQuotaChange={(quota) => onFormStateChange({ quota })} onConnectionTypesChange={(connectionTypes) => onFormStateChange({ connectionTypes })} onIdleConfigChange={(idleConfig) => onFormStateChange({ idleConfig })} onConnectionTypesValidationChange={(isValid) => setIsConnectionTypesValid(isValid)}/>) : (<VmTemplateSettingsPage isTemplateVmEnabled={isTemplateVmEnabled} isSubmitting={isSubmitting} onIsTemplateVmEnabledChange={(isTemplateVmEnabled) => onFormStateChange({ isTemplateVmEnabled })}/>)}\r\n            </Panel>\r\n            {showConfirmDialog && (<UnsavedChangesDialog title={<FormattedMessage {...messages.newLabFlyoutDiscardTitle}/>} message={<FormattedMessage {...messages.newLabFlyoutDiscardMessage}/>} onOk={onExit} onCancel={() => setShowConfirmDialog(false)}/>)}\r\n        </>);\r\n};\r\nexport default VNext_NewLabFlyout;\r\n","import { LabServicesModels } from 'lab-services';\r\nimport { LabsApiModels } from 'lab-services-internal';\r\nimport { duration } from 'moment';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { idleConfigToAutoShutdownProfile } from '../../common/shutdown-policy/selectors';\r\nimport { toEnableState, toConnectionType } from '../../data/helpers/enum-helpers';\r\nimport { ConnectionType } from '../../data/models/environment-common';\r\nimport { createVNextLab, checkVnextCreatelabPermission } from '../../redux/actions/lab/lab-action-creators';\r\nimport { selectLabPlan } from '../../redux/actions/lab-plan/lab-plan-action-creators';\r\nimport { trackEvent } from '../../utils/telemetry/telemetry-channel';\r\nimport { getCreateLabContainerModel, getDefaultConnectionTypes, getDefaultImage, getDefaultLocationFromSku, getDefaultSku, } from './create-lab-selectors';\r\nimport VNext_NewLabFlyout from './create-lab-flyout-vnext';\r\nclass VNext_CreateLabFlyoutContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._selectDefaultLabPlan = () => {\r\n            const { labPlans } = this.props.createLabViewModel;\r\n            if (!!labPlans && labPlans.size > 0) {\r\n                this.props.selectLabPlan(labPlans.get(0).id);\r\n            }\r\n        };\r\n        this._onFormStateChange = (newState) => {\r\n            const { formState: oldState } = this.state;\r\n            const formState = { ...oldState, ...newState };\r\n            this.setState({ formState });\r\n        };\r\n        this._updateFormDataOnImageLoaded = (shouldInitializeName) => {\r\n            const { createLabViewModel, defaultLabName } = this.props;\r\n            const { name } = this.state.formState;\r\n            const { username, password, nonAdminUsername, nonAdminPassword, isNonAdminEnabled } = this.state.formState;\r\n            const { images, labAccount, skuData, defaultIdleConfig, isBastionEnabled, selectedLabPlan, isV2BastionEnabled, } = createLabViewModel;\r\n            const image = getDefaultImage(images);\r\n            const sku = !image || !skuData ? undefined : getDefaultSku(skuData, image);\r\n            const location = !image || !sku ? undefined : getDefaultLocationFromSku(sku, image);\r\n            const connectionTypes = image\r\n                ? getDefaultConnectionTypes(image.isWindows, labAccount, selectedLabPlan, isBastionEnabled, isV2BastionEnabled)\r\n                : [];\r\n            this._onFormStateChange({\r\n                name: !!shouldInitializeName ? defaultLabName : name,\r\n                image,\r\n                location,\r\n                sku,\r\n                connectionTypes,\r\n                idleConfig: defaultIdleConfig,\r\n                labPlanId: selectedLabPlan?.id,\r\n                useSharedPassword: true,\r\n                isNonAdminEnabled,\r\n                username,\r\n                password,\r\n                nonAdminUsername,\r\n                nonAdminPassword,\r\n                isTemplateVmEnabled: true,\r\n            });\r\n        };\r\n        this._initializeFormData = () => {\r\n            this._updateFormDataOnImageLoaded(true);\r\n            this.setState({ formStateInitialized: true });\r\n        };\r\n        this.state = {\r\n            formStateInitialized: false,\r\n            formState: {\r\n                name: '',\r\n                image: undefined,\r\n                sku: undefined,\r\n                location: undefined,\r\n                isRdpEnabled: false,\r\n                installGpuDriverEnabled: true,\r\n                customizeTemplate: true,\r\n                username: '',\r\n                password: '',\r\n                useSharedPassword: false,\r\n                nonAdminUsername: '',\r\n                nonAdminPassword: '',\r\n                isNonAdminEnabled: false,\r\n                quota: 10,\r\n                connectionTypes: [],\r\n                idleConfig: undefined,\r\n                isTemplateVmEnabled: true,\r\n                labCapacity: 0,\r\n            },\r\n        };\r\n    }\r\n    componentDidMount() {\r\n        trackEvent('CREATE_LAB_STARTED');\r\n        if (this.props.labParentId) {\r\n            if (!this.props.isLoadingLabPlans && !this.props.hasLabPlanLoadError) {\r\n                this._selectDefaultLabPlan();\r\n            }\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps, prevState) {\r\n        const { isLoading, hasLoadError, isLoadingOnSelectLabPlan } = this.props.createLabViewModel;\r\n        const { isLoadingLabPlans, hasLabPlanLoadError } = this.props;\r\n        if (prevProps.isLoadingLabPlans && !isLoadingLabPlans && !hasLabPlanLoadError) {\r\n            this._selectDefaultLabPlan();\r\n        }\r\n        // initialize form when finishing loading stores. listing lab plan images is completed before all required stores are loaded.\r\n        if (prevProps.createLabViewModel.isLoading && !isLoading && !hasLoadError && !isLoadingOnSelectLabPlan) {\r\n            this._initializeFormData();\r\n        }\r\n        if (prevProps.createLabViewModel.isSubmitting != this.props.createLabViewModel.isSubmitting &&\r\n            !this.props.createLabViewModel.isSubmitting) {\r\n            if (this.props.hasLabErrors) {\r\n                this.props.onDismiss();\r\n            }\r\n        }\r\n        if (!!prevProps.createLabViewModel.isLoadingOnSelectLabPlan &&\r\n            !isLoadingOnSelectLabPlan &&\r\n            !isLoading &&\r\n            !hasLoadError) {\r\n            // initialize form when finishing listing the images of default selected lab plan\r\n            if (!prevState.formStateInitialized) {\r\n                this._initializeFormData();\r\n            }\r\n            else {\r\n                // update form when switching lab plan\r\n                this._updateFormDataOnImageLoaded();\r\n            }\r\n        }\r\n    }\r\n    render() {\r\n        const { onDismiss, createLabViewModel, selectLabPlan } = this.props;\r\n        const { isLoading } = createLabViewModel;\r\n        const { formStateInitialized, formState } = this.state;\r\n        return (<VNext_NewLabFlyout createLabViewModel={createLabViewModel} isLoading={isLoading || !formStateInitialized} formState={formState} onFormStateChange={this._onFormStateChange} onSubmit={() => this._onSubmit()} onDismiss={onDismiss} onSelectLabPlan={(labPlanId) => {\r\n            selectLabPlan(labPlanId);\r\n        }}/>);\r\n    }\r\n    _onSubmit() {\r\n        const { onCreatedRoute, createLabViewModel, aadGroupId } = this.props;\r\n        const { isBastionEnabled, selectedLabPlan } = createLabViewModel;\r\n        const { formState } = this.state;\r\n        const { name, sku, location, image, installGpuDriverEnabled, useSharedPassword, username, password, nonAdminUsername, nonAdminPassword, isNonAdminEnabled, quota, idleConfig, connectionTypes, isTemplateVmEnabled, labCapacity, } = formState;\r\n        const isSharedPasswordDisabled = !useSharedPassword;\r\n        const connectionProfile = {\r\n            webSshAccess: toConnectionType(isBastionEnabled && connectionTypes.includes(ConnectionType.SshInBrowser)),\r\n            webRdpAccess: toConnectionType(isBastionEnabled && connectionTypes.includes(ConnectionType.RdpInBrowser)),\r\n            clientSshAccess: toConnectionType(isBastionEnabled && connectionTypes.includes(ConnectionType.Ssh)),\r\n            clientRdpAccess: toConnectionType(isBastionEnabled && connectionTypes.includes(ConnectionType.Rdp)),\r\n        };\r\n        const nonAdminUser = {\r\n            username: nonAdminUsername.trim(),\r\n            password: nonAdminPassword.trim(),\r\n        };\r\n        const virtualMachineProfile = {\r\n            createOption: isTemplateVmEnabled\r\n                ? LabsApiModels.CreateOption.TemplateVM\r\n                : LabsApiModels.CreateOption.Image,\r\n            usageQuota: duration(quota, 'h').toISOString(),\r\n            imageReference: !image?.imageReference ? {} : image.imageReference,\r\n            osType: !image?.isWindows ? LabServicesModels.OsType.Linux : LabServicesModels.OsType.Windows,\r\n            sku: {\r\n                name: sku.name,\r\n                capacity: !isTemplateVmEnabled ? labCapacity : 0,\r\n            },\r\n            useSharedPassword: toEnableState(!isSharedPasswordDisabled),\r\n            adminUser: {\r\n                username: username.trim(),\r\n                password: password.trim(),\r\n            },\r\n            nonAdminUser: isNonAdminEnabled ? nonAdminUser : undefined,\r\n            additionalCapabilities: {\r\n                installGpuDrivers: sku?.size.isGpu ? toEnableState(installGpuDriverEnabled) : toEnableState(false),\r\n            },\r\n        };\r\n        const createLabProps = {\r\n            name: name.trim(),\r\n            title: name.trim(),\r\n            location: location?.key ?? '',\r\n            labPlanId: selectedLabPlan?.id,\r\n            securityProfile: {\r\n                openAccess: toEnableState(false),\r\n            },\r\n            rosterProfile: {\r\n                activeDirectoryGroupId: !aadGroupId ? undefined : aadGroupId,\r\n            },\r\n            autoShutdownProfile: idleConfigToAutoShutdownProfile(idleConfig),\r\n            connectionProfile,\r\n            virtualMachineProfile,\r\n            networkProfile: !!selectedLabPlan?.defaultNetworkProfile ? selectedLabPlan.defaultNetworkProfile : {},\r\n        };\r\n        if (createLabProps.labPlanId !== null) {\r\n            this.props.checkVnextCreatelabPermission(createLabProps.labPlanId);\r\n        }\r\n        this.props.createVNextLab(this.props.labParentId, createLabProps, onCreatedRoute);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getCreateLabContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    selectLabPlan,\r\n    checkVnextCreatelabPermission,\r\n    createVNextLab,\r\n};\r\nexport const VNext_CreateLabFlyoutContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(VNext_CreateLabFlyoutContainerInjected));\r\nexport default VNext_CreateLabFlyoutContainer;\r\n","import { DefaultButton, Dialog, DialogType, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport { Constants } from '../utils/constants';\r\nconst messages = defineMessages({\r\n    deleteLabTitle: {\r\n        id: 'DeleteLabTitle',\r\n        defaultMessage: 'Delete lab',\r\n        description: 'Title for dialog box confirming lab delete',\r\n    },\r\n    deleteLabMessage: {\r\n        id: 'DeleteLabMessage',\r\n        defaultMessage: `The lab ‘{name}’ and its virtual machines will be permanently deleted. Do you want to continue?`,\r\n        description: 'Message for dialog box confirming lab delete',\r\n    },\r\n});\r\nexport const DeleteLabDialog = (props) => {\r\n    const { lab, isSubmitting, onDismiss, deleteLab } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    // close the dialog after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const onSubmit = () => {\r\n        deleteLab(lab.id);\r\n    };\r\n    return (<Dialog hidden={false} onDismiss={isSubmitting ? undefined : onDismiss} maxWidth={Constants.DefaultDialogWidth} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: msg(messages.deleteLabTitle),\r\n        subText: msg(messages.deleteLabMessage, { name: lab.name }),\r\n    }}>\r\n            <Stack horizontal tokens={{ childrenGap: '8px' }} styles={{ root: { width: '100%' } }} verticalAlign=\"end\" horizontalAlign=\"end\">\r\n                <Stack.Item>\r\n                    <SubmitButton isSubmitting={isSubmitting} buttonText={msg(commonMessages.delete)} onClick={onSubmit}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DefaultButton disabled={isSubmitting} onClick={isSubmitting ? undefined : onDismiss} text={msg(commonMessages.cancel)}/>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Dialog>);\r\n};\r\nexport default DeleteLabDialog;\r\n","import * as React from 'react';\r\nimport { TransitionGroup, CSSTransition } from 'react-transition-group';\r\nimport './carousel-cards.css';\r\n// NOTE: This is a quick port of an outlook control that removes their dependencies\r\nexport class CarouselCards extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n            const { currentCard: oldCard } = this.props;\r\n            const { currentCard: newCard } = nextProps;\r\n            if (newCard !== oldCard) {\r\n                this.setState({\r\n                    previousCard: oldCard,\r\n                });\r\n            }\r\n        };\r\n        this.render = () => {\r\n            const { currentCard, cards } = this.props;\r\n            const { previousCard } = this.state;\r\n            const visibleCard = cards.length > currentCard ? cards[currentCard] : undefined;\r\n            const visibleContent = visibleCard ? visibleCard.content() : null;\r\n            const movingBackwards = previousCard > currentCard;\r\n            return (<div className=\"cardContainer\">\r\n                <div className=\"ariaCard\" aria-live=\"assertive\" aria-atomic=\"true\" aria-label={visibleCard?.ariaLabel}/>\r\n                <TransitionGroup>\r\n                    <CSSTransition classNames={movingBackwards\r\n                ? {\r\n                    enter: 'movingBackwards-next',\r\n                    enterActive: 'current',\r\n                    exit: 'movingBackwards-previous',\r\n                }\r\n                : {\r\n                    enter: 'movingForwards-next',\r\n                    enterActive: 'current',\r\n                    exit: 'movingForwards-previous',\r\n                }} timeout={200} key={`carousel-card-${currentCard}`}>\r\n                        <div className=\"card\">{visibleContent}</div>\r\n                    </CSSTransition>\r\n                </TransitionGroup>\r\n            </div>);\r\n        };\r\n        this.state = {\r\n            previousCard: -1,\r\n        };\r\n    }\r\n}\r\nexport default CarouselCards;\r\n","import * as React from 'react';\r\nimport { getRTL, Icon } from '@fluentui/react';\r\nimport classNames from 'classnames';\r\nimport './carousel-pagination.css';\r\n// NOTE: This is a quick port of an outlook control that removes their dependencies\r\nexport class CarouselPagination extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.handleKeyPress = (e) => {\r\n            const { currentPage, pages, onPageClicked } = this.props;\r\n            const previousKeyCode = getRTL() ? 39 /* right */ : 37; /* left */\r\n            const nextKeyCode = getRTL() ? 37 /* left */ : 39; /* right */\r\n            if (e.keyCode === previousKeyCode && currentPage > 0) {\r\n                onPageClicked(currentPage - 1);\r\n            }\r\n            else if (e.keyCode === nextKeyCode && currentPage < pages - 1) {\r\n                onPageClicked(currentPage + 1);\r\n            }\r\n        };\r\n        this.renderDots = () => {\r\n            const { currentPage, pages, onPageClicked } = this.props;\r\n            const dots = [];\r\n            for (let i = 0; i < pages; ++i) {\r\n                const isActive = i === currentPage;\r\n                const className = classNames({\r\n                    dot: true,\r\n                    activeDot: isActive,\r\n                });\r\n                const dot = (<Icon iconName={'CircleFill'} className={className} key={`carousel-dot-${i}`} onClick={() => onPageClicked(i)}/>);\r\n                dots.push(dot);\r\n            }\r\n            return dots;\r\n        };\r\n        this.render = () => {\r\n            const { pages, currentPage, containerClassName } = this.props;\r\n            const dots = this.renderDots();\r\n            const className = containerClassName ? `carouselPagination ${containerClassName}` : 'carouselPagination ';\r\n            return (<div className={className} tabIndex={0} role=\"slider\" aria-valuemin={1} aria-valuemax={pages} aria-valuenow={currentPage + 1} onKeyDown={this.handleKeyPress}>\r\n                {dots}\r\n            </div>);\r\n        };\r\n    }\r\n}\r\nexport default CarouselPagination;\r\n","import * as React from 'react';\r\nimport { Modal, IconButton, getRTL } from '@fluentui/react';\r\nimport classNames from 'classnames';\r\nimport { injectIntl } from 'react-intl';\r\nimport { CarouselCards } from './carousel-cards';\r\nimport { CarouselPagination } from './carousel-pagination';\r\nimport commonMessages from '../../language/common-messages';\r\nimport './carousel.css';\r\n// NOTE: This is a quick port of an outlook control that removes their dependencies\r\nclass CarouselInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.onCardChange = (currentPage) => {\r\n            const { onCardChange } = this.props;\r\n            this.setState({\r\n                currentPage,\r\n            });\r\n            if (onCardChange) {\r\n                onCardChange(currentPage);\r\n            }\r\n        };\r\n        this.render = () => {\r\n            const { isOpen, cardContent, onClose, intl } = this.props;\r\n            const { currentPage } = this.state;\r\n            const { formatMessage: msg } = intl;\r\n            const numCards = cardContent.length;\r\n            const previousClassName = classNames({\r\n                previousCard: true,\r\n                hideButton: currentPage === 0,\r\n            });\r\n            const nextClassName = classNames({\r\n                nextCard: true,\r\n                hideButton: currentPage === numCards - 1,\r\n            });\r\n            return (<Modal isOpen={isOpen} containerClassName=\"carouselContainer\" onDismiss={onClose} isBlocking={false} styles={{ root: { minHeight: '730px' } }}>\r\n                <div className=\"carouselScroll\">\r\n                    <div className=\"gutter\">\r\n                        <IconButton className={previousClassName} iconProps={{ iconName: getRTL() ? 'ChevronRight' : 'ChevronLeft' }} onClick={() => this.onCardChange(currentPage - 1)} ariaLabel={msg(commonMessages.previous)}/>\r\n                    </div>\r\n                    <div className=\"mainContent\">\r\n                        <CarouselCards cards={cardContent} currentCard={currentPage}/>\r\n                        <div className=\"closeButtonContainer\">\r\n                            <button onClick={onClose} className=\"closeButton\"/>\r\n                        </div>\r\n                        <div className=\"paginationContainer\">\r\n                            <CarouselPagination pages={numCards} currentPage={currentPage} onPageClicked={(page) => this.onCardChange(page)} containerClassName=\"cardPagination\"/>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"gutter\">\r\n                        <IconButton className={nextClassName} iconProps={{ iconName: getRTL() ? 'ChevronLeft' : 'ChevronRight' }} onClick={() => this.onCardChange(currentPage + 1)} ariaLabel={msg(commonMessages.next)}/>\r\n                    </div>\r\n                </div>\r\n            </Modal>);\r\n        };\r\n        this.state = {\r\n            currentPage: 0,\r\n        };\r\n    }\r\n}\r\nexport const Carousel = injectIntl(CarouselInjected);\r\nexport default Carousel;\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    showTipsLabel: {\r\n        id: 'LabListIntroShowTips',\r\n        defaultMessage: 'Show tips and suggestions',\r\n        description: 'The label for a checkbox to enable / disable showing tips and suggestions.',\r\n    },\r\n    initialPageTitle: {\r\n        id: 'LabListIntroInitialPageTitle',\r\n        defaultMessage: 'Welcome to Azure Lab Services',\r\n        description: 'The title text displayed on the initial page of the lab list introduction.',\r\n    },\r\n    initialPageContent: {\r\n        id: 'LabListIntroInitialPageContent',\r\n        defaultMessage: 'Azure Lab Services is the easiest way to create and manage virtual computer labs for your classroom. To help you get started, we would like to introduce you to some core concepts.',\r\n        description: 'The text content on the initial page of the lab list introduction.',\r\n    },\r\n    templatePageTitle: {\r\n        id: 'LabListIntroTemplatePageTitle',\r\n        defaultMessage: 'Template virtual machine',\r\n        description: 'The title text displayed on the template page of the lab list introduction.',\r\n    },\r\n    templatePageContent: {\r\n        id: 'LabListIntroTemplatePageContent',\r\n        defaultMessage: 'A template virtual machine is a base image from which all other virtual machines in the lab are created. You can configure the template virtual machine and install the software you want to provide to students.',\r\n        description: 'The text content of the template page of the lab list introduction',\r\n    },\r\n    labPageTitle: {\r\n        id: 'LabListIntroLabPageTitle',\r\n        defaultMessage: 'Creating a new lab',\r\n        description: 'The title text displayed on the lab page of the lab list introduction.',\r\n    },\r\n    labPageContent: {\r\n        id: 'LabListIntroLabPageContent',\r\n        defaultMessage: 'A lab is set up by selecting the virtual machine size, operating system image, and credentials for the lab. A template virtual machine will then be created using those settings. Publishing will replicate its contents to all student virtual machines in the lab.',\r\n        description: 'The text content of the lab page of the lab list introduction.',\r\n    },\r\n    studentPageTitle: {\r\n        id: 'LabListIntroStudentPageTitle',\r\n        defaultMessage: 'Student virtual machines',\r\n        description: 'The title text displayed on the student page of the lab list introduction.',\r\n    },\r\n    studentPageContent: {\r\n        id: 'LabListIntroStudentPageContent',\r\n        defaultMessage: 'Students can register using a link, and virtual machines will be assigned to them in the lab. Once registered, they can start, connect, and stop their virtual machine in order to work with it directly.',\r\n        description: 'The text content of the student page of the lab list introduction.',\r\n    },\r\n});\r\n","import { Checkbox, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport Lottie from 'react-lottie';\r\nimport createLabAnimation from '../animations/professor-fre/create-lab.json';\r\nimport studentVirtualMachineAnimation from '../animations/professor-fre/student-virtual-machine.json';\r\nimport virtualMachineAnimation from '../animations/professor-fre/virtual-machine.json';\r\nimport welcomeAnimation from '../animations/professor-fre/welcome.json';\r\nimport { Carousel } from '../common/carousel/carousel';\r\nimport { messages } from './introduction-messages';\r\nimport './introduction.css';\r\nconst LabListIntroCarouselItem = (props) => {\r\n    const { animationData, headingText, contentText, extraContent, isVisible } = props;\r\n    return (<Stack className=\"lab-list-intro__carousel-item\" tokens={{ childrenGap: 38 }}>\r\n            <Stack.Item className=\"lab-list-intro__carousel-item__animation\">\r\n                <Lottie options={{ loop: false, autoplay: true, animationData }} isStopped={!isVisible}/>\r\n            </Stack.Item>\r\n            <Stack.Item className=\"lab-list-intro__carousel-item__content\" align=\"center\" grow>\r\n                <Stack className=\"lab-list-intro__content-container\" horizontalAlign=\"center\" grow>\r\n                    <Stack.Item className=\"lab-list-intro__content-header\">{headingText}</Stack.Item>\r\n                    <Stack.Item className=\"lab-list-intro__content-text\">{contentText}</Stack.Item>\r\n                    <Stack.Item className=\"lab-list-intro__extra-content\" grow align=\"center\">\r\n                        {extraContent}\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const LabListIntroduction = (props) => {\r\n    const { onDismiss, toggleShowTips, hintsEnabled, checkboxEnabled } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [currentSlide, setCurrentSlide] = React.useState(0);\r\n    const cardContent = [\r\n        {\r\n            content: () => (<LabListIntroCarouselItem animationData={welcomeAnimation} isVisible={currentSlide === 0} headingText={<FormattedMessage {...messages.initialPageTitle}/>} contentText={<FormattedMessage {...messages.initialPageContent}/>} extraContent={checkboxEnabled ? (<Checkbox checked={hintsEnabled} label={msg(messages.showTipsLabel)} onChange={(ev, checked) => toggleShowTips(!!checked)} styles={{ root: { paddingTop: '30px', fontSize: '14px', lineHeight: '20px' } }}/>) : undefined}/>),\r\n        },\r\n        {\r\n            content: () => (<LabListIntroCarouselItem animationData={virtualMachineAnimation} isVisible={currentSlide === 1} headingText={<FormattedMessage {...messages.templatePageTitle}/>} contentText={<FormattedMessage {...messages.templatePageContent}/>}/>),\r\n        },\r\n        {\r\n            content: () => (<LabListIntroCarouselItem animationData={createLabAnimation} isVisible={currentSlide === 2} headingText={<FormattedMessage {...messages.labPageTitle}/>} contentText={<FormattedMessage {...messages.labPageContent}/>}/>),\r\n        },\r\n        {\r\n            content: () => (<LabListIntroCarouselItem animationData={studentVirtualMachineAnimation} isVisible={currentSlide === 3} headingText={<FormattedMessage {...messages.studentPageTitle}/>} contentText={<FormattedMessage {...messages.studentPageContent}/>}/>),\r\n        },\r\n    ];\r\n    return (<Carousel isOpen={true} cardContent={cardContent} onClose={onDismiss} onCardChange={(page) => setCurrentSlide(page)}/>);\r\n};\r\nexport default LabListIntroduction;\r\n","import { defineMessages } from 'react-intl';\r\nexport const labAppNavMessages = defineMessages({\r\n    template: {\r\n        id: 'LabAppNavTemplateButton',\r\n        defaultMessage: 'Template',\r\n        description: 'Button text and aria label for the template page navigation item.',\r\n    },\r\n    virtualMachinePool: {\r\n        id: 'LabAppNavVirtualMachinePoolButton',\r\n        defaultMessage: 'Virtual machine pool',\r\n        description: 'Button text and aria label for the virtual machine pool page navigation item.',\r\n    },\r\n    dashboard: {\r\n        id: 'LabAppNavDashboardButton',\r\n        defaultMessage: 'Dashboard',\r\n        description: 'Button text and aria label for the dashboard page navigation item.',\r\n    },\r\n    settings: {\r\n        id: 'LabAppNavSettingsButton',\r\n        defaultMessage: 'Settings',\r\n        description: 'Button text and aria label for the settings page navigation item.',\r\n    },\r\n});\r\nexport default labAppNavMessages;\r\n","import { ContextualMenuItemType, DocumentCardActions, ProgressIndicator, Stack, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport { labAppNavMessages } from '../lab-app/lab-app-nav-messages';\r\nimport commonMessages from '../language/common-messages';\r\nimport './lab-list.css';\r\nconst messages = defineMessages({\r\n    labMenuAria: {\r\n        id: 'LabMenuAria',\r\n        defaultMessage: 'Lab menu',\r\n        description: 'Aria label for a button that indicates the lab menu.',\r\n    },\r\n});\r\nexport const LabCardFooter = (props) => {\r\n    const { isDeletionFailed, isWriteable, isMoving, isDeleting, onScheduleClicked, onUsersClicked, onVmsClicked, onDeleteClicked, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const virtualMachinesText = msg(labAppNavMessages.virtualMachinePool);\r\n    const scheduleText = msg(commonMessages.schedule);\r\n    const usersText = msg(commonMessages.users);\r\n    const deleteText = msg(commonMessages.delete);\r\n    const ariaLabel = msg(messages.labMenuAria);\r\n    const items = [];\r\n    if (!isDeletionFailed) {\r\n        items.push({\r\n            key: 'virtualMachines',\r\n            text: virtualMachinesText,\r\n            ariaLabel: virtualMachinesText,\r\n            iconProps: {\r\n                iconName: 'TVMonitor',\r\n            },\r\n            className: 'lab-list__card-footer-menu-items',\r\n            onClick: onVmsClicked,\r\n        }, {\r\n            key: 'schedule',\r\n            text: scheduleText,\r\n            ariaLabel: scheduleText,\r\n            iconProps: {\r\n                iconName: 'DateTime',\r\n            },\r\n            className: 'lab-list__card-footer-menu-items',\r\n            onClick: onScheduleClicked,\r\n        }, {\r\n            key: 'users',\r\n            text: usersText,\r\n            ariaLabel: usersText,\r\n            iconProps: {\r\n                iconName: 'People',\r\n            },\r\n            className: 'lab-list__card-footer-menu-items',\r\n            onClick: onUsersClicked,\r\n        });\r\n    }\r\n    if (isWriteable && !isMoving) {\r\n        items.push({\r\n            key: 'divider',\r\n            itemType: ContextualMenuItemType.Divider,\r\n        }, {\r\n            key: 'delete',\r\n            text: deleteText,\r\n            ariaLabel: deleteText,\r\n            iconProps: {\r\n                iconName: 'Delete',\r\n            },\r\n            className: 'lab-list__card-footer-menu-items',\r\n            onClick: onDeleteClicked,\r\n        });\r\n    }\r\n    return (<div className=\"lab-list__card-footer\">\r\n            <Stack horizontal>\r\n                <Stack.Item>\r\n                    {(isDeleting || isMoving) && (<ProgressIndicator barHeight={4} styles={{\r\n        root: { padding: '7px 15px', width: isDeleting ? 300 : 250 },\r\n        progressTrack: { backgroundColor: '#faf9f8' },\r\n    }}/>)}\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    {!isDeleting && (<DocumentCardActions className=\"lab-list__card-footer-menu-button\" actions={[\r\n        {\r\n            ariaLabel,\r\n            ariaDescription: ariaLabel,\r\n            styles: {\r\n                menuIcon: {\r\n                    color: '#605E5C',\r\n                    fontSize: '16px',\r\n                },\r\n            },\r\n            menuIconProps: {\r\n                iconName: 'MoreVertical',\r\n                title: ariaLabel,\r\n                ariaLabel,\r\n            },\r\n            menuProps: {\r\n                items,\r\n                calloutProps: {\r\n                    className: 'lab-list__card-footer-menu',\r\n                },\r\n            },\r\n        },\r\n    ]}/>)}\r\n                </Stack.Item>\r\n            </Stack>\r\n        </div>);\r\n};\r\nexport default LabCardFooter;\r\n","import { defineMessages } from 'react-intl';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { ErrorCode } from '../common/error-codes';\r\nimport { ResourceId } from '../utils/resource-id';\r\nimport commonMessages from '../language/common-messages';\r\nimport { trackTrace } from '../utils/telemetry/telemetry-channel';\r\n//import { CostEstimateBreakdown } from './../dashboard/cost-estimate-tile';\r\nconst messages = defineMessages({\r\n    deletionErrorResourceNotFound: {\r\n        id: 'DeletionErrorResourceNotFound',\r\n        defaultMessage: `The lab ‘{labName}’ was unable to be deleted because it could not be found.`,\r\n        description: 'Message to indicate that deletion of lab {labName} failed because it could not be found.',\r\n    },\r\n    deletionErrorResourceNotReady: {\r\n        id: 'DeletionErrorResourceNotReady',\r\n        defaultMessage: `The lab ‘{labName}’ was unable to be deleted because it is currently updating.`,\r\n        description: 'Message to indicate that deletion of lab {labName} failed because it is not in the correct state.',\r\n    },\r\n    deletionErrorAuthorizationFailed: {\r\n        id: 'DeletionErrorAuthorizationFailed',\r\n        defaultMessage: `The lab ‘{labName}’ was unable to be deleted because you did not have permissions.`,\r\n        description: 'Message to indicate that deletion of lab {labName} failed because user did not have permissions.',\r\n    },\r\n    deletionErrorTimeout: {\r\n        id: 'DeletionErrorTimeout',\r\n        defaultMessage: `The lab ‘{labName}’ was unable to be deleted because the request timed out.`,\r\n        description: 'Message to indicate that deletion of lab {labName} failed because the request timed out.',\r\n    },\r\n    deleteErrorGeneric: {\r\n        id: 'LabDeleteGenericError',\r\n        defaultMessage: 'Failed to delete lab ‘{labName}’.',\r\n        description: 'Generic error displayed when we fail to delete a lab and have no specific error code mapped. {labName} is the name of the lab.',\r\n    },\r\n    createErrorGeneric: {\r\n        id: 'LabCreateGenericError',\r\n        defaultMessage: 'Failed to create lab ‘{labName}’.',\r\n        description: 'Generic error displayed when we fail to create a lab and have no specific error code mapped. {labName} is the name of the lab.',\r\n    },\r\n    createErrorWebAccesVnetNotSupported: {\r\n        id: 'LabCreateWebAccessVnetNotSupportedError',\r\n        defaultMessage: 'Failed to create lab ‘{labName}’. Lab plans with advanced networking enabled currently do not support browser access.',\r\n        description: 'Error message displayed when customer tries to create a advanced networking lab with web access enabled.',\r\n    },\r\n    createErrorInvalidSubnet: {\r\n        id: 'LabCreateInvalidSubnetError',\r\n        defaultMessage: 'Failed to create lab ‘{labName}’. The subnet attached to lab plan cannot be used to create labs, please use another subnet that is not used by other Azure products.',\r\n        description: 'Error message displayed when customer tries to create a advanced networking lab with an invalid subnet.',\r\n    },\r\n    loadErrorResourceNotFound: {\r\n        id: 'LoadErrorResourceNotFound',\r\n        defaultMessage: `Unable to load lab account ‘{labAccountName}’ because it could not be found.`,\r\n        description: 'Message to indicate that loading the labs of lab account {labAccountName} failed because it could not be found.',\r\n    },\r\n    loadErrorTimeout: {\r\n        id: 'LoadErrorTimeout',\r\n        defaultMessage: `Unable to load lab account ‘{labAccountName}’ because the request timed out.`,\r\n        description: 'Message to indicate that loading the labs of lab account {labAccountName} failed because the request timed out.',\r\n    },\r\n    loadErrorGeneric: {\r\n        id: 'LabLoadGenericError',\r\n        defaultMessage: 'Failed to load lab account ‘{labAccountName}’.',\r\n        description: 'Generic error displayed when we fail to load data for a lab account and have no specific error code mapped. {labAccountName} is the name of the lab account.',\r\n    },\r\n});\r\nexport const getErrorMessage = (intl, error) => {\r\n    switch (error.failureOperation) {\r\n        case FailureOperation.DeleteLab:\r\n            return getDeleteErrorMessage(intl, error);\r\n        case FailureOperation.LoadLabs:\r\n        case FailureOperation.GetLabAccount:\r\n            return getLoadErrorMessage(intl, error);\r\n        case FailureOperation.CreateLab:\r\n            return getCreateErrorMessage(intl, error);\r\n        default:\r\n            return getFallbackErrorMessage(intl, error);\r\n    }\r\n};\r\nconst getCreateErrorMessage = (intl, error) => {\r\n    const labName = new ResourceId(error.id).name;\r\n    switch (error.code) {\r\n        case ErrorCode.LabCreationExceedsGpuCoresLimit:\r\n        case ErrorCode.LabCreationExceedsStandardCoresLimit:\r\n        case ErrorCode.AllowedRegionsLimitExceeded: // V2 backend needs localization\r\n            return error.message;\r\n        case ErrorCode.WebAccessVnetNotSupported:\r\n            return intl.formatMessage(messages.createErrorWebAccesVnetNotSupported, { labName });\r\n        case ErrorCode.InvalidSubnet:\r\n            return intl.formatMessage(messages.createErrorInvalidSubnet, { labName });\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.createErrorGeneric, { labName });\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getDeleteErrorMessage = (intl, error) => {\r\n    const labName = new ResourceId(error.id).name;\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n            return intl.formatMessage(messages.deletionErrorResourceNotFound, { labName });\r\n        case ErrorCode.ResourceNotReady:\r\n            return intl.formatMessage(messages.deletionErrorResourceNotReady, { labName });\r\n        case ErrorCode.AuthorizationFailed:\r\n            return intl.formatMessage(messages.deletionErrorAuthorizationFailed, { labName });\r\n        case ErrorCode.TimeoutException:\r\n            return intl.formatMessage(messages.deletionErrorTimeout, { labName });\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.deleteErrorGeneric, { labName });\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getLoadErrorMessage = (intl, error) => {\r\n    const labAccountName = new ResourceId(error.id).name;\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n            return intl.formatMessage(messages.loadErrorResourceNotFound, { labAccountName });\r\n        case ErrorCode.TimeoutException:\r\n            return intl.formatMessage(messages.loadErrorTimeout, { labAccountName });\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.loadErrorGeneric, { labAccountName });\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nexport const getFallbackErrorMessage = (intl, error, genericMessageForOperation) => {\r\n    // for cases where we haven't recorded a code and corresponding message in this client code yet\r\n    trackTrace(`lab-list-error-handling: getFallbackErrorMessage - Unmapped error code: ${error ? error.code : 'Unknown'}`);\r\n    // NOTE: Not showing the raw error for now. Perhaps we should let the banner expand and enable the raw error as\r\n    // a way of viewing details?\r\n    return genericMessageForOperation || intl.formatMessage(commonMessages.genericErrorMessage);\r\n};\r\nconst LabListErrorHandling = {\r\n    getErrorMessage,\r\n};\r\nexport default LabListErrorHandling;\r\n","import { DocumentCard, Icon, MessageBar, MessageBarType, getTheme } from '@fluentui/react';\r\nimport { NeutralColors } from '@fluentui/theme';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { AzurePolicyViolation, getAzurePolicyViolationErrorMessage } from '../data/ml-client-error';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { isLabBlocked, isLabMoving, isWriteableLab, isLabDeleting, isLabDeletionFailed, } from '../redux/selectors/lab-selectors';\r\nimport { LabCardFooter } from './lab-card-footer';\r\nimport { getErrorMessage } from './lab-list-error-handling';\r\nimport { LabServicesModels } from 'lab-services';\r\nconst messages = defineMessages({\r\n    readOnlyTitle: {\r\n        id: 'LabCardReadOnlyTitle',\r\n        defaultMessage: '{labName} (read-only)',\r\n        description: 'Title formatting to indicate a lab is read-only. {labName} is replaced with the user defined lab name.',\r\n    },\r\n});\r\nexport const LabErrorBanner = (props) => {\r\n    const { error, clearError } = props;\r\n    const intl = useIntl();\r\n    if (!error) {\r\n        return null;\r\n    }\r\n    if (error.code == AzurePolicyViolation.CODE) {\r\n        return (<>\r\n                <MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)} onDismiss={() => clearError(error)}>\r\n                    {getAzurePolicyViolationErrorMessage(error).map((errorMessage, index) => (<div key={index}>{intl.formatMessage(errorMessage)}</div>))}\r\n                </MessageBar>\r\n            </>);\r\n    }\r\n    else {\r\n        return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)} onDismiss={() => clearError(error)}>\r\n                {getErrorMessage(intl, error)}\r\n            </MessageBar>);\r\n    }\r\n};\r\nexport const LabCard = (props) => {\r\n    const { lab, isVNextLab, maxUsers, quota, osType, isCustomizable, onCardClicked, onScheduleClicked, onUsersClicked, onVmsClicked, onDeleteClicked, } = props;\r\n    const isDeletionFailed = isLabDeletionFailed(lab);\r\n    const isBlocked = isLabBlocked(lab);\r\n    const isWriteable = isWriteableLab(lab);\r\n    const isMoving = isLabMoving(lab);\r\n    const isDeleting = isLabDeleting(lab);\r\n    const nonClickable = isDeleting || isDeletionFailed;\r\n    const hasError = isBlocked || isDeletionFailed;\r\n    const displayName = isVNextLab ? lab?.title ?? lab.name : lab.name;\r\n    return (<DocumentCard className=\"lab-list__card\" onClick={nonClickable ? undefined : () => onCardClicked(lab.id)} styles={nonClickable || hasError ? { root: { backgroundColor: '#FAF9F8' } } : undefined}>\r\n            <LabCardBody name={displayName} isVNextLab={isVNextLab} isDeletionFailed={isDeletionFailed} isBlocked={isBlocked} isWriteable={isWriteable} isMoving={isMoving} isDeleting={isDeleting} maxUsers={maxUsers} quota={quota} osType={osType} isCustomizable={isCustomizable}/>\r\n            <div className=\"lab-list__card-divider ms-bgColor-neutralLight\"/>\r\n            <LabCardFooter isDeletionFailed={isDeletionFailed} isWriteable={isWriteable} isMoving={isMoving} isDeleting={isDeleting} onScheduleClicked={() => onScheduleClicked(lab.id)} onUsersClicked={() => onUsersClicked(lab.id)} onVmsClicked={() => onVmsClicked(lab.id)} onDeleteClicked={() => onDeleteClicked(lab)}/>\r\n        </DocumentCard>);\r\n};\r\nexport const LabCardBody = (props) => {\r\n    const { name, isVNextLab, isDeletionFailed, isBlocked, isWriteable, isMoving, isDeleting, maxUsers, quota, osType, isCustomizable, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const hasError = isDeletionFailed || isBlocked;\r\n    let bodyInfo;\r\n    if (isDeletionFailed) {\r\n        bodyInfo = (<FormattedMessage id=\"LabCardDeletionFailedLabMessage\" defaultMessage=\"Lab deletion failed. Please try again, or contact your lab administrator to correct the problem.\" description=\"Text shown on a lab card when lab deletion is failed.\"/>);\r\n    }\r\n    else if (isBlocked) {\r\n        bodyInfo = (<FormattedMessage id=\"LabCardOutageBlockedLabMessage\" defaultMessage=\"Unfortunately, this lab was affected by the recent Azure Lab Services outage and is not recoverable. Please delete it and create a new lab.\" description=\"Text shown on a lab card when the lab is in a blocked state due to an outage.\"/>);\r\n    }\r\n    else if (isMoving) {\r\n        bodyInfo = (<FormattedMessage id=\"LabCardMovingLabMessage\" defaultMessage=\"This lab is being moved to another Azure region and will be read-only until the move is finished.\" description=\"Text shown on a lab card when the lab is being moved between Azure regions.\"/>);\r\n    }\r\n    else if (isDeleting) {\r\n        bodyInfo = (<FormattedMessage id=\"LabCardDeletingLabMessage\" defaultMessage=\"This lab is being deleted. It will be removed when the operation is complete.\" description=\"Text shown on a lab card when the lab is being deleted.\"/>);\r\n    }\r\n    else {\r\n        // no changes to vCurrent Lab\r\n        if (!isVNextLab) {\r\n            bodyInfo = (<FormattedMessage id=\"QuotaPerUserText\" defaultMessage=\"Quota per user: {quotaSpan}\" description=\"Text indicating quota per user for the lab where the parameter {quotaSpan} contains quota with formatting applied.\" values={{\r\n                quotaSpan: (<span className=\"lab-list__card-body-info--emphasis\">\r\n                                {quota ? (<FormattedMessage id=\"QuotaPerUserValue\" defaultMessage=\"{quota} hours\" description=\"The amount of quota (indicated by parameter {quota}) each user gets for the lab.\" values={{ quota: quota }}/>) : (<FormattedMessage id=\"ScheduleOnly\" defaultMessage=\"Schedule only\" description=\"Indicates students have no quota and can only use the lab as scheduled\"/>)}\r\n                            </span>),\r\n            }}/>);\r\n        }\r\n        else {\r\n            // vnext\r\n            bodyInfo = (<>\r\n                    <div className=\"lab-list__card-body-info-vnext-quota\">\r\n                        <FormattedMessage id=\"VNextQuotaPerUserText\" defaultMessage=\"Quota: {quotaTemplate}\" description=\"Text indicating quota per user for the lab where the parameter {quotaTemplate} contains quota with formatting applied.\" values={{\r\n                quotaTemplate: (<span className=\"lab-list__card-body-info--emphasis\">\r\n                                        {quota ? (<FormattedMessage id=\"VNextQuotaPerUserValue\" defaultMessage=\"{quotaValue} hours per user\" description=\"The amount of quota (indicated by parameter {quotaValue}) each user gets for the lab.\" values={{ quotaValue: quota }}/>) : (<FormattedMessage id=\"VNextScheduleOnly\" defaultMessage=\"Schedule only\" description=\"Indicates students have no quota and can only use the lab as scheduled\"/>)}\r\n                                    </span>),\r\n            }}/>\r\n                    </div>\r\n                    <div className=\"lab-list__card-body-info-vnext-lab-capacity\">\r\n                        <FormattedMessage id=\"LabVirtualMachinesText\" defaultMessage=\"Lab capacity: <b>{maxUsers} virtual machines</b>\" description=\"Text indicating the number of virtual machines in the {maxUsersTemplate} with formatting applied.\" values={{\r\n                b: (chunks) => <span style={{ fontWeight: 600 }}>{chunks}</span>,\r\n                maxUsers: maxUsers,\r\n            }}/>\r\n                    </div>\r\n                </>);\r\n        }\r\n    }\r\n    const iconStyle = { backgroundColor: isDeleting || isMoving ? '#797775' : getTheme().palette.themePrimary };\r\n    const titleStyle = { color: isDeletionFailed ? NeutralColors.gray110 : NeutralColors.gray160 };\r\n    const labTitle = !isWriteable || isMoving ? msg(messages.readOnlyTitle, { labName: name }) : name;\r\n    // vCurrent Lab no changes\r\n    if (!isVNextLab) {\r\n        return (<div className=\"lab-list__card-body\">\r\n                <div className=\"lab-list__card-body-title-section\">\r\n                    <div className=\"lab-list__card-body-icon-section\">\r\n                        <Icon iconName=\"ThisPC\" className=\"lab-list__card-body-icon\" styles={{\r\n            root: { color: isDeletionFailed ? NeutralColors.gray70 : NeutralColors.gray100 },\r\n        }}/>\r\n                        {!hasError &&\r\n            (isDeleting ? (<div className=\"lab-list__card-body-circle\" style={iconStyle}>\r\n                                    <Icon iconName=\"Delete\"/>\r\n                                </div>) : (<div className=\"lab-list__card-body-circle\" style={iconStyle}>\r\n                                    {maxUsers}\r\n                                </div>))}\r\n                        {hasError && (<div className=\"lab-list__card-body-circle lab-list__card-body-failed-circle\">\r\n                                <Icon iconName={isDeletionFailed ? 'Cancel' : 'Blocked2'}/>\r\n                            </div>)}\r\n                    </div>\r\n                    <div className=\"lab-list__card-title\" title={labTitle}>\r\n                        <div className=\"lab-list__card-title-overflow\" style={titleStyle}>\r\n                            {labTitle}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div className=\"lab-list__card-body-info\">{bodyInfo}</div>\r\n            </div>);\r\n    }\r\n    else {\r\n        //vnext\r\n        return (<div className=\"lab-list__card-body-vnext\">\r\n                <div className=\"lab-list__card-body-title-section-vnext\">\r\n                    <div className=\"lab-list__card-body-icon-section-vnext\">\r\n                        {!hasError && isDeleting && (<div className=\"padding-right\">\r\n                                <div className=\"lab-list__card-body-circle-vnext\" style={iconStyle}>\r\n                                    <Icon iconName=\"Delete\"/>\r\n                                </div>\r\n                            </div>)}\r\n                        {hasError && (<div className=\"padding-right\">\r\n                                <div className=\"lab-list__card-body-circle-vnext lab-list__card-body-failed-circle-vnext\">\r\n                                    <Icon iconName={isDeletionFailed ? 'Cancel' : 'Blocked2'}/>\r\n                                </div>\r\n                            </div>)}\r\n                    </div>\r\n                    <div className=\"lab-list__card-title-vnext\" title={labTitle}>\r\n                        <div className=\"lab-list__card-title-subtitle-container\">\r\n                            <div className=\"lab-list__card-title-overflow-vnext\" style={titleStyle}>\r\n                                {labTitle}\r\n                            </div>\r\n                            <div className=\"lab-list__card-subtitle-vnext\">\r\n                                {isCustomizable && (<FormattedMessage id=\"CustomizableLabMessage\" defaultMessage=\"Customizable lab\" description=\"Text indicating the lab is customizable\"/>)}\r\n                                {!isCustomizable && (<FormattedMessage id=\"NonCustomizableLabMessage\" defaultMessage=\"Non-customizable lab\" description=\"Text indicating whether the lab is non-customizable\"/>)}\r\n                            </div>\r\n                        </div>\r\n\r\n                        {isVNextLab && (<div className=\"lab-list__card-title-bubble-container-vnext\">\r\n                                {!!osType && (<Icon id=\"template-page-os-type-icon\" iconName={osType === LabServicesModels.OsType.Windows ? 'WindowsLogo' : 'LinuxLogo32'} styles={{\r\n            root: {\r\n                fontSize: '28px',\r\n                lineHeight: '16px',\r\n                color: osType == LabServicesModels.OsType.Windows ? '#0066CC' : '#605E5C',\r\n                marginTop: '6px',\r\n                paddingLeft: osType == LabServicesModels.OsType.Windows ? '7px' : '2px',\r\n            },\r\n        }}/>)}\r\n                            </div>)}\r\n                    </div>\r\n                </div>\r\n                <div className=\"lab-list__card-body-info-vnext\">{bodyInfo}</div>\r\n            </div>);\r\n    }\r\n};\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    myLabsTitle: {\r\n        id: 'Labs',\r\n        defaultMessage: 'Labs',\r\n        description: 'Label to indicate this is the Labs page',\r\n    },\r\n});\r\nexport default messages;\r\n","import { Icon, PrimaryButton, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nconst messages = defineMessages({\r\n    newLab: {\r\n        id: 'NoLabsViewNewLab',\r\n        defaultMessage: 'Create lab',\r\n        description: 'Name of a button or command to create a new lab.',\r\n    },\r\n});\r\nconst NoLabsView = (props) => {\r\n    const { isNewLabButtonDisabled, isLmsIntegrationEnabled, isTeamsIntegrationEnabled } = props;\r\n    const intl = useIntl();\r\n    const msg = intl.formatMessage;\r\n    return (<Stack horizontalAlign=\"center\" styles={{ root: { marginTop: 140 } }}>\r\n            <Stack.Item>\r\n                <Icon iconName=\"illustration-3\" styles={{ root: { marginBottom: 20 } }}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <b>\r\n                    <FormattedMessage id=\"NoLabsViewMessage\" defaultMessage=\"No labs have been created.\" description=\"Message shown on the labs page when no labs have yet been created in the container.\"/>\r\n                </b>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <div style={{ maxWidth: 610, marginBottom: 25, textAlign: 'center' }}>\r\n                    <FormattedMessage id=\"NoLabsViewDescription\" defaultMessage=\"Azure Lab Services enables you to easily set up a computer lab in the cloud that your students and users can access from anywhere, any time.\" description=\"Message shown on the labs page when no labs have yet been created in the container.\"/>\r\n                    {isTeamsIntegrationEnabled && (<FormattedMessage id=\"TeamsNoLabsViewDescription\" defaultMessage=\" Only labs associated with this class will appear in this tab. If you have created other labs outside of Teams, they will not be shown here.\" description=\"Message shown on the labs page when no labs have yet been created for the Teams team.\"/>)}\r\n                    {isLmsIntegrationEnabled && (<FormattedMessage id=\"LmsNoLabsViewDescription\" defaultMessage=\" If you have created other labs outside of your learning management system, they will not be shown here.\" description=\"Message shown on the labs page when no labs have yet been created for the LMS course.\"/>)}\r\n                </div>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <PrimaryButton text={msg(messages.newLab)} onClick={props.onNewLab} disabled={isNewLabButtonDisabled}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default NoLabsView;\r\n","import React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport commonMessages from '../language/common-messages';\r\nimport { ResourceId } from '../utils/resource-id';\r\nconst messages = defineMessages({\r\n    linkLmsError: {\r\n        id: 'LinkLmsError',\r\n        defaultMessage: 'An error occured when linking {labPlanName} to LMS.',\r\n        description: 'Message to indicate the error when linking a lab plan to LMS.',\r\n    },\r\n    unlinkLmsError: {\r\n        id: 'UnlinkLmsError',\r\n        defaultMessage: 'An error occured when unlinking {labPlanName} from LMS.',\r\n        description: 'Message to indicate the error when unlinking a lab plan from LMS.',\r\n    },\r\n    linkLmsAllError: {\r\n        id: 'LinkLmsAllError',\r\n        defaultMessage: 'An error occured when linking one or more lab plans to LMS.',\r\n        description: 'Message to indicate the error when linking a lab plan to LMS.',\r\n    },\r\n    unlinkLmsAllError: {\r\n        id: 'UnlinkLmsAllError',\r\n        defaultMessage: 'An error occured when unlinking one or more lab plans from LMS.',\r\n        description: 'Message to indicate the error when unlinking a lab plan from LMS.',\r\n    },\r\n});\r\nexport const LinkedLmsUpdateErrors = (props) => {\r\n    const { clearError } = props;\r\n    const { formatMessage: msg } = useIntl();\r\n    let { errors } = props;\r\n    errors = errors.filter((error) => error.failureOperation === FailureOperation.LinkLabPlan ||\r\n        error.failureOperation === FailureOperation.UnlinkLabPlan);\r\n    return (<>\r\n            {errors.size > 0 &&\r\n        errors\r\n            .map((error) => {\r\n            let message = '';\r\n            const resourceId = new ResourceId(error.id, true);\r\n            if (!resourceId) {\r\n                message =\r\n                    error.failureOperation === FailureOperation.LinkLabPlan\r\n                        ? msg(messages.linkLmsAllError)\r\n                        : msg(messages.unlinkLmsAllError);\r\n            }\r\n            else {\r\n                const labPlanName = resourceId.name;\r\n                message =\r\n                    error.failureOperation === FailureOperation.LinkLabPlan\r\n                        ? msg(messages.linkLmsError, { labPlanName })\r\n                        : msg(messages.unlinkLmsError, { labPlanName });\r\n            }\r\n            return (<div key={error.id}>\r\n                                <MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearError(error.id)}>\r\n                                    {message}\r\n                                </MessageBar>\r\n                            </div>);\r\n        })\r\n            .toList()}\r\n        </>);\r\n};\r\nexport default LinkedLmsUpdateErrors;\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    RetirementNotificationPageTitle: {\r\n        id: 'RetirementNotificationPageTitle',\r\n        defaultMessage: 'Azure Lab Services Retirement Notification',\r\n        description: 'The title text displayed on the page of the retirement notification card.',\r\n    },\r\n    RetirementNotificationPageContent: {\r\n        id: 'RetirementNotificationPageContent',\r\n        defaultMessage: 'Azure Lab Services will be retired on June 28th, 2027.',\r\n        description: 'The text content on the page of the retirement notification card.',\r\n    },\r\n    RetirementNotificationPageExtraContent: {\r\n        id: 'RetirementNotificationPageExtraContent',\r\n        defaultMessage: 'Click here to learn more',\r\n        description: 'The extra link text content on the page of the retirement notification card.',\r\n    },\r\n});\r\n","import { Stack, PrimaryButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport Lottie from 'react-lottie';\r\nimport retirementAnimation from '../animations/professor-fre/retirement.json';\r\nimport { Carousel } from '../common/carousel/carousel';\r\nimport { messages } from './retirement-notification-messages';\r\nimport './introduction.css';\r\nconst RetirementNotificationCarouselItem = (props) => {\r\n    const { animationData, headingText, contentText, extraContent, isVisible } = props;\r\n    return (<Stack className=\"lab-list-intro__carousel-item\" tokens={{ childrenGap: 36 }}>\r\n            <Stack.Item className=\"lab-list-intro__carousel-item__animation\">\r\n                <Lottie options={{ loop: false, autoplay: true, animationData }} isStopped={!isVisible}/>\r\n            </Stack.Item>\r\n            <Stack.Item className=\"lab-list-intro__carousel-item__content\" align=\"center\" styles={{ root: { width: '640px' } }} grow>\r\n                <Stack className=\"lab-list-intro__content-container\" tokens={{ childrenGap: 15 }} horizontalAlign=\"center\" grow>\r\n                    <Stack.Item className=\"lab-list-intro__content-header\">{headingText}</Stack.Item>\r\n                    <Stack.Item className=\"lab-list-intro__content-text\">{contentText}</Stack.Item>\r\n                    <Stack.Item className=\"lab-list-intro__link\" grow align=\"center\">\r\n                        <div>\r\n                            <PrimaryButton text={extraContent} onClick={() => {\r\n        window.open('https://aka.ms/azlabs-retirementguide', '_blank');\r\n    }}/>\r\n                        </div>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const RetirementNotification = (props) => {\r\n    const { onDismiss } = props;\r\n    const [currentSlide, setCurrentSlide] = React.useState(0);\r\n    const cardContent = [\r\n        {\r\n            content: () => (<RetirementNotificationCarouselItem animationData={retirementAnimation} isVisible={currentSlide === 0} headingText={<FormattedMessage {...messages.RetirementNotificationPageTitle}/>} contentText={<FormattedMessage {...messages.RetirementNotificationPageContent}/>} extraContent={<FormattedMessage {...messages.RetirementNotificationPageExtraContent}/>}/>),\r\n        },\r\n    ];\r\n    return (<Carousel isOpen={true} cardContent={cardContent} onClose={onDismiss} onCardChange={(page) => setCurrentSlide(page)}/>);\r\n};\r\nexport default RetirementNotification;\r\n","import { Dropdown } from '@fluentui/react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport * as React from 'react';\r\nimport { LabAccessType } from '../data/models/lab';\r\nconst messages = defineMessages({\r\n    labAccessLabel: {\r\n        id: 'LabAccessDropdownLabel',\r\n        defaultMessage: 'Show:',\r\n        description: 'Label for dropdown to filter labs based on access'\r\n    },\r\n    myLabs: {\r\n        id: 'MyLabsDropdownOption',\r\n        defaultMessage: 'My labs',\r\n        description: 'Label for dropdown option that will show only labs where the user has write-access'\r\n    },\r\n    allLabs: {\r\n        id: 'AllLabsDropdownOption',\r\n        defaultMessage: 'All labs',\r\n        description: 'Label for dropdown option that will show labs where the user has read-access and write-access'\r\n    },\r\n});\r\nexport const LabAccessDropdown = (props) => {\r\n    const intl = useIntl();\r\n    const { selected, filterByLabAccessType } = props;\r\n    const options = [\r\n        {\r\n            key: LabAccessType.writeAccess,\r\n            text: intl.formatMessage(messages.myLabs),\r\n        },\r\n        {\r\n            key: LabAccessType.readAndWriteAccess,\r\n            text: intl.formatMessage(messages.allLabs),\r\n        }\r\n    ];\r\n    const dropdownProps = {\r\n        options,\r\n        label: intl.formatMessage(messages.labAccessLabel),\r\n        selectedKey: selected,\r\n        onChange: (_, value) => {\r\n            const option = value;\r\n            filterByLabAccessType(option.key);\r\n        },\r\n        styles: {\r\n            dropdown: { display: 'inline-block' },\r\n            title: { border: 'none' },\r\n            root: { display: 'flex' },\r\n        },\r\n    };\r\n    return <Dropdown {...dropdownProps}/>;\r\n};\r\nexport default LabAccessDropdown;\r\n","import { CommandBar, Link, List, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport LoadingContainer from '../common/loading-section';\r\nimport { RequestLimitIncreaseInSentenceLink } from '../common/request-limit-increase-link';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { CoreQuotaStatus } from '../redux/selectors/core-limit-selectors';\r\nimport { Routes } from '../utils/routes';\r\nimport { CreateLabFlyoutContainer } from './create-lab/create-lab-flyout-container';\r\nimport VNext_CreateLabFlyoutContainer from './create-lab/create-lab-flyout-container-vnext';\r\nimport DeleteLabDialog from './delete-lab-dialog';\r\nimport { LabListIntroduction } from './introduction';\r\nimport { LabCard, LabErrorBanner } from './lab-card';\r\nimport { messages as labListMessages } from './lab-list-messages';\r\nimport NoLabsView from './no-labs-view';\r\nimport moment from 'moment';\r\nimport LinkedLmsUpdateErrors from '../common/linked-lms-update-errors';\r\nimport ErrorCode from '../common/error-codes';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { RetirementNotification } from './retirement-notification';\r\nimport './lab-list.css';\r\nimport LabAccessDropdown from './lab-access-dropdown';\r\nconst messages = defineMessages({\r\n    newLab: {\r\n        id: 'LabListNewLab',\r\n        defaultMessage: 'New lab',\r\n        description: 'Text on a button to open New lab flyout.',\r\n    },\r\n});\r\nexport const LabList = (props) => {\r\n    const { labListViewModel, labAccessType, clearError, returnToLabList, loadDashboard, loadSchedule, loadUsers, loadVirtualMachines, deleteLab, onDismissedIntro, onDismissedRetirementAlert, onDismissedCovidBanner, onDismissedOldV1GpuLabBanner, toggleShowTips, clearUpdateLinkedLmsError, filterByLabAccessType, } = props;\r\n    const { isLoading, currentLabParentId, quotaStatus, isNewLabCreationDisabled, isDeleting, showBlockedLabsBanner, showCovidBanner, showOldGpuLabsGenericBanner, showIntro, showRetirementAlert, currentTenantId, administratorEmailAddress, errors, labs, hintsEnabled, isIntroCheckboxEnabled, isVNextLabs, isVnextLabPermissionPropagating, isVnextAuthErrorPermissionPropagationRelated, isTeamsIntegrationEnabled, isLmsIntegrationEnabled, updateLinkedLmsErrors, } = labListViewModel;\r\n    const intl = useIntl();\r\n    const [showNewLabFlyout, setShowNewLabFlyout] = React.useState(props.showNewLabFlyout);\r\n    const [showDeleteDialog, setShowDeleteDialog] = React.useState(false);\r\n    const [labToDelete, setLabToDelete] = React.useState(undefined);\r\n    const { pageTitleStyle, labListCommandBarStyles, secondaryBackgroundColor, messageBarStyles, secondaryCommandBarStyles, accessDropdownStyle, } = getCustomTheme();\r\n    const commandBarStyles = labListCommandBarStyles ?? secondaryCommandBarStyles;\r\n    // ****** IMPORTANT ******Keep these two flags as false until we're ready to show the retirement message******\r\n    const shouldShowRetirementMessage = true;\r\n    const shouldShowRetirementAlert = true;\r\n    if (isLoading) {\r\n        return <LoadingContainer />;\r\n    }\r\n    const onDeleteClicked = (lab) => {\r\n        setLabToDelete(lab);\r\n        setShowDeleteDialog(true);\r\n    };\r\n    const onDeleteDismiss = () => {\r\n        setShowDeleteDialog(false);\r\n        setLabToDelete(undefined);\r\n    };\r\n    const onCardClicked = loadDashboard;\r\n    const renderLab = (lab) => {\r\n        if (!lab) {\r\n            return null;\r\n        }\r\n        return (<LabCard lab={lab} isVNextLab={false} maxUsers={lab.maxUsersInLab} quota={lab.usageQuota.asHours()} onCardClicked={onCardClicked} onDeleteClicked={onDeleteClicked} onScheduleClicked={loadSchedule} onUsersClicked={loadUsers} onVmsClicked={loadVirtualMachines}/>);\r\n    };\r\n    const renderVNextLab = (lab) => {\r\n        if (!lab) {\r\n            return null;\r\n        }\r\n        return (<LabCard lab={lab} isVNextLab={true} maxUsers={!lab.virtualMachineProfile?.sku?.capacity ? 0 : lab.virtualMachineProfile.sku.capacity} quota={moment.duration(lab.virtualMachineProfile.usageQuota).asHours()} onCardClicked={onCardClicked} onDeleteClicked={onDeleteClicked} onScheduleClicked={loadSchedule} onUsersClicked={loadUsers} onVmsClicked={loadVirtualMachines} osType={lab.virtualMachineProfile?.osType} isCustomizable={lab.virtualMachineProfile?.createOption === LabServicesModels.CreateOption.TemplateVM}/>);\r\n    };\r\n    const onNewLab = () => setShowNewLabFlyout(true);\r\n    return (<>\r\n            <div id=\"lab-list-container\">\r\n                <div id=\"lab-list-content\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                    <div id=\"lab-list-header\">\r\n                        {shouldShowRetirementMessage && (<MessageBar messageBarType={MessageBarType.severeWarning} styles={messageBarStyles}>\r\n                                <FormattedMessage id=\"ServiceRetirementLabListMessage\" defaultMessage=\"Azure Lab Services will be retired on June 28th, 2027. Click {RetirementMessageLink} for more information.\" description=\"Retirement message displayed in a message bar for lab list.\" values={{\r\n        RetirementMessageLink: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={'https://aka.ms/azlabs-retirementguide'}>\r\n                                                <FormattedMessage id=\"ServiceRetirementLabListLink\" defaultMessage=\"here\" description=\"A link to the service retirement public document.\"/>\r\n                                            </Link>),\r\n    }}/>\r\n                            </MessageBar>)}\r\n                        {errors.size > 0 &&\r\n        errors\r\n            .map((errors) => {\r\n            return errors.map((error, errorIndex) => !(error.code == ErrorCode.AuthorizationFailed &&\r\n                !!isVnextAuthErrorPermissionPropagationRelated) && (<LabErrorBanner key={`${error.id}-${error.failureOperation}`} error={error} clearError={() => clearError(error.id, errorIndex)}/>));\r\n        })\r\n            .toList()}\r\n                        {!!updateLinkedLmsErrors && updateLinkedLmsErrors.size > 0 && (<LinkedLmsUpdateErrors errors={updateLinkedLmsErrors} clearError={clearUpdateLinkedLmsError}/>)}\r\n                        {showBlockedLabsBanner && (<MessageBar messageBarType={MessageBarType.blocked} styles={messageBarStyles}>\r\n                                <FormattedMessage id=\"LabListBlockedLabsMessage\" defaultMessage=\"The Azure Lab Services outage has been resolved, but you have affected labs that are not recoverable. These labs need to be deleted and recreated. For detailed steps on how to proceed, please see our{blogPostLink}. We are deeply sorry for the inconvenience this has caused.\" description=\"Message displayed in a message bar in the lab list when a lab is blocked due to an outage. Note: the missing space before {blogPostLink} is intentional.\" values={{\r\n        blogPostLink: (<Link target=\"_blank\" href=\"https://aka.ms/azlabs-outage\">\r\n                                                <FormattedMessage id=\"LabListBlockedMessageLinkText\" defaultMessage=\"outage blog post\" description=\"Text for the {blogPostLink} parameter in LabListBlockedLabsMessage.\"/>\r\n                                            </Link>),\r\n    }}/>\r\n                            </MessageBar>)}\r\n\r\n                        {!isVNextLabs && showOldGpuLabsGenericBanner && (<MessageBar messageBarType={MessageBarType.warning} onDismiss={onDismissedOldV1GpuLabBanner} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)}>\r\n                                <FormattedMessage {...commonMessages.oldV1GpuLabsGenericWarning} values={{\r\n        gpuOutage: (<Link href={'https://aka.ms/V1GPUIssues'}>\r\n                                                <FormattedMessage id=\"OldV1GpuLabsWarningLink\" defaultMessage=\"More information.\" description=\"Link to documentation describing the GPU outage with older GPU labs.\"/>\r\n                                            </Link>),\r\n    }}/>\r\n                            </MessageBar>)}\r\n                        {showCovidBanner && (<MessageBar messageBarType={MessageBarType.warning} onDismiss={onDismissedCovidBanner} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)}>\r\n                                <FormattedMessage {...commonMessages.covidWarning}/>\r\n                            </MessageBar>)}\r\n                        {isVnextLabPermissionPropagating && (<MessageBar messageBarType={MessageBarType.warning}>\r\n                                <FormattedMessage {...commonMessages.permissionPropagationText}/>\r\n                            </MessageBar>)}\r\n                        {quotaStatus === CoreQuotaStatus.Restricted && !administratorEmailAddress && (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                                <FormattedMessage id=\"NoCoresForSubscriptionLabListMessage\" defaultMessage=\"Your admin needs to request a limit increase in Azure Lab Services for virtual machine cores before you can create a lab. Please contact your Lab Services administator.\" description=\"Message displayed on lab list page when customer subscription type has no cores available by default.\"/>\r\n                            </MessageBar>)}\r\n                        {quotaStatus === CoreQuotaStatus.Restricted && administratorEmailAddress && (<MessageBar messageBarType={MessageBarType.blocked} styles={messageBarStyles}>\r\n                                <FormattedMessage id=\"NoCoresForSubscriptionLabListMessageWithEmailLink\" defaultMessage=\"Your admin needs to request a limit increase in Azure Lab Services for virtual machine cores before you can create a lab. Please contact your {labAccountAdministrator}.\" description=\"Message displayed on lab list page when customer subscription type has no cores available by default. {administrator} is a mailto link to the Lab Services administator with message id 'LabAccountAdministratorLink'.\" values={{\r\n        administrator: (<Link href={`mailto:${administratorEmailAddress}`}>\r\n                                                <FormattedMessage id=\"AdministratorLink\" defaultMessage=\"Lab Services administator\" description=\"Link to support email.\"/>\r\n                                            </Link>),\r\n    }}/>\r\n                            </MessageBar>)}\r\n                        {quotaStatus === CoreQuotaStatus.QuotaExceeded && (<MessageBar messageBarType={MessageBarType.blocked} styles={messageBarStyles}>\r\n                                <FormattedMessage id=\"QuotaExceededLabListMessage\" defaultMessage=\"Your account has reached its virtual machine cores limit in Azure Lab Services. Before you can create a new lab, you need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message displayed on lab list when customer subscription has exceeded its quota. {requestLimitIncreaseLink} is a message with id 'SupportRequestLink' with instructions on how to increase quota for the subscription.\" values={{\r\n        requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labParentId={currentLabParentId} tenantId={currentTenantId}/>),\r\n    }}/>\r\n                            </MessageBar>)}\r\n                        {!labs.isEmpty() && (<>\r\n                                <CommandBar styles={commandBarStyles} items={[\r\n        {\r\n            key: 'newLab',\r\n            text: intl.formatMessage(messages.newLab),\r\n            iconProps: { iconName: 'Add' },\r\n            disabled: isNewLabCreationDisabled,\r\n            onClick: onNewLab,\r\n        },\r\n    ]}/>\r\n                            </>)}\r\n                        {isVNextLabs && (<div style={accessDropdownStyle}>\r\n                                <LabAccessDropdown selected={labAccessType} filterByLabAccessType={filterByLabAccessType}/>\r\n                            </div>)}\r\n                        {!labs.isEmpty() && (<h1 style={pageTitleStyle}>\r\n                                <FormattedMessage {...labListMessages.myLabsTitle}/>\r\n                            </h1>)}\r\n                    </div>\r\n                    {!labs.isEmpty() && (<div id=\"lab-list-body\" className=\"vertical-scrollable-content lab-list\">\r\n                            {!isVNextLabs ? (<List items={labs.toArray()} onRenderCell={(lab) => renderLab(lab)} getItemCountForPage={() => labs.size}/>) : (<List items={labs.toArray()} onRenderCell={(lab) => renderVNextLab(lab)} getItemCountForPage={() => labs.size}/>)}\r\n                        </div>)}\r\n                    {labs.isEmpty() && (<div id=\"lab-list-body\">\r\n                            <NoLabsView onNewLab={onNewLab} isNewLabButtonDisabled={isNewLabCreationDisabled} isTeamsIntegrationEnabled={isTeamsIntegrationEnabled} isLmsIntegrationEnabled={isLmsIntegrationEnabled}/>\r\n                        </div>)}\r\n                </div>\r\n            </div>\r\n            {showNewLabFlyout && !isVNextLabs && (<CreateLabFlyoutContainer labParentId={currentLabParentId} onDismiss={() => {\r\n        setShowNewLabFlyout(false);\r\n        returnToLabList();\r\n    }} onCreatedRoute={Routes.Template}/>)}\r\n            {showNewLabFlyout && isVNextLabs && (<VNext_CreateLabFlyoutContainer labParentId={currentLabParentId} onDismiss={() => {\r\n        setShowNewLabFlyout(false);\r\n        returnToLabList();\r\n    }} onCreatedRoute={Routes.Template}/>)}\r\n            {showDeleteDialog && (<DeleteLabDialog onDismiss={onDeleteDismiss} deleteLab={deleteLab} lab={labToDelete} isSubmitting={isDeleting}/>)}\r\n            {shouldShowRetirementAlert && showRetirementAlert && (<RetirementNotification onDismiss={onDismissedRetirementAlert}/>)}\r\n            {showIntro && (<LabListIntroduction hintsEnabled={hintsEnabled} checkboxEnabled={isIntroCheckboxEnabled} onDismiss={onDismissedIntro} toggleShowTips={toggleShowTips}/>)}\r\n        </>);\r\n};\r\nexport default LabList;\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport ErrorCode from '../common/error-codes';\r\nimport { Page } from '../common/page/page';\r\nimport { fatalError } from '../redux/actions/common/common-action-creators';\r\nimport { dismissCovidBanner, dismissLabListFirstRun, dismissRetirementAlert, dismissOldV1GpuLabBanner, toggleDisableHints, } from '../redux/actions/identity/identity-action-creators';\r\nimport { clearLabsError, deleteLab, selectLab, pollLabListStart, pollLabListStop, filterByLabAccessType, } from '../redux/actions/lab/lab-action-creators';\r\nimport { Routes } from '../utils/routes';\r\nimport { LabList } from './lab-list';\r\nimport { messages } from './lab-list-messages';\r\nimport { ProvisioningState } from '../utils/provisioning-state';\r\nimport { Constants } from '../utils/constants';\r\nimport { getLabListContainerModel } from './lab-list-selectors';\r\nimport { isLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { clearUpdateLinkedLmsError } from '../redux/actions/lab-plan/lab-plan-action-creators';\r\nfunction isDeletingLabInList(labs) {\r\n    const index = labs.findIndex((lab) => lab.provisioningState === ProvisioningState.Deleting);\r\n    return index > -1;\r\n}\r\nclass LabListContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._returnToLabList = this._returnToLabList.bind(this);\r\n        this._loadDashboard = this._loadDashboard.bind(this);\r\n        this._loadSchedule = this._loadSchedule.bind(this);\r\n        this._loadUsers = this._loadUsers.bind(this);\r\n        this._loadVirtualMachines = this._loadVirtualMachines.bind(this);\r\n        this._deleteLab = this._deleteLab.bind(this);\r\n        this._toggleShowTips = this._toggleShowTips.bind(this);\r\n        this._onDismissedIntro = this._onDismissedIntro.bind(this);\r\n        this._onDismissedRetirementAlert = this._onDismissedRetirementAlert.bind(this);\r\n        this._onDismissedCovid19Banner = this._onDismissedCovid19Banner.bind(this);\r\n        this._onDismissedOldV1GpuLabBanner = this._onDismissedOldV1GpuLabBanner.bind(this);\r\n    }\r\n    componentDidMount() {\r\n        const { labListViewModel, pollLabListStart } = this.props;\r\n        const { labs, currentLabParentId } = labListViewModel;\r\n        if (isDeletingLabInList(labs)) {\r\n            pollLabListStart(currentLabParentId, Constants.DefaultPollingInterval);\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        // Note: this handles cases where the lab account does not actually exist\r\n        const { isLoadingLabParentResources, fatalError, labListViewModel, pollLabListStart, pollLabListStop, currentLabParentExist, } = this.props;\r\n        const { currentLabParentId, labs } = labListViewModel;\r\n        if (!isLoadingLabParentResources && !currentLabParentExist) {\r\n            fatalError(ErrorCode.ResourceNotFound, new Error('Lab list failed to find the current lab account.'));\r\n        }\r\n        if (isDeletingLabInList(labs) !== isDeletingLabInList(prevProps.labListViewModel.labs)) {\r\n            if (isDeletingLabInList(labs)) {\r\n                pollLabListStart(currentLabParentId, Constants.DefaultPollingInterval, Constants.OneMinuteInterval);\r\n            }\r\n            else {\r\n                pollLabListStop();\r\n            }\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        const { pollLabListStop } = this.props;\r\n        pollLabListStop();\r\n    }\r\n    _returnToLabList() {\r\n        const { currentLabParentId } = this.props.labListViewModel;\r\n        this.props.replace({\r\n            pathname: isLabParentLabAccount(currentLabParentId)\r\n                ? Routes.LabList(currentLabParentId)\r\n                : Routes.VNextLabList(currentLabParentId),\r\n            search: this.props.search,\r\n        });\r\n    }\r\n    _loadDashboard(labId) {\r\n        const { selectLab, push, search } = this.props;\r\n        selectLab(labId);\r\n        push({ pathname: Routes.Dashboard(labId), search });\r\n    }\r\n    _loadSchedule(labId) {\r\n        const { selectLab, push, search } = this.props;\r\n        selectLab(labId);\r\n        push({ pathname: Routes.Schedule(labId), search });\r\n    }\r\n    _loadUsers(labId) {\r\n        const { selectLab, push, search } = this.props;\r\n        selectLab(labId);\r\n        push({ pathname: Routes.Users(labId), search });\r\n    }\r\n    _loadVirtualMachines(labId) {\r\n        const { selectLab, push, search } = this.props;\r\n        selectLab(labId);\r\n        push({ pathname: Routes.VirtualMachines(labId), search });\r\n    }\r\n    _deleteLab(labId) {\r\n        this.props.deleteLab(labId);\r\n    }\r\n    _toggleShowTips(enabled) {\r\n        this.props.toggleDisableHints(!enabled);\r\n    }\r\n    _onDismissedIntro() {\r\n        this.props.dismissLabListFirstRun();\r\n    }\r\n    _onDismissedRetirementAlert() {\r\n        this.props.dismissRetirementAlert();\r\n    }\r\n    _onDismissedCovid19Banner() {\r\n        this.props.dismissCovidBanner();\r\n    }\r\n    _onDismissedOldV1GpuLabBanner() {\r\n        this.props.dismissOldV1GpuLabBanner();\r\n    }\r\n    render() {\r\n        const { labListViewModel, showNewLabFlyout, intl, labAccessType, clearError, clearUpdateLinkedLmsError, filterByLabAccessType, } = this.props;\r\n        const listProps = {\r\n            labListViewModel,\r\n            showNewLabFlyout,\r\n            labAccessType,\r\n            returnToLabList: this._returnToLabList,\r\n            loadDashboard: this._loadDashboard,\r\n            loadSchedule: this._loadSchedule,\r\n            loadUsers: this._loadUsers,\r\n            loadVirtualMachines: this._loadVirtualMachines,\r\n            deleteLab: this._deleteLab,\r\n            toggleShowTips: this._toggleShowTips,\r\n            onDismissedIntro: this._onDismissedIntro,\r\n            onDismissedRetirementAlert: this._onDismissedRetirementAlert,\r\n            onDismissedCovidBanner: this._onDismissedCovid19Banner,\r\n            onDismissedOldV1GpuLabBanner: this._onDismissedOldV1GpuLabBanner,\r\n            clearError,\r\n            clearUpdateLinkedLmsError,\r\n            filterByLabAccessType,\r\n        };\r\n        const pageTitle = intl.formatMessage(messages.myLabsTitle);\r\n        return (<Page title={pageTitle} headerProps={{ hideLabPicker: true }}>\r\n                <LabList {...listProps}/>\r\n            </Page>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getLabListContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    selectLab,\r\n    deleteLab,\r\n    clearError: clearLabsError,\r\n    dismissLabListFirstRun,\r\n    dismissRetirementAlert,\r\n    dismissCovidBanner,\r\n    dismissOldV1GpuLabBanner,\r\n    toggleDisableHints,\r\n    push: routerActions.push,\r\n    replace: routerActions.replace,\r\n    fatalError,\r\n    pollLabListStart,\r\n    pollLabListStop,\r\n    clearUpdateLinkedLmsError,\r\n    filterByLabAccessType,\r\n};\r\nexport const LabListContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(LabListContainerInjected));\r\nexport default LabListContainer;\r\n","import { CommonActionType } from '../../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../../lab-parent-resource/lab-parent-resource-actions';\r\nimport { CommonLabPlanActionType } from '../../lab-plan/lab-plan-actions';\r\nexport const ImageActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonLabPlanActionType,\r\n    LIST_IMAGES: 'LIST_IMAGES',\r\n    LIST_IMAGES_SUCCESS: 'LIST_IMAGES_SUCCESS',\r\n    LIST_IMAGES_ERROR: 'LIST_IMAGES_ERROR',\r\n    CREATE_IMAGE_ACCEPTED: 'CREATE_IMAGE_ACCEPTED',\r\n};\r\n","import { ImageActionType } from './image-actions';\r\nexport const listImages = (labPlanId, listEnabledOnly = true) => ({\r\n    type: ImageActionType.LIST_IMAGES,\r\n    labPlanId,\r\n    listEnabledOnly,\r\n});\r\nexport const listImagesSuccess = (images) => ({\r\n    type: ImageActionType.LIST_IMAGES_SUCCESS,\r\n    images,\r\n});\r\nexport const listImagesError = (error) => ({\r\n    type: ImageActionType.LIST_IMAGES_ERROR,\r\n    error,\r\n});\r\nexport const createSharedImageAccepted = (labPlanId, image) => ({\r\n    type: ImageActionType.CREATE_IMAGE_ACCEPTED,\r\n    labPlanId,\r\n    image,\r\n});\r\nconst actions = {\r\n    listImages,\r\n    listImagesSuccess,\r\n    listImagesError,\r\n    createSharedImageAccepted,\r\n};\r\nexport default actions;\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabActionType } from '../lab/lab-actions';\r\nimport { SharedImageActionType } from '../shared-image/shared-image-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const CommonTemplateActionType = {\r\n    LIST_TEMPLATES_SUCCESS: 'LIST_TEMPLATES_SUCCESS',\r\n    GET_TEMPLATE_SUCCESS: 'GET_TEMPLATE_SUCCESS',\r\n    PUBLISH_TEMPLATE: 'PUBLISH_TEMPLATE',\r\n    RESET_PASSWORD: 'RESET_PASSWORD',\r\n    RESET_PASSWORD_ERROR: 'RESET_PASSWORD_ERROR',\r\n};\r\nexport const TemplateActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...SharedImageActionType,\r\n    ...CommonTemplateActionType,\r\n    LIST_TEMPLATES: 'LIST_TEMPLATES',\r\n    LIST_TEMPLATES_ERROR: 'LIST_TEMPLATES_ERROR',\r\n    GET_TEMPLATE: 'GET_TEMPLATE',\r\n    GET_TEMPLATE_CANCELLED: 'GET_TEMPLATE_CANCELLED',\r\n    GET_TEMPLATE_ERROR: 'GET_TEMPLATE_ERROR',\r\n    START_TEMPLATE: 'START_TEMPLATE',\r\n    START_TEMPLATE_ERROR: 'START_TEMPLATE_ERROR',\r\n    STOP_TEMPLATE: 'STOP_TEMPLATE',\r\n    STOP_TEMPLATE_ERROR: 'STOP_TEMPLATE_ERROR',\r\n    CREATE_TEMPLATE_ERROR: 'CREATE_TEMPLATE_ERROR',\r\n    UPDATE_TEMPLATE: 'UPDATE_TEMPLATE',\r\n    UPDATE_TEMPLATE_SUCCESS: 'UPDATE_TEMPLATE_SUCCESS',\r\n    UPDATE_TEMPLATE_ERROR: 'UPDATE_TEMPLATE_ERROR',\r\n    PUBLISH_TEMPLATE_CANCELLED: 'PUBLISH_TEMPLATE_CANCELLED',\r\n    PUBLISH_TEMPLATE_ERROR: 'PUBLISH_TEMPLATE_ERROR',\r\n    PUBLISH_EXCEEDS_CORES_ERROR: 'PUBLISH_EXCEEDS_CORES_ERROR',\r\n    SELECT_TEMPLATE: 'SELECT_TEMPLATE',\r\n    CLEAR_TEMPLATE_ERROR: 'CLEAR_TEMPLATE_ERROR',\r\n    CLEAR_LOAD_TEMPLATE_ERROR: 'CLEAR_LOAD_TEMPLATE_ERROR',\r\n    CLEAR_PUBLISH_EXCEEDS_CORES_ERROR: 'CLEAR_PUBLISH_EXCEEDS_CORES_ERROR',\r\n    POLL_TEMPLATE_START: 'POLL_TEMPLATE_START',\r\n    POLL_TEMPLATE_STOP: 'POLL_TEMPLATE_STOP',\r\n    POLL_TEMPLATE_CANCELLED: 'POLL_TEMPLATE_CANCELLED',\r\n};\r\n","import { CommonLabActionType } from '../lab/lab-actions';\r\nimport { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nimport { CommonTemplateActionType } from '../template/template-actions';\r\nimport { CommonSharedImageActionType } from '../shared-image/shared-image-actions';\r\nexport const EnvironmentActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonTemplateActionType,\r\n    ...CommonSharedImageActionType,\r\n    LIST_ENVIRONMENTS: 'LIST_ENVIRONMENTS',\r\n    LIST_ENVIRONMENTS_SUCCESS: 'LIST_ENVIRONMENTS_SUCCESS',\r\n    LIST_ENVIRONMENTS_CANCELLED: 'LIST_ENVIRONMENTS_CANCELLED',\r\n    LIST_ENVIRONMENTS_ERROR: 'LIST_ENVIRONMENTS_ERROR',\r\n    START_ENVIRONMENTS: 'START_ENVIRONMENTS',\r\n    START_ENVIRONMENTS_ACCEPTED: 'START_ENVIRONMENTS_ACCEPTED',\r\n    START_ENVIRONMENTS_ERROR: 'START_ENVIRONMENTS_ERROR',\r\n    STOP_ENVIRONMENTS: 'STOP_ENVIRONMENTS',\r\n    STOP_ENVIRONMENTS_ACCEPTED: 'STOP_ENVIRONMENTS_ACCEPTED',\r\n    STOP_ENVIRONMENTS_ERROR: 'STOP_ENVIRONMENTS_ERROR',\r\n    RESET_ENVIRONMENTS: 'RESET_ENVIRONMENTS',\r\n    RESET_ENVIRONMENTS_ACCEPTED: 'RESET_ENVIRONMENTS_ACCEPTED',\r\n    RESET_ENVIRONMENTS_ERROR: 'RESET_ENVIRONMENTS_ERROR',\r\n    GET_ENVIRONMENT: 'GET_ENVIRONMENT',\r\n    GET_ENVIRONMENT_SUCCESS: 'GET_ENVIRONMENT_SUCCESS',\r\n    GET_ENVIRONMENT_CANCELLED: 'GET_ENVIRONMENT_CANCELLED',\r\n    GET_ENVIRONMENT_ERROR: 'GET_ENVIRONMENT_ERROR',\r\n    CLEAR_ENVIRONMENTS_LOAD_ERROR: 'CLEAR_ENVIRONMENTS_LOAD_ERROR',\r\n    CLEAR_ENVIRONMENTS_START_ERROR: 'CLEAR_ENVIRONMENTS_START_ERROR',\r\n    CLEAR_ENVIRONMENTS_STOP_ERROR: 'CLEAR_ENVIRONMENTS_STOP_ERROR',\r\n    CLEAR_ENVIRONMENTS_RESET_ERROR: 'CLEAR_ENVIRONMENTS_RESET_ERROR',\r\n    POLL_ENVIRONMENTS_START: 'POLL_ENVIRONMENTS_START',\r\n    POLL_ENVIRONMENTS_STOP: 'POLL_ENVIRONMENTS_STOP',\r\n    POLL_ENVIRONMENTS_CANCELLED: 'POLL_ENVIRONMENTS_CANCELLED',\r\n    CLEAR_VIRTUAL_MACHINE_GET_ERROR: 'CLEAR_VIRTUAL_MACHINE_GET_ERROR',\r\n    CLEAR_VIRTUAL_MACHINE_RESET_PASSWORD_ERROR: 'CLEAR_VIRTUAL_MACHINE_RESET_PASSWORD_ERROR',\r\n    POLL_VIRTUAL_MACHINE_START: 'POLL_VIRTUAL_MACHINE_START',\r\n    POLL_VIRTUAL_MACHINE_STOP: 'POLL_VIRTUAL_MACHINE_STOP',\r\n    POLL_VIRTUAL_MACHINE_CANCELLED: 'POLL_VIRTUAL_MACHINE_CANCELLED',\r\n    DISMISS_EXPORT_STARTED_MESSAGE_BAR: 'DISMISS_EXPORT_STARTED_MESSAGE_BAR',\r\n    CLEAR_EXPORT_ERROR: 'CLEAR_EXPORT_ERROR',\r\n    REDEPLOY_VIRTUAL_MACHINE: 'REDEPLOY_VIRTUAL_MACHINE',\r\n    REDEPLOY_VIRTUAL_MACHINE_ERROR: 'REDEPLOY_VIRTUAL_MACHINE_ERROR',\r\n    REDEPLOY_VIRTUAL_MACHINE_ACCEPTED: 'REDEPLOY_VIRTUAL_MACHINE_ACCEPTED',\r\n    CLEAR_VIRTUAL_MACHINE_REDEPLOY_ERROR: 'CLEAR_VIRTUAL_MACHINE_REDEPLOY_ERROR',\r\n};\r\n","import { EnvironmentActionType, } from './environment-actions';\r\nexport const listEnvironments = (id) => ({\r\n    type: EnvironmentActionType.LIST_ENVIRONMENTS,\r\n    // if it is vCurrent, the id indicates the template id. if it is a vNext lab, the id is the current lab id.\r\n    id,\r\n});\r\nexport const listEnvironmentsCancelled = () => ({\r\n    type: EnvironmentActionType.LIST_ENVIRONMENTS_CANCELLED,\r\n});\r\nexport const listEnvironmentsSuccess = (environments) => ({\r\n    type: EnvironmentActionType.LIST_ENVIRONMENTS_SUCCESS,\r\n    environments,\r\n});\r\nexport const listEnvironmentsError = (error) => ({\r\n    type: EnvironmentActionType.LIST_ENVIRONMENTS_ERROR,\r\n    error,\r\n});\r\nexport const startEnvironments = (environmentIds) => ({\r\n    type: EnvironmentActionType.START_ENVIRONMENTS,\r\n    environmentIds,\r\n});\r\nexport const startEnvironmentsAccepted = (operationIds) => ({\r\n    type: EnvironmentActionType.START_ENVIRONMENTS_ACCEPTED,\r\n    operationIds,\r\n});\r\nexport const startEnvironmentsError = (errors) => ({\r\n    type: EnvironmentActionType.START_ENVIRONMENTS_ERROR,\r\n    errors,\r\n});\r\nexport const stopEnvironments = (environmentIds) => ({\r\n    type: EnvironmentActionType.STOP_ENVIRONMENTS,\r\n    environmentIds,\r\n});\r\nexport const stopEnvironmentsAccepted = (operationIds) => ({\r\n    type: EnvironmentActionType.STOP_ENVIRONMENTS_ACCEPTED,\r\n    operationIds,\r\n});\r\nexport const stopEnvironmentsError = (errors) => ({\r\n    type: EnvironmentActionType.STOP_ENVIRONMENTS_ERROR,\r\n    errors,\r\n});\r\nexport const resetEnvironments = (environmentIds) => ({\r\n    type: EnvironmentActionType.RESET_ENVIRONMENTS,\r\n    environmentIds,\r\n});\r\nexport const resetEnvironmentsError = (errors) => ({\r\n    type: EnvironmentActionType.RESET_ENVIRONMENTS_ERROR,\r\n    errors,\r\n});\r\nexport const resetEnvironmentAccepted = (operationIds) => ({\r\n    type: EnvironmentActionType.RESET_ENVIRONMENTS_ACCEPTED,\r\n    operationIds,\r\n});\r\nexport const clearGetError = (id) => ({\r\n    type: EnvironmentActionType.CLEAR_VIRTUAL_MACHINE_GET_ERROR,\r\n    id,\r\n});\r\nexport const getEnvironment = (id, includeNetwork = false) => ({\r\n    type: EnvironmentActionType.GET_ENVIRONMENT,\r\n    id,\r\n    includeNetwork,\r\n});\r\nexport const getEnvironmentSuccess = (environment) => ({\r\n    type: EnvironmentActionType.GET_ENVIRONMENT_SUCCESS,\r\n    environment,\r\n});\r\nexport const getEnvironmentCancelled = (id) => ({\r\n    type: EnvironmentActionType.GET_ENVIRONMENT_CANCELLED,\r\n    id,\r\n});\r\nexport const getEnvironmentError = (id, error) => ({\r\n    type: EnvironmentActionType.GET_ENVIRONMENT_ERROR,\r\n    id,\r\n    error,\r\n});\r\nexport const clearLoadError = () => ({\r\n    type: EnvironmentActionType.CLEAR_ENVIRONMENTS_LOAD_ERROR,\r\n});\r\nexport const clearStartError = (id) => ({\r\n    type: EnvironmentActionType.CLEAR_ENVIRONMENTS_START_ERROR,\r\n    id,\r\n});\r\nexport const clearStopError = (id) => ({\r\n    type: EnvironmentActionType.CLEAR_ENVIRONMENTS_STOP_ERROR,\r\n    id,\r\n});\r\nexport const clearResetError = (id) => ({\r\n    type: EnvironmentActionType.CLEAR_ENVIRONMENTS_RESET_ERROR,\r\n    id,\r\n});\r\nexport const pollEnvironmentsStart = (vmParentId, // vCurrent: templateId, vNext: labId\r\nintervalMs, initialDelayMs) => ({\r\n    type: EnvironmentActionType.POLL_ENVIRONMENTS_START,\r\n    vmParentId,\r\n    intervalMs,\r\n    initialDelayMs,\r\n});\r\nexport const pollEnvironmentsStop = () => ({\r\n    type: EnvironmentActionType.POLL_ENVIRONMENTS_STOP,\r\n});\r\nexport const pollEnvironmentsCancelled = () => ({\r\n    type: EnvironmentActionType.POLL_ENVIRONMENTS_CANCELLED,\r\n});\r\nexport const listVNextVirtualMachinesSuccess = (virtualMachines) => ({\r\n    type: EnvironmentActionType.LIST_ENVIRONMENTS_SUCCESS,\r\n    virtualMachines,\r\n});\r\nexport const getVNextVirtualMachineSuccess = (virtualMachine) => ({\r\n    type: EnvironmentActionType.GET_ENVIRONMENT_SUCCESS,\r\n    virtualMachine,\r\n});\r\nexport const clearStartErrors = (ids) => ({\r\n    type: EnvironmentActionType.CLEAR_ENVIRONMENTS_START_ERROR,\r\n    ids,\r\n});\r\nexport const clearStopErrors = (ids) => ({\r\n    type: EnvironmentActionType.CLEAR_ENVIRONMENTS_STOP_ERROR,\r\n    ids,\r\n});\r\nexport const pollVirtualMachineStart = (id, intervalMs, initialDelayMs) => ({\r\n    type: EnvironmentActionType.POLL_VIRTUAL_MACHINE_START,\r\n    id,\r\n    intervalMs,\r\n    initialDelayMs,\r\n});\r\nexport const pollVirtualMachineStop = () => ({\r\n    type: EnvironmentActionType.POLL_VIRTUAL_MACHINE_STOP,\r\n});\r\nexport const pollVirtualMachineCancelled = () => ({\r\n    type: EnvironmentActionType.POLL_VIRTUAL_MACHINE_CANCELLED,\r\n});\r\nexport const clearResetPasswordError = () => ({\r\n    type: EnvironmentActionType.CLEAR_VIRTUAL_MACHINE_RESET_PASSWORD_ERROR,\r\n});\r\nexport const dismissExportStartedMessageBar = () => ({\r\n    type: EnvironmentActionType.DISMISS_EXPORT_STARTED_MESSAGE_BAR,\r\n});\r\nexport const clearExportError = () => ({\r\n    type: EnvironmentActionType.CLEAR_EXPORT_ERROR,\r\n});\r\nexport const redeployVirtualMachines = (ids) => ({\r\n    type: EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE,\r\n    environmentIds: ids,\r\n});\r\nexport const redeployVirtualMachinesError = (errors) => ({\r\n    type: EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE_ERROR,\r\n    errors,\r\n});\r\nexport const redeployVirtualMachinesAccepted = (operationIds) => ({\r\n    type: EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE_ACCEPTED,\r\n    operationIds,\r\n});\r\nexport const clearRedeployErrors = (ids) => ({\r\n    type: EnvironmentActionType.CLEAR_VIRTUAL_MACHINE_REDEPLOY_ERROR,\r\n    ids,\r\n});\r\nconst actions = {\r\n    listEnvironments,\r\n    listEnvironmentsCancelled,\r\n    listEnvironmentsSuccess,\r\n    listEnvironmentsError,\r\n    startEnvironments,\r\n    startEnvironmentsError,\r\n    stopEnvironments,\r\n    stopEnvironmentsError,\r\n    resetEnvironments,\r\n    resetEnvironmentsError,\r\n    getEnvironment,\r\n    getEnvironmentCancelled,\r\n    getEnvironmentError,\r\n    getEnvironmentSuccess,\r\n    clearLoadError,\r\n    clearStartError,\r\n    clearStopError,\r\n    clearResetError,\r\n    pollEnvironmentsStart,\r\n    pollEnvironmentsStop,\r\n    pollEnvironmentsCancelled,\r\n    listVNextVirtualMachinesSuccess,\r\n    getVNextVirtualMachineSuccess,\r\n    clearGetError,\r\n    clearStartErrors,\r\n    clearStopErrors,\r\n    pollVirtualMachineStart,\r\n    pollVirtualMachineStop,\r\n    pollVirtualMachineCancelled,\r\n    clearResetPasswordError,\r\n    dismissExportStartedMessageBar,\r\n    clearExportError,\r\n    redeployVirtualMachines,\r\n    redeployVirtualMachinesError,\r\n    clearRedeployErrors,\r\n};\r\nexport default actions;\r\n","import { CommonLabActionType } from '../lab/lab-actions';\r\nimport { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const ScheduleActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_SCHEDULES: 'LIST_SCHEDULES',\r\n    LIST_SCHEDULES_SUCCESS: 'LIST_SCHEDULES_SUCCESS',\r\n    LIST_SCHEDULES_ERROR: 'LIST_SCHEDULES_ERROR',\r\n    LOAD_FIRST_LAB_ACCOUNT: 'LOAD_FIRST_LAB_ACCOUNT',\r\n    DELETE_SCHEDULE: 'DELETE_SCHEDULE',\r\n    DELETE_SCHEDULE_SUCCESS: 'DELETE_SCHEDULE_SUCCESS',\r\n    DELETE_SCHEDULE_ERROR: 'DELETE_SCHEDULE_ERROR',\r\n    CREATE_SCHEDULE: 'CREATE_SCHEDULE',\r\n    CREATE_SCHEDULE_SUCCESS: 'CREATE_SCHEDULE_SUCCESS',\r\n    CREATE_SCHEDULE_ERROR: 'CREATE_SCHEDULE_ERROR',\r\n    UPDATE_SCHEDULE: 'UPDATE_SCHEDULE',\r\n    UPDATE_SCHEDULE_SUCCESS: 'UPDATE_SCHEDULE_SUCCESS',\r\n    UPDATE_SCHEDULE_ERROR: 'UPDATE_SCHEDULE_ERROR',\r\n    CLEAR_LOAD_SCHEDULE_ERROR: 'CLEAR_LOAD_SCHEDULE_ERROR',\r\n    CLEAR_SCHEDULE_ERROR: 'CLEAR_SCHEDULE_ERROR',\r\n};\r\n","import { ScheduleActionType, } from './schedule-actions';\r\nexport const listSchedules = (environmentId) => ({\r\n    type: ScheduleActionType.LIST_SCHEDULES,\r\n    environmentId,\r\n});\r\nexport const listVNextSchedules = (labId) => ({\r\n    type: ScheduleActionType.LIST_SCHEDULES,\r\n    labId,\r\n});\r\nexport const listSchedulesSuccess = (schedules) => ({\r\n    type: ScheduleActionType.LIST_SCHEDULES_SUCCESS,\r\n    schedules,\r\n});\r\nexport const listVNextSchedulesSuccess = (schedules) => ({\r\n    type: ScheduleActionType.LIST_SCHEDULES_SUCCESS,\r\n    schedules,\r\n});\r\nexport const listSchedulesError = (error) => ({\r\n    type: ScheduleActionType.LIST_SCHEDULES_ERROR,\r\n    error,\r\n});\r\nexport const deleteSchedule = (scheduleId) => ({\r\n    type: ScheduleActionType.DELETE_SCHEDULE,\r\n    scheduleId,\r\n});\r\nexport const deleteScheduleSuccess = (scheduleId) => ({\r\n    type: ScheduleActionType.DELETE_SCHEDULE_SUCCESS,\r\n    scheduleId,\r\n});\r\nexport const deleteScheduleError = (error) => ({\r\n    type: ScheduleActionType.DELETE_SCHEDULE_ERROR,\r\n    error,\r\n});\r\nexport const createSchedule = (templateId, schedule) => ({\r\n    type: ScheduleActionType.CREATE_SCHEDULE,\r\n    templateId,\r\n    schedule,\r\n});\r\nexport const createVNextSchedule = (labId, schedule) => ({\r\n    type: ScheduleActionType.CREATE_SCHEDULE,\r\n    labId,\r\n    schedule,\r\n});\r\nexport const createScheduleSuccess = (schedule) => ({\r\n    type: ScheduleActionType.CREATE_SCHEDULE_SUCCESS,\r\n    schedule,\r\n});\r\nexport const createVNextScheduleSuccess = (schedule) => ({\r\n    type: ScheduleActionType.CREATE_SCHEDULE_SUCCESS,\r\n    schedule,\r\n});\r\nexport const createScheduleError = (error) => ({\r\n    type: ScheduleActionType.CREATE_SCHEDULE_ERROR,\r\n    error,\r\n});\r\nexport const updateSchedule = (templateId, schedule) => ({\r\n    type: ScheduleActionType.UPDATE_SCHEDULE,\r\n    templateId,\r\n    schedule,\r\n});\r\nexport const updateVNextSchedule = (labId, schedule) => ({\r\n    type: ScheduleActionType.UPDATE_SCHEDULE,\r\n    labId,\r\n    schedule,\r\n});\r\nexport const updateScheduleSuccess = (schedule) => ({\r\n    type: ScheduleActionType.UPDATE_SCHEDULE_SUCCESS,\r\n    schedule,\r\n});\r\nexport const updateVNextScheduleSuccess = (schedule) => ({\r\n    type: ScheduleActionType.UPDATE_SCHEDULE_SUCCESS,\r\n    schedule,\r\n});\r\nexport const updateScheduleError = (error) => ({\r\n    type: ScheduleActionType.UPDATE_SCHEDULE_ERROR,\r\n    error,\r\n});\r\nexport const clearLoadScheduleError = () => ({\r\n    type: ScheduleActionType.CLEAR_LOAD_SCHEDULE_ERROR,\r\n});\r\nexport const clearError = (id, errorIndex) => ({\r\n    type: ScheduleActionType.CLEAR_SCHEDULE_ERROR,\r\n    id,\r\n    errorIndex,\r\n});\r\nconst actions = {\r\n    listSchedules,\r\n    listVNextSchedules,\r\n    listSchedulesSuccess,\r\n    listVNextSchedulesSuccess,\r\n    listSchedulesError,\r\n    deleteSchedule,\r\n    deleteScheduleSuccess,\r\n    deleteScheduleError,\r\n    createSchedule,\r\n    createVNextSchedule,\r\n    createScheduleSuccess,\r\n    createVNextScheduleSuccess,\r\n    createScheduleError,\r\n    updateSchedule,\r\n    updateVNextSchedule,\r\n    updateScheduleSuccess,\r\n    updateVNextScheduleSuccess,\r\n    updateScheduleError,\r\n    clearLoadScheduleError,\r\n    clearError,\r\n};\r\nexport default actions;\r\n","import { TemplateActionType, } from './template-actions';\r\nexport const listTemplates = (labId, storeFirst = true, expand = false) => ({\r\n    type: TemplateActionType.LIST_TEMPLATES,\r\n    labId,\r\n    storeFirst,\r\n    expand,\r\n});\r\nexport const listTemplatesSuccess = (templates) => ({\r\n    type: TemplateActionType.LIST_TEMPLATES_SUCCESS,\r\n    templates,\r\n});\r\nexport const listTemplatesError = (error) => ({\r\n    type: TemplateActionType.LIST_TEMPLATES_ERROR,\r\n    error,\r\n});\r\nexport const getTemplate = (templateId, expand = false) => ({\r\n    type: TemplateActionType.GET_TEMPLATE,\r\n    templateId,\r\n    expand,\r\n});\r\nexport const getTemplateCancelled = () => ({\r\n    type: TemplateActionType.GET_TEMPLATE_CANCELLED,\r\n});\r\nexport const getTemplateSuccess = (template, expand = false) => ({\r\n    type: TemplateActionType.GET_TEMPLATE_SUCCESS,\r\n    template,\r\n    expand,\r\n});\r\nexport const getTemplateError = (error) => ({\r\n    type: TemplateActionType.GET_TEMPLATE_ERROR,\r\n    error,\r\n});\r\nexport const startTemplate = (templateId) => ({\r\n    type: TemplateActionType.START_TEMPLATE,\r\n    templateId,\r\n});\r\nexport const startTemplateError = (error) => ({\r\n    type: TemplateActionType.START_TEMPLATE_ERROR,\r\n    error,\r\n});\r\nexport const stopTemplate = (templateId) => ({\r\n    type: TemplateActionType.STOP_TEMPLATE,\r\n    templateId,\r\n});\r\nexport const stopTemplateError = (error) => ({\r\n    type: TemplateActionType.STOP_TEMPLATE_ERROR,\r\n    error,\r\n});\r\nexport const createTemplateError = (error) => ({\r\n    type: TemplateActionType.CREATE_TEMPLATE_ERROR,\r\n    error,\r\n});\r\nexport const updateTemplate = (templateId, title, description) => ({\r\n    type: TemplateActionType.UPDATE_TEMPLATE,\r\n    templateId,\r\n    title,\r\n    description,\r\n});\r\nexport const updateTemplateSuccess = (template) => ({\r\n    type: TemplateActionType.UPDATE_TEMPLATE_SUCCESS,\r\n    template,\r\n});\r\nexport const updateTemplateError = (error) => ({\r\n    type: TemplateActionType.UPDATE_TEMPLATE_ERROR,\r\n    error,\r\n});\r\nexport const publishTemplate = (templateId, maxUsersInLab, useExistingImage = false) => ({\r\n    type: TemplateActionType.PUBLISH_TEMPLATE,\r\n    templateId,\r\n    maxUsersInLab,\r\n    useExistingImage,\r\n});\r\nexport const publishTemplateCancelled = (templateId) => ({\r\n    type: TemplateActionType.PUBLISH_TEMPLATE_CANCELLED,\r\n    templateId,\r\n});\r\nexport const publishTemplateError = (templateId, error) => ({\r\n    type: TemplateActionType.PUBLISH_TEMPLATE_ERROR,\r\n    templateId,\r\n    error,\r\n});\r\nexport const resetPassword = (templateId, username, password) => ({\r\n    type: TemplateActionType.RESET_PASSWORD,\r\n    templateId,\r\n    username,\r\n    password,\r\n});\r\nexport const resetPasswordError = (error) => ({\r\n    type: TemplateActionType.RESET_PASSWORD_ERROR,\r\n    error,\r\n});\r\nexport const selectTemplate = (template) => ({\r\n    type: TemplateActionType.SELECT_TEMPLATE,\r\n    template,\r\n});\r\nexport const clearError = (id, errorIndex) => ({\r\n    type: TemplateActionType.CLEAR_TEMPLATE_ERROR,\r\n    id,\r\n    errorIndex,\r\n});\r\nexport const clearLoadTemplateError = () => ({\r\n    type: TemplateActionType.CLEAR_LOAD_TEMPLATE_ERROR,\r\n});\r\nexport const clearPublishExceedsCoresError = () => ({\r\n    type: TemplateActionType.CLEAR_PUBLISH_EXCEEDS_CORES_ERROR,\r\n});\r\nexport const pollTemplateStart = (id, intervalMs, initialDelayMs) => ({\r\n    type: TemplateActionType.POLL_TEMPLATE_START,\r\n    id,\r\n    intervalMs,\r\n    initialDelayMs,\r\n});\r\nexport const pollTemplateStop = () => ({\r\n    type: TemplateActionType.POLL_TEMPLATE_STOP,\r\n});\r\nexport const pollTemplateCancelled = () => ({\r\n    type: TemplateActionType.POLL_TEMPLATE_CANCELLED,\r\n});\r\nconst actions = {\r\n    listTemplates,\r\n    listTemplatesSuccess,\r\n    listTemplatesError,\r\n    getTemplate,\r\n    getTemplateCancelled,\r\n    getTemplateSuccess,\r\n    getTemplateError,\r\n    startTemplate,\r\n    startTemplateError,\r\n    stopTemplate,\r\n    stopTemplateError,\r\n    createTemplateError,\r\n    updateTemplate,\r\n    updateTemplateSuccess,\r\n    updateTemplateError,\r\n    publishTemplate,\r\n    publishTemplateCancelled,\r\n    publishTemplateError,\r\n    resetPassword,\r\n    clearLoadTemplateError,\r\n    clearError,\r\n    clearPublishExceedsCoresError,\r\n    pollTemplateStart,\r\n    pollTemplateStop,\r\n    pollTemplateCancelled,\r\n};\r\nexport default actions;\r\n","import { CommonLabActionType } from '../lab/lab-actions';\r\nimport { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const UserActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_USERS: 'LIST_USERS',\r\n    LIST_USERS_CANCELLED: 'LIST_USERS_CANCELLED',\r\n    LIST_USERS_SUCCESS: 'LIST_USERS_SUCCESS',\r\n    LIST_USERS_ERROR: 'LIST_USERS_ERROR',\r\n    DELETE_USERS: 'DELETE_USERS',\r\n    DELETE_USERS_SUCCESS: 'DELETE_USERS_SUCCESS',\r\n    DELETE_USERS_ERROR: 'DELETE_USERS_ERROR',\r\n    ADD_USERS: 'ADD_USERS',\r\n    ADD_USERS_SUCCESS: 'ADD_USERS_SUCCESS',\r\n    ADD_USERS_ERROR: 'ADD_USERS_ERROR',\r\n    INVITE_USERS: 'INVITE_USERS',\r\n    INVITE_USERS_SUCCESS: 'INVITE_USERS_SUCCESS',\r\n    INVITE_USERS_ERROR: 'INVITE_USERS_ERROR',\r\n    CLEAR_LOAD_USERS_ERROR: 'CLEAR_LOAD_USERS_ERROR',\r\n    CLEAR_ADD_USERS_ERROR: 'CLEAR_ADD_USERS_ERROR',\r\n    CLEAR_DELETE_USERS_ERROR: 'CLEAR_DELETE_USERS_ERROR',\r\n    CLEAR_INVITE_USERS_ERROR: 'CLEAR_INVITE_USERS_ERROR',\r\n    POLL_USERS_START: 'POLL_USERS_START',\r\n    POLL_USERS_STOP: 'POLL_USERS_STOP',\r\n    POLL_USERS_CANCELLED: 'POLL_USERS_CANCELLED',\r\n    UPDATE_ADDITIONAL_QUOTA: 'UPDATE_ADDITIONAL_QUOTA',\r\n    UPDATE_ADDITIONAL_QUOTA_SUCCESS: 'UPDATE_ADDITIONAL_QUOTA_SUCCESS',\r\n    UPDATE_ADDITIONAL_QUOTA_ERROR: 'UPDATE_ADDITIONAL_QUOTA_ERROR',\r\n    CLEAR_UPDATE_ADDITIONAL_QUOTA_ERROR: 'CLEAR_UPDATE_ADDITIONAL_QUOTA_ERROR',\r\n};\r\n","import { UserActionType, } from './user-actions';\r\nexport const listUsers = (labId) => ({\r\n    type: UserActionType.LIST_USERS,\r\n    labId,\r\n});\r\nexport const listUsersCancelled = () => ({\r\n    type: UserActionType.LIST_USERS_CANCELLED,\r\n});\r\nexport const listUsersSuccess = (users) => ({\r\n    type: UserActionType.LIST_USERS_SUCCESS,\r\n    users,\r\n});\r\nexport const listVNextUsersSuccess = (users) => ({\r\n    type: UserActionType.LIST_USERS_SUCCESS,\r\n    users,\r\n});\r\nexport const listUsersError = (error) => ({\r\n    type: UserActionType.LIST_USERS_ERROR,\r\n    error,\r\n});\r\nexport const deleteUsers = (userIds) => ({\r\n    type: UserActionType.DELETE_USERS,\r\n    userIds,\r\n});\r\nexport const deleteUsersSuccess = (userIds) => ({\r\n    type: UserActionType.DELETE_USERS_SUCCESS,\r\n    userIds,\r\n});\r\nexport const deleteUsersError = (errors) => ({\r\n    type: UserActionType.DELETE_USERS_ERROR,\r\n    errors,\r\n});\r\nexport const addUsers = (labId, emailAddresses) => ({\r\n    type: UserActionType.ADD_USERS,\r\n    labId,\r\n    emailAddresses,\r\n});\r\nexport const addUsersSuccess = (users) => ({\r\n    type: UserActionType.ADD_USERS_SUCCESS,\r\n    users,\r\n});\r\nexport const addVNextUsersSuccess = (users) => ({\r\n    type: UserActionType.ADD_USERS_SUCCESS,\r\n    users,\r\n});\r\nexport const addVNextUsersError = (errors) => ({\r\n    type: UserActionType.ADD_USERS_ERROR,\r\n    errors,\r\n});\r\nexport const addUsersError = (error, failedEmails) => ({\r\n    type: UserActionType.ADD_USERS_ERROR,\r\n    error,\r\n    failedEmails,\r\n});\r\nexport const inviteUsers = (labId, userIds, extraMessage) => ({\r\n    type: UserActionType.INVITE_USERS,\r\n    labId,\r\n    userIds,\r\n    extraMessage,\r\n});\r\nexport const inviteUsersSuccess = (userIds) => ({\r\n    type: UserActionType.INVITE_USERS_SUCCESS,\r\n    userIds,\r\n});\r\nexport const inviteUsersError = (error) => ({\r\n    type: UserActionType.INVITE_USERS_ERROR,\r\n    error,\r\n});\r\nexport const inviteVNextUsersError = (errors) => ({\r\n    type: UserActionType.INVITE_USERS_ERROR,\r\n    errors,\r\n});\r\nexport const clearLoadUsersError = () => ({\r\n    type: UserActionType.CLEAR_LOAD_USERS_ERROR,\r\n});\r\nexport const clearAddUsersError = (id) => ({\r\n    type: UserActionType.CLEAR_ADD_USERS_ERROR,\r\n    id,\r\n});\r\nexport const clearDeleteUsersError = (id) => ({\r\n    type: UserActionType.CLEAR_DELETE_USERS_ERROR,\r\n    id,\r\n});\r\nexport const clearInviteUsersError = (id) => ({\r\n    type: UserActionType.CLEAR_INVITE_USERS_ERROR,\r\n    id,\r\n});\r\nexport const pollUsersStart = (labId, intervalMs, initialDelayMs) => ({\r\n    type: UserActionType.POLL_USERS_START,\r\n    labId,\r\n    intervalMs,\r\n    initialDelayMs,\r\n});\r\nexport const pollUsersStop = () => ({\r\n    type: UserActionType.POLL_USERS_STOP,\r\n});\r\nexport const pollUsersCancelled = () => ({\r\n    type: UserActionType.POLL_USERS_CANCELLED,\r\n});\r\nexport const updateAdditionalQuotaForUsers = (userIds, additionalQuota) => ({\r\n    type: UserActionType.UPDATE_ADDITIONAL_QUOTA,\r\n    userIds,\r\n    additionalQuota,\r\n});\r\nexport const updateAdditionalQuotaForUsersSuccess = (users) => ({\r\n    type: UserActionType.UPDATE_ADDITIONAL_QUOTA_SUCCESS,\r\n    users,\r\n});\r\nexport const updateVNextAdditionalQuotaForUsersSuccess = (users) => ({\r\n    type: UserActionType.UPDATE_ADDITIONAL_QUOTA_SUCCESS,\r\n    users,\r\n});\r\nexport const updateAdditionalQuotaForUsersError = (errors) => ({\r\n    type: UserActionType.UPDATE_ADDITIONAL_QUOTA_ERROR,\r\n    errors,\r\n});\r\nexport const clearUpdateAdditionalQuotaForUsersError = (userId) => ({\r\n    type: UserActionType.CLEAR_UPDATE_ADDITIONAL_QUOTA_ERROR,\r\n    id: userId,\r\n});\r\nconst actions = {\r\n    listUsers,\r\n    listUsersCancelled,\r\n    listUsersSuccess,\r\n    listUsersError,\r\n    deleteUsers,\r\n    deleteUsersSuccess,\r\n    deleteUsersError,\r\n    addUsers,\r\n    addUsersSuccess,\r\n    addUsersError,\r\n    clearLoadUsersError,\r\n    clearAddUsersError,\r\n    clearDeleteUsersError,\r\n    clearInviteUsersError,\r\n    pollUsersStart,\r\n    pollUsersStop,\r\n    pollUsersCancelled,\r\n    listVNextUsersSuccess,\r\n    addVNextUsersSuccess,\r\n    updateVNextAdditionalQuotaForUsersSuccess,\r\n    addVNextUsersError,\r\n    inviteVNextUsersError,\r\n};\r\nexport default actions;\r\n","export const LabNavKeys = {\r\n    Dashboard: 'dashboard',\r\n    Template: 'template',\r\n    VirualMachine: 'virtual machines',\r\n    Users: 'users',\r\n    Schedule: 'schedule',\r\n    Settings: 'settings',\r\n};\r\nexport default LabNavKeys;\r\n","import memoize from 'memoize-one';\r\nimport labAppNavMessages from '../lab-app/lab-app-nav-messages';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport { Routes } from '../utils/routes';\r\nexport const getNavigationItems = memoize((intl, selectedLabId, selectedItem, navigateRoute) => {\r\n    const msg = intl.formatMessage;\r\n    const dashboardText = msg(labAppNavMessages.dashboard);\r\n    const settingsText = msg(labAppNavMessages.settings);\r\n    const templateText = msg(labAppNavMessages.template);\r\n    const virtualMachinePoolText = msg(labAppNavMessages.virtualMachinePool);\r\n    const usersText = msg(commonMessages.users);\r\n    const scheduleText = msg(commonMessages.schedule);\r\n    const dashboardRoute = Routes.Dashboard(selectedLabId);\r\n    const settingsRoute = Routes.Settings(selectedLabId);\r\n    const templateRoute = Routes.Template(selectedLabId);\r\n    const virtualMachinesRoute = Routes.VirtualMachines(selectedLabId);\r\n    const usersRoute = Routes.Users(selectedLabId);\r\n    const schedulesRoute = Routes.Schedule(selectedLabId);\r\n    const navigationItems = [\r\n        {\r\n            key: LabNavKeys.Dashboard,\r\n            onClick: () => navigateRoute(dashboardRoute),\r\n            text: dashboardText,\r\n            ariaLabel: dashboardText,\r\n            className: selectedItem === LabNavKeys.Dashboard ? 'selected' : undefined,\r\n        },\r\n        {\r\n            key: LabNavKeys.Template,\r\n            onClick: () => navigateRoute(templateRoute),\r\n            text: templateText,\r\n            ariaLabel: templateText,\r\n            className: selectedItem === LabNavKeys.Template ? 'selected' : undefined,\r\n        },\r\n        {\r\n            key: LabNavKeys.VirualMachine,\r\n            onClick: () => navigateRoute(virtualMachinesRoute),\r\n            text: virtualMachinePoolText,\r\n            ariaLabel: virtualMachinePoolText,\r\n            className: selectedItem === LabNavKeys.VirualMachine ? 'selected' : undefined,\r\n        },\r\n        {\r\n            key: LabNavKeys.Users,\r\n            onClick: () => navigateRoute(usersRoute),\r\n            text: usersText,\r\n            ariaLabel: usersText,\r\n            className: selectedItem === LabNavKeys.Users ? 'selected' : undefined,\r\n        },\r\n        {\r\n            key: LabNavKeys.Schedule,\r\n            onClick: () => navigateRoute(schedulesRoute),\r\n            text: scheduleText,\r\n            ariaLabel: scheduleText,\r\n            className: selectedItem === LabNavKeys.Schedule ? 'selected' : undefined,\r\n        },\r\n        {\r\n            key: LabNavKeys.Settings,\r\n            onClick: () => navigateRoute(settingsRoute),\r\n            text: settingsText,\r\n            ariaLabel: settingsText,\r\n            className: selectedItem === LabNavKeys.Settings ? 'selected' : undefined,\r\n        },\r\n    ];\r\n    return navigationItems;\r\n});\r\n","import { defineMessages } from 'react-intl';\r\nexport const scheduleMessages = defineMessages({\r\n    todayLabel: {\r\n        id: 'TodayLabel',\r\n        defaultMessage: 'Today',\r\n        description: 'Text on button on calendar to take user to this week.',\r\n    },\r\n    addEvent: {\r\n        id: 'AddScheduleEvent',\r\n        defaultMessage: 'Add scheduled event',\r\n        description: 'Text to indicate creating a new schedule.',\r\n    },\r\n    editEvent: {\r\n        id: 'EditScheduleEvent',\r\n        defaultMessage: 'Edit scheduled event',\r\n        description: 'Text to indicate editing an existing schedule.',\r\n    },\r\n    dateLabel: {\r\n        id: 'DateLabel',\r\n        defaultMessage: 'Date',\r\n        description: 'Label for date of schedule',\r\n    },\r\n    startTimeLabel: {\r\n        id: 'StartTimeLabel',\r\n        defaultMessage: 'Start time',\r\n        description: 'Label for start time of schedule',\r\n    },\r\n    stopTimeLabel: {\r\n        id: 'StopTimeLabel',\r\n        defaultMessage: 'Stop time',\r\n        description: 'Label for stop time of schedule',\r\n    },\r\n    timeZoneLabel: {\r\n        id: 'TimeZoneLabel',\r\n        defaultMessage: 'Time zone',\r\n        description: 'Label for time zone of schedule',\r\n    },\r\n    notesLabel: {\r\n        id: 'NotesLabel',\r\n        defaultMessage: 'Notes (optional)',\r\n        description: 'Label for schedule notes, which are optional.',\r\n    },\r\n    selectTimezonePlaceholder: {\r\n        id: 'SelectTimezonePlaceholder',\r\n        defaultMessage: 'Select a timezone',\r\n        description: `Placeholder for time zone picker, if we cannot determine the browser's local time.`,\r\n    },\r\n    selectedDaysValidationMessage: {\r\n        id: 'SelectedDaysValidationMessage',\r\n        defaultMessage: 'At least one day must be selected',\r\n        description: `Validation message for day picker in flyout, specifying at least one day must be selected.`,\r\n    },\r\n    startTimeValidationMessage: {\r\n        id: 'StartTimeValidationMessage',\r\n        defaultMessage: 'Start time must be before stop time',\r\n        description: `Validation message for start time control in flyout, specifying start time must be before stop time.`,\r\n    },\r\n    stopTimeValidationMessage: {\r\n        id: 'StopTimeValidationMessage',\r\n        defaultMessage: 'Stop time must be after start time',\r\n        description: `Validation message for stop time control in flyout, specifying stop time must be after start time.`,\r\n    },\r\n    minimumDurationValidationMessage: {\r\n        id: 'MinimumDurationValidationMessage',\r\n        defaultMessage: 'Schedule duration must be at least 15 minutes',\r\n        description: `Validation message for stop time control in flyout, specifying schedule duration must be at least 15 minutes.`,\r\n    },\r\n    timezoneValidationMessage: {\r\n        id: 'TimezoneValidationMessage',\r\n        defaultMessage: 'Time zone is required',\r\n        description: `Validation message for time zone control in flyout, specifying time zone must be selected.`,\r\n    },\r\n    notesValidationMessage: {\r\n        id: 'NotesValidationMessage',\r\n        defaultMessage: 'Notes cannot be longer than 500 characters',\r\n        description: `Validation message for notes control in flyout, specifying notes cannot be longer than 500 characters.`,\r\n    },\r\n    startWithTimeLabel: {\r\n        id: 'StartWithTimeLabel',\r\n        defaultMessage: 'Start: {startTime}',\r\n        description: `Label for start time.`,\r\n    },\r\n    stopWithTimeLabel: {\r\n        id: 'StopWithTimeLabel',\r\n        defaultMessage: 'Stop: {stopTime}',\r\n        description: `Label for stop time.`,\r\n    },\r\n    repeatLabel: {\r\n        id: 'RepeatLabel',\r\n        defaultMessage: 'Repeat',\r\n        description: `Label for repeat.`,\r\n    },\r\n    deleteRecurrenceLabel: {\r\n        id: 'DeleteRecurrenceLabel',\r\n        defaultMessage: 'Delete recurrence',\r\n        description: `Title for button to delete recurrence.`,\r\n    },\r\n    occurenceNoEndDateLabel: {\r\n        id: 'OccurenceNoEndDateLabel',\r\n        defaultMessage: 'Every {days}',\r\n        description: `Label for recurring schedule, indicating the days it occurs on.`,\r\n    },\r\n    occurenceWithEndDateLabel: {\r\n        id: 'OccurenceWithEndDateLabel',\r\n        defaultMessage: 'Every {days} until {date}',\r\n        description: `Label for recurring schedule, indicating the days it occurs on and the date the schedule ends at`,\r\n    },\r\n    sundayShort: {\r\n        id: 'SundayShort',\r\n        defaultMessage: 'S',\r\n        description: `One character abbreviation for Sunday. If Sunday cannot be abbreviated down to one character, then the shortest possible representation for Sunday`,\r\n    },\r\n    mondayShort: {\r\n        id: 'MondayShort',\r\n        defaultMessage: 'M',\r\n        description: `One character abbreviation for Monday. If Monday cannot be abbreviated down to one character, then the shortest possible representation for Monday`,\r\n    },\r\n    tuesdayShort: {\r\n        id: 'TuesdayShort',\r\n        defaultMessage: 'T',\r\n        description: `One character abbreviation for Tuesday. If Tuesday cannot be abbreviated down to one character, then the shortest possible representation for Tuesday`,\r\n    },\r\n    wednesdayShort: {\r\n        id: 'WednesdayShort',\r\n        defaultMessage: 'W',\r\n        description: `One character abbreviation for Wednesday. If Wednesday cannot be abbreviated down to one character, then the shortest possible representation for Wednesday`,\r\n    },\r\n    thursdayShort: {\r\n        id: 'ThursdayShort',\r\n        defaultMessage: 'T',\r\n        description: `One character abbreviation for Thursday. If Thursday cannot be abbreviated down to one character, then the shortest possible representation for Thursday`,\r\n    },\r\n    fridayShort: {\r\n        id: 'fridayShort',\r\n        defaultMessage: 'F',\r\n        description: `One character abbreviation for Friday. If Friday cannot be abbreviated down to one character, then the shortest possible representation for Friday`,\r\n    },\r\n    saturdayShort: {\r\n        id: 'SaturdayShort',\r\n        defaultMessage: 'S',\r\n        description: `One character abbreviation for Saturday. If Saturday cannot be abbreviated down to one character, then the shortest possible representation for Saturday`,\r\n    },\r\n});\r\nexport default scheduleMessages;\r\n","import IcalExpander from 'ical-expander';\r\nimport ical from 'ical-generator';\r\nimport moment from 'moment-timezone';\r\nimport { findOneIana } from 'windows-iana';\r\nimport { ManagedLabsModels } from '@azure-lab-services/ml-ts';\r\nimport Constants from '../utils/constants';\r\nimport scheduleMessages from './schedule-messages';\r\nfunction mapWeekday(weekday) {\r\n    switch (weekday) {\r\n        case 'Monday':\r\n            return 'MO';\r\n        case 'Tuesday':\r\n            return 'TU';\r\n        case 'Wednesday':\r\n            return 'WE';\r\n        case 'Thursday':\r\n            return 'TH';\r\n        case 'Friday':\r\n            return 'FR';\r\n        case 'Saturday':\r\n            return 'SA';\r\n        case 'Sunday':\r\n            return 'SU';\r\n        default:\r\n            throw Error('Unexpected weekday encountered');\r\n    }\r\n}\r\nfunction getWeekdays(schedule) {\r\n    return schedule.recurrencePattern && schedule.recurrencePattern.weekDays\r\n        ? schedule.recurrencePattern.weekDays.map((weekday) => mapWeekday(weekday))\r\n        : [];\r\n}\r\nfunction getVNextWeekdays(schedule) {\r\n    return schedule.recurrencePattern && schedule.recurrencePattern.weekDays\r\n        ? schedule.recurrencePattern.weekDays.map((weekday) => mapWeekday(weekday))\r\n        : [];\r\n}\r\nfunction getFrequency(schedule) {\r\n    if (!schedule.recurrencePattern) {\r\n        return 'WEEKLY';\r\n    }\r\n    switch (schedule.recurrencePattern.frequency) {\r\n        case 'Daily':\r\n            return 'DAILY';\r\n        case 'Weekly':\r\n        default:\r\n            return 'WEEKLY';\r\n    }\r\n}\r\nfunction getInterval(schedule) {\r\n    return schedule.recurrencePattern && schedule.recurrencePattern.interval ? schedule.recurrencePattern.interval : 1;\r\n}\r\nfunction getScheduleStartDate(schedule) {\r\n    return schedule.startAction.enableState === Constants.EnableState.Enabled\r\n        ? new Date(schedule.start)\r\n        : new Date(schedule.end);\r\n}\r\nfunction getVNextScheduleStartDate(schedule) {\r\n    return schedule.startAt ?? schedule.stopAt;\r\n}\r\nfunction getScheduleRecurrenceEndDate(schedule) {\r\n    return schedule.recurrencePattern\r\n        ? schedule.recurrencePattern.until\r\n            ? new Date(schedule.recurrencePattern.until)\r\n            : undefined\r\n        : new Date(schedule.end);\r\n}\r\nfunction getVNextScheduleRecurrenceEndDate(schedule) {\r\n    return schedule.recurrencePattern\r\n        ? schedule.recurrencePattern.expirationDate\r\n            ? schedule.recurrencePattern.expirationDate\r\n            : undefined\r\n        : schedule.stopAt;\r\n}\r\nfunction getUTCDate(date) {\r\n    return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes()));\r\n}\r\nfunction getBrowserOffset() {\r\n    const date = new Date();\r\n    const offset = date.getTimezoneOffset() / 60;\r\n    return offset;\r\n}\r\nfunction getEventOffset(event) {\r\n    const zone = moment.tz.zone(event.timezone);\r\n    const start = new Date(event.startDate);\r\n    const offset = zone.parse(start.valueOf()) / 60;\r\n    return offset;\r\n}\r\n/** The date passed in is the time in that event's local time\r\n *  Need to do adjustments to make it the time in the browser's time\r\n *  Also do adjustments to make sure DST does not affect times that are displayed\r\n */\r\nfunction getAdjustedDate(date, browserOffset, eventOffset) {\r\n    if (moment(new Date()).isDST() != moment(date).isDST()) {\r\n        if (moment(new Date()).isDST()) {\r\n            date.setHours(date.getHours() + eventOffset - browserOffset - 1);\r\n        }\r\n        else {\r\n            date.setHours(date.getHours() + eventOffset - browserOffset + 1);\r\n        }\r\n    }\r\n    else {\r\n        date.setHours(date.getHours() + eventOffset - browserOffset);\r\n    }\r\n    return date;\r\n}\r\nexport function adjustDate(date, timezone) {\r\n    const browserOffset = getBrowserOffset();\r\n    const ianaZone = findOneIana(timezone);\r\n    const zone = moment.tz.zone(ianaZone);\r\n    const offset = zone.parse(date.valueOf()) / 60;\r\n    const adjusted = new Date(date);\r\n    return getAdjustedDate(adjusted, browserOffset, offset);\r\n}\r\nfunction getStopOnlyEvent(locale, classNames, intl, start, end, id) {\r\n    classNames.push('fc-event--stop-only');\r\n    // adjust times so calendar will display nicely if schedule is at the very bottom of the calendar\r\n    const calendarStart = new Date(start);\r\n    const calendarEnd = new Date(end);\r\n    const endTimeFormatted = formatTime(end, locale);\r\n    const title = intl.formatMessage(scheduleMessages.stopWithTimeLabel, { stopTime: endTimeFormatted });\r\n    // adjust calendar end time so it reflects the actual height in the calendar\r\n    // as it takes up the slot of a 30 minute event.  without this code it'll appear short but actually take up\r\n    // the space of a 2 hour event (as that's our default duration) and it'll push other\r\n    // events out of the way if they're in that time frame\r\n    calendarEnd.setHours(calendarStart.getHours());\r\n    calendarEnd.setMinutes(calendarStart.getMinutes() + 30);\r\n    if (end.getHours() === 23 && end.getMinutes() > 29) {\r\n        calendarStart.setHours(23, 29);\r\n        calendarEnd.setHours(23, 59);\r\n    }\r\n    return {\r\n        start: calendarStart,\r\n        end: calendarEnd,\r\n        title,\r\n        classNames,\r\n        id,\r\n        extendedProps: {\r\n            start,\r\n            end,\r\n        },\r\n    };\r\n}\r\nfunction getStartOnlyEvent(locale, classNames, intl, start, end, id) {\r\n    classNames.push('fc-event--start-only');\r\n    // adjust times so calendar will display nicely if schedule is at the very bottom of the calendar\r\n    const calendarStart = new Date(start);\r\n    const calendarEnd = new Date(end);\r\n    const startTimeFormatted = formatTime(start, locale);\r\n    const title = intl.formatMessage(scheduleMessages.startWithTimeLabel, { startTime: startTimeFormatted });\r\n    // adjust calendar end time so it reflects the actual height in the calendar\r\n    // as it takes up the slot of a 30 minute event.  without this code it'll appear short but actually take up\r\n    // the space of a 2 hour event (as that's our default duration) and it'll push other\r\n    // events out of the way if they're in that time frame\r\n    calendarEnd.setHours(calendarStart.getHours());\r\n    calendarEnd.setMinutes(calendarStart.getMinutes() + 30);\r\n    if (start.getHours() === 23 && start.getMinutes() > 29) {\r\n        calendarStart.setHours(23, 29);\r\n        calendarEnd.setDate(calendarStart.getDate());\r\n        calendarEnd.setHours(23, 59);\r\n    }\r\n    return {\r\n        start: calendarStart,\r\n        end: calendarEnd,\r\n        title,\r\n        classNames,\r\n        id,\r\n        extendedProps: {\r\n            start,\r\n            end,\r\n        },\r\n    };\r\n}\r\nfunction getStandardEvent(locale, classNames, adjustedStart, adjustedEnd, id) {\r\n    const startTimeFormatted = formatTime(adjustedStart, locale);\r\n    const endTimeFormatted = formatTime(adjustedEnd, locale);\r\n    const title = `${startTimeFormatted} - ${endTimeFormatted}`;\r\n    return {\r\n        start: adjustedStart,\r\n        end: adjustedEnd,\r\n        title,\r\n        classNames,\r\n        id,\r\n    };\r\n}\r\nfunction formatTime(date, locale) {\r\n    return moment(date).locale(locale).format('LT');\r\n}\r\nfunction getAdjustedStart(event, browserOffset) {\r\n    const eventOffset = getEventOffset(event);\r\n    const start = new Date(event.startDate.year, event.startDate.month - 1, event.startDate.day, event.startDate.hour, event.startDate.minute, 0);\r\n    return getAdjustedDate(start, browserOffset, eventOffset);\r\n}\r\nfunction getAdjustedEnd(event, browserOffset) {\r\n    const eventOffset = getEventOffset(event);\r\n    const end = new Date(event.endDate.year, event.endDate.month - 1, event.endDate.day, event.endDate.hour, event.endDate.minute, 0);\r\n    return getAdjustedDate(end, browserOffset, eventOffset);\r\n}\r\nexport function createIcal(schedules) {\r\n    const cal = ical();\r\n    schedules.forEach((schedule) => {\r\n        const event = {\r\n            start: getUTCDate(getScheduleStartDate(schedule)),\r\n            end: getUTCDate(schedule.end),\r\n            summary: schedule.notes,\r\n            description: findOneIana(schedule.timeZoneId),\r\n            repeating: schedule.recurrencePattern\r\n                ? {\r\n                    freq: getFrequency(schedule),\r\n                    interval: getInterval(schedule),\r\n                    until: getScheduleRecurrenceEndDate(schedule),\r\n                    byDay: getWeekdays(schedule),\r\n                }\r\n                : undefined,\r\n            id: schedule.id,\r\n        };\r\n        cal.createEvent(event);\r\n    });\r\n    return cal;\r\n}\r\nexport function createIcalVNext(schedules) {\r\n    const cal = ical();\r\n    schedules.forEach((schedule) => {\r\n        const event = {\r\n            start: getUTCDate(getVNextScheduleStartDate(schedule)),\r\n            end: getUTCDate(schedule.stopAt),\r\n            summary: schedule.notes,\r\n            description: findOneIana(schedule.timeZoneId),\r\n            repeating: schedule.recurrencePattern\r\n                ? {\r\n                    freq: getFrequency(schedule),\r\n                    interval: getInterval(schedule),\r\n                    until: getVNextScheduleRecurrenceEndDate(schedule) instanceof Date ? getUTCDate(getVNextScheduleRecurrenceEndDate(schedule)) : getVNextScheduleRecurrenceEndDate(schedule),\r\n                    byDay: getVNextWeekdays(schedule),\r\n                }\r\n                : undefined,\r\n            id: schedule.id,\r\n        };\r\n        cal.createEvent(event);\r\n    });\r\n    return cal;\r\n}\r\nexport function expandEvents(cal, startWindow, endWindow) {\r\n    const icalExpander = new IcalExpander({ ics: cal.toString(), maxIterations: 0 });\r\n    // enlarge time window for different time zones\r\n    const earlierStart = new Date(startWindow);\r\n    earlierStart.setDate(earlierStart.getDate() - 2);\r\n    const laterEnd = new Date(endWindow);\r\n    laterEnd.setDate(laterEnd.getDate() + 2);\r\n    const expandedEvents = icalExpander.between(earlierStart, laterEnd);\r\n    const expandedOccurrences = expandedEvents.occurrences.map((o) => ({\r\n        startDate: o.startDate,\r\n        endDate: o.endDate,\r\n        summary: o.item.summary,\r\n        timezone: o.item.description,\r\n        id: o.item.uid,\r\n        isRecurring: true,\r\n    }));\r\n    const onetimeEvents = expandedEvents.events.map((e) => ({\r\n        startDate: e.startDate,\r\n        endDate: e.endDate,\r\n        summary: e.summary,\r\n        timezone: e.description,\r\n        id: e.uid,\r\n        isRecurring: false,\r\n    }));\r\n    const allEvents = expandedOccurrences.concat(onetimeEvents);\r\n    return allEvents;\r\n}\r\nfunction getCalendarEvents(locale, intl, schedules, occurrences) {\r\n    const browserOffset = getBrowserOffset();\r\n    const calendarEvents = occurrences.map((event) => {\r\n        const start = getAdjustedStart(event, browserOffset);\r\n        const end = getAdjustedEnd(event, browserOffset);\r\n        const id = event.id.replace('@undefined', '');\r\n        const index = schedules.findIndex((schedule) => schedule.id.toLowerCase() === id.toLowerCase());\r\n        const schedule = schedules[index];\r\n        const classNames = [];\r\n        if (event.isRecurring) {\r\n            classNames.push('fc-event--recurring');\r\n        }\r\n        if (schedule.startAction.enableState === ManagedLabsModels.EnableState.Disabled) {\r\n            return getStopOnlyEvent(locale, classNames, intl, start, end, id);\r\n        }\r\n        else if (schedule.endAction.enableState === ManagedLabsModels.EnableState.Disabled) {\r\n            return getStartOnlyEvent(locale, classNames, intl, start, end, id);\r\n        }\r\n        else {\r\n            return getStandardEvent(locale, classNames, start, end, id);\r\n        }\r\n    });\r\n    return calendarEvents;\r\n}\r\nfunction getCalendarEventsVNext(locale, intl, schedules, occurrences) {\r\n    const browserOffset = getBrowserOffset();\r\n    const calendarEvents = occurrences.map((event) => {\r\n        const start = getAdjustedStart(event, browserOffset);\r\n        const end = getAdjustedEnd(event, browserOffset);\r\n        const id = event.id.replace('@undefined', '');\r\n        const index = schedules.findIndex((schedule) => schedule.id.toLowerCase() === id.toLowerCase());\r\n        const schedule = schedules[index];\r\n        const classNames = [];\r\n        if (event.isRecurring) {\r\n            classNames.push('fc-event--recurring');\r\n        }\r\n        if (!schedule.startAt) {\r\n            return getStopOnlyEvent(locale, classNames, intl, start, end, id);\r\n        }\r\n        else {\r\n            return getStandardEvent(locale, classNames, start, end, id);\r\n        }\r\n    });\r\n    return calendarEvents;\r\n}\r\nexport function getEvents(isCurrentLabParentLabAccount, locale, intl, schedules, startWindow, endWindow) {\r\n    if (isCurrentLabParentLabAccount) {\r\n        const cal = createIcal(schedules);\r\n        const eventsForTimeWindow = expandEvents(cal, startWindow, endWindow);\r\n        const calendarEvents = getCalendarEvents(locale, intl, schedules, eventsForTimeWindow);\r\n        return calendarEvents;\r\n    }\r\n    else {\r\n        const cal = createIcalVNext(schedules);\r\n        const eventsForTimeWindow = expandEvents(cal, startWindow, endWindow);\r\n        const calendarEvents = getCalendarEventsVNext(locale, intl, schedules, eventsForTimeWindow);\r\n        return calendarEvents;\r\n    }\r\n}\r\nexport function updateDateWindow(currentStartWindow, currentEndWindow, calendarInfo, setStartWindow, setEndWindow) {\r\n    const newStartWindow = new Date(calendarInfo.view.currentStart);\r\n    const newEndWindow = new Date(calendarInfo.view.currentEnd);\r\n    if (newStartWindow.valueOf() !== currentStartWindow.valueOf()) {\r\n        setStartWindow(newStartWindow);\r\n    }\r\n    if (newEndWindow.valueOf() !== currentEndWindow.valueOf()) {\r\n        setEndWindow(newEndWindow);\r\n    }\r\n}\r\nconst CalendarUtilities = {\r\n    getEvents,\r\n    updateDateWindow,\r\n    createIcal,\r\n    expandEvents,\r\n    adjustDate,\r\n};\r\nexport default CalendarUtilities;\r\n","import { defineMessages } from 'react-intl';\r\nexport const timezoneMessages = defineMessages({\r\n    datelineStandardTime: {\r\n        id: 'Dateline Standard Time',\r\n        defaultMessage: `International Date Line West`,\r\n        description: `Label for the time zone 'International Date Line West'`,\r\n    },\r\n    uTC11: {\r\n        id: 'UTC-11',\r\n        defaultMessage: `Coordinated Universal Time-11`,\r\n        description: `Label for the time zone 'Coordinated Universal Time-11'`,\r\n    },\r\n    hawaiianStandardTime: {\r\n        id: 'Hawaiian Standard Time',\r\n        defaultMessage: `Hawaii`,\r\n        description: `Label for the time zone 'Hawaii'`,\r\n    },\r\n    alaskanStandardTime: {\r\n        id: 'Alaskan Standard Time',\r\n        defaultMessage: `Alaska`,\r\n        description: `Label for the time zone 'Alaska'`,\r\n    },\r\n    pacificStandardTimeMexico: {\r\n        id: 'Pacific Standard Time (Mexico)',\r\n        defaultMessage: `Baja California`,\r\n        description: `Label for the time zone 'Baja California'`,\r\n    },\r\n    pacificStandardTime: {\r\n        id: 'Pacific Standard Time',\r\n        defaultMessage: `Pacific Time (US, Canada)`,\r\n        description: `Label for the time zone 'Pacific Time (US, Canada)'`,\r\n    },\r\n    uSMountainStandardTime: {\r\n        id: 'US Mountain Standard Time',\r\n        defaultMessage: `Arizona`,\r\n        description: `Label for the time zone 'Arizona'`,\r\n    },\r\n    mountainStandardTimeMexico: {\r\n        id: 'Mountain Standard Time (Mexico)',\r\n        defaultMessage: `Chihuahua, La Paz, Mazatlan`,\r\n        description: `Label for the time zone 'Chihuahua, La Paz, Mazatlan'`,\r\n    },\r\n    mountainStandardTime: {\r\n        id: 'Mountain Standard Time',\r\n        defaultMessage: `Mountain Time (US, Canada)`,\r\n        description: `Label for the time zone 'Mountain Time (US, Canada)'`,\r\n    },\r\n    centralAmericaStandardTime: {\r\n        id: 'Central America Standard Time',\r\n        defaultMessage: `Central America`,\r\n        description: `Label for the time zone 'Central America'`,\r\n    },\r\n    centralStandardTime: {\r\n        id: 'Central Standard Time',\r\n        defaultMessage: `Central Time (US, Canada)`,\r\n        description: `Label for the time zone 'Central Time (US, Canada)'`,\r\n    },\r\n    centralStandardTimeMexico: {\r\n        id: 'Central Standard Time (Mexico)',\r\n        defaultMessage: `Guadalajara, Mexico City, Monterrey`,\r\n        description: `Label for the time zone 'Guadalajara, Mexico City, Monterrey'`,\r\n    },\r\n    canadaCentralStandardTime: {\r\n        id: 'Canada Central Standard Time',\r\n        defaultMessage: `Saskatchewan`,\r\n        description: `Label for the time zone 'Saskatchewan'`,\r\n    },\r\n    sAPacificStandardTime: {\r\n        id: 'SA Pacific Standard Time',\r\n        defaultMessage: `Bogota, Lima, Quito, Rio Branco`,\r\n        description: `Label for the time zone 'Bogota, Lima, Quito, Rio Branco'`,\r\n    },\r\n    easternStandardTimeMexico: {\r\n        id: 'Eastern Standard Time (Mexico)',\r\n        defaultMessage: `Chetumal`,\r\n        description: `Label for the time zone 'Chetumal'`,\r\n    },\r\n    easternStandardTime: {\r\n        id: 'Eastern Standard Time',\r\n        defaultMessage: `Eastern Time (US, Canada)`,\r\n        description: `Label for the time zone 'Eastern Time (US, Canada)'`,\r\n    },\r\n    uSEasternStandardTime: {\r\n        id: 'US Eastern Standard Time',\r\n        defaultMessage: `Indiana (East)`,\r\n        description: `Label for the time zone 'Indiana (East)'`,\r\n    },\r\n    venezuelaStandardTime: {\r\n        id: 'Venezuela Standard Time',\r\n        defaultMessage: `Caracas`,\r\n        description: `Label for the time zone 'Caracas'`,\r\n    },\r\n    paraguayStandardTime: {\r\n        id: 'Paraguay Standard Time',\r\n        defaultMessage: `Asuncion`,\r\n        description: `Label for the time zone 'Asuncion'`,\r\n    },\r\n    atlanticStandardTime: {\r\n        id: 'Atlantic Standard Time',\r\n        defaultMessage: `Atlantic Time (Canada)`,\r\n        description: `Label for the time zone 'Atlantic Time (Canada)'`,\r\n    },\r\n    centralBrazilianStandardTime: {\r\n        id: 'Central Brazilian Standard Time',\r\n        defaultMessage: `Cuiaba`,\r\n        description: `Label for the time zone 'Cuiaba'`,\r\n    },\r\n    sAWesternStandardTime: {\r\n        id: 'SA Western Standard Time',\r\n        defaultMessage: `Georgetown, La Paz, Manaus, San Juan`,\r\n        description: `Label for the time zone 'Georgetown, La Paz, Manaus, San Juan'`,\r\n    },\r\n    pacificSAStandardTime: {\r\n        id: 'Pacific SA Standard Time',\r\n        defaultMessage: `Santiago`,\r\n        description: `Label for the time zone 'Santiago'`,\r\n    },\r\n    newfoundlandStandardTime: {\r\n        id: 'Newfoundland Standard Time',\r\n        defaultMessage: `Newfoundland`,\r\n        description: `Label for the time zone 'Newfoundland'`,\r\n    },\r\n    eSouthAmericaStandardTime: {\r\n        id: 'E. South America Standard Time',\r\n        defaultMessage: `Brasilia`,\r\n        description: `Label for the time zone 'Brasilia'`,\r\n    },\r\n    sAEasternStandardTime: {\r\n        id: 'SA Eastern Standard Time',\r\n        defaultMessage: `Cayenne, Fortaleza`,\r\n        description: `Label for the time zone 'Cayenne, Fortaleza'`,\r\n    },\r\n    argentinaStandardTime: {\r\n        id: 'Argentina Standard Time',\r\n        defaultMessage: `City of Buenos Aires`,\r\n        description: `Label for the time zone 'City of Buenos Aires'`,\r\n    },\r\n    greenlandStandardTime: {\r\n        id: 'Greenland Standard Time',\r\n        defaultMessage: `Greenland`,\r\n        description: `Label for the time zone 'Greenland'`,\r\n    },\r\n    montevideoStandardTime: {\r\n        id: 'Montevideo Standard Time',\r\n        defaultMessage: `Montevideo`,\r\n        description: `Label for the time zone 'Montevideo'`,\r\n    },\r\n    bahiaStandardTime: {\r\n        id: 'Bahia Standard Time',\r\n        defaultMessage: `Salvador`,\r\n        description: `Label for the time zone 'Salvador'`,\r\n    },\r\n    uTC02: {\r\n        id: 'UTC-02',\r\n        defaultMessage: `Coordinated Universal Time-02`,\r\n        description: `Label for the time zone 'Coordinated Universal Time-02'`,\r\n    },\r\n    azoresStandardTime: {\r\n        id: 'Azores Standard Time',\r\n        defaultMessage: `Azores`,\r\n        description: `Label for the time zone 'Azores'`,\r\n    },\r\n    capeVerdeStandardTime: {\r\n        id: 'Cape Verde Standard Time',\r\n        defaultMessage: `Cabo Verde Is.`,\r\n        description: `Label for the time zone 'Cabo Verde Is.'`,\r\n    },\r\n    moroccoStandardTime: {\r\n        id: 'Morocco Standard Time',\r\n        defaultMessage: `Casablanca`,\r\n        description: `Label for the time zone 'Casablanca'`,\r\n    },\r\n    uTC: {\r\n        id: 'UTC',\r\n        defaultMessage: `Coordinated Universal Time`,\r\n        description: `Label for the time zone 'Coordinated Universal Time'`,\r\n    },\r\n    gMTStandardTime: {\r\n        id: 'GMT Standard Time',\r\n        defaultMessage: `Dublin, Edinburgh, Lisbon, London`,\r\n        description: `Label for the time zone 'Dublin, Edinburgh, Lisbon, London'`,\r\n    },\r\n    greenwichStandardTime: {\r\n        id: 'Greenwich Standard Time',\r\n        defaultMessage: `Monrovia, Reykjavik`,\r\n        description: `Label for the time zone 'Monrovia, Reykjavik'`,\r\n    },\r\n    wEuropeStandardTime: {\r\n        id: 'W. Europe Standard Time',\r\n        defaultMessage: `Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna`,\r\n        description: `Label for the time zone 'Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna'`,\r\n    },\r\n    centralEuropeStandardTime: {\r\n        id: 'Central Europe Standard Time',\r\n        defaultMessage: `Belgrade, Bratislava, Budapest, Ljubljana, Prague`,\r\n        description: `Label for the time zone 'Belgrade, Bratislava, Budapest, Ljubljana, Prague'`,\r\n    },\r\n    romanceStandardTime: {\r\n        id: 'Romance Standard Time',\r\n        defaultMessage: `Brussels, Copenhagen, Madrid, Paris`,\r\n        description: `Label for the time zone 'Brussels, Copenhagen, Madrid, Paris'`,\r\n    },\r\n    centralEuropeanStandardTime: {\r\n        id: 'Central European Standard Time',\r\n        defaultMessage: `Sarajevo, Skopje, Warsaw, Zagreb`,\r\n        description: `Label for the time zone 'Sarajevo, Skopje, Warsaw, Zagreb'`,\r\n    },\r\n    wCentralAfricaStandardTime: {\r\n        id: 'W. Central Africa Standard Time',\r\n        defaultMessage: `West Central Africa`,\r\n        description: `Label for the time zone 'West Central Africa'`,\r\n    },\r\n    namibiaStandardTime: {\r\n        id: 'Namibia Standard Time',\r\n        defaultMessage: `Windhoek`,\r\n        description: `Label for the time zone 'Windhoek'`,\r\n    },\r\n    jordanStandardTime: {\r\n        id: 'Jordan Standard Time',\r\n        defaultMessage: `Amman`,\r\n        description: `Label for the time zone 'Amman'`,\r\n    },\r\n    gTBStandardTime: {\r\n        id: 'GTB Standard Time',\r\n        defaultMessage: `Athens, Bucharest`,\r\n        description: `Label for the time zone 'Athens, Bucharest'`,\r\n    },\r\n    middleEastStandardTime: {\r\n        id: 'Middle East Standard Time',\r\n        defaultMessage: `Beirut`,\r\n        description: `Label for the time zone 'Beirut'`,\r\n    },\r\n    egyptStandardTime: {\r\n        id: 'Egypt Standard Time',\r\n        defaultMessage: `Cairo`,\r\n        description: `Label for the time zone 'Cairo'`,\r\n    },\r\n    syriaStandardTime: {\r\n        id: 'Syria Standard Time',\r\n        defaultMessage: `Damascus`,\r\n        description: `Label for the time zone 'Damascus'`,\r\n    },\r\n    eEuropeStandardTime: {\r\n        id: 'E. Europe Standard Time',\r\n        defaultMessage: `E. Europe`,\r\n        description: `Label for the time zone 'E. Europe'`,\r\n    },\r\n    southAfricaStandardTime: {\r\n        id: 'South Africa Standard Time',\r\n        defaultMessage: `Harare, Pretoria`,\r\n        description: `Label for the time zone 'Harare, Pretoria'`,\r\n    },\r\n    fLEStandardTime: {\r\n        id: 'FLE Standard Time',\r\n        defaultMessage: `Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius`,\r\n        description: `Label for the time zone 'Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius'`,\r\n    },\r\n    israelStandardTime: {\r\n        id: 'Israel Standard Time',\r\n        defaultMessage: `Jerusalem`,\r\n        description: `Label for the time zone 'Jerusalem'`,\r\n    },\r\n    kaliningradStandardTime: {\r\n        id: 'Kaliningrad Standard Time',\r\n        defaultMessage: `Kaliningrad (RTZ 1)`,\r\n        description: `Label for the time zone 'Kaliningrad (RTZ 1)'`,\r\n    },\r\n    libyaStandardTime: {\r\n        id: 'Libya Standard Time',\r\n        defaultMessage: `Tripoli`,\r\n        description: `Label for the time zone 'Tripoli'`,\r\n    },\r\n    arabicStandardTime: {\r\n        id: 'Arabic Standard Time',\r\n        defaultMessage: `Baghdad`,\r\n        description: `Label for the time zone 'Baghdad'`,\r\n    },\r\n    turkeyStandardTime: {\r\n        id: 'Turkey Standard Time',\r\n        defaultMessage: `Istanbul`,\r\n        description: `Label for the time zone 'Istanbul'`,\r\n    },\r\n    arabStandardTime: {\r\n        id: 'Arab Standard Time',\r\n        defaultMessage: `Kuwait, Riyadh`,\r\n        description: `Label for the time zone 'Kuwait, Riyadh'`,\r\n    },\r\n    belarusStandardTime: {\r\n        id: 'Belarus Standard Time',\r\n        defaultMessage: `Minsk`,\r\n        description: `Label for the time zone 'Minsk'`,\r\n    },\r\n    russianStandardTime: {\r\n        id: 'Russian Standard Time',\r\n        defaultMessage: `Moscow, St. Petersburg, Volgograd (RTZ 2)`,\r\n        description: `Label for the time zone 'Moscow, St. Petersburg, Volgograd (RTZ 2)'`,\r\n    },\r\n    eAfricaStandardTime: {\r\n        id: 'E. Africa Standard Time',\r\n        defaultMessage: `Nairobi`,\r\n        description: `Label for the time zone 'Nairobi'`,\r\n    },\r\n    iranStandardTime: {\r\n        id: 'Iran Standard Time',\r\n        defaultMessage: `Tehran`,\r\n        description: `Label for the time zone 'Tehran'`,\r\n    },\r\n    arabianStandardTime: {\r\n        id: 'Arabian Standard Time',\r\n        defaultMessage: `Abu Dhabi, Muscat`,\r\n        description: `Label for the time zone 'Abu Dhabi, Muscat'`,\r\n    },\r\n    azerbaijanStandardTime: {\r\n        id: 'Azerbaijan Standard Time',\r\n        defaultMessage: `Baku`,\r\n        description: `Label for the time zone 'Baku'`,\r\n    },\r\n    russiaTimeZone3: {\r\n        id: 'Russia Time Zone 3',\r\n        defaultMessage: `Izhevsk, Samara (RTZ 3)`,\r\n        description: `Label for the time zone 'Izhevsk, Samara (RTZ 3)'`,\r\n    },\r\n    mauritiusStandardTime: {\r\n        id: 'Mauritius Standard Time',\r\n        defaultMessage: `Port Louis`,\r\n        description: `Label for the time zone 'Port Louis'`,\r\n    },\r\n    georgianStandardTime: {\r\n        id: 'Georgian Standard Time',\r\n        defaultMessage: `Tbilisi`,\r\n        description: `Label for the time zone 'Tbilisi'`,\r\n    },\r\n    caucasusStandardTime: {\r\n        id: 'Caucasus Standard Time',\r\n        defaultMessage: `Yerevan`,\r\n        description: `Label for the time zone 'Yerevan'`,\r\n    },\r\n    afghanistanStandardTime: {\r\n        id: 'Afghanistan Standard Time',\r\n        defaultMessage: `Kabul`,\r\n        description: `Label for the time zone 'Kabul'`,\r\n    },\r\n    westAsiaStandardTime: {\r\n        id: 'West Asia Standard Time',\r\n        defaultMessage: `Ashgabat, Tashkent`,\r\n        description: `Label for the time zone 'Ashgabat, Tashkent'`,\r\n    },\r\n    ekaterinburgStandardTime: {\r\n        id: 'Ekaterinburg Standard Time',\r\n        defaultMessage: `Ekaterinburg (RTZ 4)`,\r\n        description: `Label for the time zone 'Ekaterinburg (RTZ 4)'`,\r\n    },\r\n    pakistanStandardTime: {\r\n        id: 'Pakistan Standard Time',\r\n        defaultMessage: `Islamabad, Karachi`,\r\n        description: `Label for the time zone 'Islamabad, Karachi'`,\r\n    },\r\n    indiaStandardTime: {\r\n        id: 'India Standard Time',\r\n        defaultMessage: `Chennai, Kolkata, Mumbai, New Delhi`,\r\n        description: `Label for the time zone 'Chennai, Kolkata, Mumbai, New Delhi'`,\r\n    },\r\n    sriLankaStandardTime: {\r\n        id: 'Sri Lanka Standard Time',\r\n        defaultMessage: `Sri Jayawardenepura`,\r\n        description: `Label for the time zone 'Sri Jayawardenepura'`,\r\n    },\r\n    nepalStandardTime: {\r\n        id: 'Nepal Standard Time',\r\n        defaultMessage: `Kathmandu`,\r\n        description: `Label for the time zone 'Kathmandu'`,\r\n    },\r\n    centralAsiaStandardTime: {\r\n        id: 'Central Asia Standard Time',\r\n        defaultMessage: `Astana`,\r\n        description: `Label for the time zone 'Astana'`,\r\n    },\r\n    bangladeshStandardTime: {\r\n        id: 'Bangladesh Standard Time',\r\n        defaultMessage: `Dhaka`,\r\n        description: `Label for the time zone 'Dhaka'`,\r\n    },\r\n    nCentralAsiaStandardTime: {\r\n        id: 'N. Central Asia Standard Time',\r\n        defaultMessage: `Novosibirsk (RTZ 5)`,\r\n        description: `Label for the time zone 'Novosibirsk (RTZ 5)'`,\r\n    },\r\n    myanmarStandardTime: {\r\n        id: 'Myanmar Standard Time',\r\n        defaultMessage: `Yangon (Rangoon)`,\r\n        description: `Label for the time zone 'Yangon (Rangoon)'`,\r\n    },\r\n    sEAsiaStandardTime: {\r\n        id: 'SE Asia Standard Time',\r\n        defaultMessage: `Bangkok, Hanoi, Jakarta`,\r\n        description: `Label for the time zone 'Bangkok, Hanoi, Jakarta'`,\r\n    },\r\n    northAsiaStandardTime: {\r\n        id: 'North Asia Standard Time',\r\n        defaultMessage: `Krasnoyarsk (RTZ 6)`,\r\n        description: `Label for the time zone 'Krasnoyarsk (RTZ 6)'`,\r\n    },\r\n    chinaStandardTime: {\r\n        id: 'China Standard Time',\r\n        defaultMessage: `Beijing, Chongqing, Hong Kong, Urumqi`,\r\n        description: `Label for the time zone 'Beijing, Chongqing, Hong Kong, Urumqi'`,\r\n    },\r\n    northAsiaEastStandardTime: {\r\n        id: 'North Asia East Standard Time',\r\n        defaultMessage: `Irkutsk (RTZ 7)`,\r\n        description: `Label for the time zone 'Irkutsk (RTZ 7)'`,\r\n    },\r\n    singaporeStandardTime: {\r\n        id: 'Singapore Standard Time',\r\n        defaultMessage: `Kuala Lumpur, Singapore`,\r\n        description: `Label for the time zone 'Kuala Lumpur, Singapore'`,\r\n    },\r\n    wAustraliaStandardTime: {\r\n        id: 'W. Australia Standard Time',\r\n        defaultMessage: `Perth`,\r\n        description: `Label for the time zone 'Perth'`,\r\n    },\r\n    taipeiStandardTime: {\r\n        id: 'Taipei Standard Time',\r\n        defaultMessage: `Taipei`,\r\n        description: `Label for the time zone 'Taipei'`,\r\n    },\r\n    ulaanbaatarStandardTime: {\r\n        id: 'Ulaanbaatar Standard Time',\r\n        defaultMessage: `Ulaanbaatar`,\r\n        description: `Label for the time zone 'Ulaanbaatar'`,\r\n    },\r\n    tokyoStandardTime: {\r\n        id: 'Tokyo Standard Time',\r\n        defaultMessage: `Osaka, Sapporo, Tokyo`,\r\n        description: `Label for the time zone 'Osaka, Sapporo, Tokyo'`,\r\n    },\r\n    koreaStandardTime: {\r\n        id: 'Korea Standard Time',\r\n        defaultMessage: `Seoul`,\r\n        description: `Label for the time zone 'Seoul'`,\r\n    },\r\n    yakutskStandardTime: {\r\n        id: 'Yakutsk Standard Time',\r\n        defaultMessage: `Yakutsk (RTZ 8)`,\r\n        description: `Label for the time zone 'Yakutsk (RTZ 8)'`,\r\n    },\r\n    cenAustraliaStandardTime: {\r\n        id: 'Cen. Australia Standard Time',\r\n        defaultMessage: `Adelaide`,\r\n        description: `Label for the time zone 'Adelaide'`,\r\n    },\r\n    aUSCentralStandardTime: {\r\n        id: 'AUS Central Standard Time',\r\n        defaultMessage: `Darwin`,\r\n        description: `Label for the time zone 'Darwin'`,\r\n    },\r\n    eAustraliaStandardTime: {\r\n        id: 'E. Australia Standard Time',\r\n        defaultMessage: `Brisbane`,\r\n        description: `Label for the time zone 'Brisbane'`,\r\n    },\r\n    aUSEasternStandardTime: {\r\n        id: 'AUS Eastern Standard Time',\r\n        defaultMessage: `Canberra, Melbourne, Sydney`,\r\n        description: `Label for the time zone 'Canberra, Melbourne, Sydney'`,\r\n    },\r\n    westPacificStandardTime: {\r\n        id: 'West Pacific Standard Time',\r\n        defaultMessage: `Guam, Port Moresby`,\r\n        description: `Label for the time zone 'Guam, Port Moresby'`,\r\n    },\r\n    tasmaniaStandardTime: {\r\n        id: 'Tasmania Standard Time',\r\n        defaultMessage: `Hobart`,\r\n        description: `Label for the time zone 'Hobart'`,\r\n    },\r\n    magadanStandardTime: {\r\n        id: 'Magadan Standard Time',\r\n        defaultMessage: `Magadan`,\r\n        description: `Label for the time zone 'Magadan'`,\r\n    },\r\n    vladivostokStandardTime: {\r\n        id: 'Vladivostok Standard Time',\r\n        defaultMessage: `Vladivostok, Magadan (RTZ 9)`,\r\n        description: `Label for the time zone 'Vladivostok, Magadan (RTZ 9)'`,\r\n    },\r\n    russiaTimeZone10: {\r\n        id: 'Russia Time Zone 10',\r\n        defaultMessage: `Chokurdakh (RTZ 10)`,\r\n        description: `Label for the time zone 'Chokurdakh (RTZ 10)'`,\r\n    },\r\n    centralPacificStandardTime: {\r\n        id: 'Central Pacific Standard Time',\r\n        defaultMessage: `Solomon Is., New Caledonia`,\r\n        description: `Label for the time zone 'Solomon Is., New Caledonia'`,\r\n    },\r\n    russiaTimeZone11: {\r\n        id: 'Russia Time Zone 11',\r\n        defaultMessage: `Anadyr, Petropavlovsk-Kamchatsky (RTZ 11)`,\r\n        description: `Label for the time zone 'Anadyr, Petropavlovsk-Kamchatsky (RTZ 11)'`,\r\n    },\r\n    newZealandStandardTime: {\r\n        id: 'New Zealand Standard Time',\r\n        defaultMessage: `Auckland, Wellington`,\r\n        description: `Label for the time zone 'Auckland, Wellington'`,\r\n    },\r\n    uTC12: {\r\n        id: 'UTC+12',\r\n        defaultMessage: `Coordinated Universal Time+12`,\r\n        description: `Label for the time zone 'Coordinated Universal Time+12'`,\r\n    },\r\n    fijiStandardTime: {\r\n        id: 'Fiji Standard Time',\r\n        defaultMessage: `Fiji`,\r\n        description: `Label for the time zone 'Fiji'`,\r\n    },\r\n    tongaStandardTime: {\r\n        id: 'Tonga Standard Time',\r\n        defaultMessage: `Nuku'alofa`,\r\n        description: `Label for the time zone 'Nuku'alofa'`,\r\n    },\r\n    samoaStandardTime: {\r\n        id: 'Samoa Standard Time',\r\n        defaultMessage: `Samoa`,\r\n        description: `Label for the time zone 'Samoa'`,\r\n    },\r\n    lineIslandsStandardTime: {\r\n        id: 'Line Islands Standard Time',\r\n        defaultMessage: `Kiritimati Island`,\r\n        description: `Label for the time zone 'Kiritimati Island'`,\r\n    },\r\n});\r\nexport default timezoneMessages;\r\n","import { DayOfWeek } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\nimport 'moment/min/locales';\r\nimport { defineMessages } from 'react-intl';\r\nimport { ManagedLabsModels } from '@azure-lab-services/ml-ts';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { timezoneMessages } from './timezone-messages';\r\nconst messages = defineMessages({\r\n    goToTodayCalendarLabel: {\r\n        id: 'GoToTodayCalendarLabel',\r\n        defaultMessage: 'Go to today',\r\n        description: 'Text for a button in the date picker that brings user back to todays date',\r\n    },\r\n    goToPreviousMonthCalendarLabel: {\r\n        id: 'GoToPreviousMonthCalendarLabel',\r\n        defaultMessage: 'Go to previous month',\r\n        description: 'Text for a button in the date picker that selects previous month.',\r\n    },\r\n    goToNextMonthCalendarLabel: {\r\n        id: 'GoToNextMonthCalendarLabel',\r\n        defaultMessage: 'Go to next month',\r\n        description: 'Text for a button in the date picker that selects next month.',\r\n    },\r\n    goToPreviousYearCalendarLabel: {\r\n        id: 'GoToPreviousYearCalendarLabel',\r\n        defaultMessage: 'Go to previous year',\r\n        description: 'Text for a button in the date picker that selects previous year.',\r\n    },\r\n    goToNextYearCalendarLabel: {\r\n        id: 'GoToNextYearCalendarLabel',\r\n        defaultMessage: 'Go to next year',\r\n        description: 'Text for a button in the date picker that selects next year.',\r\n    },\r\n    closeDatePickerLabel: {\r\n        id: 'CloseDatePickerLabel',\r\n        defaultMessage: 'Close date picker',\r\n        description: 'Text for a button in the date picker that closes the control.',\r\n    },\r\n    dateOutOfBoundsMessage: {\r\n        id: 'DateOutOfBoundsMessage',\r\n        defaultMessage: 'The selected date is invalid. Start dates must not be after end dates.',\r\n        description: 'Error message for when date is not within a valid range.',\r\n    },\r\n    dateRequiredMessage: {\r\n        id: 'DateRequiredMessage',\r\n        defaultMessage: 'Please select a date.',\r\n        description: 'Validation message for the date picker indicating it is required.',\r\n    },\r\n    dateInvalidMessage: {\r\n        id: 'DateInvalidMessage',\r\n        defaultMessage: 'Please enter a valid date.',\r\n        description: 'Validation message for when a string entered into the data picker control is not a valid date.',\r\n    },\r\n});\r\nfunction getTimeDropdownOption(locale, timestamp) {\r\n    const time = moment(timestamp).locale(locale).format('LT');\r\n    const key = moment(timestamp).format('HHmm');\r\n    return { key, text: time };\r\n}\r\nfunction getTimes(locale) {\r\n    const times = [];\r\n    let timestamp = new Date().setHours(0, 0, 0, 0);\r\n    const dropdownOption = getTimeDropdownOption(locale, timestamp);\r\n    times.push(dropdownOption);\r\n    const thirtyMinutes = 30 * 60 * 1000;\r\n    for (let i = 0; i < 47; i++) {\r\n        timestamp += thirtyMinutes;\r\n        const dropdownOption = getTimeDropdownOption(locale, timestamp);\r\n        times.push(dropdownOption);\r\n    }\r\n    return times;\r\n}\r\nfunction getMonths(locale, format) {\r\n    const months = [];\r\n    for (let i = 0; i < 12; i++) {\r\n        const month = moment().locale(locale).month(i).format(format);\r\n        months.push(month);\r\n    }\r\n    return months;\r\n}\r\nfunction getDays(locale, format) {\r\n    const days = [];\r\n    for (let i = 0; i < 7; i++) {\r\n        const day = moment().locale(locale).day(i).format(format);\r\n        days.push(day);\r\n    }\r\n    return days;\r\n}\r\nfunction getFirstDayOfWeek(locale) {\r\n    return moment.localeData(locale).firstDayOfWeek();\r\n}\r\nfunction getFirstDayForPicker(locale) {\r\n    const firstDay = getFirstDayOfWeek(locale);\r\n    switch (firstDay) {\r\n        case 0:\r\n            return DayOfWeek.Sunday;\r\n        case 1:\r\n            return DayOfWeek.Monday;\r\n        case 2:\r\n            return DayOfWeek.Tuesday;\r\n        case 3:\r\n            return DayOfWeek.Wednesday;\r\n        case 4:\r\n            return DayOfWeek.Thursday;\r\n        case 5:\r\n            return DayOfWeek.Friday;\r\n        case 6:\r\n            return DayOfWeek.Saturday;\r\n        default:\r\n            return DayOfWeek.Sunday;\r\n    }\r\n}\r\nexport function getBrowserOffset() {\r\n    const date = new Date();\r\n    const offset = date.getTimezoneOffset() / 60;\r\n    return offset;\r\n}\r\nfunction getRandomScheduleName() {\r\n    const randomSubstring = Math.random().toString(36).substr(2, 5);\r\n    return `default_${randomSubstring}`;\r\n}\r\nfunction getDropdownTimezones(intl) {\r\n    return Object.keys(timezoneMessages).map((key) => {\r\n        const timezoneMessage = timezoneMessages[key];\r\n        return {\r\n            key: timezoneMessage.id,\r\n            text: intl.formatMessage(timezoneMessage),\r\n        };\r\n    });\r\n}\r\n/**\r\n *  List of Windows timezones for dropdown.  The key is the english version of the\r\n *  Windows timezone that will be sent to the server and the text is the localized version of the timezone.\r\n */\r\nexport const dropdownTimezones = (intl) => getDropdownTimezones(intl);\r\n/**\r\n *  List of times from 12:00am to 11:45pm in 15 minute increments, for time picker dropdown.\r\n *  The keys are military time en, the values are locale aware.\r\n */\r\nexport const dropdownTimes = (locale) => getTimes(locale);\r\n/**\r\n *  List of days formatted like ['Su', 'Mo', etc.]\r\n *  Locale aware but first day starts at Sunday\r\n *  [todo] Extract locale from redux store\r\n */\r\nexport const daysShort = (locale) => getDays(locale, 'dd');\r\n/**\r\n *  List of days formatted like ['S', 'M', etc.]\r\n *  Locale aware and first day starts at locale's first day.\r\n *  [todo] Extract locale from redux store\r\n */\r\nexport const daysShortLocaleAware = (locale) => {\r\n    const days = [];\r\n    const firstDay = getFirstDayOfWeek(locale);\r\n    for (let i = 0; i < 7; i++) {\r\n        const i_locale = (firstDay + i) % 7;\r\n        const text = moment().locale(locale).day(i_locale).format('dd');\r\n        const longText = moment().locale(locale).day(i_locale).format('dddd');\r\n        const value = moment().day(i_locale).format('dddd');\r\n        days.push({ text, longText, value });\r\n    }\r\n    return days;\r\n};\r\n/**\r\n *  Localized strings for the day picker\r\n */\r\nexport const dayPickerStrings = (locale, intl) => {\r\n    return {\r\n        months: getMonths(locale, 'MMMM'),\r\n        shortMonths: getMonths(locale, 'MMM'),\r\n        days: getDays(locale, 'dddd'),\r\n        shortDays: daysShort(locale),\r\n        goToToday: intl.formatMessage(messages.goToTodayCalendarLabel),\r\n        prevMonthAriaLabel: intl.formatMessage(messages.goToPreviousMonthCalendarLabel),\r\n        nextMonthAriaLabel: intl.formatMessage(messages.goToNextMonthCalendarLabel),\r\n        prevYearAriaLabel: intl.formatMessage(messages.goToPreviousYearCalendarLabel),\r\n        nextYearAriaLabel: intl.formatMessage(messages.goToNextYearCalendarLabel),\r\n        closeButtonAriaLabel: intl.formatMessage(messages.closeDatePickerLabel),\r\n        isRequiredErrorMessage: intl.formatMessage(messages.dateRequiredMessage),\r\n        invalidInputErrorMessage: intl.formatMessage(messages.dateInvalidMessage),\r\n        isOutOfBoundsErrorMessage: intl.formatMessage(messages.dateOutOfBoundsMessage),\r\n    };\r\n};\r\nexport function sortDays(locale, a, b) {\r\n    const firstDay = getFirstDayOfWeek(locale);\r\n    const _a = (moment().day(a).isoWeekday() - firstDay + 7) % 7;\r\n    const _b = (moment().day(b).isoWeekday() - firstDay + 7) % 7;\r\n    return _a - _b;\r\n}\r\nexport function mapDayToLocaleDay(locale, day) {\r\n    const translate = (dayNumber) => moment().locale(locale).day(dayNumber).format('dddd');\r\n    switch (day.toLowerCase()) {\r\n        case 'sunday':\r\n            return translate(0);\r\n        case 'monday':\r\n            return translate(1);\r\n        case 'tuesday':\r\n            return translate(2);\r\n        case 'wednesday':\r\n            return translate(3);\r\n        case 'thursday':\r\n            return translate(4);\r\n        case 'friday':\r\n            return translate(5);\r\n        case 'saturday':\r\n            return translate(6);\r\n        default:\r\n            return translate(0);\r\n    }\r\n}\r\nexport function mapDayToLocaleDayShort(locale, day) {\r\n    const translate = (dayNumber) => moment().locale(locale).day(dayNumber).format('ddd');\r\n    switch (day.toLowerCase()) {\r\n        case 'sunday':\r\n            return translate(0);\r\n        case 'monday':\r\n            return translate(1);\r\n        case 'tuesday':\r\n            return translate(2);\r\n        case 'wednesday':\r\n            return translate(3);\r\n        case 'thursday':\r\n            return translate(4);\r\n        case 'friday':\r\n            return translate(5);\r\n        case 'saturday':\r\n            return translate(6);\r\n        default:\r\n            return translate(0);\r\n    }\r\n}\r\n/**\r\n *  Format date function for date picker.\r\n *  Locale aware\r\n */\r\nexport function onFormatDate(locale, date) {\r\n    return moment(date).locale(locale).format('ll');\r\n}\r\n/**\r\n *  Get first day of week.\r\n *  Locale aware\r\n *  [todo] Extract locale from redux store\r\n */\r\nexport const firstDayOfWeek = (locale) => getFirstDayOfWeek(locale);\r\n/**\r\n *  Get first day of week for date picker.\r\n *  Locale aware\r\n *  [todo] Extract locale from redux store\r\n */\r\nexport const firstDayOfWeekForPicker = (locale) => getFirstDayForPicker(locale);\r\nexport function getDropdownKeyFromDate(date) {\r\n    const hours = date.getHours();\r\n    const minutes = date.getMinutes();\r\n    const _hours = _.padStart(String(hours), 2, '0');\r\n    const _minutes = _.padStart(String(minutes), 2, '0');\r\n    return `${_hours}${_minutes}`;\r\n}\r\nexport const estimatedClassLength = 2;\r\nexport function getDefaultSchedule(timezone) {\r\n    const defaultStartHour = 8;\r\n    const start = new Date();\r\n    start.setHours(defaultStartHour, 0, 0, 0);\r\n    const end = new Date(start);\r\n    end.setHours(defaultStartHour + estimatedClassLength, 0);\r\n    const defaultSchedule = {\r\n        start,\r\n        end,\r\n        startAction: {\r\n            enableState: ManagedLabsModels.EnableState.Enabled,\r\n            actionType: ManagedLabsModels.ScheduleActionType.Start,\r\n        },\r\n        endAction: {\r\n            enableState: ManagedLabsModels.EnableState.Enabled,\r\n            actionType: ManagedLabsModels.ScheduleActionType.Stop,\r\n        },\r\n        timeZoneId: timezone,\r\n        name: getRandomScheduleName(),\r\n    };\r\n    return defaultSchedule;\r\n}\r\nexport function getDefaultVNextSchedule(timezone) {\r\n    const defaultStartHour = 8;\r\n    const startAt = new Date();\r\n    startAt.setHours(defaultStartHour, 0, 0, 0);\r\n    const stopAt = new Date(startAt);\r\n    stopAt.setHours(defaultStartHour + estimatedClassLength, 0);\r\n    const defaultSchedule = {\r\n        startAt,\r\n        stopAt,\r\n        timeZoneId: timezone,\r\n        name: getRandomScheduleName(),\r\n    };\r\n    return defaultSchedule;\r\n}\r\nexport function getDefaultWeeklySchedule(timezone) {\r\n    const schedule = getDefaultSchedule(timezone);\r\n    const day = moment().day(new Date().getDay()).format('dddd');\r\n    const semesterLengthGuess = 4;\r\n    const until = new Date(schedule.end);\r\n    until.setMonth(schedule.start.getMonth() + semesterLengthGuess);\r\n    schedule.recurrencePattern = {\r\n        frequency: ManagedLabsModels.RecurrenceFrequency.Weekly,\r\n        weekDays: [day],\r\n        interval: 1,\r\n        until,\r\n    };\r\n    return schedule;\r\n}\r\nexport function getDefaultVNextWeeklySchedule(timezone) {\r\n    const schedule = getDefaultVNextSchedule(timezone);\r\n    const day = moment().day(new Date().getDay()).format('dddd');\r\n    const semesterLengthGuess = 4;\r\n    const expirationDate = new Date(schedule.stopAt);\r\n    expirationDate.setMonth(schedule.startAt.getMonth() + semesterLengthGuess);\r\n    schedule.recurrencePattern = {\r\n        frequency: LabServicesModels.RecurrenceFrequency.Weekly,\r\n        weekDays: [day],\r\n        interval: 1,\r\n        expirationDate,\r\n    };\r\n    return schedule;\r\n}\r\n/**\r\n *  Adjust schedule dates to be sent to server as server stores times in local time, without browser offset.\r\n */\r\nexport function adjustDatesForSchedule(browserOffset, schedule) {\r\n    const adjustedSchedule = _.cloneDeep(schedule);\r\n    // get just the hours portion of the offset, throwing away the decimal and preserving negative sign\r\n    const hoursOffset = Math.trunc(browserOffset);\r\n    // get the minutes portion of the offset => .5 = 30, preserving the negative sign\r\n    const minutesOffset = 60 * (browserOffset % 1);\r\n    // adjust local start time based on browser offset so the server will save in local time correctly\r\n    const adjustedStartHours = schedule.start.getHours() - hoursOffset;\r\n    const adjustedStartMinutes = schedule.start.getMinutes() - minutesOffset;\r\n    adjustedSchedule.start.setHours(adjustedStartHours, adjustedStartMinutes);\r\n    // adjust local end time based on browser offset so the server will save in local time correctly\r\n    const adjustedEndHours = schedule.end.getHours() - hoursOffset;\r\n    const adjustedEndMinutes = schedule.end.getMinutes() - minutesOffset;\r\n    adjustedSchedule.end.setHours(adjustedEndHours, adjustedEndMinutes);\r\n    if (adjustedSchedule.recurrencePattern && adjustedSchedule.recurrencePattern.until) {\r\n        // adjust local recurrence end time based on browser offset so the server will save in local time correctly\r\n        const adjustedUntilHours = adjustedSchedule.recurrencePattern.until.getHours() - hoursOffset;\r\n        const adjustedUntilMinutes = adjustedSchedule.recurrencePattern.until.getMinutes() - minutesOffset;\r\n        adjustedSchedule.recurrencePattern.until.setHours(adjustedUntilHours, adjustedUntilMinutes);\r\n    }\r\n    return adjustedSchedule;\r\n}\r\n/**\r\n *  Adjust schedule dates to be sent to server as server stores times in local time, without browser offset.\r\n */\r\nexport function adjustDatesForVNextSchedule(browserOffset, schedule) {\r\n    const adjustedSchedule = _.cloneDeep(schedule);\r\n    // get just the hours portion of the offset, throwing away the decimal and preserving negative sign\r\n    const hoursOffset = Math.trunc(browserOffset);\r\n    // get the minutes portion of the offset => .5 = 30, preserving the negative sign\r\n    const minutesOffset = 60 * (browserOffset % 1);\r\n    // adjust local start time based on browser offset so the server will save in local time correctly\r\n    if (schedule.startAt) {\r\n        const adjustedStartHours = schedule.startAt.getHours() - hoursOffset;\r\n        const adjustedStartMinutes = schedule.startAt.getMinutes() - minutesOffset;\r\n        adjustedSchedule.startAt.setHours(adjustedStartHours, adjustedStartMinutes);\r\n    }\r\n    // adjust local end time based on browser offset so the server will save in local time correctly\r\n    const adjustedEndHours = schedule.stopAt.getHours() - hoursOffset;\r\n    const adjustedEndMinutes = schedule.stopAt.getMinutes() - minutesOffset;\r\n    adjustedSchedule.stopAt.setHours(adjustedEndHours, adjustedEndMinutes);\r\n    if (adjustedSchedule.recurrencePattern && adjustedSchedule.recurrencePattern.expirationDate) {\r\n        // adjust local recurrence end time based on browser offset so the server will save in local time correctly\r\n        const adjustedUntilHours = adjustedSchedule.recurrencePattern.expirationDate.getHours() - hoursOffset;\r\n        const adjustedUntilMinutes = adjustedSchedule.recurrencePattern.expirationDate.getMinutes() - minutesOffset;\r\n        adjustedSchedule.recurrencePattern.expirationDate.setHours(adjustedUntilHours, adjustedUntilMinutes);\r\n    }\r\n    return adjustedSchedule;\r\n}\r\nconst FlyoutUtilities = {\r\n    estimatedClassLength,\r\n    dropdownTimezones,\r\n    dropdownTimes,\r\n    daysShort,\r\n    daysShortLocaleAware,\r\n    dayPickerStrings,\r\n    onFormatDate,\r\n    firstDayOfWeek,\r\n    firstDayOfWeekForPicker,\r\n    getDefaultSchedule,\r\n    getDefaultVNextSchedule,\r\n    getDefaultWeeklySchedule,\r\n    getDefaultVNextWeeklySchedule,\r\n    adjustDatesForSchedule,\r\n    adjustDatesForVNextSchedule,\r\n    sortDays,\r\n    mapDayToLocaleDay,\r\n    mapDayToLocaleDayShort,\r\n    getBrowserOffset,\r\n};\r\nexport default FlyoutUtilities;\r\n","import { Map } from 'immutable';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport memoize from 'memoize-one';\r\nimport { addToListMap } from '../../../utils/common';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nexport const getVNextVirtualMachines = memoize((store) => {\r\n    return store.get('vNextVirtualMachineStore').get('virtualMachines');\r\n});\r\nexport const getTemplateVM = memoize((store) => {\r\n    const virtualMachines = getVNextVirtualMachines(store);\r\n    return virtualMachines.find((o) => o.vmType === LabServicesModels.VirtualMachineType.Template);\r\n});\r\nexport const getUserVMs = memoize((store) => {\r\n    const virtualMachines = getVNextVirtualMachines(store);\r\n    return virtualMachines.filter((o) => o.vmType === LabServicesModels.VirtualMachineType.User);\r\n});\r\nexport const getStartErrors = memoize((store) => {\r\n    const vNextVirtualMachineStore = store.get('vNextVirtualMachineStore');\r\n    const startErrors = vNextVirtualMachineStore.get('startErrors');\r\n    return startErrors;\r\n});\r\nexport const getStopErrors = memoize((store) => {\r\n    const vNextVirtualMachineStore = store.get('vNextVirtualMachineStore');\r\n    const stopErrors = vNextVirtualMachineStore.get('stopErrors');\r\n    return stopErrors;\r\n});\r\nexport const getResetErrors = memoize((store) => {\r\n    const vNextVirtualMachineStore = store.get('vNextVirtualMachineStore');\r\n    const resetErrors = vNextVirtualMachineStore.get('resetErrors');\r\n    return resetErrors;\r\n});\r\nexport const getResetPasswordError = memoize((store) => {\r\n    const vNextVirtualMachineStore = store.get('vNextVirtualMachineStore');\r\n    const resetPasswordError = vNextVirtualMachineStore.get('resetPasswordError');\r\n    return resetPasswordError;\r\n});\r\nexport const getRedeployErrors = memoize((store) => {\r\n    const vNextVirtualMachineStore = store.get('vNextVirtualMachineStore');\r\n    const redeployErrors = vNextVirtualMachineStore.get('redeployErrors');\r\n    return redeployErrors;\r\n});\r\nexport const getTemplateErrors = memoize((store) => {\r\n    let errors = Map();\r\n    const templateVM = getTemplateVM(store);\r\n    if (!templateVM) {\r\n        return errors;\r\n    }\r\n    else {\r\n        const startErrors = getStartErrors(store);\r\n        const templateStartError = !!templateVM\r\n            ? startErrors.find((o) => caseInsensitiveCultureInvariantCompare(o.id, templateVM.id) === 0)\r\n            : undefined;\r\n        const stopErrors = getStopErrors(store);\r\n        const templateStopError = !!templateVM\r\n            ? stopErrors.find((o) => caseInsensitiveCultureInvariantCompare(o.id, templateVM.id) === 0)\r\n            : undefined;\r\n        const resetPasswordError = getResetPasswordError(store);\r\n        const saveImageError = getSaveImageError(store);\r\n        const resetErrors = getResetErrors(store);\r\n        const resetTemplateError = !!templateVM\r\n            ? resetErrors.find((o) => caseInsensitiveCultureInvariantCompare(o.id, templateVM.id) === 0)\r\n            : undefined;\r\n        const redeployErrors = getRedeployErrors(store);\r\n        const templateRedeployError = !!templateVM\r\n            ? redeployErrors.find((o) => caseInsensitiveCultureInvariantCompare(o.id, templateVM.id) === 0)\r\n            : undefined;\r\n        if (!!templateStartError) {\r\n            errors = addToListMap(errors, templateStartError, templateStartError.id);\r\n        }\r\n        if (!!templateStopError) {\r\n            errors = addToListMap(errors, templateStopError, templateStopError.id);\r\n        }\r\n        if (!!resetPasswordError) {\r\n            errors = addToListMap(errors, resetPasswordError, resetPasswordError.id);\r\n        }\r\n        if (!!saveImageError) {\r\n            errors = addToListMap(errors, saveImageError, saveImageError.id);\r\n        }\r\n        if (!!templateRedeployError) {\r\n            errors = addToListMap(errors, templateRedeployError, templateRedeployError.id);\r\n        }\r\n        if (!!resetTemplateError) {\r\n            errors = addToListMap(errors, resetTemplateError, resetTemplateError.id);\r\n        }\r\n        return errors;\r\n    }\r\n});\r\nexport const getUserVMStartErrors = memoize((store) => {\r\n    const startErrors = getStartErrors(store);\r\n    const templateVM = getTemplateVM(store);\r\n    if (!templateVM) {\r\n        return startErrors;\r\n    }\r\n    else {\r\n        return startErrors.filter((error, id) => caseInsensitiveCultureInvariantCompare(id, templateVM.id) !== 0);\r\n    }\r\n});\r\nexport const getUserVMStopErrors = memoize((store) => {\r\n    const stopErrors = getStopErrors(store);\r\n    const templateVM = getTemplateVM(store);\r\n    if (!templateVM) {\r\n        return stopErrors;\r\n    }\r\n    else {\r\n        return stopErrors.filter((error, id) => caseInsensitiveCultureInvariantCompare(id, templateVM.id) !== 0);\r\n    }\r\n});\r\nexport const getSaveImageError = memoize((store) => {\r\n    const vNextVirtualMachineStore = store.get('vNextVirtualMachineStore');\r\n    const saveImageError = vNextVirtualMachineStore.get('saveImageError');\r\n    return saveImageError;\r\n});\r\nexport const getUserVMRedeployErrors = memoize((store) => {\r\n    const redeployErrors = getRedeployErrors(store);\r\n    const templateVM = getTemplateVM(store);\r\n    if (!templateVM) {\r\n        return redeployErrors;\r\n    }\r\n    else {\r\n        return redeployErrors.filter((error, id) => caseInsensitiveCultureInvariantCompare(id, templateVM.id) !== 0);\r\n    }\r\n});\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport moment from 'moment';\r\nimport memoize from 'memoize-one';\r\nimport { VmState, VmAssignmentType } from '../data/models/environment-common';\r\nimport { getConnectionTypes, getVNextConnectionTypes } from '../common/selectors/vm-connect';\r\nimport { getCurrentLab, isLabGroupSynced, isCurrentLabReadOnly, isLabConnectedLmsOrTeams, isLabAssistantRole, } from '../redux/selectors/lab-selectors';\r\nimport { getCores, getCurrentTemplate, getIsGpu, getTemplates } from '../redux/selectors/template-selectors';\r\nimport { getTenantId } from '../redux/selectors/identity-selector';\r\nimport { getGroupName, isLoadingGroupName } from '../redux/selectors/group-selectors';\r\nimport { getIanaTimezone, getLocale, isBastionFeatureEnabled, isTeamsOrLmsMode, storeHasLoadError, storeIsLoading, } from '../redux/selectors/common-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { DefaultMaxCapacity } from '../utils/constants';\r\nimport { determineVCurrentQuotaStatus, getCoreLimits } from '../redux/selectors/core-limit-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { getUserVMRedeployErrors, getUserVMs, getUserVMStartErrors, getUserVMStopErrors, } from '../redux/selectors/vnext/virtual-machine-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nimport { isCurrentLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { getCurrentLabUpdateError, getVNextLabGroupName, isLoadingLabMetadata, isVNextLabDraft, shouldDisableCurrentLabUpdate, } from '../redux/selectors/vnext/lab-selectors';\r\nimport { getCurrentLabCoreUsageInfo, getVNextUsageLoadState } from '../redux/selectors/vnext/usage-selectors';\r\nimport { getCurrentLabSkuInfo, getVNextSkuLoadState } from '../redux/selectors/vnext/sku-selectors';\r\nexport function getVmDetails(env, gettingEnvironments, users, template) {\r\n    const { id, name, vmState: currentVmState, pendingVmState, networkInterface } = env;\r\n    const vmState = pendingVmState !== VmState.None ? pendingVmState : currentVmState;\r\n    const vmAssignmentType = !name ? VmAssignmentType.Unassigned : VmAssignmentType.Assigned;\r\n    const isExpanding = gettingEnvironments.contains(env.id);\r\n    const userForEnvironment = vmAssignmentType === VmAssignmentType.Assigned\r\n        ? users.find((user) => !!user.name &&\r\n            !!env.claimedByUserPrincipalId &&\r\n            user.name.toLowerCase() === env.claimedByUserPrincipalId.toLowerCase())\r\n        : undefined;\r\n    const currentUsage = !!userForEnvironment && !!userForEnvironment.totalUsage ? userForEnvironment.totalUsage.asHours() : 0;\r\n    let canStart = false;\r\n    let canStop = false;\r\n    let canReset = false;\r\n    let canConnect = false;\r\n    switch (vmState) {\r\n        case VmState.Starting:\r\n        case VmState.Stopping:\r\n            canReset = true;\r\n            break;\r\n        case VmState.Running:\r\n            canStop = true;\r\n            canReset = true;\r\n            canConnect = true;\r\n            break;\r\n        case VmState.Stopped:\r\n            canStart = true;\r\n            canReset = true;\r\n            break;\r\n        default:\r\n            break;\r\n    }\r\n    // TODO: Remove the extra isWindows and isLinuxEnabled checks once connection info is cached\r\n    const { rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl } = networkInterface || {};\r\n    const isWindows = template ? template.resourceSettings.osType === Ml.OsType.Windows : undefined;\r\n    const isLinuxRdpEnabled = template\r\n        ? template.resourceSettings.linuxRdpEnabled === Ml.EnableState.Enabled\r\n        : undefined;\r\n    const connectionTypes = getConnectionTypes(rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl, isWindows, isLinuxRdpEnabled);\r\n    const privateIpAddress = env.networkInterface && env.networkInterface.privateIpAddress;\r\n    const details = {\r\n        key: id,\r\n        id,\r\n        vmState,\r\n        vmAssignmentType,\r\n        assignedTo: name || '',\r\n        currentUsage,\r\n        canStart,\r\n        canStop,\r\n        canReset,\r\n        canConnect,\r\n        isExpanding,\r\n        sshAuthority,\r\n        sshInBrowserUrl,\r\n        rdpAuthority,\r\n        rdpInBrowserUrl,\r\n        connectionTypes,\r\n        username: networkInterface ? networkInterface.username : undefined,\r\n        privateIpAddress,\r\n        errorCode: networkInterface ? networkInterface.errorCode : undefined,\r\n    };\r\n    return details;\r\n}\r\nexport const convertVmDetails = memoize((environments, gettingEnvironments, users, template) => {\r\n    return environments.map((env) => getVmDetails(env, gettingEnvironments, users, template));\r\n});\r\nexport function convertVNextVirtualMachineStateToVmState(virutalMachineState, provisioningState) {\r\n    switch (virutalMachineState) {\r\n        case LabServicesModels.VirtualMachineState.ResettingPassword:\r\n            return VmState.ResettingPassword;\r\n        case LabServicesModels.VirtualMachineState.Running:\r\n            return VmState.Running;\r\n        case LabServicesModels.VirtualMachineState.Starting:\r\n            return VmState.Starting;\r\n        case LabServicesModels.VirtualMachineState.Stopping:\r\n            return VmState.Stopping;\r\n        case LabServicesModels.VirtualMachineState.Reimaging:\r\n            return VmState.Reimaging;\r\n        case LabServicesModels.VirtualMachineState.Redeploying:\r\n            return VmState.Redeploying;\r\n        default: {\r\n            switch (provisioningState) {\r\n                case LabServicesModels.ProvisioningState.Creating:\r\n                    return VmState.Creating;\r\n                case LabServicesModels.ProvisioningState.Deleting:\r\n                    return VmState.Deleting;\r\n                case LabServicesModels.ProvisioningState.Failed:\r\n                    return VmState.Failed;\r\n                default:\r\n                    return !virutalMachineState ? VmState.Unknown : VmState.Stopped;\r\n            }\r\n        }\r\n    }\r\n}\r\nexport function getVNextVmDetails(virtualMachine, gettingVirtualMachines, users) {\r\n    const { id, state: currentVmState, pendingVmState, connectionProfile, claimedByUserId, provisioningState, isUpdatePending, resourceOperationError, } = virtualMachine;\r\n    const vmProvisioningState = isUpdatePending ? LabServicesModels.ProvisioningState.Updating : provisioningState;\r\n    const vmState = pendingVmState !== VmState.None\r\n        ? pendingVmState\r\n        : convertVNextVirtualMachineStateToVmState(currentVmState, provisioningState);\r\n    const vmAssignmentType = !claimedByUserId ? VmAssignmentType.Unassigned : VmAssignmentType.Assigned;\r\n    const isExpanding = gettingVirtualMachines.contains(virtualMachine.id);\r\n    const user = vmAssignmentType === VmAssignmentType.Assigned\r\n        ? users.find((o) => !!o.id && caseInsensitiveCultureInvariantCompare(claimedByUserId, o.id) === 0)\r\n        : undefined;\r\n    const currentUsage = !!user && !!user.totalUsage ? moment.duration(user.totalUsage).asHours() : 0;\r\n    let canStart = false;\r\n    let canStop = false;\r\n    let canReset = false;\r\n    let canConnect = false;\r\n    let canRedeploy = false;\r\n    switch (vmProvisioningState) {\r\n        case LabServicesModels.ProvisioningState.Updating:\r\n            break;\r\n        default:\r\n            switch (vmState) {\r\n                case VmState.Running:\r\n                    canStop = true;\r\n                    canReset = true;\r\n                    canConnect = true;\r\n                    canRedeploy = true;\r\n                    break;\r\n                case VmState.Stopped:\r\n                    canStart = true;\r\n                    canReset = true;\r\n                    canRedeploy = true;\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n    }\r\n    const { rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl } = connectionProfile || {};\r\n    const connectionTypes = getVNextConnectionTypes(rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl);\r\n    const privateIpAddress = connectionProfile?.privateIpAddress ?? '--';\r\n    const errorCode = resourceOperationError?.code ?? ' ';\r\n    const details = {\r\n        key: id,\r\n        id: id,\r\n        vmState,\r\n        vmAssignmentType,\r\n        assignedTo: user?.displayName || '',\r\n        currentUsage,\r\n        canStart,\r\n        canStop,\r\n        canReset,\r\n        canConnect,\r\n        canRedeploy,\r\n        isExpanding,\r\n        sshAuthority,\r\n        sshInBrowserUrl,\r\n        rdpAuthority,\r\n        rdpInBrowserUrl,\r\n        connectionTypes,\r\n        username: connectionProfile?.adminUsername,\r\n        privateIpAddress,\r\n        errorCode,\r\n        resourceOperationError,\r\n    };\r\n    return details;\r\n}\r\nexport const convertVNextVmDetails = memoize((virtualMachines, gettingVirtualMachines, users) => {\r\n    return virtualMachines.map((vm) => getVNextVmDetails(vm, gettingVirtualMachines, users));\r\n});\r\nexport const getVmListViewModel = memoize((state) => {\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    const currentTenantId = getTenantId(state);\r\n    const ianaTimezone = getIanaTimezone(state);\r\n    const locale = getLocale(state);\r\n    const aadGroupName = getGroupName(state);\r\n    const isBastionEnabled = isBastionFeatureEnabled(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    const currentLab = getCurrentLab(state);\r\n    const isGroupSyncModeEnabled = isLabGroupSynced(currentLab);\r\n    const isReadOnly = isCurrentLabReadOnly(state);\r\n    const isVmActionsEnabled = isVNext ? isLabAssistantRole(currentLab) : false;\r\n    if (!isVNext) {\r\n        const labStore = state.get('labStore');\r\n        const templateStore = state.get('templateStore');\r\n        const envStore = state.get('environmentStore');\r\n        const userStore = state.get('userStore');\r\n        const pricingAndAvailabilityStore = state.get('pricingAndAvailabilityStore');\r\n        const coreUsageStore = state.get('coreLimitStore');\r\n        const labStoreState = labStore.get('loadState');\r\n        const templateStoreState = templateStore.get('loadState');\r\n        const coreQuotaLoadState = coreUsageStore.get('loadState');\r\n        const environmentsLoadState = envStore.get('loadState');\r\n        const userStoreLoadState = userStore.get('loadState');\r\n        const isLoading = storeIsLoading(labStoreState) ||\r\n            storeIsLoading(templateStoreState) ||\r\n            storeIsLoading(environmentsLoadState) ||\r\n            storeIsLoading(userStoreLoadState) ||\r\n            storeIsLoading(coreQuotaLoadState) ||\r\n            isLoadingGroupName(state);\r\n        const templates = getTemplates(state);\r\n        const hasLoadError = storeHasLoadError(labStoreState) ||\r\n            storeHasLoadError(templateStoreState) ||\r\n            (!storeIsLoading(templateStoreState) && templates.size < 1) ||\r\n            storeHasLoadError(environmentsLoadState) ||\r\n            storeHasLoadError(userStoreLoadState);\r\n        const coreQuotaData = getCoreLimits(state);\r\n        const coreQuotaStatus = determineVCurrentQuotaStatus(coreQuotaData);\r\n        const labUpdateError = labStore.get('updateError');\r\n        const labCapacityExceedsCoresError = labStore.get('labCapacityExceedsCoresError');\r\n        const isLabUpdating = labStore.get('isUpdating');\r\n        const template = getCurrentTemplate(state);\r\n        const sizeData = pricingAndAvailabilityStore.get('labData');\r\n        const environments = envStore.get('environments');\r\n        const startErrors = envStore.get('startErrors');\r\n        const stopErrors = envStore.get('stopErrors');\r\n        const resetErrors = envStore.get('resetErrors');\r\n        const gettingEnvironments = envStore.get('gettingEnvironments');\r\n        const users = userStore.get('users');\r\n        const vmDetails = convertVmDetails(environments, gettingEnvironments, users, template);\r\n        const lab = currentLab;\r\n        const isGpu = getIsGpu(sizeData);\r\n        const coresPerVm = getCores(sizeData);\r\n        const capacity = lab && lab.maxUsersInLab ? lab.maxUsersInLab : 0;\r\n        const maxCapacity = lab?.userQuota ?? DefaultMaxCapacity;\r\n        const labTitle = template ? template.title : undefined;\r\n        const isWindows = template ? template.resourceSettings.osType === Ml.OsType.Windows : false;\r\n        const useSharedPassword = lab ? lab.sharedPasswordEnabled === Ml.EnableState.Enabled : false;\r\n        const hasBeenPublished = template ? template.publishingState !== Ml.PublishingState.Draft : false;\r\n        const isLabTeamsOrLmsConnected = isLabConnectedLmsOrTeams(lab);\r\n        return {\r\n            vmDetails,\r\n            coreQuotaData,\r\n            lab,\r\n            vmParentId: template?.id,\r\n            isGroupSyncModeEnabled,\r\n            isGpu,\r\n            coresPerVm,\r\n            isReadOnly,\r\n            groupName: aadGroupName,\r\n            currentTenantId,\r\n            capacity,\r\n            maxCapacity,\r\n            labTitle,\r\n            isWindows,\r\n            useSharedPassword,\r\n            hasBeenPublished,\r\n            isLabUpdating,\r\n            startErrors,\r\n            stopErrors,\r\n            resetErrors,\r\n            labUpdateError,\r\n            labCapacityExceedsCoresError,\r\n            isBastionEnabled,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            isLoading,\r\n            hasLoadError,\r\n            ianaTimezone,\r\n            locale,\r\n            coreQuotaStatus,\r\n            isLabTeamsOrLmsConnected,\r\n            isVmActionsEnabled,\r\n        };\r\n    }\r\n    else {\r\n        const labStore = state.get('vNextLabStore');\r\n        const virtualMachineStore = state.get('vNextVirtualMachineStore');\r\n        const userStore = state.get('vNextUserStore');\r\n        const labStoreState = labStore.get('loadState');\r\n        const virtualMachinesLoadState = virtualMachineStore.get('loadState');\r\n        const operations = virtualMachineStore.get('operations');\r\n        const userStoreLoadState = userStore.get('loadState');\r\n        const usageLoadState = getVNextUsageLoadState(state);\r\n        const skuLoadState = getVNextSkuLoadState(state);\r\n        const lab = currentLab;\r\n        const isLoading = storeIsLoading(labStoreState) ||\r\n            storeIsLoading(virtualMachinesLoadState) ||\r\n            storeIsLoading(userStoreLoadState) ||\r\n            isLoadingGroupName(state) ||\r\n            isLoadingLabMetadata(state) ||\r\n            storeIsLoading(usageLoadState) ||\r\n            storeIsLoading(skuLoadState);\r\n        const hasLoadError = storeHasLoadError(labStoreState) ||\r\n            storeHasLoadError(virtualMachinesLoadState) ||\r\n            storeHasLoadError(userStoreLoadState);\r\n        const coreUsageData = getCurrentLabCoreUsageInfo(state);\r\n        const labUpdateError = getCurrentLabUpdateError(state);\r\n        const labCapacityExceedsCoresError = labStore.get('labCapacityExceedsCoresError');\r\n        const isLabUpdating = labStore.get('isUpdating');\r\n        const labTitle = lab?.title;\r\n        const isWindows = lab?.virtualMachineProfile?.osType === LabServicesModels.OsType.Windows;\r\n        const useSharedPassword = lab?.virtualMachineProfile?.useSharedPassword === LabServicesModels.EnableState.Enabled;\r\n        const hasBeenPublished = lab?.state === LabServicesModels.LabState.Published;\r\n        const virtualMachines = getUserVMs(state);\r\n        const startErrors = getUserVMStartErrors(state);\r\n        const stopErrors = getUserVMStopErrors(state);\r\n        const resetErrors = virtualMachineStore.get('resetErrors');\r\n        const labSku = getCurrentLabSkuInfo(state);\r\n        const isGpu = labSku?.isGpu ?? false;\r\n        const coresPerVm = labSku?.cores;\r\n        const capacity = !lab?.virtualMachineProfile?.sku?.capacity ? 0 : lab.virtualMachineProfile.sku.capacity;\r\n        const maxCapacity = DefaultMaxCapacity;\r\n        const gettingVirtualMachines = virtualMachineStore.get('gettingVirtualMachines');\r\n        const users = userStore.get('users');\r\n        const vmDetails = convertVNextVmDetails(virtualMachines, gettingVirtualMachines, users);\r\n        const shouldDisableLabUpdate = shouldDisableCurrentLabUpdate(state);\r\n        const redeployErrors = getUserVMRedeployErrors(state);\r\n        const groupName = getVNextLabGroupName(state);\r\n        const isLabTeamsOrLmsConnected = isLabConnectedLmsOrTeams(lab);\r\n        const isDraft = !!lab && isVNextLabDraft(lab);\r\n        return {\r\n            vmDetails,\r\n            vmParentId: lab?.id,\r\n            coreQuotaData: coreUsageData,\r\n            lab,\r\n            isGroupSyncModeEnabled,\r\n            isGpu,\r\n            coresPerVm,\r\n            isReadOnly,\r\n            groupName,\r\n            currentTenantId,\r\n            capacity,\r\n            maxCapacity,\r\n            labTitle,\r\n            isWindows,\r\n            useSharedPassword,\r\n            hasBeenPublished,\r\n            isLabUpdating,\r\n            startErrors,\r\n            stopErrors,\r\n            resetErrors,\r\n            labUpdateError,\r\n            labCapacityExceedsCoresError,\r\n            isBastionEnabled,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            isLoading,\r\n            hasLoadError,\r\n            ianaTimezone,\r\n            locale,\r\n            shouldDisableLabUpdate,\r\n            redeployErrors,\r\n            isLabTeamsOrLmsConnected,\r\n            isLabDraft: isDraft,\r\n            isVmActionsEnabled,\r\n            operations: operations,\r\n        };\r\n    }\r\n});\r\nexport const getVmListContainerModel = memoize((state) => {\r\n    const search = getSearch(state);\r\n    const vmListViewModel = getVmListViewModel(state);\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    return {\r\n        vmListViewModel,\r\n        search,\r\n        isVNext,\r\n    };\r\n});\r\n","import moment from 'moment-timezone';\r\nimport memoize from 'memoize-one';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport PowerState from '../utils/power-state';\r\nimport { ResourceId } from '../utils/resource-id';\r\nimport { getSshConnectData, getSshCommand as getSshConnectionCommand } from '../common/connect-to-vm/connect-utilities';\r\nimport { ProvisioningState } from '../utils/provisioning-state';\r\nimport { VmState } from '../data/models/environment-common';\r\nimport { getConnectionTypes, getVNextConnectionTypes } from '../common/selectors/vm-connect';\r\nimport { DefaultCurrencyCode } from '../utils/constants';\r\nimport { getCores, getIsGpu, getRdpAuthority, getSshAuthority, isTemplateCreating, isTemplatePublished, isTemplatePublishing, isTemplateResettingPassword, isTemplateScaling, isTemplateStarting, isTemplateStopping, } from '../redux/selectors/template-selectors';\r\nimport { getCurrentLab, isLabGroupSynced, isCurrentLabReadOnly } from '../redux/selectors/lab-selectors';\r\nimport { getLabPricingAndAvailabilityData, getLabPricingAndAvailabilityLoadState, } from '../redux/selectors/pricing-and-availability-selectors';\r\nimport { getGroupName, isLoadingGroupName } from '../redux/selectors/group-selectors';\r\nimport { getLocale, isBastionFeatureEnabled, isTeamsOrLmsMode, storeIsLoading, } from '../redux/selectors/common-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { getTenantId } from '../redux/selectors/identity-selector';\r\nimport { isCurrentLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { getCurrentLabImage, getVNextSharedImages } from '../redux/selectors/vnext/image-selectors';\r\nimport { getTemplateErrors, getTemplateVM } from '../redux/selectors/vnext/virtual-machine-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { convertVNextVirtualMachineStateToVmState } from '../vm-list/vm-list-selectors';\r\nimport { getCurrentLabErrors, getCurrentLabUpdateError, getLabErrorsByOperation, getVNextLabGroupName, hasTemplateVM, isLoadingLabMetadata, shouldDisableCurrentLabUpdate, } from '../redux/selectors/vnext/lab-selectors';\r\nimport { getLabPlan, getLabPlans } from '../redux/selectors/vnext/lab-plan-selectors';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { getCurrentLabSkuInfo } from '../redux/selectors/vnext/sku-selectors';\r\nimport { getCurrentLabCoreUsageInfo, getVNextUsageLoadState } from '../redux/selectors/vnext/usage-selectors';\r\nfunction getImage(template) {\r\n    const galleryImage = template && template.resourceSettings && template.resourceSettings.imageName;\r\n    const sigImage = template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.sharedImageResourceId &&\r\n        new ResourceId(template.resourceSettings.sharedImageResourceId).name;\r\n    return galleryImage || sigImage;\r\n}\r\nfunction getMemorySize(sizeData) {\r\n    return sizeData ? sizeData.size.memoryInGb : 0;\r\n}\r\nfunction getPrice(sizeData) {\r\n    return sizeData ? sizeData.price : undefined;\r\n}\r\nfunction getCurrencyCode(sizeData) {\r\n    return sizeData ? sizeData.currencyCode : DefaultCurrencyCode;\r\n}\r\nfunction getSize(sizeData) {\r\n    return sizeData ? sizeData.size.localizedDisplayName : undefined;\r\n}\r\nfunction getOsType(template) {\r\n    return template && template.resourceSettings && template.resourceSettings.osType;\r\n}\r\nfunction getGpuDriverState(template) {\r\n    return template && template.resourceSettings && template.resourceSettings.gpuDriverState;\r\n}\r\nfunction getUsername(template) {\r\n    return (template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.userName);\r\n}\r\nfunction getSshCommand(sshAuthority, username) {\r\n    if (sshAuthority) {\r\n        const { port, url } = getSshConnectData(sshAuthority);\r\n        return getSshConnectionCommand(port, username, url);\r\n    }\r\n}\r\nexport function getPowerState(template) {\r\n    return (template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails &&\r\n        template.resourceSettings.referenceVm.vmStateDetails.lastKnownPowerState);\r\n}\r\nexport function getRdpInBrowserUrl(template) {\r\n    return (template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails &&\r\n        template.resourceSettings.referenceVm.vmStateDetails.rdpInBrowserUrl);\r\n}\r\nexport function getSshInBrowserUrl(template) {\r\n    return (template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.referenceVm &&\r\n        template.resourceSettings.referenceVm.vmStateDetails &&\r\n        template.resourceSettings.referenceVm.vmStateDetails.sshInBrowserUrl);\r\n}\r\nexport function getIsTemplateVmPresent(template) {\r\n    return template && template.hasTemplateVm ? template.hasTemplateVm : false;\r\n}\r\nexport function getTemplateVmState(template) {\r\n    if (template.isCreating) {\r\n        return VmState.Creating;\r\n    }\r\n    else if (template.isStarting) {\r\n        return VmState.Starting;\r\n    }\r\n    else if (template.isStopping) {\r\n        return VmState.Stopping;\r\n    }\r\n    else if (template.isRunning) {\r\n        return VmState.Running;\r\n    }\r\n    else if (template.isRedeploying) {\r\n        return VmState.Redeploying;\r\n    }\r\n    else {\r\n        return VmState.Stopped;\r\n    }\r\n}\r\nfunction isTemplateLinuxRdpEnabled(template) {\r\n    return template && template.resourceSettings && template.resourceSettings.linuxRdpEnabled\r\n        ? template.resourceSettings.linuxRdpEnabled === Ml.EnableState.Enabled\r\n        : false;\r\n}\r\nexport function isSharedGalleryValid(sharedGallery) {\r\n    return sharedGallery && sharedGallery.provisioningState\r\n        ? sharedGallery.provisioningState === ProvisioningState.Succeeded\r\n        : false;\r\n}\r\nexport function isUploadStateFailed(template) {\r\n    return template ? template.uploadState === Ml.UploadState.Failed : false;\r\n}\r\nfunction hasNewEdits(template) {\r\n    if (!template) {\r\n        return false;\r\n    }\r\n    const correctedLastPublished = getLastPublishedDateCorrected(template.lastPublished);\r\n    return template.lastChanged && correctedLastPublished ? template.lastChanged > correctedLastPublished : false;\r\n}\r\nfunction getSharedImage(template, sharedImages) {\r\n    if (sharedImages &&\r\n        template &&\r\n        template.resourceSettings &&\r\n        template.resourceSettings.sharedImageResourceIdForUpload) {\r\n        const sharedImageId = template.resourceSettings.sharedImageResourceIdForUpload;\r\n        const index = sharedImages.findIndex((image) => image.id.toLowerCase() === sharedImageId.toLowerCase());\r\n        if (index > -1) {\r\n            return sharedImages.get(index);\r\n        }\r\n    }\r\n}\r\nfunction getCurrentTemplate(templates, currentTemplateId) {\r\n    if (!currentTemplateId || templates.size <= 0) {\r\n        return;\r\n    }\r\n    const index = templates.findIndex((template) => template.id.toLowerCase() === currentTemplateId.toLowerCase());\r\n    if (index > -1) {\r\n        return templates.get(index);\r\n    }\r\n}\r\nexport function getLastUploadedRelativeTime(template, locale) {\r\n    const now = moment(new Date()).locale(locale);\r\n    const lastUploaded = template && template.lastUploaded && moment(template.lastUploaded).locale(locale);\r\n    return lastUploaded && lastUploaded.from(now);\r\n}\r\nexport function getLastPublishedDate(template, locale) {\r\n    return template && template.lastPublished && moment(template.lastPublished).locale(locale).format('LL');\r\n}\r\nexport function getLastPublishedTime(template, locale) {\r\n    return template && template.lastPublished && moment(template.lastPublished).locale(locale).format('LT');\r\n}\r\n/** LastPublished is the only date in the environment setting document stored without a 'Z' at the end,\r\n * so the dates can be mismatched.  Correct it here\r\n */\r\nfunction getLastPublishedDateCorrected(lastPublished) {\r\n    if (!lastPublished) {\r\n        return;\r\n    }\r\n    const date = new Date();\r\n    const offset = date.getTimezoneOffset() / 60;\r\n    const newLastPublished = new Date(lastPublished);\r\n    newLastPublished.setHours(lastPublished.getHours() - offset);\r\n    return newLastPublished;\r\n}\r\nexport const convertToTemplateVm = (templates, currentTemplateId, isSaving, sharedImages, sizeData) => {\r\n    const template = getCurrentTemplate(templates, currentTemplateId);\r\n    if (!template) {\r\n        return;\r\n    }\r\n    const { id, title, description, provisioningState, uploadState, publishingState, lastChanged, lastUploaded, lastPublished: lastPublishedUtc, createdDate, } = template;\r\n    const image = getImage(template);\r\n    const cores = getCores(sizeData);\r\n    const isGpu = getIsGpu(sizeData);\r\n    const memorySize = getMemorySize(sizeData);\r\n    const price = getPrice(sizeData);\r\n    const currency = getCurrencyCode(sizeData);\r\n    const size = getSize(sizeData);\r\n    const username = getUsername(template);\r\n    const powerState = getPowerState(template);\r\n    const sshAuthority = getSshAuthority(template);\r\n    const sshCommand = getSshCommand(sshAuthority, username);\r\n    const rdpAuthority = getRdpAuthority(template);\r\n    const rdpInBrowserUrl = getRdpInBrowserUrl(template);\r\n    const sshInBrowserUrl = getSshInBrowserUrl(template);\r\n    const sharedImage = getSharedImage(template, sharedImages);\r\n    const lastPublished = getLastPublishedDateCorrected(lastPublishedUtc);\r\n    const gpuDriverState = getGpuDriverState(template);\r\n    const isStarting = isTemplateStarting(template);\r\n    const isStopping = isTemplateStopping(template);\r\n    const isCreating = isTemplateCreating(template);\r\n    const isUploadingImage = template ? template.uploadState === Ml.UploadState.InProgress : false;\r\n    const isPublishing = isTemplatePublishing(template);\r\n    const isPublished = isTemplatePublished(template);\r\n    const isScaling = isTemplateScaling(template);\r\n    const isResettingPassword = isTemplateResettingPassword(template);\r\n    const isLinuxRdpEnabled = isTemplateLinuxRdpEnabled(template);\r\n    const hasEdits = hasNewEdits(template);\r\n    const hasTemplateVm = getIsTemplateVmPresent(template);\r\n    const osType = getOsType(template);\r\n    const isWindows = osType === Ml.OsType.Windows ? true : false;\r\n    const isRunning = powerState === PowerState.Running;\r\n    const connectionTypes = getConnectionTypes(rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl, isWindows, isLinuxRdpEnabled);\r\n    return {\r\n        id,\r\n        title,\r\n        description,\r\n        provisioningState,\r\n        uploadState,\r\n        publishingState,\r\n        image,\r\n        cores,\r\n        isGpu,\r\n        username,\r\n        memorySize,\r\n        price,\r\n        currency,\r\n        size,\r\n        rdpAuthority,\r\n        rdpInBrowserUrl,\r\n        sshAuthority,\r\n        sshInBrowserUrl,\r\n        sshCommand,\r\n        lastChanged,\r\n        lastUploaded,\r\n        lastPublished,\r\n        createdDate,\r\n        sharedImage,\r\n        isWindows,\r\n        hasEdits,\r\n        hasTemplateVm,\r\n        isSaving,\r\n        isCreating,\r\n        isStarting,\r\n        isStopping,\r\n        isRunning,\r\n        isUploadingImage,\r\n        isPublishing,\r\n        isPublished,\r\n        isReimaging: false,\r\n        isScaling,\r\n        isResettingPassword,\r\n        connectionTypes,\r\n        gpuDriverState,\r\n        isVNext: false,\r\n    };\r\n};\r\nexport function convertVNextVirtualMachineToTemplateVm(template, lab, isSaving, image, labSkuInfo) {\r\n    if (!lab) {\r\n        return;\r\n    }\r\n    const isUploadingImage = false;\r\n    // todo: compare lastPublished date with the vm last changed date to determine whether we should show 'changed since last published'\r\n    const hasEdits = false;\r\n    const { title, description, systemData, virtualMachineProfile, lastPublished } = lab;\r\n    let { state: labState, provisioningState: labProvisioningState, pendingLabState, pendingProvisioningState } = lab; // eslint-disable-line prefer-const\r\n    labState = pendingLabState ?? labState;\r\n    labProvisioningState = pendingProvisioningState ?? labProvisioningState;\r\n    const createdAt = systemData?.createdAt;\r\n    const isCreating = labProvisioningState === LabServicesModels.ProvisioningState.Creating;\r\n    const cores = labSkuInfo?.cores;\r\n    const isGpu = labSkuInfo?.isGpu ?? false;\r\n    const memorySize = labSkuInfo?.memoryGB;\r\n    const storageSize = labSkuInfo?.storageGB;\r\n    const storageType = labSkuInfo?.storageType;\r\n    const price = labSkuInfo?.price;\r\n    const currency = labSkuInfo?.currency;\r\n    const isWindows = lab.virtualMachineProfile?.osType === LabServicesModels.OsType.Windows ? true : false;\r\n    const isPublishing = labState === LabServicesModels.LabState.Publishing;\r\n    const isPublished = labState === LabServicesModels.LabState.Published;\r\n    const isScaling = labState === LabServicesModels.LabState.Scaling;\r\n    const isSyncing = labState === LabServicesModels.LabState.Syncing;\r\n    const shouldHaveTemplateVM = virtualMachineProfile?.createOption === LabServicesModels.CreateOption.TemplateVM;\r\n    const lastPublishedDate = !lastPublished ? undefined : new Date(lastPublished);\r\n    if (!shouldHaveTemplateVM || !template) {\r\n        return {\r\n            title,\r\n            description,\r\n            createdDate: createdAt,\r\n            lastPublished: lastPublishedDate,\r\n            image: image?.displayName,\r\n            cores,\r\n            isGpu,\r\n            storageSize,\r\n            storageType,\r\n            memorySize,\r\n            price,\r\n            currency,\r\n            isWindows,\r\n            hasTemplateVm: shouldHaveTemplateVM,\r\n            isSaving,\r\n            isPublishing,\r\n            isPublished,\r\n            isScaling,\r\n            hasEdits,\r\n            isUploadingImage,\r\n            isCreating,\r\n            isStarting: false,\r\n            isStopping: false,\r\n            isRunning: false,\r\n            isReimaging: false,\r\n            isResettingPassword: false,\r\n            connectionTypes: [],\r\n            isSyncing,\r\n            labSkuInfo,\r\n            isVNext: true,\r\n        };\r\n    }\r\n    const { id, provisioningState, connectionProfile, state, pendingVmState } = template;\r\n    const vmState = pendingVmState !== VmState.None\r\n        ? pendingVmState\r\n        : convertVNextVirtualMachineStateToVmState(state, provisioningState);\r\n    const { adminUser } = virtualMachineProfile;\r\n    const privateIpAddress = connectionProfile?.privateIpAddress;\r\n    const rdpAuthority = connectionProfile?.rdpAuthority;\r\n    const rdpInBrowserUrl = connectionProfile?.rdpInBrowserUrl;\r\n    const sshAuthority = connectionProfile?.sshAuthority;\r\n    const sshCommand = getSshCommand(sshAuthority, adminUser.username);\r\n    const sshInBrowserUrl = connectionProfile?.sshInBrowserUrl;\r\n    const sharedImage = !!image?.sharedGalleryId ? image : undefined;\r\n    const isStarting = vmState === VmState.Starting;\r\n    const isStopping = vmState === VmState.Stopping;\r\n    const isResettingPassword = vmState === VmState.ResettingPassword;\r\n    const isRunning = vmState === VmState.Running;\r\n    const isRedeploying = vmState === VmState.Redeploying;\r\n    const isReimaging = vmState === VmState.Reimaging;\r\n    const connectionTypes = getVNextConnectionTypes(rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl);\r\n    return {\r\n        id,\r\n        title,\r\n        description,\r\n        provisioningState,\r\n        image: image?.displayName,\r\n        cores,\r\n        isGpu,\r\n        username: adminUser.username,\r\n        memorySize,\r\n        storageSize,\r\n        storageType,\r\n        price,\r\n        currency,\r\n        privateIpAddress,\r\n        rdpAuthority,\r\n        rdpInBrowserUrl,\r\n        sshAuthority,\r\n        sshInBrowserUrl,\r\n        sshCommand,\r\n        createdDate: createdAt,\r\n        sharedImage,\r\n        isWindows,\r\n        hasEdits,\r\n        hasTemplateVm: shouldHaveTemplateVM,\r\n        isSaving,\r\n        isCreating,\r\n        isStarting,\r\n        isStopping,\r\n        isRunning,\r\n        isUploadingImage,\r\n        isPublishing,\r\n        isPublished,\r\n        isReimaging,\r\n        isScaling,\r\n        isResettingPassword,\r\n        connectionTypes,\r\n        lastPublished: lastPublishedDate,\r\n        isRedeploying,\r\n        isSyncing,\r\n        labSkuInfo,\r\n        isVNext: true,\r\n    };\r\n}\r\nfunction getGallery(galleries) {\r\n    if (galleries && galleries.count() > 0) {\r\n        return galleries.get(0);\r\n    }\r\n}\r\nfunction getDismissedGpuBanner(lab) {\r\n    // todo: compare with vNext DismissState if vNext dismiss state is different from vCurrent\r\n    return lab ? lab.gpuDriverStateDismissed === Ml.DismissState.Dismissed : false;\r\n}\r\nexport const getTemplateViewModel = memoize((state) => {\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    const aadGroupName = getGroupName(state);\r\n    const currentTenantId = getTenantId(state);\r\n    const isReadOnly = isCurrentLabReadOnly(state);\r\n    const isBastionEnabled = isBastionFeatureEnabled(state);\r\n    const lab = getCurrentLab(state);\r\n    const isGroupSyncModeEnabled = isLabGroupSynced(lab);\r\n    const locale = getLocale(state);\r\n    if (!isVNext) {\r\n        const templateStore = state.get('templateStore');\r\n        const sharedImageStore = state.get('sharedImageStore');\r\n        const labStore = state.get('labStore');\r\n        const coreLimitStore = state.get('coreLimitStore');\r\n        const loadError = templateStore.get('loadError');\r\n        const coreQuotaLoadState = coreLimitStore.get('loadState');\r\n        const templateStoreLoadState = templateStore.get('loadState');\r\n        const labLoadState = labStore.get('loadState');\r\n        const sizeLoadState = getLabPricingAndAvailabilityLoadState(state);\r\n        const isLoading = storeIsLoading(templateStoreLoadState) ||\r\n            storeIsLoading(labLoadState) ||\r\n            storeIsLoading(sizeLoadState) ||\r\n            storeIsLoading(coreQuotaLoadState) ||\r\n            isLoadingGroupName(state);\r\n        const sharedImages = sharedImageStore.get('images');\r\n        const sharedGalleries = sharedImageStore.get('sharedGalleries');\r\n        const sharedImageLoadState = sharedImageStore.get('loadState');\r\n        const isSharedImagesLoading = storeIsLoading(sharedImageLoadState);\r\n        const isReadOnly = isCurrentLabReadOnly(state);\r\n        const coreQuotaData = coreLimitStore.get('coreQuotaData');\r\n        const sizeData = getLabPricingAndAvailabilityData(state);\r\n        const errors = templateStore.get('errors');\r\n        const templates = templateStore.get('templates');\r\n        const currentTemplate = templateStore.get('currentTemplate');\r\n        const publishExceedsCoresError = templateStore.get('publishExceedsCoresError');\r\n        const isSaving = templateStore.get('isUpdating');\r\n        const labUpdateError = labStore.get('updateError');\r\n        const isDismissing = labStore.get('isUpdating');\r\n        const template = convertToTemplateVm(templates, currentTemplate, isSaving, sharedImages, sizeData);\r\n        const sharedGallery = getGallery(sharedGalleries);\r\n        const dismissedGpuBanner = getDismissedGpuBanner(lab);\r\n        const vNextPublishError = false;\r\n        return {\r\n            lab,\r\n            templates,\r\n            template,\r\n            sharedGallery,\r\n            sharedImages,\r\n            coreQuotaData,\r\n            dismissedGpuBanner,\r\n            currentTenantId,\r\n            isDismissing,\r\n            isReadOnly,\r\n            groupName: aadGroupName,\r\n            isGroupSyncModeEnabled,\r\n            isSharedImagesLoading,\r\n            errors,\r\n            labUpdateError,\r\n            publishExceedsCoresError,\r\n            isBastionEnabled,\r\n            isLoading,\r\n            loadError,\r\n            locale,\r\n            vNextPublishError,\r\n        };\r\n    }\r\n    else {\r\n        const virtualMachineStore = state.get('vNextVirtualMachineStore');\r\n        const imagesStore = state.get('vNextImageStore');\r\n        const labStore = state.get('vNextLabStore');\r\n        const coreUsgaeStore = state.get('vNextCoreUsageStore');\r\n        const pricingAndAvailabilityStore = state.get('vNextPricingAndAvailabilityStore');\r\n        const skuStore = state.get('vNextSkuStore');\r\n        const loadVirtualMachinesError = virtualMachineStore.get('loadError');\r\n        const getErrors = virtualMachineStore.get('getErrors');\r\n        const vNextTemplateVM = getTemplateVM(state);\r\n        const resourceOperationError = !!vNextTemplateVM ? vNextTemplateVM.resourceOperationError : undefined;\r\n        const getTemplateVirtualMachineError = !!vNextTemplateVM\r\n            ? getErrors.find((o) => caseInsensitiveCultureInvariantCompare(o.id, vNextTemplateVM.id) === 0)\r\n            : undefined;\r\n        const coreQuotaLoadState = coreUsgaeStore.get('loadState');\r\n        const virtualMachineStoreLoadState = virtualMachineStore.get('loadState');\r\n        const labLoadState = labStore.get('loadState');\r\n        const pricingAndAvailabilityLoadState = pricingAndAvailabilityStore.get('loadState');\r\n        const skuLoadState = skuStore.get('loadState');\r\n        const usageLoadState = getVNextUsageLoadState(state);\r\n        const operations = state.get('vNextVirtualMachineStore').get('operations');\r\n        let isLoading = storeIsLoading(labLoadState) ||\r\n            storeIsLoading(pricingAndAvailabilityLoadState) ||\r\n            storeIsLoading(coreQuotaLoadState) ||\r\n            isLoadingGroupName(state) ||\r\n            isLoadingLabMetadata(state) ||\r\n            storeIsLoading(skuLoadState) ||\r\n            storeIsLoading(usageLoadState);\r\n        let loadTemplateError;\r\n        if (hasTemplateVM(state)) {\r\n            isLoading = isLoading || storeIsLoading(virtualMachineStoreLoadState);\r\n            loadTemplateError = loadVirtualMachinesError || getTemplateVirtualMachineError;\r\n        }\r\n        const sharedImages = getVNextSharedImages(state);\r\n        const sharedImageLoadState = imagesStore.get('loadState');\r\n        const isSharedImagesLoading = storeIsLoading(sharedImageLoadState);\r\n        const coreUsageData = getCurrentLabCoreUsageInfo(state);\r\n        const templateErrors = getTemplateErrors(state);\r\n        const labErrors = getCurrentLabErrors(state);\r\n        const labPublishErrors = getLabErrorsByOperation(labErrors, FailureOperation.PublishTemplate);\r\n        let vNextPublishError = false;\r\n        let errors = templateErrors;\r\n        if (labPublishErrors.size > 0) {\r\n            vNextPublishError = true;\r\n            errors = errors.set(labPublishErrors.get(0).id, labPublishErrors);\r\n        }\r\n        const isSaving = labStore.get('isUpdating');\r\n        const labUpdateError = getCurrentLabUpdateError(state);\r\n        const isDismissing = labStore.get('isUpdatingMetadata');\r\n        const shouldShowExportStartedMessage = virtualMachineStore.get('shouldShowExportStartedMessage');\r\n        const exportedImageName = virtualMachineStore.get('exportedImageName');\r\n        const image = getCurrentLabImage(state);\r\n        const labSku = getCurrentLabSkuInfo(state);\r\n        const template = convertVNextVirtualMachineToTemplateVm(vNextTemplateVM, lab, isSaving, image, labSku);\r\n        const shouldDisableLabUpdate = shouldDisableCurrentLabUpdate(state);\r\n        const labPlans = getLabPlans(state);\r\n        const labPlanId = lab.labPlanId;\r\n        let sharedGalleryId;\r\n        if (!!labPlanId) {\r\n            const labPlan = getLabPlan(labPlans, labPlanId);\r\n            sharedGalleryId = labPlan?.sharedGalleryId;\r\n        }\r\n        const groupName = getVNextLabGroupName(state);\r\n        return {\r\n            lab,\r\n            template,\r\n            sharedImages,\r\n            coreQuotaData: coreUsageData,\r\n            currentTenantId,\r\n            isDismissing,\r\n            isReadOnly,\r\n            groupName,\r\n            isGroupSyncModeEnabled,\r\n            isSharedImagesLoading,\r\n            errors,\r\n            labUpdateError,\r\n            isBastionEnabled,\r\n            isLoading,\r\n            loadError: loadTemplateError,\r\n            locale,\r\n            shouldDisableLabUpdate,\r\n            labPlanSharedGalleryId: sharedGalleryId,\r\n            shouldShowExportStartedMessage,\r\n            exportedImageName,\r\n            vNextPublishError,\r\n            operations,\r\n            resourceOperationError,\r\n        };\r\n    }\r\n});\r\nexport const getTemplateContainerModel = memoize((state) => {\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    const search = getSearch(state);\r\n    const templateViewModel = getTemplateViewModel(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    return {\r\n        isVNext,\r\n        search,\r\n        templateViewModel,\r\n        isTeamsOrLmsIntegrationEnabled,\r\n    };\r\n});\r\nconst TemplateSelectors = {\r\n    getTemplateContainerModel,\r\n    getTemplateViewModel,\r\n    convertToTemplateVm,\r\n    isSharedGalleryValid,\r\n    isUploadStateFailed,\r\n    getLastUploadedRelativeTime,\r\n    getLastPublishedDate,\r\n    getLastPublishedTime,\r\n    getPowerState,\r\n};\r\nexport default TemplateSelectors;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport memoize from 'memoize-one';\r\nimport { List } from 'immutable';\r\nimport moment from 'moment';\r\nimport { defineMessages } from 'react-intl';\r\nimport { ProvisioningState } from '../data/models/common';\r\nimport { adjustDate, createIcal, createIcalVNext, expandEvents } from '../schedule/calendar-utilities';\r\nimport { mapDayToLocaleDayShort } from '../schedule/flyout-utilities';\r\nimport { DefaultCurrencyCode } from '../utils/constants';\r\nimport { getLocale, isTeamsOrLmsMode, storeIsLoading } from '../redux/selectors/common-selectors';\r\nimport { getCurrentLab, getLabCapacity, isLabGroupSynced, isCurrentLabReadOnly, isVNextLab, } from '../redux/selectors/lab-selectors';\r\nimport { convertToTemplateVm, convertVNextVirtualMachineToTemplateVm } from '../template/template-selectors';\r\nimport { getLabPricingAndAvailabilityData, getLabPricingAndAvailabilityLoadError, getLabPricingAndAvailabilityLoadState, } from '../redux/selectors/pricing-and-availability-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { isCurrentLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { getTemplateVM, getUserVMs } from '../redux/selectors/vnext/virtual-machine-selectors';\r\nimport { getCurrentLabImage } from '../redux/selectors/vnext/image-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nimport { isLoadingLabMetadata } from '../redux/selectors/vnext/lab-selectors';\r\nimport { getCurrentLabSkuInfo } from '../redux/selectors/vnext/sku-selectors';\r\nimport { getVNextPriceLoadError } from '../redux/selectors/vnext/price-selectors';\r\nconst messages = defineMessages({\r\n    startOnlyRecurringWithEndDateScheduleMessage: {\r\n        id: 'StartOnlyRecurringWithEndDateScheduleMessage',\r\n        defaultMessage: 'Start at {startTime} every {days} until {endDate}',\r\n        description: 'Text on schedule tile to summarize a start only recurring schedule with end date.  {startTime} is the time at which the schedule will start, {days} is the weekdays the schedule will run, and {endDate} is the last day of the schedule.',\r\n    },\r\n    startOnlyRecurringWithNoEndDateScheduleMessage: {\r\n        id: 'StartOnlyRecurringWithNoEndDateScheduleMessage',\r\n        defaultMessage: 'Start at {startTime} every {days} (no end date)',\r\n        description: 'Text on schedule tile to summarize a start only recurring schedule with no end date.  {startTime} is the time at which the schedule will start, {days} is the weekdays the schedule will run.',\r\n    },\r\n    startOnlyNonRecurringScheduleMessage: {\r\n        id: 'StartOnlyNonRecurringScheduleMessage',\r\n        defaultMessage: 'Start at {startTime} on {date}',\r\n        description: 'Text on schedule tile to summarize a one time start only schedule.  {startTime} is the time at which the schedule will start, {date} is the day the schedule will run.',\r\n    },\r\n    stopOnlyRecurringWithEndDateScheduleMessage: {\r\n        id: 'StopOnlyRecurringWithEndDateScheduleMessage',\r\n        defaultMessage: 'Stop at {stopTime} every {days} until {endDate}',\r\n        description: 'Text on schedule tile to summarize a stop only recurring schedule with end date.  {stopTime} is the time at which the schedule will run, {days} is the weekdays the schedule will run, and {endDate} is the last day of the schedule.',\r\n    },\r\n    stopOnlyRecurringWithNoEndDateScheduleMessage: {\r\n        id: 'StopOnlyRecurringWithNoEndDateScheduleMessage',\r\n        defaultMessage: 'Stop at {stopTime} every {days} (no end date)',\r\n        description: 'Text on schedule tile to summarize a stop only recurring schedule with no end date.  {stopTime} is the time at which the schedule will run, {days} is the weekdays the schedule will run.',\r\n    },\r\n    stopOnlyNonRecurringScheduleMessage: {\r\n        id: 'StopOnlyNonRecurringScheduleMessage',\r\n        defaultMessage: 'Stop at {stopTime} on {date}',\r\n        description: 'Text on schedule tile to summarize a one time stop only schedulee.  {stopTime} is the time at which the schedule will run, {date} is the day the schedule will run.',\r\n    },\r\n    standardRecurringWithEndDateScheduleMessage: {\r\n        id: 'StandardRecurringWithEndDateScheduleMessage',\r\n        defaultMessage: '{startTime}-{stopTime} every {days} until {endDate}',\r\n        description: 'Text on schedule tile to summarize a standard recurring schedule with end date.  {startTime} is the time at which the schedule will start, {stopTime} is the time at which the schedule will stop, {days} is the weekdays the schedule will run, and {endDate} is the last day of the schedule.',\r\n    },\r\n    standardRecurringWithNoEndDateScheduleMessage: {\r\n        id: 'StandardRecurringWithNoEndDateScheduleMessage',\r\n        defaultMessage: '{startTime}-{stopTime} every {days} (no end date)',\r\n        description: 'Text on schedule tile to summarize a standard recurring schedule with no end date.  {startTime} is the time at which the schedule will start, {stopTime} is the time at which the schedule will stop, {days} is the weekdays the schedule will run.',\r\n    },\r\n    standardNonRecurringScheduleMessage: {\r\n        id: 'StandardNonRecurringScheduleMessage',\r\n        defaultMessage: '{startTime}-{stopTime} on {date}',\r\n        description: 'Text on schedule tile to summarize a one time standard schedule.  {startTime} is the time at which the schedule will start, {date} is the day the schedule will run.',\r\n    },\r\n});\r\nexport const isFailed = (provisioningState) => {\r\n    return !!provisioningState && provisioningState.toLowerCase() === ProvisioningState.Failed;\r\n};\r\nexport const compareByStartDate = (a, b) => {\r\n    if (a.start.getTime() < b.start.getTime()) {\r\n        return -1;\r\n    }\r\n    else if (a.start.getTime() > b.start.getTime()) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n};\r\nexport const compareVNextScheduleByDate = (a, b) => {\r\n    const aDate = a.startAt ?? a.stopAt;\r\n    const bDate = b.startAt ?? b.stopAt;\r\n    if (!aDate && !bDate) {\r\n        return 0;\r\n    }\r\n    if (!aDate || !bDate) {\r\n        return !aDate ? 1 : -1;\r\n    }\r\n    if (aDate.getTime() < bDate.getTime()) {\r\n        return -1;\r\n    }\r\n    else if (aDate.getTime() > bDate.getTime()) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n};\r\nconst isRecurring = (schedule) => {\r\n    return !!schedule.recurrencePattern;\r\n};\r\nconst hasEndDate = (isLabParentLabAccount, schedule) => {\r\n    if (isLabParentLabAccount) {\r\n        const vCurrentschedule = schedule;\r\n        return !!vCurrentschedule.recurrencePattern && !!vCurrentschedule.recurrencePattern.until;\r\n    }\r\n    else {\r\n        const vNextSchedule = schedule;\r\n        return (!!vNextSchedule.recurrencePattern &&\r\n            !!vNextSchedule.recurrencePattern.expirationDate);\r\n    }\r\n};\r\nconst isStandard = (isLabParentLabAccount, schedule) => {\r\n    if (isLabParentLabAccount) {\r\n        const vCurrentschedule = schedule;\r\n        return vCurrentschedule.startAction && vCurrentschedule.endAction\r\n            ? vCurrentschedule.startAction.enableState === Ml.EnableState.Enabled &&\r\n                vCurrentschedule.endAction.enableState === Ml.EnableState.Enabled\r\n            : false;\r\n    }\r\n    else {\r\n        const vNextSchedule = schedule;\r\n        return !!vNextSchedule.startAt && !!vNextSchedule.stopAt;\r\n    }\r\n};\r\nexport const individualHours = (isLabParentLabAccount, schedules) => {\r\n    let totalIndividualHours = 0;\r\n    if (isLabParentLabAccount) {\r\n        const individualSchedules = schedules.filter((schedule) => !isRecurring(schedule) && isStandard(isLabParentLabAccount, schedule));\r\n        individualSchedules.forEach((schedule) => {\r\n            const startMom = moment(schedule.start);\r\n            const endMom = moment(schedule.end);\r\n            const duration = moment.duration(endMom.diff(startMom));\r\n            totalIndividualHours += duration.as('hours');\r\n        });\r\n    }\r\n    else {\r\n        const individualSchedules = schedules.filter((schedule) => !isRecurring(schedule) && isStandard(isLabParentLabAccount, schedule));\r\n        individualSchedules.forEach((schedule) => {\r\n            const startMom = moment(schedule.startAt);\r\n            const endMom = moment(schedule.stopAt);\r\n            const duration = moment.duration(endMom.diff(startMom));\r\n            totalIndividualHours += duration.as('hours');\r\n        });\r\n    }\r\n    return totalIndividualHours;\r\n};\r\nexport const recurringHours = (isLabParentLabAccount, schedules) => {\r\n    let totalRecurringHours = 0;\r\n    if (hasUnlimitedSchedule(isLabParentLabAccount, schedules)) {\r\n        return undefined;\r\n    }\r\n    if (isLabParentLabAccount) {\r\n        const recurringSchedules = schedules.filter((schedule) => isRecurring(schedule) && isStandard(isLabParentLabAccount, schedule));\r\n        recurringSchedules.forEach((schedule) => {\r\n            const cal = createIcal([schedule]);\r\n            const eventsForTimeWindow = expandEvents(cal, schedule.start, schedule.recurrencePattern.until);\r\n            const numberOfOccurrences = eventsForTimeWindow.length;\r\n            const startMom = moment(schedule.start);\r\n            const endMom = moment(schedule.end);\r\n            const duration = moment.duration(endMom.diff(startMom));\r\n            totalRecurringHours += duration.as('hours') * numberOfOccurrences;\r\n        });\r\n    }\r\n    else {\r\n        const recurringSchedules = schedules.filter((schedule) => isRecurring(schedule) && isStandard(isLabParentLabAccount, schedule));\r\n        recurringSchedules.forEach((schedule) => {\r\n            const cal = createIcalVNext([schedule]);\r\n            const eventsForTimeWindow = expandEvents(cal, schedule.startAt, schedule.recurrencePattern.expirationDate);\r\n            const numberOfOccurrences = eventsForTimeWindow.length;\r\n            const startMom = moment(schedule.startAt);\r\n            const endMom = moment(schedule.stopAt);\r\n            const duration = moment.duration(endMom.diff(startMom));\r\n            totalRecurringHours += duration.as('hours') * numberOfOccurrences;\r\n        });\r\n    }\r\n    return totalRecurringHours;\r\n};\r\nexport const calculateQuotaPerUser = (lab) => {\r\n    if (!lab) {\r\n        return 0;\r\n    }\r\n    const isVNext = isVNextLab(lab.id);\r\n    if (!isVNext) {\r\n        const usageQuota = lab.usageQuota;\r\n        return !usageQuota ? 0 : usageQuota.asHours();\r\n    }\r\n    else {\r\n        const usageQuota = lab.virtualMachineProfile?.usageQuota;\r\n        return !usageQuota ? 0 : moment.duration(usageQuota).asHours();\r\n    }\r\n};\r\nexport const calculateScheduleHoursPerUser = (isLabParentLabAccount, schedules) => {\r\n    const scheduleRecurringHours = recurringHours(isLabParentLabAccount, schedules);\r\n    if (scheduleRecurringHours === undefined) {\r\n        return undefined;\r\n    }\r\n    let hours = individualHours(isLabParentLabAccount, schedules) + scheduleRecurringHours;\r\n    if (isLabParentLabAccount) {\r\n        hours += startOnlyHours(schedules);\r\n    }\r\n    return hours;\r\n};\r\nexport const calculateHoursPerUser = (schedules, lab) => {\r\n    const quotaPerUser = calculateQuotaPerUser(lab);\r\n    const isLabParentLabAccount = !isVNextLab(lab?.id);\r\n    const scheduleHoursPerUser = calculateScheduleHoursPerUser(isLabParentLabAccount, schedules);\r\n    if (scheduleHoursPerUser === undefined) {\r\n        return undefined;\r\n    }\r\n    return quotaPerUser + scheduleHoursPerUser;\r\n};\r\nexport const calculateNumberOfUsers = (lab) => {\r\n    if (!lab) {\r\n        return 0;\r\n    }\r\n    return getLabCapacity(lab) ?? 0;\r\n};\r\nexport const calculateTotalHoursPerUser = (schedules, lab) => {\r\n    const numberOfUsers = calculateNumberOfUsers(lab);\r\n    const hoursPerUser = calculateHoursPerUser(schedules, lab);\r\n    if (hoursPerUser === undefined) {\r\n        return undefined;\r\n    }\r\n    return numberOfUsers * hoursPerUser;\r\n};\r\nexport const calculateTotalIndividualQuota = (isVNext, users) => {\r\n    const individualQuotas = !isVNext\r\n        ? users.map((user) => user && user.additionalUsageQuota ? user.additionalUsageQuota.asHours() : 0)\r\n        : users.map((user) => user && user.additionalUsageQuota ? moment.duration(user.additionalUsageQuota).asHours() : 0);\r\n    return individualQuotas.reduce((a, b) => a + b, 0);\r\n};\r\nexport const calculateTotalHoursForAllUsers = (schedules, users, lab) => {\r\n    const isVNext = isVNextLab(lab?.id);\r\n    const totalHoursPerUser = calculateTotalHoursPerUser(schedules, lab);\r\n    const totalIndividualQuota = calculateTotalIndividualQuota(isVNext, users);\r\n    if (totalHoursPerUser === undefined) {\r\n        return undefined;\r\n    }\r\n    return totalHoursPerUser + totalIndividualQuota;\r\n};\r\nexport const calculatePrice = (lab, sizeData) => {\r\n    if (!sizeData) {\r\n        return 0;\r\n    }\r\n    const isVNext = isVNextLab(lab?.id);\r\n    if (!isVNext) {\r\n        return sizeData.price;\r\n    }\r\n    else {\r\n        return !lab?.location ? 0 : sizeData.price;\r\n    }\r\n};\r\nexport const calculateTotalPrice = (schedules, users, lab, sizeData) => {\r\n    const totalHours = calculateTotalHoursForAllUsers(schedules, users, lab);\r\n    if (totalHours === undefined) {\r\n        return undefined;\r\n    }\r\n    const price = calculatePrice(lab, sizeData);\r\n    return price ? totalHours * price : undefined;\r\n};\r\nexport const getCurrencyCode = (lab, sizeData) => {\r\n    if (!sizeData) {\r\n        return DefaultCurrencyCode;\r\n    }\r\n    const isVNext = isVNextLab(lab?.id);\r\n    if (!isVNext) {\r\n        return sizeData.currencyCode;\r\n    }\r\n    else {\r\n        const currencyCode = !lab?.location ? undefined : sizeData.currency;\r\n        return currencyCode ?? DefaultCurrencyCode;\r\n    }\r\n};\r\nexport const hasUnlimitedSchedule = (isLabParentLabAccount, schedules) => {\r\n    const isVCurrentScheduleInfinitelyRecurring = (schedule) => !!schedule.recurrencePattern && !schedule.recurrencePattern.until;\r\n    const isVNextScheduleInfinitelyRecurring = (schedule) => !!schedule.recurrencePattern && !schedule.recurrencePattern.expirationDate;\r\n    const index = isLabParentLabAccount\r\n        ? schedules.findIndex((schedule) => isVCurrentScheduleInfinitelyRecurring(schedule))\r\n        : schedules.findIndex((schedule) => isVNextScheduleInfinitelyRecurring(schedule));\r\n    return index > -1;\r\n};\r\nconst sortByDate = (a, b) => {\r\n    if (moment(a).isAfter(b)) {\r\n        return 1;\r\n    }\r\n    else if (moment(b).isAfter(a)) {\r\n        return -1;\r\n    }\r\n    return 0;\r\n};\r\nconst sortByStop = (a, b) => {\r\n    if (moment(a.stop).isAfter(b.stop)) {\r\n        return 1;\r\n    }\r\n    else if (moment(b.stop).isAfter(a.stop)) {\r\n        return -1;\r\n    }\r\n    return 0;\r\n};\r\nconst isStartOnly = (schedule) => schedule.startAction.enableState === Ml.EnableState.Enabled &&\r\n    schedule.endAction.enableState === Ml.EnableState.Disabled;\r\nconst isVCurrentScheduleStopOnly = (schedule) => schedule.startAction.enableState === Ml.EnableState.Disabled &&\r\n    schedule.endAction.enableState === Ml.EnableState.Enabled;\r\nconst isStopOnly = (isLabParentLabAccount, schedule) => {\r\n    if (isLabParentLabAccount) {\r\n        return (schedule.startAction.enableState === Ml.EnableState.Disabled &&\r\n            schedule.endAction.enableState === Ml.EnableState.Enabled);\r\n    }\r\n    else {\r\n        return !!schedule.stopAt && !schedule.startAt;\r\n    }\r\n};\r\n/** Parse out start and stop events for processing later on\r\n *  Start events are added only if they come from a start only schedule\r\n *  Stop events are added if they come from a standard or stop only schedule\r\n */\r\nexport const unzipStartAndStopEvents = (schedules) => {\r\n    let allExclusiveStarts = [];\r\n    let allStops = [];\r\n    const recurringSchedules = schedules.filter((schedule) => isRecurring(schedule));\r\n    const individualSchedules = schedules.filter((schedule) => !isRecurring(schedule));\r\n    recurringSchedules.forEach((schedule) => {\r\n        const cal = createIcal([schedule]);\r\n        const eventsForTimeWindow = expandEvents(cal, schedule.start, schedule.recurrencePattern.until);\r\n        if (isStartOnly(schedule)) {\r\n            const starts = eventsForTimeWindow.map((event) => {\r\n                const start = new Date(event.startDate);\r\n                start.setHours(schedule.start.getHours(), schedule.start.getMinutes());\r\n                return start;\r\n            });\r\n            allExclusiveStarts = allExclusiveStarts.concat(starts);\r\n        }\r\n        else {\r\n            const stops = eventsForTimeWindow.map((event) => {\r\n                const stop = new Date(event.endDate);\r\n                stop.setHours(schedule.end.getHours(), schedule.end.getMinutes());\r\n                return isVCurrentScheduleStopOnly(schedule) ? { stop } : { stop, start: new Date(event.startDate) };\r\n            });\r\n            allStops = allStops.concat(stops);\r\n        }\r\n    });\r\n    individualSchedules.forEach((schedule) => {\r\n        if (isStartOnly(schedule)) {\r\n            allExclusiveStarts.push(new Date(schedule.start));\r\n        }\r\n        else {\r\n            if (isVCurrentScheduleStopOnly(schedule)) {\r\n                allStops.push({ stop: new Date(schedule.end) });\r\n            }\r\n            else {\r\n                allStops.push({ stop: new Date(schedule.end), start: new Date(schedule.start) });\r\n            }\r\n        }\r\n    });\r\n    allExclusiveStarts.sort(sortByDate);\r\n    allStops.sort(sortByStop);\r\n    return { allExclusiveStarts, allStops };\r\n};\r\n/** Given a list of schedules, determine if there is a start only event that\r\n *  causes the number of scheduled hours to be infinite\r\n */\r\nexport const hasInfiniteStartOnlySchedule = (schedules) => {\r\n    let latestStart;\r\n    let latestStop;\r\n    const { allExclusiveStarts, allStops } = unzipStartAndStopEvents(schedules);\r\n    allExclusiveStarts.forEach((start) => {\r\n        if (!latestStart || moment(start).isAfter(latestStart)) {\r\n            latestStart = new Date(start);\r\n        }\r\n    });\r\n    allStops\r\n        .map((_stop) => _stop.stop)\r\n        .forEach((stop) => {\r\n        if (!latestStop || moment(stop).isAfter(latestStop)) {\r\n            latestStop = new Date(stop);\r\n        }\r\n    });\r\n    if (!latestStart) {\r\n        return false;\r\n    }\r\n    if (!latestStop) {\r\n        return true;\r\n    }\r\n    return moment(latestStart).isAfter(latestStop);\r\n};\r\nconst isFirstStopAfterStart = (stopTime, startTime) => {\r\n    return moment(stopTime).isAfter(startTime);\r\n};\r\nconst isInMiddleOfStandardSchedule = (startTime, standardStartTime) => {\r\n    return standardStartTime ? moment(standardStartTime).isBefore(startTime) : false;\r\n};\r\nconst isStopPartOfStandardSchedule = (standardStartTime) => {\r\n    return !!standardStartTime;\r\n};\r\nconst calculateDiffererenceInHours = (startTime, endTime) => {\r\n    const startMom = moment(startTime);\r\n    const endMom = moment(endTime);\r\n    const duration = moment.duration(endMom.diff(startMom));\r\n    return duration.as('hours');\r\n};\r\nconst hasStartOnlySchedule = (schedules) => {\r\n    const index = schedules.findIndex((schedule) => isStartOnly(schedule));\r\n    return index > -1;\r\n};\r\n/** Calculates the hours in a list of schedule that are a consequence of a start only schedule\r\n *  Assumptions:\r\n *   - The list given does not contain an infinite start schedule\r\n *   - Individual and recurring hours for normal (standard) schedules are calculated elsewhere\r\n **/\r\nexport const startOnlyHours = (schedules) => {\r\n    if (!hasStartOnlySchedule(schedules)) {\r\n        return 0;\r\n    }\r\n    const { allExclusiveStarts, allStops } = unzipStartAndStopEvents(schedules);\r\n    let totalhours = 0;\r\n    allExclusiveStarts.forEach((start) => {\r\n        for (let i = 0; i < allStops.length; i++) {\r\n            if (isFirstStopAfterStart(allStops[i].stop, start)) {\r\n                if (isInMiddleOfStandardSchedule(start, allStops[i].start)) {\r\n                    totalhours += 0;\r\n                }\r\n                else if (isStopPartOfStandardSchedule(allStops[i].start)) {\r\n                    const duration = calculateDiffererenceInHours(start, allStops[i].start);\r\n                    totalhours += duration;\r\n                }\r\n                else {\r\n                    // stop only schedule\r\n                    const duration = calculateDiffererenceInHours(start, allStops[i].stop);\r\n                    totalhours += duration;\r\n                }\r\n                break;\r\n            }\r\n        }\r\n    });\r\n    return totalhours;\r\n};\r\nconst getTime = (date, locale) => {\r\n    const time = moment(date).locale(locale).format('LT');\r\n    return time.replace(' ', '').toLowerCase();\r\n};\r\nconst getDate = (date, locale) => {\r\n    return moment(date).locale(locale).format('l');\r\n};\r\nexport const isScheduleAlreadyEnded = (isLabParentLabAccount, today, schedule) => {\r\n    if (!schedule) {\r\n        return false;\r\n    }\r\n    if (isLabParentLabAccount) {\r\n        const vCurrentschedule = schedule;\r\n        if (isRecurring(schedule)) {\r\n            return hasEndDate(isLabParentLabAccount, schedule)\r\n                ? moment(vCurrentschedule.recurrencePattern.until).isBefore(today)\r\n                : false;\r\n        }\r\n        return moment(vCurrentschedule.end).isBefore(today);\r\n    }\r\n    else {\r\n        const vNextSchedule = schedule;\r\n        if (isRecurring(schedule)) {\r\n            return hasEndDate(isLabParentLabAccount, schedule)\r\n                ? moment(vNextSchedule.recurrencePattern.expirationDate).isBefore(today)\r\n                : false;\r\n        }\r\n        return moment(vNextSchedule.stopAt).isBefore(today);\r\n    }\r\n};\r\n/**\r\n * Picks 2 schedules to display, with a preference for displaying active schedules.\r\n * @param schedules is a list of sorted schedules by start date, assumed to be greater than 2 in length\r\n */\r\nexport const pickVCurrentRelevantSchedules = (today, schedules) => {\r\n    let processedSchedules = List(schedules.toArray());\r\n    let pickedSchedules = List([]);\r\n    const isLabParentLabAccount = true;\r\n    for (let i = 0, j = 0; i < schedules.count() && pickedSchedules.count() < 2; i++, j++) {\r\n        if (!!schedules.get(i) && !isScheduleAlreadyEnded(isLabParentLabAccount, today, schedules.get(i))) {\r\n            pickedSchedules = pickedSchedules.push(schedules.get(i));\r\n            processedSchedules = processedSchedules.remove(j);\r\n            j--;\r\n        }\r\n    }\r\n    // fill in schedules so we return a list of 2\r\n    // making sure to fill in the earliest schedule first\r\n    if (pickedSchedules.count() === 0 && processedSchedules.count() > 1) {\r\n        pickedSchedules = pickedSchedules.push(processedSchedules.get(0));\r\n        pickedSchedules = pickedSchedules.push(processedSchedules.get(1));\r\n    }\r\n    else if (pickedSchedules.count() === 1 && processedSchedules.count() > 0) {\r\n        pickedSchedules = pickedSchedules.unshift(processedSchedules.get(0));\r\n    }\r\n    return pickedSchedules;\r\n};\r\nexport const pickVNextRelevantSchedules = (today, schedules) => {\r\n    const isLabParentLabAccount = false;\r\n    let processedSchedules = List(schedules.toArray());\r\n    let pickedSchedules = List([]);\r\n    for (let i = 0, j = 0; i < schedules.count() && pickedSchedules.count() < 2; i++, j++) {\r\n        if (!!schedules.get(i) && !isScheduleAlreadyEnded(isLabParentLabAccount, today, schedules.get(i))) {\r\n            pickedSchedules = pickedSchedules.push(schedules.get(i));\r\n            processedSchedules = processedSchedules.remove(j);\r\n            j--;\r\n        }\r\n    }\r\n    // fill in schedules so we return a list of 2\r\n    // making sure to fill in the earliest schedule first\r\n    if (pickedSchedules.count() === 0 && processedSchedules.count() > 1) {\r\n        pickedSchedules = pickedSchedules.push(processedSchedules.get(0));\r\n        pickedSchedules = pickedSchedules.push(processedSchedules.get(1));\r\n    }\r\n    else if (pickedSchedules.count() === 1 && processedSchedules.count() > 0) {\r\n        pickedSchedules = pickedSchedules.unshift(processedSchedules.get(0));\r\n    }\r\n    return pickedSchedules;\r\n};\r\nexport const pickRelevantSchedules = (isLabParentLabAccount, today, schedules) => {\r\n    return isLabParentLabAccount\r\n        ? pickVCurrentRelevantSchedules(today, schedules)\r\n        : pickVNextRelevantSchedules(today, schedules);\r\n};\r\nexport const getReadableSchedule = (isLabParentLabAccount, schedule, intl, locale) => {\r\n    const msg = intl.formatMessage;\r\n    const start = isLabParentLabAccount\r\n        ? schedule.start\r\n        : schedule.startAt;\r\n    const end = isLabParentLabAccount ? schedule.end : schedule.stopAt;\r\n    const adjustedStart = !start ? undefined : adjustDate(start, schedule.timeZoneId);\r\n    const adjustedEnd = adjustDate(end, schedule.timeZoneId);\r\n    if (isRecurring(schedule)) {\r\n        const days = isLabParentLabAccount\r\n            ? schedule\r\n                .recurrencePattern.weekDays.map((day) => mapDayToLocaleDayShort(locale, day))\r\n                .join(', ')\r\n            : schedule\r\n                .recurrencePattern.weekDays.map((day) => mapDayToLocaleDayShort(locale, day))\r\n                .join(', ');\r\n        if (hasEndDate(isLabParentLabAccount, schedule)) {\r\n            const adjustedUntil = isLabParentLabAccount\r\n                ? adjustDate(schedule.recurrencePattern.until, schedule.timeZoneId)\r\n                : adjustDate(schedule.recurrencePattern.expirationDate, schedule.timeZoneId);\r\n            if (isLabParentLabAccount && isStartOnly(schedule)) {\r\n                return msg(messages.startOnlyRecurringWithEndDateScheduleMessage, {\r\n                    startTime: getTime(adjustedStart, locale),\r\n                    days,\r\n                    endDate: getDate(adjustedUntil, locale),\r\n                });\r\n            }\r\n            else if (isStopOnly(isLabParentLabAccount, schedule)) {\r\n                return msg(messages.stopOnlyRecurringWithEndDateScheduleMessage, {\r\n                    stopTime: getTime(adjustedEnd, locale),\r\n                    days,\r\n                    endDate: getDate(adjustedUntil, locale),\r\n                });\r\n            }\r\n            return msg(messages.standardRecurringWithEndDateScheduleMessage, {\r\n                startTime: getTime(adjustedStart, locale),\r\n                stopTime: getTime(adjustedEnd, locale),\r\n                days,\r\n                endDate: getDate(adjustedUntil, locale),\r\n            });\r\n        }\r\n        if (isLabParentLabAccount && isStartOnly(schedule)) {\r\n            return msg(messages.startOnlyRecurringWithNoEndDateScheduleMessage, {\r\n                startTime: getTime(adjustedStart, locale),\r\n                days,\r\n            });\r\n        }\r\n        else if (isStopOnly(isLabParentLabAccount, schedule)) {\r\n            return msg(messages.stopOnlyRecurringWithNoEndDateScheduleMessage, {\r\n                stopTime: getTime(adjustedEnd, locale),\r\n                days,\r\n            });\r\n        }\r\n        return msg(messages.standardRecurringWithNoEndDateScheduleMessage, {\r\n            startTime: getTime(adjustedStart, locale),\r\n            stopTime: getTime(adjustedEnd, locale),\r\n            days,\r\n        });\r\n    }\r\n    if (isLabParentLabAccount && isStartOnly(schedule)) {\r\n        return msg(messages.startOnlyNonRecurringScheduleMessage, {\r\n            startTime: getTime(adjustedStart, locale),\r\n            date: getDate(adjustedStart, locale),\r\n        });\r\n    }\r\n    else if (isStopOnly(isLabParentLabAccount, schedule)) {\r\n        return msg(messages.stopOnlyNonRecurringScheduleMessage, {\r\n            stopTime: getTime(adjustedEnd, locale),\r\n            date: getDate(adjustedEnd, locale),\r\n        });\r\n    }\r\n    return msg(messages.standardNonRecurringScheduleMessage, {\r\n        startTime: getTime(adjustedStart, locale),\r\n        stopTime: getTime(adjustedEnd, locale),\r\n        date: getDate(adjustedEnd, locale),\r\n    });\r\n};\r\nexport const getDashBoardViewModel = memoize((state) => {\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    const isReadOnly = isCurrentLabReadOnly(state);\r\n    const locale = getLocale(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    const lab = getCurrentLab(state);\r\n    const isGroupSyncModeEnabled = isLabGroupSynced(lab);\r\n    if (!isVNext) {\r\n        const templateStore = state.get('templateStore');\r\n        const scheduleStore = state.get('scheduleStore');\r\n        const envStore = state.get('environmentStore');\r\n        const userStore = state.get('userStore');\r\n        const schedulesLoadState = scheduleStore.get('loadState');\r\n        const isSchedulesLoading = storeIsLoading(schedulesLoadState);\r\n        const scheduleLoadError = scheduleStore.get('loadError');\r\n        const schedules = scheduleStore.get('schedules');\r\n        const environmentsLoadState = envStore.get('loadState');\r\n        const isEnvironmentsLoading = storeIsLoading(environmentsLoadState);\r\n        const environments = envStore.get('environments');\r\n        const environmentsLoadError = envStore.get('loadError');\r\n        const usersLoadState = userStore.get('loadState');\r\n        const isUsersLoading = storeIsLoading(usersLoadState);\r\n        const users = userStore.get('users');\r\n        const usersLoadError = userStore.get('loadError');\r\n        const templatesLoadState = templateStore.get('loadState');\r\n        const isTemplateLoading = storeIsLoading(templatesLoadState);\r\n        const templates = templateStore.get('templates');\r\n        const templateLoadError = templateStore.get('loadError');\r\n        const currentTemplate = templateStore.get('currentTemplate');\r\n        const isSaving = templateStore.get('isUpdating');\r\n        const template = convertToTemplateVm(templates, currentTemplate, isSaving);\r\n        const labPriceLoadState = getLabPricingAndAvailabilityLoadState(state);\r\n        const isPriceDataLoading = storeIsLoading(labPriceLoadState);\r\n        const sizeData = getLabPricingAndAvailabilityData(state);\r\n        const pricingError = getLabPricingAndAvailabilityLoadError(state);\r\n        return {\r\n            lab,\r\n            template,\r\n            schedules,\r\n            environments,\r\n            users,\r\n            sizeData,\r\n            isTemplateLoading,\r\n            isSchedulesLoading,\r\n            isEnvironmentsLoading,\r\n            isUsersLoading,\r\n            isPriceDataLoading,\r\n            isReadOnly,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            templateLoadError,\r\n            scheduleLoadError,\r\n            usersLoadError,\r\n            environmentsLoadError,\r\n            pricingError,\r\n            locale,\r\n            isGroupSyncModeEnabled,\r\n        };\r\n    }\r\n    else {\r\n        const lab = getCurrentLab(state);\r\n        const virtualMachineStore = state.get('vNextVirtualMachineStore');\r\n        const userStore = state.get('vNextUserStore');\r\n        const pricingAndAvailabilityStore = state.get('vNextPricingAndAvailabilityStore');\r\n        const labStore = state.get('vNextLabStore');\r\n        const scheduleStore = state.get('vNextScheduleStore');\r\n        const skuStore = state.get('vNextSkuStore');\r\n        const priceStore = state.get('vNextPriceStore');\r\n        const virtualMachinesLoadState = virtualMachineStore.get('loadState');\r\n        const isEnvironmentsLoading = storeIsLoading(virtualMachinesLoadState);\r\n        const environments = getUserVMs(state);\r\n        const environmentsLoadError = virtualMachineStore.get('loadError');\r\n        const usersLoadState = userStore.get('loadState');\r\n        const isUsersLoading = storeIsLoading(usersLoadState);\r\n        const users = userStore.get('users');\r\n        const usersLoadError = userStore.get('loadError');\r\n        const skuLoadState = skuStore.get('loadState');\r\n        const pricingAndAvailabilityLoadState = pricingAndAvailabilityStore.get('loadState');\r\n        const priceLoadState = priceStore.get('loadState');\r\n        const isPriceDataLoading = storeIsLoading(pricingAndAvailabilityLoadState) ||\r\n            storeIsLoading(skuLoadState) ||\r\n            storeIsLoading(priceLoadState);\r\n        const pricingError = pricingAndAvailabilityStore.get('error') || getVNextPriceLoadError(state);\r\n        const vNextTemplate = getTemplateVM(state);\r\n        const isSaving = labStore.get('isUpdating');\r\n        const image = getCurrentLabImage(state);\r\n        const labSku = getCurrentLabSkuInfo(state);\r\n        const template = convertVNextVirtualMachineToTemplateVm(vNextTemplate, lab, isSaving, image, labSku);\r\n        const getErrors = virtualMachineStore.get('getErrors');\r\n        const templateLoadError = getErrors.find((o) => !!template?.id && caseInsensitiveCultureInvariantCompare(o.id, template.id) === 0);\r\n        const schedulesLoadState = scheduleStore.get('loadState');\r\n        const isSchedulesLoading = storeIsLoading(schedulesLoadState);\r\n        const scheduleLoadError = scheduleStore.get('loadError');\r\n        const schedules = scheduleStore.get('schedules');\r\n        const isLabMetadataLoading = isLoadingLabMetadata(state);\r\n        return {\r\n            lab,\r\n            template,\r\n            schedules,\r\n            environments,\r\n            users,\r\n            sizeData: labSku,\r\n            isTemplateLoading: isEnvironmentsLoading || isLabMetadataLoading,\r\n            isSchedulesLoading,\r\n            isEnvironmentsLoading,\r\n            isUsersLoading,\r\n            isPriceDataLoading,\r\n            isReadOnly,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            templateLoadError,\r\n            usersLoadError,\r\n            environmentsLoadError,\r\n            pricingError,\r\n            locale,\r\n            scheduleLoadError,\r\n            isGroupSyncModeEnabled,\r\n        };\r\n    }\r\n});\r\nexport const getDashboardContainerModel = memoize((state) => {\r\n    const search = getSearch(state);\r\n    const dashboardViewModel = getDashBoardViewModel(state);\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    return {\r\n        dashboardViewModel,\r\n        search,\r\n        isVNext,\r\n    };\r\n});\r\nconst DashboardSelectors = {\r\n    getDashboardContainerModel,\r\n    getDashBoardViewModel,\r\n    individualHours,\r\n    recurringHours,\r\n    calculateQuotaPerUser,\r\n    calculateScheduleHoursPerUser,\r\n    calculateHoursPerUser,\r\n    calculateNumberOfUsers,\r\n    calculateTotalHoursPerUser,\r\n    calculateTotalIndividualQuota,\r\n    calculateTotalHoursForAllUsers,\r\n    calculatePrice,\r\n    calculateTotalPrice,\r\n    hasUnlimitedSchedule,\r\n    hasInfiniteStartOnlySchedule,\r\n    unzipStartAndStopEvents,\r\n    startOnlyHours,\r\n    getReadableSchedule,\r\n    compareByStartDate,\r\n    isFailed,\r\n    isScheduleAlreadyEnded,\r\n    pickRelevantSchedules,\r\n};\r\nexport default DashboardSelectors;\r\n","import { DirectionalHint, DocumentCard, DocumentCardLogo, DocumentCardType, Separator, Shimmer, ShimmerElementsGroup, ShimmerElementType, Stack, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, FormattedNumber, injectIntl } from 'react-intl';\r\nimport ErrorCode from '../common/error-codes';\r\nimport InfoTip from '../common/info-tip';\r\nimport { calculateHoursPerUser, calculateNumberOfUsers, calculatePrice, calculateQuotaPerUser, calculateScheduleHoursPerUser, calculateTotalHoursForAllUsers, calculateTotalHoursPerUser, calculateTotalIndividualQuota, calculateTotalPrice, getCurrencyCode, hasInfiniteStartOnlySchedule, hasUnlimitedSchedule, } from './dashboard-selectors';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport './dashboard.css';\r\nconst messages = defineMessages({\r\n    quotaHoursLabel: {\r\n        id: 'QuotaHoursCostEstimateTileLabel',\r\n        defaultMessage: 'Quota hours',\r\n        description: 'Label for quota hours on cost estimate tile',\r\n    },\r\n    scheduledHoursLabel: {\r\n        id: 'ScheduledHoursCostEstimateTileLabel',\r\n        defaultMessage: 'Scheduled hours',\r\n        description: 'Label for scheduled hours on cost estimate tile',\r\n    },\r\n    hoursPerUserLabel: {\r\n        id: 'HoursPerUserCostEstimateTileLabel',\r\n        defaultMessage: 'Hours/user',\r\n        description: 'Label for hours allocated per user on cost estimate tile',\r\n    },\r\n    maximumUsersLabel: {\r\n        id: 'MaximumUsersCostEstimateTileLabel',\r\n        defaultMessage: 'Maximum users',\r\n        description: 'Label for maximum number of users on cost estimate tile',\r\n    },\r\n    totalHoursPerUserLabel: {\r\n        id: 'TotalHoursPerUserCostEstimateTileLabel',\r\n        defaultMessage: 'Hours x users',\r\n        description: 'Label for total hours per user on cost estimate tile',\r\n    },\r\n    individualQuotaLabel: {\r\n        id: 'IndividualQuotaCostEstimateTileLabel',\r\n        defaultMessage: 'Adjusted quota',\r\n        description: 'Label for Adjusted quota on cost estimate tile',\r\n    },\r\n});\r\nconst CostEstimateLogo = () => {\r\n    return (<DocumentCardLogo logoIcon=\"Calculator\" styles={{\r\n        root: {\r\n            marginLeft: '6px',\r\n            fontSize: '30px',\r\n            lineHeight: '40px',\r\n            height: '40px',\r\n        },\r\n    }}/>);\r\n};\r\nexport const CostEstimateTitle = () => {\r\n    return (<div className=\"dashboard__cost-estimate-tile--title\">\r\n            <FormattedMessage id=\"CostEstimateTileTitle\" defaultMessage=\"Cost estimate\" description=\"Title of cost estimate tile on dashboard page\"/>\r\n        </div>);\r\n};\r\nexport const CostEstimateBreakdownColumns = (props) => {\r\n    const { individualHoursRows, aggregatedHoursRows } = props;\r\n    const getFontWeight = (row) => (row.isBold ? 600 : 'initial');\r\n    return (<Stack horizontal styles={{ root: { paddingLeft: '26px' } }}>\r\n            <Stack.Item>\r\n                <Stack>\r\n                    {individualHoursRows.map((row) => (<Stack.Item key={`container-${row.label}-${row.value}`}>\r\n                            <Stack horizontalAlign=\"space-between\" styles={{ inner: { fontWeight: row.isBold ? 600 : 'initial' } }} horizontal>\r\n                                <Stack.Item key={row.label} styles={{ root: { paddingRight: '10px', fontWeight: getFontWeight(row) } }}>\r\n                                    {row.label}\r\n                                </Stack.Item>\r\n                                <Stack.Item key={`${row.label}-${row.value}`} styles={{ root: { fontWeight: getFontWeight(row) } }}>\r\n                                    <div style={{ textAlign: 'left', width: '20px' }}>{row.value}</div>\r\n                                </Stack.Item>\r\n                            </Stack>\r\n                        </Stack.Item>))}\r\n                </Stack>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <Stack styles={{ root: { paddingLeft: '70px' } }}>\r\n                    {aggregatedHoursRows.map((row) => (<Stack.Item key={`container-${row.label}-${row.value}`}>\r\n                            <Stack horizontalAlign=\"space-between\" horizontal>\r\n                                <Stack.Item key={row.label} styles={{ root: { paddingRight: '10px', fontWeight: getFontWeight(row) } }}>\r\n                                    {row.label}\r\n                                </Stack.Item>\r\n                                <Stack.Item key={`${row.label}-${row.value}`} styles={{ root: { fontWeight: getFontWeight(row) } }}>\r\n                                    <div style={{ textAlign: 'left', width: '30px' }}>{row.value}</div>\r\n                                </Stack.Item>\r\n                            </Stack>\r\n                        </Stack.Item>))}\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nconst CostEstimateBreakdownInjected = (props) => {\r\n    const { intl, lab, schedules, users } = props;\r\n    const isLabParentLabAccount = !isVNextLab(lab?.id);\r\n    if (hasUnlimitedSchedule(isLabParentLabAccount, schedules)) {\r\n        return (<div style={{ marginLeft: '26px', marginTop: '20px', fontWeight: 600 }}>\r\n                <FormattedMessage id=\"CostEstimateTileUnlimitedEventText\" defaultMessage=\"This lab contains an unlimited event.\" description=\"Text in cost estimate tile indicating that the lab contains an unlimited schedule\"/>\r\n                <div>\r\n                    <FormattedMessage id=\"CostEstimateTileUnlimitedEventExplanation\" defaultMessage=\"The current cost estimate is unlimited. Please modify this for an estimate.\" description=\"Text explaining that a cost estimate cannot be made for an unlimited event.\"/>\r\n                </div>\r\n            </div>);\r\n    }\r\n    if (isLabParentLabAccount && hasInfiniteStartOnlySchedule(schedules)) {\r\n        return (<div style={{ marginLeft: '26px', marginTop: '20px', fontWeight: 600 }}>\r\n                <FormattedMessage id=\"CostEstimateTileStartOnlyEventText\" defaultMessage=\"This lab contains a start-only scheduled event.\" description=\"Text in cost estimate tile indicating that the lab contains a start only schedule\"/>\r\n                <div>\r\n                    <FormattedMessage id=\"CostEstimateTileStartOnlyExplanation\" defaultMessage=\"The current cost estimate is unlimited. Please add an event with a stop action or remove this for an estimate.\" description=\"Text explaining that a cost estimate cannot be made for a start only event without another stop action.\"/>\r\n                </div>\r\n            </div>);\r\n    }\r\n    const quotaHoursLabel = intl.formatMessage(messages.quotaHoursLabel);\r\n    const scheduledHoursLabel = intl.formatMessage(messages.scheduledHoursLabel);\r\n    const hoursPerUserLabel = intl.formatMessage(messages.hoursPerUserLabel);\r\n    const usersLabel = intl.formatMessage(messages.maximumUsersLabel);\r\n    const totalHoursPerUserLabel = intl.formatMessage(messages.totalHoursPerUserLabel);\r\n    const individualQuotaLabel = intl.formatMessage(messages.individualQuotaLabel);\r\n    const individualHoursRows = [\r\n        {\r\n            label: quotaHoursLabel,\r\n            value: <FormattedNumber value={calculateQuotaPerUser(lab)} maximumFractionDigits={2}/>,\r\n        },\r\n        {\r\n            label: scheduledHoursLabel,\r\n            value: (<FormattedNumber value={calculateScheduleHoursPerUser(isLabParentLabAccount, schedules)} maximumFractionDigits={2}/>),\r\n        },\r\n        {\r\n            label: hoursPerUserLabel,\r\n            value: <FormattedNumber value={calculateHoursPerUser(schedules, lab)} maximumFractionDigits={2}/>,\r\n            isBold: true,\r\n        },\r\n    ];\r\n    const isVNext = isVNextLab(lab?.id);\r\n    const numberOfUsers = calculateNumberOfUsers(lab);\r\n    const aggregatedHoursRows = [\r\n        {\r\n            label: usersLabel,\r\n            value: numberOfUsers || isVNext ? <FormattedNumber value={numberOfUsers} maximumFractionDigits={2}/> : '--',\r\n        },\r\n        {\r\n            label: totalHoursPerUserLabel,\r\n            value: <FormattedNumber value={calculateTotalHoursPerUser(schedules, lab)} maximumFractionDigits={2}/>,\r\n            isBold: true,\r\n        },\r\n        {\r\n            label: individualQuotaLabel,\r\n            value: <FormattedNumber value={calculateTotalIndividualQuota(isVNext, users)} maximumFractionDigits={2}/>,\r\n        },\r\n    ];\r\n    return (<CostEstimateBreakdownColumns individualHoursRows={individualHoursRows} aggregatedHoursRows={aggregatedHoursRows}/>);\r\n};\r\nexport const CostEstimateBreakdown = injectIntl(CostEstimateBreakdownInjected);\r\nexport const CostEstimateCalculation = (props) => {\r\n    const { schedules, lab, users, sizeData } = props;\r\n    const isLabParentLabAccount = !isVNextLab(lab?.id);\r\n    if (hasUnlimitedSchedule(isLabParentLabAccount, schedules) ||\r\n        (isLabParentLabAccount && hasInfiniteStartOnlySchedule(schedules))) {\r\n        return null;\r\n    }\r\n    const totalHours = calculateTotalHoursForAllUsers(schedules, users, lab);\r\n    const price = calculatePrice(lab, sizeData);\r\n    const currency = getCurrencyCode(lab, sizeData);\r\n    return (<div style={{ padding: '5px 0px 0px 26px', fontWeight: 600 }}>\r\n            <FormattedMessage id=\"TotalEstimatedCost\" defaultMessage=\"{totalHours} total hours x {price}/hour\" description=\"Estimated cost of the lab. {totalHours} is the total amount of billable hours, {price} is amount of US dollars\" values={{\r\n        totalHours: <FormattedNumber value={totalHours ? totalHours : 0} maximumFractionDigits={2}/>,\r\n        price: price === undefined ? ('--') : (<FormattedNumber value={price} style=\"currency\" currency={currency} maximumFractionDigits={2}/>),\r\n    }}/>\r\n        </div>);\r\n};\r\nexport const CostEstimateTotalCost = (props) => {\r\n    const { schedules, lab, users, sizeData } = props;\r\n    const totalCost = calculateTotalPrice(schedules, users, lab, sizeData);\r\n    if (totalCost === undefined || (!isVNextLab(lab?.id) && hasInfiniteStartOnlySchedule(schedules))) {\r\n        return <div style={{ paddingBottom: '10px', fontWeight: 600, fontSize: '28px' }}>--</div>;\r\n    }\r\n    const currency = getCurrencyCode(lab, sizeData);\r\n    return (<div style={{ paddingBottom: '10px', fontWeight: 600, fontSize: '28px' }}>\r\n            <FormattedNumber value={totalCost} style=\"currency\" currency={currency} maximumFractionDigits={2}/>\r\n        </div>);\r\n};\r\nconst CostEstimateTotalCostDescription = () => {\r\n    return (<div style={{ width: '163px', lineHeight: '20px', paddingBottom: '3px', fontSize: '14px' }}>\r\n            <FormattedMessage id=\"TotalEstimatedCostDescription\" defaultMessage=\"estimated maximum cost for this lab with current settings*\" description=\"Description given below total price of lab.  This string is supplemented with string with id 'CostEstimateExclusionMessage' in another part on the same page\"/>\r\n        </div>);\r\n};\r\nconst CostEstimateHeaderShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 150, height: 21 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.circle, height: 30 },\r\n    { type: ShimmerElementType.gap, width: 15 },\r\n    { type: ShimmerElementType.line, width: 97, height: 16 },\r\n    { type: ShimmerElementType.gap, width: 100 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 150, height: 19 }]}/>\r\n    </>);\r\nconst CostEstimateBreakdownShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 400, height: 5 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25, height: 10 },\r\n    { type: ShimmerElementType.line, width: 173, height: 14 },\r\n    { type: ShimmerElementType.gap, width: 42 },\r\n    { type: ShimmerElementType.line, width: 173, height: 14 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 400, height: 3 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 173, height: 14 },\r\n    { type: ShimmerElementType.gap, width: 42 },\r\n    { type: ShimmerElementType.line, width: 173, height: 14 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 400, height: 3 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 173, height: 14 },\r\n    { type: ShimmerElementType.gap, width: 42 },\r\n    { type: ShimmerElementType.line, width: 173, height: 14 },\r\n]}/>\r\n    </>);\r\nconst CostEstimateTotalCostShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 144, height: 2 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.line, width: 144, height: 31 },\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 144, height: 16 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.line, width: 144, height: 14 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 144, height: 6 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.line, width: 144, height: 14 }]}/>\r\n    </>);\r\nconst CostEstimateCalculationShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 200, height: 6 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 200, height: 14 },\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 200, height: 3 }]}/>\r\n    </>);\r\nconst CostEstimateCalculationDescriptionShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.line, width: 320, height: 14 },\r\n    { type: ShimmerElementType.gap, width: 30 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 350, height: 8 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.line, width: 350, height: 14 }]}/>\r\n\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 350, height: 8 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.line, width: 100, height: 14 },\r\n    { type: ShimmerElementType.gap, width: 250 },\r\n]}/>\r\n    </>);\r\nconst CostEstimateTileInjected = (props) => {\r\n    const { lab, schedules, users, sizeData, pricingError, isTemplateLoading, isUsersLoading, isSchedulesLoading, isPriceDataLoading, } = props;\r\n    const isDataLoaded = !isTemplateLoading && !isUsersLoading && !isSchedulesLoading && !isPriceDataLoading;\r\n    const isLabParentLabAccount = !isVNextLab(lab?.id);\r\n    let hasUnlimitedCost = hasUnlimitedSchedule(isLabParentLabAccount, schedules);\r\n    if (isLabParentLabAccount) {\r\n        hasUnlimitedCost = hasUnlimitedCost || hasInfiniteStartOnlySchedule(schedules);\r\n    }\r\n    const calloutContent = (<span style={{ display: 'block', margin: '17px 28px 37px 28px', fontSize: '12px' }}>\r\n            <span style={{ display: 'block', fontWeight: 600, fontSize: '20px', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"CostEstimateDetailsCalloutTitle\" defaultMessage=\"Cost estimate details\" description=\"Title of cost estimate details callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"QuotaHoursExplanationCallout\" defaultMessage=\"Quota hours: The maximum number of hours a user can use the VM outside the scheduled hours.\" description=\"Description of quota hours on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"ScheduledHoursExplanationCallout\" defaultMessage=\"Scheduled hours: Hours that will be incurred based on the schedule set in the lab. This value is only available if there is a from/to date set on all the schedule events.\" description=\"Description of scheduled hours on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"HoursPerUserExplanationCallout\" defaultMessage=\"Hours/User: The sum of quota hours and scheduled hours.\" description=\"Description of hours per user on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"UsersExplanationCallout\" defaultMessage=\"Users: Maximum number of users in the lab based on all virtual machines to be claimed.\" description=\"Description of users on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"TotalhoursPerUserExplanationCallout\" defaultMessage=\"Hours x users: Hours/user multiplied by the number of users.\" description=\"Description of total hours per user on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"IndividualQuotaExplanationCallout\" defaultMessage=\"Adjusted quota: The sum of the quota hours added to specific users.\" description=\"Description of Adjusted quota on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block', marginBottom: '10px' }}>\r\n                <FormattedMessage id=\"PricePerHourExplanationCallout\" defaultMessage=\"$/hour: The cost per hour based on the VM size selected. This is based on the regular pay as you go price.\" description=\"Description of price per hour on cost estimate callout\"/>\r\n            </span>\r\n            <span style={{ display: 'block' }}>\r\n                <FormattedMessage id=\"TotalEstimatedCostExplanationCallout\" defaultMessage=\"Total estimated cost: This is the maximum price for this lab based on current settings.\" description=\"Description of total estimated cost on cost estimate callout\"/>\r\n            </span>\r\n        </span>);\r\n    return (<DocumentCard type={DocumentCardType.normal} styles={{\r\n        root: {\r\n            marginRight: '18px',\r\n            marginLeft: '31px',\r\n            marginTop: '22px',\r\n            width: '678px',\r\n            maxWidth: '678px',\r\n            minHeight: '285px',\r\n            display: 'inline-flex',\r\n            flex: '0 0',\r\n            flexDirection: 'column',\r\n            border: '1px solid transparent',\r\n            boxShadow: '0px 1.2px 3.6px rgba(0, 0, 0, 0.108), 0px 6.4px 14.4px rgba(0, 0, 0, 0.132)',\r\n            borderRadius: '2px',\r\n        },\r\n    }}>\r\n            <Stack styles={{ root: { paddingBottom: '20px' } }}>\r\n                <Stack.Item>\r\n                    <Stack horizontal styles={{\r\n        root: { fontSize: '14px', marginTop: '5px', height: '100%' },\r\n    }}>\r\n                        <Stack.Item>\r\n                            <Stack styles={{ root: { width: '398px' } }}>\r\n                                <Stack.Item>\r\n                                    <Shimmer width={150} isDataLoaded={isDataLoaded} customElementsGroup={CostEstimateHeaderShimmer}>\r\n                                        <Stack horizontal>\r\n                                            <Stack.Item>\r\n                                                <CostEstimateLogo />\r\n                                            </Stack.Item>\r\n                                            <Stack.Item>\r\n                                                <CostEstimateTitle />\r\n                                            </Stack.Item>\r\n                                            <Stack.Item>\r\n                                                <InfoTip content={calloutContent} calloutProps={{ gapSpace: 10 }} directionalHint={DirectionalHint.rightTopEdge} iconStyles={{\r\n        root: {\r\n            marginTop: '29px',\r\n            marginLeft: '0px',\r\n            paddingLeft: '8px',\r\n        },\r\n    }}/>\r\n                                            </Stack.Item>\r\n                                        </Stack>\r\n                                    </Shimmer>\r\n                                </Stack.Item>\r\n                                <Stack.Item>\r\n                                    <Shimmer customElementsGroup={CostEstimateBreakdownShimmer} isDataLoaded={isDataLoaded} width={400}>\r\n                                        {!sizeData && (<div id=\"cost-estimate-tile-error-message\">\r\n                                                {pricingError &&\r\n        pricingError.code === ErrorCode.AuthorizationFailed && (<FormattedMessage id=\"LabPricingLoadAuthorizationFailedError\" defaultMessage=\"You do not currently have permission to view lab pricing information.\" description=\"Message indicating there was a problem loading pricing data due to user permissions.\"/>)}\r\n                                                {!pricingError ||\r\n        (pricingError.code !== ErrorCode.AuthorizationFailed && (<FormattedMessage id=\"LabPricingLoadError\" defaultMessage=\"There was an issue loading pricing information for this lab. Cost estimates are unavailable.\" description=\"Message indicating there was a problem loading pricing data.\"/>))}\r\n                                            </div>)}\r\n                                        {!!sizeData && (<CostEstimateBreakdown lab={lab} schedules={schedules} users={users}/>)}\r\n                                    </Shimmer>\r\n                                </Stack.Item>\r\n                                {(!isDataLoaded || !!sizeData) && !hasUnlimitedCost && (<Stack.Item>\r\n                                        <Separator styles={{\r\n        root: {\r\n            color: '#EDEBE9',\r\n            lineHeight: '1px',\r\n            paddingTop: '15px',\r\n            marginLeft: '26px',\r\n            width: '398px',\r\n        },\r\n    }}/>\r\n                                    </Stack.Item>)}\r\n                                <Stack.Item>\r\n                                    <Shimmer width={200} styles={{ root: { height: '24px' } }} isDataLoaded={isDataLoaded} customElementsGroup={CostEstimateCalculationShimmer}>\r\n                                        {!!sizeData && (<CostEstimateCalculation lab={lab} schedules={schedules} users={users} sizeData={sizeData}/>)}\r\n                                    </Shimmer>\r\n                                </Stack.Item>\r\n                                <Stack.Item styles={{ root: { padding: '20px 0px 0px 26px' } }}>\r\n                                    <Shimmer width={350} isDataLoaded={isDataLoaded} customElementsGroup={CostEstimateCalculationDescriptionShimmer}>\r\n                                        <div>\r\n                                            {!!sizeData && (<FormattedMessage id=\"CostEstimateCalculationDescription\" defaultMessage=\"<span>This is not a complete estimate for the lab, and only shows costs from student usage.</span> Lab owner usage is not shown here.\" description=\"Description about the total estimation of cost.\" values={{\r\n        span: (chunks) => (<span style={{ fontWeight: 600 }}>{chunks}</span>),\r\n    }}/>)}\r\n                                        </div>\r\n                                    </Shimmer>\r\n                                </Stack.Item>\r\n                            </Stack>\r\n                        </Stack.Item>\r\n                        <Stack.Item>\r\n                            <Stack verticalAlign=\"center\" styles={{ root: { paddingLeft: '60px' } }} verticalFill>\r\n                                <Stack.Item>\r\n                                    <Shimmer width={144} styles={{ root: { height: '81px' } }} isDataLoaded={isDataLoaded} customElementsGroup={CostEstimateTotalCostShimmer}>\r\n                                        {!!sizeData && (<>\r\n                                                <CostEstimateTotalCost lab={lab} schedules={schedules} users={users} sizeData={sizeData}/>\r\n                                                <CostEstimateTotalCostDescription />\r\n                                            </>)}\r\n                                    </Shimmer>\r\n                                </Stack.Item>\r\n                            </Stack>\r\n                        </Stack.Item>\r\n                    </Stack>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </DocumentCard>);\r\n};\r\nconst CostEstimateTile = injectIntl(CostEstimateTileInjected);\r\nexport default CostEstimateTile;\r\n","import { injectIntl, FormattedMessage } from 'react-intl';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport commonMessages from '../language/common-messages';\r\nimport './dashboard.css';\r\nconst DashboardErrorBannerInjected = (props) => {\r\n    const { templateLoadError, scheduleLoadError, usersLoadError, environmentsLoadError, clearTemplateError, clearScheduleError, clearUsersError, clearEnvironmentError, } = props;\r\n    const closeLabel = props.intl.formatMessage(commonMessages.close);\r\n    return (<>\r\n            {templateLoadError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={closeLabel} onDismiss={() => clearTemplateError()}>\r\n                    <FormattedMessage id=\"DashboardTemplateLoadError\" defaultMessage=\"There was an error loading template information, so cost estimates displayed below may not be accurate.\" description=\"Message on error banner indicating there was a problem loading the template\"/>\r\n                </MessageBar>)}\r\n            {scheduleLoadError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={closeLabel} onDismiss={() => clearScheduleError()}>\r\n                    <FormattedMessage id=\"DashboardScheduleLoadError\" defaultMessage=\"There was an error loading schedule information, so cost estimates displayed below may not be accurate.\" description=\"Message on error banner indicating there was a problem loading schedules\"/>\r\n                </MessageBar>)}\r\n            {usersLoadError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={closeLabel} onDismiss={() => clearUsersError()}>\r\n                    <FormattedMessage id=\"DashboardUsersLoadError\" defaultMessage=\"There was an error loading user information, so cost estimates displayed below may not be accurate.\" description=\"Message on error banner indicating there was a problem loading users\"/>\r\n                </MessageBar>)}\r\n            {environmentsLoadError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={closeLabel} onDismiss={() => clearEnvironmentError()}>\r\n                    <FormattedMessage id=\"DashboardEnvironmentsLoadError\" defaultMessage=\"There was an error loading environment information, so cost estimates displayed below may not be accurate.\" description=\"Message on error banner indicating there was a problem loading environments\"/>\r\n                </MessageBar>)}\r\n        </>);\r\n};\r\nexport const DashboardErrorBanner = injectIntl(DashboardErrorBannerInjected);\r\n","import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';\r\nimport * as React from 'react';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nconst messages = defineMessages({\r\n    dashboardPageErrorMessageDetails: {\r\n        id: 'DashboardPageErrorMessageDetails',\r\n        defaultMessage: 'The lab or template is in a failed state.',\r\n        description: 'Error details for dashboard error page when lab or template is in a failed state',\r\n    },\r\n});\r\nconst DashboardErrorPageInjected = (props) => {\r\n    const msg = props.intl.formatMessage;\r\n    return (<FullPageMessage image=\"error-failed\" message={<FormattedMessage id=\"DashboardLoadError\" defaultMessage=\"Cannot load dashboard\" description=\"Error shown on dashboard page when the lab or template is in a failed state.\"/>} messageDetails={msg(messages.dashboardPageErrorMessageDetails)}/>);\r\n};\r\nconst DashboardErrorPage = injectIntl(DashboardErrorPageInjected);\r\nexport default DashboardErrorPage;\r\n","import { defineMessages } from 'react-intl';\r\nexport const templateMessages = defineMessages({\r\n    templatePageTitle: {\r\n        id: 'TemplatePageTitle',\r\n        defaultMessage: 'Template',\r\n        description: 'Title for page indicating this is the template page',\r\n    },\r\n    exportToSharedImageGallery: {\r\n        id: 'ExportToSharedImageGallery',\r\n        defaultMessage: 'Export to Azure Compute Gallery',\r\n        description: 'Text for exporting the template to Azure Compute Gallery.',\r\n    },\r\n    publishTemplate: {\r\n        id: 'PublishTemplate',\r\n        defaultMessage: 'Publish',\r\n        description: 'Text on command bar button to publish the template.',\r\n    },\r\n    templateUnpublishedTooltipText: {\r\n        id: 'TemplateUnpublishedTooltipText',\r\n        defaultMessage: 'An unpublished template is not visible to users in the lab. Publishing provides a copy for each user. The template can be published again after it is published once, but this will delete any changes made by the users to their copies.',\r\n        description: 'Text on tooltip for info icon next to unpublished status',\r\n    },\r\n    templateUnpublishedStatus: {\r\n        id: 'TemplateUnpublishedStatus',\r\n        defaultMessage: 'Unpublished',\r\n        description: 'Text to indicate template is is not published',\r\n    },\r\n    templateGpuDriverInstallationFailed: {\r\n        id: 'TemplateGpuDriverInstallationFailed',\r\n        defaultMessage: 'Installation of GPU drivers failed.',\r\n        description: 'Text to indicate installation of GPU drivers failed.',\r\n    },\r\n    templateGpuDriverInstallationMissing: {\r\n        id: 'TemplateGpuDriverInstallationMissing',\r\n        defaultMessage: 'GPU drivers must be installed manually on the template virtual machine.',\r\n        description: 'Text to indicate installation of GPU drivers need to be manually added.',\r\n    },\r\n    templateGpuDriverMoreInfo: {\r\n        id: 'templateGpuDriverMoreInfo',\r\n        defaultMessage: 'Please install the drivers manually.',\r\n        description: 'Text of a link navigating to a page with more information.',\r\n    },\r\n    templateGpuDriverLearnMore: {\r\n        id: 'templateGpuDriverLearnMore',\r\n        defaultMessage: 'Learn more',\r\n        description: 'Text of a link navigating to a page with more information.',\r\n    },\r\n    twentyMinutesFormatted: {\r\n        id: 'twentyMinutesFormatted',\r\n        defaultMessage: '20 minutes',\r\n        description: 'Message to indicate 20 minutes',\r\n    },\r\n    oneHourFormatted: {\r\n        id: 'OneHourFormatted',\r\n        defaultMessage: '1 hour',\r\n        description: 'Message to indicate 1 hour',\r\n    },\r\n});\r\nexport default templateMessages;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { ActionButton, DocumentCard, DocumentCardLogo, DocumentCardTitle, DocumentCardType, Icon, Separator, Shimmer, ShimmerElementsGroup, ShimmerElementType, Stack, getTheme, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedDate, injectIntl } from 'react-intl';\r\nimport InfoTip from '../common/info-tip';\r\nimport templateMessages from '../template/template-messages';\r\nimport { trackEvent } from '../utils/telemetry/telemetry-channel';\r\nimport { compareByStartDate, compareVNextScheduleByDate, getReadableSchedule, pickRelevantSchedules, } from './dashboard-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport './dashboard.css';\r\nconst messages = defineMessages({\r\n    lastPublishedTemplateDashboard: {\r\n        id: 'LastPublishedTemplateDashboard',\r\n        defaultMessage: 'Last published',\r\n        description: 'Label for last published date of template',\r\n    },\r\n    createdTemplateDashboard: {\r\n        id: 'CreatedTemplateDashboard',\r\n        defaultMessage: 'Created',\r\n        description: 'Label for created date of template',\r\n    },\r\n    changedSinceLastPublishTemplateDashboard: {\r\n        id: 'ChangedSinceLastPublishTemplateDashboard',\r\n        defaultMessage: 'Changed since last publish',\r\n        description: 'Message on template tile that the template has been changed since the last publish',\r\n    },\r\n    manageTemplateDashboardButton: {\r\n        id: 'ManageTemplateDashboardButton',\r\n        defaultMessage: 'Manage template',\r\n        description: 'Label for manage template button on template section of dashboard page',\r\n    },\r\n    viewTemplateDashboardButton: {\r\n        id: 'ViewTemplateDashboardButton',\r\n        defaultMessage: 'View template',\r\n        description: 'Label for the view template button for read-only labs on the template section of the dashboard page',\r\n    },\r\n    assignedVmsDashboard: {\r\n        id: 'AssignedVmsDashboard',\r\n        defaultMessage: 'Assigned virtual machines',\r\n        description: 'Label for assigned virtual machines',\r\n    },\r\n    unassignedVmsDashboard: {\r\n        id: 'UnassignedVmsDashboard',\r\n        defaultMessage: 'Unassigned virtual machines',\r\n        description: 'Label for unassigned virtual machines',\r\n    },\r\n    manageVirtualMachinesDashboardButton: {\r\n        id: 'ManageVirtualMachinesDashboardButton',\r\n        defaultMessage: 'Manage virtual machines',\r\n        description: 'Label for manage virtual machines button on virtual machines section of dashboard page',\r\n    },\r\n    viewVirtualMachinesDashboardButton: {\r\n        id: 'ViewVirtualMachinesDashboardButton',\r\n        defaultMessage: 'View virtual machines',\r\n        description: 'Label for the view virtual machines button for read-only labs on virtual machines section of the dashboard page',\r\n    },\r\n    virtualMachinePoolDashboardSectionTitle: {\r\n        id: 'VirtualMachinePoolDashboardSectionTitle',\r\n        defaultMessage: 'Virtual machine pool',\r\n        description: 'Label for Virtual Machine pool section on dashboard page',\r\n    },\r\n    registeredUsersDashboard: {\r\n        id: 'RegisteredUsersDashboard',\r\n        defaultMessage: 'Registered users',\r\n        description: 'Label for registered users',\r\n    },\r\n    unregisteredUsersDashboard: {\r\n        id: 'UnregisteredUsersDashboard',\r\n        defaultMessage: 'Unregistered users',\r\n        description: 'Label for unregistered users',\r\n    },\r\n    manageUsersDashboardButton: {\r\n        id: 'ManageUsersDashboardButton',\r\n        defaultMessage: 'Invite and manage users',\r\n        description: 'Label for manage users button on users section of dashboard page',\r\n    },\r\n    teamsManageUsersDashboardButton: {\r\n        id: 'TeamsManageUsersDashboardButton',\r\n        defaultMessage: 'Manage users',\r\n        description: 'Label for manage users button on users section of dashboard page when in Teams mode',\r\n    },\r\n    viewUsersDashboardButton: {\r\n        id: 'ViewUsersDashboardButton',\r\n        defaultMessage: 'View users',\r\n        description: 'Label for the view users button for read-only labs on users section of the dashboard page',\r\n    },\r\n    usersDashboardSectionTitle: {\r\n        id: 'UsersDashboardSectionTitle',\r\n        defaultMessage: 'Users',\r\n        description: 'Label for Users section on dashboard page',\r\n    },\r\n    setLabSchedulesButton: {\r\n        id: 'SetLabSchedulesButton',\r\n        defaultMessage: 'Set lab schedules',\r\n        description: 'Label for set lab schedules button on schedules section of dashboard page',\r\n    },\r\n    viewLabSchedulesButton: {\r\n        id: 'ViewLabSchedulesButton',\r\n        defaultMessage: 'View lab schedules',\r\n        description: 'Label for the view lab schedules button for read-only labs on the schedules section of the dashboard page',\r\n    },\r\n    schedulesDashboardSectionTitle: {\r\n        id: 'SchedulesDashboardSectionTitle',\r\n        defaultMessage: 'Schedules',\r\n        description: 'Label for Schedules section on dashboard page',\r\n    },\r\n    scheduleTileNoScheduledEvents: {\r\n        id: 'ScheduleTileNoScheduledEvents',\r\n        defaultMessage: 'No scheduled events',\r\n        description: 'Message on schedule tile on dashboard when there are no scheduled events',\r\n    },\r\n    scheduleTileAdditionalScheduledEvents: {\r\n        id: 'ScheduleTileAdditionalScheduledEvents',\r\n        defaultMessage: '+{numEvents} more scheduled event(s)',\r\n        description: 'Message on schedule tile on dashboard when there are {numEvents} more scheduled events not listed in the tile.',\r\n    },\r\n});\r\nconst ScheduleOverviewCardInjected = (props) => {\r\n    const { schedules, intl, isLoading, isReadOnly, locale, navigateRoute, labId } = props;\r\n    const msg = intl.formatMessage;\r\n    const info = [];\r\n    const isLabParentLabAccount = !isVNextLab(labId);\r\n    const sortedSchedules = isLabParentLabAccount\r\n        ? schedules.filter((s) => !!s).sort(compareByStartDate)\r\n        : schedules.filter((s) => !!s).sort(compareVNextScheduleByDate);\r\n    if (sortedSchedules.count() !== schedules.count()) {\r\n        let scheduleString = '';\r\n        try {\r\n            scheduleString = JSON.stringify(schedules);\r\n        }\r\n        catch (e) {\r\n            // do nothing\r\n        }\r\n        trackEvent('NULL_SCHEDULE', { schedules: scheduleString });\r\n    }\r\n    if (sortedSchedules.count() === 0) {\r\n        info.push({ value: msg(messages.scheduleTileNoScheduledEvents) });\r\n    }\r\n    else if (sortedSchedules.count() === 1) {\r\n        const summary = getReadableSchedule(isLabParentLabAccount, sortedSchedules.get(0), intl, locale);\r\n        info.push({ value: summary, tooltip: summary });\r\n    }\r\n    else if (sortedSchedules.count() === 2) {\r\n        const summary1 = getReadableSchedule(isLabParentLabAccount, sortedSchedules.get(0), intl, locale);\r\n        const summary2 = getReadableSchedule(isLabParentLabAccount, sortedSchedules.get(1), intl, locale);\r\n        info.push({ value: summary1, tooltip: summary1 });\r\n        info.push({ value: summary2, tooltip: summary2 });\r\n    }\r\n    else {\r\n        const pickedSchedules = pickRelevantSchedules(isLabParentLabAccount, new Date(), sortedSchedules);\r\n        const summary1 = getReadableSchedule(isLabParentLabAccount, pickedSchedules.get(0), intl, locale);\r\n        const summary2 = getReadableSchedule(isLabParentLabAccount, pickedSchedules.get(1), intl, locale);\r\n        info.push({ value: summary1, tooltip: summary1 });\r\n        info.push({ value: summary2, tooltip: summary2 });\r\n        info.push({\r\n            value: msg(messages.scheduleTileAdditionalScheduledEvents, { numEvents: sortedSchedules.count() - 2 }),\r\n        });\r\n    }\r\n    return (<OverviewCard labId={labId} infoSingleColumn={info} title={msg(messages.schedulesDashboardSectionTitle)} iconName=\"DateTime\" buttonText={isReadOnly ? msg(messages.viewLabSchedulesButton) : msg(messages.setLabSchedulesButton)} isLoading={isLoading} navigateRoute={navigateRoute}/>);\r\n};\r\nexport const ScheduleOverviewCard = injectIntl(ScheduleOverviewCardInjected);\r\nconst UsersOverviewCardInjected = (props) => {\r\n    const { isVNext, users, intl, isLoading, isReadOnly, isGroupSyncModeEnabled, navigateRoute, labId } = props;\r\n    const title = intl.formatMessage(messages.usersDashboardSectionTitle);\r\n    const buttonText = isReadOnly\r\n        ? intl.formatMessage(messages.viewUsersDashboardButton)\r\n        : isGroupSyncModeEnabled\r\n            ? intl.formatMessage(messages.teamsManageUsersDashboardButton)\r\n            : intl.formatMessage(messages.manageUsersDashboardButton);\r\n    const registered = intl.formatMessage(messages.registeredUsersDashboard);\r\n    const unregistered = intl.formatMessage(messages.unregisteredUsersDashboard);\r\n    const isRegistered = (user) => {\r\n        return user.registrationState === Ml.RegistrationState.Registered;\r\n    };\r\n    const isVNextUserRegistered = (user) => {\r\n        return user.registrationState === LabServicesModels.RegistrationState.Registered;\r\n    };\r\n    const unregisteredCount = !isVNext\r\n        ? users.filter((user) => !isRegistered(user)).count()\r\n        : users.filter((user) => !isVNextUserRegistered(user)).count();\r\n    const registeredCount = !isVNext\r\n        ? users.filter((user) => isRegistered(user)).count()\r\n        : users.filter((user) => isVNextUserRegistered(user)).count();\r\n    const info = [\r\n        { label: registered, value: registeredCount },\r\n        { label: unregistered, value: unregisteredCount },\r\n    ];\r\n    return (<OverviewCard labId={labId} info={info} title={title} iconName=\"People\" buttonText={buttonText} isLoading={isLoading} navigateRoute={navigateRoute}/>);\r\n};\r\nexport const UsersOverviewCard = injectIntl(UsersOverviewCardInjected);\r\nconst VmPoolOverviewCardInjected = (props) => {\r\n    const { isVNext, environments, intl, isLoading, isReadOnly, navigateRoute, labId } = props;\r\n    const title = intl.formatMessage(messages.virtualMachinePoolDashboardSectionTitle);\r\n    const buttonText = isReadOnly\r\n        ? intl.formatMessage(messages.viewVirtualMachinesDashboardButton)\r\n        : intl.formatMessage(messages.manageVirtualMachinesDashboardButton);\r\n    const assigned = intl.formatMessage(messages.assignedVmsDashboard);\r\n    const unassigned = intl.formatMessage(messages.unassignedVmsDashboard);\r\n    const isClaimed = (env) => !!env.claimedByUserPrincipalId;\r\n    const isVNextVmClaimed = (vm) => !!vm.claimedByUserId;\r\n    const unassignedVmCount = !isVNext\r\n        ? environments.filter((env) => !isClaimed(env)).count()\r\n        : environments.filter((vm) => !isVNextVmClaimed(vm)).count();\r\n    const assignedVmCount = !isVNext\r\n        ? environments.filter((env) => isClaimed(env)).count()\r\n        : environments.filter((vm) => isVNextVmClaimed(vm)).count();\r\n    const info = [\r\n        { label: assigned, value: assignedVmCount },\r\n        { label: unassigned, value: unassignedVmCount },\r\n    ];\r\n    return (<OverviewCard labId={labId} info={info} title={title} iconName=\"TVMonitor\" buttonText={buttonText} isLoading={isLoading} navigateRoute={navigateRoute}/>);\r\n};\r\nexport const VmPoolOverviewCard = injectIntl(VmPoolOverviewCardInjected);\r\nconst TemplateOverviewCardInjected = (props) => {\r\n    const { template, isLoading, isReadOnly, intl, navigateRoute, labId } = props;\r\n    const title = intl.formatMessage(templateMessages.templatePageTitle);\r\n    const buttonText = isReadOnly\r\n        ? intl.formatMessage(messages.viewTemplateDashboardButton)\r\n        : intl.formatMessage(messages.manageTemplateDashboardButton);\r\n    const lastPublished = intl.formatMessage(messages.lastPublishedTemplateDashboard);\r\n    const unpublished = intl.formatMessage(templateMessages.templateUnpublishedStatus);\r\n    const changed = intl.formatMessage(messages.changedSinceLastPublishTemplateDashboard);\r\n    const created = intl.formatMessage(messages.createdTemplateDashboard);\r\n    const tooltip = intl.formatMessage(templateMessages.templateUnpublishedTooltipText);\r\n    const isPublished = template && template.isPublished;\r\n    const lastPublishedDate = template && template.lastPublished && <FormattedDate value={template.lastPublished}/>;\r\n    const createdDate = template && template.createdDate && <FormattedDate value={template.createdDate}/>;\r\n    const warningMessage = template && template.hasEdits ? changed : '';\r\n    const UnpublishedTemplate = () => {\r\n        return (<Stack horizontal>\r\n                <Stack.Item styles={{ root: { fontSize: '14px', fontWeight: '600' } }}>{unpublished}</Stack.Item>\r\n                <Stack.Item>\r\n                    <InfoTip content={tooltip}/>\r\n                </Stack.Item>\r\n            </Stack>);\r\n    };\r\n    const info = [\r\n        { label: created, value: createdDate || '--' },\r\n        { label: lastPublished, value: isPublished ? lastPublishedDate || '--' : <UnpublishedTemplate /> },\r\n    ];\r\n    return (<OverviewCard labId={labId} info={info} title={title} iconName=\"TestBeaker\" buttonText={buttonText} isLoading={isLoading} warningMessage={warningMessage} navigateRoute={navigateRoute}/>);\r\n};\r\nexport const TemplateOverviewCard = injectIntl(TemplateOverviewCardInjected);\r\nconst HeaderShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 200, height: 20 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.circle, height: 30 },\r\n    { type: ShimmerElementType.gap, width: 15 },\r\n    { type: ShimmerElementType.line, width: 95, height: 16 },\r\n    { type: ShimmerElementType.gap, width: 100 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 200, height: 10 }]}/>\r\n    </>);\r\nconst BodyShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 130, height: 9 },\r\n    { type: ShimmerElementType.gap, width: 20 },\r\n    { type: ShimmerElementType.line, width: 72, height: 9 },\r\n    { type: ShimmerElementType.gap, width: 100 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 130, height: 9 },\r\n    { type: ShimmerElementType.gap, width: 20 },\r\n    { type: ShimmerElementType.line, width: 72, height: 9 },\r\n    { type: ShimmerElementType.gap, width: 100 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 217, height: 40 }]}/>\r\n    </>);\r\nconst WarningMessageShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 150, height: 9 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 175, height: 20 }]}/>\r\n    </>);\r\nconst FooterShimmer = (<>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 250, height: 15 }]}/>\r\n        <ShimmerElementsGroup shimmerElements={[\r\n    { type: ShimmerElementType.gap, width: 25 },\r\n    { type: ShimmerElementType.line, width: 150, height: 9 },\r\n    { type: ShimmerElementType.gap, width: 150 },\r\n]}/>\r\n        <ShimmerElementsGroup shimmerElements={[{ type: ShimmerElementType.gap, width: 250, height: 15 }]}/>\r\n    </>);\r\nexport const WarningMessage = (props) => {\r\n    const { message } = props;\r\n    return (<Stack horizontal styles={{ root: { marginLeft: '25px', marginTop: '16px' } }}>\r\n            <Stack.Item>\r\n                <Icon iconName=\"Warning\" styles={{ root: { fontSize: '12px', color: '#D83B01', paddingRight: '5px' } }}/>\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { fontSize: '12px' } }}>{message}</Stack.Item>\r\n        </Stack>);\r\n};\r\nconst OverviewCardInjected = (props) => {\r\n    const { labId, title, buttonText, iconName, info, infoSingleColumn, isLoading, navigateRoute, warningMessage, } = props;\r\n    const InfoSection = () => {\r\n        return (<>\r\n                {infoSingleColumn && (<div className=\"dashboard__overview-card--info-container\">\r\n                        {infoSingleColumn.map((row) => (<div key={row.value} className=\"dashboard__overview-card--info-row\">\r\n                                <div className=\"dashboard__overview-card--info-column-one\">{row.value}</div>\r\n                            </div>))}\r\n                    </div>)}\r\n                {info && (<div className=\"dashboard__overview-card--info-container\">\r\n                        {info.map((row) => (<div key={`${row.label}-${row.value}`} className=\"dashboard__overview-card--info-row\">\r\n                                <div className=\"dashboard__overview-card--info-column-one\">{row.label}</div>\r\n                                <div className=\"dashboard__overview-card--info-column-two\">{row.value}</div>\r\n                            </div>))}\r\n                    </div>)}\r\n            </>);\r\n    };\r\n    const HeaderSection = () => {\r\n        return (<Stack verticalAlign=\"center\" horizontal styles={{ root: { marginLeft: '10px' } }}>\r\n                <Stack.Item>\r\n                    <DocumentCardLogo logoIcon={iconName} styles={{\r\n            root: { fontSize: '30px', lineHeight: '30px', height: '40px' },\r\n        }}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DocumentCardTitle title={title} styles={{\r\n            root: { fontWeight: 600, lineHeight: '60px', height: '60px', padding: '0px' },\r\n        }}/>\r\n                </Stack.Item>\r\n            </Stack>);\r\n    };\r\n    const ButtonSection = () => {\r\n        if (!labId) {\r\n            return <div />;\r\n        }\r\n        return (<div style={{ marginLeft: '18px', height: '46px' }}>\r\n                <ActionButton styles={{\r\n            flexContainer: { flexDirection: 'row-reverse' },\r\n            root: { color: getTheme().palette.themePrimary, marginTop: '2px' },\r\n        }} iconProps={{\r\n            iconName: 'ChevronRight',\r\n            styles: { root: { fontSize: '14px', lineHeight: '16px', height: '13px' } },\r\n        }}>\r\n                    {buttonText}\r\n                </ActionButton>\r\n            </div>);\r\n    };\r\n    return (<DocumentCard type={DocumentCardType.normal} onClick={isLoading ? undefined : () => navigateRoute(labId)} styles={{\r\n        root: {\r\n            marginRight: '18px',\r\n            marginTop: '22px',\r\n            width: '330px',\r\n            maxWidth: '330px',\r\n            height: '207px',\r\n            maxHeight: '207px',\r\n            display: 'inline-flex',\r\n            flex: '0 0',\r\n            flexDirection: 'column',\r\n            border: '1px solid transparent',\r\n            boxShadow: '0px 1.2px 3.6px rgba(0, 0, 0, 0.108), 0px 6.4px 14.4px rgba(0, 0, 0, 0.132)',\r\n            borderRadius: '2px',\r\n        },\r\n    }}>\r\n            <Stack grow verticalAlign=\"space-between\">\r\n                <Stack.Item styles={{ root: { marginTop: '8px' } }}>\r\n                    <Shimmer isDataLoaded={!isLoading} width={200} customElementsGroup={HeaderShimmer}>\r\n                        <HeaderSection />\r\n                    </Shimmer>\r\n                    <Shimmer isDataLoaded={!isLoading} styles={{ root: { marginTop: '5px' } }} width={217} customElementsGroup={BodyShimmer}>\r\n                        <InfoSection />\r\n                    </Shimmer>\r\n                    {warningMessage && (<Shimmer isDataLoaded={!isLoading} width={175} customElementsGroup={WarningMessageShimmer}>\r\n                            <WarningMessage message={warningMessage}/>\r\n                        </Shimmer>)}\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <Separator styles={{ root: { color: '#EDEBE9', lineHeight: '1px', padding: '0px' } }}/>\r\n                    <Shimmer isDataLoaded={!isLoading} width={250} customElementsGroup={FooterShimmer}>\r\n                        <ButtonSection />\r\n                    </Shimmer>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </DocumentCard>);\r\n};\r\nexport const OverviewCard = injectIntl(OverviewCardInjected);\r\n","import { CommandBar, FocusZone, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport { getNavigationItems } from '../common/lab-nav-items';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport CostEstimateTile from './cost-estimate-tile';\r\nimport { DashboardErrorBanner } from './dashboard-error-banner';\r\nimport DashboardErrorPage from './dashboard-error-page';\r\nimport { isFailed } from './dashboard-selectors';\r\nimport { ScheduleOverviewCard, TemplateOverviewCard, UsersOverviewCard, VmPoolOverviewCard } from './overview-cards';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport { ResourceId } from '../utils/resource-id';\r\nimport './dashboard.css';\r\nconst messages = defineMessages({\r\n    costEstimateRegionTitle: {\r\n        id: 'CostsAndBillingSectionTitleForDashboard',\r\n        defaultMessage: 'Costs & Billing',\r\n        description: 'Title of costs and billing section on dashboard page',\r\n    },\r\n    overviewRegionTitle: {\r\n        id: 'OverviewSectionTitleForDashboard',\r\n        defaultMessage: 'Overview',\r\n        description: 'Title of overview section on dashboard page',\r\n    },\r\n});\r\nconst DashboardInjected = (props) => {\r\n    const { dashboardViewModel, clearTemplateError, clearScheduleError, clearEnvironmentError, clearUsersError, loadTemplate, loadVirtualMachines, loadUsers, loadSchedules, intl, navigateRoute, } = props;\r\n    const { template, lab, schedules, environments, users, sizeData, isTemplateLoading, isEnvironmentsLoading, isUsersLoading, isSchedulesLoading, isPriceDataLoading, isReadOnly, templateLoadError, scheduleLoadError, usersLoadError, environmentsLoadError, pricingError, locale, isTeamsOrLmsIntegrationEnabled, isGroupSyncModeEnabled, } = dashboardViewModel;\r\n    const { formatMessage: msg } = intl;\r\n    const { secondaryBackgroundColor, primaryCommandBarStyles, smallPageTitleStyle } = getCustomTheme();\r\n    let navigationItems = undefined;\r\n    if (isTeamsOrLmsIntegrationEnabled && lab && lab.id) {\r\n        navigationItems = getNavigationItems(intl, lab.id, LabNavKeys.Dashboard, navigateRoute);\r\n    }\r\n    const isVNext = isVNextLab(lab?.id);\r\n    if ((lab && isFailed(lab.provisioningState)) || (!isVNext && template && isFailed(template.provisioningState))) {\r\n        return (<div id=\"dashboard-container\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                <div id=\"dashboard-content\">\r\n                    {navigationItems && (<div id=\"dashboard-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <DashboardErrorPage />\r\n                </div>\r\n            </div>);\r\n    }\r\n    let labId;\r\n    if (!isVNext) {\r\n        labId = template && template.id ? new ResourceId(template.id).parent.id : '';\r\n    }\r\n    else {\r\n        labId = lab?.id ?? '';\r\n    }\r\n    return (<div id=\"dashboard-container\">\r\n            <div id=\"dashboard-content\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                <div id=\"dashboard-header\">\r\n                    <DashboardErrorBanner templateLoadError={templateLoadError} scheduleLoadError={scheduleLoadError} usersLoadError={usersLoadError} environmentsLoadError={environmentsLoadError} clearTemplateError={clearTemplateError} clearScheduleError={clearScheduleError} clearEnvironmentError={clearEnvironmentError} clearUsersError={clearUsersError}/>\r\n                    {navigationItems && (<CommandBar styles={primaryCommandBarStyles} items={[]} farItems={navigationItems}/>)}\r\n                </div>\r\n                <div id=\"dashboard-body\" className=\"vertical-scrollable-content\">\r\n                    <div id=\"dashboard-cost-estimate-section\">\r\n                        <FocusZone role=\"region\" aria-label={msg(messages.costEstimateRegionTitle)}>\r\n                            <div style={smallPageTitleStyle}>\r\n                                <FormattedMessage {...messages.costEstimateRegionTitle}/>\r\n                            </div>\r\n                            <CostEstimateTile lab={lab} schedules={schedules} users={users} sizeData={sizeData} isTemplateLoading={isTemplateLoading} isSchedulesLoading={isSchedulesLoading} isUsersLoading={isUsersLoading} isPriceDataLoading={isPriceDataLoading} pricingError={pricingError}/>\r\n                            <div className=\"dashboard__cost-estimate-tile--disclaimer\">\r\n                                <FormattedMessage id=\"CostEstimateExclusionMessage\" defaultMessage=\"*Template hours, Azure compute gallery costs, and hours incurred when the lab creator starts a machine are excluded from the estimate. Please contact your IT Administrator for complete and accurate billing information.\" description=\"Message to indicate that the total cost of the lab does not include certain resources. Is meant to be supplementary text to string with id 'TotalEstimatedCostDescription'\"/>\r\n                            </div>\r\n                        </FocusZone>\r\n                    </div>\r\n                    <div id=\"dashboard-overview-cards-section\">\r\n                        <FocusZone role=\"region\" aria-label={msg(messages.overviewRegionTitle)}>\r\n                            <span style={smallPageTitleStyle}>\r\n                                <FormattedMessage {...messages.overviewRegionTitle}/>\r\n                            </span>\r\n                            <Stack horizontalAlign=\"start\" wrap horizontal styles={{ root: { marginLeft: '31px', marginBottom: '25px' } }}>\r\n                                <Stack.Item>\r\n                                    <TemplateOverviewCard labId={labId} isLoading={isTemplateLoading} isReadOnly={isReadOnly} template={template} navigateRoute={loadTemplate}/>\r\n                                </Stack.Item>\r\n                                <Stack.Item>\r\n                                    <VmPoolOverviewCard isVNext={isVNext} isLoading={isEnvironmentsLoading} isReadOnly={isReadOnly} environments={environments} labId={labId} navigateRoute={loadVirtualMachines}/>\r\n                                </Stack.Item>\r\n                                <Stack.Item>\r\n                                    <UsersOverviewCard isVNext={isVNext} isLoading={isUsersLoading} isReadOnly={isReadOnly} labId={labId} users={users} navigateRoute={loadUsers} isGroupSyncModeEnabled={isGroupSyncModeEnabled}/>\r\n                                </Stack.Item>\r\n                                <Stack.Item>\r\n                                    <ScheduleOverviewCard locale={locale} isLoading={isSchedulesLoading} isReadOnly={isReadOnly} labId={labId} schedules={schedules} navigateRoute={loadSchedules}/>\r\n                                </Stack.Item>\r\n                            </Stack>\r\n                        </FocusZone>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>);\r\n};\r\nconst Dashboard = injectIntl(DashboardInjected);\r\nexport default Dashboard;\r\n","import { defineMessages } from 'react-intl';\r\nexport const dashboardMessages = defineMessages({\r\n    dashboardPageTitle: {\r\n        id: 'DashboardPageTitle',\r\n        defaultMessage: 'Dashboard',\r\n        description: 'Title for page indicating this is the dashboard page',\r\n    },\r\n});\r\nexport default dashboardMessages;\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport PageTitle from '../common/page/page-title';\r\nimport { clearGetError, clearLoadError as clearEnvironmentError, } from '../redux/actions/environment/environment-action-creators';\r\nimport { clearLoadScheduleError as clearScheduleError } from '../redux/actions/schedule/schedule-action-creators';\r\nimport { clearLoadTemplateError as clearTemplateError } from '../redux/actions/template/template-action-creators';\r\nimport { clearLoadUsersError as clearUsersError } from '../redux/actions/user/user-action-creators';\r\nimport Routes from '../utils/routes';\r\nimport Dashboard from './dashboard';\r\nimport dashboardMessages from './dashboard-messages';\r\nimport { getDashboardContainerModel } from './dashboard-selectors';\r\nclass DashboardContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.loadTemplate = this.loadTemplate.bind(this);\r\n        this.loadVirtualMachines = this.loadVirtualMachines.bind(this);\r\n        this.loadUsers = this.loadUsers.bind(this);\r\n        this.loadSchedules = this.loadSchedules.bind(this);\r\n        this.navigateRoute = this.navigateRoute.bind(this);\r\n        this._clearTemplateError = this._clearTemplateError.bind(this);\r\n    }\r\n    loadTemplate(id) {\r\n        this.props.push({ pathname: Routes.Template(id), search: this.props.search });\r\n    }\r\n    loadVirtualMachines(id) {\r\n        this.props.push({ pathname: Routes.VirtualMachines(id), search: this.props.search });\r\n    }\r\n    loadUsers(id) {\r\n        this.props.push({ pathname: Routes.Users(id), search: this.props.search });\r\n    }\r\n    loadSchedules(id) {\r\n        this.props.push({ pathname: Routes.Schedule(id), search: this.props.search });\r\n    }\r\n    navigateRoute(pathname) {\r\n        const { push, search } = this.props;\r\n        push({ pathname, search });\r\n    }\r\n    _clearTemplateError() {\r\n        const { isVNext, clearTemplateError, clearGetError, dashboardViewModel } = this.props;\r\n        const { templateLoadError } = dashboardViewModel;\r\n        if (!isVNext) {\r\n            clearTemplateError();\r\n        }\r\n        else {\r\n            if (!!templateLoadError) {\r\n                clearGetError(templateLoadError.id);\r\n            }\r\n        }\r\n    }\r\n    render() {\r\n        const { intl, dashboardViewModel } = this.props;\r\n        const msg = intl.formatMessage;\r\n        return (<>\r\n                <PageTitle subtitle={msg(dashboardMessages.dashboardPageTitle)}/>\r\n                <Dashboard dashboardViewModel={dashboardViewModel} clearTemplateError={this._clearTemplateError} clearScheduleError={this.props.clearScheduleError} clearEnvironmentError={this.props.clearEnvironmentError} clearUsersError={this.props.clearUsersError} loadTemplate={this.loadTemplate} loadVirtualMachines={this.loadVirtualMachines} loadUsers={this.loadUsers} loadSchedules={this.loadSchedules} navigateRoute={this.navigateRoute}/>\r\n            </>);\r\n    }\r\n}\r\nconst mapDispatchToProps = {\r\n    push: routerActions.push,\r\n    clearTemplateError,\r\n    clearScheduleError,\r\n    clearEnvironmentError,\r\n    clearUsersError,\r\n    clearGetError,\r\n};\r\nconst mapStateToProps = (state) => {\r\n    return getDashboardContainerModel(state);\r\n};\r\nexport const DashboardContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(DashboardContainerInjected));\r\nexport default DashboardContainer;\r\n","import { DefaultButton, Stack } from '@fluentui/react';\r\nimport moment from 'moment';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { findOneIana } from 'windows-iana';\r\nimport { ManagedLabsModels } from '@azure-lab-services/ml-ts';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport SubmitButton from '../common/submit-button';\r\nimport commonMessages from '../language/common-messages';\r\nimport { ScheduleType, RecurrenceType } from './flyout';\r\nimport { adjustDatesForSchedule, adjustDatesForVNextSchedule, getDefaultWeeklySchedule, getDefaultVNextWeeklySchedule, estimatedClassLength, getBrowserOffset, } from './flyout-utilities';\r\nimport { FlyoutMode } from './schedule';\r\nimport './schedule.css';\r\nconst FlyoutFooterInjected = (props) => {\r\n    const save = props.intl.formatMessage(commonMessages.save);\r\n    const discard = props.intl.formatMessage(commonMessages.discard);\r\n    const { form, formValues, scheduleType, mode, schedule, isCurrentLabParentLabAccount, createSchedule, updateSchedule, isSaving, onClose, } = props;\r\n    const onClick = () => onSave(formValues, scheduleType, mode, schedule, isCurrentLabParentLabAccount, createSchedule, updateSchedule);\r\n    return (<>\r\n            <Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                <Stack.Item>\r\n                    <SubmitButton buttonText={save} isSubmitting={isSaving} disabled={hasErrors(form) || isSaving} onClick={onClick}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DefaultButton disabled={isSaving} onClick={isSaving ? undefined : onClose}>\r\n                        {discard}\r\n                    </DefaultButton>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </>);\r\n};\r\nexport const FlyoutFooter = injectIntl(FlyoutFooterInjected);\r\nfunction hasErrors(form) {\r\n    return form.getState().hasValidationErrors;\r\n}\r\nfunction hydrateCommonPropertiesForSchedule(schedule, startDate, startHoursKey, stopHoursKey, isRecurring, endDate, days, timeZoneId, notes) {\r\n    schedule.start = startDate;\r\n    schedule.end = startDate;\r\n    const startHours = String(startHoursKey).substring(0, 2);\r\n    const startMinutes = String(startHoursKey).substring(2, 4);\r\n    const stopHours = String(stopHoursKey).substring(0, 2);\r\n    const stopMinutes = String(stopHoursKey).substring(2, 4);\r\n    schedule.start = new Date(schedule.start);\r\n    schedule.end = new Date(schedule.end);\r\n    schedule.start.setHours(+startHours, +startMinutes, 0, 0);\r\n    schedule.end.setHours(+stopHours, +stopMinutes, 0, 0);\r\n    const isTodayDST = moment(new Date()).isDST();\r\n    const isScheduleDST = moment(schedule.start).isDST();\r\n    adjustScheduleForDST(isTodayDST, isScheduleDST, schedule.start, schedule.end);\r\n    schedule.notes = notes;\r\n    schedule.timeZoneId = timeZoneId;\r\n    schedule.startAction.enableState = ManagedLabsModels.EnableState.Enabled;\r\n    schedule.endAction.enableState = ManagedLabsModels.EnableState.Enabled;\r\n    if (isRecurring) {\r\n        if (!schedule.recurrencePattern) {\r\n            schedule.recurrencePattern = {\r\n                frequency: ManagedLabsModels.RecurrenceFrequency.Weekly,\r\n            };\r\n        }\r\n        if (endDate) {\r\n            schedule.recurrencePattern.until = endDate;\r\n            schedule.recurrencePattern.until.setHours(23, 59, 59);\r\n        }\r\n        else {\r\n            schedule.recurrencePattern.until = undefined;\r\n        }\r\n        schedule.recurrencePattern.weekDays = days;\r\n    }\r\n    else {\r\n        if (schedule.recurrencePattern) {\r\n            schedule.recurrencePattern = undefined;\r\n        }\r\n    }\r\n    return schedule;\r\n}\r\nfunction hydrateCommonPropertiesForVNextSchedule(schedule, startDate, startHoursKey, stopHoursKey, isRecurring, endDate, days, timeZoneId, notes) {\r\n    schedule.startAt = startDate;\r\n    schedule.stopAt = startDate;\r\n    const startHours = String(startHoursKey).substring(0, 2);\r\n    const startMinutes = String(startHoursKey).substring(2, 4);\r\n    const stopHours = String(stopHoursKey).substring(0, 2);\r\n    const stopMinutes = String(stopHoursKey).substring(2, 4);\r\n    schedule.startAt = new Date(schedule.startAt);\r\n    schedule.stopAt = new Date(schedule.stopAt);\r\n    schedule.startAt.setHours(+startHours, +startMinutes, 0, 0);\r\n    schedule.stopAt.setHours(+stopHours, +stopMinutes, 0, 0);\r\n    const isTodayDST = moment(new Date()).isDST();\r\n    const isScheduleDST = moment(schedule.startAt).isDST();\r\n    adjustScheduleForDST(isTodayDST, isScheduleDST, schedule.startAt, schedule.stopAt);\r\n    schedule.notes = notes;\r\n    schedule.timeZoneId = convertWindowsTimezoneToIana(timeZoneId);\r\n    if (isRecurring) {\r\n        endDate.setHours(23, 59, 59);\r\n        if (!schedule.recurrencePattern) {\r\n            schedule.recurrencePattern = {\r\n                frequency: LabServicesModels.RecurrenceFrequency.Weekly,\r\n                expirationDate: endDate,\r\n            };\r\n        }\r\n        else {\r\n            schedule.recurrencePattern.expirationDate = endDate;\r\n        }\r\n        schedule.recurrencePattern.weekDays = days;\r\n    }\r\n    else {\r\n        if (schedule.recurrencePattern) {\r\n            schedule.recurrencePattern = null;\r\n        }\r\n    }\r\n    return schedule;\r\n}\r\nfunction onSave(values, scheduleType, mode, schedule, isCurrentLabParentLabAccount, createSchedule, updateSchedule) {\r\n    if (isCurrentLabParentLabAccount) {\r\n        saveSchedule(values, scheduleType, mode, schedule, createSchedule, updateSchedule);\r\n    }\r\n    else {\r\n        saveVNextSchedule(values, scheduleType, mode, schedule, createSchedule, updateSchedule);\r\n    }\r\n}\r\nfunction saveSchedule(values, scheduleType, mode, schedule, createSchedule, updateSchedule) {\r\n    schedule = mode === FlyoutMode.add ? getDefaultWeeklySchedule(values.timezonePicker) : schedule;\r\n    schedule = hydrateCommonPropertiesForSchedule(schedule, values.startDatePicker, values.startTimePicker, values.stopTimePicker, values.recurrencePicker === RecurrenceType.weekly ? true : false, values.endDatePicker, values.dayPicker, values.timezonePicker, values.notes);\r\n    if (scheduleType === ScheduleType.startOnly) {\r\n        schedule.endAction.enableState = ManagedLabsModels.EnableState.Disabled;\r\n        adjustTimesForStartOnlySchedule(schedule);\r\n    }\r\n    else if (scheduleType === ScheduleType.stopOnly) {\r\n        schedule.startAction.enableState = ManagedLabsModels.EnableState.Disabled;\r\n        adjustTimesForStopOnlySchedule(schedule);\r\n    }\r\n    const offset = getBrowserOffset();\r\n    const adjustedSchedule = adjustDatesForSchedule(offset, schedule);\r\n    if (mode === FlyoutMode.edit) {\r\n        updateSchedule(adjustedSchedule);\r\n    }\r\n    else {\r\n        createSchedule(adjustedSchedule);\r\n    }\r\n}\r\nfunction saveVNextSchedule(values, scheduleType, mode, schedule, createSchedule, updateSchedule) {\r\n    schedule = mode === FlyoutMode.add ? getDefaultVNextWeeklySchedule(values.timezonePicker) : schedule;\r\n    schedule = hydrateCommonPropertiesForVNextSchedule(schedule, values.startDatePicker, values.startTimePicker, values.stopTimePicker, values.recurrencePicker === RecurrenceType.weekly ? true : false, values.endDatePicker, values.dayPicker, values.timezonePicker, values.notes);\r\n    if (scheduleType === ScheduleType.stopOnly) {\r\n        schedule.startAt = null;\r\n    }\r\n    const offset = getBrowserOffset();\r\n    const adjustedSchedule = adjustDatesForVNextSchedule(offset, schedule);\r\n    if (mode === FlyoutMode.edit) {\r\n        updateSchedule(adjustedSchedule);\r\n    }\r\n    else {\r\n        createSchedule(adjustedSchedule);\r\n    }\r\n}\r\nfunction convertWindowsTimezoneToIana(id) {\r\n    return findOneIana(id);\r\n}\r\nfunction adjustTimesForStopOnlySchedule(schedule) {\r\n    if (schedule.end.getHours() == 0 && schedule.end.getMinutes() == 0) {\r\n        schedule.start.setHours(0, 0, 0);\r\n        schedule.start.setDate(schedule.start.getDate() - 1);\r\n    }\r\n    else if (schedule.end.getHours() < estimatedClassLength) {\r\n        schedule.start.setHours(0, 0, 0);\r\n    }\r\n    else {\r\n        schedule.start.setHours(schedule.end.getHours() - estimatedClassLength, schedule.end.getMinutes());\r\n    }\r\n}\r\nfunction adjustTimesForStartOnlySchedule(schedule) {\r\n    if (schedule.start.getHours() == 23 && schedule.start.getMinutes() == 59) {\r\n        schedule.end.setHours(23, 59);\r\n        schedule.end.setDate(schedule.end.getDate() + 1);\r\n    }\r\n    else if (schedule.start.getHours() >= 22) {\r\n        schedule.end.setHours(23, 59);\r\n    }\r\n    else {\r\n        schedule.end.setHours(schedule.start.getHours() + estimatedClassLength, schedule.start.getMinutes());\r\n    }\r\n}\r\nexport function adjustScheduleForDST(isTodayDST, isScheduleDST, start, end) {\r\n    if (isTodayDST && !isScheduleDST) {\r\n        start.setHours(start.getHours() - 1);\r\n        end.setHours(end.getHours() - 1);\r\n    }\r\n    else if (!isTodayDST && isScheduleDST) {\r\n        start.setHours(start.getHours() + 1);\r\n        end.setHours(end.getHours() + 1);\r\n    }\r\n}\r\nexport default FlyoutFooter;\r\n","import _ from 'lodash';\r\nexport function validateDate(maxDate, value, message) {\r\n    return _.isDate(value) && (!_.isDate(maxDate) || value <= maxDate) ? undefined : message;\r\n}\r\nexport function validateRequired(value, message) {\r\n    return value ? undefined : message;\r\n}\r\nexport function validateLength(value, maxLength, message) {\r\n    return value.length <= maxLength ? undefined : message;\r\n}\r\nconst CommonValidators = {\r\n    validateLength,\r\n    validateRequired,\r\n};\r\nexport default CommonValidators;\r\n","import * as React from 'react';\r\nimport moment from 'moment';\r\nimport 'moment/min/locales';\r\nimport { Dropdown, TextField, ComboBox, DatePicker, TooltipHost, DirectionalHint, Stack, } from '@fluentui/react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport { Field } from 'react-final-form';\r\nimport { firstDayOfWeekForPicker, dayPickerStrings, onFormatDate } from './flyout-utilities';\r\nimport { ScheduleType } from './flyout';\r\nimport { validateDate } from '../utils/validators';\r\nconst messages = defineMessages({\r\n    standardLabel: {\r\n        id: 'StandardLabel',\r\n        defaultMessage: 'Standard',\r\n        description: `Label indicating a standard schedule (not start-only or stop-only)`,\r\n    },\r\n    startOnlyLabel: {\r\n        id: 'StartOnlyLabel',\r\n        defaultMessage: 'Start only',\r\n        description: `Label indicating a start only schedule`,\r\n    },\r\n    stopOnlyLabel: {\r\n        id: 'StopOnlyLabel',\r\n        defaultMessage: 'Stop only',\r\n        description: 'Label indicating a stop only schedule',\r\n    },\r\n    eventTypeLabel: {\r\n        id: 'EventTypeLabel',\r\n        defaultMessage: 'Event type',\r\n        description: 'Label for dropdown indicating which type of schedule to create',\r\n    },\r\n    stopOnlyScheduleTypeMessage: {\r\n        id: 'StopOnlyScheduleTypeMessage',\r\n        defaultMessage: 'Stop only schedule events can be used to shut down all virtual machines in a lab at the specified time.',\r\n        description: 'Text explaining what stop only events do',\r\n    },\r\n    startOnlyScheduleTypeMessage: {\r\n        id: 'StartOnlyScheduleTypeMessage',\r\n        defaultMessage: 'Start only schedule events can be used to start up all virtual machines in a lab at the specified time.',\r\n        description: 'Text explaining what start only events do',\r\n    },\r\n    standardScheduleTypeMessage: {\r\n        id: 'StandardScheduleTypeMessage',\r\n        defaultMessage: 'Standard schedule events have a designated start and end time where virtual machines are running in the lab.',\r\n        description: 'Text explaining what standard events do',\r\n    },\r\n});\r\nexport const TimePicker = (props) => {\r\n    const { input: { value, onChange }, label, options, isSaving, meta: { error }, } = props;\r\n    const [timePickerOptions, setTimePickerOptions] = React.useState(options);\r\n    const formats = [\r\n        'YYYY-MM-DD LT',\r\n        'YYYY-MM-DD H:m',\r\n        'YYYY-MM-DD H:mm',\r\n        'YYYY-MM-DD HH:m',\r\n        'YYYY-MM-DD HH:mm',\r\n        'YYYY-MM-DD hh:m A',\r\n        'YYYY-MM-DD hh:mA',\r\n        'YYYY-MM-DD hh:mm A',\r\n        'YYYY-MM-DD hh:mmA',\r\n        'YYYY-MM-DD h:m A',\r\n        'YYYY-MM-DD h:mA',\r\n        'YYYY-MM-DD h:mm A',\r\n        'YYYY-MM-DD h:mmA',\r\n    ];\r\n    initTimeOptions(timePickerOptions, setTimePickerOptions, value);\r\n    return (<ComboBox dropdownWidth={347} options={timePickerOptions} disabled={isSaving} scrollSelectedToTop={true} allowFreeform calloutProps={{ calloutMaxHeight: 300 }} onChange={(_, option, __, value) => {\r\n        const testValue = `2000-01-01 ${value}`;\r\n        const testValueAsMoment = moment(testValue, formats, true);\r\n        if (value && testValueAsMoment.isValid()) {\r\n            const key = testValueAsMoment.format('HHmm');\r\n            timePickerOptions.push({ key, text: value });\r\n            timePickerOptions.sort(compareByKey);\r\n            setTimePickerOptions(timePickerOptions);\r\n            onChange(key);\r\n        }\r\n        if (option && option.key) {\r\n            onChange(option.key);\r\n        }\r\n    }} text={getDropdownValue(timePickerOptions, value)} label={label} errorMessage={error}/>);\r\n};\r\nconst compareByKey = (a, b) => {\r\n    if (+a.key < +b.key) {\r\n        return -1;\r\n    }\r\n    else if (+a.key > +b.key) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n};\r\n/**\r\n * If editing a schedule with non-standard time (not one of the default times in the dropdown),\r\n * make sure it is added to the options so it is seen in the dropdown.\r\n */\r\nconst initTimeOptions = (options, setOptions, value) => {\r\n    const index = options.findIndex((option) => option.key === value);\r\n    if (index < 0) {\r\n        const timeString = `2000-01-01 ${value[0]}${value[1]}:${value[2]}${value[3]}`;\r\n        const text = moment(timeString).format('LT');\r\n        options.push({ key: value, text });\r\n        options.sort(compareByKey);\r\n        setOptions(options);\r\n    }\r\n};\r\nconst getDropdownValue = (options, value) => {\r\n    const index = options.findIndex((option) => option.key === value);\r\n    return index > -1 ? options[index].text : '';\r\n};\r\nexport const StartDatePickerField = (props) => {\r\n    const { name, label, intl, locale, maxDate, isSaving, required } = props;\r\n    const pickerStrings = dayPickerStrings(locale, intl);\r\n    return (<Field name={name} validate={(value) => validateDate(maxDate, value, pickerStrings.invalidInputErrorMessage)}>\r\n            {(fieldProps) => (<DatePicker calloutProps={{ styles: { root: { marginRight: '8px' } } }} firstDayOfWeek={firstDayOfWeekForPicker(locale)} strings={pickerStrings} value={fieldProps.input.value} disabled={isSaving} formatDate={(date) => {\r\n        return date ? onFormatDate(locale, date) : '';\r\n    }} onSelectDate={(date) => fieldProps.input.onChange(date)} allowTextInput={true} maxDate={maxDate} label={label} isRequired={required}/>)}\r\n        </Field>);\r\n};\r\nexport const TimezonePicker = (props) => {\r\n    const { input: { value, onChange }, label, options, placeHolder, isSaving, meta: { error, pristine }, } = props;\r\n    return (<Dropdown defaultSelectedKey={value} disabled={isSaving} options={options} calloutProps={{ calloutMaxHeight: 300 }} onChange={(_, option) => onChange(option.key)} label={label} placeholder={placeHolder} errorMessage={!pristine && error}/>);\r\n};\r\nexport const Notes = (props) => {\r\n    const { input: { value, onChange }, label, isSaving, meta: { error }, } = props;\r\n    return (<TextField styles={{ field: { maxHeight: '250px' } }} multiline autoAdjustHeight rows={3} disabled={isSaving} value={value} onChange={onChange} errorMessage={error} label={label}/>);\r\n};\r\nexport function validateLength(value, message) {\r\n    return !value || value.length <= 500 ? undefined : message;\r\n}\r\nfunction onScheduleTypeChange(item, setScheduleType) {\r\n    const key = item.key;\r\n    setScheduleType(key);\r\n}\r\nfunction renderOption(option) {\r\n    return (<TooltipHost content={option.description} directionalHint={DirectionalHint.leftCenter} styles={{ root: { width: '100%' } }}>\r\n            <Stack styles={{ root: { width: '100%' } }}>\r\n                <Stack.Item>{option.label}</Stack.Item>\r\n            </Stack>\r\n        </TooltipHost>);\r\n}\r\nconst ScheduleTypeDropdownInjected = (props) => {\r\n    const { currentScheduleType, setScheduleType, isSaving, isCurrentLabParentLabAccount } = props;\r\n    const standard = props.intl.formatMessage(messages.standardLabel);\r\n    const startOnly = props.intl.formatMessage(messages.startOnlyLabel);\r\n    const stopOnly = props.intl.formatMessage(messages.stopOnlyLabel);\r\n    const eventType = props.intl.formatMessage(messages.eventTypeLabel);\r\n    const standardDescription = props.intl.formatMessage(messages.standardScheduleTypeMessage);\r\n    const startOnlyDescription = props.intl.formatMessage(messages.startOnlyScheduleTypeMessage);\r\n    const stopOnlyDescription = props.intl.formatMessage(messages.stopOnlyScheduleTypeMessage);\r\n    const onRenderTitle = () => {\r\n        const index = eventTypeDropdownOptions.findIndex((option) => option.key === currentScheduleType);\r\n        const label = eventTypeDropdownOptions[index].label;\r\n        return <div>{label}</div>;\r\n    };\r\n    const eventTypeDropdownOptions = [\r\n        {\r\n            key: ScheduleType.standard,\r\n            text: '',\r\n            label: standard,\r\n            description: standardDescription,\r\n        },\r\n        {\r\n            key: ScheduleType.stopOnly,\r\n            text: '',\r\n            label: stopOnly,\r\n            description: stopOnlyDescription,\r\n        },\r\n    ];\r\n    // start only schedules are not allowed in vnext\r\n    if (isCurrentLabParentLabAccount) {\r\n        eventTypeDropdownOptions.push({\r\n            key: ScheduleType.startOnly,\r\n            text: '',\r\n            label: startOnly,\r\n            description: startOnlyDescription,\r\n        });\r\n    }\r\n    const dropdownItemStyle = {\r\n        selectors: {\r\n            '.ms-Button-flexContainer': {\r\n                width: '100%',\r\n            },\r\n        },\r\n    };\r\n    return (<div className=\"schedules__flyout-control\">\r\n            <Dropdown styles={{\r\n        dropdownItem: dropdownItemStyle,\r\n        dropdownItemSelected: dropdownItemStyle,\r\n    }} disabled={isSaving} label={eventType} defaultSelectedKey={currentScheduleType} options={eventTypeDropdownOptions} onChange={(_, item) => onScheduleTypeChange(item, setScheduleType)} onRenderOption={(option) => renderOption(option)} onRenderTitle={onRenderTitle}/>\r\n        </div>);\r\n};\r\nexport const ScheduleTypeDropdown = injectIntl(ScheduleTypeDropdownInjected);\r\nconst FlyoutSharedControls = {\r\n    StartDatePickerField,\r\n    TimePicker,\r\n    TimezonePicker,\r\n    Notes,\r\n    validateLength,\r\n    ScheduleTypeDropdown,\r\n};\r\nexport default FlyoutSharedControls;\r\n","import { ActionButton, IconButton, Stack } from '@fluentui/react';\r\nimport moment from 'moment';\r\nimport 'moment/min/locales';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { Field } from 'react-final-form';\r\nimport commonMessages from '../language/common-messages';\r\nimport { validateRequired } from '../utils/validators';\r\nimport { ScheduleType, RecurrenceType } from './flyout';\r\nimport { TimePicker, TimezonePicker, Notes, validateLength, StartDatePickerField } from './flyout-shared-controls';\r\nimport { dropdownTimes, dropdownTimezones, mapDayToLocaleDay, sortDays } from './flyout-utilities';\r\nimport scheduleMessages from './schedule-messages';\r\nimport './schedule.css';\r\nconst FlyoutFormInjected = (props) => {\r\n    const { locale, intl, isSaving, deleteRecurrence, scheduleType, values, onDialogOpen, setRecurValues } = props;\r\n    const dateLabel = intl.formatMessage(scheduleMessages.dateLabel);\r\n    const startTimeLabel = intl.formatMessage(scheduleMessages.startTimeLabel);\r\n    const stopTimeLabel = intl.formatMessage(scheduleMessages.stopTimeLabel);\r\n    const timeZoneLabel = intl.formatMessage(scheduleMessages.timeZoneLabel);\r\n    const selectTimezonePlaceholder = intl.formatMessage(scheduleMessages.selectTimezonePlaceholder);\r\n    const notesLabel = intl.formatMessage(scheduleMessages.notesLabel);\r\n    const repeat = intl.formatMessage(scheduleMessages.repeatLabel);\r\n    const none = intl.formatMessage(commonMessages.none);\r\n    const deleteRecurrenceLabel = intl.formatMessage(scheduleMessages.deleteRecurrenceLabel);\r\n    const repeatButtonLabel = values.endDatePicker\r\n        ? intl.formatMessage(scheduleMessages.occurenceWithEndDateLabel, {\r\n            days: values\r\n                .dayPicker.sort((a, b) => sortDays(locale, a, b))\r\n                .map((day) => mapDayToLocaleDay(locale, day))\r\n                .join(', '),\r\n            date: moment(values.endDatePicker).locale(locale).format('ll'),\r\n        })\r\n        : intl.formatMessage(scheduleMessages.occurenceNoEndDateLabel, { days: values.dayPicker.join(', ') });\r\n    const validationMessages = {\r\n        selectedDaysMessage: intl.formatMessage(scheduleMessages.selectedDaysValidationMessage),\r\n        startTimeMessage: intl.formatMessage(scheduleMessages.startTimeValidationMessage),\r\n        stopTimeMessage: intl.formatMessage(scheduleMessages.stopTimeValidationMessage),\r\n        minimumDurationValidationMessage: intl.formatMessage(scheduleMessages.minimumDurationValidationMessage),\r\n        timezoneMessage: intl.formatMessage(scheduleMessages.timezoneValidationMessage),\r\n        notesMessage: intl.formatMessage(scheduleMessages.notesValidationMessage),\r\n    };\r\n    return (<div>\r\n            <div className=\"schedules__flyout-control\">\r\n                <StartDatePickerField name=\"startDatePicker\" label={dateLabel} locale={locale} intl={intl} maxDate={values.endDatePicker} isSaving={isSaving} required={true}/>\r\n            </div>\r\n\r\n            {scheduleType !== ScheduleType.stopOnly && (<div className=\"schedules__flyout-control\">\r\n                    <Field name=\"startTimePicker\" label={startTimeLabel} component={TimePicker} isSaving={isSaving} options={dropdownTimes(locale)}/>\r\n                </div>)}\r\n\r\n            {scheduleType !== ScheduleType.startOnly && (<div className=\"schedules__flyout-control\">\r\n                    <Field name=\"stopTimePicker\" label={stopTimeLabel} component={TimePicker} isSaving={isSaving} options={dropdownTimes(locale)}/>\r\n                </div>)}\r\n\r\n            <div className=\"schedules__flyout-control\">\r\n                <Field name=\"timezonePicker\" label={timeZoneLabel} placeHolder={selectTimezonePlaceholder} component={TimezonePicker} options={dropdownTimezones(intl)} isSaving={isSaving} validate={(value) => validateRequired(value, validationMessages.timezoneMessage)}/>\r\n            </div>\r\n\r\n            <div className=\"schedules__flyout-control\">\r\n                <div className=\"schedules__flyout-control--label\">\r\n                    <label className=\"ms-Label\" htmlFor=\"repeatButton\">\r\n                        {repeat}\r\n                    </label>\r\n                </div>\r\n                <div className=\"schedules__flyout--repeat\">\r\n                    <Stack horizontal>\r\n                        <Stack.Item>\r\n                            <ActionButton id=\"repeatButton\" disabled={isSaving} ariaLabel={`${repeat}. ${repeatButtonLabel}`} styles={{\r\n        root: { paddingLeft: '0px', marginLeft: '0px', textAlign: 'left', height: 'unset' },\r\n        label: { lineHeight: '19px' },\r\n        flexContainer: { alignItems: 'flex-start' },\r\n    }} onClick={() => {\r\n        const recurValues = {\r\n            recurrencePicker: values.recurrencePicker,\r\n            dayPicker: values.dayPicker,\r\n            endDatePicker: values.endDatePicker,\r\n        };\r\n        setRecurValues(recurValues);\r\n        onDialogOpen();\r\n    }} iconProps={{\r\n        iconName: 'Edit',\r\n        styles: {\r\n            root: {\r\n                paddingRight: '5px',\r\n                paddingTop: '4px',\r\n                color: isSaving ? '#A19F9D' : undefined,\r\n                marginLeft: '0px',\r\n            },\r\n        },\r\n    }}>\r\n                                {values.recurrencePicker === RecurrenceType.weekly ? repeatButtonLabel : none}\r\n                            </ActionButton>\r\n                        </Stack.Item>\r\n                        <Stack.Item align=\"start\">\r\n                            {values.recurrencePicker === RecurrenceType.weekly && (<IconButton className=\"schedules__flyout--repeat-delete\" disabled={isSaving} onClick={deleteRecurrence} styles={{\r\n        root: {\r\n            height: '25px',\r\n            paddingTop: '6px',\r\n            paddingBottom: '6px',\r\n        },\r\n    }} iconProps={{ iconName: 'Cancel' }} title={deleteRecurrenceLabel} ariaLabel={deleteRecurrenceLabel}/>)}\r\n                        </Stack.Item>\r\n                    </Stack>\r\n                </div>\r\n            </div>\r\n\r\n            <div className=\"schedules__flyout-control\">\r\n                <Field name=\"notes\" isSaving={isSaving} label={notesLabel} component={Notes} validate={(value) => validateLength(value, validationMessages.notesMessage)}/>\r\n            </div>\r\n        </div>);\r\n};\r\nexport const FlyoutForm = injectIntl(FlyoutFormInjected);\r\nexport default FlyoutForm;\r\n","import * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { DefaultButton, Stack } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nimport { daysShortLocaleAware } from './flyout-utilities';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport './schedule.css';\r\nconst DayPickerInjected = (props) => {\r\n    const { locale, errorMessage, label } = props;\r\n    return (<>\r\n            <div className=\"schedules__flyout-control--label\">{label}</div>\r\n            <div className={errorMessage ? 'schedules__flyout-daypicker-error' : ''}>\r\n                <Stack horizontal horizontalAlign=\"space-between\">\r\n                    {daysShortLocaleAware(locale).map((day) => {\r\n        return (<Stack.Item key={day.longText}>\r\n                                <DefaultButton key={day.longText} ariaLabel={day.longText} checked={isChecked(props.days, day.value)} text={day.text} onClick={() => onSelectDay(props.onChange, props.days, day.value)} styles={getCustomTheme().dayPickerButtonStyles}/>\r\n                            </Stack.Item>);\r\n    })}\r\n                </Stack>\r\n            </div>\r\n            {errorMessage && <span className=\"schedule__flyout-error\">{errorMessage}</span>}\r\n        </>);\r\n};\r\nfunction onSelectDay(onChange, days, day) {\r\n    const isDayAlreadyChecked = isChecked(days, day);\r\n    if (isDayAlreadyChecked) {\r\n        days = _.without(days, day);\r\n    }\r\n    else {\r\n        days = [...days];\r\n        days.push(day);\r\n    }\r\n    onChange(days);\r\n}\r\nfunction isChecked(days, day) {\r\n    return days.some((weekday) => weekday === day);\r\n}\r\nconst DayPicker = injectIntl(DayPickerInjected);\r\nexport default DayPicker;\r\n","import * as React from 'react';\r\nimport { Field } from 'react-final-form';\r\nimport { injectIntl, defineMessages, FormattedMessage } from 'react-intl';\r\nimport 'moment/min/locales';\r\nimport { Dropdown, Stack, PrimaryButton, DefaultButton, ActionButton, Dialog, DialogFooter, Callout, Calendar, DialogType, } from '@fluentui/react';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport DayPicker from './day-picker';\r\nimport { firstDayOfWeekForPicker, dayPickerStrings, onFormatDate as formatDate, mapDayToLocaleDay, sortDays, } from './flyout-utilities';\r\nimport scheduleMessages from './schedule-messages';\r\nfunction validateSelectedDays(value, message) {\r\n    return value.length ? undefined : message;\r\n}\r\nconst messages = defineMessages({\r\n    everyWeekLabel: {\r\n        id: 'EveryWeekLabel',\r\n        defaultMessage: 'every week',\r\n        description: 'Label for every week',\r\n    },\r\n    neverLabel: {\r\n        id: 'NeverLabel',\r\n        defaultMessage: 'never',\r\n        description: 'Label for never',\r\n    },\r\n    chooseEndDateLabel: {\r\n        id: 'ChooseEndDateLabel',\r\n        defaultMessage: 'Choose end date',\r\n        description: 'Label for choosing end date',\r\n    },\r\n    occurrenceUntilEndDateLabel: {\r\n        id: 'OccurrenceUntilEndDateLabel',\r\n        defaultMessage: 'Occurs every {days} until',\r\n        description: 'Label to indicate the schedule occurs on specified days until a specified end date (the end date is shown on the page as a date picker)',\r\n    },\r\n});\r\nexport const RecurrencePicker = (props) => {\r\n    const { input: { value, onChange }, label, options, placeHolder, meta: { error, pristine }, } = props;\r\n    return (<Dropdown defaultSelectedKey={value} options={options} calloutProps={{ calloutMaxHeight: 300 }} onChange={(event, option) => onChange(option.key)} label={label} placeholder={placeHolder} styles={{\r\n        dropdown: { display: 'inline-block' },\r\n        title: { border: 'none', paddingLeft: '5px', lineHeight: 'unset', height: 'unset' },\r\n        root: { display: 'flex', height: 'unset', marginBottom: '9px' },\r\n        callout: { minWidth: '125px', marginTop: '-2px' },\r\n        caretDownWrapper: { lineHeight: 'unset' },\r\n        label: { lineHeight: 'unset', paddingTop: '0px', fontWeight: 'unset' },\r\n    }} errorMessage={!pristine && error}/>);\r\n};\r\nexport const ScheduledDayPicker = (props) => {\r\n    const { input: { value, onChange }, label, locale, meta: { error }, } = props;\r\n    return <DayPicker label={label} locale={locale} days={value} onChange={onChange} errorMessage={error}/>;\r\n};\r\nexport const EndDatePicker = (props) => {\r\n    const [isHidden, setIsHidden] = React.useState(true);\r\n    const { input: { value, onChange }, intl, locale, minDate, ariaLabel, } = props;\r\n    const { palette } = getCustomTheme();\r\n    return (<>\r\n            <ActionButton ariaLabel={ariaLabel} id=\"actionButtonDatePicker\" onClick={() => setIsHidden(false)} styles={{\r\n        root: {\r\n            fontSize: '12px',\r\n            height: '25px',\r\n            padding: '0px',\r\n            color: palette?.themePrimary,\r\n        },\r\n        rootHovered: {\r\n            color: palette?.themeDark,\r\n        },\r\n        label: { margin: '0px' },\r\n        flexContainer: { flexDirection: 'row-reverse' },\r\n        icon: { fontSize: '12px', marginTop: '2px' },\r\n    }} iconProps={{ iconName: 'ChevronDown' }}>\r\n                {formatDate(locale, value)}\r\n            </ActionButton>\r\n            <Callout gapSpace={0} target={document.getElementById('actionButtonDatePicker')} onDismiss={() => setIsHidden(true)} hidden={isHidden} setInitialFocus>\r\n                <Calendar firstDayOfWeek={firstDayOfWeekForPicker(locale)} strings={dayPickerStrings(locale, intl)} isMonthPickerVisible={false} value={value} showGoToToday={false} onSelectDate={(date) => {\r\n        onChange(date);\r\n        setIsHidden(true);\r\n    }} minDate={minDate}/>\r\n            </Callout>\r\n        </>);\r\n};\r\nconst EndDateChooserInjected = (props) => {\r\n    const { isCurrentLabParentLabAccount, locale, intl, form, values, schedule, defaultSchedule } = props;\r\n    const chooseEndDate = intl.formatMessage(messages.chooseEndDateLabel);\r\n    const { palette } = getCustomTheme();\r\n    let recurrenceEndDate = undefined;\r\n    if (isCurrentLabParentLabAccount) {\r\n        recurrenceEndDate =\r\n            schedule && schedule.recurrencePattern?.until\r\n                ? schedule.recurrencePattern?.until\r\n                : defaultSchedule.recurrencePattern?.until;\r\n    }\r\n    else {\r\n        recurrenceEndDate =\r\n            schedule && schedule.recurrencePattern?.expirationDate\r\n                ? schedule.recurrencePattern?.expirationDate\r\n                : defaultSchedule.recurrencePattern?.expirationDate;\r\n    }\r\n    let occurrenceUntilEndDateLabel = '';\r\n    if (values.endDatePicker) {\r\n        const days = values\r\n            .dayPicker.sort((a, b) => sortDays(locale, a, b))\r\n            .map((day) => mapDayToLocaleDay(locale, day))\r\n            .join(', ');\r\n        occurrenceUntilEndDateLabel = intl.formatMessage(messages.occurrenceUntilEndDateLabel, { days });\r\n    }\r\n    return (<>\r\n            {values.endDatePicker && (<Stack styles={{ root: { marginTop: '20px', fontSize: '12px' } }}>\r\n                    <Stack.Item>{occurrenceUntilEndDateLabel}</Stack.Item>\r\n                    <Stack.Item>\r\n                        <Stack horizontal>\r\n                            <Stack.Item>\r\n                                <Field name=\"endDatePicker\" locale={locale} intl={intl} minDate={values.startDatePicker} ariaLabel={occurrenceUntilEndDateLabel} component={EndDatePicker}/>\r\n                            </Stack.Item>\r\n                        </Stack>\r\n                    </Stack.Item>\r\n                </Stack>)}\r\n            {!values.endDatePicker && (<Stack styles={{ root: { marginTop: '20px', fontSize: '12px' } }}>\r\n                    <Stack.Item>\r\n                        <FormattedMessage id=\"OccurrenceNoendDateLabel\" defaultMessage=\"Occurs every {days}.\" description=\"Label to indicate the schedule occurs on specified days\" values={{\r\n        days: values\r\n            .dayPicker.sort((a, b) => sortDays(locale, a, b))\r\n            .map((day) => mapDayToLocaleDay(locale, day))\r\n            .join(', '),\r\n    }}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <ActionButton styles={{\r\n        root: {\r\n            color: palette?.themePrimary,\r\n            fontSize: '12px',\r\n            padding: '0px 0px 22px 0px',\r\n        },\r\n        label: {\r\n            margin: '0px',\r\n            marginTop: '6px',\r\n        },\r\n        rootHovered: {\r\n            color: palette?.themeDark,\r\n        },\r\n    }} onClick={() => {\r\n        form.change('endDatePicker', recurrenceEndDate);\r\n    }}>\r\n                            {chooseEndDate}\r\n                        </ActionButton>\r\n                    </Stack.Item>\r\n                </Stack>)}\r\n        </>);\r\n};\r\nconst EndDateChooser = injectIntl(EndDateChooserInjected);\r\nconst RecurrenceDialogInjected = (props) => {\r\n    const { isCurrentLabParentLabAccount, locale, intl, form, values, schedule, defaultSchedule, recurrenceFormValues, isDialogOpen, onDialogClose, } = props;\r\n    const repeat = intl.formatMessage(scheduleMessages.repeatLabel);\r\n    const everyWeek = intl.formatMessage(messages.everyWeekLabel);\r\n    const never = intl.formatMessage(messages.neverLabel);\r\n    const save = intl.formatMessage(commonMessages.save);\r\n    const cancel = intl.formatMessage(commonMessages.cancel);\r\n    const validationMessage = intl.formatMessage(scheduleMessages.selectedDaysValidationMessage);\r\n    const onDialogCancel = () => {\r\n        onDialogClose();\r\n        form.change('dayPicker', recurrenceFormValues.dayPicker);\r\n        form.change('recurrencePicker', recurrenceFormValues.recurrencePicker);\r\n        const until = recurrenceFormValues.endDatePicker ? new Date(recurrenceFormValues.endDatePicker) : undefined;\r\n        form.change('endDatePicker', until);\r\n    };\r\n    return (<Dialog styles={{ root: { padding: '0px 24px 24px 24px' } }} minWidth=\"360px\" dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: repeat,\r\n    }} modalProps={{\r\n        className: 'schedules__recurrence-dialog',\r\n        topOffsetFixed: false,\r\n    }} hidden={!isDialogOpen} onDismiss={onDialogCancel}>\r\n            <Stack styles={{ root: { width: '312px', minHeight: '100px' } }}>\r\n                <Stack.Item>\r\n                    <Field label={repeat} name=\"recurrencePicker\" component={RecurrencePicker} options={[\r\n        { key: 'weekly', text: everyWeek },\r\n        { key: 'never', text: never },\r\n    ]}/>\r\n                </Stack.Item>\r\n                <Stack.Item styles={{ root: { width: '300px' } }}>\r\n                    {values.recurrencePicker === 'weekly' && (<Field name=\"dayPicker\" locale={locale} component={ScheduledDayPicker} validate={(value) => validateSelectedDays(value, validationMessage)}/>)}\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    {values.recurrencePicker === 'weekly' && (<EndDateChooser isCurrentLabParentLabAccount={isCurrentLabParentLabAccount} locale={locale} form={form} values={values} schedule={schedule} defaultSchedule={defaultSchedule}/>)}\r\n                </Stack.Item>\r\n                <DialogFooter styles={{ actionsRight: { marginTop: '10px' } }}>\r\n                    <PrimaryButton disabled={form.getState().hasValidationErrors ||\r\n        (values.recurrencePicker === 'weekly' && !values.endDatePicker)} onClick={onDialogClose} text={save}/>\r\n                    <DefaultButton onClick={onDialogCancel} text={cancel}/>\r\n                </DialogFooter>\r\n            </Stack>\r\n        </Dialog>);\r\n};\r\nexport const RecurrenceDialog = injectIntl(RecurrenceDialogInjected);\r\nconst RecurrenceDialogControls = {\r\n    RecurrenceDialog,\r\n};\r\nexport default RecurrenceDialogControls;\r\n","import { Panel, PanelType } from '@fluentui/react';\r\nimport 'moment/min/locales';\r\nimport * as React from 'react';\r\nimport { Form } from 'react-final-form';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport FlyoutFooter from './flyout-footer';\r\nimport FlyoutForm from './flyout-form';\r\nimport { RecurrenceDialog } from './flyout-recurrence-dialog';\r\nimport { ScheduleTypeDropdown } from './flyout-shared-controls';\r\nimport { dropdownTimezones, estimatedClassLength, getDefaultVNextWeeklySchedule, getDefaultWeeklySchedule, getDropdownKeyFromDate, } from './flyout-utilities';\r\nimport { FlyoutMode, isEndTimeSameDay } from './schedule';\r\nimport scheduleMessages from './schedule-messages';\r\nimport './schedule.css';\r\nexport const ScheduleType = {\r\n    standard: 'standard',\r\n    startOnly: 'startOnly',\r\n    stopOnly: 'stopOnly',\r\n};\r\nexport const RecurrenceType = {\r\n    weekly: 'weekly',\r\n    never: 'never',\r\n};\r\nconst FlyoutInjected = (props) => {\r\n    const { intl, isCurrentLabParentLabAccount, locale, timezone, isPanelOpen, isSaving, createSchedule, updateSchedule, onClose, mode, schedule, scheduleType, } = props;\r\n    const addEvent = intl.formatMessage(scheduleMessages.addEvent);\r\n    const editEvent = intl.formatMessage(scheduleMessages.editEvent);\r\n    const close = intl.formatMessage(commonMessages.close);\r\n    const startTimeValidationMessage = intl.formatMessage(scheduleMessages.startTimeValidationMessage);\r\n    const stopTimeValidationMessage = intl.formatMessage(scheduleMessages.stopTimeValidationMessage);\r\n    const minimumDurationValidationMessage = intl.formatMessage(scheduleMessages.minimumDurationValidationMessage);\r\n    const [currentScheduleType, setCurrentScheduleType] = React.useState(scheduleType);\r\n    const [isRecurrenceDialogOpen, setIsRecurrenceDialogOpen] = React.useState(false);\r\n    let defaultSchedule = undefined;\r\n    let startDate = undefined;\r\n    let endDate = undefined;\r\n    let endTime = undefined;\r\n    if (isCurrentLabParentLabAccount) {\r\n        defaultSchedule = modifyScheduleForAddEvent(getDefaultWeeklySchedule(timezone), new Date(), isCurrentLabParentLabAccount);\r\n        const sched = schedule ?? defaultSchedule;\r\n        startDate = sched.start;\r\n        endDate = sched.recurrencePattern?.until;\r\n        endTime = sched.end;\r\n    }\r\n    else {\r\n        defaultSchedule = modifyScheduleForAddEvent(getDefaultVNextWeeklySchedule(timezone), new Date(), isCurrentLabParentLabAccount);\r\n        const sched = schedule ?? defaultSchedule;\r\n        startDate = sched.startAt;\r\n        endDate = sched.recurrencePattern?.expirationDate;\r\n        endTime = sched.stopAt;\r\n    }\r\n    const initialValues = {\r\n        dayPicker: schedule && schedule.recurrencePattern\r\n            ? schedule.recurrencePattern.weekDays\r\n            : defaultSchedule.recurrencePattern.weekDays,\r\n        startDatePicker: startDate ?? endTime,\r\n        endDatePicker: endDate,\r\n        startTimePicker: getDropdownKeyFromDate(startDate ?? endTime),\r\n        stopTimePicker: getDropdownKeyFromDate(endTime),\r\n        timezonePicker: schedule ? schedule.timeZoneId : getTimeZone(intl, defaultSchedule.timeZoneId),\r\n        recurrencePicker: schedule\r\n            ? schedule.recurrencePattern\r\n                ? RecurrenceType.weekly\r\n                : RecurrenceType.never\r\n            : RecurrenceType.weekly,\r\n        notes: schedule ? schedule.notes : '',\r\n    };\r\n    const [formValues, setFormValues] = React.useState(initialValues);\r\n    const [recurrenceFormValues, setRecurrenceFormValues] = React.useState({\r\n        dayPicker: initialValues.dayPicker,\r\n        endDatePicker: initialValues.endDatePicker ? new Date(initialValues.endDatePicker) : undefined,\r\n        recurrencePicker: initialValues.recurrencePicker,\r\n    });\r\n    React.useEffect(() => {\r\n        setCurrentScheduleType(scheduleType);\r\n    }, [scheduleType, schedule]);\r\n    React.useEffect(() => {\r\n        setFormValues(initialValues);\r\n    }, [isPanelOpen]);\r\n    const deleteRecurrence = (form) => {\r\n        // Change recurrence frequency but do not remove end date.\r\n        // Keep the end date value in case recurrence is added back.\r\n        form.change('recurrencePicker', 'never');\r\n    };\r\n    const previousIsSaving = usePrevious(isSaving);\r\n    React.useEffect(() => {\r\n        if (previousIsSaving && !isSaving) {\r\n            onClose();\r\n        }\r\n    }, [isSaving]);\r\n    return (<Form onSubmit={() => {\r\n        return; // no-op\r\n    }} validate={(values) => {\r\n        if (currentScheduleType === ScheduleType.standard) {\r\n            const start = new Date();\r\n            const stop = new Date();\r\n            // picker values are like \"0945\" or \"1645\"\r\n            start.setHours(parseInt(values.startTimePicker.substr(0, 2)), parseInt(values.startTimePicker.substr(2, 2)), 0, 0);\r\n            stop.setHours(parseInt(values.stopTimePicker.substr(0, 2)), parseInt(values.stopTimePicker.substr(2, 2)), 0, 0);\r\n            if (start >= stop) {\r\n                return {\r\n                    startTimePicker: startTimeValidationMessage,\r\n                    stopTimePicker: stopTimeValidationMessage,\r\n                };\r\n            }\r\n            else if (!isCurrentLabParentLabAccount) {\r\n                // vnext schedules must be at least 15 minutes long\r\n                start.setMinutes(start.getMinutes() + 15);\r\n                if (start > stop) {\r\n                    return {\r\n                        stopTimePicker: minimumDurationValidationMessage,\r\n                    };\r\n                }\r\n            }\r\n        }\r\n        return undefined;\r\n    }} initialValues={formValues}>\r\n            {(formProps) => (<form>\r\n                    <Panel className=\"schedules__flyout\" isOpen={isPanelOpen} type={PanelType.custom} customWidth=\"385px\" isLightDismiss={isSaving ? false : true} onDismiss={isSaving ? undefined : onClose} headerText={mode === FlyoutMode.add ? addEvent : editEvent} closeButtonAriaLabel={close} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<FlyoutFooter form={formProps.form} formValues={formProps.values} scheduleType={currentScheduleType} mode={mode} schedule={schedule} isCurrentLabParentLabAccount={isCurrentLabParentLabAccount} isSaving={isSaving} createSchedule={createSchedule} updateSchedule={updateSchedule} onClose={onClose}/>)}>\r\n                        <div style={{ marginTop: '10px', marginBottom: '20px' }}>\r\n                            <FormattedMessage id=\"ScheduleFlyoutMessage\" defaultMessage=\"Events can be used to start up and/or shut down all virtual machines in the lab at a specified time.  These events will not count against the user quota.\" description=\"Informational message displayed to user upon opening the flyout, explaining the schedule feature and that schedules do not count against quota.\"/>\r\n                        </div>\r\n                        <RecurrenceDialog isCurrentLabParentLabAccount={isCurrentLabParentLabAccount} isDialogOpen={isRecurrenceDialogOpen} onDialogClose={() => setIsRecurrenceDialogOpen(false)} locale={locale} form={formProps.form} recurrenceFormValues={recurrenceFormValues} values={formProps.values} schedule={schedule} defaultSchedule={defaultSchedule}/>\r\n                        <ScheduleTypeDropdown isCurrentLabParentLabAccount={isCurrentLabParentLabAccount} isSaving={isSaving} currentScheduleType={currentScheduleType} setScheduleType={setCurrentScheduleType}/>\r\n                        <FlyoutForm isSaving={isSaving} deleteRecurrence={() => deleteRecurrence(formProps.form)} locale={locale} values={formProps.values} scheduleType={currentScheduleType} onDialogOpen={() => setIsRecurrenceDialogOpen(true)} setRecurValues={(values) => setRecurrenceFormValues(values)}/>\r\n                    </Panel>\r\n                </form>)}\r\n        </Form>);\r\n};\r\nfunction getTimeZone(intl, defaultTimeZone) {\r\n    return !isTimezoneAvailable(intl, defaultTimeZone) ? '' : defaultTimeZone;\r\n}\r\nconst isTimezoneAvailable = (intl, timeZoneId) => {\r\n    const timezones = dropdownTimezones(intl);\r\n    return timezones.some((timezone) => timezone.key === timeZoneId);\r\n};\r\nconst getAdjustedMinutes = (currentMinutes) => {\r\n    if (currentMinutes <= 15) {\r\n        return 30;\r\n    }\r\n    else if (currentMinutes > 15 && currentMinutes < 30) {\r\n        return 45;\r\n    }\r\n    else {\r\n        return 60;\r\n    }\r\n};\r\nconst adjustScheduleEndDate = (schedule, now, minutes) => {\r\n    const isSameDay = isEndTimeSameDay(schedule.start);\r\n    if (!isSameDay) {\r\n        schedule.end.setHours(23, 59);\r\n    }\r\n    else {\r\n        schedule.end.setHours(now.getHours() + estimatedClassLength);\r\n        schedule.end.setMinutes(minutes);\r\n    }\r\n    return schedule;\r\n};\r\n// OK to assume schedule.startAt is populated here because this is only used on a default (standard) schedule\r\nconst adjustVNextScheduleEndDate = (schedule, now, minutes) => {\r\n    const isSameDay = isEndTimeSameDay(schedule.startAt);\r\n    if (!isSameDay) {\r\n        schedule.stopAt.setHours(23, 59);\r\n    }\r\n    else {\r\n        schedule.stopAt.setHours(now.getHours() + estimatedClassLength);\r\n        schedule.stopAt.setMinutes(minutes);\r\n    }\r\n    return schedule;\r\n};\r\nconst adjustScheduleStartDate = (schedule, now, minutes) => {\r\n    schedule.start.setHours(now.getHours());\r\n    schedule.start.setMinutes(minutes);\r\n    return schedule;\r\n};\r\n// OK to assume schedule.startAt is populated here because this is only used on a default (standard) schedule\r\nconst adjustVNextScheduleStartDate = (schedule, now, minutes) => {\r\n    schedule.startAt.setHours(now.getHours());\r\n    schedule.startAt.setMinutes(minutes);\r\n    return schedule;\r\n};\r\nconst adjustScheduleDatesForLateSameDay = (schedule) => {\r\n    schedule.start.setDate(schedule.start.getDate() + 1);\r\n    schedule.start.setHours(0, 0);\r\n    schedule.end.setHours(estimatedClassLength, 0);\r\n    return schedule;\r\n};\r\n// OK to assume schedule.startAt is populated here because this is only used on a default (standard) schedule\r\nconst adjustVNextScheduleDatesForLateSameDay = (schedule) => {\r\n    schedule.startAt.setDate(schedule.startAt.getDate() + 1);\r\n    schedule.startAt.setHours(0, 0);\r\n    schedule.stopAt.setHours(estimatedClassLength, 0);\r\n    return schedule;\r\n};\r\nconst adjustScheduleDatesForLateNextDay = (schedule) => {\r\n    schedule.start.setDate(schedule.start.getDate() + 1);\r\n    schedule.start.setHours(0, 30);\r\n    schedule.end.setHours(estimatedClassLength, 30);\r\n    return schedule;\r\n};\r\n// OK to assume schedule.startAt is populated here because this is only used on a default (standard) schedule\r\nconst adjustVNextScheduleDatesForLateNextDay = (schedule) => {\r\n    schedule.startAt.setDate(schedule.startAt.getDate() + 1);\r\n    schedule.startAt.setHours(0, 30);\r\n    schedule.stopAt.setHours(estimatedClassLength, 30);\r\n    return schedule;\r\n};\r\n/**\r\n * To prevent users from adding a schedule in the past, we take the current time and\r\n * make adjustments.  We set the default to ~15-30 minutes after the current time as schedules\r\n * need about a 15 minute head up from the RP.\r\n *\r\n * If the current time is close to midnight, to fulfill the 15 minute heads up we adjust the schedule\r\n * to be set in the next day.\r\n *\r\n * This is applicable only for schedules created through the add button - clicking on the calendar still\r\n * respects the date/time chosen.\r\n */\r\nexport const modifyScheduleForAddEvent = (schedule, now, isCurrentLabParentLabAccount) => {\r\n    const currentMinutes = now.getMinutes();\r\n    const currentHour = now.getHours();\r\n    if (isCurrentLabParentLabAccount) {\r\n        let sched = schedule;\r\n        if (currentHour == 23) {\r\n            if (currentMinutes >= 30 && currentMinutes <= 45) {\r\n                return adjustScheduleDatesForLateSameDay(sched);\r\n            }\r\n            else if (currentMinutes > 45) {\r\n                return adjustScheduleDatesForLateNextDay(sched);\r\n            }\r\n        }\r\n        const adjustedMinutes = getAdjustedMinutes(currentMinutes);\r\n        sched = adjustScheduleStartDate(sched, now, adjustedMinutes);\r\n        sched = adjustScheduleEndDate(sched, now, adjustedMinutes);\r\n        return sched;\r\n    }\r\n    else {\r\n        let sched = schedule;\r\n        if (currentHour == 23) {\r\n            if (currentMinutes >= 30 && currentMinutes <= 45) {\r\n                return adjustVNextScheduleDatesForLateSameDay(sched);\r\n            }\r\n            else if (currentMinutes > 45) {\r\n                return adjustVNextScheduleDatesForLateNextDay(sched);\r\n            }\r\n        }\r\n        const adjustedMinutes = getAdjustedMinutes(currentMinutes);\r\n        sched = adjustVNextScheduleStartDate(sched, now, adjustedMinutes);\r\n        sched = adjustVNextScheduleEndDate(sched, now, adjustedMinutes);\r\n        return sched;\r\n    }\r\n};\r\nexport const Flyout = injectIntl(FlyoutInjected);\r\nexport default Flyout;\r\n","import { DefaultButton, Dialog, DialogType, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nconst messages = defineMessages({\r\n    deleteScheduleTitle: {\r\n        id: 'DeleteScheduleTitle',\r\n        defaultMessage: 'Delete scheduled event',\r\n        description: 'Title for delete schedule dialog',\r\n    },\r\n    deleteRecurringScheduleConfirmationMessage: {\r\n        id: 'DeleteRecurringScheduleConfirmationMessage',\r\n        defaultMessage: 'This will delete all occurrences of the scheduled event. Do you want to continue?',\r\n        description: 'Confirmation message for deleting a recurring schedule',\r\n    },\r\n    deleteOnetimeScheduleConfirmationMessage: {\r\n        id: 'DeleteOnetimeScheduleConfirmationMessage',\r\n        defaultMessage: 'This will delete the scheduled event. Do you want to continue?',\r\n        description: 'Confirmation message for deleting a onetime schedule',\r\n    },\r\n});\r\nexport const ScheduleDeleteDialog = (props) => {\r\n    const { isSaving, schedule, onDismiss, onSubmit } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const previousIsSaving = usePrevious(isSaving);\r\n    React.useEffect(() => {\r\n        if (previousIsSaving && !isSaving) {\r\n            onDismiss();\r\n        }\r\n    }, [isSaving]);\r\n    const cancel = msg(commonMessages.cancel);\r\n    const yes = msg(commonMessages.yes);\r\n    const deleteRecurringMessage = msg(messages.deleteRecurringScheduleConfirmationMessage);\r\n    const deleteOnetimeMessage = msg(messages.deleteOnetimeScheduleConfirmationMessage);\r\n    const deleteScheduleTitle = msg(messages.deleteScheduleTitle);\r\n    return (<Dialog hidden={false} onDismiss={isSaving ? undefined : onDismiss} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: deleteScheduleTitle,\r\n        subText: schedule && schedule.recurrencePattern ? deleteRecurringMessage : deleteOnetimeMessage,\r\n    }} modalProps={{\r\n        styles: { main: { maxWidth: 450 } },\r\n    }}>\r\n            <Stack horizontal tokens={{ childrenGap: '8px' }} styles={{ root: { width: '100%' } }} verticalAlign=\"end\" horizontalAlign=\"end\">\r\n                <Stack.Item>\r\n                    <SubmitButton onClick={() => onSubmit(schedule)} buttonText={yes} isSubmitting={isSaving}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DefaultButton autoFocus disabled={isSaving} onClick={isSaving ? undefined : onDismiss} text={cancel}/>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Dialog>);\r\n};\r\nexport default ScheduleDeleteDialog;\r\n","import { defineMessages } from 'react-intl';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { ErrorCode } from '../common/error-codes';\r\nimport commonMessages from '../language/common-messages';\r\nimport { trackTrace } from '../utils/telemetry/telemetry-channel';\r\nconst messages = defineMessages({\r\n    updateErrorStopMustBeAfterStart: {\r\n        id: 'UpdateErrorErrorMustBeAfterStart',\r\n        defaultMessage: 'Unable to update schedule, as stop time must be after start time',\r\n        description: 'Message to indicate that update of schedule failed because end time must be after start time.',\r\n    },\r\n    updateScheduleGenericError: {\r\n        id: 'UpdateScheduleGenericError',\r\n        defaultMessage: 'Failed to update schedule',\r\n        description: 'Generic error message displayed when we failed to update a schedule and do not have a specific error code mapped.',\r\n    },\r\n    deleteErrorScheduleNotFound: {\r\n        id: 'DeleteErrorScheduleNotFound',\r\n        defaultMessage: 'Unable to delete schedule, as it could not be found',\r\n        description: 'Message to indicate that delete of schedule failed because it could not be found.',\r\n    },\r\n    deleteScheduleGenericError: {\r\n        id: 'DeleteScheduleGenericError',\r\n        defaultMessage: 'Failed to delete schedule',\r\n        description: 'Generic error message displayed when we failed to delete a schedule and do not have a specific error code mapped.',\r\n    },\r\n    loadSchedulesGenericError: {\r\n        id: 'LoadSchedulesGenericError',\r\n        defaultMessage: 'Failed to load schedules',\r\n        description: 'Generic error message displayed when we fail to load schedules and do not have a specific error code mapped.',\r\n    },\r\n});\r\nexport const getErrorMessage = (intl, error) => {\r\n    switch (error.failureOperation) {\r\n        case FailureOperation.DeleteSchedule:\r\n            return getDeleteErrorMessage(intl, error);\r\n        case FailureOperation.LoadSchedules:\r\n            return getLoadErrorMessage(intl, error);\r\n        case FailureOperation.UpdateSchedule:\r\n            return getUpdateErrorMessage(intl, error);\r\n        default:\r\n            return getFallbackErrorMessage(intl, error);\r\n    }\r\n};\r\nconst getDeleteErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n            return intl.formatMessage(messages.deleteErrorScheduleNotFound);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.deleteScheduleGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getLoadErrorMessage = (intl, error) => {\r\n    const errorMessage = intl.formatMessage(messages.loadSchedulesGenericError);\r\n    return getFallbackErrorMessage(intl, error, errorMessage);\r\n};\r\nconst getUpdateErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.MustBeGreaterThanProperty:\r\n            return intl.formatMessage(messages.updateErrorStopMustBeAfterStart);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.updateScheduleGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getFallbackErrorMessage = (intl, error, genericMessageForOperation) => {\r\n    // for cases where we haven't recorded a code and corresponding message in this client code yet\r\n    trackTrace(`schedule-error-handling: getFallbackErrorMessage - Unmapped error code: ${error ? error.code : 'Unknown'}`);\r\n    // NOTE: Not showing the raw error for now. Perhaps we should let the banner expand and enable the raw error as\r\n    // a way of viewing details?\r\n    return genericMessageForOperation || intl.formatMessage(commonMessages.genericErrorMessage);\r\n};\r\nconst ScheduleErrorHandling = {\r\n    getErrorMessage,\r\n};\r\nexport default ScheduleErrorHandling;\r\n","import { Callout, CommandBar, DirectionalHint, Icon, Link, MessageBar, MessageBarType, } from '@fluentui/react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport moment from 'moment';\r\nimport 'moment/min/locales';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { ManagedLabsModels } from '@azure-lab-services/ml-ts';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport InfoSection from '../common/info-section';\r\nimport { getNavigationItems } from '../common/lab-nav-items';\r\nimport LoadingContainer from '../common/loading-section';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport commonMessages from '../language/common-messages';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport Routes from '../utils/routes';\r\nimport { getEvents, updateDateWindow } from './calendar-utilities';\r\nimport { Flyout, ScheduleType } from './flyout';\r\nimport { estimatedClassLength, firstDayOfWeek, getDefaultVNextWeeklySchedule, getDefaultWeeklySchedule, } from './flyout-utilities';\r\nimport { ScheduleDeleteDialog } from './schedule-delete-dialog';\r\nimport { getErrorMessage } from './schedule-error-handling';\r\nimport scheduleMessages from './schedule-messages';\r\nimport './calendar.css';\r\nimport './schedule.css';\r\nexport const ScheduleErrorBanner = (props) => {\r\n    const intl = useIntl();\r\n    return (<>\r\n            {props.error && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)} onDismiss={() => props.clearError(props.error)}>\r\n                    {getErrorMessage(intl, props.error)}\r\n                </MessageBar>)}\r\n        </>);\r\n};\r\nexport const FlyoutMode = {\r\n    add: 'add',\r\n    edit: 'edit',\r\n};\r\nexport const Schedules = (props) => {\r\n    const { scheduleViewModel, createSchedule, updateSchedule, deleteSchedule, navigateRoute } = props;\r\n    const { labId, isCurrentLabParentLabAccount, isTeamsIntegrationEnabled, idleConfig, locale, errors, timezone, isLoading, isTemplateCreating, showLoadError, schedules, isSaving, isReadOnly, showCalendarImmediately, isTeamsOrLmsIntegrationEnabled, shouldDisableScheduleUpdate, } = scheduleViewModel;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [startWindow, setStartWindow] = React.useState(new Date());\r\n    const [endWindow, setEndWindow] = React.useState(new Date());\r\n    const [isPanelOpen, setIsPanelOpen] = React.useState(false);\r\n    const [isCalloutOpen, setIsCalloutOpen] = React.useState(false);\r\n    const [isDeleteDialogOpen, setIsDeleteDialogOpen] = React.useState(false);\r\n    const [mouseEvent, setMouseEvent] = React.useState(undefined);\r\n    const [flyoutScheduleTarget, setFlyoutScheduleTarget] = React.useState(undefined);\r\n    const [deleteScheduleTarget, setDeleteScheduleTarget] = React.useState(undefined);\r\n    const [calloutScheduleTarget, setCalloutScheduleTarget] = React.useState(undefined);\r\n    const [timesInCurrentZone, setTimesInCurrentZone] = React.useState({ start: undefined, end: undefined });\r\n    const [flyoutMode, setFlyoutMode] = React.useState(FlyoutMode.add);\r\n    const [lastDateClick, setLastDateClick] = React.useState(new Date());\r\n    const { primaryBackgroundColor, pageTitleStyle, primaryCommandBarStyles, messageBarStyles } = getCustomTheme();\r\n    // these are used to set a dynamic fixed height for the calendar so the scrollbar\r\n    // works correctly and we don't need multiple styles for different container heights based\r\n    // on message bars and other changes\r\n    const bodyDiv = React.useRef();\r\n    const [bodyHeight, setBodyHeight] = React.useState(undefined);\r\n    React.useEffect(() => {\r\n        if (bodyDiv &&\r\n            bodyDiv.current &&\r\n            bodyDiv.current.clientHeight !== 0 &&\r\n            bodyDiv.current.clientHeight !== bodyHeight) {\r\n            setBodyHeight(bodyDiv.current.clientHeight);\r\n        }\r\n    });\r\n    // Set scrollable region to be focusable per acccesibility requirements\r\n    // https://dev.azure.com/devdiv/OnlineServices/_workitems/edit/1278634/\r\n    React.useEffect(() => {\r\n        const items = document.getElementsByClassName('fc-scroller-liquid-absolute');\r\n        if (items && items.length > 0) {\r\n            const scrollableRegion = items[0];\r\n            scrollableRegion.setAttribute('tabindex', '0');\r\n        }\r\n    });\r\n    const onFlyoutOpen = (schedule, mode = FlyoutMode.add) => {\r\n        setFlyoutScheduleTarget(schedule);\r\n        setFlyoutMode(mode);\r\n        setIsPanelOpen(true);\r\n    };\r\n    const onFlyoutClose = () => {\r\n        setIsPanelOpen(false);\r\n        setFlyoutMode(FlyoutMode.add);\r\n        setFlyoutScheduleTarget(undefined);\r\n    };\r\n    const onEditClicked = (schedule) => {\r\n        onFlyoutOpen(schedule, FlyoutMode.edit);\r\n    };\r\n    const onOpenDeleteDialog = (schedule) => {\r\n        setDeleteScheduleTarget(schedule);\r\n        setIsDeleteDialogOpen(true);\r\n    };\r\n    const onCloseDeleteDialog = () => {\r\n        setIsDeleteDialogOpen(false);\r\n        setDeleteScheduleTarget(undefined);\r\n    };\r\n    const onOpenCallout = (schedule, mouseEvent, start, end) => {\r\n        setTimesInCurrentZone({ start, end });\r\n        setCalloutScheduleTarget(schedule);\r\n        setMouseEvent(mouseEvent);\r\n        setIsCalloutOpen(true);\r\n    };\r\n    const onCloseCallout = () => {\r\n        setIsCalloutOpen(false);\r\n        setMouseEvent(undefined);\r\n        setTimesInCurrentZone({ start: undefined, end: undefined });\r\n        setCalloutScheduleTarget(undefined);\r\n    };\r\n    const onClickSettingsLink = () => {\r\n        navigateRoute(Routes.Settings(labId));\r\n    };\r\n    let navigationItems = undefined;\r\n    if (isTeamsOrLmsIntegrationEnabled) {\r\n        navigationItems = getNavigationItems(intl, labId, LabNavKeys.Schedule, navigateRoute);\r\n    }\r\n    if (showLoadError) {\r\n        return (<div id=\"schedule-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                <div id=\"schedule-content\">\r\n                    {navigationItems && (<div id=\"schedule-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <FullPageMessage image=\"error-general\" message={<FormattedMessage id=\"ScheduleLoadError\" defaultMessage=\"Cannot load lab schedules\" description=\"Error shown on user schedule  page when it fails to load necessary data from the server.\"/>} messageDetails={<FormattedMessage id=\"ScheduleLoadErrorDetails\" defaultMessage=\"Your lab does not appear to be in a state to view or edit schedules at this time. Please try again later or contact your Lab Services administator for assistance.\" description=\"Error shown on user schedule  page when it fails to load necessary data from the server.\"/>}/>\r\n                </div>\r\n            </div>);\r\n    }\r\n    if (isLoading) {\r\n        return (<div id=\"schedule-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                <div id=\"schedule-content\">\r\n                    {navigationItems && (<div id=\"schedule-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <LoadingContainer />\r\n                </div>\r\n            </div>);\r\n    }\r\n    if (isTemplateCreating) {\r\n        return (<div id=\"schedule-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                <div id=\"schedule-content\">\r\n                    {navigationItems && (<div id=\"schedule-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <FullPageMessage image=\"error-general\" message={<FormattedMessage id=\"TemplateCreatingMessage\" defaultMessage=\"Cannot load lab schedules\" description=\"Message shown on user schedule page when template is still creating.\"/>} messageDetails={<FormattedMessage id=\"TemplateCreatingDescription\" defaultMessage=\"Your template is still creating. Please wait until template creation is finished to manage schedules.\" description=\"Description shown on user schedule page when template is still creating.\"/>}/>\r\n                </div>\r\n            </div>);\r\n    }\r\n    const headerContent = (<>\r\n            {errors.size > 0 &&\r\n        errors\r\n            .map((errors) => {\r\n            return errors.map((error, errorIndex) => (<ScheduleErrorBanner key={`${error.id}-${error.failureOperation}`} error={error} clearError={() => props.clearError(error.id, errorIndex)}/>));\r\n        })\r\n            .toList()}\r\n            {idleConfig.shutdownWhenNotConnected && (<MessageBar messageBarType={MessageBarType.info} styles={messageBarStyles}>\r\n                    <FormattedMessage id=\"ScheduleShutdownOnNoConnectMessage\" defaultMessage=\"Based on your <Link>auto-shutdown settings</Link>, virtual machines will automatically shut down when users don't connect within {gracePeriod} minutes of the scheduled event starting.\" description=\"Message shown on the Schedules page when Shutdown on No Connect is enabled on the lab. <Link> and </Link> should not be localized, but text between them should. {gracePeriod} is the number of minutes (integer).\" values={{\r\n        gracePeriod: idleConfig.shutdownOnNoConnectGracePeriod,\r\n        Link: (chunks) => <Link onClick={onClickSettingsLink}>{chunks}</Link>,\r\n    }}/>\r\n                </MessageBar>)}\r\n            <CommandBar styles={primaryCommandBarStyles} items={isReadOnly\r\n        ? []\r\n        : [\r\n            {\r\n                key: 'addEvent',\r\n                text: msg(scheduleMessages.addEvent),\r\n                iconProps: { iconName: 'Add' },\r\n                onClick: () => onFlyoutOpen(),\r\n                disabled: !!shouldDisableScheduleUpdate,\r\n            },\r\n        ]} farItems={navigationItems}/>\r\n            <h1 style={pageTitleStyle}>\r\n                <FormattedMessage {...commonMessages.schedule}/>\r\n            </h1>\r\n        </>);\r\n    return (<>\r\n            <div id=\"schedule-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                <div id=\"schedule-content\">\r\n                    <div id=\"schedule-header\">{headerContent}</div>\r\n                    <div id=\"schedule-body\" ref={bodyDiv} className={'dynamic-fixed-size-no-scroll'}>\r\n                        \r\n                        {(showCalendarImmediately || bodyHeight !== undefined) && (<div className={isTeamsIntegrationEnabled ? 'schedule__teams-calendar' : undefined}>\r\n                                <FullCalendar initialView=\"timeGridWeek\" plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]} dateClick={isReadOnly || !!shouldDisableScheduleUpdate\r\n        ? undefined\r\n        : (dateClickInfo) => {\r\n            const thisClick = new Date();\r\n            const delay = getDelayOfLastClick(thisClick, lastDateClick);\r\n            setLastDateClick(thisClick);\r\n            if (delay < 300) {\r\n                const newSchedule = getScheduleFromDateClick(dateClickInfo.date, timezone, isCurrentLabParentLabAccount);\r\n                onFlyoutOpen(newSchedule);\r\n            }\r\n        }} eventDidMount={(info) => {\r\n        info.el.setAttribute('tabIndex', '0');\r\n    }} slotEventOverlap={false} dayHeaderFormat={{ day: 'numeric', weekday: 'long' }} eventMinHeight={32} displayEventTime={false} firstDay={firstDayOfWeek(locale)} buttonText={{ today: msg(scheduleMessages.todayLabel) }} locale={locale} scrollTime={'08:00:00'} slotLabelFormat={{ hour: 'numeric', meridiem: 'short' }} titleFormat={{ year: 'numeric', month: 'long', day: 'numeric' }} allDaySlot={false} eventClick={(click) => {\r\n        const start = click.event.extendedProps && click.event.extendedProps.start\r\n            ? click.event.extendedProps.start\r\n            : click.event.start;\r\n        const end = click.event.extendedProps && click.event.extendedProps.end\r\n            ? click.event.extendedProps.end\r\n            : click.event.end;\r\n        const scheduleIndex = schedules.findIndex((schedule) => schedule.id.toLowerCase() === click.event.id.toLowerCase());\r\n        onOpenCallout(schedules[scheduleIndex], click.jsEvent, start, end);\r\n    }} windowResize={() => {\r\n        if (bodyDiv && bodyDiv.current && bodyDiv.current.clientHeight !== bodyHeight) {\r\n            setBodyHeight(bodyDiv.current.clientHeight);\r\n        }\r\n    }} height={bodyHeight === undefined ? 'parent' : bodyHeight - 34} datesSet={(info) => updateDateWindow(startWindow, endWindow, info, setStartWindow, setEndWindow)} events={getEvents(isCurrentLabParentLabAccount, locale, intl, schedules, startWindow, endWindow)}/>\r\n                            </div>)}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <Flyout mode={flyoutMode} isCurrentLabParentLabAccount={isCurrentLabParentLabAccount} locale={locale} schedule={flyoutScheduleTarget} scheduleType={getScheduleType(flyoutScheduleTarget, flyoutMode, isCurrentLabParentLabAccount)} timezone={timezone} isPanelOpen={isPanelOpen} onClose={onFlyoutClose} createSchedule={createSchedule} updateSchedule={updateSchedule} isSaving={isSaving}/>\r\n            {isDeleteDialogOpen && (<ScheduleDeleteDialog isSaving={isSaving} schedule={deleteScheduleTarget} onDismiss={onCloseDeleteDialog} onSubmit={deleteSchedule}/>)}\r\n            {isCalloutOpen && (<ScheduleCallout isCurrentLabParentLabAccount={isCurrentLabParentLabAccount} locale={locale} schedule={calloutScheduleTarget} timesInCurrentZone={timesInCurrentZone} mouseEvent={mouseEvent} isReadOnly={isReadOnly} shouldDisableScheduleUpdate={shouldDisableScheduleUpdate} onClose={onCloseCallout} onEditClicked={onEditClicked} onDeleteClicked={onOpenDeleteDialog}/>)}\r\n        </>);\r\n};\r\nexport const isEndTimeSameDay = (date) => {\r\n    const end = new Date(date);\r\n    end.setHours(date.getHours() + estimatedClassLength);\r\n    return moment(date).isSame(moment(end), 'day');\r\n};\r\nexport const getScheduleFromDateClick = (date, timezone, isCurrentLabParentLabAccount) => {\r\n    const day = moment().day(date.getDay()).format('dddd');\r\n    if (isCurrentLabParentLabAccount) {\r\n        const schedule = getDefaultWeeklySchedule(timezone);\r\n        schedule.recurrencePattern.weekDays = [day];\r\n        schedule.start = new Date(date);\r\n        schedule.end = new Date(date);\r\n        schedule.start.setHours(date.getHours());\r\n        schedule.recurrencePattern.until = moment(schedule.start).add(4, 'months').toDate();\r\n        const isSameDay = isEndTimeSameDay(date);\r\n        if (!isSameDay) {\r\n            schedule.end.setHours(23, 59);\r\n        }\r\n        else {\r\n            schedule.end.setHours(date.getHours() + estimatedClassLength);\r\n        }\r\n        return schedule;\r\n    }\r\n    else {\r\n        const schedule = getDefaultVNextWeeklySchedule(timezone);\r\n        schedule.recurrencePattern.weekDays = [day];\r\n        schedule.startAt = new Date(date);\r\n        schedule.stopAt = new Date(date);\r\n        schedule.startAt.setHours(date.getHours());\r\n        schedule.recurrencePattern.expirationDate = moment(schedule.startAt).add(4, 'months').toDate();\r\n        const isSameDay = isEndTimeSameDay(date);\r\n        if (!isSameDay) {\r\n            schedule.stopAt.setHours(23, 59);\r\n        }\r\n        else {\r\n            schedule.stopAt.setHours(date.getHours() + estimatedClassLength);\r\n        }\r\n        return schedule;\r\n    }\r\n};\r\nconst getDelayOfLastClick = (thisClick, lastClick) => {\r\n    const before = moment(lastClick);\r\n    const now = moment(thisClick);\r\n    const duration = moment.duration(now.diff(before));\r\n    return duration.asMilliseconds();\r\n};\r\nconst getScheduleType = (schedule, flyoutMode, isCurrentLabParentLabAccount) => {\r\n    let scheduleType = ScheduleType.standard;\r\n    if (flyoutMode === FlyoutMode.edit && schedule) {\r\n        if (isCurrentLabParentLabAccount) {\r\n            if (schedule.endAction.enableState === ManagedLabsModels.EnableState.Disabled) {\r\n                scheduleType = ScheduleType.startOnly;\r\n            }\r\n            else if (schedule.startAction.enableState === ManagedLabsModels.EnableState.Disabled) {\r\n                scheduleType = ScheduleType.stopOnly;\r\n            }\r\n        }\r\n        else {\r\n            if (!schedule.startAt) {\r\n                scheduleType = ScheduleType.stopOnly;\r\n            }\r\n        }\r\n    }\r\n    return scheduleType;\r\n};\r\nconst DividerLine = () => {\r\n    return <div style={{ height: '1px' }} className=\"ms-bgColor-neutralLight\"/>;\r\n};\r\nexport const ScheduleCallout = (props) => {\r\n    const { isCurrentLabParentLabAccount, locale, schedule, mouseEvent, timesInCurrentZone, isReadOnly, shouldDisableScheduleUpdate, onClose, onEditClicked, onDeleteClicked, } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const isLocked = schedule.provisioningState === LabServicesModels.ProvisioningState.Locked;\r\n    let isStartEnabled = false;\r\n    let isEndEnabled = false;\r\n    let recurrenceStart = undefined;\r\n    let recurrenceEnd = undefined;\r\n    if (isCurrentLabParentLabAccount) {\r\n        const sched = schedule;\r\n        if (sched.startAction?.enableState === ManagedLabsModels.EnableState.Enabled) {\r\n            isStartEnabled = true;\r\n        }\r\n        if (sched.endAction?.enableState === ManagedLabsModels.EnableState.Enabled) {\r\n            isEndEnabled = true;\r\n        }\r\n        recurrenceStart = sched.start;\r\n        if (sched.recurrencePattern) {\r\n            recurrenceEnd = sched.recurrencePattern.until;\r\n        }\r\n    }\r\n    else {\r\n        isEndEnabled = true; // start-only schedules are not permitted in vnext\r\n        const sched = schedule;\r\n        if (sched.startAt !== undefined) {\r\n            isStartEnabled = true;\r\n        }\r\n        recurrenceStart = sched.startAt;\r\n        if (sched.recurrencePattern) {\r\n            recurrenceEnd = sched.recurrencePattern.expirationDate;\r\n        }\r\n    }\r\n    return (<Callout styles={{\r\n        root: {\r\n            overflowWrap: 'break-word',\r\n            wordBreak: 'break-all',\r\n            width: '300px',\r\n            padding: '17px 28px 17px 28px',\r\n        },\r\n    }} className=\"schedules__event-callout\" target={mouseEvent} onDismiss={onClose} isBeakVisible={true} directionalHint={DirectionalHint.rightCenter}>\r\n            <div style={{ fontSize: '20px', fontWeight: 500, paddingBottom: '25px' }}>\r\n                {isStartEnabled &&\r\n        timesInCurrentZone.start &&\r\n        msg(scheduleMessages.startWithTimeLabel, {\r\n            startTime: moment(timesInCurrentZone.start).locale(locale).format('LT'),\r\n        })}\r\n                {isEndEnabled && timesInCurrentZone.end && (<div>\r\n                        {msg(scheduleMessages.stopWithTimeLabel, {\r\n        stopTime: moment(timesInCurrentZone.end).locale(locale).format('LT'),\r\n    })}\r\n                    </div>)}\r\n            </div>\r\n            <div style={{ paddingBottom: '25px' }}>\r\n                {schedule.recurrencePattern && <Icon iconName=\"Sync\" styles={{ root: { paddingRight: '10px' } }}/>}\r\n                <span>{moment(recurrenceStart).locale(locale).format('ddd l')}</span>\r\n                {schedule.recurrencePattern && recurrenceEnd && (<span> - {moment(recurrenceEnd).locale(locale).format('ddd l')}</span>)}\r\n                {schedule.recurrencePattern && !recurrenceEnd && (<span>\r\n                        {' '}\r\n                        -{' '}\r\n                        <FormattedMessage id=\"NoEndDateLabel\" defaultMessage=\"no end date\" description=\"Label indicating the schedule has no end date\"/>\r\n                    </span>)}\r\n            </div>\r\n            {schedule.notes && <div className=\"schedules__event-callout--notes\">{schedule.notes}</div>}\r\n            {!isReadOnly && !isLocked && (<>\r\n                    <DividerLine />\r\n                    <CommandBar styles={{ root: { backgroundColor: 'transparent', paddingLeft: '0px', paddingTop: '10px' } }} items={[\r\n        {\r\n            key: 'Edit',\r\n            ariaLabel: msg(commonMessages.edit),\r\n            title: msg(commonMessages.edit),\r\n            iconOnly: true,\r\n            iconProps: {\r\n                iconName: 'Edit',\r\n                styles: {\r\n                    root: {\r\n                        fontSize: '18px',\r\n                    },\r\n                },\r\n            },\r\n            disabled: !!shouldDisableScheduleUpdate,\r\n            onClick: () => {\r\n                onEditClicked(schedule);\r\n                onClose();\r\n            },\r\n        },\r\n        {\r\n            key: 'Delete',\r\n            ariaLabel: msg(commonMessages.delete),\r\n            title: msg(commonMessages.delete),\r\n            iconOnly: true,\r\n            iconProps: {\r\n                iconName: 'Delete',\r\n            },\r\n            onClick: () => {\r\n                onDeleteClicked(schedule);\r\n                onClose();\r\n            },\r\n        },\r\n    ]}/>\r\n                </>)}\r\n            {isLocked && (<>\r\n                    <DividerLine />\r\n                    <InfoSection>\r\n                        <div style={{ wordBreak: 'break-word' }}>\r\n                            <FormattedMessage id=\"EditNotAllowedWhenQueuedOrRunning\" defaultMessage=\"This event is currently queued to run or running, so it cannot be edited.\" description=\"Message shown when editing or deleting schedule is not allowed because it is queued to run or currently running.\"/>\r\n                        </div>\r\n                    </InfoSection>\r\n                </>)}\r\n        </Callout>);\r\n};\r\nexport default Schedules;\r\n","import memoize from 'memoize-one';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { getDefaultIdleConfig, getLabIdleConfig, getVNextLabIdleConfig } from '../common/shutdown-policy/selectors';\r\nimport { getCombinedState, LoadingStoreState } from '../data/models/loading-store-state';\r\nimport { isTeamsMode, getTimezone, storeIsLoading, getLocale, isTeamsOrLmsMode, } from '../redux/selectors/common-selectors';\r\nimport { isCurrentLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { getCurrentLabId, getCurrentLab, isCurrentLabReadOnly } from '../redux/selectors/lab-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { isHealthyState, ProvisioningState } from '../utils/provisioning-state';\r\nimport { shouldDisableCurrentLabUpdate } from '../redux/selectors/vnext/lab-selectors';\r\nexport const getScheduleViewModel = memoize((state) => {\r\n    const isLabAccount = isCurrentLabParentLabAccount(state);\r\n    const isTeamsIntegrationEnabled = isTeamsMode(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    const defaultIdleConfig = getDefaultIdleConfig(state);\r\n    const lab = getCurrentLab(state);\r\n    const labId = getCurrentLabId(state);\r\n    const isReadOnly = isCurrentLabReadOnly(state);\r\n    const timezone = getTimezone(state);\r\n    const locale = getLocale(state);\r\n    if (isLabAccount) {\r\n        const scheduleStore = state.get('scheduleStore');\r\n        const templateStore = state.get('templateStore');\r\n        const errors = scheduleStore.get('errors');\r\n        const schedules = scheduleStore.get('schedules').toJS();\r\n        let loadState = getCombinedState(scheduleStore.loadState, templateStore.loadState);\r\n        let isTemplateCreating = false;\r\n        const templateId = templateStore.currentTemplate;\r\n        let isWindows = false;\r\n        if (templateStore.loadState === LoadingStoreState.Updating ||\r\n            templateStore.loadState === LoadingStoreState.Loaded) {\r\n            if (!templateId) {\r\n                loadState = LoadingStoreState.LoadingFailed;\r\n            }\r\n            else {\r\n                const template = templateStore.templates.find((o) => o.id === templateId);\r\n                isWindows = template?.resourceSettings?.osType === Ml.OsType.Windows;\r\n                if (!isHealthyState(template)) {\r\n                    loadState = LoadingStoreState.LoadingFailed;\r\n                }\r\n                else if (template && template.provisioningState === ProvisioningState.Creating) {\r\n                    isTemplateCreating = true;\r\n                }\r\n            }\r\n        }\r\n        const isLoading = storeIsLoading(loadState);\r\n        const showLoadError = loadState === LoadingStoreState.LoadingFailed;\r\n        const isCreating = scheduleStore.get('isCreating');\r\n        const isUpdating = scheduleStore.get('isUpdating');\r\n        const isDeleting = scheduleStore.get('isDeleting');\r\n        const isSaving = isCreating || isUpdating || isDeleting;\r\n        const idleConfig = lab ? getLabIdleConfig(defaultIdleConfig, lab, isWindows) : defaultIdleConfig;\r\n        return {\r\n            labId,\r\n            isCurrentLabParentLabAccount: isLabAccount,\r\n            isSaving,\r\n            isTemplateCreating,\r\n            isLoading,\r\n            showLoadError,\r\n            schedules,\r\n            isReadOnly,\r\n            errors,\r\n            isTeamsIntegrationEnabled,\r\n            idleConfig,\r\n            timezone,\r\n            locale,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n        };\r\n    }\r\n    else {\r\n        const scheduleStore = state.get('vNextScheduleStore');\r\n        let loadState = scheduleStore.get('loadState');\r\n        const errors = scheduleStore.get('errors');\r\n        const schedules = scheduleStore\r\n            .get('schedules')\r\n            .filter((o) => o.provisioningState !== LabServicesModels.ProvisioningState.Deleting)\r\n            .toJS();\r\n        const isTemplateCreating = !!lab &&\r\n            !!lab.provisioningState &&\r\n            lab.provisioningState === LabServicesModels.ProvisioningState.Creating;\r\n        if (lab) {\r\n            if (!isHealthyState(lab.provisioningState)) {\r\n                loadState = LoadingStoreState.LoadingFailed;\r\n            }\r\n        }\r\n        else if (!isTemplateCreating) {\r\n            loadState = LoadingStoreState.LoadingFailed;\r\n        }\r\n        const isLoading = storeIsLoading(loadState);\r\n        const showLoadError = loadState === LoadingStoreState.LoadingFailed;\r\n        const isCreating = scheduleStore.get('isCreating');\r\n        const isUpdating = scheduleStore.get('isUpdating');\r\n        const isDeleting = scheduleStore.get('isDeleting');\r\n        const isSaving = isCreating || isUpdating || isDeleting;\r\n        const idleConfig = lab ? getVNextLabIdleConfig(lab) : defaultIdleConfig;\r\n        const shouldDisableScheduleUpdate = shouldDisableCurrentLabUpdate(state);\r\n        return {\r\n            labId,\r\n            isCurrentLabParentLabAccount: isLabAccount,\r\n            isSaving,\r\n            isTemplateCreating,\r\n            isLoading,\r\n            showLoadError,\r\n            schedules,\r\n            isReadOnly,\r\n            errors,\r\n            isTeamsIntegrationEnabled,\r\n            idleConfig,\r\n            timezone,\r\n            locale,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            shouldDisableScheduleUpdate,\r\n        };\r\n    }\r\n});\r\nexport const getScheduleContainerModel = memoize((state) => {\r\n    const search = getSearch(state);\r\n    const scheduleViewModel = getScheduleViewModel(state);\r\n    if (scheduleViewModel.isCurrentLabParentLabAccount) {\r\n        const templateStore = state.get('templateStore');\r\n        const templateId = templateStore.currentTemplate;\r\n        return {\r\n            scheduleViewModel,\r\n            search,\r\n            templateId,\r\n        };\r\n    }\r\n    else {\r\n        return {\r\n            scheduleViewModel,\r\n            search,\r\n        };\r\n    }\r\n});\r\n","import { routerActions } from 'connected-react-router';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { PageTitle } from '../common/page/page-title';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { clearError, createSchedule, createVNextSchedule, deleteSchedule, updateSchedule, updateVNextSchedule, } from '../redux/actions/schedule/schedule-action-creators';\r\nimport Schedules from './schedule';\r\nimport { getScheduleContainerModel } from './schedule-selectors';\r\nclass SchedulesContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._createSchedule = this._createSchedule.bind(this);\r\n        this._updateSchedule = this._updateSchedule.bind(this);\r\n        this._deleteSchedule = this._deleteSchedule.bind(this);\r\n        this._navigateRoute = this._navigateRoute.bind(this);\r\n    }\r\n    render() {\r\n        const { scheduleViewModel, intl, clearError } = this.props;\r\n        const props = {\r\n            scheduleViewModel,\r\n            createSchedule: this._createSchedule,\r\n            updateSchedule: this._updateSchedule,\r\n            deleteSchedule: this._deleteSchedule,\r\n            clearError,\r\n            navigateRoute: this._navigateRoute,\r\n        };\r\n        const pageTitle = intl.formatMessage(commonMessages.schedule);\r\n        return (<>\r\n                <PageTitle subtitle={pageTitle}/>\r\n                <Schedules {...props}/>\r\n            </>);\r\n    }\r\n    _createSchedule(schedule) {\r\n        if (this.props.scheduleViewModel.isCurrentLabParentLabAccount) {\r\n            this.props.createSchedule(this.props.templateId, schedule);\r\n        }\r\n        else {\r\n            this.props.createVNextSchedule(this.props.scheduleViewModel.labId, schedule);\r\n        }\r\n    }\r\n    _updateSchedule(schedule) {\r\n        if (this.props.scheduleViewModel.isCurrentLabParentLabAccount) {\r\n            this.props.updateSchedule(this.props.templateId, schedule);\r\n        }\r\n        else {\r\n            this.props.updateVNextSchedule(this.props.scheduleViewModel.labId, schedule);\r\n        }\r\n    }\r\n    _deleteSchedule(schedule) {\r\n        this.props.deleteSchedule(schedule.id);\r\n    }\r\n    _navigateRoute(pathname) {\r\n        const { push, search } = this.props;\r\n        push({ pathname, search });\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getScheduleContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    createSchedule,\r\n    createVNextSchedule,\r\n    updateSchedule,\r\n    updateVNextSchedule,\r\n    deleteSchedule,\r\n    clearError,\r\n    push: routerActions.push,\r\n};\r\nexport const SchedulesContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(SchedulesContainerInjected));\r\nexport default SchedulesContainer;\r\n","import * as React from 'react';\r\nimport { Field } from 'react-final-form';\r\nimport { ConnectionTypeDropdown } from './connection-type-dropdown';\r\nimport { areConnectionTypesValid } from './validators';\r\nexport const ConnectionTypeDropdownField = (props) => {\r\n    const { name, isLinux, isBastionSupported, clientTypesDisabled, disabled, isVNext } = props;\r\n    return (<Field name={name} validate={(value) => {\r\n        // final form expects undefined if valid and an error value if not\r\n        const isValid = areConnectionTypesValid(isLinux, value, isVNext);\r\n        const error = isValid ? undefined : true;\r\n        return error;\r\n    }}>\r\n            {(fieldProps) => (<ConnectionTypeDropdown disabled={disabled} isLinux={isLinux} isVNext={isVNext} isBastionSupported={isBastionSupported} clientTypesDisabled={clientTypesDisabled} value={fieldProps.input.value} valid={fieldProps.meta.valid || false} pristine={fieldProps.meta.pristine} onChange={fieldProps.input.onChange}/>)}\r\n        </Field>);\r\n};\r\n","import * as React from 'react';\r\nimport { Field } from 'react-final-form';\r\nexport const Condition = (props) => (<Field name={props.when} subscription={{ value: true }}>\r\n        {({ input: { value } }) => (value ? props.children : null)}\r\n    </Field>);\r\nexport const ConditionNot = (props) => (<Field name={props.when} subscription={{ value: true }}>\r\n        {({ input: { value } }) => (!!value && value !== props.isNot ? props.children : null)}\r\n    </Field>);\r\nexport default Condition;\r\n","import { Checkbox, Stack, Icon } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Field, useField } from 'react-final-form';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport Condition, { ConditionNot } from '../condition';\r\nimport GracePeriodInput from './grace-period-input';\r\nimport { MaxGracePeriod, MinIdleGracePeriod, MinNoConnectGracePeriod } from './idle-config';\r\nimport { messages } from './messages';\r\nimport { DisconnectOnIdleInfoTip, ShutdownOnDisconnectInfoTip, ShutdownOnIdleInfoTip, VNextShutdownOnDisconnectInfoTip, } from './tooltips';\r\nimport CustomIdleShutdownDropdown from './customize-shutdown-dropdown';\r\nexport const DisconnectOnIdleWarning = (props) => {\r\n    const { isRunning } = props;\r\n    const msg = useIntl().formatMessage;\r\n    const isEnabledDirty = useField('idleConfig.disconnectOnIdleEnabled').meta?.dirty;\r\n    const isGracePeriodDirty = useField('idleConfig.disconnectOnIdleGracePeriod').meta?.dirty;\r\n    if (isRunning === undefined || isEnabledDirty === undefined || isGracePeriodDirty === undefined) {\r\n        return <></>;\r\n    }\r\n    if (!isRunning) {\r\n        return <></>;\r\n    }\r\n    if (!isEnabledDirty && !isGracePeriodDirty) {\r\n        return <></>;\r\n    }\r\n    return (<div>\r\n            <Icon iconName=\"Warning\" styles={{ root: { fontSize: '16px', marginRight: '11px', marginTop: '5px', verticalAlign: 'bottom' } }}/>\r\n            {msg(messages.disconnectOnIdleWarningText)}\r\n        </div>);\r\n};\r\nexport const ShutdownPolicyFieldGroup = (props) => {\r\n    const msg = useIntl().formatMessage;\r\n    const { idleConfigFieldName, disabled, isRunning, isVNext } = props;\r\n    const shutdownOnIdleFieldName = `${idleConfigFieldName}.shutdownOnIdle`;\r\n    const shutdownOnIdleField = useField(shutdownOnIdleFieldName);\r\n    const shutdownOnDisconnectInfoTipAriaLabel = isVNext\r\n        ? msg(messages.vNextShutdownOnDisconnectInfoTipAriaLabel)\r\n        : msg(messages.shutdownOnDisconnectInfoTipAriaLabel);\r\n    const disconnectOnIdleInfoTipAriaLabel = msg(messages.disconnectOnIdleInfoTipAriaLabel);\r\n    const shutdownOnIdleInfoTipAriaLabel = msg(messages.shutdownOnIdleInfoTipAriaLabel);\r\n    return (<Stack tokens={{ childrenGap: 15 }}>\r\n            <div className=\"ms-fontWeight-semibold\">\r\n                <FormattedMessage {...messages.title}/>\r\n            </div>\r\n            <Stack tokens={{ childrenGap: 26 }}>\r\n                {!isVNext && (<Condition when={`${idleConfigFieldName}.disconnectOnIdleSupported`}>\r\n                        <Stack tokens={{ childrenGap: 8 }}>\r\n                            <Stack horizontal>\r\n                                <Field name={`${idleConfigFieldName}.disconnectOnIdleEnabled`}>\r\n                                    {(fieldProps) => (<Checkbox label={msg(messages.disconnectOnIdleLabel)} checked={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled}/>)}\r\n                                </Field>\r\n                                <DisconnectOnIdleInfoTip ariaLabel={disconnectOnIdleInfoTipAriaLabel}/>\r\n                            </Stack>\r\n                            <Condition when={`${idleConfigFieldName}.disconnectOnIdleEnabled`}>\r\n                                <Field name={`${idleConfigFieldName}.disconnectOnIdleGracePeriod`}>\r\n                                    {(fieldProps) => (<GracePeriodInput label={msg(messages.disconnectOnIdleInputLabel)} value={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled} min={MinIdleGracePeriod} max={MaxGracePeriod}/>)}\r\n                                </Field>\r\n                            </Condition>\r\n                            <DisconnectOnIdleWarning isRunning={isRunning}/>\r\n                        </Stack>\r\n                    </Condition>)}\r\n                {isVNext && (<Stack tokens={{ childrenGap: 8 }}>\r\n                        <Stack horizontal>\r\n                            <Field name={shutdownOnIdleFieldName}>\r\n                                {(fieldProps) => (<Checkbox label={msg(messages.shutdownOnIdleLabel)} checked={fieldProps.input.value !== LabServicesModels.ShutdownOnIdleMode.None} onChange={(_, checked) => {\r\n        checked\r\n            ? fieldProps.input.onChange(LabServicesModels.ShutdownOnIdleMode.LowUsage)\r\n            : fieldProps.input.onChange(LabServicesModels.ShutdownOnIdleMode.None);\r\n    }} disabled={disabled}/>)}\r\n                            </Field>\r\n                            <ShutdownOnIdleInfoTip ariaLabel={shutdownOnIdleInfoTipAriaLabel}/>\r\n                        </Stack>\r\n                        <ConditionNot when={shutdownOnIdleFieldName} isNot={LabServicesModels.ShutdownOnIdleMode.None}>\r\n                            <Stack>\r\n                                <Stack.Item>\r\n                                    <Field name={`${idleConfigFieldName}.shutdownOnIdleGracePeriod`}>\r\n                                        {(fieldProps) => (<GracePeriodInput label={msg(messages.disconnectOnIdleInputLabel)} value={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled} min={MinIdleGracePeriod} max={MaxGracePeriod}/>)}\r\n                                    </Field>\r\n                                </Stack.Item>\r\n                                <Stack.Item>\r\n                                    <CustomIdleShutdownDropdown value={shutdownOnIdleField.input.value} onChange={(value) => {\r\n        value\r\n            ? shutdownOnIdleField.input.onChange(value)\r\n            : shutdownOnIdleField.input.onChange(LabServicesModels.ShutdownOnIdleMode.LowUsage);\r\n    }} disabled={disabled}/>\r\n                                </Stack.Item>\r\n                            </Stack>\r\n                        </ConditionNot>\r\n                    </Stack>)}\r\n                <Condition when={`${idleConfigFieldName}.shutdownOnDisconnectSupported`}>\r\n                    <Stack tokens={{ childrenGap: 8 }}>\r\n                        <Stack horizontal>\r\n                            <Field name={`${idleConfigFieldName}.shutdownOnDisconnect`}>\r\n                                {(fieldProps) => (<Checkbox label={msg(messages.shutdownOnDisconnectLabel)} checked={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled}/>)}\r\n                            </Field>\r\n                            {!isVNext && (<ShutdownOnDisconnectInfoTip ariaLabel={shutdownOnDisconnectInfoTipAriaLabel}/>)}\r\n                            {isVNext && (<VNextShutdownOnDisconnectInfoTip ariaLabel={shutdownOnDisconnectInfoTipAriaLabel}/>)}\r\n                        </Stack>\r\n                        <Condition when={`${idleConfigFieldName}.shutdownOnDisconnect`}>\r\n                            <Field name={`${idleConfigFieldName}.shutdownOnDisconnectGracePeriod`}>\r\n                                {(fieldProps) => (<GracePeriodInput label={msg(messages.shutdownOnDisconnectInputLabel)} value={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled} min={0} max={MaxGracePeriod}/>)}\r\n                            </Field>\r\n                        </Condition>\r\n                    </Stack>\r\n                </Condition>\r\n                <Condition when={`${idleConfigFieldName}.shutdownOnNoConnectSupported`}>\r\n                    <Stack tokens={{ childrenGap: 8 }}>\r\n                        <Field name={`${idleConfigFieldName}.shutdownWhenNotConnected`}>\r\n                            {(fieldProps) => (<Checkbox label={msg(messages.shutdownOnNoConnectLabel)} checked={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled}/>)}\r\n                        </Field>\r\n                        <Condition when={`${idleConfigFieldName}.shutdownWhenNotConnected`}>\r\n                            <Field name={`${idleConfigFieldName}.shutdownOnNoConnectGracePeriod`}>\r\n                                {(fieldProps) => (<GracePeriodInput label={msg(messages.shutdownOnNoConnectInputLabel)} value={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={disabled} min={MinNoConnectGracePeriod} max={MaxGracePeriod}/>)}\r\n                            </Field>\r\n                        </Condition>\r\n                    </Stack>\r\n                </Condition>\r\n            </Stack>\r\n        </Stack>);\r\n};\r\nexport default ShutdownPolicyFieldGroup;\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    settings: {\r\n        id: 'SettingsPageTitle',\r\n        defaultMessage: 'Settings',\r\n        description: 'Title of the lab settings page',\r\n    },\r\n    linuxDistributionsInfo: {\r\n        id: 'SettingsLinuxDistributionsInfoText',\r\n        defaultMessage: 'Some Linux distributions don\\'t support Idle auto-shutdown.  To see which distributions support it, please see <Link>documentation</Link>.',\r\n        description: 'Message at the bottom of new lab flyout dialog for vnext that warns about Linux distrubutions.',\r\n    },\r\n});\r\nexport default messages;\r\n","import { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { FailureOperation, AzurePolicyViolation, getAzurePolicyViolationErrorMessage, } from '../data/ml-client-error';\r\nimport { commonMessages } from '../language/common-messages';\r\nconst LabErrorBannerInjected = (props) => {\r\n    const { updateError, clearUpdateError, intl } = props;\r\n    if (!updateError) {\r\n        return null;\r\n    }\r\n    const msg = intl.formatMessage;\r\n    /* there could be multiple policy violations, showing them in single error banner*/\r\n    if (updateError.code == AzurePolicyViolation.CODE) {\r\n        return (<>\r\n                <MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    {getAzurePolicyViolationErrorMessage(updateError).map((errorMessage, index) => (<div key={index}>{msg(errorMessage)}</div>))}\r\n                </MessageBar>\r\n            </>);\r\n    }\r\n    switch (updateError.failureOperation) {\r\n        case FailureOperation.UpdateLabAccessMode:\r\n            return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    <FormattedMessage id=\"LabUpdateErrorFailedToUpdateAccessMode\" defaultMessage=\"An error occurred while updating the lab access mode.\" description=\"Message shown when an error occurs while updating the lab access mode.\"/>\r\n                </MessageBar>);\r\n        case FailureOperation.ScalingDownWhenVirtualMachinesAreRunning:\r\n            return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    <FormattedMessage id=\"ScalingDownWhenVirtualMachinesAreRunning\" defaultMessage=\"An error occurred while updating the lab capacity. You cannot decrease a lab's capacity when there are virtual machines running in the lab. Please shut down all virtual machines in the lab before attempting to reduce the lab's capacity.\" description=\"Message shown when an error occurs while updating the lab capacity when virtual machines are in running status.\"/>\r\n                </MessageBar>);\r\n        case FailureOperation.UpdateLabCapacity:\r\n            return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    <FormattedMessage id=\"LabUpdateErrorFailedToUpdateCapacity\" defaultMessage=\"An error occurred while updating the lab capacity.\" description=\"Message shown when an error occurs while updating the lab capacity.\"/>\r\n                </MessageBar>);\r\n        case FailureOperation.UpdateLabQuota:\r\n            return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    <FormattedMessage id=\"LabUpdateErrorFailedToUpdateQuota\" defaultMessage=\"An error occurred while updating the lab quota.\" description=\"Message shown when an error occurs while updating the lab quota.\"/>\r\n                </MessageBar>);\r\n        case FailureOperation.UpdateLabSettings:\r\n            return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    <FormattedMessage id=\"SettingsPageUpdateError\" defaultMessage=\"An error occurred while updating lab settings. Please refresh the page and try again.\" description=\"Message shown when an error occurs while updating lab settings.\"/>\r\n                </MessageBar>);\r\n        case FailureOperation.UpdateLab:\r\n        default:\r\n            return (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateError()}>\r\n                    <FormattedMessage id=\"LabUpdateErrorFailed\" defaultMessage=\"An error occurred while updating the lab.\" description=\"Generic error message shown when an error occurs while updating the lab.\"/>\r\n                </MessageBar>);\r\n    }\r\n};\r\nexport const LabErrorBanner = injectIntl(LabErrorBannerInjected);\r\nexport default LabErrorBanner;\r\n","import { CommandBar, DefaultButton, Layer, MessageBar, MessageBarType, Overlay, Separator, Spinner, SpinnerSize, Stack, Link } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Form } from 'react-final-form';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport LoadingContainer from '../common/loading-section';\r\nimport { ConnectionTypeDropdownField } from '../common/connection-type/connection-type-dropdown-field';\r\nimport { getNavigationItems } from '../common/lab-nav-items';\r\nimport { isIdleSupported } from '../common/shutdown-policy/selectors';\r\nimport ShutdownPolicyFieldGroup from '../common/shutdown-policy/shutdown-policy-field-group';\r\nimport SubmitButton from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport UnsavedChangesDialog from '../common/unsaved-changes-dialog';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport commonMessages from '../language/common-messages';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport sharedMessages from './settings-page-messages';\r\nimport LabErrorBanner from '../lab/lab-error-banner';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport InfoTip from '../common/info-tip';\r\nimport { messages } from './settings-page-messages';\r\nimport './settings-page.css';\r\nconst SettingsPageInjected = (props) => {\r\n    const { settingsPageViewModel, onSubmit, clearUpdateError, navigateRoute } = props;\r\n    const { showLoadError, isRunning, isCreating, isPublishing, isScaling, isApplyingSettings, idleUpdateFailed, isUpdating, updateError, isWindows, connectionTypes, idleConfig, isBastionEnabled, isVnetAttached, isReadOnly, isTeamsOrLmsIntegrationEnabled, lab, isLoading, shouldDisableLabUpdate, } = settingsPageViewModel;\r\n    const msg = props.intl.formatMessage;\r\n    const { smallPageTitleStyle, secondaryBackgroundColor, primaryCommandBarStyles } = getCustomTheme();\r\n    let navigationItems = undefined;\r\n    if (isTeamsOrLmsIntegrationEnabled && lab && lab.id) {\r\n        navigationItems = getNavigationItems(props.intl, lab.id, LabNavKeys.Settings, navigateRoute);\r\n    }\r\n    const isDisabled = shouldDisableLabUpdate || showLoadError || isReadOnly;\r\n    const [showDiscardDialog, setShowDiscardDialog] = React.useState(false);\r\n    const initialValues = {\r\n        connectionTypes,\r\n        idleConfig,\r\n    };\r\n    const isVNext = isVNextLab(lab?.id);\r\n    if (!!isLoading) {\r\n        return (<div id=\"settings-page-container\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                <div id=\"settings-page-content\">\r\n                    {navigationItems && (<div id=\"settings-list-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <LoadingContainer />\r\n                </div>\r\n            </div>);\r\n    }\r\n    return (<Form initialValues={initialValues} onSubmit={(values) => {\r\n        const { connectionTypes, idleConfig } = values;\r\n        onSubmit(connectionTypes, idleConfig);\r\n    }}>\r\n            {(formProps) => (<>\r\n                    {!formProps.pristine && (<Layer styles={{ root: { zIndex: 9999 } }}>\r\n                            <Overlay style={{ backgroundColor: 'transparent' }} onClick={() => setShowDiscardDialog(true)}/>\r\n                        </Layer>)}\r\n                    <div id=\"settings-page-container\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                        <div id=\"settings-page-content\">\r\n                            <div id=\"settings-page-header\">\r\n                                {navigationItems && (<CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>)}\r\n                                {updateError && !isUpdating && !showLoadError && (<LabErrorBanner updateError={updateError} clearUpdateError={clearUpdateError}/>)}\r\n                                {!!idleUpdateFailed && !isUpdating && !showLoadError && (<MessageBar messageBarType={MessageBarType.error}>\r\n                                        <FormattedMessage id=\"SettingsPageIdleUpdateError\" defaultMessage=\"An error occurred while updating shutdown policy settings. Please refresh the page and try again.\" description=\"Message shown when an error occurs while updating lab settings.\"/>\r\n                                    </MessageBar>)}\r\n                                {!showLoadError && (<Stack.Item>\r\n                                        <h1 style={smallPageTitleStyle}>\r\n                                            <FormattedMessage {...sharedMessages.settings}/>\r\n                                        </h1>\r\n                                    </Stack.Item>)}\r\n                            </div>\r\n                            {showLoadError && (<FullPageMessage image=\"error-general\" message={<FormattedMessage id=\"SettingsPageLoadError\" defaultMessage=\"Cannot load lab settings\" description=\"Error shown on lab settings page when it fails to load necessary data from the server.\"/>} messageDetails={<FormattedMessage id=\"SettingsPageLoadErrorDetails\" defaultMessage=\"Your lab does not appear to be in a state to view or edit settings at this time. Please try again later or contact your Lab Services administator for assistance.\" description=\"Error shown on lab settings page when it fails to load necessary data from the server.\"/>}/>)}\r\n                            {!showLoadError && (<>\r\n                                    <Stack id=\"settings-page-body\" className=\"vertical-scrollable-content\" role=\"form\" verticalFill grow tokens={{ childrenGap: '10px' }} styles={{ root: { zIndex: 10000 } }}>\r\n                                        {isBastionEnabled && (<Stack.Item styles={{ root: { marginLeft: 32, maxWidth: 450 } }}>\r\n                                                <ConnectionTypeDropdownField name=\"connectionTypes\" disabled={true} isLinux={!isWindows} clientTypesDisabled={!isVNext} isBastionSupported={!isVnetAttached && !isVNext} isVNext={isVNext}/>\r\n                                            </Stack.Item>)}\r\n                                        {isIdleSupported(idleConfig) && (<Stack.Item styles={{\r\n        root: {\r\n            marginLeft: 32,\r\n            maxWidth: 450,\r\n            paddingTop: isBastionEnabled ? 20 : undefined,\r\n        },\r\n    }}>\r\n                                                <ShutdownPolicyFieldGroup idleConfigFieldName=\"idleConfig\" disabled={isDisabled} isRunning={isRunning} isVNext={isVNext}/>\r\n                                            </Stack.Item>)}\r\n                                        <Stack.Item verticalFill grow styles={{ root: { minHeight: '20px' } }}>\r\n                                            <div />\r\n                                        </Stack.Item>\r\n                                        <Stack horizontal tokens={{ childrenGap: 5 }}>\r\n                                            <Stack.Item styles={{ root: { paddingTop: '2px' } }}>\r\n                                                <InfoTip />\r\n                                            </Stack.Item>\r\n                                            <Stack.Item styles={{\r\n        root: { color: undefined },\r\n    }}>\r\n                                                    <FormattedMessage {...messages.linuxDistributionsInfo} values={{\r\n        Link: (chunks) => (<Link href=\"https://learn.microsoft.com/en-us/azure/lab-services/how-to-configure-auto-shutdown-lab-plans#supported-linux-distributions-for-automatic-shutdown\" target=\"_blank\">\r\n                                                                    {chunks}\r\n                                                                </Link>),\r\n    }}/>\r\n                                            </Stack.Item>\r\n                                        </Stack>\r\n                                        <Stack.Item>\r\n                                            <Separator />\r\n                                        </Stack.Item>\r\n                                        <Stack.Item>\r\n                                            <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 8 }} style={{ marginLeft: 32, marginBottom: 23, marginTop: 13 }}>\r\n                                                <Stack.Item>\r\n                                                    <SubmitButton styles={{ root: { minWidth: 80 } }} buttonText={msg(commonMessages.apply)} disabled={isDisabled || formProps.pristine || !formProps.valid} isSubmitting={isUpdating} onClick={() => formProps.handleSubmit()}/>\r\n                                                </Stack.Item>\r\n                                                <Stack.Item>\r\n                                                    <DefaultButton styles={{ root: { minWidth: 80 } }} disabled={isDisabled || formProps.pristine} onClick={() => formProps.form.reset()}>\r\n                                                        {msg(commonMessages.discard)}\r\n                                                    </DefaultButton>\r\n                                                </Stack.Item>\r\n                                                {(isCreating || isPublishing || isScaling || isApplyingSettings) && (<Stack.Item>\r\n                                                        <Spinner size={SpinnerSize.medium} style={{ marginLeft: 20 }}/>\r\n                                                    </Stack.Item>)}\r\n                                                <Stack.Item>\r\n                                                    <div>\r\n                                                        {isCreating && (<FormattedMessage id=\"SettingsPageCreatingStatus\" defaultMessage=\"Creating the lab...\" description=\"Progress message on the lab settings page.\"/>)}\r\n                                                        {isPublishing && (<FormattedMessage id=\"SettingsPagePublishingStatus\" defaultMessage=\"Publishing the lab...\" description=\"Progress message on the lab settings page.\"/>)}\r\n                                                        {isScaling && (<FormattedMessage id=\"SettingsPageScalingStatus\" defaultMessage=\"Updating lab capacity...\" description=\"Progress message on the lab settings page.\"/>)}\r\n                                                        {isApplyingSettings && (<FormattedMessage id=\"SettingsPageUpdatingStatus\" defaultMessage=\"Applying settings...\" description=\"Progress message on the lab settings page.\"/>)}\r\n                                                    </div>\r\n                                                </Stack.Item>\r\n                                            </Stack>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                    {showDiscardDialog && (<UnsavedChangesDialog title={<FormattedMessage id=\"SettingsPageDiscardTitle\" defaultMessage=\"Discard changes\" description=\"Title of the dialog shown when user navigates away from settings page without saving changes.\"/>} message={<FormattedMessage id=\"SettingsPageDiscardMessage\" defaultMessage=\"Are you sure you want to discard changes made to lab settings?\" description=\"Message on the dialog shown when user navigates away from settings page without saving changes.\"/>} onOk={() => {\r\n        formProps.form.reset();\r\n        setShowDiscardDialog(false);\r\n    }} onCancel={() => setShowDiscardDialog(false)}/>)}\r\n                                </>)}\r\n                        </div>\r\n                    </div>\r\n                </>)}\r\n        </Form>);\r\n};\r\nconst SettingsPage = injectIntl(SettingsPageInjected);\r\nexport default SettingsPage;\r\n","import memoize from 'memoize-one';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { getDefaultIdleConfig, getLabIdleConfig, getVNextLabIdleConfig } from '../common/shutdown-policy/selectors';\r\nimport { ConnectionType } from '../data/models/environment-common';\r\nimport { isBastionFeatureEnabled, isTeamsOrLmsMode, storeHasLoadError, storeIsLoading, } from '../redux/selectors/common-selectors';\r\nimport { getCurrentLab, isCurrentLabReadOnly } from '../redux/selectors/lab-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport PowerState from '../utils/power-state';\r\nimport { isHealthyState, ProvisioningState } from '../utils/provisioning-state';\r\nimport { getPowerState } from '../template/template-selectors';\r\nimport { isCurrentLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { getCurrentLabUpdateError, shouldDisableCurrentLabUpdate } from '../redux/selectors/vnext/lab-selectors';\r\nfunction getVNextConnectionTypes(connectionProfile) {\r\n    const connectionTypes = [];\r\n    if (!connectionProfile) {\r\n        return connectionTypes;\r\n    }\r\n    if (connectionProfile.clientRdpAccess === LabServicesModels.ConnectionType.Public) {\r\n        connectionTypes.push(ConnectionType.Rdp);\r\n    }\r\n    if (connectionProfile.clientSshAccess === LabServicesModels.ConnectionType.Public) {\r\n        connectionTypes.push(ConnectionType.Ssh);\r\n    }\r\n    if (connectionProfile.webRdpAccess === LabServicesModels.ConnectionType.Public) {\r\n        connectionTypes.push(ConnectionType.RdpInBrowser);\r\n    }\r\n    if (connectionProfile.webSshAccess === LabServicesModels.ConnectionType.Public) {\r\n        connectionTypes.push(ConnectionType.SshInBrowser);\r\n    }\r\n    return connectionTypes;\r\n}\r\nexport const getSettingsPageViewModel = memoize((state) => {\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    const currentLab = getCurrentLab(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    const isBastionEnabled = isBastionFeatureEnabled(state);\r\n    const isReadOnly = isCurrentLabReadOnly(state);\r\n    if (!isVNext) {\r\n        const lab = currentLab;\r\n        const labStore = state.get('labStore');\r\n        const updateError = labStore.get('updateError');\r\n        const loadState = labStore.get('loadState');\r\n        const isUpdating = labStore.get('isUpdating');\r\n        const templateStore = state.get('templateStore');\r\n        const currentTemplate = templateStore.get('currentTemplate');\r\n        const templates = templateStore.get('templates');\r\n        const template = templates.find((o) => o.id === currentTemplate);\r\n        const showLoadError = !storeIsLoading(loadState) &&\r\n            (!lab ||\r\n                !isHealthyState(lab.provisioningState) ||\r\n                (!!template && !isHealthyState(template.provisioningState)));\r\n        const isCreating = lab?.provisioningState === ProvisioningState.Creating ||\r\n            template?.provisioningState === ProvisioningState.Creating;\r\n        const isApplyingSettings = lab?.idleConfigState === ProvisioningState.Updating;\r\n        const idleUpdateFailed = lab?.idleConfigState === ProvisioningState.Failed;\r\n        const isVnetAttached = !!lab?.virtualNetworkResourceId;\r\n        const powerState = getPowerState(template);\r\n        const isRunning = powerState === PowerState.Running;\r\n        const isPublishing = template?.publishingState === Ml.PublishingState.Publishing;\r\n        const isScaling = template?.publishingState === Ml.PublishingState.Scaling;\r\n        const isWindows = template?.resourceSettings?.osType === Ml.OsType.Windows;\r\n        const connectionTypes = [];\r\n        if (!!lab && !showLoadError) {\r\n            const policy = lab.connectivityPolicy;\r\n            if (policy) {\r\n                if (policy.rdpEnabled === Ml.EnableState.Enabled) {\r\n                    connectionTypes.push(ConnectionType.Rdp);\r\n                }\r\n                if (policy.rdpInBrowserEnabled === Ml.EnableState.Enabled) {\r\n                    connectionTypes.push(ConnectionType.RdpInBrowser);\r\n                }\r\n                if (policy.sshEnabled === Ml.EnableState.Enabled) {\r\n                    connectionTypes.push(ConnectionType.Ssh);\r\n                }\r\n                if (policy.sshInBrowserEnabled === Ml.EnableState.Enabled) {\r\n                    connectionTypes.push(ConnectionType.SshInBrowser);\r\n                }\r\n            }\r\n            if (!policy || connectionTypes.length === 0) {\r\n                if (isWindows) {\r\n                    connectionTypes.push(ConnectionType.Rdp);\r\n                }\r\n                else {\r\n                    connectionTypes.push(ConnectionType.Ssh);\r\n                    if (template?.resourceSettings?.linuxRdpEnabled === Ml.EnableState.Enabled) {\r\n                        connectionTypes.push(ConnectionType.Rdp);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        const defaultIdleConfig = getDefaultIdleConfig(state);\r\n        const idleConfig = lab ? getLabIdleConfig(defaultIdleConfig, lab, isWindows) : defaultIdleConfig;\r\n        const shouldDisableLabUpdate = isCreating || isPublishing || isScaling || isApplyingSettings || isUpdating;\r\n        return {\r\n            showLoadError,\r\n            isRunning,\r\n            isCreating,\r\n            isPublishing,\r\n            isScaling,\r\n            isApplyingSettings,\r\n            idleUpdateFailed,\r\n            isUpdating,\r\n            updateError,\r\n            isWindows,\r\n            connectionTypes,\r\n            idleConfig,\r\n            isBastionEnabled,\r\n            isVnetAttached,\r\n            isReadOnly,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            lab,\r\n            shouldDisableLabUpdate,\r\n        };\r\n    }\r\n    else {\r\n        const lab = currentLab;\r\n        const labStore = state.get('vNextLabStore');\r\n        const updateError = getCurrentLabUpdateError(state);\r\n        const labLoadState = labStore.get('loadState');\r\n        const isUpdating = labStore.get('isUpdating');\r\n        const isLoading = storeIsLoading(labLoadState);\r\n        const showLoadError = storeHasLoadError(labLoadState) ||\r\n            (!storeIsLoading(labLoadState) && !isHealthyState(lab?.provisioningState));\r\n        const isCreating = lab?.provisioningState === LabServicesModels.ProvisioningState.Creating;\r\n        const isApplyingSettings = lab?.provisioningState === ProvisioningState.Updating &&\r\n            (lab.state === LabServicesModels.LabState.Draft || lab.state === LabServicesModels.LabState.Published);\r\n        const isVnetAttached = !!lab?.networkProfile?.subnetId;\r\n        const labState = lab?.pendingLabState ?? lab?.state;\r\n        const isPublishing = labState === LabServicesModels.LabState.Publishing;\r\n        const isScaling = labState === LabServicesModels.LabState.Scaling;\r\n        const isWindows = lab?.virtualMachineProfile?.osType === LabServicesModels.OsType.Windows;\r\n        let connectionTypes = [];\r\n        if (!!lab && !showLoadError) {\r\n            connectionTypes = getVNextConnectionTypes(lab.connectionProfile);\r\n        }\r\n        const idleConfig = getVNextLabIdleConfig(lab);\r\n        const shouldDisableLabUpdate = shouldDisableCurrentLabUpdate(state);\r\n        return {\r\n            isLoading,\r\n            showLoadError,\r\n            isCreating,\r\n            isPublishing,\r\n            isScaling,\r\n            isApplyingSettings,\r\n            isUpdating,\r\n            updateError,\r\n            isWindows,\r\n            connectionTypes,\r\n            idleConfig,\r\n            isBastionEnabled,\r\n            isVnetAttached,\r\n            isReadOnly,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            lab,\r\n            shouldDisableLabUpdate,\r\n        };\r\n    }\r\n});\r\nexport const getSettingsPageContainerModel = memoize((state) => {\r\n    const search = getSearch(state);\r\n    const settingsPageViewModel = getSettingsPageViewModel(state);\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    return {\r\n        search,\r\n        settingsPageViewModel,\r\n        isVNext,\r\n    };\r\n});\r\n","import { routerActions } from 'connected-react-router';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { idleConfigToAutoShutdownProfile, idleConfigToLab } from '../common/shutdown-policy/selectors';\r\nimport PageTitle from '../common/page/page-title';\r\nimport { toConnectionType, toEnableState } from '../data/helpers/enum-helpers';\r\nimport { ConnectionType } from '../data/models/environment-common';\r\nimport { LabUpdateOperation } from '../data/models/lab';\r\nimport { clearLabUpdateError, pollLabStart, pollLabStop, updateLab, updateVNextLab, } from '../redux/actions/lab/lab-action-creators';\r\nimport SettingsPage from './settings-page';\r\nimport { messages } from './settings-page-messages';\r\nimport { getSettingsPageContainerModel } from './settings-page-selectors';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nclass SettingsPageContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._getPollingInterval = this._getPollingInterval.bind(this);\r\n        this._startPollingLab = this._startPollingLab.bind(this);\r\n        this._updateLab = this._updateLab.bind(this);\r\n        this._navigateRoute = this._navigateRoute.bind(this);\r\n    }\r\n    componentDidMount() {\r\n        const { isVNext } = this.props;\r\n        if (!isVNext) {\r\n            this._startPollingLab();\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        const { isVNext, pollLabStop } = this.props;\r\n        if (!isVNext) {\r\n            pollLabStop();\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { settingsPageViewModel, isVNext } = this.props;\r\n        const { lab } = settingsPageViewModel;\r\n        // Reset polling if either lab or polling interval changes.\r\n        if (!isVNext &&\r\n            (lab?.id !== prevProps.settingsPageViewModel.lab?.id ||\r\n                this._pollingInterval !== this._getPollingInterval())) {\r\n            this.props.pollLabStop();\r\n            this._startPollingLab();\r\n        }\r\n    }\r\n    _getPollingInterval() {\r\n        const { settingsPageViewModel } = this.props;\r\n        const { isApplyingSettings, isUpdating, isCreating, isPublishing, isScaling } = settingsPageViewModel;\r\n        if (isUpdating) {\r\n            // Avoid polling while we're in update call.\r\n            return undefined;\r\n        }\r\n        else if (isApplyingSettings) {\r\n            // Settings update is usually fast - poll every 10 secs.\r\n            return 10 * 1000;\r\n        }\r\n        else if (isCreating || isPublishing || isScaling) {\r\n            // Publishing and scaling take long time - poll every minute.\r\n            return 60 * 1000;\r\n        }\r\n        else {\r\n            // Don't poll otherwise.\r\n            return undefined;\r\n        }\r\n    }\r\n    _startPollingLab() {\r\n        const { settingsPageViewModel, pollLabStart } = this.props;\r\n        const { lab } = settingsPageViewModel;\r\n        if (lab) {\r\n            this._pollingInterval = this._getPollingInterval();\r\n            if (this._pollingInterval) {\r\n                pollLabStart(lab.id, this._pollingInterval);\r\n            }\r\n        }\r\n    }\r\n    _updateLab(connectionTypes, idleConfig) {\r\n        const { settingsPageViewModel, updateLab, updateVNextLab } = this.props;\r\n        const { lab } = settingsPageViewModel;\r\n        if (lab) {\r\n            const connectivityPolicy = {\r\n                rdpEnabled: toEnableState(connectionTypes.includes(ConnectionType.Rdp)),\r\n                rdpInBrowserEnabled: toEnableState(connectionTypes.includes(ConnectionType.RdpInBrowser)),\r\n                sshEnabled: toEnableState(connectionTypes.includes(ConnectionType.Ssh)),\r\n                sshInBrowserEnabled: toEnableState(connectionTypes.includes(ConnectionType.SshInBrowser)),\r\n            };\r\n            if (!isVNextLab(lab.id)) {\r\n                const idleConfigPartial = idleConfigToLab(idleConfig);\r\n                const labUpdate = {\r\n                    ...lab,\r\n                    ...idleConfigPartial,\r\n                    connectivityPolicy,\r\n                };\r\n                updateLab(labUpdate, LabUpdateOperation.Settings);\r\n            }\r\n            else {\r\n                const autoShutdownProfile = idleConfigToAutoShutdownProfile(idleConfig);\r\n                const connectionProfile = {\r\n                    webSshAccess: toConnectionType(connectionTypes.includes(ConnectionType.SshInBrowser)),\r\n                    webRdpAccess: toConnectionType(connectionTypes.includes(ConnectionType.RdpInBrowser)),\r\n                    clientSshAccess: toConnectionType(connectionTypes.includes(ConnectionType.Ssh)),\r\n                    clientRdpAccess: toConnectionType(connectionTypes.includes(ConnectionType.Rdp)),\r\n                };\r\n                const labUpdate = {\r\n                    autoShutdownProfile,\r\n                    connectionProfile,\r\n                };\r\n                updateVNextLab(lab.id, labUpdate, LabUpdateOperation.Settings);\r\n            }\r\n        }\r\n    }\r\n    _navigateRoute(pathname) {\r\n        const { push, search } = this.props;\r\n        push({ pathname, search });\r\n    }\r\n    render() {\r\n        const { intl, clearLabUpdateError } = this.props;\r\n        const title = intl.formatMessage(messages.settings);\r\n        return (<>\r\n                <PageTitle subtitle={title}/>\r\n                <SettingsPage {...this.props} onSubmit={this._updateLab} clearUpdateError={clearLabUpdateError} navigateRoute={this._navigateRoute}/>\r\n            </>);\r\n    }\r\n}\r\nconst mapDispatchToProps = {\r\n    updateLab,\r\n    clearLabUpdateError,\r\n    pollLabStart,\r\n    pollLabStop,\r\n    push: routerActions.push,\r\n    updateVNextLab,\r\n};\r\nconst mapStateToProps = (state) => {\r\n    return getSettingsPageContainerModel(state);\r\n};\r\nexport const SettingsPageContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(SettingsPageContainerInjected));\r\nexport default SettingsPageContainer;\r\n","import React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport { caseInsensitiveLocaleCompare } from '../utils/string-comparison';\r\nimport { SkuConstants } from './selectors/sku-selectors';\r\nexport const LabSizeInfo = (props) => {\r\n    const { cores, memorySize, storageSize, storageType } = props;\r\n    return (<>\r\n            {!!cores && !!memorySize && (<>\r\n                    <FormattedMessage id=\"CreatingViewDetails\" defaultMessage=\"{numberOfCores} cores | {memorySize}GB RAM \" description=\"Virtual machine cores and memory specification. {numberOfCores} is number of VM cores. {memorySize} is memory size in GBs.\" values={{\r\n        numberOfCores: cores,\r\n        memorySize,\r\n    }}/>\r\n                    {!!storageSize && !!storageType && (<>\r\n                            <FormattedMessage id=\"TemplateLabSize\" defaultMessage=\"| {storageSize}GB \" description=\"Virtual machine disk specification. {storageSize} is the number of GB of storage.\" values={{\r\n        storageSize,\r\n    }}/>\r\n                            {caseInsensitiveLocaleCompare(storageType, SkuConstants.PremiumSSD) === 0 ? (<FormattedMessage {...commonMessages.premiumSSD}/>) : (<FormattedMessage {...commonMessages.standardSSD}/>)}\r\n                        </>)}\r\n                </>)}\r\n        </>);\r\n};\r\n","import { Stack } from '@fluentui/react';\r\nimport React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { LabSizeInfo } from './lab-size-info';\r\nimport { getLocalizedLabSkuDisplayName } from './selectors/sku-selectors';\r\nexport const ImageAndSizeInfo = (props) => {\r\n    const { imageName, labSkuInfo } = props;\r\n    const intl = useIntl();\r\n    const skuDisplayName = !labSkuInfo ? '' : getLocalizedLabSkuDisplayName(labSkuInfo, intl);\r\n    return (<Stack className=\"ms-fontColor-neutralSecondary\" horizontalAlign=\"start\" styles={{ root: { marginTop: '10px' } }}>\r\n            {!!imageName && (<Stack.Item styles={{ root: { fontWeight: 600, fontSize: '12px' } }}>{imageName}</Stack.Item>)}\r\n            {!!skuDisplayName && <Stack.Item styles={{ root: { fontSize: '12px' } }}>{skuDisplayName}</Stack.Item>}\r\n            <Stack.Item styles={{ root: { fontSize: '12px' } }}>\r\n                <LabSizeInfo {...props}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\n","import { CommandBar, Icon, ProgressIndicator, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { ImageAndSizeInfo } from '../common/image-and-size-info';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport './template.css';\r\nconst CreatingViewInjected = (props) => {\r\n    const { hasTemplateVm, navigationItems } = props;\r\n    const { primaryCommandBarStyles, secondaryBackgroundColor } = getCustomTheme();\r\n    return (<div id=\"template-container\">\r\n            <div id=\"template-content\">\r\n                {navigationItems && (<div id=\"template-header\">\r\n                        <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                    </div>)}\r\n                <Stack horizontalAlign=\"center\" grow verticalFill styles={{ root: { backgroundColor: secondaryBackgroundColor } }}>\r\n                    <Stack.Item>\r\n                        <Icon iconName=\"creating-template\" styles={{ root: { marginTop: 140, marginBottom: 20 } }}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <Stack horizontalAlign=\"start\">\r\n                            <Stack.Item>\r\n                                <div className=\"ms-fontSize-m ms-fontWeight-semibold\">\r\n                                    {hasTemplateVm && (<FormattedMessage id=\"CreatingViewMessage\" defaultMessage=\"Creating template virtual machine\" description=\"Message shown on the template page while the VM is being created.\"/>)}\r\n                                    {!hasTemplateVm && (<FormattedMessage id=\"CreatingViewMessageNoTemplate\" defaultMessage=\"Creating the lab\" description=\"Message shown on the template page while the lab is being created.\"/>)}\r\n                                </div>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <ProgressIndicator barHeight={4} description={hasTemplateVm ? (<>\r\n                                                <FormattedMessage id=\"CreatingViewDescription\" defaultMessage=\"This can take up to 20 minutes.\" description=\"Message shown on the template page while the VM is being created.\"/>\r\n                                                <ImageAndSizeInfo {...props}/>\r\n                                            </>) : (<>\r\n                                                <FormattedMessage id=\"CreatingViewDescriptionNoTemplate\" defaultMessage=\"This can take a few minutes.\" description=\"Message shown on the template page while the lab is being created.\"/>\r\n                                                <ImageAndSizeInfo {...props}/>\r\n                                            </>)} styles={{\r\n        root: { minWidth: 250, width: '100%', marginBottom: 15 },\r\n    }}/>\r\n                            </Stack.Item>\r\n                        </Stack>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </div>\r\n        </div>);\r\n};\r\nexport const CreatingView = injectIntl(CreatingViewInjected);\r\nexport default CreatingView;\r\n","import { DefaultButton, Dialog, DialogType, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    dismissGpuBannerDialogTitle: {\r\n        id: 'DismissGpuBannerDialogTitle',\r\n        defaultMessage: 'Acknowledge GPU driver is missing',\r\n        description: 'The title of the dismiss GPU banner dialog.',\r\n    },\r\n    dismissGpuBannerDialogMessage: {\r\n        id: 'DismissGpuBannerDialogMessage',\r\n        defaultMessage: 'When you click Continue, you are acknowledging the GPU driver must be installed manually and this banner will not be shown again.',\r\n        description: 'The message displayed in the dismiss GPU banner dialog.',\r\n    },\r\n});\r\nexport const DismissGpuBannerDialog = (props) => {\r\n    const { isSubmitting, onDismiss, onSubmit } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const dialogTitle = msg(messages.dismissGpuBannerDialogTitle);\r\n    const dialogMessage = msg(messages.dismissGpuBannerDialogMessage);\r\n    const continueText = msg(commonMessages.continue);\r\n    const cancel = msg(commonMessages.cancel);\r\n    // close the dialog after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    return (<Dialog hidden={false} onDismiss={isSubmitting ? undefined : onDismiss} maxWidth={Constants.DefaultDialogWidth} closeButtonAriaLabel={cancel} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: dialogTitle,\r\n        subText: dialogMessage,\r\n    }}>\r\n            <Stack horizontal tokens={{ childrenGap: '8px' }} styles={{ root: { width: '100%' } }} verticalAlign=\"end\" horizontalAlign=\"end\">\r\n                <Stack.Item>\r\n                    <SubmitButton isSubmitting={isSubmitting} buttonText={continueText} ariaLabel={continueText} onClick={onSubmit}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DefaultButton autoFocus onClick={onDismiss} text={cancel} disabled={isSubmitting}/>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Dialog>);\r\n};\r\nexport default DismissGpuBannerDialog;\r\n","import * as React from 'react';\r\nimport { Stack } from '@fluentui/react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { ClockIcon } from '../common/clock-icon';\r\nexport const ClockInfoProcessEstimate = (props) => {\r\n    const { timeEstimateMessage } = props;\r\n    return (<Stack horizontal tokens={{ childrenGap: '8px' }}>\r\n            <Stack.Item>\r\n                <ClockIcon />\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <FormattedMessage id=\"TimeEstimation\" defaultMessage=\"This process can take up to <span>{timeEstimateMessage}</span>.\" description=\"Text to inform the user the estimated duration of a process. <span> and </span> should not be localized, but the text between them should.\" values={{\r\n        span: (chunks) => <span style={{ fontWeight: 600 }}>{chunks}</span>,\r\n        timeEstimateMessage,\r\n    }}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default ClockInfoProcessEstimate;\r\n","import { defineMessages } from 'react-intl';\r\nexport const sharedImageNameValidatorMessages = defineMessages({\r\n    sigNameRequiredError: {\r\n        id: 'SigNameRequiredError',\r\n        defaultMessage: 'Image Name is required.',\r\n        description: 'Error shown when no image name is provided.',\r\n    },\r\n    sigNameTooLongError: {\r\n        id: 'SigNameTooLongError',\r\n        defaultMessage: 'Virtual machine image name cannot exceed 255 characters.',\r\n        description: 'Error shown when image name is too long.',\r\n    },\r\n    sigNameContainsSpecialCharactersError: {\r\n        id: 'SigNameContainsSpecialCharactersError',\r\n        defaultMessage: 'Virtual machine image name cannot contain special characters.',\r\n        description: 'Error shown when image name contains special characters.',\r\n    },\r\n    sigNameNotUniqueError: {\r\n        id: 'SigNameNotUniqueError',\r\n        defaultMessage: 'Virtual machine image names must be unique.',\r\n        description: 'Error shown when image name is not unique.',\r\n    },\r\n});\r\nconst blockedCharacters = [\r\n    '<',\r\n    '>',\r\n    '%',\r\n    '&',\r\n    ':',\r\n    '\\\\',\r\n    '?',\r\n    '/',\r\n    '@',\r\n    '#',\r\n    '$',\r\n    '^',\r\n    '*',\r\n    '(',\r\n    ')',\r\n    '.',\r\n    ';',\r\n    '+',\r\n    '_',\r\n    '!',\r\n    '~',\r\n    '`',\r\n];\r\nexport function validateSharedImageName(name, sharedImages, intl) {\r\n    if (!name || name.trim().length === 0) {\r\n        return intl.formatMessage(sharedImageNameValidatorMessages.sigNameRequiredError);\r\n    }\r\n    else if (name.length > 255) {\r\n        return intl.formatMessage(sharedImageNameValidatorMessages.sigNameTooLongError);\r\n    }\r\n    else if (blockedCharacters.some((char) => name.includes(char))) {\r\n        return intl.formatMessage(sharedImageNameValidatorMessages.sigNameContainsSpecialCharactersError);\r\n    }\r\n    else if (sharedImages && sharedImages.some((image) => image.displayName.toLowerCase() === name.toLowerCase())) {\r\n        return intl.formatMessage(sharedImageNameValidatorMessages.sigNameNotUniqueError);\r\n    }\r\n    return undefined;\r\n}\r\n","import { ChoiceGroup, DefaultButton, Dialog, DialogFooter, DialogType, Link, PrimaryButton, Spinner, SpinnerSize, TextField, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nimport { ClockInfoProcessEstimate } from './clock-info-process-estimate';\r\nimport { validateSharedImageName } from './image-name-validator';\r\nimport templateMessages from './template-messages';\r\nimport './export-sig-dialog.css';\r\nconst messages = defineMessages({\r\n    sigNameLabel: {\r\n        id: 'SigNameLabel',\r\n        defaultMessage: 'Virtual machine image name',\r\n        description: 'Label for the shared image name text field, where user can input the name of their new shared image',\r\n    },\r\n    createNewImage: {\r\n        id: 'CreateNewImage',\r\n        defaultMessage: 'Create new image',\r\n        description: 'Label on radio button indicating this is the create new image option',\r\n    },\r\n    updateExistingImage: {\r\n        id: 'UpdateExistingImage',\r\n        defaultMessage: 'Update existing image',\r\n        description: 'Label on radio button indicating this is the update existing image option',\r\n    },\r\n});\r\nexport const ImageOperation = {\r\n    create: 'create',\r\n    update: 'update',\r\n};\r\nconst Summary = (props) => {\r\n    const sharedImageGalleryLink = (<Link target=\"_blank\" href=\"https://www.aka.ms/azlabs-sig\">\r\n            <FormattedMessage id=\"SharedImageGalleryLinkText\" defaultMessage=\"Azure Compute Gallery\" description=\"Text to indicate Azure Compute Gallery.  This will be contained in a link to redirect to Azure Compute Gallery documentation.  This will be used in the ExportSigInfoAndLink message as the sharedImageGalleryLink parameter.\"/>\r\n        </Link>);\r\n    return (<>\r\n            <FormattedMessage id=\"ExportSigInfoAndLink\" defaultMessage=\"Exporting an image to the {sharedImageGalleryLink} allows it to be used when a new template is created in other labs.\" description=\"Informational text explaining that exporting an image to the Azure Compute Gallery lets it be used as a template when creating other labs. The parameter {sharedImageGalleryLink} contains a localized link to more documentation for Azure Compute Gallery.  The link text comes from SharedGalleryLinkText.\" values={{ sharedImageGalleryLink }}/>\r\n            {!props.sharedImage && (<>\r\n                    <span className=\"export-sig-dialog__re-export_heavy-info\">\r\n                        <FormattedMessage id=\"ExportSpecializedSigUserDataInfo\" defaultMessage=\"User-level data and settings will be included in the exported image.\" description=\"Message that user data will be lost during export.\"/>\r\n                    </span>{' '}\r\n                    <Link target=\"_blank\" href=\"https://www.aka.ms/azlabs-sigexport\">\r\n                        <FormattedMessage id=\"SharedImageGalleryExportLinkText\" defaultMessage=\"Learn more about the data that stays on the image.\" description=\"This will be contained in a link to redirect to exporting Azure Compute Gallery documentation.\"/>\r\n                    </Link>\r\n                </>)}\r\n            {!!props.sharedImage && (<span className=\"export-sig-dialog__re-export_heavy-info\">\r\n                    <FormattedMessage id=\"ReExportSigRevertInfo\" defaultMessage=\"An image cannot be reverted once it is updated.\" description=\"Message that images cannot be reverted once they are updated.\"/>\r\n                </span>)}\r\n        </>);\r\n};\r\nconst SharedImageTextField = (props) => {\r\n    const intl = useIntl();\r\n    const sigNameLabel = intl.formatMessage(messages.sigNameLabel);\r\n    const onRenderSuffix = () => (props.isLoading ? <Spinner size={SpinnerSize.xSmall}/> : <></>);\r\n    return (<TextField styles={{\r\n        suffix: { backgroundColor: 'transparent' },\r\n    }} autoFocus deferredValidationTime={500} disabled={props.isLoading} onRenderSuffix={onRenderSuffix} label={sigNameLabel} ariaLabel={sigNameLabel} errorMessage={props.errorMessage} onChange={props.onChange}/>);\r\n};\r\nconst SharedImageForm = (props) => {\r\n    const { isLoading, sharedImage, imageOperation, onChange, errorMessage, onUpdateOperation } = props;\r\n    const intl = useIntl();\r\n    const createImage = intl.formatMessage(messages.createNewImage);\r\n    const updateImage = intl.formatMessage(messages.updateExistingImage);\r\n    return (<>\r\n            {!!sharedImage ? (<ChoiceGroup selectedKey={imageOperation} onChange={(_, option) => onUpdateOperation(option.key)} options={[\r\n        {\r\n            key: ImageOperation.create,\r\n            text: createImage,\r\n            ariaLabel: createImage,\r\n            styles: { choiceFieldWrapper: { width: '100%' } },\r\n            onRenderField: (props, render) => {\r\n                return (<>\r\n                                        <div className=\"export-sig-dialog__re-export_create--text\">\r\n                                            {render(props)}\r\n                                        </div>\r\n                                        <div className=\"export-sig-dialog__re-export_create--name-field\">\r\n                                            <SharedImageTextField isLoading={isLoading} onChange={onChange} errorMessage={errorMessage}/>\r\n                                        </div>\r\n                                    </>);\r\n            },\r\n        },\r\n        {\r\n            key: ImageOperation.update,\r\n            text: updateImage,\r\n            ariaLabel: updateImage,\r\n            onRenderField: (props, render) => {\r\n                return (<>\r\n                                        {render(props)}\r\n                                        <span className=\"export-sig-dialog__re-export_update--existing-name\">{`(${sharedImage.displayName})`}</span>\r\n                                    </>);\r\n            },\r\n        },\r\n    ]}/>) : (<div className=\"export-sig-dialog__export_create--text\">\r\n                    <SharedImageTextField isLoading={isLoading} onChange={onChange} errorMessage={errorMessage}/>\r\n                </div>)}\r\n        </>);\r\n};\r\nexport const ExportSigDialog = (props) => {\r\n    const [sigName, updateSigName] = React.useState('');\r\n    const [imageOperation, updateImageOperation] = React.useState(ImageOperation.create);\r\n    const [errorMessage, updateErrorMessage] = React.useState('');\r\n    const { sharedImages, sharedImage, templateId, isLoading, onDismiss, onCreate, onUpdate } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const cancelButtonLabel = msg(commonMessages.cancel);\r\n    const exportLabel = msg(commonMessages.export);\r\n    const exportToSigTitle = msg(templateMessages.exportToSharedImageGallery);\r\n    const onChange = (_, newValue) => {\r\n        updateSigName(newValue || '');\r\n        validate(newValue);\r\n    };\r\n    const onDismissed = () => {\r\n        updateSigName('');\r\n        onDismiss();\r\n    };\r\n    const validate = (name) => {\r\n        const errorMessage = validateSharedImageName(name, sharedImages, intl);\r\n        updateErrorMessage(errorMessage);\r\n    };\r\n    return (<Dialog onDismiss={onDismissed} hidden={false} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: exportToSigTitle,\r\n    }} modalProps={{\r\n        onDismissed,\r\n    }} minWidth={Constants.DefaultDialogWidth}>\r\n            <>\r\n                <div className=\"export-sig-dialog--summary\">\r\n                    <Summary sharedImage={sharedImage}/>\r\n                </div>\r\n                <ClockInfoProcessEstimate timeEstimateMessage={msg(templateMessages.oneHourFormatted)}/>\r\n                <SharedImageForm isLoading={isLoading} onChange={onChange} errorMessage={errorMessage} imageOperation={imageOperation} onUpdateOperation={(op) => updateImageOperation(op)} sharedImage={sharedImage}/>\r\n            </>\r\n            <DialogFooter styles={{ actions: { marginTop: '32px' } }}>\r\n                <PrimaryButton onClick={() => {\r\n        if (imageOperation === ImageOperation.create && templateId) {\r\n            onCreate(templateId, sigName);\r\n        }\r\n        else if (imageOperation === ImageOperation.update &&\r\n            templateId &&\r\n            sharedImage &&\r\n            sharedImage.id) {\r\n            onUpdate(sharedImage.id, templateId);\r\n        }\r\n        onDismissed();\r\n    }} text={exportLabel} ariaLabel={exportLabel} disabled={imageOperation === ImageOperation.create && (!!errorMessage || !sigName)}/>\r\n                <DefaultButton onClick={onDismissed} ariaLabel={cancelButtonLabel} text={cancelButtonLabel}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport default ExportSigDialog;\r\n","import React from 'react';\r\nimport { Spinner, SpinnerSize } from '@fluentui/react';\r\nimport { useIntl } from 'react-intl';\r\nimport { defineMessages } from 'react-intl';\r\nconst messages = defineMessages({\r\n    syncInProgressSpinnerLabel: {\r\n        id: 'UserListSyncInProgressSpinnerLabel',\r\n        defaultMessage: 'Sync in progress from \"{aadGroupName}\"...',\r\n        description: 'Message shown when sync is in progress',\r\n    },\r\n    syncInProgressSpinnerLabelNoGroupName: {\r\n        id: 'UserListSyncInProgressSpinnerLabelNoGroupName',\r\n        defaultMessage: 'Sync in progress from a group...',\r\n        description: 'Message shown when sync is in progress',\r\n    },\r\n});\r\nexport const SyncingSpinner = (props) => {\r\n    const { groupName, styles } = props;\r\n    const intl = useIntl();\r\n    return (<Spinner size={SpinnerSize.xSmall} styles={styles} label={!groupName\r\n        ? intl.formatMessage(messages.syncInProgressSpinnerLabelNoGroupName)\r\n        : intl.formatMessage(messages.syncInProgressSpinnerLabel, {\r\n            aadGroupName: groupName,\r\n        })} labelPosition=\"right\"/>);\r\n};\r\nexport default SyncingSpinner;\r\n","import _ from 'lodash';\r\nimport { Icon, Spinner, SpinnerSize, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport InfoTip from '../common/info-tip';\r\nimport commonMessages from '../language/common-messages';\r\nimport templateMessages from './template-messages';\r\nimport { getLastPublishedDate, getLastPublishedTime, getLastUploadedRelativeTime, isUploadStateFailed, } from './template-selectors';\r\nimport SyncingSpinner from '../common/syncing-spinner';\r\nimport './template.css';\r\nconst messages = defineMessages({\r\n    templateExportingImageStatus: {\r\n        id: 'TemplateExportingImageStatus',\r\n        defaultMessage: 'Exporting image...',\r\n        description: 'Message displayed while image export is in progress',\r\n    },\r\n    templateCombinedExportingAndResettingStatus: {\r\n        id: 'TemplateCombinedExportingAndResettingStatus',\r\n        defaultMessage: 'Exporting image, resetting password...',\r\n        description: 'Message displayed while image export and resetting password is simultaneously is in progress',\r\n    },\r\n    templatePublishingStatus: {\r\n        id: 'TemplatePublishingStatus',\r\n        defaultMessage: 'Publishing \"{templateName}\". This can take up to 1 hour...',\r\n        description: 'Message displayed while publishing template is in progress.  {templateName} is the name of the template being published',\r\n    },\r\n    vNextTemplatePublishingStatus: {\r\n        id: 'VNextTemplatePublishingStatus',\r\n        defaultMessage: 'Publishing \"{templateName}\". This can take up to 20 minutes...',\r\n        description: 'Message displayed while publishing template is in progress.  {templateName} is the name of the template being published',\r\n    },\r\n    templateScalingStatus: {\r\n        id: 'TemplateScalingStatus',\r\n        defaultMessage: 'Updating lab capacity. This can take up to 1 hour...',\r\n        description: 'Message displayed while updating the lab capacity is in progress.',\r\n    },\r\n    vNextTemplateScalingStatus: {\r\n        id: 'VNextTemplateScalingStatus',\r\n        defaultMessage: 'Updating lab capacity. This can take up to 20 minutes...',\r\n        description: 'Message displayed while updating the lab capacity is in progress.',\r\n    },\r\n});\r\nconst StatusSpinnerType = {\r\n    Default: 'Default',\r\n    Primary: 'Primary',\r\n};\r\nconst StatusSpinner = (props) => {\r\n    const { label, spinnerType } = props;\r\n    return (<Spinner size={SpinnerSize.xSmall} labelPosition=\"right\" ariaLabel={label} styles={{\r\n        root: {\r\n            paddingLeft: '5px',\r\n        },\r\n        label: {\r\n            fontSize: '12px',\r\n            marginLeft: '7px',\r\n            marginBottom: '1px',\r\n            color: spinnerType === StatusSpinnerType.Primary ? undefined : '#797775',\r\n        },\r\n    }} {...props}/>);\r\n};\r\nexport const HasEditsStatus = () => {\r\n    return (<Stack horizontal>\r\n            <Stack.Item>\r\n                <Icon iconName=\"Warning12\" styles={{\r\n        root: {\r\n            fontSize: '12px',\r\n            lineHeight: '12px',\r\n            paddingTop: '5px',\r\n            paddingRight: '5px',\r\n            color: '#D83B01',\r\n        },\r\n    }}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <span className=\"template__publish-status\">\r\n                    <FormattedMessage id=\"TemplateChangedSinceLastPublish\" defaultMessage=\"Changed since last publish\" description=\"Template status indicating the template has been edited since last publish\"/>\r\n                </span>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const CombinedStatus = () => {\r\n    const intl = useIntl();\r\n    const combinedStatus = intl.formatMessage(messages.templateCombinedExportingAndResettingStatus);\r\n    return <StatusSpinner label={combinedStatus} spinnerType={StatusSpinnerType.Default}/>;\r\n};\r\nexport const PublishedStatus = (props) => {\r\n    const { template, locale } = props;\r\n    const lastPublishedDate = getLastPublishedDate(template, locale);\r\n    const lastPublishedTime = getLastPublishedTime(template, locale);\r\n    return (<span className=\"template__publish-status\">\r\n            <FormattedMessage id=\"TemplatePublishedStatus\" defaultMessage=\"Published {lastPublishedDate} - {lastPublishedTime}\" description=\"Text to indicate template has been published on date {lastPublishedDate} at time {lastPublishedTime}.\" values={{ lastPublishedDate, lastPublishedTime }}/>\r\n        </span>);\r\n};\r\nexport const UnpublishedStatus = () => {\r\n    const intl = useIntl();\r\n    const unpublished = intl.formatMessage(templateMessages.templateUnpublishedStatus);\r\n    const unpublishedTooltip = intl.formatMessage(templateMessages.templateUnpublishedTooltipText);\r\n    return (<Stack horizontal>\r\n            <Stack.Item>\r\n                <span className=\"template__publish-status\">{unpublished}</span>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <InfoTip content={unpublishedTooltip}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const ScalingStatus = (props) => {\r\n    const intl = useIntl();\r\n    const { isVNext } = props.template;\r\n    const { formatMessage: msg } = intl;\r\n    const scaling = isVNext ? msg(messages.vNextTemplateScalingStatus) : msg(messages.templateScalingStatus);\r\n    return (<StatusSpinner label={scaling} spinnerType={StatusSpinnerType.Primary} styles={{\r\n        label: { textAlign: 'right', display: 'inline', verticalAlign: 'text-top' },\r\n        circle: { display: 'inline-block' },\r\n        root: { alignItems: 'flex-start', display: 'inline', textAlign: 'right' },\r\n    }}/>);\r\n};\r\nexport const SharedImageError = (props) => {\r\n    const { sharedImage } = props;\r\n    return (<div className=\"template__image-status template__image-status--failed\">\r\n            <Icon iconName=\"ErrorBadge\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '16px',\r\n            paddingRight: '5px',\r\n            position: 'relative',\r\n            top: '3px',\r\n            color: '#e53935',\r\n        },\r\n    }}/>\r\n            {sharedImage ? (<FormattedMessage id=\"FailedToUploadImageMessage\" defaultMessage=\"Saving virtual machine image ‘{imageName}’ failed. Please try again.\" description=\"Text to indicate saving the image failed.  {imageName} is the display name of the failed image.\" values={{ imageName: sharedImage.displayName }}/>) : (<FormattedMessage id=\"FailedToUploadImageMessageNoName\" defaultMessage=\"Saving virtual machine image failed. Please try again.\" description=\"Text to indicate saving the image failed.\"/>)}\r\n        </div>);\r\n};\r\nexport const ExportingImageStatus = () => {\r\n    const intl = useIntl();\r\n    const exporting = intl.formatMessage(messages.templateExportingImageStatus);\r\n    return <StatusSpinner label={exporting} spinnerType={StatusSpinnerType.Default}/>;\r\n};\r\nexport const ExportedImageStatus = (props) => {\r\n    const { template, locale } = props;\r\n    const exportRelativeTime = getLastUploadedRelativeTime(template, locale);\r\n    return (<span className=\"template__image-status\">\r\n            <FormattedMessage id=\"TemplateLastUploadedTime\" defaultMessage=\"Image exported {exportRelativeTime}\" description=\"Text to indicate image has been exported {lastExportedTime}, the parameter {lastExportedTime} being a (localized) time relative to the current time (for example one hour ago, one day ago, etc).\" values={{ exportRelativeTime }}/>\r\n        </span>);\r\n};\r\nexport const ResettingPasswordStatus = () => {\r\n    const intl = useIntl();\r\n    const resetting = intl.formatMessage(commonMessages.resettingPassword);\r\n    return <StatusSpinner label={resetting} spinnerType={StatusSpinnerType.Default}/>;\r\n};\r\nexport const PublishingStatus = (props) => {\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const { template } = props;\r\n    const isVNext = template.isVNext;\r\n    const truncatedTitle = template.title.length > 40 ? _.truncate(template.title, { length: 40 }) : template.title; // eslint-disable-line security/detect-non-literal-fs-filename\r\n    const publishing = isVNext\r\n        ? msg(messages.vNextTemplatePublishingStatus, {\r\n            templateName: truncatedTitle,\r\n        })\r\n        : msg(messages.templatePublishingStatus, {\r\n            templateName: truncatedTitle,\r\n        });\r\n    return (<StatusSpinner styles={{\r\n        label: { textAlign: 'right', display: 'inline', verticalAlign: 'text-top' },\r\n        circle: { display: 'inline-block' },\r\n        root: { alignItems: 'flex-start', display: 'inline' },\r\n    }} label={publishing} spinnerType={StatusSpinnerType.Primary}/>);\r\n};\r\nexport const PublishOperationStatus = (props) => {\r\n    const { template, locale } = props;\r\n    const { isPublishing, isScaling, isPublished, hasEdits } = template;\r\n    if (isPublishing) {\r\n        return <PublishingStatus template={template}/>;\r\n    }\r\n    if (isScaling) {\r\n        return <ScalingStatus template={template}/>;\r\n    }\r\n    if (!isPublished) {\r\n        return <UnpublishedStatus />;\r\n    }\r\n    if (hasEdits) {\r\n        return <HasEditsStatus />;\r\n    }\r\n    return <PublishedStatus template={template} locale={locale}/>;\r\n};\r\nexport const ImageStatus = (props) => {\r\n    const { template } = props;\r\n    const { isUploadingImage, isResettingPassword, sharedImage, lastUploaded } = template;\r\n    if (isUploadingImage && isResettingPassword) {\r\n        return <CombinedStatus />;\r\n    }\r\n    if (isUploadingImage) {\r\n        return <ExportingImageStatus />;\r\n    }\r\n    if (isResettingPassword) {\r\n        return <ResettingPasswordStatus />;\r\n    }\r\n    if (isUploadStateFailed(template)) {\r\n        return <SharedImageError sharedImage={sharedImage}/>;\r\n    }\r\n    if (template && lastUploaded) {\r\n        return <ExportedImageStatus {...props}/>;\r\n    }\r\n    return <></>;\r\n};\r\nexport const OperationIndicator = (props) => {\r\n    const { template, groupName } = props;\r\n    return (<Stack>\r\n            <Stack.Item align=\"end\" styles={{ root: { maxWidth: '450px', textAlign: 'right' } }}>\r\n                {!template.isSyncing && <PublishOperationStatus {...props}/>}\r\n                {!!template.isSyncing && (<SyncingSpinner groupName={groupName} styles={{\r\n        label: {\r\n            textAlign: 'right',\r\n            display: 'inline',\r\n            verticalAlign: 'text-top',\r\n            fontSize: '12px',\r\n        },\r\n        circle: { display: 'inline-block' },\r\n        root: { alignItems: 'flex-start', display: 'inline', textAlign: 'right' },\r\n    }}/>)}\r\n            </Stack.Item>\r\n            <Stack.Item align=\"end\">\r\n                <ImageStatus {...props}/>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default OperationIndicator;\r\n","import { Icon, SharedColors, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { Field } from 'react-final-form';\r\nimport commonMessages from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nimport { RequestLimitIncreaseInSentenceLink } from '../common/request-limit-increase-link';\r\nimport { SafeSpinButton } from '../common/safe-spin-button';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport { ClockInfoProcessEstimate } from './clock-info-process-estimate';\r\nimport { templateMessages } from './template-messages';\r\nconst messages = defineMessages({\r\n    setMaxNumberOfMachinesLabel: {\r\n        id: 'SetMaxNumberOfMachinesLabel',\r\n        defaultMessage: 'Set the maximum number of machines in the lab',\r\n        description: 'Label for field to set maximum number of machines in the lab',\r\n    },\r\n});\r\nexport const PublishDialogContent = (props) => {\r\n    const intl = useIntl();\r\n    const { remainingVmsInSubscription, hasBeenPublished, labCapacity, labMaxCapacity, labId, currentTenantId, isGroupSyncModeEnabled, groupName, hasTemplate, } = props;\r\n    const { formatMessage: msg } = intl;\r\n    const setMaxNumber = msg(messages.setMaxNumberOfMachinesLabel);\r\n    let maxCapacity = labMaxCapacity ?? Constants.DefaultMaxCapacity;\r\n    if (remainingVmsInSubscription !== undefined) {\r\n        maxCapacity = Math.min(maxCapacity, remainingVmsInSubscription);\r\n    }\r\n    const isVNext = isVNextLab(labId);\r\n    const longProcessWarningSpan = (<span style={{ fontWeight: 600 }}>\r\n            {isVNext ? (<FormattedMessage id=\"VNextRepublishDialogSubWarning\" defaultMessage=\"This process can take up to 20 minutes and cannot be undone.\" description=\"Text in re-publish dialog to warn user the re publish action can take a while and cannot be undone\"/>) : (<FormattedMessage id=\"RepublishDialogSubWarning\" defaultMessage=\"This process can take up to an hour and cannot be undone.\" description=\"Text in re-publish dialog to warn user the re publish action can take a while and cannot be undone\"/>)}\r\n        </span>);\r\n    let isLimitedCoreView;\r\n    if (isGroupSyncModeEnabled) {\r\n        isLimitedCoreView =\r\n            labCapacity !== undefined &&\r\n                remainingVmsInSubscription !== undefined &&\r\n                (remainingVmsInSubscription - labCapacity <= 10 || labCapacity >= maxCapacity);\r\n    }\r\n    else {\r\n        isLimitedCoreView =\r\n            remainingVmsInSubscription !== undefined &&\r\n                (remainingVmsInSubscription <= 10 || (labCapacity !== undefined && labCapacity >= maxCapacity));\r\n    }\r\n    return (<>\r\n            {hasBeenPublished && (<Stack horizontal tokens={{ childrenGap: '15px' }} styles={{ root: { marginTop: '10px' } }}>\r\n                    <Stack.Item>\r\n                        <Icon iconName=\"Warning\" styles={{\r\n        root: {\r\n            fontSize: '54px',\r\n            lineHeight: '54px',\r\n            color: '#D83B01',\r\n        },\r\n    }}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item align=\"start\">\r\n                        {hasTemplate && (<FormattedMessage id=\"RepublishDialogWarning\" defaultMessage=\"Publishing will immediately delete every user’s virtual machine and replace it with a new one that includes your latest changes. {longProcessWarningSpan}\" description=\"Text in re-publish dialog to warn user that publishing will delete all virtual machines and replace it with a new one.  {longProcessWarningSpan} is a formatted span with message by id RepublishDialogSubWarning, warning the user the process is long and cannot be undone.\" values={{ longProcessWarningSpan }}/>)}\r\n                        {!hasTemplate && (<FormattedMessage id=\"NoTemplateRepublishDialogWarning\" defaultMessage=\"Publishing will immediately delete every user’s virtual machine and replace it with a copy of the template image. {longProcessWarningSpan}\" description=\"Text in re-publish dialog to warn user that publishing will delete all virtual machines and replace it with a copy of the template.  {longProcessWarningSpan} is a formatted span with message by id RepublishDialogSubWarning, warning the user the process is long and cannot be undone.\" values={{ longProcessWarningSpan }}/>)}\r\n                        <div style={{ marginTop: '20px' }}>\r\n                            <FormattedMessage id=\"RepublishDialogContinueConfirmation\" defaultMessage=\"Do you want to continue?\" description=\"Text in re-publish dialog to ask user if they would like to continue with the re-publish\"/>\r\n                        </div>\r\n                    </Stack.Item>\r\n                </Stack>)}\r\n            {!hasBeenPublished && (<div className=\"publish-template-dialog__publish\">\r\n                    {!isGroupSyncModeEnabled && (<>\r\n                            <Field name=\"capacity\">\r\n                                {(fieldProps) => (<SafeSpinButton label={setMaxNumber} autoFocus value={fieldProps.input.value} min={isVNext ? 0 : 1} max={maxCapacity} onChange={fieldProps.input.onChange}/>)}\r\n                            </Field>\r\n                            {!isLimitedCoreView && (<div className=\"publish-template-dialog__number-can-be-changed-text\">\r\n                                    <FormattedMessage id=\"ChangingNumberOfMachinesInLabInfo\" defaultMessage=\"The number of machines can be increased or decreased at any time.\" description=\"Informational text that the number of machines can be changed at any time.\"/>\r\n                                    <div className=\"ms-fontWeight-semibold\">\r\n                                        <FormattedMessage {...commonMessages.covidPublishWarning}/>\r\n                                    </div>\r\n                                </div>)}\r\n                        </>)}\r\n                    {isGroupSyncModeEnabled && (<>\r\n                            {!!groupName && (<FormattedMessage id=\"SyncFromGroupFirstPublishMessage\" defaultMessage='This lab is synced from the group \"<aadGroupName></aadGroupName>\". It will be published with {labCapacity} virtual machines.' description=\"Text in publish dialog to inform users that this lab is synced from aad group and the number of virtual machines is fixed.\" values={{\r\n        aadGroupName: () => <span style={{ fontWeight: 600 }}>{groupName}</span>,\r\n        labCapacity,\r\n    }}/>)}\r\n                            {!groupName && (<FormattedMessage id=\"SyncFromGroupFirstPublishNoGroupNameMessage\" defaultMessage=\"This lab is synced from a group. It will be published with {labCapacity} virtual machines.\" description=\"Text in publish dialog to inform users that this lab is synced from aad group and the number of virtual machines is fixed.\" values={{\r\n        labCapacity,\r\n    }}/>)}\r\n                        </>)}\r\n                    {isLimitedCoreView && remainingVmsInSubscription !== undefined && (<Stack horizontal tokens={{ childrenGap: 5 }} styles={{ root: { marginTop: '16px' } }}>\r\n                            <Stack.Item>\r\n                                <Icon iconName=\"Warning\" styles={{ root: { color: SharedColors.red20 } }}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item styles={{ root: { fontSize: '12px' } }}>\r\n                                <FormattedMessage id=\"VmsAvailableForPublish\" defaultMessage=\"Your account is close to reaching its virtual machine cores limit in Azure Lab Services. Currently, you can only publish {remainingVmsInSubscription} virtual machines. To publish more, please {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Text in publish dialog to inform user the number of virtual machines they have available. {remainingVmsInSubscription} is the number of virtual machines available for the lab.\" values={{\r\n        remainingVmsInSubscription,\r\n        requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={labId} tenantId={currentTenantId}/>),\r\n    }}/>\r\n                            </Stack.Item>\r\n                        </Stack>)}\r\n                    <div className=\"publish-template-dialog__this-takes-a-long-time-text\">\r\n                        <ClockInfoProcessEstimate timeEstimateMessage={isVNext\r\n        ? msg(templateMessages.twentyMinutesFormatted)\r\n        : msg(templateMessages.oneHourFormatted)}/>\r\n                    </div>\r\n                </div>)}\r\n        </>);\r\n};\r\n","import { DefaultButton, Dialog, DialogFooter, DialogType, PrimaryButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Form } from 'react-final-form';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nimport templateMessages from './template-messages';\r\nimport { PublishDialogContent } from './publish-template-dialog-content';\r\nimport { determineVCurrentOrVNextLabRemainingVms } from '../redux/selectors/core-limit-selectors';\r\nimport { getLabCapacity, isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport './publish-template-dialog.css';\r\nconst messages = defineMessages({\r\n    publishTemplateTitle: {\r\n        id: 'PublishTemplateTitle',\r\n        defaultMessage: 'Publish template',\r\n        description: 'Title for publish template dialog',\r\n    },\r\n});\r\nexport const PublishDialogFooter = (props) => {\r\n    const intl = useIntl();\r\n    const { isDisabled, onSubmit, onDismiss } = props;\r\n    const publish = intl.formatMessage(templateMessages.publishTemplate);\r\n    const cancel = intl.formatMessage(commonMessages.cancel);\r\n    return (<DialogFooter styles={{ actions: { marginTop: '32px' } }}>\r\n            <PrimaryButton disabled={isDisabled} text={publish} ariaLabel={publish} onClick={onSubmit}/>\r\n            <DefaultButton onClick={onDismiss} ariaLabel={cancel} text={cancel}/>\r\n        </DialogFooter>);\r\n};\r\nexport const PublishTemplateDialog = (props) => {\r\n    const intl = useIntl();\r\n    const { lab, isGpu, coresPerVm, coreQuotaData, templateId, onDismiss, hasBeenPublished, publishTemplate, currentTenantId, isGroupSyncModeEnabled, groupName, } = props;\r\n    const msg = intl.formatMessage;\r\n    const initialLabCapacity = getLabCapacity(lab) ?? 1;\r\n    const isVNext = isVNextLab(lab.id);\r\n    const remainingVmsInSubscription = determineVCurrentOrVNextLabRemainingVms(isVNext, isGpu, coresPerVm, coreQuotaData, getLabCapacity(lab));\r\n    const labMaxCapacity = !isVNext ? lab.userQuota : undefined;\r\n    const onDismissed = () => {\r\n        onDismiss();\r\n    };\r\n    return (<Dialog onDismiss={onDismissed} hidden={false} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: msg(messages.publishTemplateTitle),\r\n    }} modalProps={{\r\n        onDismissed: onDismissed,\r\n    }} minWidth={Constants.DefaultDialogWideWidth}>\r\n            <Form initialValues={{ capacity: initialLabCapacity }} onSubmit={(values) => {\r\n        publishTemplate(templateId, values.capacity);\r\n        onDismiss();\r\n    }}>\r\n                {(formProps) => (<>\r\n                        <PublishDialogContent remainingVmsInSubscription={remainingVmsInSubscription} hasBeenPublished={hasBeenPublished} labCapacity={formProps.values.capacity} labMaxCapacity={labMaxCapacity} labId={lab.id} hasTemplate={!!templateId} currentTenantId={currentTenantId} isGroupSyncModeEnabled={isGroupSyncModeEnabled} groupName={groupName}/>\r\n                        <PublishDialogFooter isDisabled={!formProps.valid} onDismiss={onDismissed} onSubmit={() => formProps.handleSubmit()}/>\r\n                    </>)}\r\n            </Form>\r\n        </Dialog>);\r\n};\r\nexport default PublishTemplateDialog;\r\n","import { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { RequestLimitIncreaseInSentenceLink } from '../common/request-limit-increase-link';\r\nimport { CoreQuotaStatus, determineVCurrentOrVNextLabRemainingVms, determineVCurrentQuotaStatus, } from '../redux/selectors/core-limit-selectors';\r\nimport { getLabCapacity, isVNextLab } from '../redux/selectors/lab-selectors';\r\nexport const QuotaBanner = (props) => {\r\n    const { lab, template, coreQuotaData, currentTenantId, isGroupSyncModeEnabled, styles } = props;\r\n    if (!template || !lab || !coreQuotaData) {\r\n        return <></>;\r\n    }\r\n    if (template.isPublished || template.isPublishing || template.isScaling) {\r\n        return <></>;\r\n    }\r\n    const isVNext = isVNextLab(lab.id);\r\n    const quotaStatus = !isVNext ? determineVCurrentQuotaStatus(coreQuotaData) : undefined;\r\n    if (quotaStatus === CoreQuotaStatus.Exempt) {\r\n        return <></>;\r\n    }\r\n    if (quotaStatus === CoreQuotaStatus.Restricted) {\r\n        return (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                <FormattedMessage id=\"NoCoresForSubscriptionPublishMessage\" defaultMessage=\"Your admin needs to request a limit increase in Azure Lab Services for virtual machine cores before you can publish this lab. Please contact your Lab Services administator.\" description=\"Message displayed on template page when customer subscription type has no cores available by default and cannot publish.\"/>\r\n            </MessageBar>);\r\n    }\r\n    const usersInLab = getLabCapacity(lab);\r\n    const remainingVmsInSubscription = determineVCurrentOrVNextLabRemainingVms(isVNext, template.isGpu, template.cores, coreQuotaData, getLabCapacity(lab));\r\n    if (quotaStatus === CoreQuotaStatus.QuotaExceeded || remainingVmsInSubscription === 0) {\r\n        return (<MessageBar messageBarType={MessageBarType.blocked} styles={styles}>\r\n                <FormattedMessage id=\"QuotaExceededForPublishMessage\" defaultMessage=\"Your account has reached its virtual machine cores limit in Azure Lab Services. Before you can publish, you need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message displayed on template when customer subscription has exceeded its quota and cannot publish a lab. {requestLimitIncreaseLink} is a link with id 'SupportRequestLinkRequest' with instructions on how to increase quota for the subscription.\" values={{\r\n            requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={lab?.id} tenantId={currentTenantId}/>),\r\n        }}/>\r\n            </MessageBar>);\r\n    }\r\n    else if (isGroupSyncModeEnabled &&\r\n        usersInLab !== undefined &&\r\n        remainingVmsInSubscription !== undefined &&\r\n        usersInLab > remainingVmsInSubscription) {\r\n        return (<MessageBar messageBarType={MessageBarType.blocked} styles={styles}>\r\n                <FormattedMessage id=\"UsersExceededRemainingVmsForPublishMessage\" defaultMessage=\"Virtual machines are needed for {usersInLab} users but only {remainingVmsInSubscription} machines are currently available in your organization. Before you can publish, you need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message displayed on template when number of users in a AAD group synced lab exceeds the number of remaining VMs and cannot publish a lab. {usersInLab} is the number of users in the lab, {remainingVmsInSubscription} is the number of VMs remaining in the subscription that could be published immediately, {requestLimitIncreaseLink} is a link with id 'SupportRequestLinkRequest' with instructions on how to increase quota for the subscription.\" values={{\r\n            usersInLab,\r\n            remainingVmsInSubscription,\r\n            requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={lab?.id} tenantId={currentTenantId}/>),\r\n        }}/>\r\n            </MessageBar>);\r\n    }\r\n    const showGettingCloseBanner = remainingVmsInSubscription === undefined ? false : remainingVmsInSubscription <= 10;\r\n    if (showGettingCloseBanner) {\r\n        return (<MessageBar messageBarType={MessageBarType.warning} styles={styles}>\r\n                <FormattedMessage id=\"PublishGettingCloseToLimitsBannerMessage\" defaultMessage=\"Your account is getting close to reaching its cores limit in Azure Lab Services. Currently, you can only publish {numberOfVms} virtual machines. To publish more, please {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message displayed on template when customer subscription is getting close to its core limit. {requestLimitIncreaseLink} is a link with id 'SupportRequestLinkRequest' with instructions on how to increase quota for the subscription.\" values={{\r\n            numberOfVms: remainingVmsInSubscription,\r\n            requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={lab?.id} tenantId={currentTenantId}/>),\r\n        }}/>\r\n            </MessageBar>);\r\n    }\r\n    return <></>;\r\n};\r\nexport default QuotaBanner;\r\n","import * as React from 'react';\r\nimport { Dialog, DialogFooter, DialogType, DefaultButton, PrimaryButton } from '@fluentui/react';\r\nimport { FormattedMessage, injectIntl, defineMessages } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport { Constants } from '../utils/constants';\r\nimport './template.css';\r\nconst messages = defineMessages({\r\n    startTemplateTitle: {\r\n        id: 'StartTemplateTitle',\r\n        defaultMessage: 'Start template',\r\n        description: 'Title for start template warning dialog',\r\n    },\r\n});\r\nconst StartWarningTemplateDialogInjected = (props) => {\r\n    const { startTemplate, onDismiss } = props;\r\n    const title = props.intl.formatMessage(messages.startTemplateTitle);\r\n    const continueLabel = props.intl.formatMessage(commonMessages.continue);\r\n    const cancelLabel = props.intl.formatMessage(commonMessages.cancel);\r\n    return (<Dialog onDismiss={onDismiss} hidden={false} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: title,\r\n    }} modalProps={{\r\n        onDismissed: onDismiss,\r\n        isBlocking: false,\r\n        styles: {\r\n            main: {\r\n                fontSize: '14px',\r\n            },\r\n        },\r\n    }} minWidth={Constants.DefaultDialogWidth}>\r\n            <FormattedMessage id=\"CustomizeTemplateWarningMessage\" defaultMessage=\"Once you start the template and make changes, it will no longer have the same setup as the virtual machines last published to your users.\" description=\"Text to explain how customizing the template works in the customize warning template dialog.\"/>\r\n            <div style={{ fontWeight: 600, paddingTop: 20 }}>\r\n                <FormattedMessage id=\"ChangingPublishedTemplateClarification\" defaultMessage=\"Changing the template will not affect your users’ current virtual machines until you publish again. Publishing will delete all data on the users’ machines.\" description=\"Bolded text in start template warning dialog.\"/>\r\n            </div>\r\n            <DialogFooter styles={{ actions: { marginTop: '52px' } }}>\r\n                <PrimaryButton text={continueLabel} ariaLabel={continueLabel} onClick={() => {\r\n        startTemplate();\r\n        onDismiss();\r\n    }}/>\r\n                <DefaultButton text={cancelLabel} onClick={onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const StartWarningTemplateDialog = injectIntl(StartWarningTemplateDialogInjected);\r\nexport default StartWarningTemplateDialog;\r\n","import { defineMessages } from 'react-intl';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { ErrorCode } from '../common/error-codes';\r\nimport commonMessages from '../language/common-messages';\r\nimport { trackTrace } from '../utils/telemetry/telemetry-channel';\r\nexport const messages = defineMessages({\r\n    getTemplateErrorNotFound: {\r\n        id: 'GetTemplateErrorNotFound',\r\n        defaultMessage: `Unable to get the template because it could not be found.`,\r\n        description: 'Message to indicate that fetching the template failed because it could not be found.',\r\n    },\r\n    getTemplateGenericError: {\r\n        id: 'GetTemplateGenericError',\r\n        defaultMessage: `Unable to get the template because an error has occurred.`,\r\n        description: 'Message to indicate that fetching the template failed.',\r\n    },\r\n    updateTemplateErrorNotFound: {\r\n        id: 'UpdateTemplateErrorNotFound',\r\n        defaultMessage: `Unable to update the template because it could not be found.`,\r\n        description: 'Message to indicate that updating the template failed because it could not be found.',\r\n    },\r\n    updateTemplateErrorResourceInDeletingState: {\r\n        id: 'UpdateTemplateErrorResourceInDeletingState',\r\n        defaultMessage: `Unable to update the template because it is deleting.`,\r\n        description: 'Message to indicate that updating the template failed because it is deleting.',\r\n    },\r\n    updateTemplateGenericError: {\r\n        id: 'UpdateTemplateGenericError',\r\n        defaultMessage: `Unable to update the template because an error has occurred.`,\r\n        description: 'Message to indicate that updating the template failed.',\r\n    },\r\n    stopTemplateErrorNotFound: {\r\n        id: 'StopTemplateErrorNotFound',\r\n        defaultMessage: `Unable to stop template because it could not be found.`,\r\n        description: 'Message to indicate that stopping the template failed because it could not be found.',\r\n    },\r\n    stopTemplateErrorNoResources: {\r\n        id: 'StopTemplateErrorNoResources',\r\n        defaultMessage: `Unable to stop the template because there are no resources created for the template.`,\r\n        description: 'Message to indicate that stopping the template failed because it did not have any backing resources.',\r\n    },\r\n    stopTemplateGenericError: {\r\n        id: 'StopTemplateGenericError',\r\n        defaultMessage: `Unable to stop the template because an error has occurred.`,\r\n        description: 'Message to indicate that stopping the template failed.',\r\n    },\r\n    startTemplateErrorNotFound: {\r\n        id: 'StartTemplateErrorNotFound',\r\n        defaultMessage: `Unable to start the template because it could not be found.`,\r\n        description: 'Message to indicate that starting the template failed because it could not be found.',\r\n    },\r\n    startTemplateErrorNoResources: {\r\n        id: 'StartTemplateErrorNoResources',\r\n        defaultMessage: `Unable to start the template because there are no resources created for the template.`,\r\n        description: 'Message to indicate that starting the template failed because it did not have any backing resources.',\r\n    },\r\n    startTemplateGenericError: {\r\n        id: 'StartTemplateGenericError',\r\n        defaultMessage: `Unable to start the template because an error has occurred.`,\r\n        description: 'Message to indicate that starting the template failed.',\r\n    },\r\n    resetPasswordTemplateErrorNotFound: {\r\n        id: 'ResetPasswordTemplateErrorNotFound',\r\n        defaultMessage: `Unable to reset the password because the template could not be found.`,\r\n        description: 'Message to indicate that resetting the password failed because the template could not be found.',\r\n    },\r\n    resetPasswordTemplateErrorNoResources: {\r\n        id: 'ResetPasswordTemplateErrorNoResources',\r\n        defaultMessage: `Unable to reset the password because there are no resources created for the template.`,\r\n        description: 'Message to indicate that resetting the password failed because the template did not have any backing resources.',\r\n    },\r\n    resetPasswordTemplateErrorResourceNotInSucceededState: {\r\n        id: 'ResetPasswordTemplateErrorResourceNotInSucceededState',\r\n        defaultMessage: `Unable to reset the password because the template is not in a succeeded state.`,\r\n        description: 'Message to indicate that resetting the password failed because the template is not in a succeeded state.',\r\n    },\r\n    resetPasswordTemplateErrorResourceDoesNotExist: {\r\n        id: 'ResetPasswordTemplateErrorResourceDoesNotExist',\r\n        defaultMessage: `Unable to reset the password because the template resource does not exist.`,\r\n        description: 'Message to indicate that resetting the password failed because the template resource does not exist.',\r\n    },\r\n    resetPasswordTemplateInvalidPassword: {\r\n        id: 'ResetPasswordTemplateInvalidPassword',\r\n        defaultMessage: `Unable to reset the password because it doesn't meet password policies.`,\r\n        description: `Message to indicate that the provided password wasn't complex enough, long enough, or reused an older password.`,\r\n    },\r\n    resetPasswordVmAgentNoCommunicationError: {\r\n        id: 'ResetPasswordVmAgentNoCommunicationError',\r\n        defaultMessage: 'Communication could not be established with the VM agent. Please verify that the VM agent is enabled and functioning.',\r\n        description: 'Occurs when the agent cannot be communicated with.',\r\n    },\r\n    resetPasswordTemplateGenericError: {\r\n        id: 'ResetPasswordTemplateGenericError',\r\n        defaultMessage: `Unable to reset the password because an error has occurred.`,\r\n        description: 'Message to indicate that resetting the password failed.',\r\n    },\r\n    publishTemplateErrorNotFound: {\r\n        id: 'PublishTemplateErrorNotFound',\r\n        defaultMessage: `Unable to publish the template because it could not be found`,\r\n        description: 'Message to indicate that publishing the template failed because the template could not be found.',\r\n    },\r\n    publishTemplateErrorNoResources: {\r\n        id: 'PublishTemplateErrorNoResources',\r\n        defaultMessage: `Unable to publish the template because there are no resources created for the template.`,\r\n        description: 'Message to indicate that publishing the template failed because the template did not have any backing resources.',\r\n    },\r\n    publishTemplateErrorResourceNotInSucceededState: {\r\n        id: 'PublishTemplateErrorResourceNotInSucceededState',\r\n        defaultMessage: `Unable to publish the template because the template is not in a succeeded state.`,\r\n        description: 'Message to indicate that publishing the template failed because the template is not in a succeeded state.',\r\n    },\r\n    publishTemplateErrorSubscriptionNotEnabled: {\r\n        id: 'PublishTemplateErrorSubscriptionNotEnabled',\r\n        defaultMessage: `Unable to publish the template because the subscription containing the template resource is not enabled.`,\r\n        description: 'Message to indicate that publishing the template failed because the subscription is not enabled.',\r\n    },\r\n    publishTemplateErrorResourceNotReady: {\r\n        id: 'PublishTemplateErrorResourceNotReady',\r\n        defaultMessage: `Unable to publish the template because it is not in a succeeded state.`,\r\n        description: 'Message to indicate that publishing the template failed because the template is not in a succeeded state.',\r\n    },\r\n    publishTemplateTotalRegionalCoreLimitError: {\r\n        id: 'PublishTemplateTotalRegionalCoreLimitError',\r\n        defaultMessage: `Publish operation could not be completed as it results in exceeding approved total regional core limits on your account. You need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some virtual machine types may be temporarily unavailable.`,\r\n        description: 'Message to indicate that publishing the template failed due to exceeding the total regional core limit.',\r\n    },\r\n    publishTemplateErrorDiskSizeLesserThanExisting: {\r\n        id: 'PublishTemplateErrorDiskSizeLesserThanExisting',\r\n        defaultMessage: `Unable to publish the template because the disk size is lesser than the existing disk size. This is not allowed. Please try a greater size or do not specify an explicit size.`,\r\n        description: 'Message to indicate that publishing the template failed because the disk size is lesser than the existing disk size.',\r\n    },\r\n    publishTemplateGenericError: {\r\n        id: 'PublishTemplateGenericError',\r\n        defaultMessage: `Unable to publish the template because an error has occurred.`,\r\n        description: 'Message to indicate that publishing the template failed.',\r\n    },\r\n    saveImageTemplateErrorNotFound: {\r\n        id: 'SaveImageTemplateErrorNotFound',\r\n        defaultMessage: `Unable to save the image because it could not be found.`,\r\n        description: 'Message to indicate that saving the image failed because it could not be found.',\r\n    },\r\n    saveImageTemplateErrorInvalidUploadTargetToOverride: {\r\n        id: 'SaveImageTemplateErrorInvalidUploadTargetToOverride',\r\n        defaultMessage: `Unable to save the image because the wrong VM image was sent for upload.`,\r\n        description: 'Message to indicate that saving the image failed because the wrong shared image id was sent.',\r\n    },\r\n    saveImageTemplateErrorResourceDoesNotExist: {\r\n        id: 'SaveImageTemplateErrorResourceDoesNotExist',\r\n        defaultMessage: `Unable to save the image because the image is either disabled or does not exist.`,\r\n        description: 'Message to indicate that saving the image failed because the image is disabled or does not exist.',\r\n    },\r\n    saveImageTemplateErrorNoSharedImageGalleriesAttachedToTheLabAccount: {\r\n        id: 'SaveImageTemplateErrorNoSharedImageGalleriesAttachedToTheLabAccount',\r\n        defaultMessage: `Unable to save the image because no galleries are attached to the lab account or lab plan.`,\r\n        description: 'Message to indicate that saving the image failed because no galleries are attached to the lab account or lab plan.',\r\n    },\r\n    saveImageTemplateErrorAlreadyInProgress: {\r\n        id: 'SaveImageTemplateErrorAlreadyInProgress',\r\n        defaultMessage: `Unable to save the image because the image is already being saved.`,\r\n        description: 'Message to indicate that saving the image failed because there is already a save image operation in progress.',\r\n    },\r\n    saveImageTemplateErrorUnexpectedResourceId: {\r\n        id: 'SaveImageTemplateErrorUnexpectedResourceId',\r\n        defaultMessage: `Unable to save the image because there was a problem parsing its id.`,\r\n        description: 'Message to indicate that saving the image failed because we encountered an unexpected resource id.',\r\n    },\r\n    saveImageTemplateErrorResourceNotInSucceededState: {\r\n        id: 'SaveImageTemplateErrorResourceNotInSucceededState',\r\n        defaultMessage: `Unable to save the image because the template is not in a succeeded state.`,\r\n        description: 'Message to indicate that saving the image failed because the template is not in a succeeded state.',\r\n    },\r\n    saveImageTemplateErrorRegionMismatch: {\r\n        id: 'SaveImageTemplateErrorRegionMismatch',\r\n        defaultMessage: `Exporting to a gallery does not currently support region mismatches between the lab and the lab plan. Please deploy them in the same regions to use this feature.`,\r\n        description: 'Text to indicate saving the image failed because the lab and lab plan are deployed in different regions.',\r\n    },\r\n    saveImageAlreadyInProgressError: {\r\n        id: 'SaveImageAlreadyInProgressError',\r\n        defaultMessage: `An image export to Azure compute gallery is already in progress with the given image name.`,\r\n        description: 'Message to indicate that saving the image failed because the image already exists.',\r\n    },\r\n    saveImageTemplateGenericError: {\r\n        id: 'SaveImageTemplateGenericError',\r\n        defaultMessage: `Unable to save the image because an error has occurred.`,\r\n        description: 'Message to indicate that saving the image failed.',\r\n    },\r\n    arm64IncompatibilityError: {\r\n        id: 'Arm64IncompatibilityError',\r\n        defaultMessage: 'Failed to create lab with image with CPU Architecture Arm64. Arm64 is not supported for Azure Lab Services VMs, please try creating lab with different image.',\r\n        description: 'Message to indicate that creating a lab or publishing the template failed due to Arm64 incompatibility',\r\n    },\r\n    invalidDiskSizeError: {\r\n        id: 'InvalidDiskSizeError',\r\n        defaultMessage: 'The specified disk size is smaller than the size of the corresponding disk in the VM image. This is not allowed. Please choose equal or greater size or do not specify an explicit size',\r\n        description: 'Message to indicate that the specified disk size is smaller than the size of the corresponding disk in the VM image.',\r\n    },\r\n    invalidImagePlanInfoError: {\r\n        id: 'InvalidImagePlanInfoError',\r\n        defaultMessage: 'The Marketplace image or the custom image you have chosen is not supported by Azure Lab Services, please try creating a lab with a different image.',\r\n        description: 'Message to indicate that the Marketplace image or a customer image is missing plan info.',\r\n    },\r\n    invalidAdminUsernameError: {\r\n        id: 'InvalidAdminUsernameError',\r\n        defaultMessage: 'Invalid admin username. Please try creating new lab with valid username',\r\n        description: 'Message to indicate that creating a lab or publishing the template failed due to invalid admin username.',\r\n    },\r\n    labBeingDeletedError: {\r\n        id: 'LabBeingDeletedError',\r\n        defaultMessage: 'Operation failed due to lab being deleted.',\r\n        description: 'Message to indicate that the operation failed due to lab being deleted.',\r\n    },\r\n    imageUnavailableError: {\r\n        id: 'ImageUnavailableError',\r\n        defaultMessage: 'The Marketplace image or the custom image you have chosen is not supported by Azure Lab Services, please try creating a lab with a different image.',\r\n        description: 'Message to indicate that creating a lab or publishing the template failed due to lab being unavailable.',\r\n    },\r\n    SubnetIsFullError: {\r\n        id: 'SubnetIsFullError',\r\n        defaultMessage: 'Operation failed due to subnet being full. Please make sure the associated subnet have sufficient IP addresses available.',\r\n        description: 'Message to indicate that the operation failed due to subnet not having enough IP addresses.',\r\n    },\r\n});\r\nexport const getErrorMessage = (intl, error) => {\r\n    switch (error.failureOperation) {\r\n        case FailureOperation.StopTemplate:\r\n        case FailureOperation.StopEnvironments:\r\n            return getStopErrorMessage(intl, error);\r\n        case FailureOperation.StartTemplate:\r\n        case FailureOperation.StartEnvironments:\r\n            return getStartErrorMessage(intl, error);\r\n        case FailureOperation.ResetPassword:\r\n            return getResetPasswordErrorMessage(intl, error);\r\n        case FailureOperation.PublishTemplate:\r\n            return getPublishErrorMessage(intl, error);\r\n        case FailureOperation.SaveSharedImage:\r\n            return getSaveImageErrorMessage(intl, error);\r\n        case FailureOperation.UpdateTemplate:\r\n            return getUpdateTemplateErrorMessage(intl, error);\r\n        case FailureOperation.GetTemplate:\r\n        case FailureOperation.ListTemplates:\r\n            return getFetchTemplateErrorMessage(intl, error);\r\n        default:\r\n            return getFallbackErrorMessage(intl, error);\r\n    }\r\n};\r\nconst getStopErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.stopTemplateErrorNotFound);\r\n        case ErrorCode.EnvironmentSettingsHasNoResources:\r\n            return intl.formatMessage(messages.stopTemplateErrorNoResources);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.stopTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getStartErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.startTemplateErrorNotFound);\r\n        case ErrorCode.EnvironmentSettingsHasNoResources:\r\n            return intl.formatMessage(messages.startTemplateErrorNoResources);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.startTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getResetPasswordErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.resetPasswordTemplateErrorNotFound);\r\n        case ErrorCode.EnvironmentSettingsHasNoResources:\r\n            return intl.formatMessage(messages.resetPasswordTemplateErrorNoResources);\r\n        case ErrorCode.ResourceNotInSucceededState:\r\n            return intl.formatMessage(messages.resetPasswordTemplateErrorResourceNotInSucceededState);\r\n        case ErrorCode.ResourceDoesNotExist:\r\n            return intl.formatMessage(messages.resetPasswordTemplateErrorResourceDoesNotExist);\r\n        case ErrorCode.PasswordNotValid:\r\n            return intl.formatMessage(messages.resetPasswordTemplateInvalidPassword);\r\n        case ErrorCode.VMAgentStatusCommunicationError:\r\n            return intl.formatMessage(messages.resetPasswordVmAgentNoCommunicationError);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.resetPasswordTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getPublishErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.publishTemplateErrorNotFound);\r\n        case ErrorCode.EnvironmentSettingsHasNoResources:\r\n            return intl.formatMessage(messages.publishTemplateErrorNoResources);\r\n        case ErrorCode.ResourceNotReady:\r\n        case ErrorCode.ResourceIsNotInValidState:\r\n            return intl.formatMessage(messages.publishTemplateErrorResourceNotReady);\r\n        case ErrorCode.ResourceNotInSucceededState:\r\n            return intl.formatMessage(messages.publishTemplateErrorResourceNotInSucceededState);\r\n        case ErrorCode.SubscriptionNotEnabled:\r\n            return intl.formatMessage(messages.publishTemplateErrorSubscriptionNotEnabled);\r\n        case ErrorCode.TotalRegionalCoreLimit:\r\n            return intl.formatMessage(messages.publishTemplateTotalRegionalCoreLimitError);\r\n        case ErrorCode.InvalidAdminUsername:\r\n            return intl.formatMessage(messages.invalidAdminUsernameError);\r\n        case ErrorCode.LabBeingDeleted:\r\n            return intl.formatMessage(messages.labBeingDeletedError);\r\n        case ErrorCode.ImageUnavailable:\r\n            return intl.formatMessage(messages.imageUnavailableError);\r\n        case ErrorCode.PublishExceedsGpuCoresLimit:\r\n        case ErrorCode.PublishExceedsStandardCoresLimit:\r\n            return error.message;\r\n        case ErrorCode.Arm64Incompatibility:\r\n            return intl.formatMessage(messages.arm64IncompatibilityError);\r\n        case ErrorCode.InvalidDiskSize:\r\n            return intl.formatMessage(messages.invalidDiskSizeError);\r\n        case ErrorCode.InvalidImagePlanInfo:\r\n            return intl.formatMessage(messages.invalidImagePlanInfoError);\r\n        case ErrorCode.DiskSizeLesserThanExisting:\r\n            return intl.formatMessage(messages.publishTemplateErrorDiskSizeLesserThanExisting);\r\n        case ErrorCode.SubnetIsFull:\r\n            return intl.formatMessage(messages.SubnetIsFullError);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.publishTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getSaveImageErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorNotFound);\r\n        case ErrorCode.OperationAlradyInProgress:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorAlreadyInProgress);\r\n        case ErrorCode.UnexpectedResourceId:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorUnexpectedResourceId);\r\n        case ErrorCode.ResourceNotInSucceededState:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorResourceNotInSucceededState);\r\n        case ErrorCode.InvalidUploadTargetToOverride:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorInvalidUploadTargetToOverride);\r\n        case ErrorCode.ResourceDoesNotExist:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorResourceDoesNotExist);\r\n        case ErrorCode.NoSharedImageGalleriesAttachedToTheLabAccount:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorNoSharedImageGalleriesAttachedToTheLabAccount);\r\n        case ErrorCode.SaveImageRegionMismatch:\r\n            return intl.formatMessage(messages.saveImageTemplateErrorRegionMismatch);\r\n        case ErrorCode.SaveImageAlreadyInProgress:\r\n            return intl.formatMessage(messages.saveImageAlreadyInProgressError);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.saveImageTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getUpdateTemplateErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.updateTemplateErrorNotFound);\r\n        case ErrorCode.ResourceInDeletingState:\r\n            return intl.formatMessage(messages.updateTemplateErrorResourceInDeletingState);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.updateTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getFetchTemplateErrorMessage = (intl, error) => {\r\n    switch (error.code) {\r\n        case ErrorCode.NotFound:\r\n        case ErrorCode.ResourceNotFound:\r\n        case ErrorCode.ResourceIdNotFound:\r\n            return intl.formatMessage(messages.getTemplateErrorNotFound);\r\n        default:\r\n            const errorMessage = intl.formatMessage(messages.getTemplateGenericError);\r\n            return getFallbackErrorMessage(intl, error, errorMessage);\r\n    }\r\n};\r\nconst getFallbackErrorMessage = (intl, error, genericMessageForOperation) => {\r\n    // for cases where we haven't recorded a code and corresponding message in this client code yet\r\n    trackTrace(`template-error-handling: getFallbackErrorMessage - Unmapped error code: ${error ? error.code : 'Unknown'}`);\r\n    return genericMessageForOperation || intl.formatMessage(commonMessages.genericErrorMessage);\r\n};\r\nconst TemplateErrorHandling = {\r\n    getErrorMessage,\r\n};\r\nexport default TemplateErrorHandling;\r\n","import { MessageBar, MessageBarType, Link } from '@fluentui/react';\r\nimport { injectIntl, FormattedMessage } from 'react-intl';\r\nimport * as React from 'react';\r\nimport { ErrorCode } from '../common/error-codes';\r\nimport { RequestLimitIncreaseInSentenceLink } from '../common/request-limit-increase-link';\r\nimport { getErrorMessage, messages } from './template-error-handling';\r\nimport commonMessages from '../language/common-messages';\r\nimport './template.css';\r\nconst TemplateErrorBannerInjected = (props) => {\r\n    return (<>\r\n            {props.error && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={props.intl.formatMessage(commonMessages.close)} onDismiss={() => props.clearError(props.error)}>\r\n                    {props.error.code != ErrorCode.TotalRegionalCoreLimit\r\n        ? getErrorMessage(props.intl, props.error)\r\n        : props.intl.formatMessage(messages.publishTemplateTotalRegionalCoreLimitError, {\r\n            requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={props.labId} tenantId={props.currentTenantId}/>),\r\n        })}\r\n                </MessageBar>)}\r\n        </>);\r\n};\r\nexport const TemplateErrorBanner = injectIntl(TemplateErrorBannerInjected);\r\nconst TemplateErrorBannersInjected = (props) => {\r\n    const { labId, errors, clearError, loadError, publishExceedsCoresError, currentTenantId, clearLoadError, clearPublishExceedsCoresError, intl, } = props;\r\n    const msg = intl.formatMessage;\r\n    return (<>\r\n            {errors\r\n        .map((errors) => {\r\n        return errors.map((error, errorIndex) => (<TemplateErrorBanner labId={labId} currentTenantId={currentTenantId} key={`${error.id}-${error.failureOperation}`} error={error} clearError={() => clearError(error.id, errorIndex)}/>));\r\n    })\r\n        .toList()}\r\n            {loadError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearLoadError()}>\r\n                    {getErrorMessage(intl, loadError)}\r\n                </MessageBar>)}\r\n            {publishExceedsCoresError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearPublishExceedsCoresError()}>\r\n                    {msg(commonMessages.coreUsageExceedsErrorBannerMessage, {\r\n        requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={labId} tenantId={currentTenantId}/>),\r\n    })}\r\n                </MessageBar>)}\r\n        </>);\r\n};\r\nexport const TemplateErrorBanners = injectIntl(TemplateErrorBannersInjected);\r\nexport const PublishSuccessBanner = (props) => {\r\n    const { onDismiss } = props;\r\n    return (<MessageBar onDismiss={onDismiss} messageBarType={MessageBarType.success}>\r\n            <FormattedMessage id=\"TemplateSuccessfulPublish\" defaultMessage=\"The template was successfully published! It is now available to users.\" description=\"Text in banner to indicate the publish was successful.\"/>\r\n        </MessageBar>);\r\n};\r\nconst GpuDriverBannerInjected = (props) => {\r\n    const { isWindows, message, linkText } = props;\r\n    const url = isWindows ? 'https://aka.ms/azlabs-gpu-windows' : 'https://aka.ms/azlabs-gpu-linux';\r\n    return (<MessageBar {...props}>\r\n            {props.intl.formatMessage(message)}\r\n            <Link href={url} target=\"_blank\">\r\n                {props.intl.formatMessage(linkText)}\r\n            </Link>\r\n        </MessageBar>);\r\n};\r\nexport const GpuDriverBanner = injectIntl(GpuDriverBannerInjected);\r\n","import * as React from 'react';\r\nimport { Dialog, DialogFooter, DialogType } from '@fluentui/react';\r\nimport { FormattedMessage, injectIntl, defineMessages } from 'react-intl';\r\nimport { getRdpConnectData } from '../common/connect-to-vm/connect-utilities';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { createAndDownloadFile } from '../utils/files';\r\nimport './template.css';\r\nconst messages = defineMessages({\r\n    connectToTemplateTitle: {\r\n        id: 'ConnectToTemplateTitle',\r\n        defaultMessage: 'Connect to template',\r\n        description: 'Title for customize template dialog',\r\n    },\r\n    connectTemplateButtonLabel: {\r\n        id: 'ConnectTemplateButtonLabel',\r\n        defaultMessage: 'Connect',\r\n        description: 'Label on button to connect to the template',\r\n    },\r\n});\r\nconst CustomizeMessage = () => {\r\n    return (<FormattedMessage id=\"CustomizeTemplateForWindowsMessage\" defaultMessage=\"Connecting to a template will download an RDP file. Open this file and enter your credentials to connect to the virtual machine.\" description=\"Text to explain how to connect to the template in the customize template dialog\"/>);\r\n};\r\nexport const areNetworkDetailsLoaded = (template) => template.rdpAuthority || template.rdpInBrowserUrl || template.sshAuthority || template.sshInBrowserUrl;\r\nexport const constructAndDownloadRdpFile = (template) => {\r\n    const { rdpAuthority, isWindows, username, title } = template;\r\n    const { fileName, fileContent } = getRdpConnectData(rdpAuthority, isWindows, username, title);\r\n    createAndDownloadFile(fileName, fileContent);\r\n};\r\nconst CustomizeTemplateDialogInjected = (props) => {\r\n    const { template, getTemplateWithExpand, onDismiss } = props;\r\n    const [isLoadingNetworkDetails, setIsLoadingNetworkDetails] = React.useState(false);\r\n    const connectToTemplateTitle = props.intl.formatMessage(messages.connectToTemplateTitle);\r\n    const connectButtonLabel = props.intl.formatMessage(messages.connectTemplateButtonLabel);\r\n    const loadNetworkDetails = () => {\r\n        if (areNetworkDetailsLoaded(template)) {\r\n            constructAndDownloadRdpFile(template);\r\n            onDismiss();\r\n        }\r\n        else {\r\n            getTemplateWithExpand(template.id, true);\r\n            setIsLoadingNetworkDetails(true);\r\n        }\r\n    };\r\n    React.useEffect(() => {\r\n        if (isLoadingNetworkDetails && areNetworkDetailsLoaded(template)) {\r\n            setIsLoadingNetworkDetails(false);\r\n            constructAndDownloadRdpFile(template);\r\n            onDismiss();\r\n        }\r\n    }, [template]);\r\n    return (<Dialog onDismiss={onDismiss} hidden={false} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: connectToTemplateTitle,\r\n        styles: { title: { fontWeight: 600, textAlign: 'center', paddingTop: '58px' } },\r\n    }} modalProps={{\r\n        onDismissed: onDismiss,\r\n        isBlocking: false,\r\n        styles: {\r\n            main: {\r\n                boxShadow: '0px 4.8px 14.4px rgba(0, 0, 0, 0.18), 0px 25.6px 57.6px rgba(0, 0, 0, 0.22)',\r\n                borderRadius: '2px',\r\n                textAlign: 'center',\r\n                fontSize: '20px',\r\n                paddingRight: '30px',\r\n                paddingLeft: '30px',\r\n            },\r\n        },\r\n    }} minWidth={730}>\r\n            <CustomizeMessage />\r\n            <DialogFooter styles={{ actions: { marginTop: '58px' } }}>\r\n                <SubmitButton styles={{ root: { width: '160px', height: '32px' } }} buttonText={connectButtonLabel} ariaLabel={connectButtonLabel} isSubmitting={isLoadingNetworkDetails} onClick={() => {\r\n        loadNetworkDetails();\r\n    }}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const CustomizeTemplateDialog = injectIntl(CustomizeTemplateDialogInjected);\r\nexport default CustomizeTemplateDialog;\r\n","import { CommandBar, CommandBarButton, DirectionalHint, Icon, Stack, TooltipHost, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport { getLabCapacity, isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport { getConnectionContextMenuItems } from '../common/selectors/vm-connect';\r\nimport SubmitButton from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport { ConnectionType } from '../data/models/environment-common';\r\nimport commonMessages from '../language/common-messages';\r\nimport { CoreQuotaStatus, determineVCurrentOrVNextLabRemainingVms, determineVCurrentQuotaStatus, } from '../redux/selectors/core-limit-selectors';\r\nimport { areNetworkDetailsLoaded, constructAndDownloadRdpFile } from './customize-dialog';\r\nimport templateMessages from './template-messages';\r\nimport { isSharedGalleryValid } from './template-selectors';\r\nimport './template.css';\r\nconst messages = defineMessages({\r\n    stopTemplate: {\r\n        id: 'StopTemplate',\r\n        defaultMessage: 'Stop template',\r\n        description: 'Text on command bar button to stop the template.',\r\n    },\r\n    startTemplate: {\r\n        id: 'StartTemplate',\r\n        defaultMessage: 'Start template',\r\n        description: 'Text on command bar button to start the template.',\r\n    },\r\n    connectToTemplate: {\r\n        id: 'ConnectToTemplate',\r\n        defaultMessage: 'Connect to template',\r\n        description: 'Text on command bar button to connect to the template.',\r\n    },\r\n    exportImageDisabledMessage: {\r\n        id: 'ExportImageDisabledMessage',\r\n        defaultMessage: 'There is no valid shared gallery attached to the lab account or lab plan. Contact your Lab Services administrator to enable saving images.',\r\n        description: 'Text on disabled command bar button for exporting image explaining why it is disabled.',\r\n    },\r\n    reimageTemplate: {\r\n        id: 'ReimageTemplate',\r\n        defaultMessage: 'Reimage template',\r\n        description: 'Text on command bar button to reimage the template.',\r\n    }\r\n});\r\nconst showConnectionData = (showSshConnectDialog, template, connectionType) => {\r\n    switch (connectionType) {\r\n        case ConnectionType.Rdp:\r\n            constructAndDownloadRdpFile(template);\r\n            break;\r\n        case ConnectionType.RdpInBrowser:\r\n            window.open(template.rdpInBrowserUrl, `rdp-${template.title}`); // eslint-disable-line security/detect-non-literal-fs-filename\r\n            break;\r\n        case ConnectionType.Ssh:\r\n            showSshConnectDialog();\r\n            break;\r\n        case ConnectionType.SshInBrowser:\r\n            window.open(template.sshInBrowserUrl, `ssh-${template.title}`); // eslint-disable-line security/detect-non-literal-fs-filename\r\n            break;\r\n        default:\r\n            break;\r\n    }\r\n};\r\nexport const TemplateCommandBarInjected = (props) => {\r\n    const { template, sharedGallery, coreQuotaData, lab, shouldDisableLabUpdate, labPlanSharedGalleryId, onStop, onStart, onOpenResetPasswordDialog, onOpenCustomizeWarningDialog, onOpenPublishDialog, onOpenExportSigDialog, onShowRdpInfoDialog, showSshConnectDialog, getTemplateWithExpand, onOpenTroubleshootDialog, onReimageTemplateDialog, isBastionEnabled, isReadOnly, isGroupSyncModeEnabled, intl, navigationItems, } = props;\r\n    const { primaryCommandBarStyles, secondaryCommandBarStyles } = getCustomTheme();\r\n    if (isReadOnly) {\r\n        return (<CommandBar styles={navigationItems ? primaryCommandBarStyles : secondaryCommandBarStyles} items={[]} farItems={navigationItems}/>);\r\n    }\r\n    const { isSaving, isCreating, isStarting, isStopping, isResettingPassword, isScaling, isPublishing, isRunning, isUploadingImage, isRedeploying, isReimaging, isSyncing, } = template;\r\n    const { formatMessage: msg } = intl;\r\n    const stop = msg(messages.stopTemplate);\r\n    const customize = msg(messages.startTemplate);\r\n    const connect = msg(messages.connectToTemplate);\r\n    const publish = msg(templateMessages.publishTemplate);\r\n    const resetPassword = msg(commonMessages.resetPassword);\r\n    const exportToSig = msg(templateMessages.exportToSharedImageGallery);\r\n    const exportDisabledMessage = msg(messages.exportImageDisabledMessage);\r\n    const troubleshoot = msg(commonMessages.troubleshoot);\r\n    const reimage = msg(messages.reimageTemplate);\r\n    const disabled = isCreating || isStarting || isStopping || isResettingPassword || isScaling || isPublishing || !!isRedeploying || isReimaging;\r\n    const maxUsersInLab = getLabCapacity(lab);\r\n    const isVNext = isVNextLab(lab?.id);\r\n    const quotaStatus = !isVNext ? determineVCurrentQuotaStatus(coreQuotaData) : undefined;\r\n    const remainingVmsInSubscription = determineVCurrentOrVNextLabRemainingVms(isVNext, template.isGpu, template.cores, coreQuotaData, getLabCapacity(lab));\r\n    const isDisabledDueToCoreQuota = quotaStatus === CoreQuotaStatus.Restricted ||\r\n        (!template.isPublished && quotaStatus === CoreQuotaStatus.QuotaExceeded) ||\r\n        (!template.isPublished && remainingVmsInSubscription === 0);\r\n    const isDisabledDueToUsersExceededRemainingVms = isGroupSyncModeEnabled &&\r\n        maxUsersInLab !== undefined &&\r\n        remainingVmsInSubscription !== undefined &&\r\n        maxUsersInLab > remainingVmsInSubscription;\r\n    const [isLoadingNetworkDetails, setIsLoadingNetworkDetails] = React.useState(false);\r\n    const [connectionType, setConnectionType] = React.useState(ConnectionType.Rdp);\r\n    const isGalleryValid = !isVNext ? isSharedGalleryValid(sharedGallery) : !!labPlanSharedGalleryId;\r\n    const isTeamsIntegrationEnabled = !!navigationItems;\r\n    React.useEffect(() => {\r\n        if (isLoadingNetworkDetails && areNetworkDetailsLoaded(template)) {\r\n            setIsLoadingNetworkDetails(false);\r\n            showConnectionData(showSshConnectDialog, template, connectionType);\r\n        }\r\n    }, [template]);\r\n    const handleLoadingAndShowingConnectionInfo = (connectionType) => {\r\n        if (!isVNext && !areNetworkDetailsLoaded(template)) {\r\n            setConnectionType(connectionType);\r\n            setIsLoadingNetworkDetails(true);\r\n            getTemplateWithExpand();\r\n        }\r\n        else {\r\n            showConnectionData(showSshConnectDialog, template, connectionType);\r\n        }\r\n    };\r\n    const startMenuItem = {\r\n        key: 'start',\r\n        ariaLabel: customize,\r\n        text: customize,\r\n        disabled,\r\n        iconProps: { iconName: 'Play' },\r\n        onClick: onStart,\r\n    };\r\n    const reimageTemplateMenuItem = {\r\n        key: 'reimage',\r\n        ariaLabel: reimage,\r\n        text: reimage,\r\n        disabled,\r\n        iconProps: { iconName: 'Refresh' },\r\n        onClick: onReimageTemplateDialog,\r\n    };\r\n    const editMenuItem = {\r\n        key: 'customize',\r\n        ariaLabel: customize,\r\n        text: customize,\r\n        disabled,\r\n        iconProps: { iconName: 'Play' },\r\n        onClick: onOpenCustomizeWarningDialog,\r\n    };\r\n    let connectMenuItem;\r\n    if (isLoadingNetworkDetails) {\r\n        connectMenuItem = {\r\n            key: 'connecting',\r\n            commandBarButtonAs: () => (<SubmitButton spinnerStyles={{ root: { marginLeft: 4, marginRight: 8 } }} styles={{ root: { height: 'inherit', paddingLeft: '4px', paddingRight: '8px' } }} isSubmitting={true} buttonText={connect}/>),\r\n        };\r\n    }\r\n    else {\r\n        const connectionTypes = template.connectionTypes.filter((type) => isBastionEnabled || (type !== ConnectionType.RdpInBrowser && type !== ConnectionType.SshInBrowser));\r\n        const canConnect = !(isScaling || isPublishing || isReimaging);\r\n        const isRdpConnectionInTeams = isTeamsIntegrationEnabled && template.connectionTypes.indexOf(ConnectionType.Rdp) > -1;\r\n        connectMenuItem = {\r\n            key: 'connect',\r\n            ariaLabel: connect,\r\n            text: connect,\r\n            disabled: !canConnect,\r\n            iconProps: { iconName: 'ThisPC' },\r\n            onRenderMenuIcon: () => <></>,\r\n            onClick: connectionTypes.length === 1 && !isRdpConnectionInTeams\r\n                ? () => handleLoadingAndShowingConnectionInfo(connectionTypes[0])\r\n                : undefined,\r\n        };\r\n        if (connectionTypes.length > 1 || isRdpConnectionInTeams) {\r\n            const items = getConnectionContextMenuItems(canConnect, template, connectionTypes, (_, type) => handleLoadingAndShowingConnectionInfo(type), intl, isTeamsIntegrationEnabled);\r\n            connectMenuItem.subMenuProps = { items, isSubMenu: true };\r\n        }\r\n    }\r\n    const stopMenuItem = {\r\n        key: 'stop',\r\n        text: stop,\r\n        ariaLabel: stop,\r\n        disabled,\r\n        iconProps: { iconName: 'Stop' },\r\n        onClick: onStop,\r\n    };\r\n    const passwordMenuItem = {\r\n        key: 'password',\r\n        iconProps: { iconName: 'Permissions' },\r\n        text: resetPassword,\r\n        disabled,\r\n        ariaLabel: resetPassword,\r\n        onClick: onOpenResetPasswordDialog,\r\n    };\r\n    const separator = {\r\n        key: 'separator',\r\n        onRender: () => <div className=\"command-bar-separator\"/>,\r\n    };\r\n    const publishMenuItem = {\r\n        key: 'publish',\r\n        ariaLabel: publish,\r\n        text: publish,\r\n        disabled: disabled ||\r\n            isDisabledDueToCoreQuota ||\r\n            isDisabledDueToUsersExceededRemainingVms ||\r\n            !!shouldDisableLabUpdate,\r\n        iconProps: { iconName: 'Upload' },\r\n        onClick: onOpenPublishDialog,\r\n    };\r\n    const isExportMenuItemDisabled = isCreating ||\r\n        isStarting ||\r\n        isStopping ||\r\n        isResettingPassword ||\r\n        isScaling ||\r\n        isReimaging ||\r\n        isUploadingImage ||\r\n        !isGalleryValid;\r\n    const exportMenuItem = {\r\n        key: 'export',\r\n        disabled: isExportMenuItemDisabled,\r\n        onRender: () => (<TooltipHost content={!isGalleryValid ? exportDisabledMessage : ''} directionalHint={DirectionalHint.bottomCenter} styles={{ root: { display: 'inherit' } }}>\r\n                <CommandBarButton iconProps={{ iconName: 'Export' }} styles={{ root: { minHeight: '36px' }, label: { whiteSpace: 'nowrap' } }} text={exportToSig} disabled={isExportMenuItemDisabled} ariaLabel={exportToSig} onClick={onOpenExportSigDialog}/>\r\n            </TooltipHost>),\r\n    };\r\n    const noTemplateItem = {\r\n        key: 'noTemplate',\r\n        onRender: () => (<Stack horizontal verticalFill verticalAlign=\"center\" styles={{ root: { minHeight: '36px', minWidth: '250px' } }}>\r\n                <Stack.Item>\r\n                    <Icon iconName=\"Info\" styles={{ root: { marginRight: 5, paddingTop: 3 } }}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <FormattedMessage id=\"NoTemplateMessage\" defaultMessage=\"Template customization has been disabled for this lab.\" description=\"Message shown on various pages when template customization has been disabled for the current lab.\"/>\r\n                </Stack.Item>\r\n            </Stack>),\r\n    };\r\n    const items = !template.hasTemplateVm\r\n        ? [publishMenuItem, separator, noTemplateItem]\r\n        : isRunning\r\n            ? [connectMenuItem, stopMenuItem, passwordMenuItem, separator, publishMenuItem, exportMenuItem]\r\n            : isVNext\r\n                ? [template.isPublished ? editMenuItem : startMenuItem, reimageTemplateMenuItem, separator, publishMenuItem, exportMenuItem]\r\n                : [\r\n                    template.isPublished ? editMenuItem : startMenuItem,\r\n                    passwordMenuItem,\r\n                    separator,\r\n                    publishMenuItem,\r\n                    exportMenuItem,\r\n                ];\r\n    const troubleshootMenuItem = {\r\n        key: 'troubleshoot',\r\n        iconProps: { iconName: 'Repair' },\r\n        text: troubleshoot,\r\n        disabled: !!shouldDisableLabUpdate,\r\n        ariaLabel: troubleshoot,\r\n        onClick: onOpenTroubleshootDialog,\r\n    };\r\n    const isRedeployDisabled = isSaving ||\r\n        isCreating ||\r\n        isStarting ||\r\n        isStopping ||\r\n        isResettingPassword ||\r\n        isScaling ||\r\n        isReimaging ||\r\n        isUploadingImage ||\r\n        isRedeploying ||\r\n        isSyncing;\r\n    if (isVNextLab(lab?.id) && !isRedeployDisabled && template.hasTemplateVm && !template.isPublishing) {\r\n        items.push(troubleshootMenuItem);\r\n    }\r\n    const overflowItems = [];\r\n    if (template.rdpAuthority) {\r\n        overflowItems.push({\r\n            key: 'rdpInfo',\r\n            text: msg(commonMessages.showRdpInfoTitle),\r\n            iconProps: { iconName: 'ClipboardList' },\r\n            onClick: onShowRdpInfoDialog,\r\n        });\r\n    }\r\n    const overflowButtonProps = {\r\n        title: msg(commonMessages.moreActionsMenu),\r\n    };\r\n    return (<CommandBar styles={navigationItems ? primaryCommandBarStyles : secondaryCommandBarStyles} items={items} overflowItems={overflowItems} overflowButtonProps={overflowButtonProps} farItems={navigationItems}/>);\r\n};\r\nexport const TemplateCommandBar = injectIntl(TemplateCommandBarInjected);\r\nexport default TemplateCommandBar;\r\n","import { FormattedMessage } from 'react-intl';\r\nimport * as React from 'react';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport { ProvisioningState } from '../utils/provisioning-state';\r\nexport const TemplateErrorPage = (props) => {\r\n    const { template } = props;\r\n    let messageDetails = <></>;\r\n    if (!template) {\r\n        messageDetails = (<FormattedMessage id=\"TemplateLoadErrorDetails\" defaultMessage=\"A template has not been created for this lab. Please try to create a new lab or contact your Lab Services administator for assistance.\" description=\"Error shown on template page when there is no template created for the lab.\"/>);\r\n    }\r\n    else if (template.provisioningState === ProvisioningState.Deleting) {\r\n        messageDetails = (<FormattedMessage id=\"TemplateDeletingErrorDetails\" defaultMessage=\"Your template is deleting. Please try to create a new lab or contact your Lab Services administator for assistance.\" description=\"Error shown on template page when the template is deleting.\"/>);\r\n    }\r\n    else if (template.provisioningState === ProvisioningState.Failed) {\r\n        messageDetails = (<FormattedMessage id=\"TemplateLoadFailedErrorDetails\" defaultMessage=\"Your template is in a failed state. Please try to create a new lab or contact your Lab Services administator for assistance.\" description=\"Error shown on template page when the template is in a failed provisioning state.\"/>);\r\n    }\r\n    return (<FullPageMessage image=\"error-general\" message={<FormattedMessage id=\"TemplateLoadError\" defaultMessage=\"Cannot load template\" description=\"Error shown on template page when the template is in a failed state.\"/>} messageDetails={messageDetails}/>);\r\n};\r\n","import { Icon, Stack, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, FormattedNumber, injectIntl } from 'react-intl';\r\nimport Constants, { DefaultCurrencyCode } from '../utils/constants';\r\nimport { validateLength } from '../utils/validators';\r\nimport { LabSizeInfo } from '../common/lab-size-info';\r\nimport { getLocalizedLabSkuDisplayName } from '../common/selectors/sku-selectors';\r\nimport './template.css';\r\nconst messages = defineMessages({\r\n    templateTitle: {\r\n        id: 'TemplateTitle',\r\n        defaultMessage: 'Title',\r\n        description: 'Text above text field to indicate the template title.',\r\n    },\r\n    templateDescription: {\r\n        id: 'TemplateDescription',\r\n        defaultMessage: 'Description',\r\n        description: 'Text above text field to indicate the template description.',\r\n    },\r\n    templateDescriptionPlaceholder: {\r\n        id: 'TemplateDescriptionPlaceholder',\r\n        defaultMessage: 'Enter your description of the virtual machine for the class. The title and this description will be visible to students.',\r\n        description: 'Placeholder for the description text field',\r\n    },\r\n    templateTitleTooLongValidationMessage: {\r\n        id: 'TemplateTitleTooLongValidationMessage',\r\n        defaultMessage: 'Titles cannot be longer than 255 characters.',\r\n        description: 'Validation message for title being too long',\r\n    },\r\n    templateDescriptionTooLongValidationMessage: {\r\n        id: 'TemplateDescriptionTooLongValidationMessage',\r\n        defaultMessage: 'Descriptions cannot be longer than 500 characters.',\r\n        description: 'Validation message for description being too long',\r\n    },\r\n});\r\nconst TemplateTitleFieldInjected = (props) => {\r\n    const { template, templateTitle, setTemplateTitle, isTitleValid, isReadOnly, setIsTitleValid, updateTitleOrDescription, } = props;\r\n    const { isSaving, id, title, description } = template;\r\n    const titleLabel = props.intl.formatMessage(messages.templateTitle);\r\n    const titleLengthValidationMessage = props.intl.formatMessage(messages.templateTitleTooLongValidationMessage);\r\n    return (<TextField label={titleLabel} ariaLabel={titleLabel} disabled={isSaving || isReadOnly} value={templateTitle || ''} onChange={(_, value) => setTemplateTitle(value)} onGetErrorMessage={(value) => {\r\n        const result = validateLength(value, Constants.TemplateTitleMaxLength, titleLengthValidationMessage);\r\n        setIsTitleValid(!result);\r\n        return result || '';\r\n    }} onBlur={(_e) => {\r\n        if (isTitleValid && title !== templateTitle) {\r\n            // id is undefined for vNext and is not needed for update API call\r\n            updateTitleOrDescription(id ?? '', templateTitle, description);\r\n        }\r\n    }}/>);\r\n};\r\nexport const TemplateTitleField = injectIntl(TemplateTitleFieldInjected);\r\nconst TemplateDescriptionFieldInjected = (props) => {\r\n    const { template, templateDescription, setTemplateDescription, isDescriptionValid, setIsDescriptionValid, updateTitleOrDescription, isReadOnly, } = props;\r\n    const { isSaving, id, title, description } = template;\r\n    const descriptionLabel = props.intl.formatMessage(messages.templateDescription);\r\n    const descriptionPlaceholder = props.intl.formatMessage(messages.templateDescriptionPlaceholder);\r\n    const descriptionLengthValidationMessage = props.intl.formatMessage(messages.templateDescriptionTooLongValidationMessage);\r\n    return (<TextField styles={{\r\n        subComponentStyles: { label: { root: { marginTop: '10px' } } },\r\n        field: {\r\n            height: '97px',\r\n        },\r\n    }} label={descriptionLabel} ariaLabel={descriptionLabel} disabled={isSaving || isReadOnly} value={templateDescription || ''} multiline resizable={false} placeholder={descriptionPlaceholder} onChange={(_, value) => setTemplateDescription(value)} onGetErrorMessage={(value) => {\r\n        const result = validateLength(value, Constants.TemplateDescriptionMaxLength, descriptionLengthValidationMessage);\r\n        setIsDescriptionValid(!result);\r\n        return result || '';\r\n    }} onBlur={(_e) => {\r\n        if (isDescriptionValid && description !== templateDescription) {\r\n            // id is undefined for vNext and is not needed for update API call\r\n            updateTitleOrDescription(id ?? '', title, templateDescription);\r\n        }\r\n    }}/>);\r\n};\r\nexport const TemplateDescriptionField = injectIntl(TemplateDescriptionFieldInjected);\r\nconst TemplateOsInfoInjected = (props) => {\r\n    const { isWindows } = props;\r\n    return (<Icon id=\"template-page-os-type-icon\" iconName={isWindows ? 'WindowsLogo' : 'LinuxLogo32'} styles={{\r\n        root: {\r\n            fontSize: '28px',\r\n            lineHeight: '16px',\r\n            color: '#8A8886',\r\n            marginTop: '12px',\r\n        },\r\n    }}/>);\r\n};\r\nexport const TemplateOsInfo = injectIntl(TemplateOsInfoInjected);\r\nconst TemplateSizeInfoInjected = (props) => {\r\n    const { template, intl } = props;\r\n    const { image, cores, memorySize, price, privateIpAddress, currency, size: sizeName, storageSize, storageType, labSkuInfo, } = template;\r\n    const formattedPrice = price !== null && price !== undefined ? (<FormattedNumber value={price} style=\"currency\" currency={currency || DefaultCurrencyCode}/>) : null;\r\n    let hasSizeInfo, skuDisplayName;\r\n    if (!labSkuInfo) {\r\n        // vCurrent\r\n        hasSizeInfo = cores !== undefined && memorySize !== undefined && sizeName !== undefined;\r\n        skuDisplayName = sizeName;\r\n    }\r\n    else {\r\n        // vNext\r\n        hasSizeInfo = cores !== undefined && memorySize !== undefined && labSkuInfo.skuFamilyName !== undefined;\r\n        skuDisplayName = getLocalizedLabSkuDisplayName(labSkuInfo, intl);\r\n    }\r\n    return (<Stack>\r\n            <Stack.Item>\r\n                <div className=\"template__image\">{image}</div>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <div id=\"template-page-size-info\">\r\n                    {hasSizeInfo && (<>\r\n                            {skuDisplayName}\r\n                            <span className=\"template__size-divider\">|</span>\r\n                            <LabSizeInfo cores={cores} memorySize={memorySize} storageSize={storageSize} storageType={storageType}/>\r\n                        </>)}\r\n                </div>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <div id=\"template-page-price-info\">\r\n                    {formattedPrice && (<FormattedMessage id=\"TemplatePrice\" defaultMessage=\"{price} per hour\" description=\"Price of running the template, per hour.  {price} is the cost per hour in USD.\" values={{\r\n        price: formattedPrice,\r\n    }}/>)}\r\n                    {formattedPrice && privateIpAddress && <span className=\"template__size-divider\">|</span>}\r\n                    {privateIpAddress && (<FormattedMessage id=\"TemplatePrivateIpAddress\" defaultMessage=\"Private IP address: {privateIpAddress}\" description=\"Private IP address of the template VM.\" values={{\r\n        privateIpAddress,\r\n    }}/>)}\r\n                </div>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const TemplateSizeInfo = injectIntl(TemplateSizeInfoInjected);\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { Announced, Link, MessageBarType, Stack, CommandBar, MessageBar } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport RdpInfoDialog from '../common/connect-to-vm/rdp-info-dialog';\r\nimport ConnectToVmDialog from '../common/connect-to-vm/ssh-connect-dialog';\r\nimport { LoadingContainer } from '../common/loading-section';\r\nimport ResetPasswordDialog from '../common/reset-password-dialog/reset-password-dialog';\r\nimport TroubleshootDialog from '../common/troubleshoot-dialog/troubleshoot-dialog';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport VmPowerState from '../common/vm/vm-power-state';\r\nimport { LabErrorBanner } from '../lab/lab-error-banner';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport { Urls } from '../utils/constants';\r\nimport { isHealthyState } from '../utils/provisioning-state';\r\nimport DismissGpuBannerDialog from './dismiss-gpu-banner-dialog';\r\nimport ExportSigDialog from './export-sig-dialog';\r\nimport OperationIndicator from './operation-indicator';\r\nimport PublishTemplateDialog from './publish-template-dialog';\r\nimport QuotaBanner from './quota-banners';\r\nimport StartWarningTemplateDialog from './start-warning-dialog';\r\nimport { GpuDriverBanner, PublishSuccessBanner, TemplateErrorBanners } from './template-banners';\r\nimport TemplateCommandBar from './template-command-bar';\r\nimport { TemplateErrorPage } from './template-error-page';\r\nimport { TemplateDescriptionField, TemplateOsInfo, TemplateSizeInfo, TemplateTitleField } from './template-fields';\r\nimport templateMessages from './template-messages';\r\nimport { getTemplateVmState } from './template-selectors';\r\nimport { VmState } from '../data/models/environment-common';\r\nimport ResetVmsDialog from '../vm-list/reset-vms-dialog';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport { OperationStatus, OperationType } from '../data/models/vnext/operation';\r\nimport { messages as VmListMessages } from '../vm-list/vm-list-messages';\r\nimport { mapResourceErrorToOperation } from '../data/models/vnext/operation';\r\nimport './template.css';\r\nexport const Template = (props) => {\r\n    const { templateViewModel, getTemplateWithExpand, publishTemplate, updateTitleOrDescription, resetPassword, startTemplate, stopTemplate, reimageTemplate, createSharedImage, updateSharedImage, clearError, clearLoadError, clearLabUpdateError, clearPublishExceedsCoresError, dismissExportStartedMessageBar, redeployTemplate, navigationItems, } = props;\r\n    const { template, lab, dismissedGpuBanner, sharedGallery, coreQuotaData, isReadOnly, currentTenantId, sharedImages, isDismissing, isGroupSyncModeEnabled, groupName, errors, labUpdateError, publishExceedsCoresError, isSharedImagesLoading, isBastionEnabled, locale, isLoading, loadError, shouldDisableLabUpdate, labPlanSharedGalleryId, shouldShowExportStartedMessage, exportedImageName, vNextPublishError, } = templateViewModel;\r\n    const intl = useIntl();\r\n    const [templateTitle, setTemplateTitle] = React.useState(template ? template.title : '');\r\n    const [templateDescription, setTemplateDescription] = React.useState(template ? template.description : '');\r\n    const [showResetPassword, setShowResetPassword] = React.useState(false);\r\n    const [showExportSig, setShowExportSig] = React.useState(false);\r\n    const [showPublish, setShowPublish] = React.useState(false);\r\n    const [showCustomizeWarning, setShowCustomizeWarning] = React.useState(false);\r\n    const [showSshConnectDialog, setShowSshConnectDialog] = React.useState(false);\r\n    const [showPublishSuccessBanner, setShowPublishSuccessBanner] = React.useState(false);\r\n    const [isTitleValid, setIsTitleValid] = React.useState(true);\r\n    const [isDescriptionValid, setIsDescriptionValid] = React.useState(true);\r\n    const [showDismissDialog, setShowDismissDialog] = React.useState(false);\r\n    const [showRdpInfoDialog, setShowRdpInfoDialog] = React.useState(false);\r\n    const [showTroubleshootDialog, setShowTroubleshoot] = React.useState(false);\r\n    const [showReimageTemplateDialog, setShowReimageTemplateDialog] = React.useState(false);\r\n    const isReimaging = templateViewModel.template?.isReimaging;\r\n    const [announce, setAnnounce] = React.useState(null);\r\n    const { pageTitleStyle, secondaryBackgroundColor, primaryCommandBarStyles, messageBarStyles } = getCustomTheme();\r\n    const vmOperation = templateViewModel.operations?.find((o) => o.ResourceId?.id == template?.id) || mapResourceErrorToOperation(templateViewModel.resourceOperationError);\r\n    const vmOperationStatus = vmOperation?.status;\r\n    const vmOperationType = vmOperation?.operationType || OperationType.Unknown;\r\n    const VmOperationError = templateViewModel.resourceOperationError;\r\n    const templateVirtualMachine = intl.formatMessage(templateMessages.templatePageTitle);\r\n    React.useEffect(() => {\r\n        if (template && !template.isSaving) {\r\n            setTemplateTitle(template.title);\r\n            setTemplateDescription(template.description);\r\n        }\r\n    }, [template]);\r\n    const previousTemplate = usePrevious(template);\r\n    React.useEffect(() => {\r\n        if (template &&\r\n            previousTemplate &&\r\n            previousTemplate.isPublishing &&\r\n            !template.isPublishing &&\r\n            template.isPublished &&\r\n            !vNextPublishError) {\r\n            setShowPublishSuccessBanner(true);\r\n        }\r\n    }, [template]);\r\n    if (isLoading) {\r\n        return (<div id=\"template-container\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                <div id=\"template-content\">\r\n                    {navigationItems && (<div id=\"template-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <LoadingContainer />\r\n                </div>\r\n            </div>);\r\n    }\r\n    const isVNext = isVNextLab(lab?.id);\r\n    if (!template ||\r\n        ((!isVNext || (isVNext && template.hasTemplateVm)) && !isHealthyState(template.provisioningState))) {\r\n        return (<div id=\"template-container\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                <div id=\"template-content\">\r\n                    {navigationItems && (<div id=\"template-header\">\r\n                            <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                        </div>)}\r\n                    <TemplateErrorPage template={template}/>\r\n                </div>\r\n            </div>);\r\n    }\r\n    const onStartTemplate = () => {\r\n        if (template.id) {\r\n            if (!template.isPublished || template.hasEdits) {\r\n                const templateStartAnnounce = (<Announced message={intl.formatMessage(commonMessages.startingState)} aria-live=\"assertive\"/>);\r\n                setAnnounce(templateStartAnnounce);\r\n                startTemplate(template.id);\r\n            }\r\n            else {\r\n                setShowCustomizeWarning(true);\r\n            }\r\n        }\r\n    };\r\n    const onConfirmedStartTemplate = () => {\r\n        if (template.id) {\r\n            const templateStartAnnounce = (<Announced message={intl.formatMessage(commonMessages.startingState)} aria-live=\"assertive\"/>);\r\n            setAnnounce(templateStartAnnounce);\r\n            startTemplate(template.id);\r\n        }\r\n    };\r\n    const onStopTemplate = () => {\r\n        if (template.id) {\r\n            const templateStopAnnounce = (<Announced message={intl.formatMessage(commonMessages.stoppingState)} aria-live=\"assertive\"/>);\r\n            setAnnounce(templateStopAnnounce);\r\n            stopTemplate(template.id);\r\n        }\r\n    };\r\n    const onRedeployTemplate = () => {\r\n        if (template.id) {\r\n            const templateRedeployAnnounce = (<Announced message={intl.formatMessage(commonMessages.redeployingState)} aria-live=\"assertive\"/>);\r\n            setAnnounce(templateRedeployAnnounce);\r\n            redeployTemplate(template.id);\r\n        }\r\n    };\r\n    const onReimageTemplate = () => {\r\n        if (template.id) {\r\n            const templateReimageAnnounce = (<Announced message={intl.formatMessage(commonMessages.reimagingState)} aria-live=\"assertive\"/>);\r\n            setAnnounce(templateReimageAnnounce);\r\n            setShowReimageTemplateDialog(false);\r\n            reimageTemplate(template.id);\r\n        }\r\n    };\r\n    let exportedImageLink = '';\r\n    if (labPlanSharedGalleryId) {\r\n        exportedImageLink = Urls.ExportedImageLink(currentTenantId, labPlanSharedGalleryId);\r\n        if (exportedImageName) {\r\n            exportedImageLink += `/${exportedImageName}/overview`;\r\n        }\r\n    }\r\n    return (<>\r\n            <div id=\"template-container\" style={{ backgroundColor: secondaryBackgroundColor }}>\r\n                <div id=\"template-content\">\r\n                    <div id=\"template-header\">\r\n                        <LabErrorBanner updateError={labUpdateError} clearUpdateError={clearLabUpdateError}/>\r\n                        {(errors.size > 0 || loadError || publishExceedsCoresError) && (<TemplateErrorBanners labId={lab?.id} errors={errors} loadError={loadError} publishExceedsCoresError={publishExceedsCoresError} clearError={clearError} clearLoadError={clearLoadError} clearPublishExceedsCoresError={clearPublishExceedsCoresError} currentTenantId={currentTenantId}/>)}\r\n                        {!!shouldShowExportStartedMessage && (<MessageBar dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)} onDismiss={dismissExportStartedMessageBar}>\r\n                                <FormattedMessage id=\"ExportImageStarted\" defaultMessage=\"Export has been started. You can track the progress in the <Link>Azure portal</Link>. It may take a few minutes for the resource to appear.\" description=\"Message shown when kicking off image exporting with link to Azure portal to see progress.\" values={{\r\n        Link: (chunks) => (<Link href={exportedImageLink} target=\"_blank\">\r\n                                                {chunks}\r\n                                            </Link>),\r\n    }}/>\r\n                            </MessageBar>)}\r\n                        {showPublishSuccessBanner && (<PublishSuccessBanner onDismiss={() => setShowPublishSuccessBanner(false)}/>)}\r\n                        {!dismissedGpuBanner && (<>\r\n                                {template.gpuDriverState == Ml.GpuDriverState.Failed && (<GpuDriverBanner onDismiss={!isReadOnly ? () => setShowDismissDialog(true) : undefined} messageBarType={MessageBarType.error} isWindows={template.isWindows} message={templateMessages.templateGpuDriverInstallationFailed} linkText={templateMessages.templateGpuDriverMoreInfo} styles={messageBarStyles}/>)}\r\n                                {template.gpuDriverState == Ml.GpuDriverState.Missing && (<GpuDriverBanner onDismiss={!isReadOnly ? () => setShowDismissDialog(true) : undefined} messageBarType={MessageBarType.warning} isWindows={template.isWindows} message={templateMessages.templateGpuDriverInstallationMissing} linkText={templateMessages.templateGpuDriverLearnMore} styles={messageBarStyles}/>)}\r\n                            </>)}\r\n                        <QuotaBanner lab={lab} template={template} coreQuotaData={coreQuotaData} currentTenantId={currentTenantId} isGroupSyncModeEnabled={isGroupSyncModeEnabled} styles={messageBarStyles}/>\r\n                        <TemplateCommandBar template={template} sharedGallery={sharedGallery} isBastionEnabled={isBastionEnabled} isReadOnly={isReadOnly} isGroupSyncModeEnabled={isGroupSyncModeEnabled} coreQuotaData={coreQuotaData} lab={lab} shouldDisableLabUpdate={shouldDisableLabUpdate} navigationItems={navigationItems} labPlanSharedGalleryId={labPlanSharedGalleryId} onStop={onStopTemplate} onStart={onConfirmedStartTemplate} onRedeploy={onRedeployTemplate} onOpenResetPasswordDialog={() => setShowResetPassword(true)} onOpenPublishDialog={() => setShowPublish(true)} onOpenExportSigDialog={() => setShowExportSig(true)} onOpenCustomizeWarningDialog={() => setShowCustomizeWarning(true)} onShowRdpInfoDialog={() => setShowRdpInfoDialog(true)} showSshConnectDialog={() => setShowSshConnectDialog(true)} getTemplateWithExpand={() => getTemplateWithExpand(template.id, true)} onOpenTroubleshootDialog={() => setShowTroubleshoot(true)} onReimageTemplateDialog={() => setShowReimageTemplateDialog(true)}/>\r\n                        <Stack>\r\n                            {vmOperationStatus && vmOperationStatus == OperationStatus.Failed && (<MessageBar messageBarType={MessageBarType.error}>\r\n                                <FormattedMessage id=\"VmOperationErrorBannerGenericMessageTemplate\" defaultMessage=\"Virtual machine {Operation} operation failed. Try {redeploying} the virtual machine. If the issue persists, consider {reimaging} it. For further assistance, submit a support request.\" description=\"Message displayed on a student VM card when the VM is under maintenance and can't be accessed.\" values={{\r\n        redeploying: (<Link onClick={() => setShowTroubleshoot(true)}>\r\n                                            <FormattedMessage id=\"VmOperationErrorBannerRedeployTemplate\" defaultMessage=\"redeploying\" description=\"clickable action for redeploying the VM in the error message.\"/>\r\n                                        </Link>),\r\n        reimaging: (<Link onClick={() => setShowReimageTemplateDialog(true)}>\r\n                                            <FormattedMessage id=\"VmOperationErrorBannerReimageTemplate\" defaultMessage='reimaging' description=\"clickable action for reimaging the VM in the error message.\"/>\r\n                                        </Link>),\r\n        Operation: vmOperationType === OperationType.StartOperation\r\n            ? intl.formatMessage(VmListMessages.StartOperation)\r\n            : vmOperationType === OperationType.StopOperation\r\n                ? intl.formatMessage(VmListMessages.StopOperation)\r\n                : vmOperationType === OperationType.ReimageOperation\r\n                    ? intl.formatMessage(VmListMessages.ReimageOperation)\r\n                    : vmOperationType === OperationType.RedeployOperation\r\n                        ? intl.formatMessage(VmListMessages.RedeployOperation)\r\n                        : '',\r\n    }}/>\r\n                                </MessageBar>)}\r\n                            {VmOperationError && VmOperationError.code == \"HeartbeatNotReceived\" && (<MessageBar messageBarType={MessageBarType.warning}>\r\n                                <FormattedMessage id=\"VmHeartbeatErrorTemplate\" defaultMessage=\"Your cloud virtual machine has become non-responsive and will be stopped automatically to avoid overbilling. You may want to refer to the {TroubleshootingGuide} to resolve the issue.\" description=\"The error message displayed on message bar for template virtual machine when VM heartbeat was not received.\" values={{\r\n        TroubleshootingGuide: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={\"https://learn.microsoft.com/en-us/azure/lab-services/troubleshoot-access-lab-vm\"}>\r\n                                                <FormattedMessage id=\"templateTroubleshootingGuideLink\" defaultMessage=\"troubleshooting guidelines\" description=\"a link to the vm issues troubleshooting guidelines page.\"/>\r\n                                        </Link>)\r\n    }}/>\r\n                                </MessageBar>)}\r\n                            </Stack>\r\n                        <Stack horizontal verticalAlign=\"center\" horizontalAlign=\"space-between\" styles={{ root: { maxWidth: '828px' } }}>\r\n                            <Stack.Item className=\"template__page-header\">\r\n                                <h1 style={pageTitleStyle}>{templateVirtualMachine}</h1>\r\n                            </Stack.Item>\r\n                            {template.hasTemplateVm && (<>\r\n                                    {announce}\r\n                                    <Stack.Item className=\"template__power-state-indicator--container\">\r\n                                        <VmPowerState vmState={template.isReimaging ? VmState.Reimaging : getTemplateVmState(template)} forceDisable={isReadOnly ||\r\n        template.isCreating ||\r\n        template.isResettingPassword ||\r\n        template.isScaling ||\r\n        template.isPublishing ||\r\n        template.isReimaging} onStart={onStartTemplate} onStop={onStopTemplate}/>\r\n                                    </Stack.Item>\r\n                                </>)}\r\n                        </Stack>   \r\n                    </div>\r\n                    <div id=\"template-body\" className=\"vertical-scrollable-content\">\r\n                        <div className=\"template__card-wrapper\">\r\n                            <div className=\"template__card ms-bgColor-white\">\r\n                                <Stack horizontal horizontalAlign=\"space-between\">\r\n                                    <Stack.Item>\r\n                                        <Stack horizontal tokens={{ childrenGap: '20px' }}>\r\n                                            <Stack.Item>\r\n                                                <TemplateOsInfo isWindows={template.isWindows}/>\r\n                                            </Stack.Item>\r\n                                            <Stack.Item>\r\n                                                <TemplateSizeInfo template={template}/>\r\n                                            </Stack.Item>\r\n                                        </Stack>\r\n                                    </Stack.Item>\r\n                                    <Stack.Item>\r\n                                        <OperationIndicator template={template} locale={locale} groupName={groupName}/>\r\n                                    </Stack.Item>\r\n                                </Stack>\r\n                                <div className=\"template__card-text-field-wrapper\">\r\n                                    <TemplateTitleField templateTitle={templateTitle} template={template} isTitleValid={isTitleValid} setTemplateTitle={setTemplateTitle} setIsTitleValid={setIsTitleValid} updateTitleOrDescription={updateTitleOrDescription} isReadOnly={isReadOnly || !!shouldDisableLabUpdate || !!isReimaging}/>\r\n                                    <TemplateDescriptionField templateDescription={templateDescription} template={template} isDescriptionValid={isDescriptionValid} setTemplateDescription={setTemplateDescription} setIsDescriptionValid={setIsDescriptionValid} updateTitleOrDescription={updateTitleOrDescription} isReadOnly={isReadOnly || !!shouldDisableLabUpdate || !!isReimaging}/>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            {showCustomizeWarning && (<StartWarningTemplateDialog startTemplate={onConfirmedStartTemplate} onDismiss={() => setShowCustomizeWarning(false)}/>)}\r\n            {showResetPassword && (<ResetPasswordDialog username={template.username} canShowNonLocalizedMessages={true} id={template && template.id} isResetting={true} isWindows={template.isWindows} onDismiss={() => setShowResetPassword(false)} onDismissed={() => setShowResetPassword(false)} onSubmit={(id, username, password) => resetPassword(id, username, password)}/>)}\r\n            {showExportSig && (<ExportSigDialog sharedImages={sharedImages} sharedImage={template.sharedImage} isLoading={isSharedImagesLoading} templateId={template && template.id} onDismiss={() => setShowExportSig(false)} onCreate={createSharedImage} onUpdate={updateSharedImage}/>)}\r\n            {showPublish && (<PublishTemplateDialog lab={lab} currentTenantId={currentTenantId} coreQuotaData={coreQuotaData} isGpu={template.isGpu} coresPerVm={template.cores} hasBeenPublished={template.isPublished} templateId={template.id} onDismiss={() => setShowPublish(false)} publishTemplate={publishTemplate} isGroupSyncModeEnabled={isGroupSyncModeEnabled} groupName={groupName}/>)}\r\n            {showSshConnectDialog && (<ConnectToVmDialog sshCommand={template.sshCommand} onDismiss={() => setShowSshConnectDialog(false)} onDismissed={() => setShowSshConnectDialog(false)}/>)}\r\n            {showDismissDialog && (<DismissGpuBannerDialog isSubmitting={isDismissing} onDismiss={() => setShowDismissDialog(false)} onSubmit={() => props.acknowledgeGpuDriverWarning()}/>)}\r\n            {showRdpInfoDialog && (<RdpInfoDialog rdpInfo={template.rdpAuthority ?? ''} onDismiss={() => setShowRdpInfoDialog(false)}/>)}\r\n            {showTroubleshootDialog && (<TroubleshootDialog onDismiss={() => setShowTroubleshoot(false)} onRedeploy={() => onRedeployTemplate()}/>)}\r\n\r\n            {showReimageTemplateDialog && (<ResetVmsDialog numberOfMachines={1} isStudentVM={false} onSubmit={() => onReimageTemplate()} onDismiss={() => setShowReimageTemplateDialog(false)}/>)}\r\n        </>);\r\n};\r\nexport default Template;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { routerActions } from 'connected-react-router/immutable';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport PageTitle from '../common/page/page-title';\r\nimport { LabUpdateOperation } from '../data/models/lab';\r\nimport { clearLabUpdateError, pollLabStop, publishVNextLab, updateLab, updateVNextLab, clearLabsError, } from '../redux/actions/lab/lab-action-creators';\r\nimport { createSharedImage, getSharedGallery, listSharedImages, updateSharedImage, } from '../redux/actions/shared-image/shared-image-action-creators';\r\nimport { clearError, clearLoadTemplateError as clearLoadError, clearPublishExceedsCoresError, getTemplate, pollTemplateStart, pollTemplateStop, publishTemplate, resetPassword, startTemplate, stopTemplate, updateTemplate, } from '../redux/actions/template/template-action-creators';\r\nimport { DefaultPollingInterval, FiveSecondInterval, OneMinuteInterval, ThirtySecondInterval, } from '../utils/constants';\r\nimport { ResourceId } from '../utils/resource-id';\r\nimport CreatingView from './creating-view';\r\nimport { Template } from './template';\r\nimport templateMessages from './template-messages';\r\nimport { getTemplateContainerModel } from './template-selectors';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport { getNavigationItems } from '../common/lab-nav-items';\r\nimport { listImages } from '../redux/actions/vnext/images/image-action-creators';\r\nimport { pollVirtualMachineStart, pollVirtualMachineStop, startEnvironments, stopEnvironments, resetEnvironments, clearLoadError as clearLoadVirtualMachinesError, clearGetError, clearStartErrors, clearStopErrors, clearResetPasswordError, dismissExportStartedMessageBar, clearExportError, redeployVirtualMachines, clearRedeployErrors, listEnvironments, } from '../redux/actions/environment/environment-action-creators';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nimport { FailureOperation } from '../data/ml-client-error';\r\nimport { getLabCapacity } from '../redux/selectors/vnext/lab-selectors';\r\nimport { determinePollingInitialDelay } from '../common/vm/vm-polling-initial-delay';\r\nfunction determinePollingIntervalLength(template, isVNext) {\r\n    const { isResettingPassword, isStarting, isStopping, isCreating, isPublishing, isScaling, isReimaging, isRunning } = template;\r\n    if (isVNext && (isStarting || isStopping)) {\r\n        return FiveSecondInterval;\r\n    }\r\n    else if (isResettingPassword || isStarting || isStopping || isReimaging) {\r\n        return ThirtySecondInterval;\r\n    }\r\n    else if (isCreating || isPublishing || isScaling || isRunning) {\r\n        return OneMinuteInterval;\r\n    }\r\n    return DefaultPollingInterval;\r\n}\r\nfunction shouldPollOnTemplateVM(template) {\r\n    const { isCreating, isPublishing, isScaling, isReimaging } = template;\r\n    return !isCreating && !isPublishing && !isScaling;\r\n}\r\nclass TemplateContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._startTemplate = this._startTemplate.bind(this);\r\n        this._stopTemplate = this._stopTemplate.bind(this);\r\n        this._getTemplateWithExpand = this._getTemplateWithExpand.bind(this);\r\n        this._publishTemplate = this._publishTemplate.bind(this);\r\n        this._updateTitleOrDescription = this._updateTitleOrDescription.bind(this);\r\n        this._resetPassword = this._resetPassword.bind(this);\r\n        this._createSharedImage = this._createSharedImage.bind(this);\r\n        this._updateSharedImage = this._updateSharedImage.bind(this);\r\n        this._setPollingInterval = this._setPollingInterval.bind(this);\r\n        this._acknowledgeGpuDriverWarning = this._acknowledgeGpuDriverWarning.bind(this);\r\n        this._navigateRoute = this._navigateRoute.bind(this);\r\n        this._clearLoadError = this._clearLoadError.bind(this);\r\n        this._pollTemplateStop = this._pollTemplateStop.bind(this);\r\n        this._clearError = this._clearError.bind(this);\r\n        this._redeployTemplate = this._redeployTemplate.bind(this);\r\n        this._reimageTemplateDialog = this._reimageTemplateDialog.bind(this);\r\n    }\r\n    componentDidMount() {\r\n        const { labId, listSharedImages, getSharedGallery, templateViewModel, listImages, isVNext } = this.props;\r\n        const { template, lab } = templateViewModel;\r\n        if (!isVNext) {\r\n            const labResourceId = new ResourceId(labId);\r\n            listSharedImages(labResourceId.parent.id);\r\n            getSharedGallery(labResourceId.parent.id);\r\n        }\r\n        else {\r\n            const labPlanId = lab.labPlanId;\r\n            // todo: get image if lab is created without lab plan\r\n            if (!!labPlanId) {\r\n                // todo: get image without listing all images\r\n                listImages(labPlanId);\r\n            }\r\n        }\r\n        if (template) {\r\n            const pollingIntervalMs = determinePollingIntervalLength(template, isVNext);\r\n            this._setPollingInterval(template.id, pollingIntervalMs);\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        this._pollTemplateStop();\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { labId, templateViewModel, listSharedImages, getSharedGallery, isVNext } = this.props;\r\n        const { template, lab } = templateViewModel;\r\n        if (labId && prevProps.labId !== labId) {\r\n            if (!isVNext) {\r\n                const labResourceId = new ResourceId(labId);\r\n                listSharedImages(labResourceId.parent.id);\r\n                getSharedGallery(labResourceId.parent.id);\r\n            }\r\n            else {\r\n                const labPlanId = lab.labPlanId;\r\n                if (!!labPlanId) {\r\n                    listImages(labPlanId);\r\n                }\r\n            }\r\n        }\r\n        if (template) {\r\n            const pollingIntervalMs = determinePollingIntervalLength(template, isVNext);\r\n            const pollingIntialDelayMs = determinePollingInitialDelay(template, isVNext, true);\r\n            if (pollingIntervalMs !== this._pollingIntervalMs ||\r\n                !prevProps.templateViewModel.template ||\r\n                template.id !== prevProps.templateViewModel.template.id) {\r\n                this._pollTemplateStop();\r\n                this._setPollingInterval(template.id, pollingIntervalMs, pollingIntialDelayMs);\r\n            }\r\n        }\r\n    }\r\n    _pollTemplateStop() {\r\n        const { isVNext, pollTemplateStop, pollVirtualMachineStop } = this.props;\r\n        if (!isVNext) {\r\n            pollTemplateStop();\r\n        }\r\n        else {\r\n            pollVirtualMachineStop();\r\n        }\r\n    }\r\n    _clearLoadError() {\r\n        const { isVNext, clearLoadError, clearLoadVirtualMachinesError, templateViewModel } = this.props;\r\n        const { template } = templateViewModel;\r\n        if (!isVNext) {\r\n            clearLoadError();\r\n        }\r\n        else {\r\n            clearLoadVirtualMachinesError();\r\n            if (!!template?.id) {\r\n                clearGetError(template.id);\r\n            }\r\n        }\r\n    }\r\n    _updateTitleOrDescription(templateId, title, description) {\r\n        const { updateVNextLab, updateTemplate, labId, isVNext } = this.props;\r\n        if (!isVNext) {\r\n            updateTemplate(templateId, title, description);\r\n        }\r\n        else {\r\n            const labUpdate = {\r\n                title,\r\n                description,\r\n            };\r\n            updateVNextLab(labId, labUpdate, LabUpdateOperation.TitleOrDesciption);\r\n        }\r\n    }\r\n    _resetPassword(id, username, password) {\r\n        this.props.resetPassword(id, username, password);\r\n    }\r\n    _createSharedImage(templateId, displayName) {\r\n        this.props.createSharedImage(templateId, displayName);\r\n    }\r\n    _updateSharedImage(sharedImageId, templateId) {\r\n        this.props.updateSharedImage(sharedImageId, templateId);\r\n    }\r\n    _publishTemplate(templateId, maxUsersInLab) {\r\n        const { publishTemplate, isVNext, publishVNextLab, labId, templateViewModel } = this.props;\r\n        const { lab } = templateViewModel;\r\n        if (!isVNext) {\r\n            publishTemplate(templateId, maxUsersInLab);\r\n        }\r\n        else {\r\n            const shoudldUpdateCapacity = getLabCapacity(lab) !== maxUsersInLab;\r\n            publishVNextLab(labId, maxUsersInLab, shoudldUpdateCapacity);\r\n        }\r\n    }\r\n    _startTemplate(templateId) {\r\n        const { isVNext, startTemplate, startEnvironments } = this.props;\r\n        if (!isVNext) {\r\n            startTemplate(templateId);\r\n        }\r\n        else {\r\n            startEnvironments([templateId]);\r\n        }\r\n    }\r\n    _stopTemplate(templateId) {\r\n        const { isVNext, stopTemplate, stopEnvironments } = this.props;\r\n        if (!isVNext) {\r\n            stopTemplate(templateId);\r\n        }\r\n        else {\r\n            stopEnvironments([templateId]);\r\n        }\r\n    }\r\n    _redeployTemplate(templateId) {\r\n        const { isVNext, redeployVirtualMachines } = this.props;\r\n        if (isVNext) {\r\n            redeployVirtualMachines([templateId]);\r\n        }\r\n    }\r\n    _reimageTemplateDialog(templateId) {\r\n        const { isVNext, resetEnvironments } = this.props;\r\n        if (isVNext) {\r\n            resetEnvironments([templateId]);\r\n        }\r\n    }\r\n    _clearError(errorId, errorIndex) {\r\n        const { isVNext, clearError, labId, clearLabsError, clearStartErrors, clearStopErrors, clearResetPasswordError, clearExportError, clearRedeployErrors, templateViewModel, } = this.props;\r\n        const { template, errors } = templateViewModel;\r\n        if (!isVNext) {\r\n            clearError(errorId, errorIndex);\r\n        }\r\n        else {\r\n            if (caseInsensitiveCultureInvariantCompare(errorId, labId) === 0) {\r\n                clearLabsError(errorId, errorIndex);\r\n            }\r\n            else if (!!template?.id) {\r\n                const error = errors.get(errorId.toLowerCase())?.get(errorIndex);\r\n                if (!!error) {\r\n                    switch (error.failureOperation) {\r\n                        case FailureOperation.StartEnvironments:\r\n                            clearStartErrors([template.id]);\r\n                            break;\r\n                        case FailureOperation.StopEnvironments:\r\n                            clearStopErrors([template.id]);\r\n                            break;\r\n                        case FailureOperation.ResetPassword:\r\n                            clearResetPasswordError();\r\n                            break;\r\n                        case FailureOperation.SaveSharedImage:\r\n                            clearExportError();\r\n                            break;\r\n                        case FailureOperation.RedeployVirtualMachine:\r\n                            clearRedeployErrors([template.id]);\r\n                            break;\r\n                        default:\r\n                            return;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    _getTemplateWithExpand(templateId, expand = false) {\r\n        this._pollingIntervalMs = 0;\r\n        this.props.pollTemplateStop();\r\n        this.props.getTemplate(templateId, expand);\r\n    }\r\n    _setPollingInterval(templateId, pollingIntervalMs, initialDelayMs) {\r\n        const { isVNext, pollTemplateStart, templateViewModel, pollVirtualMachineStart } = this.props;\r\n        const { template } = templateViewModel;\r\n        this._pollingIntervalMs = pollingIntervalMs;\r\n        if (templateId) {\r\n            if (!isVNext) {\r\n                pollTemplateStart(templateId, pollingIntervalMs, initialDelayMs);\r\n            }\r\n            else {\r\n                if (shouldPollOnTemplateVM(template)) {\r\n                    pollVirtualMachineStart(templateId, pollingIntervalMs, initialDelayMs);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    _acknowledgeGpuDriverWarning() {\r\n        const { templateViewModel, updateLab, isVNext } = this.props;\r\n        const { lab } = templateViewModel;\r\n        if (!isVNext) {\r\n            const labUpdate = { ...lab, gpuDriverStateDismissed: Ml.DismissState.Dismissed };\r\n            updateLab(labUpdate, LabUpdateOperation.DismissGpuWarning);\r\n        }\r\n    }\r\n    _navigateRoute(pathname) {\r\n        const { push, search } = this.props;\r\n        push({ pathname, search });\r\n    }\r\n    render() {\r\n        const { labId, templateViewModel, isTeamsOrLmsIntegrationEnabled, clearLabUpdateError, clearPublishExceedsCoresError, dismissExportStartedMessageBar, } = this.props;\r\n        const { template } = templateViewModel;\r\n        // Declare navigationItems in the container rather than presentational view for now because create-view is seperated from template.\r\n        // Todo: move the create-view inside the template.\r\n        let navigationItems = undefined;\r\n        if (isTeamsOrLmsIntegrationEnabled) {\r\n            navigationItems = getNavigationItems(this.props.intl, labId, LabNavKeys.Template, this._navigateRoute);\r\n        }\r\n        const title = this.props.intl.formatMessage(templateMessages.templatePageTitle);\r\n        if (template && template.isCreating) {\r\n            return (<>\r\n                    <PageTitle subtitle={title}/>\r\n                    <CreatingView hasTemplateVm={template.hasTemplateVm} imageName={template.image} cores={template.cores} memorySize={template.memorySize} labSkuInfo={template.labSkuInfo} navigationItems={isTeamsOrLmsIntegrationEnabled ? navigationItems : undefined}/>\r\n                </>);\r\n        }\r\n        const props = {\r\n            templateViewModel,\r\n            getTemplateWithExpand: this._getTemplateWithExpand,\r\n            startTemplate: this._startTemplate,\r\n            stopTemplate: this._stopTemplate,\r\n            publishTemplate: this._publishTemplate,\r\n            resetPassword: this._resetPassword,\r\n            updateTitleOrDescription: this._updateTitleOrDescription,\r\n            createSharedImage: this._createSharedImage,\r\n            updateSharedImage: this._updateSharedImage,\r\n            acknowledgeGpuDriverWarning: this._acknowledgeGpuDriverWarning,\r\n            clearLabUpdateError,\r\n            clearPublishExceedsCoresError,\r\n            clearLoadError: this._clearLoadError,\r\n            clearError: this._clearError,\r\n            dismissExportStartedMessageBar,\r\n            redeployTemplate: this._redeployTemplate,\r\n            navigationItems: isTeamsOrLmsIntegrationEnabled ? navigationItems : undefined,\r\n            reimageTemplate: this._reimageTemplateDialog,\r\n        };\r\n        return (<>\r\n                <PageTitle subtitle={title}/>\r\n                <Template {...props}/>\r\n            </>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getTemplateContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    getTemplate,\r\n    startTemplate,\r\n    stopTemplate,\r\n    clearLabUpdateError,\r\n    publishTemplate,\r\n    resetPassword,\r\n    updateTemplate,\r\n    getSharedGallery,\r\n    listSharedImages,\r\n    createSharedImage,\r\n    updateSharedImage,\r\n    clearLoadError,\r\n    clearError,\r\n    clearPublishExceedsCoresError,\r\n    pollTemplateStart,\r\n    pollTemplateStop,\r\n    push: routerActions.push,\r\n    updateLab,\r\n    listImages,\r\n    pollVirtualMachineStart,\r\n    pollVirtualMachineStop,\r\n    updateVNextLab,\r\n    startEnvironments,\r\n    stopEnvironments,\r\n    resetEnvironments,\r\n    clearLoadVirtualMachinesError,\r\n    pollLabStop,\r\n    publishVNextLab,\r\n    clearLabsError,\r\n    clearStartErrors,\r\n    clearStopErrors,\r\n    clearResetPasswordError,\r\n    dismissExportStartedMessageBar,\r\n    clearExportError,\r\n    redeployVirtualMachines,\r\n    clearRedeployErrors,\r\n    listEnvironments,\r\n};\r\nexport const TemplateContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(TemplateContainerInjected));\r\nexport default TemplateContainer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const GroupActionType = {\r\n    ...CommonActionType,\r\n    GET_GROUP_NAME: 'GET_GROUP_NAME',\r\n    GET_GROUP_NAME_FAILED: 'GET_GROUP_NAME_FAILED',\r\n    GET_GROUP_NAME_SUCCESS: 'GET_GROUP_NAME_SUCCESS',\r\n    GET_GROUP_NAME_ERROR: 'GET_GROUP_NAME_ERROR',\r\n    SET_GROUP_ID: 'SET_GROUP_ID',\r\n    SET_GROUP_NAME: 'SET_GROUP_NAME',\r\n    ENABLE_FILTER_BY_GROUP_ID: 'ENABLE_FILTER_BY_GROUP_ID',\r\n    GET_GROUPS: 'GET_GROUPS',\r\n    GET_GROUPS_SUCCESS: 'GET_GROUPS_SUCCESS',\r\n    GET_GROUPS_FAILED: 'GET_GROUPS_FAILED',\r\n    GET_GROUPS_ERROR: 'GET_GROUPS_ERROR',\r\n};\r\n","import { GroupActionType, } from './group-actions';\r\nexport const getGroupName = (groupId) => ({\r\n    type: GroupActionType.GET_GROUP_NAME,\r\n    groupId,\r\n});\r\nexport const getGroupNameFailed = () => ({\r\n    type: GroupActionType.GET_GROUP_NAME_FAILED,\r\n});\r\nexport const getGroupNameSuccess = (groupName) => ({\r\n    type: GroupActionType.GET_GROUP_NAME_SUCCESS,\r\n    groupName,\r\n});\r\nexport const getGroupNameError = (error) => ({\r\n    type: GroupActionType.GET_GROUP_NAME_ERROR,\r\n    error,\r\n});\r\nexport const setGroupId = (groupId) => ({\r\n    type: GroupActionType.SET_GROUP_ID,\r\n    groupId,\r\n});\r\nexport const setGroupName = (groupName) => ({\r\n    type: GroupActionType.SET_GROUP_NAME,\r\n    groupName,\r\n});\r\nexport const enableFilterByGroupId = () => ({\r\n    type: GroupActionType.ENABLE_FILTER_BY_GROUP_ID,\r\n});\r\nexport const getGroups = (filterText) => ({\r\n    type: GroupActionType.GET_GROUPS,\r\n    filterText: filterText || '',\r\n});\r\nexport const getGroupsSuccess = (groups) => ({\r\n    type: GroupActionType.GET_GROUPS_SUCCESS,\r\n    groups,\r\n});\r\nexport const getGroupsFailed = () => ({\r\n    type: GroupActionType.GET_GROUPS_FAILED,\r\n});\r\nexport const getGroupsError = (error) => ({\r\n    type: GroupActionType.GET_GROUPS_ERROR,\r\n    error,\r\n});\r\nconst actions = {\r\n    getGroupName,\r\n    getGroupNameFailed,\r\n    getGroupNameSuccess,\r\n    getGroupNameError,\r\n    setGroupId,\r\n    setGroupName,\r\n    enableFilterByGroupId,\r\n    getGroups,\r\n    getGroupsSuccess,\r\n    getGroupsFailed,\r\n    getGroupsError,\r\n};\r\nexport default actions;\r\n","import * as React from 'react';\r\nimport { CommandButton, TooltipHost } from '@fluentui/react';\r\nexport class CommandButtonToolTip extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        const { disabled, content, directionalHint, labelText } = this.props;\r\n        return (<TooltipHost content={disabled ? undefined : content} directionalHint={directionalHint}>\r\n                <CommandButton {...this.props}>{!this.props.children ? labelText : this.props.children}</CommandButton>\r\n            </TooltipHost>);\r\n    }\r\n}\r\nexport default CommandButtonToolTip;\r\n","import * as React from 'react';\r\nimport CommandButtonToolTip from './command-button-tooltip';\r\nexport class FileUploadButton extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.inputRef = React.createRef();\r\n    }\r\n    render() {\r\n        const { content, labelText, directionalHint, accept, styles, onChange } = this.props;\r\n        const labelTextInputFile = (<>\r\n                {labelText}\r\n                <input id=\"upload\" type=\"file\" accept={accept} style={{ display: 'none' }} ref={this.inputRef} onChange={onChange}/>\r\n            </>);\r\n        return (<CommandButtonToolTip content={content} labelText={labelTextInputFile} directionalHint={directionalHint} iconProps={{\r\n            iconName: 'Upload',\r\n            styles: {\r\n                root: {\r\n                    width: '16px',\r\n                    padding: '0 4px 0 5px',\r\n                },\r\n            },\r\n        }} styles={styles} onClick={() => this.inputRef.current && this.inputRef.current.click()}/>);\r\n    }\r\n}\r\nexport default FileUploadButton;\r\n","import { ProgressIndicator, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport commonMessages from '../../language/common-messages';\r\nimport { shortenNumber } from '../../utils/common';\r\nimport { getCustomTheme } from '../themes/selectors';\r\nconst VmUsageColumnInjected = (props) => {\r\n    const msg = props.intl.formatMessage;\r\n    const usageAsProgressMessage = msg(commonMessages.vmUsageColumnProgressFormat, {\r\n        current: shortenNumber(props.currentUsage, props.locale, props.intl),\r\n        total: shortenNumber(props.usageQuota, props.locale, props.intl),\r\n    });\r\n    const usageMessage = msg(commonMessages.vmUsageColumnUsageFormat, {\r\n        current: props.intl.formatNumber(props.currentUsage, {\r\n            maximumFractionDigits: 1,\r\n        }),\r\n    });\r\n    const message = props.usageQuota > 0 ? (<div className={'vm-usage-column'} style={{ width: 'fit-content', fontSize: '12px' }}>\r\n                {usageAsProgressMessage}\r\n            </div>) : (<div className={'vm-usage-column'}>{usageMessage}</div>);\r\n    return (<Stack verticalFill verticalAlign=\"center\">\r\n            <Stack.Item>{message}</Stack.Item>\r\n        </Stack>);\r\n};\r\nexport const VmUsageColumn = injectIntl(VmUsageColumnInjected);\r\nexport const VmUsageProgressColumn = (props) => {\r\n    if (props.usageQuota < 1) {\r\n        return null;\r\n    }\r\n    const { usageProgressTrackStyles: trackStyles } = getCustomTheme();\r\n    const trackStyle = props.isHoveredOrSelected ? trackStyles?.active : trackStyles?.normal;\r\n    return (<Stack horizontal verticalFill verticalAlign=\"center\">\r\n            <Stack.Item>\r\n                <div aria-hidden=\"true\">\r\n                    <ProgressIndicator percentComplete={props.currentUsage / props.usageQuota} barHeight={4} styles={{\r\n        root: { width: '77px' },\r\n        progressBar: {\r\n            backgroundColor: (props.currentUsage >= props.usageQuota && '#DA3b01') || undefined,\r\n        },\r\n        progressTrack: trackStyle,\r\n    }}/>\r\n                </div>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\n","// Regular expression below is taken from https://github.com/Microsoft/referencesource/blob/master/System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs\r\n// With trailing period (\\.?) removed.\r\n// eslint-disable-next-line security/detect-unsafe-regex\r\nconst emailRegex = /^((([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/;\r\n// Splits string of separated emails into individual entries.\r\nexport function splitEmailList(emailList) {\r\n    return emailList\r\n        .replace(/[^,;]*.?</g, '') // remove name before <email@microsoft.com>\r\n        .replace(/>/g, '') // remove > at the end of <email@microsoft.com>\r\n        .replace(/[,;\\r ]{1,}/g, '\\n') // replace other separators with newlines\r\n        .replace(/[\\n]{2,}/g, '\\n') // remove duplicate newlines\r\n        .split('\\n') // split newlines\r\n        .map((o) => o.trim()) // remove leading/trailing whitespace\r\n        .filter((o) => o.length > 0) // remove empty entries\r\n        .map((o) => o.toLowerCase()) // lowercase all entries\r\n        .filter((value, index, array) => array.indexOf(value) === index) // remove duplicates\r\n        .sort((a, b) => a.localeCompare(b)); // sort alphabetically\r\n}\r\n// Returns true if and only if given string is a valid email address.\r\nexport function isValidEmail(email) {\r\n    return !!email && emailRegex.test(email);\r\n}\r\n// Runs email list validation.\r\nexport function validateEmailList(emailList, message) {\r\n    const emails = splitEmailList(emailList);\r\n    const isValid = emails.length > 0 && emails.every((o) => isValidEmail(o));\r\n    return isValid ? undefined : message;\r\n}\r\n","import * as React from 'react';\r\nimport { DefaultButton } from '@fluentui/react';\r\nexport class FileUploadButton extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.inputRef = React.createRef();\r\n    }\r\n    render() {\r\n        const { labelText, accept, onChange } = this.props;\r\n        return (<DefaultButton text={labelText} style={{\r\n            paddingLeft: '8px',\r\n            paddingRight: '8px',\r\n            width: 'fit-content',\r\n        }} onClick={() => this.inputRef.current && this.inputRef.current.click()}>\r\n                <input id=\"upload\" type=\"file\" accept={accept} style={{ display: 'none' }} ref={this.inputRef} onChange={onChange}/>\r\n            </DefaultButton>);\r\n    }\r\n}\r\nexport default FileUploadButton;\r\n","import * as React from 'react';\r\nimport { Link } from '@fluentui/react';\r\nexport class FileUploadLink extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.inputRef = React.createRef();\r\n    }\r\n    render() {\r\n        const { labelText, accept, onChange } = this.props;\r\n        return (<Link onClick={() => this.inputRef.current && this.inputRef.current.click()}>\r\n                {labelText}\r\n                <input id=\"upload\" type=\"file\" accept={accept} style={{ display: 'none' }} ref={this.inputRef} onChange={onChange}/>\r\n            </Link>);\r\n    }\r\n}\r\nexport default FileUploadLink;\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    title: {\r\n        id: 'UserListAddUsersFlyoutTitle',\r\n        defaultMessage: 'Add users',\r\n        description: 'Title of the flyout dialog to add users to the lab.',\r\n    },\r\n    label: {\r\n        id: 'UserListAddUsersFlyoutLabel',\r\n        defaultMessage: 'Enter the email addresses of users who can register for the lab.',\r\n        description: 'Label above email addresses text box on flyout dialog to add users to the lab.',\r\n    },\r\n    placeholder: {\r\n        id: 'UserListAddUsersFlyoutPlaceholder',\r\n        defaultMessage: 'Enter email addresses, one per line or separated by semicolons',\r\n        description: 'Placeholder text inside textbox on a dialog to add users to the lab.',\r\n    },\r\n    validationError: {\r\n        id: 'UserListAddUsersFlyoutValidationError',\r\n        defaultMessage: 'The list must consist of valid email addresses, one per line or separated by semicolons.',\r\n        description: 'Error shown to the user when list of emails has invalid format/entries.',\r\n    },\r\n    chooseFileCommand: {\r\n        id: 'UserListAddUsersFlyoutChooseFileCommand',\r\n        defaultMessage: 'Choose File',\r\n        description: 'Name of command on add users flyout to load list of users from a CSV file.',\r\n    },\r\n    uploadCsvTooltip: {\r\n        id: 'UserListAddUsersFlyoutUploadCsvTooltip',\r\n        defaultMessage: 'Add multiple users using a CSV file. You can export a CSV file from Excel or create one in a text editor.\\nThe first email address on each line will be imported. You will be able to review and edit the imported list before adding them.\\nFor more information on the CSV file format see https://aka.ms/azlab-csv.',\r\n        description: 'Tooltip on the Upload CSV command',\r\n    },\r\n    uploadCsvCommand: {\r\n        id: 'UserListAddUsersFlyoutUploadCsvCommand',\r\n        defaultMessage: 'Upload CSV',\r\n        description: 'Name of command on users page command bar to load list of users from a CSV file.',\r\n    },\r\n    addByEmailCommand: {\r\n        id: 'UserListAddUsersFlyoutAddByEmailCommand',\r\n        defaultMessage: 'Add by email address',\r\n        description: 'Name of command on users page command bar to invite user(s) using their email address.',\r\n    },\r\n    confirmDialogTitle: {\r\n        id: 'UserListAddUsersFlyoutConfirmDialogTitle',\r\n        defaultMessage: 'Manage lab manually',\r\n        description: 'Title of confirmation dialog presented when user attempts to manually add user emails to the lab.',\r\n    },\r\n    confirmDialogMessage: {\r\n        id: 'UserListAddUsersFlyoutConfirmDialogMessage',\r\n        defaultMessage: `‘{count}’ users will be added to this lab. You will not be able to sync this lab from a group unless all users are deleted.`,\r\n        description: 'Confirmation dialog message presented when user attempts to manually add user emails to the lab. {count} is inserting the number of emails added to the lab and should not be localized.',\r\n    },\r\n});\r\nexport default messages;\r\n","import { ChoiceGroup, DefaultButton, Link, Panel, PanelType, Stack, TextField, Icon, Spinner, SpinnerSize, Text, } from '@fluentui/react';\r\nimport { SharedColors } from '@fluentui/theme';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { FileUploadButton } from '../common/file-upload-button-flyout';\r\nimport { FileUploadLink } from '../common/file-upload-link';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nimport { isValidEmail, splitEmailList, validateEmailList } from '../utils/emails';\r\nimport { messages } from './add-users-flyout-messages';\r\nimport './add-users-flyout.css';\r\nexport const AddUsersFlyout = (props) => {\r\n    const { isSubmitting, onDismiss, onSubmit } = props;\r\n    const intl = useIntl();\r\n    const [emails, setEmails] = React.useState([]);\r\n    const [isValid, setIsValid] = React.useState(false);\r\n    const [selectedChoice, setSelectedChoice] = React.useState('email');\r\n    const [emailAddresses, setEmailAddresses] = React.useState();\r\n    const [hasEmptyCsvFileError, setHasEmptyCsvFileError] = React.useState(false);\r\n    const [csvFileName, setCsvFileName] = React.useState();\r\n    const [csvFileUploaded, setCsvFileUploaded] = React.useState(false);\r\n    const [csvFileUploading, setCsvFileUploading] = React.useState(false);\r\n    const _onCsvFileUpload = (event) => {\r\n        const reader = new FileReader();\r\n        reader.onerror = () => {\r\n            // TODO: report error\r\n            setCsvFileUploading(false);\r\n        };\r\n        reader.onloadend = (e) => {\r\n            const emails = e.target.result\r\n                .split(/\\n|\\r\\n/)\r\n                .map((line) => line\r\n                .split(/\\t|,/)\r\n                .map((o) => o.trim())\r\n                .find((o) => isValidEmail(o)))\r\n                .filter((o) => !!o);\r\n            if (emails.length > 0) {\r\n                setEmailAddresses(emails.join('\\n'));\r\n                setEmails(splitEmailList(emails.join('\\n')));\r\n                setHasEmptyCsvFileError(false);\r\n                setCsvFileUploaded(true);\r\n            }\r\n            else {\r\n                setHasEmptyCsvFileError(true);\r\n                setCsvFileUploaded(false);\r\n            }\r\n            setCsvFileUploading(false);\r\n        };\r\n        setCsvFileName(!!event.target.files ? event.target.files[0].name : '');\r\n        setCsvFileUploading(true);\r\n        reader.readAsText(event.target.files[0]);\r\n        event.target.value = '';\r\n    };\r\n    // close the flyout after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const msg = intl.formatMessage;\r\n    const addTypes = [\r\n        { key: 'email', text: msg(messages.addByEmailCommand) },\r\n        { key: 'csv', text: msg(messages.uploadCsvCommand) },\r\n    ];\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(messages.title)} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                    <Stack.Item>\r\n                        <SubmitButton default={true} disabled={!isValid || hasEmptyCsvFileError} buttonText={msg(commonMessages.add)} onClick={() => onSubmit(emails)} isSubmitting={isSubmitting}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                            {msg(commonMessages.cancel)}\r\n                        </DefaultButton>\r\n                    </Stack.Item>\r\n                </Stack>)}>\r\n            {!hasEmptyCsvFileError && (<ChoiceGroup selectedKey={selectedChoice} options={addTypes} onChange={(event, option) => setSelectedChoice(option.key)}/>)}\r\n            <br />\r\n            {!hasEmptyCsvFileError && selectedChoice == 'email' && (<Stack tokens={{ childrenGap: '16px' }}>\r\n                    <Stack.Item>\r\n                        <TextField label={msg(messages.label)} autoFocus={true} multiline={true} spellCheck={false} disabled={isSubmitting} resizable={false} rows={Constants.LargeTextFieldRows} maxLength={10000} value={emailAddresses} onChange={(event, newValue) => setEmailAddresses(newValue)} validateOnLoad={!!emailAddresses} onGetErrorMessage={(value) => {\r\n        const result = validateEmailList(value, msg(messages.validationError));\r\n        setIsValid(!result);\r\n        setEmails(splitEmailList(value));\r\n        return result || '';\r\n    }}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <FormattedMessage id=\"UserListAddUsersFlyoutNewAddUsersManuallyWarning\" defaultMessage=\"<b>Once you have added users manually, you will not be able to sync this lab from a group unless all users are deleted first.</b>\" description=\"Explanation that users cannot choose the sync from group option unless users are all removed from the lab. <b> and </b> should not be localised, but the text within should.\" values={{\r\n        b: (chunks) => <b>{chunks}</b>,\r\n    }}/>\r\n                    </Stack.Item>\r\n                </Stack>)}\r\n            {!hasEmptyCsvFileError && selectedChoice == 'csv' && (<Stack tokens={{ childrenGap: '16px' }}>\r\n                    <Stack.Item>\r\n                        <FormattedMessage id=\"UserListAddUsersFlyoutNewUploadCsvMessage\" defaultMessage=\"Upload a CSV file with the email address of each user to add to your lab. <b>Once you have added users manually, you will not be able to sync this lab from a group unless all users are deleted first.</b>\" description=\"Explanation that users cannot choose the sync from group option unless users are all removed from the lab. <b> and </b> should not be localised, but the text within should.\" values={{\r\n        b: (chunks) => <b>{chunks}</b>,\r\n    }}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <FormattedMessage id=\"UserListAddUsersFlyoutNewLearnMoreCsv\" defaultMessage=\"The first email address on each line will be imported, and you will be able to review the list before saving. CSV files can be exported from Excel or created in a text editor. <Link>Click here</Link> for more information.\" description=\"Information for the users to learn more when uploaded CSV file is empty. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlab-csv\" target=\"_blank\">\r\n                                        {chunks}\r\n                                    </Link>),\r\n    }}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item styles={{ root: { paddingTop: '16px' } }}>\r\n                        <FileUploadButton labelText={msg(messages.chooseFileCommand)} accept=\".csv\" onChange={_onCsvFileUpload} styles={{ root: { marginTop: '16px', marginBottom: '16px' } }}/>\r\n                    </Stack.Item>\r\n                    {csvFileUploading && (<Stack.Item>\r\n                            <FormattedMessage id=\"UserListAddUsersFlyoutNewUploadCsvInProgress\" defaultMessage=\"{spinner} Uploading {filename}...\" description=\"Message shown on during file upload. {filename} is the uploaded filename and {spinner} is the progress spinner, and neither of these should be localised.\" values={{\r\n        spinner: <Spinner size={SpinnerSize.small}/>,\r\n        filename: csvFileName,\r\n    }}/>\r\n                        </Stack.Item>)}\r\n                    {csvFileUploaded && (<Stack.Item>\r\n                            <FormattedMessage id=\"UserListAddUsersFlyoutNewUploadCsvSuccess\" defaultMessage=\"{checkmark} {filename} uploaded successfully, {count} user(s) imported.\" description=\"Message shown on file upload success. {checkmark} is the checkmark icon, {filename} is the uploaded filename and {count} is the number of users, and none of these should be localised.\" values={{\r\n        checkmark: (<Icon iconName=\"CheckMark\" styles={{ root: { color: SharedColors.green10 } }}/>),\r\n        filename: (<Text block nowrap>\r\n                                            {csvFileName}\r\n                                        </Text>),\r\n        count: emails.length,\r\n    }}/>\r\n                        </Stack.Item>)}\r\n                    {csvFileUploaded && (<Stack.Item>\r\n                            <TextField autoFocus={true} multiline={true} spellCheck={false} disabled={isSubmitting} resizable={false} rows={Constants.LargeTextFieldRows} maxLength={10000} value={emailAddresses} readOnly={true} onGetErrorMessage={(value) => {\r\n        const result = validateEmailList(value, msg(messages.validationError));\r\n        setIsValid(!result);\r\n        setEmails(splitEmailList(value));\r\n        return result || '';\r\n    }}/>\r\n                        </Stack.Item>)}\r\n                </Stack>)}\r\n            {hasEmptyCsvFileError && (<>\r\n                    <div className=\"add-user__empty-file-error\">\r\n                        <FormattedMessage id=\"UserListAddUsersFlyoutNewEmptyCsvFileError\" defaultMessage=\"The file you selected does not contain any valid email addresses. Please ensure the file is formatted correctly, or <FileUploadLink>choose another file</FileUploadLink>.\" description=\"Error shown to the user when uploaded CSV file is empty. <FileUploadLink> and </FileUploadLink> should not be localized, but text between them should.\" values={{\r\n        FileUploadLink: (chunks) => (<FileUploadLink labelText={chunks} accept=\".csv\" onChange={_onCsvFileUpload}/>),\r\n    }}/>\r\n                    </div>\r\n                    <div>\r\n                        <FormattedMessage id=\"UserListAddUsersFlyoutNewLearnMoreCsvInformation\" defaultMessage=\"The first email address on each line will be imported. <Link>Click here</Link> for more information on CSV files.\" description=\"Information for the users to learn more when uploaded CSV file is empty. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlab-csv\" target=\"_blank\">\r\n                                        {chunks}\r\n                                    </Link>),\r\n    }}/>\r\n                    </div>\r\n                </>)}\r\n        </Panel>);\r\n};\r\nexport default AddUsersFlyout;\r\n","import * as React from 'react';\r\nimport { ComboBox } from '@fluentui/react';\r\nexport class FilteredDropdown extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.getOptions = () => {\r\n            const { items, onGetKey, onGetText, onFilter } = this.props;\r\n            const { filter } = this.state;\r\n            const filteredItems = onFilter(items, filter);\r\n            const options = filteredItems\r\n                .map((item) => {\r\n                const option = {\r\n                    key: onGetKey(item),\r\n                    data: item,\r\n                    text: onGetText(item),\r\n                };\r\n                return option;\r\n            })\r\n                .toArray();\r\n            return options;\r\n        };\r\n        this.onChange = (_event, option, _index, _value) => {\r\n            const { onSelected, onGetText } = this.props;\r\n            if (!!option) {\r\n                onSelected(option.data);\r\n                this.setState({ filter: onGetText(option.data) });\r\n            }\r\n        };\r\n        this.onInputValueChange = (newValue, _composing) => {\r\n            const { onFilterChanged } = this.props;\r\n            this.setState({\r\n                filter: newValue || '',\r\n            });\r\n            onFilterChanged(newValue);\r\n        };\r\n        this.state = {\r\n            filter: '',\r\n        };\r\n    }\r\n    render() {\r\n        const { label, selected, onGetKey, onRenderItem, maxWidth, disabled } = this.props;\r\n        const { filter } = this.state;\r\n        const options = this.getOptions();\r\n        const autofillProps = {\r\n            onInputValueChange: this.onInputValueChange,\r\n        };\r\n        return (<ComboBox allowFreeform={true} autoComplete={'on'} options={options} selectedKey={!!selected ? onGetKey(selected) : undefined} openOnKeyboardFocus={true} autofill={autofillProps} onChange={this.onChange} onRenderOption={(option) => !!option ? onRenderItem(option.data) : null} dropdownMaxWidth={maxWidth} dropdownWidth={maxWidth} text={filter} label={label} disabled={disabled}/>);\r\n    }\r\n}\r\n","import { DefaultButton, Dialog, DialogFooter, DialogType, Icon, Link, Panel, PanelType, Persona, PersonaSize, PrimaryButton, Stack, } from '@fluentui/react';\r\nimport _ from 'lodash';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nimport { FilteredDropdown } from '../common/filtered-dropdown';\r\nimport './add-users-flyout.css';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'UserListSyncFromGroupFlyoutTitle',\r\n        defaultMessage: 'Sync from group',\r\n        description: 'Title of the flyout dialog to sync a lab from a group.',\r\n    },\r\n    label: {\r\n        id: 'UserListSyncFromGroupFlyoutLabel',\r\n        defaultMessage: 'Group',\r\n        description: 'Label above group searchbox box on flyout dialog to sync a lab from a group.',\r\n    },\r\n    placeholder: {\r\n        id: 'UserListSyncFromGroupFlyoutPlaceholder',\r\n        defaultMessage: 'Search for groups',\r\n        description: 'Placeholder text inside searchbox on a dialog to sync a lab from a group.',\r\n    },\r\n    disableSync: {\r\n        id: 'UserListSyncFromGroupFlyoutDisableSync',\r\n        defaultMessage: 'Disable group sync and retain lab',\r\n        description: 'Choice message for retaining lab on group deletion',\r\n    },\r\n    deleteLab: {\r\n        id: 'UserListSyncFromGroupFlyoutDeleteLab',\r\n        defaultMessage: 'Delete lab (including all users and virtual machines)',\r\n        description: 'Choice message for deleting lab on group deletion',\r\n    },\r\n    confirmDialogTitle: {\r\n        id: 'UserListSyncFromGroupFlyoutConfirmDialogTitle',\r\n        defaultMessage: 'Confirm sync',\r\n        description: 'Title of confirmation dialog presented when user attempts to sync lab to group.',\r\n    },\r\n    dropdownLabel: {\r\n        id: 'UserListSyncFromGroupFlyoutDropdownLabel',\r\n        defaultMessage: 'Group',\r\n        description: 'Label above the search for group dropdown',\r\n    },\r\n});\r\nexport const SyncFromGroupFlyout = (props) => {\r\n    const { groups, isSubmitting, onDismiss, onSubmit, searchGroups, isLoadingGroups } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const [selectedGroup, setSelectedGroup] = React.useState();\r\n    const [isValid, setIsValid] = React.useState(false);\r\n    const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\r\n    const groupSelected = (selectedItem) => {\r\n        setSelectedGroup(selectedItem);\r\n        setIsValid(!!selectedItem);\r\n    };\r\n    // close the flyout after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const onDialogSubmit = () => {\r\n        setShowConfirmDialog(false);\r\n        onSubmit(selectedGroup?.id || '', false);\r\n    };\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(messages.title)} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                    <Stack.Item>\r\n                        <SubmitButton default={true} disabled={!isValid} buttonText={msg(commonMessages.add)} onClick={() => setShowConfirmDialog(true)} isSubmitting={isSubmitting}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                            {msg(commonMessages.cancel)}\r\n                        </DefaultButton>\r\n                    </Stack.Item>\r\n                </Stack>)}>\r\n            <GroupDropdown groups={groups} isLoadingGroups={isLoadingGroups} searchGroups={searchGroups} groupSelected={groupSelected} disabled={isSubmitting}/>\r\n            <FormattedMessage id=\"UserListSyncFromGroupFlyoutGroupNotFoundLink\" defaultMessage=\"<Link>What if I don’t see the group I need for my lab?</Link>\" description=\"Information for users who cannot find their group. <Link> and </Link> should not be localized, but text between them should.\" values={{\r\n        Link: (chunks) => (<Link href=\"https://aka.ms/azlabs-groupnotfound\" target=\"_blank\" styles={{ root: { paddingTop: '8px' } }}>\r\n                            {chunks}\r\n                        </Link>),\r\n    }}/>\r\n            <Stack horizontal tokens={{ childrenGap: '8px' }} styles={{ root: { paddingTop: '16px', paddingBottom: '32px' } }}>\r\n                <Stack.Item>\r\n                    <Icon iconName=\"Warning\" styles={{ root: { verticalAlign: 'baseline', paddingTop: '4px' } }}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <Stack tokens={{ childrenGap: '16px' }}>\r\n                        <Stack.Item className=\"ms-fontWeight-semibold\">\r\n                            <FormattedMessage id=\"UserListSyncFromGroupFlyoutWarningMessage\" defaultMessage=\"Once a lab is synced from a group, a user's virtual machine will be automatically deleted when they are removed from the group.\" description=\"Warning message shown to user that virtual machines will be deleted when users are removed from group.\"/>\r\n                        </Stack.Item>\r\n                        <Stack.Item className=\"ms-fontWeight-semibold\">\r\n                            <FormattedMessage id=\"UserListSyncFromGroupFlyoutDeletedMessage\" defaultMessage=\"If a group is deleted, existing lab users and virtual machines will be retained until the lab itself is deleted.\" description=\"Explanation for what happens when a group attached to the lab is deleted.\"/>\r\n                        </Stack.Item>\r\n                    </Stack>\r\n                </Stack.Item>\r\n            </Stack>\r\n            {showConfirmDialog && (<Dialog hidden={false} onDismiss={() => setShowConfirmDialog(false)} dialogContentProps={{\r\n        type: DialogType.normal,\r\n        title: msg(messages.confirmDialogTitle),\r\n    }}>\r\n                    <FormattedMessage id=\"UserListSyncFromGroupFlyoutConfirmDialogMessage\" defaultMessage='This lab will be permanently synced from the group \"{name}\". <b>Once synced, you will not be able to manually add or remove users and machines in this lab at any time.</b>' description=\"Confirmation dialog message presented when user attempts to sync lab to group. {name} is the name of the group being added, and should not be localised. <b> and </b> are bolding indicators, and should not be localized, but the text between should.\" values={{\r\n        name: selectedGroup?.name || selectedGroup?.id,\r\n        b: (chunks) => <span className=\"ms-fontWeight-semibold\">{chunks}</span>,\r\n    }}/>\r\n                    <DialogFooter styles={{ actions: { marginTop: 30 } }}>\r\n                        <PrimaryButton text={msg(commonMessages.continue)} onClick={onDialogSubmit}/>\r\n                        <DefaultButton autoFocus text={msg(commonMessages.cancel)} onClick={() => setShowConfirmDialog(false)}/>\r\n                    </DialogFooter>\r\n                </Dialog>)}\r\n        </Panel>);\r\n};\r\nconst onRenderItem = (item) => {\r\n    return (<Persona size={PersonaSize.size40} text={item.name} secondaryText={item.description} tertiaryText={item.id}/>);\r\n};\r\nconst onRenderSelected = (item) => {\r\n    return (<Persona size={PersonaSize.size24} text={item.name} secondaryText={item.description} tertiaryText={item.id}/>);\r\n};\r\nconst onGetKey = (item) => {\r\n    return item.id;\r\n};\r\nconst onGetText = (item) => {\r\n    return item.name || '';\r\n};\r\nconst doesTextStartWith = (text, filterText) => {\r\n    return text.toLowerCase().indexOf(filterText.toLowerCase()) === 0;\r\n};\r\nconst onFilter = (items, filterText) => {\r\n    const filter = !!filterText ? filterText : '';\r\n    return items.filter((item) => doesTextStartWith(item.name, filter)).slice(0, 10);\r\n};\r\nexport const GroupDropdown = (props) => {\r\n    const { groups, searchGroups, groupSelected, disabled } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const debouncedSearch = _.debounce(searchGroups, 800);\r\n    const onFilterChanged = (filterText) => {\r\n        debouncedSearch(!!filterText ? filterText : '');\r\n        groupSelected();\r\n    };\r\n    return (<>\r\n            <FilteredDropdown items={groups} onGetKey={onGetKey} onGetText={onGetText} onSelected={groupSelected} onRenderItem={onRenderItem} onRenderSelected={onRenderSelected} onFilterChanged={onFilterChanged} onFilter={onFilter} maxWidth={375} label={msg(messages.dropdownLabel)} disabled={disabled}/>\r\n        </>);\r\n};\r\nexport default SyncFromGroupFlyout;\r\n","import { DefaultButton, Dialog, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'DeleteUsersDialogTitle',\r\n        defaultMessage: 'Delete user(s)',\r\n        description: 'Title of the delete users dialog.',\r\n    },\r\n    subText: {\r\n        id: 'DeleteUsersDialogTextFormat',\r\n        defaultMessage: '{numberOfUsers} user(s) and their virtual machines will be deleted from the lab. {cantBeUndoneSpan}',\r\n        description: 'Message shown when deleting users from a lab. {numberOfUsers} is the number of users being deleted (one or more). {cantBeUndoneSpan} is the bolded resolved value of DeleteUsersDialogCantBeUndoneMessage.',\r\n    },\r\n});\r\nexport const DeleteUsersDialog = (props) => {\r\n    const { numberOfUsers, isSubmitting, onDismiss, onSubmit } = props;\r\n    // close the dialog after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    const cantBeUndoneSpan = (<b>\r\n            <FormattedMessage id=\"DeleteUsersDialogCantBeUndoneMessage\" defaultMessage=\"This operation cannot be undone.\" description=\"This message will be displayed as part of DeleteUsersDialogTextFormat\"/>\r\n        </b>);\r\n    return (<Dialog hidden={false} onDismiss={isSubmitting ? undefined : onDismiss} dialogContentProps={{\r\n        title: msg(messages.title),\r\n        subText: msg(messages.subText, { numberOfUsers, cantBeUndoneSpan }),\r\n    }} closeButtonAriaLabel={msg(commonMessages.cancel)} maxWidth={Constants.DefaultDialogSmallWidth}>\r\n            <Stack horizontal tokens={{ childrenGap: '8px' }} styles={{ root: { width: '100%' } }} verticalAlign=\"end\" horizontalAlign=\"end\">\r\n                <Stack.Item>\r\n                    <SubmitButton isSubmitting={isSubmitting} buttonText={msg(commonMessages.delete)} onClick={onSubmit}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DefaultButton autoFocus text={msg(commonMessages.cancel)} disabled={isSubmitting} onClick={onDismiss}/>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Dialog>);\r\n};\r\nexport default DeleteUsersDialog;\r\n","import { DefaultButton, Panel, PanelType, Stack, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'UserListInvitationFlyoutTitle',\r\n        defaultMessage: 'Send invitation by email',\r\n        description: 'Title of the flyout dialog to send invitation email to users.',\r\n    },\r\n    label: {\r\n        id: 'UserListInvitationFlyoutMessageLabel',\r\n        defaultMessage: 'Add a message (optional)',\r\n        description: 'Label above optional message text box on a dialog to send invitation email to users.',\r\n    },\r\n});\r\nconst InvitationFlyoutInjected = (props) => {\r\n    const { numberOfUsers, isSubmitting, onSubmit, onDismiss, intl } = props;\r\n    const [extraMessage, setExtraMessage] = React.useState('');\r\n    // close the flyout after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const msg = intl.formatMessage;\r\n    const numberOfUsersSpan = (<b>\r\n            <FormattedMessage id=\"UserListInvitationFlyoutNumberOfUsersFormat\" defaultMessage=\"{numberOfUsers} user(s) will be invited.\" description=\"Formatted text string that will be composed into UserListInvitationFlyoutTextFormat. {numberOfUsers} is the number of users who will be invited which is greater or equal to 1.\" values={{ numberOfUsers }}/>\r\n        </b>);\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(messages.title)} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                    <Stack.Item>\r\n                        <SubmitButton isSubmitting={isSubmitting} buttonText={msg(commonMessages.send)} onClick={() => onSubmit(extraMessage)}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                            {msg(commonMessages.cancel)}\r\n                        </DefaultButton>\r\n                    </Stack.Item>\r\n                </Stack>)}>\r\n            <div style={{ marginBottom: 30 }}>\r\n                <FormattedMessage id=\"UserListInvitationFlyoutTextFormat\" defaultMessage=\"{numberOfUsersSpan} This email will include a registration link for the lab.\" description=\"Text at the top of flyout dialog to send invitation email to users. {numberOfUsersSpan} is the bolded resolved value of UserListInvitationFlyoutNumberOfUsersFormat.\" values={{ numberOfUsersSpan }}/>\r\n            </div>\r\n            <TextField disabled={isSubmitting} label={msg(messages.label)} autoFocus={true} resizable={false} multiline={true} rows={Constants.LargeTextFieldRows} maxLength={10000} onChange={(_, value) => setExtraMessage(value || '')}/>\r\n        </Panel>);\r\n};\r\nexport const InvitationFlyout = injectIntl(InvitationFlyoutInjected);\r\nexport default InvitationFlyout;\r\n","import * as React from 'react';\r\nimport { Dialog, DialogFooter, PrimaryButton, DefaultButton, Stack, ChoiceGroup } from '@fluentui/react';\r\nimport { injectIntl, FormattedMessage, defineMessages } from 'react-intl';\r\nimport Constants from '../utils/constants';\r\nimport { commonMessages } from '../language/common-messages';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'InviteAllDialogTitle',\r\n        defaultMessage: 'Send invitations',\r\n        description: 'Title for the invite all dialog.',\r\n    },\r\n    sendOnlyUninvited: {\r\n        id: 'InviteAllSendOnlyUninvitedOption',\r\n        defaultMessage: 'Send only to users who have not been invited',\r\n        description: 'Option to send an invite to only uninvited users.',\r\n    },\r\n    sendAll: {\r\n        id: 'InviteAllSendAllOption',\r\n        defaultMessage: 'Send to all users',\r\n        description: 'Option to send an invite to all users, even those who have already been invited.',\r\n    },\r\n});\r\nconst InviteAllDialogInjected = (props) => {\r\n    const { inviteCount, invitedCount, onSubmit, onDismiss, intl } = props;\r\n    const { formatMessage: msg } = intl;\r\n    const isEveryoneAlreadyInvited = inviteCount === invitedCount;\r\n    const [includeAlreadyInvited, setIncludeAlreadyInvited] = React.useState(isEveryoneAlreadyInvited);\r\n    let dialogContent;\r\n    if (isEveryoneAlreadyInvited) {\r\n        const resendInviteBoldSpan = (<b>\r\n                <FormattedMessage id=\"InviteAllDialogResendInviteSpan\" defaultMessage=\"Do you want to resend invitations to all users?\" description=\"Span displayed as content in the invite all dialog when all the users have already been invited. Composed into InviteAllDialogAllInvitedContent.\"/>\r\n            </b>);\r\n        dialogContent = (<FormattedMessage id=\"InviteAllDialogAllInvitedContent\" defaultMessage=\"All users in this lab have already been invited. {resendInviteBoldSpan}\" description=\"Message displayed in the invite all dialog when all users have been invited. {resendInviteBoldSpan} is the resolved value of InviteAllDialogResendInviteSpan.\" values={{ resendInviteBoldSpan }}/>);\r\n    }\r\n    else {\r\n        dialogContent = (<Stack tokens={{ childrenGap: '18px' }}>\r\n                <Stack.Item styles={{ root: { fontSize: '14px', paddingTop: '25px' } }}>\r\n                    <FormattedMessage id=\"InviteAllDialogSomeInvitedMessage\" defaultMessage=\"This lab includes users who have already been invited.\" description=\"Message displayed in the invite all dialog when some but not all of the users have already been invited.\"/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <ChoiceGroup autoFocus defaultSelectedKey=\"sendUninvited\" options={[\r\n            {\r\n                key: 'sendUninvited',\r\n                text: msg(messages.sendOnlyUninvited),\r\n                styles: { root: { paddingBottom: '10px' } },\r\n            },\r\n            { key: 'sendAll', text: msg(messages.sendAll) },\r\n        ]} onChange={(_, value) => value.key === 'sendUninvited'\r\n            ? setIncludeAlreadyInvited(false)\r\n            : setIncludeAlreadyInvited(true)}/>\r\n                </Stack.Item>\r\n            </Stack>);\r\n    }\r\n    return (<Dialog hidden={false} onDismiss={onDismiss} dialogContentProps={{ title: msg(messages.title) }} closeButtonAriaLabel={msg(commonMessages.cancel)} minWidth={isEveryoneAlreadyInvited ? '386px' : '422px'} maxWidth={Constants.DefaultDialogWidth}>\r\n            {dialogContent}\r\n            <DialogFooter styles={{ actions: { paddingTop: '50px' } }}>\r\n                <PrimaryButton text={msg(commonMessages.continue)} onClick={() => onSubmit(includeAlreadyInvited)}/>\r\n                <DefaultButton text={msg(commonMessages.cancel)} onClick={onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const InviteAllDialog = injectIntl(InviteAllDialogInjected);\r\nexport default InviteAllDialog;\r\n","import { DefaultButton, Dialog, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, useIntl } from 'react-intl';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'OpenAccessDialogTitle',\r\n        defaultMessage: 'Switch to open access',\r\n        description: 'Title of the dialog which pops up when user switches a lab to open access mode.',\r\n    },\r\n    dialogMessage: {\r\n        id: 'OpenAccessDialogText',\r\n        defaultMessage: \"Anyone with the registration link will be able to join the lab without being part of your lab's user list.\",\r\n        description: 'Text on the dialog which pops up when user switches a lab to open access mode.',\r\n    },\r\n});\r\nexport const OpenAccessDialog = (props) => {\r\n    const { isSubmitting, onSubmit, onDismiss } = props;\r\n    const intl = useIntl();\r\n    const { formatMessage: msg } = intl;\r\n    // close the dialog after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    return (<Dialog hidden={false} onDismiss={isSubmitting ? undefined : onDismiss} dialogContentProps={{ title: msg(messages.title), subText: msg(messages.dialogMessage) }} closeButtonAriaLabel={msg(commonMessages.cancel)} maxWidth={Constants.DefaultDialogWidth}>\r\n            <Stack horizontal tokens={{ childrenGap: '8px' }} styles={{ root: { width: '100%' } }} verticalAlign=\"end\" horizontalAlign=\"end\">\r\n                <Stack.Item>\r\n                    <SubmitButton default={true} isSubmitting={isSubmitting} buttonText={msg(commonMessages.continue)} onClick={onSubmit}/>\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <DefaultButton disabled={isSubmitting} text={msg(commonMessages.cancel)} onClick={onDismiss} autoFocus={true}/>\r\n                </Stack.Item>\r\n            </Stack>\r\n        </Dialog>);\r\n};\r\nexport default OpenAccessDialog;\r\n","import { DefaultButton, Panel, PanelType, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Field, Form } from 'react-final-form';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport { SafeSpinButton } from '../common/safe-spin-button';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'UserListQuotaFlyoutTitle',\r\n        defaultMessage: 'Quota per user',\r\n        description: 'Title of the flyout dialog to set user specific quota.',\r\n    },\r\n    label: {\r\n        id: 'UserListQuotaLabel',\r\n        defaultMessage: 'Set the number of lab hours available to each user outside of scheduled class time.',\r\n        description: 'Text at the top of flyout dialog to set user specific quota.',\r\n    },\r\n});\r\nconst QuotaFlyoutInjected = (props) => {\r\n    const { isSubmitting, onDismiss, onSubmit, quota: initialQuota, minQuota, maxQuota, intl } = props;\r\n    const msg = intl.formatMessage;\r\n    // close the flyout after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    return (<Form initialValues={{ quota: initialQuota }} onSubmit={(values) => onSubmit(+values.quota)}>\r\n            {(formProps) => (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(messages.title)} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                            <Stack.Item>\r\n                                <SubmitButton default={true} disabled={formProps.pristine || !formProps.valid} isSubmitting={isSubmitting} buttonText={msg(commonMessages.save)} onClick={() => formProps.handleSubmit()}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                                    {msg(commonMessages.cancel)}\r\n                                </DefaultButton>\r\n                            </Stack.Item>\r\n                        </Stack>)}>\r\n                    <Field name=\"quota\">\r\n                        {(fieldProps) => (<SafeSpinButton label={msg(messages.label)} disabled={isSubmitting} autoFocus min={minQuota} max={maxQuota} value={fieldProps.input.value} onChange={fieldProps.input.onChange}/>)}\r\n                    </Field>\r\n                </Panel>)}\r\n        </Form>);\r\n};\r\nexport const QuotaFlyout = injectIntl(QuotaFlyoutInjected);\r\nexport default QuotaFlyout;\r\n","import { Dialog, DialogFooter, PrimaryButton, TextField } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport CopyToClipboardButton from '../common/copy-to-clipboard-button/copy-to-clipboard-button';\r\nimport commonMessages from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'RegistrationLinkDialogTitle',\r\n        defaultMessage: 'User registration',\r\n        description: 'Title of the dialog showing lab registration link.',\r\n    },\r\n    label: {\r\n        id: 'RegistrationLinkDialogLabel',\r\n        defaultMessage: 'Registration link',\r\n        description: 'Label of the registration link text box.',\r\n    },\r\n});\r\nconst RegistrationLinkDialogInjected = (props) => {\r\n    const msg = props.intl.formatMessage;\r\n    return (<Dialog hidden={false} onDismiss={props.onDismiss} dialogContentProps={{ title: msg(messages.title) }} closeButtonAriaLabel={msg(commonMessages.done)} maxWidth={Constants.DefaultDialogWidth}>\r\n            <FormattedMessage id=\"RegistrationLinkDialogText\" defaultMessage=\"Users are added to this lab by registering via the following link and registration code:\" description=\"Text on the dialog showing lab registration link.\"/>\r\n            <TextField name={msg(messages.label)} ariaLabel={msg(messages.label)} readOnly={true} value={props.registrationLink} styles={{ root: { marginTop: 16, maxWidth: '402px' } }}/>\r\n            <CopyToClipboardButton text={props.registrationLink}/>\r\n            <DialogFooter>\r\n                <PrimaryButton text={msg(commonMessages.done)} onClick={props.onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport const RegistrationLinkDialog = injectIntl(RegistrationLinkDialogInjected);\r\nexport default RegistrationLinkDialog;\r\n","export const UserStatus = {\r\n    Failed: 'Failed',\r\n    Deleting: 'Deleting',\r\n    Registered: 'Registered',\r\n    NotRegistered: 'NotRegistered',\r\n    Unknown: '',\r\n};\r\nexport const InviteStatus = {\r\n    NotSent: 'NotSent',\r\n    Sending: 'Sending',\r\n    Sent: 'Sent',\r\n    SendingFailed: 'SendingFailed',\r\n    Unknown: '',\r\n};\r\n","import { defineMessages } from 'react-intl';\r\nexport const messages = defineMessages({\r\n    pageTitle: {\r\n        id: 'UserListPageTitle',\r\n        defaultMessage: 'Users',\r\n        description: 'Users page title.',\r\n    },\r\n    expandUserActionsTooltip: {\r\n        id: 'ExpandUserActionsTooltip',\r\n        defaultMessage: 'Additional actions',\r\n        description: 'Tooltip for menu to expand more user actions',\r\n    },\r\n    restrictAccess: {\r\n        id: 'UserListRestrictAccess',\r\n        defaultMessage: 'Restrict access',\r\n        description: 'Label of restrict access toggle on the user page command bar.',\r\n    },\r\n    restrictAccessTooltip: {\r\n        id: 'UserListAccessModeTooltip',\r\n        defaultMessage: 'When Restrict Access is On, users will be unable to join the lab unless they are part of this user list.\\nWhen Restrict Access is Off, any user with the registration link will be able to join the lab, even if they are not part of your user list.',\r\n        description: \"Tooltip on the 'Restricted access' toggle.\",\r\n    },\r\n    quotaCommandScheduleOnly: {\r\n        id: 'UserListQuotaCommandScheduleOnly',\r\n        defaultMessage: 'Quota per user: schedule only',\r\n        description: 'Name of command on the users page command bar that opens Quota configuration flyout in the state when lab usage is allowed only during scheduled hours.',\r\n    },\r\n    quotaCommandHoursFormat: {\r\n        id: 'UserListQuotaCommandHoursFormat',\r\n        defaultMessage: 'Quota per user: {numberOfHours} hour(s)',\r\n        description: 'Name of command on the users page command bar that opens Quota configuration flyout. {numberOfHours} is number of hours the quota is currently set to.',\r\n    },\r\n    quotaTooltip: {\r\n        id: 'UserListQuotaTooltip',\r\n        defaultMessage: 'Configure a quota to limit the maximum number of virtual machine usage hours allocated to each user.\\nWhen a user reaches this limit, their machine will be stopped and they will be unable to start it again until the quota is increased.\\nScheduled hours are not counted against user quota and machines will still start if scheduled to.',\r\n        description: 'Tooltip on the quota configuration button.',\r\n    },\r\n    addUsersMenu: {\r\n        id: 'UserListAddUsersMenu',\r\n        defaultMessage: 'Add users',\r\n        description: 'Name of Add Users drop-down menu on the users page command bar.',\r\n    },\r\n    addByEmailCommand: {\r\n        id: 'UserListAddByEmailCommand',\r\n        defaultMessage: 'Add by email address',\r\n        description: 'Name of command on users page command bar to invite user(s) using their email address.',\r\n    },\r\n    uploadCsvCommand: {\r\n        id: 'UserListUploadCsvCommand',\r\n        defaultMessage: 'Upload CSV',\r\n        description: 'Name of command on users page command bar to load list of users from a CSV file.',\r\n    },\r\n    uploadCsvTooltip: {\r\n        id: 'UserListUploadCsvTooltip',\r\n        defaultMessage: 'Add multiple users using a CSV file. You can export a CSV file from Excel or create one in a text editor.\\nThe first email address on each line will be imported. You will be able to review and edit the imported list before adding them.\\nFor more information on the CSV file format see https://aka.ms/azlab-csv.',\r\n        description: 'Tooltip on the Upload CSV command',\r\n    },\r\n    inviteAllCommand: {\r\n        id: 'UserListInviteAllCommand',\r\n        defaultMessage: 'Invite all',\r\n        description: 'Name of command on users page command bar to invite all users to the lab.',\r\n    },\r\n    registrationLinkCommand: {\r\n        id: 'UserListRegistrationLinkCommand',\r\n        defaultMessage: 'Registration link',\r\n        description: 'Name of command on users page command bar to display lab registration link.',\r\n    },\r\n    filterUsers: {\r\n        id: 'UserListFilterUsers',\r\n        defaultMessage: 'Filter users',\r\n        description: 'Tooltip on the filter button above user list.',\r\n    },\r\n    inviteCommand: {\r\n        id: 'UserListInviteCommand',\r\n        defaultMessage: 'Invite',\r\n        description: 'Name of command on users page command bar to invite selected users to the lab.',\r\n    },\r\n    emailColumnHeader: {\r\n        id: 'UserListEmailColumnHeader',\r\n        defaultMessage: 'Email',\r\n        description: 'Title for Email column of a table containing user email addresses.',\r\n    },\r\n    statusColumnHeader: {\r\n        id: 'UserListStatusColumnHeader',\r\n        defaultMessage: 'Status',\r\n        description: 'Title for Status column of a table containing user registration statuses.',\r\n    },\r\n    statusFilterSelected: {\r\n        id: 'UserListStatusFilterSelected',\r\n        defaultMessage: 'Status: {selected}',\r\n        description: 'Text for the user status filter when filters are selected. {selected} is a comma separated list of selected user statuses.',\r\n    },\r\n    invitationColumnHeader: {\r\n        id: 'UserListInvitationColumnHeader',\r\n        defaultMessage: 'Invitation',\r\n        description: 'Title for Invitation column of a table containing status of user invite emails.',\r\n    },\r\n    invitationFilterSelected: {\r\n        id: 'UserListInvitationFilterSelected',\r\n        defaultMessage: 'Invitation: {selected}',\r\n        description: 'Text for the invitation status filter when filters are selected. {selected} is a comma separated list of selected invitation statuses.',\r\n    },\r\n    registered: {\r\n        id: 'UserDetailsRegistered',\r\n        defaultMessage: 'Registered',\r\n        description: 'Text for registered user status.',\r\n    },\r\n    notRegistered: {\r\n        id: 'UserDetailsNotRegistered',\r\n        defaultMessage: 'Not registered',\r\n        description: 'Text for \"not registered\" user status.',\r\n    },\r\n    sent: {\r\n        id: 'UserDetailsSent',\r\n        defaultMessage: 'Sent',\r\n        description: 'Text for status of user invitation email that was sent.',\r\n    },\r\n    sentFormat: {\r\n        id: 'UserDetailsSentFormat',\r\n        defaultMessage: 'Sent on {date}',\r\n        description: 'Text for status of user invitation email. {date] is the date when invitation was sent.',\r\n    },\r\n    sending: {\r\n        id: 'UserDetailsSending',\r\n        defaultMessage: 'Sending',\r\n        description: 'Text for status of user invitation email while it is being sent.',\r\n    },\r\n    sendingProgress: {\r\n        id: 'UserDetailsSendingProgress',\r\n        defaultMessage: 'Sending...',\r\n        description: 'Text for indicating sending is in progress.',\r\n    },\r\n    notSent: {\r\n        id: 'UserDetailsNotSent',\r\n        defaultMessage: 'Not sent',\r\n        description: 'Text for status of user invitation email when it has not been sent.',\r\n    },\r\n    sendFailed: {\r\n        id: 'UserDetailsSendFailed',\r\n        defaultMessage: 'Failed',\r\n        description: 'Text for status of user invitation email when it failed to be sent.',\r\n    },\r\n    sendFailedFormat: {\r\n        id: 'UserDetailsSendFailedFormat',\r\n        defaultMessage: 'Failed on {date}',\r\n        description: \"Text for the status of a user's invitation email when it failed to be sent. {date] is the date when send attempt was made.\",\r\n    },\r\n    adjustQuota: {\r\n        id: 'UserDetailsAdjustQuota',\r\n        defaultMessage: 'Adjust quota',\r\n        description: 'Name of the command on the users page command bar for adjusting the additional quota for specific students.',\r\n    },\r\n    textFilterPlaceholder: {\r\n        id: 'UserDetailsTextFilterPlaceholder',\r\n        defaultMessage: 'Filter by name or email',\r\n        description: 'Placeholder text for our text filter that allows filtering of names or emails.',\r\n    },\r\n    userListCheckboxAriaLabel: {\r\n        id: 'UserListCheckboxAriaLabel',\r\n        defaultMessage: 'Select a user',\r\n        description: 'ARIA label for user list row checkboxes.',\r\n    },\r\n    usageCsvColumnName: {\r\n        id: 'UserListUsageCsvColumnName',\r\n        defaultMessage: 'Usage (hours)',\r\n        description: 'Name of usage column in exported CSV file.',\r\n    },\r\n    quotaCsvColumnName: {\r\n        id: 'UserListQuotaCsvColumnName',\r\n        defaultMessage: 'Quota (hours)',\r\n        description: 'Name of quota column in exported CSV file.',\r\n    },\r\n    shimmerAriaLabel: {\r\n        id: 'ShimmerAriaLabel',\r\n        defaultMessage: 'User list is syncing',\r\n        description: 'Aria label when user list is syncing.',\r\n    },\r\n    addUsersManuallyCommand: {\r\n        id: 'UserListAddUsersManuallyCommand',\r\n        defaultMessage: 'Add users manually',\r\n        description: 'Button text to manually add users to the lab.',\r\n    },\r\n    syncFromGroupCommand: {\r\n        id: 'UserListSyncFromGroupCommand',\r\n        defaultMessage: 'Sync from group',\r\n        description: 'Button text to sync lab users from a group.',\r\n    },\r\n    syncNowCommand: {\r\n        id: 'UserListSyncNowCommand',\r\n        defaultMessage: 'Sync now',\r\n        description: 'Button text to sync lab users from a group now.',\r\n    },\r\n});\r\nexport default messages;\r\n","import { DefaultButton, Icon, Panel, PanelType, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport SafeSpinButton from '../common/safe-spin-button';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nimport './user-quota-flyout.css';\r\nconst messages = defineMessages({\r\n    titleSingular: {\r\n        id: 'UserListSingleUserQuotaFlyoutTitle',\r\n        defaultMessage: 'Adjust quota for {name}',\r\n        description: 'Title of the flyout dialog to add additional quota for a single user. {name} is the name of the user.',\r\n    },\r\n    titlePlural: {\r\n        id: 'UserListMultipleUserQuotaFlyoutTitle',\r\n        defaultMessage: 'Adjust quota for {userCount} users',\r\n        description: 'Title of the flyout dialog to add addtional quota for multiple users. {userCount} is the number of users, always greater than 1.',\r\n    },\r\n    inputLabel: {\r\n        id: 'UserListUserQuotaInputLabel',\r\n        defaultMessage: 'Additional hours',\r\n        description: 'Text above the input box for the quota.',\r\n    },\r\n});\r\nconst UserQuotaFlyoutInjected = (props) => {\r\n    const { users, labQuota, isSubmitting, onDismiss, onSubmit, intl } = props;\r\n    // calculate default quota to show when opening flyout - highest value set, or the system default if 0\r\n    const additionalQuotaForUsers = users.map((user) => user.additionalQuota);\r\n    const maxAdditionalQuota = Math.max(...additionalQuotaForUsers);\r\n    const defaultAdditionalQuota = maxAdditionalQuota === 0 ? Constants.DefaultAdditionalUserQuota : maxAdditionalQuota;\r\n    const [additionalQuota, setAdditionalQuota] = React.useState(defaultAdditionalQuota);\r\n    const msg = intl.formatMessage;\r\n    // close the flyout after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const totalQuotaToDisplay = labQuota + additionalQuota;\r\n    let title, description, currentUsageDescription, additionalQuotaLabel, totalQuotaLabel, isOverQuota, warningMessage;\r\n    if (users.length < 1) {\r\n        return null;\r\n    }\r\n    else if (users.length > 1) {\r\n        const userUsage = users.map((user) => user.currentUsage);\r\n        const currentMaxUsage = Math.max(...userUsage);\r\n        isOverQuota = totalQuotaToDisplay <= currentMaxUsage;\r\n        title = msg(messages.titlePlural, {\r\n            userCount: users.length,\r\n        });\r\n        description = (<FormattedMessage id=\"UserListMultipleUserQuotaDescription\" defaultMessage=\"This will set the number of lab hours granted to the selected users (in addition to the quota set for the lab).\" description=\"Text at the top of flyout dialog to add user-level quota for multiple users.\"/>);\r\n        const formattedMaxUsage = props.intl.formatNumber(currentMaxUsage, {\r\n            maximumFractionDigits: 1,\r\n        });\r\n        if (formattedMaxUsage === '1') {\r\n            currentUsageDescription = (<FormattedMessage id=\"UserListMultipleUserQuotaSingularUsageDescription\" defaultMessage=\"The highest usage among the selected users is {maxCurrentUsage} lab hour.\" description=\"Text at the top of flyout dialog to describe the current user usage for 1 hour.\" values={{\r\n                maxCurrentUsage: formattedMaxUsage,\r\n            }}/>);\r\n        }\r\n        else {\r\n            currentUsageDescription = (<FormattedMessage id=\"UserListMultipleUserQuotaPluralUsageDescription\" defaultMessage=\"The highest usage among the selected users is {maxCurrentUsage} lab hours.\" description=\"Text at the top of flyout dialog to describe the current user usage for 0 or multiple hours.\" values={{\r\n                maxCurrentUsage: formattedMaxUsage,\r\n            }}/>);\r\n        }\r\n        additionalQuotaLabel = (<FormattedMessage id=\"UserListUserQuotaFlyoutAdditionalQuotaPluralLabel\" defaultMessage=\"Additional quota for selected users:\" description=\"The label for the new value the user is configuring additional quota to for multiple users.\"/>);\r\n        totalQuotaLabel = (<FormattedMessage id=\"UserListUserQuotaFlyoutTotalQuotaPluralLabel\" defaultMessage=\"Total quota for selected users:\" description=\"The label for the new total quota that the users will have if the user applies this configuration.\"/>);\r\n        warningMessage = (<FormattedMessage id=\"UserListUserQuotaFlyoutWarningPluralLabel\" defaultMessage=\"1 or more users have reached the total quota set above. They won’t be able to access their virtual machine(s) unless you provide additional hours.\" description=\"The warning message for when multiple users are selected and have more usage than total quota.\"/>);\r\n    }\r\n    else {\r\n        const user = users[0];\r\n        const displayName = user.name.length > 0 && user.name !== Constants.DefaultUserName ? user.name : user.email;\r\n        isOverQuota = totalQuotaToDisplay <= user.currentUsage;\r\n        title = msg(messages.titleSingular, {\r\n            name: displayName,\r\n        });\r\n        description = (<FormattedMessage id=\"UserListSingularUserQuotaDescription\" defaultMessage=\"This will set the number of lab hours granted to this user (in addition to the quota set for the lab).\" description=\"Text at the top of flyout dialog to add user-level quota for a single user.\"/>);\r\n        const formattedCurrentUsage = props.intl.formatNumber(user.currentUsage, {\r\n            maximumFractionDigits: 1,\r\n        });\r\n        if (formattedCurrentUsage === '1') {\r\n            currentUsageDescription = (<FormattedMessage id=\"UserListSingularUserQuotaSingularUsageDescription\" defaultMessage=\"This user has currently consumed {currentUsage} lab hour.\" description=\"Text at the top of flyout dialog to add user-level quota for a single user for 1 hour.\" values={{\r\n                currentUsage: formattedCurrentUsage,\r\n            }}/>);\r\n        }\r\n        else {\r\n            currentUsageDescription = (<FormattedMessage id=\"UserListSingularUserQuotaPluralsUsageDescription\" defaultMessage=\"This user has currently consumed {currentUsage} lab hours.\" description=\"Text at the top of flyout dialog to add user-level quota for a single user for 0 or multiple hour.\" values={{\r\n                currentUsage: formattedCurrentUsage,\r\n            }}/>);\r\n        }\r\n        additionalQuotaLabel = (<FormattedMessage id=\"UserListUserQuotaFlyoutAdditionalQuotaSingularLabel\" defaultMessage=\"Additional quota for this user:\" description=\"The label for the new value the user is configuring additional quota to for a single user.\"/>);\r\n        totalQuotaLabel = (<FormattedMessage id=\"UserListUserQuotaFlyoutTotalQuotaSingularsLabel\" defaultMessage=\"Total quota for this user:\" description=\"The label for the new total quota that the users will have if the user applies this configuration.\"/>);\r\n        warningMessage = (<FormattedMessage id=\"UserListUserQuotaFlyoutWarningSingularLabel\" defaultMessage=\"This user has reached the total quota set above. They won’t be able to access their virtual machine unless you provide additional hours.\" description=\"The warning message for when a single user is selected and has more usage than total quota.\"/>);\r\n    }\r\n    const labQuotaValueMessage = labQuota === 1 ? (<FormattedMessage id=\"UserListUserQuotaFlyoutLabQuotaSingularValue\" defaultMessage=\"{labQuota} hour\" description=\"The current value (1) of the lab quota.\" values={{\r\n        labQuota: props.intl.formatNumber(labQuota, {\r\n            maximumFractionDigits: 0,\r\n        }),\r\n    }}/>) : (<FormattedMessage id=\"UserListUserQuotaFlyoutLabQuotaPluralValue\" defaultMessage=\"{labQuota} hours\" description=\"The current value (0 or more than 1) of the lab quota.\" values={{\r\n        labQuota: props.intl.formatNumber(labQuota, {\r\n            maximumFractionDigits: 0,\r\n        }),\r\n    }}/>);\r\n    const additionalQuotaValueMessage = additionalQuota === 1 ? (<FormattedMessage id=\"UserListUserQuotaFlyoutAdditionalQuotaSingularValue\" defaultMessage=\"{additionalQuota} hour\" description=\"The new value (1) the user is configuring additional quota to.\" values={{\r\n        additionalQuota: props.intl.formatNumber(additionalQuota, {\r\n            maximumFractionDigits: 0,\r\n        }),\r\n    }}/>) : (<FormattedMessage id=\"UserListUserQuotaFlyoutAdditionalQuotaMultipleValue\" defaultMessage=\"{additionalQuota} hours\" description=\"The new value (0 or more than 1) the user is configuring additional quota to.\" values={{\r\n        additionalQuota: props.intl.formatNumber(additionalQuota, {\r\n            maximumFractionDigits: 0,\r\n        }),\r\n    }}/>);\r\n    const totalQuotaValueMessage = totalQuotaToDisplay === 1 ? (<FormattedMessage id=\"UserListUserQuotaFlyoutTotalQuotaSingularValue\" defaultMessage=\"{totalQuota} hour\" description=\"The new total quota (1) that the users will have if the user applies this configuration.\" values={{\r\n        totalQuota: props.intl.formatNumber(labQuota + additionalQuota, {\r\n            maximumFractionDigits: 0,\r\n        }),\r\n    }}/>) : (<FormattedMessage id=\"UserListUserQuotaFlyoutTotalQuotaPluralValue\" defaultMessage=\"{totalQuota} hours\" description=\"The new total quota (0 or more than 1) that the users will have if the user applies this configuration.\" values={{\r\n        totalQuota: props.intl.formatNumber(labQuota + additionalQuota, {\r\n            maximumFractionDigits: 0,\r\n        }),\r\n    }}/>);\r\n    return (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={title} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                    <Stack.Item>\r\n                        <SubmitButton default={true} isSubmitting={isSubmitting} buttonText={msg(commonMessages.apply)} onClick={() => onSubmit(additionalQuota)}/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                            {msg(commonMessages.cancel)}\r\n                        </DefaultButton>\r\n                    </Stack.Item>\r\n                </Stack>)}>\r\n            <div className=\"user-quota__description\">{description}</div>\r\n            <div className=\"user-quota__description\">{currentUsageDescription}</div>\r\n            <SafeSpinButton label={msg(messages.inputLabel)} disabled={isSubmitting} autoFocus value={additionalQuota} onChange={setAdditionalQuota} min={Constants.MinAdditionalUserQuota} max={Constants.MaxAdditionalUserQuota}/>\r\n            <div className=\"user-quota__calculation\">\r\n                <span className=\"user-quota__quota-calc-label\">\r\n                    <FormattedMessage id=\"UserListUserQuotaFlyoutLabQuotaLabel\" defaultMessage=\"Lab quota:\" description=\"The label for the current value of the lab quota.\"/>\r\n                </span>\r\n                <span>{labQuotaValueMessage}</span>\r\n            </div>\r\n            <div>\r\n                <span className=\"user-quota__quota-calc-label\">{additionalQuotaLabel}</span>\r\n                <span>{additionalQuotaValueMessage}</span>\r\n            </div>\r\n            <div>\r\n                <span className=\"user-quota__quota-calc-label\">{totalQuotaLabel}</span>\r\n                <span className=\"user-quota__total\">{totalQuotaValueMessage}</span>\r\n            </div>\r\n            {isOverQuota && (<div className=\"user-quota__warning\">\r\n                    <Icon iconName=\"Warning\" className=\"user-quota__warning-icon\" styles={{\r\n        root: {\r\n            fontSize: '16px',\r\n            lineHeight: '19px',\r\n            color: '#D83B01',\r\n        },\r\n    }}/>\r\n                    <span className=\"user-quota__warning-message\">{warningMessage}</span>\r\n                </div>)}\r\n        </Panel>);\r\n};\r\nexport const UserQuotaFlyout = injectIntl(UserQuotaFlyoutInjected);\r\nexport default UserQuotaFlyout;\r\n","import { DefaultButton, Dialog, DialogFooter, PrimaryButton, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport { ClockIcon } from '../common/clock-icon';\r\nimport Constants from '../utils/constants';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'SyncUsersDialogTitle',\r\n        defaultMessage: 'Sync from group',\r\n        description: 'Title of confirmation dialog when syncing users',\r\n    },\r\n});\r\nconst SyncUsersDialog = (props) => {\r\n    const intl = useIntl();\r\n    const msg = intl.formatMessage;\r\n    const { groupName, onSubmit, onDismiss } = props;\r\n    return (<Dialog hidden={false} onDismiss={onDismiss} dialogContentProps={{ title: msg(messages.title) }} closeButtonAriaLabel={msg(commonMessages.cancel)} minWidth={Constants.DefaultDialogWideWidth}>\r\n            <Stack tokens={{ childrenGap: '30px' }}>\r\n                <Stack.Item styles={{ root: { paddingTop: '15px' } }}>\r\n                    {!!groupName && (<FormattedMessage id=\"SyncUsersDialogContent\" defaultMessage='This lab automatically syncs from the group \"<aadGroupName></aadGroupName>\" every 24 hours. If you would like to sync now, it will make the list of users unavailable while the operation is taking place.' description=\"Content of confirmation dialog when syncing users.\" values={{\r\n        aadGroupName: () => <span style={{ fontWeight: 600 }}>{groupName}</span>,\r\n    }}/>)}\r\n                    {!groupName && (<FormattedMessage id=\"SyncUsersDialogContentNoGroupName\" defaultMessage=\"This lab automatically syncs from a group every 24 hours. If you would like to sync now, it will make the list of users unavailable while the operation is taking place.\" description=\"Content of confirmation dialog when syncing users.\"/>)}\r\n                </Stack.Item>\r\n                <Stack.Item>\r\n                    <Stack horizontal tokens={{ childrenGap: 10 }} verticalAlign=\"end\" verticalFill style={{ marginBottom: 20 }}>\r\n                        <Stack.Item>\r\n                            <ClockIcon />\r\n                        </Stack.Item>\r\n                        <Stack.Item styles={{ root: { paddingBottom: '2px' } }}>\r\n                            <FormattedMessage id=\"SyncUsersTimeMessage\" defaultMessage=\"This process can take up to <tenMinutes>10 minutes</tenMinutes>\" values={{\r\n        tenMinutes: (chunks) => <span style={{ fontWeight: 600 }}>{chunks}</span>,\r\n    }}/>\r\n                        </Stack.Item>\r\n                    </Stack>\r\n                </Stack.Item>\r\n            </Stack>\r\n            <DialogFooter styles={{ actions: { marginTop: '27px' } }}>\r\n                <PrimaryButton text={msg(commonMessages.sync)} onClick={onSubmit}/>\r\n                <DefaultButton autoFocus text={msg(commonMessages.cancel)} onClick={onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport default SyncUsersDialog;\r\n","import moment from 'moment-timezone';\r\nimport memoize from 'memoize-one';\r\nimport { Constants } from '../../utils/constants';\r\nexport const getLastGroupSyncRelativeTime = memoize((lab, locale) => {\r\n    const now = moment(new Date()).locale(locale);\r\n    const lastGroupSyncTime = moment(lab.lastGroupSyncTime).locale(locale);\r\n    return lastGroupSyncTime.from(now);\r\n});\r\nexport const getNextGroupSyncTime = memoize((ianaTimeZone, locale) => {\r\n    moment.locale(locale);\r\n    const currentDate = new Date();\r\n    const nowMoment = moment(currentDate).utc();\r\n    const scheduleUtcDate = new Date(Date.UTC(currentDate.getUTCFullYear(), currentDate.getUTCMonth(), currentDate.getUTCDate(), Constants.ScheduledSyncTimeHour, Constants.ScheduledSyncTimeMinute));\r\n    // if the sync job scheduled on today has already happened, use the next day\r\n    if (moment(scheduleUtcDate).diff(nowMoment) <= 0) {\r\n        const adjustedScheduleDate = new Date(Date.UTC(currentDate.getUTCFullYear(), currentDate.getUTCMonth(), currentDate.getUTCDate() + 1, Constants.ScheduledSyncTimeHour, Constants.ScheduledSyncTimeMinute));\r\n        return moment.tz(adjustedScheduleDate, ianaTimeZone).format('LT z');\r\n    }\r\n    return moment.tz(scheduleUtcDate, ianaTimeZone).format('LT z');\r\n});\r\n","import * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nimport { getLastGroupSyncRelativeTime } from './selectors/group-sync-time-selectors';\r\nimport InfoTip from './info-tip';\r\nexport const GroupSyncTimeInfo = (props) => {\r\n    const { groupName, lab, locale } = props;\r\n    return (<>\r\n            {!!groupName && (<FormattedMessage {...commonMessages.lastUserListGroupSyncTime} values={{\r\n        aadGroupName: () => <span style={{ fontWeight: 600 }}>{groupName}</span>,\r\n        lastGroupSyncRelativeTime: getLastGroupSyncRelativeTime(lab, locale),\r\n    }}/>)}\r\n            {!groupName && (<FormattedMessage id=\"lastUserListGroupSyncTimeNoGroupName\" defaultMessage=\"Last synced from a group {lastGroupSyncRelativeTime}\" description=\"Description about last user list group sync time\" values={{\r\n        lastGroupSyncRelativeTime: getLastGroupSyncRelativeTime(lab, locale),\r\n    }}/>)}\r\n\r\n            <InfoTip {...props}/>\r\n        </>);\r\n};\r\nexport default GroupSyncTimeInfo;\r\n","import { Announced, CheckboxVisibility, CommandBar, ContextualMenuItemType, DefaultButton, DetailsListLayoutMode, DirectionalHint, Icon, IconButton, MarqueeSelection, MessageBar, MessageBarType, PersonaCoin, PersonaSize, ScrollablePane, ScrollbarVisibility, SearchBox, Selection, SelectionMode, ShimmeredDetailsList, Stack, Sticky, StickyPositionType, Text, TooltipHost, } from '@fluentui/react';\r\nimport { createObjectCsvStringifier } from 'csv-writer';\r\nimport _ from 'lodash';\r\nimport memoize from 'memoize-one';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport CommandButtonToolTip from '../common/command-button-tooltip';\r\nimport { FileUploadButton } from '../common/file-upload-button';\r\nimport { getNavigationItems } from '../common/lab-nav-items';\r\nimport { LoadingContainer } from '../common/loading-section';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport ToggleToolTip from '../common/toggle-tooltip';\r\nimport { VmUsageColumn, VmUsageProgressColumn } from '../common/vm/vm-usage-column';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport { LabErrorBanner } from '../lab/lab-error-banner';\r\nimport commonMessages from '../language/common-messages';\r\nimport { shortenNumber } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nimport { isValidEmail } from '../utils/emails';\r\nimport { createAndDownloadFile } from '../utils/files';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport { objectKeySorter } from '../utils/sorting';\r\nimport { AddUsersFlyout as AddUsersFlyoutNew } from './add-users-flyout-new';\r\nimport SyncFromGroupFlyout from './sync-from-group-flyout';\r\nimport DeleteUsersDialog from './delete-users-dialog';\r\nimport InvitationFlyout from './invitation-flyout';\r\nimport { InviteAllDialog } from './invite-all-dialog';\r\nimport OpenAccessDialog from './open-access-dialog';\r\nimport QuotaFlyout from './quota-flyout';\r\nimport RegistrationLinkDialog from './registration-link-dialog';\r\nimport { InviteStatus, UserStatus } from './user-list-models';\r\nimport { messages as userListCommonMessages } from './user-list-messages';\r\nimport { UserQuotaFlyout } from './user-quota-flyout';\r\nimport SyncUsersDialog from './sync-users-dialog';\r\nimport GroupSyncTimeInfo from '../common/group-sync-time-info';\r\nimport { getNextGroupSyncTime } from '../common/selectors/group-sync-time-selectors';\r\nimport messages from './user-list-messages';\r\nimport SyncingSpinner from '../common/syncing-spinner';\r\nimport './user-list.css';\r\nclass UserListInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.onUserPropsChange = memoize((users, previousSelectedIds) => {\r\n            const selectedIds = [];\r\n            const selectedItems = [];\r\n            const deleteSelectTarget = [];\r\n            const inviteSelectTarget = [];\r\n            const quotaSelectTarget = [];\r\n            // logic for updating our selections when the list changes\r\n            users.forEach((user) => {\r\n                const { id } = user;\r\n                if (previousSelectedIds.indexOf(id) > -1) {\r\n                    selectedIds.push(id);\r\n                    selectedItems.push(user);\r\n                    const { canDelete, canInvite, canInviteAgain, canAddQuota } = user;\r\n                    if (canDelete) {\r\n                        deleteSelectTarget.push(id);\r\n                    }\r\n                    if (canInvite || canInviteAgain) {\r\n                        inviteSelectTarget.push(id);\r\n                    }\r\n                    if (canAddQuota) {\r\n                        quotaSelectTarget.push(id);\r\n                    }\r\n                }\r\n            });\r\n            this.setState({\r\n                selectedCount: selectedIds.length,\r\n                selectedIds,\r\n                deleteSelectTarget,\r\n                inviteSelectTarget,\r\n                quotaSelectTarget,\r\n            });\r\n            return selectedItems;\r\n        });\r\n        this.filterAndSortUsers = memoize((users, selectedIds, // used purely for memoization\r\n        filterText, filterUserStatus, filterInviteStatus, sortByColumn, isSortDescending, sorterStateMap) => {\r\n            const filteredItems = users\r\n                .filter((user) => (!filterText ||\r\n                user.name.toLowerCase().includes(filterText.toLowerCase()) ||\r\n                user.email.toLowerCase().includes(filterText.toLowerCase())) &&\r\n                (filterUserStatus.length < 1 || filterUserStatus.indexOf(user.status) > -1) &&\r\n                (filterInviteStatus.length < 1 || filterInviteStatus.indexOf(user.inviteStatus) > -1))\r\n                .toArray();\r\n            const key = sortByColumn;\r\n            const sorter = objectKeySorter(key, isSortDescending, sorterStateMap);\r\n            const sortedItems = filteredItems.sort(sorter);\r\n            return sortedItems;\r\n        });\r\n        // Handles Export to CSV command\r\n        this._onExportClicked = () => {\r\n            const { userListViewModel, intl } = this.props;\r\n            const { users } = userListViewModel;\r\n            const msg = intl.formatMessage;\r\n            const userStatusMap = this._buildUserStatusMap();\r\n            const inviteStatusMap = this._buildInviteStatusMap();\r\n            const writer = createObjectCsvStringifier({\r\n                header: [\r\n                    { id: 'email', title: msg(messages.emailColumnHeader) },\r\n                    { id: 'name', title: msg(commonMessages.nameColumnHeader) },\r\n                    { id: 'status', title: msg(messages.statusColumnHeader) },\r\n                    { id: 'inviteStatus', title: msg(messages.invitationColumnHeader) },\r\n                    { id: 'currentUsage', title: msg(messages.usageCsvColumnName) },\r\n                    { id: 'totalQuota', title: msg(messages.quotaCsvColumnName) },\r\n                ],\r\n            });\r\n            const records = users\r\n                .map((o) => ({\r\n                email: o.email,\r\n                name: o.name,\r\n                status: userStatusMap[o.status],\r\n                inviteStatus: inviteStatusMap[o.inviteStatus],\r\n                currentUsage: o.currentUsage,\r\n                totalQuota: o.totalQuota,\r\n            }))\r\n                .toArray();\r\n            const csv = writer.getHeaderString() + writer.stringifyRecords(records);\r\n            createAndDownloadFile(`${msg(userListCommonMessages.pageTitle)}.csv`, csv, true);\r\n        };\r\n        this.announce = [];\r\n        this._buildInviteStatusMap = this._buildInviteStatusMap.bind(this);\r\n        this._buildUserStatusMap = this._buildUserStatusMap.bind(this);\r\n        this._renderListHeader = this._renderListHeader.bind(this);\r\n        this._renderDefaultCommandBar = this._renderDefaultCommandBar.bind(this);\r\n        this._renderFilterBar = this._renderFilterBar.bind(this);\r\n        this._renderSelectionCommandBar = this._renderSelectionCommandBar.bind(this);\r\n        this._createColumns = this._createColumns.bind(this);\r\n        this._onAccessDialogSubmit = this._onAccessDialogSubmit.bind(this);\r\n        this._onAccessModeToggle = this._onAccessModeToggle.bind(this);\r\n        this._onAddUsersFlyoutSubmit = this._onAddUsersFlyoutSubmit.bind(this);\r\n        this._onClearInviteStatusFilter = this._onClearInviteStatusFilter.bind(this);\r\n        this._onClearUserStatusFilter = this._onClearUserStatusFilter.bind(this);\r\n        this._onCloseFilter = this._onCloseFilter.bind(this);\r\n        this._onColumnClick = this._onColumnClick.bind(this);\r\n        this._onCsvFileUpload = this._onCsvFileUpload.bind(this);\r\n        this._onDeleteDialogSubmit = this._onDeleteDialogSubmit.bind(this);\r\n        this._onFilterInviteStatusChange = this._onFilterInviteStatusChange.bind(this);\r\n        this._onFilterTextChange = this._onFilterTextChange.bind(this);\r\n        this._onFilterUserStatusChange = this._onFilterUserStatusChange.bind(this);\r\n        this._onInvitationFlyoutSubmit = this._onInvitationFlyoutSubmit.bind(this);\r\n        this._onOpenFilter = this._onOpenFilter.bind(this);\r\n        this._onQuotaFlyoutSubmit = this._onQuotaFlyoutSubmit.bind(this);\r\n        this._onRenderNameColumn = this._onRenderNameColumn.bind(this);\r\n        this._onRenderUploadCsv = this._onRenderUploadCsv.bind(this);\r\n        this._getFilterText = this._getFilterText.bind(this);\r\n        this._getQuotaCommandName = this._getQuotaCommandName.bind(this);\r\n        this._onDismissInviteAllDialog = this._onDismissInviteAllDialog.bind(this);\r\n        this._onSubmitInviteAllDialog = this._onSubmitInviteAllDialog.bind(this);\r\n        this._onInviteAllClicked = this._onInviteAllClicked.bind(this);\r\n        this._onInviteClicked = this._onInviteClicked.bind(this);\r\n        this._onLabQuotaClicked = this._onLabQuotaClicked.bind(this);\r\n        this._onUserQuotaClicked = this._onUserQuotaClicked.bind(this);\r\n        this._onDeleteUserClicked = this._onDeleteUserClicked.bind(this);\r\n        this._onRenderRow = this._onRenderRow.bind(this);\r\n        this._onSyncUsersDialogSubmit = this._onSyncUsersDialogSubmit.bind(this);\r\n        this._selection = new Selection({\r\n            onSelectionChanged: () => {\r\n                const selectedIds = this._selection.getSelection().map((item) => item.key);\r\n                this.onUserPropsChange(this.props.userListViewModel.users, selectedIds);\r\n            },\r\n        });\r\n        this.state = {\r\n            showFilter: false,\r\n            showOpenAccessDialog: false,\r\n            showRegistrationLinkDialog: false,\r\n            showDeleteUsersDialog: false,\r\n            showInviteAllDialog: false,\r\n            showSyncUsersDialog: false,\r\n            showAddUsersFlyout: false,\r\n            showSyncFromGroupFlyout: false,\r\n            showInvitationFlyout: false,\r\n            showQuotaFlyout: false,\r\n            showUserQuotaFlyout: false,\r\n            addUserEmails: '',\r\n            selectedCount: 0,\r\n            selectedIds: [],\r\n            hoveredId: '',\r\n            deleteSelectTarget: [],\r\n            inviteSelectTarget: [],\r\n            quotaSelectTarget: [],\r\n            inviteIds: [],\r\n            filterText: '',\r\n            filterUserStatus: [],\r\n            filterInviteStatus: [],\r\n            sortByColumn: 'nameSortValue',\r\n            isSortDescending: false,\r\n            hasEmptyCsvFileError: false,\r\n        };\r\n    }\r\n    // This method is deprecated, but it is the\r\n    // most efficient way to reset our selections\r\n    // If this method is removed in a subsequent React release\r\n    // we'll need to re-evaluate this behavior\r\n    UNSAFE_componentWillReceiveProps(nextProps) {\r\n        const { users } = nextProps.userListViewModel;\r\n        const { selectedIds } = this.state;\r\n        // onUserPropsChange re-calculates our state and then returns the items that should be selected\r\n        // and is memoized for perf\r\n        const selectedItems = this.onUserPropsChange(users, selectedIds);\r\n        // clear our selections and then reselect them\r\n        this._selection.setItems(selectedItems, true);\r\n        if (selectedItems.length === users.count()) {\r\n            this._selection.setAllSelected(true);\r\n        }\r\n        else {\r\n            this._selection.setAllSelected(false);\r\n            selectedItems.forEach((item) => {\r\n                this._selection.setKeySelected(item.key, true, false);\r\n            });\r\n        }\r\n    }\r\n    render() {\r\n        const { userListViewModel, intl, clearLabUpdateError, clearAddUsersError, clearDeleteUsersError, clearInviteUsersError, clearUpdateAdditionalQuotaForUsersError, navigateRoute, } = this.props;\r\n        const { showAddUsersFlyout, showSyncFromGroupFlyout, showDeleteUsersDialog, showFilter, showInvitationFlyout, showOpenAccessDialog, showQuotaFlyout, showUserQuotaFlyout, showRegistrationLinkDialog, showInviteAllDialog, showSyncUsersDialog, selectedCount, selectedIds, deleteSelectTarget, inviteIds, filterText, filterInviteStatus, filterUserStatus, sortByColumn, isSortDescending, } = this.state;\r\n        const { lab, groupId, users, isSyncing, isReadOnly, isGroupSyncModeEnabled, groupName, labQuota, isRestricted, registrationLink, groups, isAdding, isDeleting, isInviting, isUpdatingLab, isUpdatingUsers, labUpdateError, hasAddErrors, hasDeleteErrors, hasInviteErrors, hasUpdateErrors, isLoadingGroups, isTeamsOrLmsIntegrationEnabled, isLoading, hasLoadError, ianaTimezone, locale, isLabLmsConnected, shouldDisableLabUpdate, } = userListViewModel;\r\n        const msg = intl.formatMessage;\r\n        const { primaryBackgroundColor, pageTitleStyle, primaryCommandBarStyles, shimmeredUserListStyles, } = getCustomTheme();\r\n        if (hasLoadError) {\r\n            const navigationItems = isTeamsOrLmsIntegrationEnabled && lab && lab.id\r\n                ? getNavigationItems(intl, lab.id, LabNavKeys.Users, navigateRoute)\r\n                : undefined;\r\n            return (<div id=\"user-list-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                    <div id=\"user-list-content\">\r\n                        {navigationItems && (<div id=\"user-list-header\">\r\n                                <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                            </div>)}\r\n                        <FullPageMessage image=\"error-general\" message={<FormattedMessage id=\"UserListLoadError\" defaultMessage=\"Cannot load lab users\" description=\"Error shown on the user list page when it fails to load necessary data from the server.\"/>} messageDetails={<FormattedMessage id=\"UserListLoadErrorDetails\" defaultMessage=\"Your lab does not appear to be in a state to view or edit users at this time. Please try again later or contact your Lab Services administator for assistance.\" description=\"Error shown on the user list page when it fails to load necessary data from the server.\"/>}/>\r\n                    </div>\r\n                </div>);\r\n        }\r\n        if (isLoading) {\r\n            const navigationItems = isTeamsOrLmsIntegrationEnabled && lab && lab.id\r\n                ? getNavigationItems(intl, lab.id, LabNavKeys.Users, navigateRoute)\r\n                : undefined;\r\n            return (<div id=\"user-list-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                    <div id=\"user-list-content\">\r\n                        {navigationItems && (<div id=\"user-list-header\">\r\n                                <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                            </div>)}\r\n                        <LoadingContainer />\r\n                    </div>\r\n                </div>);\r\n        }\r\n        const userStatusMap = this._buildUserStatusMap();\r\n        const inviteStatusMap = this._buildInviteStatusMap();\r\n        const columns = this._createColumns(sortByColumn, isSortDescending, userStatusMap, inviteStatusMap, locale, isLabLmsConnected);\r\n        let sorterStateMap = undefined;\r\n        if (sortByColumn === 'status') {\r\n            sorterStateMap = userStatusMap;\r\n        }\r\n        else if (sortByColumn === 'inviteStatus') {\r\n            sorterStateMap = inviteStatusMap;\r\n        }\r\n        const sortedItems = this.filterAndSortUsers(users, selectedIds, filterText, filterUserStatus, filterInviteStatus, sortByColumn, isSortDescending, sorterStateMap);\r\n        const detailsList = (<ShimmeredDetailsList data-is-scrollable=\"true\" items={sortedItems} columns={columns} selectionMode={isReadOnly || isSyncing ? SelectionMode.none : SelectionMode.multiple} getKey={isSyncing ? undefined : (item) => item.id} setKey=\"set\" layoutMode={DetailsListLayoutMode.justified} isHeaderVisible={true} selection={this._selection} onRenderDetailsHeader={this._renderListHeader} onRenderRow={this._onRenderRow} enterModalSelectionOnTouch={true} ariaLabelForSelectionColumn={msg(commonMessages.toggleSelection)} ariaLabelForSelectAllCheckbox={msg(commonMessages.toggleAllSelection)} checkButtonAriaLabel={msg(messages.userListCheckboxAriaLabel)} checkboxVisibility={CheckboxVisibility.always} compact={false} enableShimmer={isSyncing} ariaLabelForShimmer={msg(messages.shimmerAriaLabel)} styles={shimmeredUserListStyles} className={'user-list__details-list'}/>);\r\n        return (<>\r\n                {this.announce}\r\n                <div id=\"user-list-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                    <div id=\"user-list-content\">\r\n                        <div id=\"user-list-header\">\r\n                            <LabErrorBanner updateError={labUpdateError} clearUpdateError={clearLabUpdateError}/>\r\n                            {hasAddErrors && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearAddUsersError()}>\r\n                                    <FormattedMessage id=\"UserListAddUsersError\" defaultMessage=\"An error occurred while adding users to the lab.\" description=\"Message shown when an error occurs while adding users to the lab.\"/>\r\n                                </MessageBar>)}\r\n                            {hasDeleteErrors && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearDeleteUsersError()}>\r\n                                    <FormattedMessage id=\"UserListDeleteUsersError\" defaultMessage=\"An error occurred while deleting users from the lab.\" description=\"Message shown when an error occurs while deleting users from the lab.\"/>\r\n                                </MessageBar>)}\r\n                            {hasInviteErrors && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearInviteUsersError()}>\r\n                                    <FormattedMessage id=\"UserListInviteUsersError\" defaultMessage=\"An error occurred while inviting users to the lab.\" description=\"Message shown when error an occurs while inviting users to the lab.\"/>\r\n                                </MessageBar>)}\r\n                            {hasUpdateErrors && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearUpdateAdditionalQuotaForUsersError()}>\r\n                                    <FormattedMessage id=\"UserListUpdateUsersError\" defaultMessage=\"An error occurred while adding quota to one or more users.\" description=\"Message shown when an error occurs while adding additional quota to users.\"/>\r\n                                </MessageBar>)}\r\n                            {selectedCount > 0 ? this._renderSelectionCommandBar() : this._renderDefaultCommandBar()}\r\n                            {showFilter && this._renderFilterBar(users, userStatusMap, inviteStatusMap)}\r\n                            {(users.size > 0 || (!!groupId && isSyncing)) && (<>\r\n                                    <h1 style={pageTitleStyle}>\r\n                                        <FormattedMessage {...userListCommonMessages.pageTitle}/>\r\n                                    </h1>\r\n                                    <Stack style={{\r\n            marginLeft: '32px',\r\n            marginRight: '8px',\r\n            marginTop: '11px',\r\n            marginBottom: '25px',\r\n        }}>\r\n                                        <Stack.Item>\r\n                                            {isSyncing && (<SyncingSpinner groupName={groupName} styles={{\r\n            root: { justifyContent: 'initial' },\r\n            label: { fontSize: '14px', verticalAlign: 'center' },\r\n        }}/>)}\r\n                                        </Stack.Item>\r\n                                        {isGroupSyncModeEnabled && !isSyncing && lab && lab.lastGroupSyncTime && (<Stack.Item>\r\n                                                <GroupSyncTimeInfo groupName={groupName} locale={locale} lab={lab} content={<FormattedMessage id=\"UserListListNextUserGroupSyncTime\" defaultMessage=\"The user list will automatically sync from the group every 24 hours. The next sync will occur at {nextGroupSyncTime}.\" description=\"Info tip about automatic sync and next sync time\" values={{\r\n            nextGroupSyncTime: getNextGroupSyncTime(ianaTimezone, locale),\r\n        }}/>} tooltipProps={{ maxWidth: '237px' }}/>\r\n                                            </Stack.Item>)}\r\n                                        <Stack.Item>\r\n                                            <FormattedMessage id=\"UserListQuotaDescription\" defaultMessage=\"Quota available for each user includes the lab quota and the user quota. This does not include hours consumed during schedule events.\" description=\"Description about quota.\"/>\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                </>)}\r\n                        </div>\r\n                        {users.size === 0 && !isSyncing ? (!!groupId ? (<Stack id=\"user-list-body\" horizontalAlign=\"center\" styles={{ root: { paddingTop: '27px' } }} verticalFill>\r\n                                    <Icon iconName=\"users\" styles={{ root: { marginBottom: 20 } }}/>\r\n                                    <b>\r\n                                        <FormattedMessage id=\"UserListNewNoUsersInGroupMessage\" defaultMessage=\"No users have been added to the group.\" description=\"Message shown on the users page when no users have yet been added to the group attached to the lab.\"/>\r\n                                    </b>\r\n                                    <div style={{ maxWidth: 610, marginBottom: 25, textAlign: 'center' }}>\r\n                                        <FormattedMessage id=\"UserListNewNoUsersInGroupDescription\" defaultMessage='No users have been added to the group. This lab has been set to sync from \"{groupName}\", which contains no users. Once users have been added to the group, they will be added to the lab when it syncs.' description=\"Explanation shown on the users page when no users have yet been added to the attached group. {groupName} is the name of the users aadGroup being inserted and should not be localized.\" values={{\r\n            groupName: <span style={{ fontWeight: 600 }}>{groupName}</span>,\r\n        }}/>\r\n                                    </div>\r\n                                    <div style={{ maxWidth: 610, marginBottom: 25, textAlign: 'center' }}>\r\n                                        <FormattedMessage id=\"UserListEmptyListNextUserGroupSyncTime\" defaultMessage=\"The next automatic sync will occur at {nextGroupSyncTime}, or you can sync manually\" description=\"Info message about automatic sync and next sync time. {nextGroupSyncTime} is the time of the next group sync being inserted and should not be localized.\" values={{\r\n            nextGroupSyncTime: getNextGroupSyncTime(ianaTimezone, locale),\r\n        }}/>\r\n                                    </div>\r\n                                    <div>\r\n                                        <DefaultButton text={msg(messages.syncNowCommand)} style={{\r\n            marginRight: '4px',\r\n        }} onClick={() => this.setState({ showSyncUsersDialog: true })} disabled={!!shouldDisableLabUpdate}/>\r\n                                    </div>\r\n                                </Stack>) : isRestricted ? (<Stack id=\"user-list-body\" horizontalAlign=\"center\" styles={{ root: { paddingTop: '27px' } }} verticalFill>\r\n                                    <Icon iconName=\"users\" styles={{ root: { marginBottom: 20 } }}/>\r\n                                    <b>\r\n                                        <FormattedMessage id=\"UserListNewNoUsersMessage\" defaultMessage=\"No users have been added.\" description=\"Message shown on the users page when no users have yet been added.\"/>\r\n                                    </b>\r\n                                    <div style={{ maxWidth: 610, marginBottom: 25, textAlign: 'center' }}>\r\n                                        <FormattedMessage id=\"UserListNewNoUsersDescription\" defaultMessage=\"The user list for a lab can be managed manually, or set to sync from an existing group within your organization. <b>This choice will determine how users are managed in this lab.</b>\" description=\"Message shown on the users page when no users have yet been added.\" values={{\r\n            b: (chunks) => <b>{chunks}</b>,\r\n        }}/>\r\n                                    </div>\r\n                                    <div>\r\n                                        <DefaultButton text={msg(messages.addUsersManuallyCommand)} style={{\r\n            marginRight: '4px',\r\n        }} onClick={() => this.setState({\r\n            showAddUsersFlyout: true,\r\n            addUserEmails: '',\r\n            hasEmptyCsvFileError: false,\r\n        })} disabled={!!shouldDisableLabUpdate}/>\r\n                                        <DefaultButton text={msg(messages.syncFromGroupCommand)} style={{\r\n            marginLeft: '4px',\r\n        }} onClick={() => this.setState({\r\n            showSyncFromGroupFlyout: true,\r\n        })} disabled={!!shouldDisableLabUpdate}/>\r\n                                    </div>\r\n                                </Stack>) : (<Stack id=\"user-list-body\" horizontalAlign=\"center\" styles={{ root: { paddingTop: '27px' } }} verticalFill>\r\n                                    <Icon iconName=\"users\" styles={{ root: { marginBottom: 20 } }}/>\r\n                                    <b>\r\n                                        <FormattedMessage id=\"UserListNewNoUsersUnrestrictedMessage\" defaultMessage=\"No users have joined the lab.\" description=\"Message shown on the users page when no users have joined the unrestricted lab.\"/>\r\n                                    </b>\r\n                                    <div style={{ maxWidth: 610, marginBottom: 25, textAlign: 'center' }}>\r\n                                        <FormattedMessage id=\"UserListNewNoUsersUnrestrictedDescription\" defaultMessage=\"No users have joined the lab. This lab has been set to unrestricted access, so any user with the registration link can join. You can also add specific users by selecing “<b>add users</b>” above.\" description=\"Message shown on the users page when no users have joined the unrestricted lab.\" values={{\r\n            b: (chunks) => <b>{chunks}</b>,\r\n        }}/>\r\n                                    </div>\r\n                                </Stack>)) : (<ScrollablePane id=\"user-list-body\" className=\"vertical-scrollable-content\" scrollbarVisibility={ScrollbarVisibility.auto}>\r\n                                <div id=\"user-details-list-container\">\r\n                                    {isReadOnly && <>{detailsList}</>}\r\n                                    {!isReadOnly && (<MarqueeSelection selection={this._selection}>\r\n                                            {detailsList}\r\n                                        </MarqueeSelection>)}\r\n                                </div>\r\n                            </ScrollablePane>)}\r\n                    </div>\r\n                </div>\r\n                {showOpenAccessDialog && (<OpenAccessDialog onSubmit={() => this._onAccessDialogSubmit()} isSubmitting={isUpdatingLab} onDismiss={() => this.setState({ showOpenAccessDialog: false })}/>)}\r\n                {showRegistrationLinkDialog && (<RegistrationLinkDialog registrationLink={registrationLink} onDismiss={() => this.setState({ showRegistrationLinkDialog: false })}/>)}\r\n                {showDeleteUsersDialog && (<DeleteUsersDialog numberOfUsers={deleteSelectTarget.length} isSubmitting={isDeleting} onSubmit={() => this._onDeleteDialogSubmit()} onDismiss={() => this.setState({ showDeleteUsersDialog: false })}/>)}\r\n                {showAddUsersFlyout && (<AddUsersFlyoutNew isSubmitting={isAdding} onSubmit={(emails) => this._onAddUsersFlyoutSubmit(emails)} onDismiss={() => this.setState({ showAddUsersFlyout: false })}/>)}\r\n                {showSyncFromGroupFlyout && (<SyncFromGroupFlyout groups={groups} isLoadingGroups={isLoadingGroups} isSubmitting={isUpdatingLab} onSubmit={(group, isDeletionExternallyManaged) => this._onSyncFromGroupFlyoutSubmit(group, isDeletionExternallyManaged)} onDismiss={() => this.setState({ showSyncFromGroupFlyout: false })} searchGroups={(filterText) => this._onSyncFromGroupFlyoutSearchForGroups(filterText)}/>)}\r\n                {showInviteAllDialog && (<InviteAllDialog inviteCount={users.count((u) => u.canInvite || u.canInviteAgain)} invitedCount={users.count((u) => u.canInviteAgain)} onDismiss={this._onDismissInviteAllDialog} onSubmit={this._onSubmitInviteAllDialog}/>)}\r\n                {showInvitationFlyout && (<InvitationFlyout numberOfUsers={inviteIds.length} isSubmitting={isInviting} onSubmit={(extraMessage) => this._onInvitationFlyoutSubmit(extraMessage)} onDismiss={() => this.setState({ showInvitationFlyout: false })}/>)}\r\n                {showSyncUsersDialog && (<SyncUsersDialog groupName={groupName} onSubmit={() => this._onSyncUsersDialogSubmit()} onDismiss={() => this.setState({ showSyncUsersDialog: false })}/>)}\r\n                {showQuotaFlyout && (<QuotaFlyout minQuota={0} maxQuota={Constants.MaxLabQuota} quota={labQuota} isSubmitting={isUpdatingLab} onSubmit={(quota) => this._onQuotaFlyoutSubmit(quota)} onDismiss={() => this.setState({ showQuotaFlyout: false })}/>)}\r\n                {showUserQuotaFlyout && (<UserQuotaFlyout users={this._getSelectedUsers()} labQuota={labQuota} isSubmitting={isUpdatingUsers} onSubmit={(quota) => this._onUserQuotaFlyoutSubmit(quota)} onDismiss={() => this.setState({ showUserQuotaFlyout: false })}/>)}\r\n            </>);\r\n    }\r\n    _buildUserStatusMap() {\r\n        const msg = this.props.intl.formatMessage;\r\n        const deleting = msg(commonMessages.deletingState);\r\n        const notRegistered = msg(messages.notRegistered);\r\n        const registered = msg(messages.registered);\r\n        const unknown = msg(commonMessages.unknownState);\r\n        const failed = msg(commonMessages.failedState);\r\n        const map = {};\r\n        map[UserStatus.Deleting] = deleting;\r\n        map[UserStatus.NotRegistered] = notRegistered;\r\n        map[UserStatus.Registered] = registered;\r\n        map[UserStatus.Unknown] = unknown;\r\n        map[UserStatus.Failed] = failed;\r\n        return map;\r\n    }\r\n    _buildInviteStatusMap() {\r\n        const msg = this.props.intl.formatMessage;\r\n        const notSent = msg(messages.notSent);\r\n        const sending = msg(messages.sending);\r\n        const sendingFailed = msg(messages.sendFailed);\r\n        const sent = msg(messages.sent);\r\n        const unknown = msg(commonMessages.unknownState);\r\n        const map = {};\r\n        map[InviteStatus.NotSent] = notSent;\r\n        map[InviteStatus.Sending] = sending;\r\n        map[InviteStatus.SendingFailed] = sendingFailed;\r\n        map[InviteStatus.Sent] = sent;\r\n        map[InviteStatus.Unknown] = unknown;\r\n        return map;\r\n    }\r\n    _onRenderRow(props, defaultRender) {\r\n        const { detailsRowStyles } = getCustomTheme();\r\n        return (<div className=\"user-list__row\" onMouseEnter={() => this.setState({ hoveredId: props.item.key })} onMouseLeave={() => this.setState({ hoveredId: '' })}>\r\n                {defaultRender({\r\n            ...props,\r\n            // Define row style in DetailsList does not work, so applying style when rendering row.\r\n            styles: detailsRowStyles,\r\n        })}\r\n            </div>);\r\n    }\r\n    _renderListHeader(props, defaultRender) {\r\n        const { detailsHeaderStyles } = getCustomTheme();\r\n        return (<Sticky stickyPosition={StickyPositionType.Header} isScrollSynced={true}>\r\n                {defaultRender({\r\n            ...props,\r\n            onRenderColumnHeaderTooltip: (tooltipHostProps) => (<TooltipHost {...tooltipHostProps}/>),\r\n            // Define row style in DetailsList does not work, so applying style when rendering list header.\r\n            styles: detailsHeaderStyles,\r\n        })}\r\n            </Sticky>);\r\n    }\r\n    // Renders default command bar shown when there is no selection\r\n    _renderDefaultCommandBar() {\r\n        const { intl, userListViewModel, navigateRoute } = this.props;\r\n        const { isTeamsOrLmsIntegrationEnabled } = userListViewModel;\r\n        const { isRestricted, isReadOnly, isGroupSyncModeEnabled, isLabTeamsOrLmsConnected, lab, isSyncing, isUpdatingLab, shouldDisableLabUpdate, users, groupId, } = userListViewModel;\r\n        const { showFilter } = this.state;\r\n        const msg = intl.formatMessage;\r\n        const { primaryCommandBarStyles, primaryCommandButtonStyles } = getCustomTheme();\r\n        let items = [];\r\n        let farItems = [];\r\n        const exportItem = {\r\n            key: 'export',\r\n            text: msg(commonMessages.exportToCsv),\r\n            iconProps: { iconName: 'Export' },\r\n            onClick: this._onExportClicked,\r\n        };\r\n        const filterItem = {\r\n            key: 'filter',\r\n            text: msg(messages.filterUsers),\r\n            ariaLabel: msg(messages.filterUsers),\r\n            'aria-expanded': showFilter ? true : false,\r\n            iconProps: { iconName: 'Filter' },\r\n            iconOnly: true,\r\n            onClick: this._onOpenFilter,\r\n        };\r\n        const syncItem = {\r\n            key: 'sync',\r\n            text: msg(commonMessages.sync),\r\n            iconProps: { iconName: 'Refresh' },\r\n            onClick: () => this.setState({ showSyncUsersDialog: true }),\r\n            disabled: isSyncing || !!shouldDisableLabUpdate,\r\n        };\r\n        const inviteAllItem = {\r\n            key: 'inviteAll',\r\n            text: msg(messages.inviteAllCommand),\r\n            iconProps: { iconName: 'Mail' },\r\n            onClick: this._onInviteAllClicked,\r\n            disabled: isSyncing || users.filter((o) => o.canInvite).size === 0,\r\n        };\r\n        const registrationLinkItem = {\r\n            key: 'registrationLink',\r\n            text: msg(messages.registrationLinkCommand),\r\n            iconProps: { iconName: 'ChatInviteFriend' },\r\n            onClick: () => this.setState({ showRegistrationLinkDialog: true }),\r\n        };\r\n        const separatorItem = {\r\n            key: 'separator',\r\n            onRender: () => <div className=\"command-bar-separator\"/>,\r\n        };\r\n        const accessModeItem = {\r\n            key: 'accessMode',\r\n            onRender: () => (<ToggleToolTip label={msg(messages.restrictAccess)} inlineLabel={true} content={msg(messages.restrictAccessTooltip)} styles={{\r\n                root: { marginTop: 7, marginRight: 7, cursor: 'pointer' },\r\n                label: { fontWeight: 'normal', whiteSpace: 'nowrap' },\r\n            }} disabled={isUpdatingLab || !!shouldDisableLabUpdate} checked={isRestricted} onChange={(_, checked) => this._onAccessModeToggle(checked)}/>),\r\n        };\r\n        const addUsersMenuItem = {\r\n            key: 'addUsersMenu',\r\n            text: msg(messages.addUsersMenu),\r\n            iconProps: { iconName: 'PeopleAdd' },\r\n            disabled: !!shouldDisableLabUpdate,\r\n            onClick: () => this.setState({\r\n                showAddUsersFlyout: true,\r\n                addUserEmails: '',\r\n                hasEmptyCsvFileError: false,\r\n            }),\r\n        };\r\n        if (isTeamsOrLmsIntegrationEnabled) {\r\n            if (lab && lab.id) {\r\n                farItems = getNavigationItems(intl, lab.id, LabNavKeys.Users, navigateRoute);\r\n            }\r\n        }\r\n        else if (users.size > 0) {\r\n            farItems.push(filterItem);\r\n        }\r\n        if (isReadOnly) {\r\n            items = [exportItem];\r\n            if (isTeamsOrLmsIntegrationEnabled) {\r\n                items.push(separatorItem);\r\n                items.push(filterItem);\r\n            }\r\n            return <CommandBar styles={primaryCommandBarStyles} items={items} farItems={farItems}/>;\r\n        }\r\n        const overflowButtonProps = { title: msg(commonMessages.moreActionsMenu) };\r\n        const overflowItems = [];\r\n        const quotaItem = {\r\n            key: 'quota',\r\n            onRender: () => (<CommandButtonToolTip content={msg(messages.quotaTooltip)} disabled={isUpdatingLab || !!shouldDisableLabUpdate} labelText={this._getQuotaCommandName()} iconProps={{ iconName: 'Timer' }} onClick={this._onLabQuotaClicked} styles={primaryCommandButtonStyles}/>),\r\n        };\r\n        const isEmptyUsersInGroupSyncedLab = !!groupId && users.size === 0 && !isSyncing;\r\n        if (!isLabTeamsOrLmsConnected) {\r\n            if (!isGroupSyncModeEnabled && !isRestricted) {\r\n                items = [accessModeItem, quotaItem, separatorItem, addUsersMenuItem, registrationLinkItem];\r\n            }\r\n            else if (!isGroupSyncModeEnabled && isRestricted && users.size > 0) {\r\n                items = [\r\n                    accessModeItem,\r\n                    quotaItem,\r\n                    separatorItem,\r\n                    addUsersMenuItem,\r\n                    inviteAllItem,\r\n                    registrationLinkItem,\r\n                ];\r\n            }\r\n            else if (!isGroupSyncModeEnabled && isRestricted && users.size === 0) {\r\n                items = [accessModeItem, quotaItem];\r\n            }\r\n            else {\r\n                items = [quotaItem, separatorItem, syncItem, inviteAllItem, registrationLinkItem];\r\n            }\r\n        }\r\n        else {\r\n            if (!isTeamsOrLmsIntegrationEnabled) {\r\n                items = [quotaItem, syncItem, separatorItem, registrationLinkItem];\r\n            }\r\n            else {\r\n                if (isEmptyUsersInGroupSyncedLab) {\r\n                    items = [];\r\n                }\r\n                else {\r\n                    items = [quotaItem, syncItem, exportItem, separatorItem, filterItem];\r\n                }\r\n            }\r\n        }\r\n        if (!isTeamsOrLmsIntegrationEnabled) {\r\n            if (users.size > 0) {\r\n                overflowItems.push(exportItem);\r\n            }\r\n        }\r\n        // Don't render the command bar when we have an empty group\r\n        const shouldNotRenderCommandBar = !isTeamsOrLmsIntegrationEnabled && isEmptyUsersInGroupSyncedLab;\r\n        return (!shouldNotRenderCommandBar && (<CommandBar styles={primaryCommandBarStyles} overflowButtonProps={overflowButtonProps} items={items} overflowItems={overflowItems} farItems={farItems}/>));\r\n    }\r\n    // Renders command bar shown when there is non=empty selection\r\n    _renderSelectionCommandBar() {\r\n        const { intl: { formatMessage: msg }, userListViewModel, } = this.props;\r\n        const { isReadOnly, isGroupSyncModeEnabled, isLabTeamsOrLmsConnected, isUpdatingLab, shouldDisableLabUpdate, } = userListViewModel;\r\n        const { deleteSelectTarget: deleteTarget, inviteSelectTarget: inviteTarget, quotaSelectTarget: quotaTarget, } = this.state;\r\n        const { secondaryCommandBarStyles } = getCustomTheme();\r\n        const items = [];\r\n        if (!isReadOnly) {\r\n            if (!isGroupSyncModeEnabled) {\r\n                if (deleteTarget.length > 0) {\r\n                    items.push({\r\n                        key: 'delete',\r\n                        disabled: isUpdatingLab || !!shouldDisableLabUpdate,\r\n                        text: msg(commonMessages.delete),\r\n                        iconProps: { iconName: 'Delete' },\r\n                        onClick: this._onDeleteUserClicked,\r\n                    });\r\n                }\r\n            }\r\n            if (!isLabTeamsOrLmsConnected && inviteTarget.length > 0) {\r\n                items.push({\r\n                    key: 'invite',\r\n                    text: msg(messages.inviteCommand),\r\n                    iconProps: { iconName: 'Mail' },\r\n                    onClick: this._onInviteClicked,\r\n                });\r\n            }\r\n            if (quotaTarget.length > 0) {\r\n                items.push({\r\n                    key: 'userQuota',\r\n                    disabled: isUpdatingLab || !!shouldDisableLabUpdate,\r\n                    text: msg(messages.adjustQuota),\r\n                    iconProps: { iconName: 'Timer' },\r\n                    onClick: this._onUserQuotaClicked,\r\n                });\r\n            }\r\n        }\r\n        return (<CommandBar styles={secondaryCommandBarStyles} items={items} farItems={[\r\n            {\r\n                key: 'clearSelection',\r\n                text: msg(commonMessages.clearSelectionCommand),\r\n                ariaLabel: msg(commonMessages.clearSelectionCommand),\r\n                iconProps: { iconName: 'Cancel' },\r\n                iconOnly: true,\r\n                onClick: () => this._selection.setAllSelected(false),\r\n            },\r\n            {\r\n                key: 'selectedCount',\r\n                onRender: () => (<Stack verticalFill verticalAlign=\"center\">\r\n                                <Stack.Item>\r\n                                    {msg(commonMessages.selectedFormat, {\r\n                    numberOfObjects: this.state.selectedCount,\r\n                })}\r\n                                </Stack.Item>\r\n                            </Stack>),\r\n            },\r\n        ]}/>);\r\n    }\r\n    // Renders filter bar with text search box and state filters\r\n    _renderFilterBar(items, userStatusMap, inviteStatusMap) {\r\n        const { filterText, filterUserStatus, filterInviteStatus } = this.state;\r\n        const { intl: { formatMessage: msg }, userListViewModel, } = this.props;\r\n        const { isLabTeamsOrLmsConnected } = userListViewModel;\r\n        const { secondaryCommandBarStyles, filterBarStyles } = getCustomTheme();\r\n        const availableUserStatuses = items\r\n            .map((item) => item.status)\r\n            .filter((value, index, self) => self.indexOf(value) === index);\r\n        const availableInviteStatus = items\r\n            .map((item) => item.inviteStatus)\r\n            .filter((value, index, self) => self.indexOf(value) === index);\r\n        const availableUserStatusOptions = availableUserStatuses\r\n            .map((status) => ({\r\n            key: status,\r\n            text: userStatusMap[status],\r\n            canCheck: true,\r\n            checked: filterUserStatus.indexOf(status) > -1,\r\n            className: 'user-list__filter-button',\r\n            onClick: (ev) => {\r\n                ev && ev.preventDefault();\r\n                this._onFilterUserStatusChange(status);\r\n            },\r\n        }))\r\n            .sortBy((option) => option.text)\r\n            .toArray();\r\n        const availableInviteStatusOptions = availableInviteStatus\r\n            .map((status) => ({\r\n            key: status,\r\n            text: inviteStatusMap[status],\r\n            canCheck: true,\r\n            checked: filterInviteStatus.indexOf(status) > -1,\r\n            className: 'user-list__filter-button',\r\n            onClick: (ev) => {\r\n                ev && ev.preventDefault();\r\n                this._onFilterInviteStatusChange(status);\r\n            },\r\n        }))\r\n            .sortBy((option) => option.text)\r\n            .toArray();\r\n        if (availableUserStatusOptions.length > 0) {\r\n            availableUserStatusOptions.push({\r\n                key: 'clearDivider',\r\n                itemType: ContextualMenuItemType.Divider,\r\n            });\r\n            availableUserStatusOptions.push({\r\n                key: 'clear',\r\n                text: msg(commonMessages.clearFilters),\r\n                canCheck: false,\r\n                checked: false,\r\n                className: 'user-list__filter-clear-button',\r\n                iconProps: {\r\n                    iconName: 'Cancel',\r\n                    styles: {\r\n                        root: {\r\n                            color: 'rgb(50, 49, 48)',\r\n                            fontSize: '14px',\r\n                        },\r\n                    },\r\n                },\r\n                onClick: (ev) => {\r\n                    ev && ev.preventDefault();\r\n                    this._onClearUserStatusFilter();\r\n                },\r\n            });\r\n        }\r\n        if (availableInviteStatusOptions.length > 0) {\r\n            availableInviteStatusOptions.push({\r\n                key: 'clearDivider',\r\n                itemType: ContextualMenuItemType.Divider,\r\n            });\r\n            availableInviteStatusOptions.push({\r\n                key: 'clear',\r\n                text: msg(commonMessages.clearFilters),\r\n                canCheck: false,\r\n                checked: false,\r\n                className: 'user-list__filter-clear-button',\r\n                iconProps: {\r\n                    iconName: 'Cancel',\r\n                    styles: {\r\n                        root: {\r\n                            color: 'rgb(50, 49, 48)',\r\n                            fontSize: '14px',\r\n                        },\r\n                    },\r\n                },\r\n                onClick: (ev) => {\r\n                    ev && ev.preventDefault();\r\n                    this._onClearInviteStatusFilter();\r\n                },\r\n            });\r\n        }\r\n        const farItems = [\r\n            {\r\n                key: 'filterByStatus',\r\n                text: filterUserStatus.length > 0\r\n                    ? msg(messages.statusFilterSelected, {\r\n                        selected: this._getFilterText(filterUserStatus, userStatusMap),\r\n                    })\r\n                    : msg(messages.statusColumnHeader),\r\n                subMenuProps: {\r\n                    items: availableUserStatusOptions,\r\n                },\r\n            },\r\n        ];\r\n        if (!isLabTeamsOrLmsConnected) {\r\n            farItems.push({\r\n                key: 'filterByInvitation',\r\n                text: filterInviteStatus.length > 0\r\n                    ? msg(messages.invitationFilterSelected, {\r\n                        selected: this._getFilterText(filterInviteStatus, inviteStatusMap),\r\n                    })\r\n                    : msg(messages.invitationColumnHeader),\r\n                subMenuProps: {\r\n                    items: availableInviteStatusOptions,\r\n                },\r\n            });\r\n        }\r\n        farItems.push({\r\n            key: 'closeFilter',\r\n            text: msg(commonMessages.closeFilterCommand),\r\n            ariaLabel: msg(commonMessages.closeFilterCommand),\r\n            iconProps: { iconName: 'Cancel' },\r\n            iconOnly: true,\r\n            onClick: () => this._onCloseFilter(),\r\n        });\r\n        return (<CommandBar styles={_.merge({}, secondaryCommandBarStyles, filterBarStyles)} items={[\r\n            {\r\n                key: 'filterByName',\r\n                onRender: () => (<SearchBox ariaLabel={msg(messages.textFilterPlaceholder)} styles={{\r\n                    root: {\r\n                        backgroundColor: 'transparent',\r\n                        border: 'none',\r\n                        marginTop: 8,\r\n                        width: '300px',\r\n                    },\r\n                }} value={filterText} spellCheck={false} placeholder={msg(messages.textFilterPlaceholder)} iconProps={{ iconName: 'Filter' }} onChange={(_, newValue) => this._onFilterTextChange(newValue || '')}/>),\r\n            },\r\n        ]} farItems={farItems}/>);\r\n    }\r\n    _getFilterText(items, stateMap) {\r\n        if (items.length < 1) {\r\n            return '';\r\n        }\r\n        const filterStrings = items.map((item) => stateMap[item]).sort();\r\n        return filterStrings.join(', ');\r\n    }\r\n    // Column definitions for the details list view control\r\n    _createColumns(sortByColumn, isSortDescending, userStatusMap, inviteStatusMap, locale, shouldHideEmailColumn) {\r\n        const { intl, userListViewModel } = this.props;\r\n        const { isLabTeamsOrLmsConnected } = userListViewModel;\r\n        const msg = intl.formatMessage;\r\n        const nameColumnLabel = msg(commonMessages.nameColumnHeader);\r\n        const emailColumnLabel = msg(messages.emailColumnHeader);\r\n        const statusColumnLabel = msg(messages.statusColumnHeader);\r\n        const inviteStatusColumnLabel = msg(messages.invitationColumnHeader);\r\n        const usageColumnLabel = msg(commonMessages.usageColumnHeader);\r\n        const columns = [\r\n            {\r\n                key: 'nameSortValue',\r\n                name: nameColumnLabel,\r\n                minWidth: 210,\r\n                maxWidth: 350,\r\n                isRowHeader: true,\r\n                isResizable: true,\r\n                isSorted: sortByColumn === 'nameSortValue',\r\n                isSortedDescending: sortByColumn === 'nameSortValue' ? isSortDescending : false,\r\n                sortAscendingAriaLabel: msg(commonMessages.sortedAtoZ),\r\n                sortDescendingAriaLabel: msg(commonMessages.sortedZtoA),\r\n                onColumnClick: (_, column) => this._onColumnClick(column),\r\n                onRender: (item) => this._onRenderNameColumn(item),\r\n                className: 'user-list__name-column',\r\n            },\r\n        ];\r\n        const email = {\r\n            key: 'email',\r\n            name: emailColumnLabel,\r\n            minWidth: 150,\r\n            maxWidth: 250,\r\n            isResizable: true,\r\n            isCollapsable: true,\r\n            isSorted: sortByColumn === 'email',\r\n            isSortedDescending: sortByColumn === 'email' ? isSortDescending : false,\r\n            sortAscendingAriaLabel: msg(commonMessages.sortedAtoZ),\r\n            sortDescendingAriaLabel: msg(commonMessages.sortedZtoA),\r\n            onColumnClick: (_, column) => this._onColumnClick(column),\r\n            onRender: (item) => (<Stack verticalFill verticalAlign=\"center\">\r\n                    <Stack.Item>{item.email}</Stack.Item>\r\n                </Stack>),\r\n        };\r\n        if (!shouldHideEmailColumn) {\r\n            columns.push(email);\r\n        }\r\n        const status = {\r\n            key: 'status',\r\n            name: statusColumnLabel,\r\n            minWidth: 100,\r\n            maxWidth: 200,\r\n            isResizable: true,\r\n            isCollapsible: true,\r\n            isSorted: sortByColumn === 'status',\r\n            isSortedDescending: sortByColumn === 'status' ? isSortDescending : false,\r\n            sortAscendingAriaLabel: msg(commonMessages.sortedAtoZ),\r\n            sortDescendingAriaLabel: msg(commonMessages.sortedZtoA),\r\n            onColumnClick: (_, column) => this._onColumnClick(column),\r\n            onRender: (item) => {\r\n                const { status } = item;\r\n                let statusText;\r\n                switch (status) {\r\n                    case UserStatus.Deleting:\r\n                        statusText = msg(commonMessages.deleting);\r\n                        break;\r\n                    default:\r\n                        statusText = userStatusMap[status];\r\n                        break;\r\n                }\r\n                return (<Stack verticalFill verticalAlign=\"center\">\r\n                        <Stack.Item>\r\n                            <span>{statusText}</span>\r\n                        </Stack.Item>\r\n                    </Stack>);\r\n            },\r\n        };\r\n        columns.push(status);\r\n        const inviteStatus = {\r\n            key: 'inviteStatus',\r\n            name: inviteStatusColumnLabel,\r\n            minWidth: 100,\r\n            maxWidth: 200,\r\n            isResizable: true,\r\n            isCollapsible: true,\r\n            isSorted: sortByColumn === 'inviteStatus',\r\n            isSortedDescending: sortByColumn === 'inviteStatus' ? isSortDescending : false,\r\n            sortAscendingAriaLabel: msg(commonMessages.sortedAtoZ),\r\n            sortDescendingAriaLabel: msg(commonMessages.sortedZtoA),\r\n            onColumnClick: (_, column) => this._onColumnClick(column),\r\n            onRender: (item) => {\r\n                const { inviteStatus, latestRegistrationLinkEmailSent } = item;\r\n                let statusText;\r\n                switch (inviteStatus) {\r\n                    case InviteStatus.Sending:\r\n                        statusText = msg(messages.sendingProgress);\r\n                        break;\r\n                    case InviteStatus.Sent:\r\n                        statusText = msg(messages.sentFormat, {\r\n                            date: intl.formatDate(latestRegistrationLinkEmailSent),\r\n                        });\r\n                        break;\r\n                    case InviteStatus.SendingFailed:\r\n                        statusText = msg(messages.sendFailedFormat, {\r\n                            date: intl.formatDate(latestRegistrationLinkEmailSent),\r\n                        });\r\n                    default:\r\n                        statusText = inviteStatusMap[inviteStatus];\r\n                        break;\r\n                }\r\n                return (<Stack verticalFill verticalAlign=\"center\">\r\n                        <Stack.Item>\r\n                            <span>{statusText}</span>\r\n                        </Stack.Item>\r\n                    </Stack>);\r\n            },\r\n        };\r\n        const currentUsage = {\r\n            key: 'currentUsage',\r\n            name: usageColumnLabel,\r\n            minWidth: 200,\r\n            maxWidth: 250,\r\n            isResizable: true,\r\n            isCollapsible: true,\r\n            isSorted: sortByColumn === 'currentUsage',\r\n            isSortedDescending: sortByColumn === 'currentUsage' ? isSortDescending : false,\r\n            sortAscendingAriaLabel: msg(commonMessages.sortedSmallerToLarger),\r\n            sortDescendingAriaLabel: msg(commonMessages.sortedLargerToSmaller),\r\n            onColumnClick: (_, column) => this._onColumnClick(column),\r\n            onRender: (item) => {\r\n                const isHoveredOrSelected = this.state.hoveredId === item.id || this.state.selectedIds.indexOf(item.id) > -1;\r\n                return (<Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: '5px' }}>\r\n                        <Stack.Item align=\"start\">\r\n                            <VmUsageProgressColumn currentUsage={item.currentUsage} usageQuota={item.totalQuota} isHoveredOrSelected={isHoveredOrSelected}/>\r\n                        </Stack.Item>\r\n                        <Stack.Item align=\"end\">\r\n                            <VmUsageColumn locale={locale} currentUsage={item.currentUsage} usageQuota={item.totalQuota}/>\r\n                        </Stack.Item>\r\n                    </Stack>);\r\n            },\r\n        };\r\n        if (!isLabTeamsOrLmsConnected) {\r\n            columns.push(inviteStatus);\r\n        }\r\n        columns.push(currentUsage);\r\n        return columns;\r\n    }\r\n    // Renders Upload CSV button in command bar, including file upload control\r\n    _onRenderUploadCsv(dismissMenu) {\r\n        const { intl: { formatMessage: msg }, } = this.props;\r\n        const { primaryCommandButtonStyles } = getCustomTheme();\r\n        return (<FileUploadButton content={msg(messages.uploadCsvTooltip)} directionalHint={DirectionalHint.rightCenter} accept=\".csv\" labelText={msg(messages.uploadCsvCommand)} styles={primaryCommandButtonStyles} onChange={(event) => {\r\n            this._onCsvFileUpload(event);\r\n            dismissMenu();\r\n        }}/>);\r\n    }\r\n    // Parses CSV file content and opens Add Users Flyout with resulting list of emails\r\n    _onCsvFileUpload(event) {\r\n        const reader = new FileReader();\r\n        reader.onerror = () => {\r\n            // TODO: report error\r\n        };\r\n        reader.onloadend = (e) => {\r\n            const emails = e.target.result\r\n                .split(/\\n|\\r\\n/)\r\n                .map((line) => line\r\n                .split(/\\t|,/)\r\n                .map((o) => o.trim())\r\n                .find((o) => isValidEmail(o)))\r\n                .filter((o) => !!o);\r\n            if (emails.length > 0) {\r\n                this.setState({\r\n                    showAddUsersFlyout: true,\r\n                    addUserEmails: emails.join('\\n'),\r\n                    hasEmptyCsvFileError: false,\r\n                });\r\n            }\r\n            else {\r\n                this.setState({\r\n                    showAddUsersFlyout: true,\r\n                    hasEmptyCsvFileError: true,\r\n                });\r\n            }\r\n        };\r\n        reader.readAsText(event.target.files[0]);\r\n        event.target.value = '';\r\n    }\r\n    // Returns text for the Quota command bar button\r\n    _getQuotaCommandName(hours) {\r\n        const { intl, userListViewModel } = this.props;\r\n        const { labQuota } = userListViewModel;\r\n        const msg = intl.formatMessage;\r\n        return labQuota === 0\r\n            ? msg(messages.quotaCommandScheduleOnly)\r\n            : msg(messages.quotaCommandHoursFormat, { numberOfHours: hours ?? labQuota });\r\n    }\r\n    _getSelectedUsers() {\r\n        const { users } = this.props.userListViewModel;\r\n        if (this.state.selectedIds.length == 0) {\r\n            return [];\r\n        }\r\n        return users.filter((user) => this.state.selectedIds.indexOf(user.id) != -1).toArray();\r\n    }\r\n    // Handle toggling of 'Restricted access' toggle on command bar\r\n    _onAccessModeToggle(value) {\r\n        if (value) {\r\n            this.props.updateAccessMode(true);\r\n        }\r\n        else {\r\n            this.setState({ showOpenAccessDialog: true });\r\n        }\r\n    }\r\n    // Handles submit operation for the Open Access dialog\r\n    _onAccessDialogSubmit() {\r\n        this.props.updateAccessMode(false);\r\n    }\r\n    // Handles submit operation for the Quota flyout\r\n    _onQuotaFlyoutSubmit(quota) {\r\n        this.props.updateQuota(quota);\r\n        // Announcement for command bar\r\n        const message = this._getQuotaCommandName(quota);\r\n        const userQuotaUpdateAnnounce = <Announced message={message} aria-live=\"assertive\"/>;\r\n        this.announce = userQuotaUpdateAnnounce;\r\n        /* If we wanted to announce each list row item, copy code from below and remove the target = key check */\r\n    }\r\n    // Handles submit operation for the User Quota flyout\r\n    _onUserQuotaFlyoutSubmit(additionalQuota) {\r\n        this.props.updateUserQuota(this.state.quotaSelectTarget, additionalQuota);\r\n        // Announcement for each selected row in the user list table\r\n        const announcedItems = [];\r\n        const { intl, userListViewModel } = this.props;\r\n        const { labQuota, locale, users } = userListViewModel;\r\n        users.map((user) => {\r\n            const { key, currentUsage } = user;\r\n            this.state.quotaSelectTarget.forEach((target) => {\r\n                if (target === key) {\r\n                    const message = intl.formatMessage(commonMessages.vmUsageColumnProgressFormat, {\r\n                        current: shortenNumber(currentUsage, locale, intl),\r\n                        total: shortenNumber(labQuota + additionalQuota, locale, intl),\r\n                    });\r\n                    announcedItems.push(<Announced key={key} message={message} aria-live=\"assertive\"/>);\r\n                }\r\n            });\r\n        });\r\n        this.announce = announcedItems;\r\n    }\r\n    // Handles submit operation for the Add Users flyout\r\n    _onAddUsersFlyoutSubmit(emails) {\r\n        this.props.addUsers(emails);\r\n    }\r\n    // Handles submit operation for the Sync From Group flyout\r\n    _onSyncFromGroupFlyoutSubmit(group, isDeletionExternallyManaged) {\r\n        this.props.syncFromGroup(group, isDeletionExternallyManaged);\r\n    }\r\n    // Handles submit operation for the Sync From Group flyout\r\n    _onSyncFromGroupFlyoutSearchForGroups(filterText) {\r\n        this.props.searchForGroups(filterText);\r\n    }\r\n    // Handles submit operation for the Send Invitation flyout\r\n    _onInvitationFlyoutSubmit(extraMessage) {\r\n        const { inviteUsers } = this.props;\r\n        const { inviteIds } = this.state;\r\n        inviteUsers(inviteIds, extraMessage);\r\n    }\r\n    // Handles submit operation for the Delete Users flyout\r\n    _onDeleteDialogSubmit() {\r\n        const { deleteUsers } = this.props;\r\n        const { deleteSelectTarget } = this.state;\r\n        deleteUsers(deleteSelectTarget);\r\n    }\r\n    _onOpenFilter() {\r\n        this.setState({\r\n            showFilter: true,\r\n        });\r\n    }\r\n    _onCloseFilter() {\r\n        this.setState({\r\n            showFilter: false,\r\n            filterText: '',\r\n            filterInviteStatus: [],\r\n            filterUserStatus: [],\r\n        });\r\n    }\r\n    _onFilterTextChange(filterText) {\r\n        this.setState({\r\n            filterText,\r\n        });\r\n    }\r\n    _onFilterUserStatusChange(userStatus) {\r\n        const filterUserStatus = [...this.state.filterUserStatus];\r\n        const index = filterUserStatus.indexOf(userStatus);\r\n        if (index > -1) {\r\n            filterUserStatus.splice(index, 1);\r\n        }\r\n        else {\r\n            filterUserStatus.push(userStatus);\r\n        }\r\n        this.setState({\r\n            filterUserStatus,\r\n        });\r\n    }\r\n    _onFilterInviteStatusChange(inviteStatus) {\r\n        const filterInviteStatus = [...this.state.filterInviteStatus];\r\n        const index = filterInviteStatus.indexOf(inviteStatus);\r\n        if (index > -1) {\r\n            filterInviteStatus.splice(index, 1);\r\n        }\r\n        else {\r\n            filterInviteStatus.push(inviteStatus);\r\n        }\r\n        this.setState({\r\n            filterInviteStatus,\r\n        });\r\n    }\r\n    _onClearUserStatusFilter() {\r\n        this.setState({ filterUserStatus: [] });\r\n    }\r\n    _onClearInviteStatusFilter() {\r\n        this.setState({ filterInviteStatus: [] });\r\n    }\r\n    _onDismissInviteAllDialog() {\r\n        this.setState({ showInviteAllDialog: false });\r\n    }\r\n    _onSubmitInviteAllDialog(includeAlreadyInvited) {\r\n        const { users } = this.props.userListViewModel;\r\n        const inviteIds = includeAlreadyInvited\r\n            ? users\r\n                .filter((u) => u.canInvite || u.canInviteAgain)\r\n                .map((u) => u.id)\r\n                .toArray()\r\n            : users\r\n                .filter((u) => u.canInvite)\r\n                .map((u) => u.id)\r\n                .toArray();\r\n        this.setState({ showInviteAllDialog: false, showInvitationFlyout: true, inviteIds });\r\n    }\r\n    _onSyncUsersDialogSubmit() {\r\n        this.props.syncUsers();\r\n        this.setState({ showSyncUsersDialog: false });\r\n    }\r\n    _onLabQuotaClicked() {\r\n        this.setState({ showQuotaFlyout: true });\r\n    }\r\n    _onUserQuotaClicked() {\r\n        this.setState({ showUserQuotaFlyout: true });\r\n    }\r\n    _onDeleteUserClicked() {\r\n        this.setState({ showDeleteUsersDialog: true });\r\n    }\r\n    _onInviteClicked() {\r\n        const { inviteSelectTarget: inviteIds } = this.state;\r\n        this.setState({ showInvitationFlyout: true, inviteIds });\r\n    }\r\n    _onInviteAllClicked() {\r\n        const { users } = this.props.userListViewModel;\r\n        const shouldShowDialog = users.some((u) => u.inviteStatus === InviteStatus.Sent);\r\n        if (shouldShowDialog) {\r\n            this.setState({ showInviteAllDialog: true, inviteIds: [] });\r\n        }\r\n        else {\r\n            const inviteIds = users\r\n                .filter((u) => u.canInvite)\r\n                .map((u) => u.id)\r\n                .toArray();\r\n            this.setState({ showInvitationFlyout: true, inviteIds });\r\n        }\r\n    }\r\n    // Handles changes to column sort order for the list view\r\n    _onColumnClick(column) {\r\n        const sortByColumn = column.key || 'nameSortValue';\r\n        const isNewColumn = this.state.sortByColumn !== sortByColumn;\r\n        const isSortDescending = isNewColumn ? false : !this.state.isSortDescending;\r\n        this.setState({ sortByColumn, isSortDescending });\r\n    }\r\n    // Renders Name cell of list view row including person icon, name and command bar\r\n    _onRenderNameColumn(item) {\r\n        const { intl, userListViewModel } = this.props;\r\n        const { isReadOnly, isGroupSyncModeEnabled, isLabTeamsOrLmsConnected, shouldDisableLabUpdate, isUpdatingLab, } = userListViewModel;\r\n        const { selectedIds, selectedCount } = this.state;\r\n        const { formatMessage: msg } = intl;\r\n        const styles = {\r\n            root: {\r\n                backgroundColor: 'inherit',\r\n                borderStyle: 'none',\r\n                height: '100%',\r\n            },\r\n        };\r\n        const { canAddQuota, canDelete, canInvite, canInviteAgain, name, id } = item;\r\n        const itemHasActions = !isReadOnly && (canAddQuota || canDelete || canInvite || canInviteAgain);\r\n        const selected = selectedCount > 0 && selectedIds.indexOf(id) > -1;\r\n        const items = [];\r\n        if (canAddQuota) {\r\n            items.push({\r\n                key: 'userQuota',\r\n                text: msg(messages.adjustQuota),\r\n                iconProps: { iconName: 'Timer' },\r\n                onClick: this._onUserQuotaClicked,\r\n                disabled: isUpdatingLab || !!shouldDisableLabUpdate,\r\n            });\r\n        }\r\n        if (!isGroupSyncModeEnabled && canDelete) {\r\n            items.push({\r\n                key: 'deleteUser',\r\n                text: msg(commonMessages.delete),\r\n                iconProps: { iconName: 'Delete' },\r\n                onClick: this._onDeleteUserClicked,\r\n                disabled: isUpdatingLab || !!shouldDisableLabUpdate,\r\n            });\r\n        }\r\n        return (<Stack className=\"user-list__name-stack\" horizontal horizontalAlign=\"start\" verticalAlign=\"center\">\r\n                <Stack.Item className=\"user-list__name-persona-stack-item\" align=\"start\">\r\n                    <PersonaCoin size={PersonaSize.size28} text={name}/>\r\n                </Stack.Item>\r\n                <Stack.Item className=\"user-list__name-text-stack-item\">\r\n                    <TooltipHost content={name}>\r\n                        <Text block={true} nowrap={true}>\r\n                            {name}\r\n                        </Text>\r\n                    </TooltipHost>\r\n                </Stack.Item>\r\n                <Stack.Item grow>\r\n                    <div />\r\n                </Stack.Item>\r\n                {itemHasActions && (<>\r\n                        {(canInvite || canInviteAgain) && !isLabTeamsOrLmsConnected && (<Stack.Item className=\"user-list__name-action-stack-item\" align=\"end\">\r\n                                <TooltipHost directionalHint={DirectionalHint.topRightEdge} content={msg(messages.inviteCommand)}>\r\n                                    <IconButton iconProps={{ iconName: 'Mail', styles: { root: { color: '#605E5C' } } }} onClick={this._onInviteClicked} styles={styles} ariaLabel={msg(messages.inviteCommand)} className={selected ? 'user-list__action-selected' : 'user-list__action-not-selected'}/>\r\n                                </TooltipHost>\r\n                            </Stack.Item>)}\r\n                        {items.length > 0 && (<Stack.Item className=\"user-list__name-action-stack-item\" align=\"end\">\r\n                                <TooltipHost directionalHint={DirectionalHint.topRightEdge} content={msg(messages.expandUserActionsTooltip)}>\r\n                                    <IconButton iconProps={{ iconName: 'MoreVertical', styles: { root: { color: '#605E5C' } } }} menuIconProps={{\r\n            // this is used to hide the chevron\r\n            style: { display: 'none' },\r\n        }} styles={styles} menuProps={{ items, isSubMenu: true }} ariaLabel={msg(messages.expandUserActionsTooltip)} className={selected ? 'user-list__action-selected' : 'user-list__action-not-selected'}/>\r\n                                </TooltipHost>\r\n                            </Stack.Item>)}\r\n                    </>)}\r\n            </Stack>);\r\n    }\r\n}\r\nexport const UserList = injectIntl(UserListInjected);\r\nexport default UserList;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport memoize from 'memoize-one';\r\nimport { ProvisioningState } from '../utils/provisioning-state';\r\nimport Constants from '../utils/constants';\r\nimport { InviteStatus, UserStatus } from './user-list-models';\r\nimport { isCurrentLabUserSyncing, isLabGroupSynced, isLabConnectedLmsOrTeams, isCurrentLabReadOnly, getCurrentLab, getLabUsageQuota, isLabUserRestricted, isVNextLab, } from '../redux/selectors/lab-selectors';\r\nimport { hostNames } from '../utils/environment';\r\nimport { getIanaTimezone, getLocale, isTeamsOrLmsMode, storeHasLoadError, storeIsLoading, } from '../redux/selectors/common-selectors';\r\nimport { getGroupName, getGroups, isLoadingGroupList, isLoadingGroupName } from '../redux/selectors/group-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { isCurrentLabParentLabAccount } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport moment from 'moment';\r\nimport { getCurrentLabUpdateError, getVNextLabGroupId, getVNextLabGroupName, isLoadingLabMetadata, isVNextLabLmsConnected, shouldDisableCurrentLabUpdate, } from '../redux/selectors/vnext/lab-selectors';\r\n// Transforms a ML user object to UserDetails consumable by the list view\r\nfunction getUserDetails(user, labQuotaInHours) {\r\n    const { registrationState, familyName, givenName, provisioningState, registrationLinkEmailState, latestRegistrationLinkEmailSent, id, email, totalUsage, additionalUsageQuota, } = user;\r\n    let name, nameSortValue;\r\n    if (registrationState === Ml.RegistrationState.Registered) {\r\n        // HACK: We should get fullName from the API so we don't have to do this\r\n        name = `${givenName || ''} ${familyName || ''}`.trim();\r\n        if (!name) {\r\n            name = Constants.DefaultUserName;\r\n            nameSortValue = '';\r\n        }\r\n        else {\r\n            nameSortValue = name;\r\n        }\r\n    }\r\n    else {\r\n        name = Constants.DefaultUserName;\r\n        nameSortValue = '';\r\n    }\r\n    let canDelete = false;\r\n    let canInvite = false;\r\n    let canInviteAgain = false;\r\n    let canAddQuota = false;\r\n    // Determine user status\r\n    let status;\r\n    switch (provisioningState) {\r\n        case ProvisioningState.Deleting:\r\n            status = UserStatus.Deleting;\r\n            break;\r\n        default:\r\n            canDelete = true;\r\n            canAddQuota = true;\r\n            status =\r\n                registrationState === Ml.RegistrationState.Registered\r\n                    ? UserStatus.Registered\r\n                    : UserStatus.NotRegistered;\r\n            break;\r\n    }\r\n    // Determine Invitation text for filter and list view.\r\n    let inviteStatus;\r\n    switch (registrationLinkEmailState) {\r\n        case Ml.RegistrationLinkEmailState.NotSent:\r\n            inviteStatus = InviteStatus.NotSent;\r\n            canInvite = canDelete;\r\n            break;\r\n        case Ml.RegistrationLinkEmailState.Sending:\r\n            inviteStatus = InviteStatus.Sending;\r\n            break;\r\n        case Ml.RegistrationLinkEmailState.Sent:\r\n            inviteStatus = InviteStatus.Sent;\r\n            canInviteAgain = canDelete;\r\n            break;\r\n        case Ml.RegistrationLinkEmailState.Failed:\r\n            inviteStatus = InviteStatus.SendingFailed;\r\n            canInvite = canDelete;\r\n            break;\r\n        default:\r\n            inviteStatus = InviteStatus.Unknown;\r\n            break;\r\n    }\r\n    const currentUsage = totalUsage ? totalUsage.asHours() : 0;\r\n    const additionalQuota = additionalUsageQuota ? additionalUsageQuota.asHours() : 0;\r\n    const totalQuota = labQuotaInHours + additionalQuota;\r\n    return {\r\n        key: id || '',\r\n        id: id || '',\r\n        name,\r\n        email: email || '',\r\n        nameSortValue,\r\n        status,\r\n        inviteStatus,\r\n        currentUsage,\r\n        totalQuota,\r\n        additionalQuota,\r\n        canDelete,\r\n        canInvite,\r\n        canInviteAgain,\r\n        canAddQuota,\r\n        latestRegistrationLinkEmailSent,\r\n    };\r\n}\r\nfunction getVNextUserDetails(user, labQuotaInHours) {\r\n    const { registrationState, displayName, invitationSent, id, email, totalUsage, additionalUsageQuota } = user;\r\n    let { provisioningState, invitationState, pendingProvisioningState, isSendingInivatationPending } = user; // eslint-disable-line prefer-const\r\n    provisioningState = !!pendingProvisioningState ? pendingProvisioningState : provisioningState;\r\n    invitationState = !!isSendingInivatationPending ? LabServicesModels.InvitationState.Sending : invitationState;\r\n    let nameSortValue;\r\n    let name = displayName || '';\r\n    if (!name) {\r\n        name = Constants.DefaultUserName;\r\n        nameSortValue = '';\r\n    }\r\n    else {\r\n        nameSortValue = name;\r\n    }\r\n    let canDelete = false;\r\n    let canInvite = false;\r\n    let canInviteAgain = false;\r\n    let canAddQuota = false;\r\n    let canSendInvitation = false;\r\n    // Determine user status\r\n    let status;\r\n    switch (provisioningState) {\r\n        case LabServicesModels.ProvisioningState.Deleting:\r\n            status = UserStatus.Deleting;\r\n            break;\r\n        case LabServicesModels.ProvisioningState.Failed:\r\n            status = UserStatus.Failed;\r\n            canDelete = true;\r\n            break;\r\n        default:\r\n            canDelete = true;\r\n            canAddQuota = true;\r\n            canSendInvitation = true;\r\n            status =\r\n                registrationState === LabServicesModels.RegistrationState.Registered\r\n                    ? UserStatus.Registered\r\n                    : UserStatus.NotRegistered;\r\n            break;\r\n    }\r\n    // Determine Invitation text for filter and list view.\r\n    let inviteStatus;\r\n    switch (invitationState) {\r\n        case LabServicesModels.InvitationState.NotSent:\r\n            inviteStatus = InviteStatus.NotSent;\r\n            canInvite = canSendInvitation;\r\n            break;\r\n        case LabServicesModels.InvitationState.Sending:\r\n            inviteStatus = InviteStatus.Sending;\r\n            break;\r\n        case LabServicesModels.InvitationState.Sent:\r\n            inviteStatus = InviteStatus.Sent;\r\n            canInviteAgain = canSendInvitation;\r\n            break;\r\n        case LabServicesModels.InvitationState.Failed:\r\n            inviteStatus = InviteStatus.SendingFailed;\r\n            canInvite = canSendInvitation;\r\n            break;\r\n        default:\r\n            inviteStatus = InviteStatus.Unknown;\r\n            break;\r\n    }\r\n    const currentUsage = !!totalUsage ? moment.duration(totalUsage).asHours() : 0;\r\n    const additionalQuota = !!additionalUsageQuota ? moment.duration(additionalUsageQuota).asHours() : 0;\r\n    const totalQuota = labQuotaInHours + additionalQuota;\r\n    return {\r\n        key: id || '',\r\n        id: id || '',\r\n        name,\r\n        email: email || '',\r\n        nameSortValue,\r\n        status,\r\n        inviteStatus,\r\n        currentUsage,\r\n        totalQuota,\r\n        additionalQuota,\r\n        canDelete,\r\n        canInvite,\r\n        canInviteAgain,\r\n        canAddQuota,\r\n        latestRegistrationLinkEmailSent: invitationSent,\r\n    };\r\n}\r\nconst convertUserDetails = memoize((users, labQuotaInHours, isVNext) => {\r\n    return !isVNext\r\n        ? users.map((user) => getUserDetails(user, labQuotaInHours))\r\n        : users.map((user) => getVNextUserDetails(user, labQuotaInHours));\r\n});\r\nconst getRegistrationLink = memoize((lab) => {\r\n    const isVNext = isVNextLab(lab.id);\r\n    const invitationCode = isVNext ? lab.securityProfile?.registrationCode : lab.invitationCode;\r\n    const location = lab.location.toLowerCase();\r\n    const isDev = lab.id.toLowerCase().indexOf(Constants.DevSubscriptionId) >= 0 &&\r\n        (!isVNext\r\n            ? location === Constants.Regions.SoutheastAsia\r\n            : location === Constants.Regions.WestUs2 || location === Constants.Regions.EastUs2);\r\n    if (location === Constants.Regions.CentralUsEuap || location === Constants.Regions.EastUs2Euap) {\r\n        return `https://${hostNames.INSIDERS}/register/${invitationCode}`;\r\n    }\r\n    else if (isDev) {\r\n        return `https://${hostNames.DEV}/register/${invitationCode}`;\r\n    }\r\n    else {\r\n        return `https://${hostNames.PROD}/register/${invitationCode}`;\r\n    }\r\n});\r\nexport const getUserListViewModel = memoize((state) => {\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    const currentLab = getCurrentLab(state);\r\n    const isReadOnly = isCurrentLabReadOnly(state);\r\n    const isLoadingGroups = isLoadingGroupList(state);\r\n    const aadGroupName = getGroupName(state);\r\n    const groups = getGroups(state);\r\n    const isGroupSyncModeEnabled = isLabGroupSynced(currentLab);\r\n    let labQuota = getLabUsageQuota(currentLab);\r\n    labQuota = labQuota ?? Constants.MaxLabQuota;\r\n    const isRestricted = isLabUserRestricted(currentLab);\r\n    const registrationLink = !!currentLab ? getRegistrationLink(currentLab) : '';\r\n    const isSyncing = isCurrentLabUserSyncing(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    const ianaTimezone = getIanaTimezone(state);\r\n    const locale = getLocale(state);\r\n    if (!isVNext) {\r\n        const labStore = state.get('labStore');\r\n        const userStore = state.get('userStore');\r\n        const lab = currentLab;\r\n        const labUpdateError = labStore.get('updateError');\r\n        const isUpdatingLab = labStore.get('isUpdating');\r\n        const isUpdatingUsers = userStore.get('isUpdating');\r\n        const isLabTeamsOrLmsConnected = isLabConnectedLmsOrTeams(lab);\r\n        const isSyncing = isCurrentLabUserSyncing(state);\r\n        const aadGroupId = lab?.aadGroupId;\r\n        const lastGroupSyncTime = lab?.lastGroupSyncTime;\r\n        const userData = userStore.get('users');\r\n        const addError = userStore.get('addError');\r\n        const deleteErrors = userStore.get('deleteErrors');\r\n        const inviteError = userStore.get('inviteError');\r\n        const updateErrors = userStore.get('updateErrors');\r\n        const isAdding = userStore.get('isAdding');\r\n        const isDeleting = userStore.get('isDeleting');\r\n        const isInviting = userStore.get('isInviting');\r\n        const users = convertUserDetails(userData, labQuota, false);\r\n        const labStoreLoadState = labStore.get('loadState');\r\n        const userStoreLoadState = userStore.get('loadState');\r\n        const isLoading = storeIsLoading(labStoreLoadState) || storeIsLoading(userStoreLoadState) || isLoadingGroupName(state);\r\n        const hasLoadError = storeHasLoadError(labStoreLoadState) || storeHasLoadError(userStoreLoadState);\r\n        return {\r\n            users,\r\n            lab,\r\n            labQuota,\r\n            registrationLink,\r\n            isRestricted,\r\n            isReadOnly,\r\n            isGroupSyncModeEnabled,\r\n            isLabTeamsOrLmsConnected,\r\n            isSyncing,\r\n            groupId: aadGroupId,\r\n            lastGroupSyncTime,\r\n            groupName: aadGroupName,\r\n            groups,\r\n            isLoadingGroups,\r\n            isAdding,\r\n            isDeleting,\r\n            isInviting,\r\n            isUpdatingLab,\r\n            isUpdatingUsers,\r\n            labUpdateError,\r\n            hasAddErrors: !!addError,\r\n            hasDeleteErrors: deleteErrors.size > 0,\r\n            hasInviteErrors: !!inviteError,\r\n            hasUpdateErrors: updateErrors.size > 0,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            isLoading,\r\n            hasLoadError,\r\n            locale,\r\n            ianaTimezone,\r\n        };\r\n    }\r\n    else {\r\n        const labStore = state.get('vNextLabStore');\r\n        const userStore = state.get('vNextUserStore');\r\n        const lab = currentLab;\r\n        const labUpdateError = getCurrentLabUpdateError(state);\r\n        const isUpdatingLab = labStore.get('isUpdating');\r\n        const isUpdatingUsers = userStore.get('isUpdating');\r\n        const groupId = getVNextLabGroupId(lab);\r\n        const lastGroupSyncTime = !!lab?.lastGroupSyncTime ? new Date(lab.lastGroupSyncTime) : undefined;\r\n        const userData = userStore.get('users');\r\n        const addErrors = userStore.get('addErrors');\r\n        const deleteErrors = userStore.get('deleteErrors');\r\n        const inviteErrors = userStore.get('inviteErrors');\r\n        const updateErrors = userStore.get('updateErrors');\r\n        const isAdding = userStore.get('isAdding');\r\n        const isDeleting = userStore.get('isDeleting');\r\n        const isInviting = userStore.get('isInviting');\r\n        const users = convertUserDetails(userData, labQuota, true);\r\n        const labStoreLoadState = labStore.get('loadState');\r\n        const userStoreLoadState = userStore.get('loadState');\r\n        const isLoading = storeIsLoading(labStoreLoadState) ||\r\n            storeIsLoading(userStoreLoadState) ||\r\n            isLoadingGroupName(state) ||\r\n            isLoadingLabMetadata(state);\r\n        const hasLoadError = storeHasLoadError(labStoreLoadState) || storeHasLoadError(userStoreLoadState);\r\n        const shouldDisableLabUpdate = shouldDisableCurrentLabUpdate(state);\r\n        const isLabTeamsOrLmsConnected = isLabConnectedLmsOrTeams(lab);\r\n        const isLabLmsConnected = isVNextLabLmsConnected(lab);\r\n        const groupName = getVNextLabGroupName(state);\r\n        return {\r\n            users,\r\n            lab,\r\n            labQuota,\r\n            registrationLink,\r\n            isRestricted,\r\n            isReadOnly,\r\n            isGroupSyncModeEnabled,\r\n            isLabTeamsOrLmsConnected,\r\n            isSyncing,\r\n            groupId,\r\n            lastGroupSyncTime,\r\n            groupName,\r\n            groups,\r\n            isLoadingGroups,\r\n            isAdding,\r\n            isDeleting,\r\n            isInviting,\r\n            isUpdatingLab,\r\n            isUpdatingUsers,\r\n            labUpdateError,\r\n            hasAddErrors: addErrors.size > 0,\r\n            hasDeleteErrors: deleteErrors.size > 0,\r\n            hasInviteErrors: inviteErrors.size > 0,\r\n            hasUpdateErrors: updateErrors.size > 0,\r\n            isTeamsOrLmsIntegrationEnabled,\r\n            isLoading,\r\n            hasLoadError,\r\n            locale,\r\n            ianaTimezone,\r\n            shouldDisableLabUpdate,\r\n            isLabLmsConnected,\r\n        };\r\n    }\r\n});\r\nexport const getUserListContainerModel = memoize((state) => {\r\n    const search = getSearch(state);\r\n    const userListViewModel = getUserListViewModel(state);\r\n    const isVNext = !isCurrentLabParentLabAccount(state);\r\n    return {\r\n        search,\r\n        userListViewModel,\r\n        isVNext,\r\n    };\r\n});\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { duration } from 'moment';\r\nimport * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { PageTitle } from '../common/page/page-title';\r\nimport { LabUpdateOperation } from '../data/models/lab';\r\nimport { clearLabUpdateError, updateLab, updateLabAccessMode, pollLabStart, pollLabStop, syncLabUsers, updateVNextLab, updateVNextLabAccessMode, } from '../redux/actions/lab/lab-action-creators';\r\nimport { getGroups as searchForGroups } from '../redux/actions/group/group-action-creators';\r\nimport { addUsers, clearAddUsersError, clearDeleteUsersError, clearInviteUsersError, clearLoadUsersError, clearUpdateAdditionalQuotaForUsersError, deleteUsers, inviteUsers, listUsers, pollUsersStart, pollUsersStop, updateAdditionalQuotaForUsers, } from '../redux/actions/user/user-action-creators';\r\nimport Constants from '../utils/constants';\r\nimport { UserList } from './user-list';\r\nimport { messages } from './user-list-messages';\r\nimport { routerActions } from 'connected-react-router';\r\nimport { InviteStatus, UserStatus } from './user-list-models';\r\nimport { getUserListContainerModel } from './user-list-selectors';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nfunction determinePollingIntervalLength(users) {\r\n    if (users.some((user) => user.inviteStatus === InviteStatus.Sending)) {\r\n        return Constants.FiveSecondInterval;\r\n    }\r\n    if (users.some((user) => user.status === UserStatus.Deleting)) {\r\n        return Constants.TenSecondInterval;\r\n    }\r\n    return Constants.DefaultPollingInterval;\r\n}\r\nclass UserListContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._setPollingInterval = (labId, pollingIntervalMs, initialDelayMs) => {\r\n            this._pollingIntervalMs = pollingIntervalMs;\r\n            this.props.pollUsersStart(labId, pollingIntervalMs, initialDelayMs);\r\n        };\r\n        this._updateLabAccessMode = (isRestricted) => {\r\n            const { userListViewModel, updateLabAccessMode, updateVNextLabAccessMode } = this.props;\r\n            const { lab } = userListViewModel;\r\n            if (!lab) {\r\n                return;\r\n            }\r\n            const isVNext = isVNextLab(lab.id);\r\n            if (!isVNext) {\r\n                const userAccessMode = isRestricted ? Ml.LabUserAccessMode.Restricted : Ml.LabUserAccessMode.Open;\r\n                updateLabAccessMode(lab.id, userAccessMode);\r\n            }\r\n            else {\r\n                updateVNextLabAccessMode(lab.id, !isRestricted);\r\n            }\r\n        };\r\n        this._updateLabQuota = (quota) => {\r\n            const { userListViewModel, updateLab, updateVNextLab } = this.props;\r\n            const { lab } = userListViewModel;\r\n            if (!lab) {\r\n                return;\r\n            }\r\n            const isVNext = isVNextLab(lab.id);\r\n            if (!isVNext) {\r\n                const currentLab = lab;\r\n                const usageQuota = duration(quota, 'hours');\r\n                const labUpdate = { ...currentLab, usageQuota };\r\n                updateLab(labUpdate, LabUpdateOperation.Quota);\r\n            }\r\n            else {\r\n                const currentLab = lab;\r\n                const virtualMachineProfile = {\r\n                    ...currentLab.virtualMachineProfile,\r\n                    usageQuota: duration(quota, 'hours').toISOString(),\r\n                };\r\n                updateVNextLab(currentLab.id, { virtualMachineProfile }, LabUpdateOperation.Quota);\r\n            }\r\n        };\r\n        this._updateUserQuota = (userIds, quota) => {\r\n            const { updateAdditionalQuotaForUsers } = this.props;\r\n            updateAdditionalQuotaForUsers(userIds, quota);\r\n        };\r\n        this._addUsers = (emailAddresses) => {\r\n            const { labId, addUsers } = this.props;\r\n            addUsers(labId, emailAddresses);\r\n        };\r\n        this._syncFromGroup = (groupId, isDeletionExternallyManaged) => {\r\n            const { userListViewModel, updateLab, updateVNextLab } = this.props;\r\n            const { lab } = userListViewModel;\r\n            if (!lab) {\r\n                return;\r\n            }\r\n            const isVNext = isVNextLab(lab.id);\r\n            if (!isVNext) {\r\n                const currentLab = lab;\r\n                const aadGroupId = groupId;\r\n                const updateGroupId = { ...currentLab, aadGroupId, isDeletionExternallyManaged };\r\n                updateLab(updateGroupId, LabUpdateOperation.SetGroup);\r\n            }\r\n            else {\r\n                const currentLab = lab;\r\n                const rosterProfile = { ...currentLab.rosterProfile, activeDirectoryGroupId: groupId };\r\n                updateVNextLab(currentLab.id, { rosterProfile }, LabUpdateOperation.SetGroup);\r\n            }\r\n        };\r\n        this._searchForGroups = (filterText) => {\r\n            const { searchForGroups } = this.props;\r\n            searchForGroups(filterText);\r\n        };\r\n        this._inviteUsers = (emailAddresses, extraMessage) => {\r\n            const { labId, inviteUsers } = this.props;\r\n            inviteUsers(labId, emailAddresses, extraMessage);\r\n        };\r\n        this._deleteUsers = (userIds) => {\r\n            const { deleteUsers } = this.props;\r\n            deleteUsers(userIds);\r\n        };\r\n        this._syncUsers = () => {\r\n            const { labId, syncLabUsers } = this.props;\r\n            syncLabUsers(labId);\r\n        };\r\n        this._navigateRoute = this._navigateRoute.bind(this);\r\n    }\r\n    componentDidMount() {\r\n        const { isVNext, userListViewModel } = this.props;\r\n        const { lab, users, isGroupSyncModeEnabled, isSyncing } = userListViewModel;\r\n        if (lab) {\r\n            const nextPollingInterval = determinePollingIntervalLength(users);\r\n            this._setPollingInterval(lab.id, nextPollingInterval);\r\n            if (!isVNext && isGroupSyncModeEnabled && isSyncing) {\r\n                this.props.pollLabStart(lab.id, Constants.OneMinuteInterval, Constants.DefaultPollingDelayInterval);\r\n            }\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { isVNext, userListViewModel } = this.props;\r\n        const { lab, users, isGroupSyncModeEnabled, isSyncing } = userListViewModel;\r\n        if (lab) {\r\n            const nextPollingIntervalMs = determinePollingIntervalLength(users);\r\n            if (!prevProps.userListViewModel.lab || prevProps.userListViewModel.lab.id !== lab.id) {\r\n                this.props.pollUsersStop();\r\n                this._setPollingInterval(lab.id, nextPollingIntervalMs);\r\n            }\r\n            else if (this._pollingIntervalMs !== nextPollingIntervalMs) {\r\n                this.props.pollUsersStop();\r\n                this._setPollingInterval(lab.id, nextPollingIntervalMs, Constants.DefaultPollingDelayInterval);\r\n            }\r\n            if (isGroupSyncModeEnabled && !isVNext) {\r\n                if (!prevProps.userListViewModel.isSyncing && isSyncing) {\r\n                    this.props.pollLabStart(lab.id, Constants.OneMinuteInterval, Constants.DefaultPollingDelayInterval);\r\n                }\r\n                else if (prevProps.userListViewModel.isSyncing && !isSyncing) {\r\n                    this.props.pollLabStop();\r\n                }\r\n            }\r\n        }\r\n    }\r\n    componentWillUnmount() {\r\n        const { isVNext, pollUsersStop, pollLabStop } = this.props;\r\n        pollUsersStop();\r\n        if (!isVNext) {\r\n            pollLabStop();\r\n        }\r\n    }\r\n    _navigateRoute(pathname) {\r\n        const { push, search } = this.props;\r\n        push({ pathname, search });\r\n    }\r\n    render() {\r\n        const { userListViewModel, clearLabUpdateError, clearLoadUsersError, clearAddUsersError, clearDeleteUsersError, clearInviteUsersError, clearUpdateAdditionalQuotaForUsersError, intl, } = this.props;\r\n        const pageTitle = intl.formatMessage(messages.pageTitle);\r\n        return (<>\r\n                <PageTitle subtitle={pageTitle}/>\r\n                <UserList userListViewModel={userListViewModel} clearAddUsersError={clearAddUsersError} clearDeleteUsersError={clearDeleteUsersError} clearInviteUsersError={clearInviteUsersError} clearLabUpdateError={clearLabUpdateError} clearLoadUsersError={clearLoadUsersError} clearUpdateAdditionalQuotaForUsersError={clearUpdateAdditionalQuotaForUsersError} updateAccessMode={this._updateLabAccessMode} updateQuota={this._updateLabQuota} updateUserQuota={this._updateUserQuota} addUsers={this._addUsers} syncFromGroup={this._syncFromGroup} searchForGroups={this._searchForGroups} inviteUsers={this._inviteUsers} deleteUsers={this._deleteUsers} navigateRoute={this._navigateRoute} syncUsers={this._syncUsers}/>\r\n            </>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getUserListContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    updateLab,\r\n    updateVNextLab,\r\n    updateLabAccessMode,\r\n    updateVNextLabAccessMode,\r\n    clearLabUpdateError,\r\n    listUsers,\r\n    addUsers,\r\n    inviteUsers,\r\n    deleteUsers,\r\n    clearLoadUsersError,\r\n    clearAddUsersError,\r\n    clearDeleteUsersError,\r\n    clearInviteUsersError,\r\n    pollUsersStart,\r\n    pollUsersStop,\r\n    updateAdditionalQuotaForUsers,\r\n    clearUpdateAdditionalQuotaForUsersError,\r\n    push: routerActions.push,\r\n    syncLabUsers,\r\n    searchForGroups,\r\n    pollLabStart,\r\n    pollLabStop,\r\n};\r\nexport const UserListContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(UserListContainerInjected));\r\nexport default UserListContainer;\r\n","import * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { CoreQuotaStatus, determineAdditionalVms } from '../redux/selectors/core-limit-selectors';\r\nimport { RequestLimitIncreaseLink } from '../common/request-limit-increase-link';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nexport const CoresRemainingMessage = (props) => {\r\n    const { quotaStatus, currentTenantId, labId, capacity: initialCapacity, hasBeenPublished, remainingVmsInLab, maxCapacity, formCapacity, } = props;\r\n    const additionalVms = !isVNextLab(labId)\r\n        ? determineAdditionalVms(initialCapacity, hasBeenPublished, remainingVmsInLab)\r\n        : remainingVmsInLab !== undefined\r\n            ? remainingVmsInLab - initialCapacity\r\n            : undefined;\r\n    if (quotaStatus === CoreQuotaStatus.Exempt) {\r\n        return <></>;\r\n    }\r\n    if (remainingVmsInLab === undefined) {\r\n        return <></>;\r\n    }\r\n    if (formCapacity === undefined && remainingVmsInLab > 10) {\r\n        return <></>;\r\n    }\r\n    if (formCapacity !== undefined && formCapacity < maxCapacity && remainingVmsInLab > 10) {\r\n        return <></>;\r\n    }\r\n    return (<div style={{ fontSize: '12px' }}>\r\n            <FormattedMessage id=\"AdditionalMachinesAvailableCapacityFlyout\" defaultMessage=\"{numberOfMachines} additional machines are available due to virtual machine limits on your account. You need to {requestLimitIncreaseLink}. You can expect the process to take 1-5 days. Due to high demand, some SKUs may be temporarily unavailable.\" description=\"Message explaining how many additional machines are available for the user.\" values={{\r\n        numberOfMachines: additionalVms,\r\n        requestLimitIncreaseLink: <RequestLimitIncreaseLink labId={labId} tenantId={currentTenantId}/>,\r\n    }}/>\r\n        </div>);\r\n};\r\nexport default CoresRemainingMessage;\r\n","import { DefaultButton, Panel, PanelType, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { Field, Form } from 'react-final-form';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport { SafeSpinButton } from '../common/safe-spin-button';\r\nimport { SubmitButton } from '../common/submit-button';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport commonMessages from '../language/common-messages';\r\nimport { determineVCurrentOrVNextLabRemainingVms } from '../redux/selectors/core-limit-selectors';\r\nimport { usePrevious } from '../utils/common';\r\nimport Constants from '../utils/constants';\r\nimport CoresRemainingMessage from './cores-remaining-message';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'VmListCapacityFlyoutTitle',\r\n        defaultMessage: 'Lab capacity',\r\n        description: 'Title of flyout dialog for editing lab capacity number.',\r\n    },\r\n    label: {\r\n        id: 'VmListCapacityLabel',\r\n        defaultMessage: 'Maximum machines in lab',\r\n        description: 'Label for number of machines text box (integer) on lab capacity flyout dialog.',\r\n    },\r\n});\r\nexport const CapacityFlyout = (props) => {\r\n    const intl = useIntl();\r\n    const { isGpu, coresPerVm, coreQuotaData, coreQuotaStatus, currentTenantId, labId, minCapacity, capacity: initialCapacity, isSubmitting, hasBeenPublished, onSubmit, onDismiss, } = props;\r\n    let { maxCapacity } = props;\r\n    // close the dialog after we are done submitting\r\n    const previousIsSubmitting = usePrevious(isSubmitting);\r\n    React.useEffect(() => {\r\n        if (previousIsSubmitting && !isSubmitting) {\r\n            onDismiss();\r\n        }\r\n    }, [isSubmitting]);\r\n    const msg = intl.formatMessage;\r\n    const isVNext = isVNextLab(labId);\r\n    const remainingVmsInLab = determineVCurrentOrVNextLabRemainingVms(isVNext, isGpu, coresPerVm, coreQuotaData, initialCapacity);\r\n    if (remainingVmsInLab !== undefined) {\r\n        const maxCapacityOfLab = hasBeenPublished && !isVNext ? remainingVmsInLab + initialCapacity : remainingVmsInLab;\r\n        maxCapacity = Math.min(maxCapacity, maxCapacityOfLab);\r\n    }\r\n    return (<Form initialValues={{ capacity: initialCapacity }} onSubmit={(values) => onSubmit(values.capacity)}>\r\n            {(formProps) => (<Panel type={PanelType.custom} customWidth={`${Constants.DefaultFlyoutWidth}px`} isOpen={true} isLightDismiss={!isSubmitting} onDismiss={isSubmitting ? undefined : onDismiss} headerText={msg(messages.title)} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={getCustomTheme().panelStyles} onRenderFooterContent={() => (<Stack horizontal horizontalAlign=\"end\" tokens={{ childrenGap: '8px' }}>\r\n                            <Stack.Item>\r\n                                <SubmitButton default={true} disabled={formProps.pristine || !formProps.valid} isSubmitting={isSubmitting} buttonText={msg(commonMessages.save)} onClick={() => formProps.handleSubmit()}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item>\r\n                                <DefaultButton disabled={isSubmitting} onClick={onDismiss}>\r\n                                    {msg(commonMessages.cancel)}\r\n                                </DefaultButton>\r\n                            </Stack.Item>\r\n                        </Stack>)}>\r\n                    <div style={{ marginTop: 10, marginBottom: 30 }}>\r\n                        <FormattedMessage id=\"VmListCapacityFlyoutDescription\" defaultMessage=\"Capacity determines the maximum number of machines in the lab. It should be at least the number of users registered in the lab.\" description=\"Description in lab capacity flyout explaining what capacity is.\"/>\r\n                    </div>\r\n                    <CoresRemainingMessage currentTenantId={currentTenantId} labId={labId} capacity={initialCapacity} quotaStatus={coreQuotaStatus} hasBeenPublished={hasBeenPublished} remainingVmsInLab={remainingVmsInLab} maxCapacity={maxCapacity} formCapacity={formProps.values.capacity}/>\r\n                    <Field name=\"capacity\">\r\n                        {(fieldProps) => (<SafeSpinButton autoFocus label={msg(messages.label)} value={fieldProps.input.value} onChange={fieldProps.input.onChange} disabled={isSubmitting} min={minCapacity} max={maxCapacity}/>)}\r\n                    </Field>\r\n                </Panel>)}\r\n        </Form>);\r\n};\r\nexport default CapacityFlyout;\r\n","import { DefaultButton, Dialog, DialogFooter, PrimaryButton } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, useIntl } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nconst messages = defineMessages({\r\n    title: {\r\n        id: 'StartVmsDialogTitle',\r\n        defaultMessage: 'Start virtual machines',\r\n        description: 'Title of confirmation dialog when starting virtual machines.',\r\n    },\r\n});\r\nconst StartVmsDialog = (props) => {\r\n    const intl = useIntl();\r\n    const msg = intl.formatMessage;\r\n    return (<Dialog hidden={false} onDismiss={props.onDismiss} dialogContentProps={{ title: msg(messages.title) }} closeButtonAriaLabel={msg(commonMessages.cancel)} styles={{ main: { maxWidth: '358px' } }}>\r\n            <div style={{ paddingTop: '15px' }}>\r\n                <FormattedMessage id=\"StartVmsDialogTextFormat\" defaultMessage=\"<b>When you start a user's virtual machine, it will start accruing cost. Your usage will not affect the user's quota</b>. Please make sure to shut it down when you are done using it.\" description=\"Text of confirmation dialog when starting virtual machines. <b> and </b> should not be localized, but the text between them should.\" values={{\r\n        b: (chunks) => <b>{chunks}</b>,\r\n    }}/>\r\n            </div>\r\n            <DialogFooter styles={{ actions: { marginTop: '27px' } }}>\r\n                <PrimaryButton text={msg(commonMessages.start)} onClick={props.onSubmit}/>\r\n                <DefaultButton autoFocus text={msg(commonMessages.cancel)} onClick={props.onDismiss}/>\r\n            </DialogFooter>\r\n        </Dialog>);\r\n};\r\nexport default StartVmsDialog;\r\n","import { CheckboxVisibility, CommandBar, ContextualMenuItemType, DetailsList, DetailsListLayoutMode, DirectionalHint, Icon, IconButton, Link, MarqueeSelection, MessageBar, MessageBarType, ScrollablePane, ScrollbarVisibility, SearchBox, Selection, SelectionMode, Spinner, SpinnerSize, Stack, Sticky, StickyPositionType, Text, TooltipHost, } from '@fluentui/react';\r\nimport { createObjectCsvStringifier } from 'csv-writer';\r\nimport _ from 'lodash';\r\nimport memoize from 'memoize-one';\r\nimport * as React from 'react';\r\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\r\nimport { getRdpConnectData, getSshCommand, getSshConnectData } from '../common/connect-to-vm/connect-utilities';\r\nimport RdpInfoDialog from '../common/connect-to-vm/rdp-info-dialog';\r\nimport { ConnectToVmDialog } from '../common/connect-to-vm/ssh-connect-dialog';\r\nimport { getNavigationItems } from '../common/lab-nav-items';\r\nimport { LoadingContainer } from '../common/loading-section';\r\nimport { RequestLimitIncreaseInSentenceLink } from '../common/request-limit-increase-link';\r\nimport { getConnectionContextMenuItems } from '../common/selectors/vm-connect';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport VmPowerState from '../common/vm/vm-power-state';\r\nimport { VmUsageColumn } from '../common/vm/vm-usage-column';\r\nimport { ConnectionType, VmAssignmentType, VmState } from '../data/models/environment-common';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport commonMessages from '../language/common-messages';\r\nimport { createAndDownloadFile } from '../utils/files';\r\nimport LabNavKeys from '../utils/lab-nav-key';\r\nimport { objectKeySorter } from '../utils/sorting';\r\nimport { trackTrace } from '../utils/telemetry/telemetry-channel';\r\nimport CapacityFlyout from './capacity-flyout';\r\nimport ResetVmsDialog from './reset-vms-dialog';\r\nimport StartVmsDialog from './start-vms-dialog';\r\nimport TroubleshootDialog from '../common/troubleshoot-dialog/troubleshoot-dialog';\r\nimport { messages as commonVmListMessages } from './vm-list-messages';\r\nimport GroupSyncTimeInfo from '../common/group-sync-time-info';\r\nimport { getNextGroupSyncTime } from '../common/selectors/group-sync-time-selectors';\r\nimport Routes from '../utils/routes';\r\nimport LabErrorBanner from '../lab/lab-error-banner';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport templateMessages from '../template/template-messages';\r\nimport './vm-list.css';\r\nimport { VmAgentError, VmOperationError, VmHeartbeatError } from './vm-operation-error';\r\nimport { OperationStatus, OperationType, mapResourceErrorToOperation } from '../data/models/vnext/operation';\r\nimport { VmOperationSuccess } from './vm-operation-success';\r\nconst messages = defineMessages({\r\n    labCapacityCommandFormat: {\r\n        id: 'VmListLabCapacityCommandFormat',\r\n        defaultMessage: 'Lab capacity: {numberOfMachines} machines',\r\n        description: 'Name of command on virtual machines page command bar to open lab capacity flyout. {numberOfMachines} is an integer - number of machines in the lab.',\r\n    },\r\n    stopAllCommand: {\r\n        id: 'VmListStopAllCommand',\r\n        defaultMessage: 'Stop all',\r\n        description: 'Name of command on virtual machines page command bar to stop all virtual machines in the lab.',\r\n    },\r\n    startAllCommand: {\r\n        id: 'VmListStartAllCommand',\r\n        defaultMessage: 'Start all',\r\n        description: 'Name of the command on the virtual machines page command bar to start all virtual machines in a lab.',\r\n    },\r\n    filterVirtualMachines: {\r\n        id: 'VmListFilterVirtualMachines',\r\n        defaultMessage: 'Filter virtual machines',\r\n        description: 'Tooltip on the filter button above virtual machines list.',\r\n    },\r\n    startCommand: {\r\n        id: 'VmListStartCommand',\r\n        defaultMessage: 'Start',\r\n        description: 'Name of command on virtual machines page command bar to start one or more virtual machines.',\r\n    },\r\n    stopCommand: {\r\n        id: 'VmListStopCommand',\r\n        defaultMessage: 'Stop',\r\n        description: 'Name of command on virtual machines page command bar to stop one or more virtual machines.',\r\n    },\r\n    resetCommand: {\r\n        id: 'VmListResetCommand',\r\n        defaultMessage: 'Reimage',\r\n        description: 'Name of command on virtual machines page command bar to reset one or more virtual machines.',\r\n    },\r\n    connectCommand: {\r\n        id: 'VmListConnectCommand',\r\n        defaultMessage: 'Connect',\r\n        description: 'Name of command on virtual machines page command bar to connect to a virtual machine.',\r\n    },\r\n    stateColumnHeader: {\r\n        id: 'VmListStateColumnHeader',\r\n        defaultMessage: 'State',\r\n        description: 'Header for State column of a table containing user or virtual machine state.',\r\n    },\r\n    osColumnHeader: {\r\n        id: 'VmListOsColumnHeader',\r\n        defaultMessage: 'OS',\r\n        description: 'Header for OS (operating system) column of a table containing user or virtual machine state.',\r\n    },\r\n    lastUsedColumnHeader: {\r\n        id: 'VmListLastUsedColumnHeader',\r\n        defaultMessage: 'Last used',\r\n        description: 'Title for Last Used column of a table containing date/time when a VM was last used.',\r\n    },\r\n    typeFilterMenu: {\r\n        id: 'VmListTypeFilterMenu',\r\n        defaultMessage: 'Type',\r\n        description: 'Label for filter menu to select virtual machine Type (assigned or unassigned).',\r\n    },\r\n    typeFilterMenuSelected: {\r\n        id: 'VmListTypeFilterMenuSelected',\r\n        defaultMessage: 'Type: {selectedTypes}',\r\n        description: 'Label for filter menu to select virtual machine Type (assigned or unassigned) when a filter is selected. {selectedTypes} is a comma separated list of selected types.',\r\n    },\r\n    stateFilterMenuSelected: {\r\n        id: 'VmListStateFilterMenuSelected',\r\n        defaultMessage: 'State: {selectedStates}',\r\n        description: 'Label for filter menu to select virtual machine States (creating, running, stopping, etc.) when a filter is selected. {selectedStates} is a comma separated list of selected states.',\r\n    },\r\n    assignedType: {\r\n        id: 'VmAssignedType',\r\n        defaultMessage: 'Assigned',\r\n        description: 'Text shown for a virtual machine which is assigned to a lab user.',\r\n    },\r\n    unassignedType: {\r\n        id: 'VmUnassignedType',\r\n        defaultMessage: 'Unassigned',\r\n        description: 'Text shown for a virtual machine which is not assigned to a lab user.',\r\n    },\r\n    preparingToConnect: {\r\n        id: 'VmPreparingToConnectAriaLabel',\r\n        defaultMessage: 'Preparing to connect',\r\n        description: 'Aria label for the loading spinner shown when we are requesting the data we need to connect to a VM.',\r\n    },\r\n    privateIpColumnHeader: {\r\n        id: 'VmListPrivateIpColumnHeader',\r\n        defaultMessage: 'Private IP Address',\r\n        description: 'Column header for private IP address of virtual machine.',\r\n    },\r\n    vmListCheckboxAriaLabel: {\r\n        id: 'VMListCheckboxAriaLabel',\r\n        defaultMessage: 'Select a virtual machine',\r\n        description: 'ARIA label for virtual machine list row checkboxes.',\r\n    },\r\n});\r\n// TODO: Re-introduce filtering\r\nclass VmListInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.onVmsPropsChange = memoize((vms, previousSelectedIds) => {\r\n            const selectedItems = [];\r\n            const selectedIds = [];\r\n            const stopTargets = [];\r\n            const startTargets = [];\r\n            const resetTargets = [];\r\n            const redeployTargets = [];\r\n            vms.forEach((vm) => {\r\n                const { id } = vm;\r\n                if (previousSelectedIds.indexOf(id) > -1) {\r\n                    selectedIds.push(id);\r\n                    selectedItems.push(vm);\r\n                    const { canStop, canStart, canReset, canRedeploy } = vm;\r\n                    if (canStop) {\r\n                        stopTargets.push(id);\r\n                    }\r\n                    if (canStart) {\r\n                        startTargets.push(id);\r\n                    }\r\n                    if (canReset) {\r\n                        resetTargets.push(id);\r\n                    }\r\n                    if (!!canRedeploy) {\r\n                        redeployTargets.push(id);\r\n                    }\r\n                }\r\n            });\r\n            this.setState({\r\n                selectedCount: selectedIds.length,\r\n                selectedIds,\r\n                stopTargets,\r\n                startTargets,\r\n                resetTargets,\r\n                redeployTargets,\r\n            });\r\n            return selectedItems;\r\n        });\r\n        this.onExpandingStateChange = memoize((vms, previousConnectExpandData) => {\r\n            // handles opening the dialogs / downloading the RDP file post expand\r\n            const expandingIds = Object.keys(previousConnectExpandData);\r\n            if (expandingIds.length > 0) {\r\n                const connectExpandData = { ...previousConnectExpandData };\r\n                const finishedExpandingItems = vms.filter((item) => expandingIds.indexOf(item.id) > -1 &&\r\n                    !item.isExpanding &&\r\n                    (!!item.sshAuthority || !!item.rdpAuthority));\r\n                if (finishedExpandingItems.size > 0) {\r\n                    finishedExpandingItems.map((item) => {\r\n                        const connectionType = connectExpandData[item.id];\r\n                        delete connectExpandData[item.id];\r\n                        this._onConnect(item, connectionType);\r\n                    });\r\n                    this.setState({ connectExpandData });\r\n                }\r\n            }\r\n        });\r\n        this.filterAndSortVms = memoize((vms, selectedIds, // used purely for memoization\r\n        filterText, filterStates, filterTypes, sortByColumn, isSortDescending, sorterStateMap) => {\r\n            const filteredItems = vms\r\n                .filter((item) => (!filterText || item.assignedTo.toLowerCase().includes(filterText.toLowerCase())) &&\r\n                (filterStates.length < 1 || filterStates.indexOf(item.vmState) > -1) &&\r\n                (filterTypes.length < 1 || filterTypes.indexOf(item.vmAssignmentType) > -1))\r\n                .toArray();\r\n            const key = sortByColumn;\r\n            const sorter = objectKeySorter(key, isSortDescending, sorterStateMap);\r\n            const sortedItems = filteredItems.sort(sorter);\r\n            return sortedItems;\r\n        });\r\n        // Handles Export to CSV command\r\n        this._onExportClicked = () => {\r\n            const { vmListViewModel, intl } = this.props;\r\n            const { vmDetails: items } = vmListViewModel;\r\n            const msg = intl.formatMessage;\r\n            const vmStateMap = this._buildVmStateMap();\r\n            const writer = createObjectCsvStringifier({\r\n                header: [\r\n                    { id: 'assignedTo', title: msg(commonMessages.nameColumnHeader) },\r\n                    { id: 'vmState', title: msg(messages.stateColumnHeader) },\r\n                    { id: 'currentUsage', title: msg(commonMessages.usageColumnHeader) },\r\n                    { id: 'privateIpAddress', title: msg(messages.privateIpColumnHeader) },\r\n                ],\r\n            });\r\n            const records = items\r\n                .map((o) => ({\r\n                assignedTo: o.vmAssignmentType === VmAssignmentType.Unassigned ? msg(messages.unassignedType) : o.assignedTo,\r\n                vmState: vmStateMap[o.vmState],\r\n                currentUsage: o.currentUsage,\r\n                privateIpAddress: o.privateIpAddress,\r\n            }))\r\n                .toArray();\r\n            const csv = writer.getHeaderString() + writer.stringifyRecords(records);\r\n            createAndDownloadFile(`${msg(commonVmListMessages.pageTitle)}.csv`, csv, true);\r\n        };\r\n        this._buildVmAssignedTypeMap = this._buildVmAssignedTypeMap.bind(this);\r\n        this._buildVmStateMap = this._buildVmStateMap.bind(this);\r\n        this._getFilterText = this._getFilterText.bind(this);\r\n        this._createColumns = this._createColumns.bind(this);\r\n        this._isStopAllEnabled = this._isStopAllEnabled.bind(this);\r\n        this._onCapacityFlyoutSubmit = this._onCapacityFlyoutSubmit.bind(this);\r\n        this._onColumnClick = this._onColumnClick.bind(this);\r\n        this._onRenderNameColumn = this._onRenderNameColumn.bind(this);\r\n        this._onRenderStateColumn = this._onRenderStateColumn.bind(this);\r\n        this._onResetDialogSubmit = this._onResetDialogSubmit.bind(this);\r\n        this._onStartDialogSubmit = this._onStartDialogSubmit.bind(this);\r\n        this._onStopAllClicked = this._onStopAllClicked.bind(this);\r\n        this._onStopClicked = this._onStopClicked.bind(this);\r\n        this._renderFilterBar = this._renderFilterBar.bind(this);\r\n        this._renderDefaultCommandBar = this._renderDefaultCommandBar.bind(this);\r\n        this._renderListHeader = this._renderListHeader.bind(this);\r\n        this._renderSelectionCommandBar = this._renderSelectionCommandBar.bind(this);\r\n        this._onFilterTextChange = this._onFilterTextChange.bind(this);\r\n        this._onFilterTypeChange = this._onFilterTypeChange.bind(this);\r\n        this._onFilterStateChange = this._onFilterStateChange.bind(this);\r\n        this._onClearTypeFilter = this._onClearTypeFilter.bind(this);\r\n        this._onClearStateFilter = this._onClearStateFilter.bind(this);\r\n        this._onFilterClose = this._onFilterClose.bind(this);\r\n        this._onFilterOpen = this._onFilterOpen.bind(this);\r\n        this._isStartAllEnabled = this._isStartAllEnabled.bind(this);\r\n        this._onDismissConnectDialog = this._onDismissConnectDialog.bind(this);\r\n        this._onDismissedConnectDialog = this._onDismissedConnectDialog.bind(this);\r\n        this._onConnect = this._onConnect.bind(this);\r\n        this._onConnectSsh = this._onConnectSsh.bind(this);\r\n        this._onConnectRdp = this._onConnectRdp.bind(this);\r\n        this._onConnectSshInBrowser = this._onConnectSshInBrowser.bind(this);\r\n        this._onConnectRdpInBrowser = this._onConnectRdpInBrowser.bind(this);\r\n        this._onRenderRow = this._onRenderRow.bind(this);\r\n        this._onRedeployClicked = this._onRedeployClicked.bind(this);\r\n        this._selection = new Selection({\r\n            onSelectionChanged: () => {\r\n                const { vmDetails: items } = this.props.vmListViewModel;\r\n                const selectedIds = this._selection.getSelection().map((item) => item.key);\r\n                this.onVmsPropsChange(items, selectedIds);\r\n            },\r\n        });\r\n        this.state = {\r\n            showCapacityFlyout: false,\r\n            showStartDialog: false,\r\n            showResetDialog: false,\r\n            showSshDialog: false,\r\n            sshCommand: undefined,\r\n            showRdpInfoDialog: false,\r\n            showTroubleshootDialog: false,\r\n            rdpInfo: undefined,\r\n            showFilter: false,\r\n            sortByColumn: 'assignedTo',\r\n            wasStartAllInvoked: false,\r\n            isSortDescending: false,\r\n            selectedCount: 0,\r\n            selectedIds: [],\r\n            stopTargets: [],\r\n            startTargets: [],\r\n            resetTargets: [],\r\n            redeployTargets: [],\r\n            filterText: '',\r\n            filterTypes: [],\r\n            filterStates: [],\r\n            connectExpandData: {},\r\n            showInfoBanner: isVNextLab(this.props.vmListViewModel.lab?.id) &&\r\n                this.props.vmListViewModel.isVmActionsEnabled &&\r\n                this.props.vmListViewModel.isReadOnly\r\n                ? true\r\n                : false,\r\n            operations: this.props.vmListViewModel.operations,\r\n        };\r\n    }\r\n    // This method is deprecated, but it is the\r\n    // most efficient way to reset our selections and without it we can't\r\n    // trigger the ssh dialog / rdp file download so we are using\r\n    // it for now. If this method is removed in a subsequent React release\r\n    // we'll need to re-evaluate this behavior\r\n    UNSAFE_componentWillReceiveProps(nextProps) {\r\n        const { vmListViewModel } = nextProps;\r\n        const { vmDetails: items } = vmListViewModel;\r\n        const { selectedIds, connectExpandData } = this.state;\r\n        const itemsArray = items.toJS();\r\n        const selectedItems = itemsArray.filter((o) => selectedIds.indexOf(o.id) > -1);\r\n        // clear our selections and then reselect them\r\n        this._selection.setItems(itemsArray, true);\r\n        if (selectedItems.length === items.count()) {\r\n            this._selection.setAllSelected(true);\r\n        }\r\n        else {\r\n            this._selection.setAllSelected(false);\r\n            selectedItems.forEach((item) => {\r\n                this._selection.setKeySelected(item.key, true, false);\r\n            });\r\n        }\r\n        // onVmsPropsChange re-calculates our state and then returns the items that should be selected\r\n        // and is memoized for perf\r\n        // update state after reselection to make sure the state won't be reset when selecting\r\n        this.onVmsPropsChange(items, selectedIds);\r\n        // onExpandingStateChange re-calculates state based on VM expands and is memoized for perf\r\n        this.onExpandingStateChange(items, connectExpandData);\r\n    }\r\n    render() {\r\n        const { vmListViewModel, intl, clearLabUpdateError, clearLabCapacityExceedsCoresError, clearStartError, clearResetError, clearStopError, navigateRoute, clearRedeployError, } = this.props;\r\n        const { showStartDialog, showResetDialog, showCapacityFlyout, showSshDialog, showFilter, sshCommand, showRdpInfoDialog, showTroubleshootDialog, rdpInfo, selectedCount, selectedIds, sortByColumn, isSortDescending, filterText, filterStates, filterTypes, showInfoBanner, } = this.state;\r\n        const { lab, vmDetails: items, isReadOnly, currentTenantId, groupName, isGroupSyncModeEnabled, hasBeenPublished, capacity, maxCapacity, coreQuotaData, coresPerVm, isGpu, isLabUpdating, labUpdateError, labCapacityExceedsCoresError, startErrors, stopErrors, resetErrors, redeployErrors, isTeamsOrLmsIntegrationEnabled, isLoading, hasLoadError, ianaTimezone, locale, coreQuotaStatus, isLabTeamsOrLmsConnected, isVmActionsEnabled, } = vmListViewModel;\r\n        const msg = intl.formatMessage;\r\n        const { primaryBackgroundColor, pageTitleStyle, primaryCommandBarStyles, messageBarStyles } = getCustomTheme();\r\n        const usersRoute = Routes.Users(lab?.id);\r\n        if (hasLoadError) {\r\n            const navigationItems = isTeamsOrLmsIntegrationEnabled && lab && lab.id\r\n                ? getNavigationItems(intl, lab.id, LabNavKeys.Users, navigateRoute)\r\n                : undefined;\r\n            return (<div id=\"vm-list-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                    <div id=\"vm-list-content\">\r\n                        {navigationItems && (<div id=\"vm-list-header\">\r\n                                <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                            </div>)}\r\n                        <FullPageMessage image=\"error-general\" message={<FormattedMessage id=\"VmListLoadError\" defaultMessage=\"Cannot load lab virtual machines\" description=\"Error shown on VM list page when it fails to load necessary data from the server.\"/>} messageDetails={<FormattedMessage id=\"VmListLoadErrorDetails\" defaultMessage=\"Your lab does not appear to be in a state to view or edit VMs at this time. Please try again later or contact your Lab Services administator for assistance.\" description=\"Error shown on VM list page when it fails to load necessary data from the server.\"/>}/>\r\n                    </div>\r\n                </div>);\r\n        }\r\n        if (isLoading) {\r\n            const navigationItems = isTeamsOrLmsIntegrationEnabled && lab && lab.id\r\n                ? getNavigationItems(intl, lab.id, LabNavKeys.Users, navigateRoute)\r\n                : undefined;\r\n            return (<div id=\"vm-list-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                    <div id=\"vm-list-content\">\r\n                        {navigationItems && (<div id=\"vm-list-header\">\r\n                                <CommandBar items={[]} farItems={navigationItems} styles={primaryCommandBarStyles}/>\r\n                            </div>)}\r\n                        <LoadingContainer />\r\n                    </div>\r\n                </div>);\r\n        }\r\n        const isVNext = isVNextLab(lab?.id);\r\n        const vmStateMap = this._buildVmStateMap();\r\n        const vmAssignedTypeMap = this._buildVmAssignedTypeMap();\r\n        const minCapacity = items.count((item) => item.vmAssignmentType == VmAssignmentType.Assigned) || (isVNext ? 0 : 1);\r\n        const columns = this._createColumns(sortByColumn, isSortDescending, locale);\r\n        let sorterStateMap = undefined;\r\n        if (sortByColumn === 'vmState') {\r\n            sorterStateMap = vmStateMap;\r\n        }\r\n        const sortedItems = this.filterAndSortVms(items, selectedIds, filterText, filterStates, filterTypes, sortByColumn, isSortDescending, sorterStateMap);\r\n        const detailsList = (<DetailsList data-is-scrollable=\"true\" items={sortedItems} columns={columns} selectionMode={isReadOnly && !isVmActionsEnabled ? SelectionMode.none : SelectionMode.multiple} getKey={(item) => item.id} setKey=\"set\" layoutMode={DetailsListLayoutMode.justified} isHeaderVisible={true} selection={this._selection} onRenderDetailsHeader={this._renderListHeader} onRenderRow={this._onRenderRow} enterModalSelectionOnTouch={true} ariaLabelForSelectionColumn={msg(commonMessages.toggleSelection)} ariaLabelForSelectAllCheckbox={msg(commonMessages.toggleAllSelection)} checkButtonAriaLabel={msg(messages.vmListCheckboxAriaLabel)} checkboxVisibility={CheckboxVisibility.always} compact={false}/>);\r\n        return (<>\r\n                <div id=\"vm-list-container\" style={{ backgroundColor: primaryBackgroundColor }}>\r\n                    <div id=\"vm-list-content\">\r\n                        <div id=\"vm-list-header\">\r\n                            {labCapacityExceedsCoresError && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearLabCapacityExceedsCoresError()} styles={messageBarStyles}>\r\n                                    {msg(commonMessages.coreUsageExceedsErrorBannerMessage, {\r\n            requestLimitIncreaseLink: (<RequestLimitIncreaseInSentenceLink labId={lab.id} tenantId={currentTenantId}/>),\r\n        })}\r\n                                </MessageBar>)}\r\n                            {isReadOnly && isVmActionsEnabled && showInfoBanner && (<MessageBar messageBarType={MessageBarType.info} styles={messageBarStyles} onDismiss={() => this.setState({ showInfoBanner: false })} dismissButtonAriaLabel={msg(commonMessages.close)}>\r\n                                    <FormattedMessage id=\"LabAssistantRoleInfoMessage\" defaultMessage=\"Your role enables you to start, stop, connect, and reset virtual machines in this lab, but not change lab capacity.\" description=\"Message shown on the Virtual machine pool page when the current user is a Lab Assistant\"/>\r\n                                </MessageBar>)}\r\n                            <LabErrorBanner updateError={labUpdateError} clearUpdateError={clearLabUpdateError}/>\r\n                            {startErrors.size > 0 && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearStartError()}>\r\n                                    <FormattedMessage id=\"VmListStartError\" defaultMessage=\"An error occurred while starting your VM(s).\" description=\"Message shown when an error occurs while starting VMs.\"/>\r\n                                </MessageBar>)}\r\n                            {stopErrors.size > 0 && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearStopError()}>\r\n                                    <FormattedMessage id=\"VmListStopError\" defaultMessage=\"An error occurred while stopping your VM(s).\" description=\"Message shown when an error occurs while stopping VMs.\"/>\r\n                                </MessageBar>)}\r\n                            {resetErrors.size > 0 && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearResetError()}>\r\n                                    <FormattedMessage id=\"VmListResetError\" defaultMessage=\"An error occurred while resetting your VM(s).\" description=\"Message shown when an error occurs while resetting VMs.\"/>\r\n                                </MessageBar>)}\r\n                            {!!redeployErrors && redeployErrors.size > 0 && (<MessageBar messageBarType={MessageBarType.error} dismissButtonAriaLabel={msg(commonMessages.close)} onDismiss={() => clearRedeployError()}>\r\n                                    <FormattedMessage id=\"VmListRedeployError\" defaultMessage=\"An error occurred while redeploying your VM(s).\" description=\"Message shown when an error occurs while redeployung VMs.\"/>\r\n                                </MessageBar>)}\r\n                            {selectedCount > 0\r\n            ? this._renderSelectionCommandBar()\r\n            : this._renderDefaultCommandBar(sortedItems)}\r\n                            {showFilter && this._renderFilterBar(vmStateMap, vmAssignedTypeMap)}\r\n                            {items.size > 0 && (<>\r\n                                    <h1 style={pageTitleStyle}>\r\n                                        <FormattedMessage {...commonVmListMessages.pageTitle}/>\r\n                                    </h1>\r\n\r\n                                    <Stack style={{\r\n            marginLeft: '32px',\r\n            marginRight: '8px',\r\n            marginTop: '11px',\r\n            marginBottom: '25px',\r\n        }}>\r\n                                        {isGroupSyncModeEnabled && lab && lab.lastGroupSyncTime && (<Stack.Item>\r\n                                                <GroupSyncTimeInfo groupName={groupName} locale={locale} lab={lab} content={<FormattedMessage id=\"VmListNextUserGroupSyncTime\" defaultMessage=\"The next automatic sync will occur at {nextGroupSyncTime}. To sync this lab's user list now, go to <Link>Users</Link>.\" description=\"Info tip shown about next group sync time\" values={{\r\n            nextGroupSyncTime: getNextGroupSyncTime(ianaTimezone, locale),\r\n            Link: (chunks) => (<Link onClick={() => navigateRoute(usersRoute)}>\r\n                                                                        {chunks}\r\n                                                                    </Link>),\r\n        }}/>} tooltipProps={{ maxWidth: '178px' }}/>\r\n                                            </Stack.Item>)}\r\n                                        <Stack.Item>\r\n                                            {!isLabTeamsOrLmsConnected && !isGroupSyncModeEnabled && (<FormattedMessage id=\"VmPoolUnassignedCleanupMessage\" defaultMessage=\"Each registered user in your lab will automatically get one virtual machine in this pool. Any virtual machine that is not assigned to a user within 30 days will be automatically removed.\" description=\"A message displayed on the VM pool page to inform customers about VM retention policies.\"/>)}\r\n                                            {isGroupSyncModeEnabled && !isLabTeamsOrLmsConnected && (<FormattedMessage id=\"GroupSyncMdoeVmPoolAssignedMessage\" defaultMessage=\"Each user in your lab will automatically be assigned one virtual machine in this pool.\" description=\"Message displayed on the VM pool page to inform customers about assigning virtual machine when in group sync mode.\"/>)}\r\n                                            {isLabTeamsOrLmsConnected && !isVNext && (<FormattedMessage id=\"TeamsVmPoolAssignedMessage\" defaultMessage=\"Each user in the lab will automatically be assigned one virtual machine upon first sign-in.\" description=\"Message displayed on the VM pool page in Teams to inform customers about assigning virtual machine.\"/>)}\r\n                                            {isLabTeamsOrLmsConnected && isVNext && (<FormattedMessage id=\"VNextTeamsOrLmsVmPoolAssignedMessage\" defaultMessage=\"When new users are detected in the synced group, they will be automatically registered to the lab and assigned one virtual machine each.\" description=\"Message displayed on the VM pool page in Teams or Lms to inform customers about assigning virtual machine in vNext.\"/>)}\r\n                                        </Stack.Item>\r\n                                    </Stack>\r\n                                </>)}\r\n                        </div>\r\n                        {items.size == 0 ? (<Stack id=\"vm-list-body\" horizontalAlign=\"center\" styles={{ root: { marginTop: '52px' } }} verticalFill>\r\n                                <Icon iconName=\"empty-vm-list\" styles={{ root: { marginBottom: 20 } }}/>\r\n                                <b>\r\n                                    <FormattedMessage id=\"VmListNoVmsMessage\" defaultMessage=\"No virtual machines have been created.\" description=\"Message shown on the VMs page when no VMs have yet been created.\"/>\r\n                                </b>\r\n                                <div style={{ maxWidth: 610, marginBottom: 25, textAlign: 'center' }}>\r\n                                    {!isGroupSyncModeEnabled && !isVNext && (<FormattedMessage id=\"VmListNoVmsDescription\" defaultMessage=\"Publish the lab or update lab capacity using the menu above to create virtual machines.\" description=\"Message shown on the VMs page when no VMs have yet been created.\"/>)}\r\n                                    {!isGroupSyncModeEnabled && isVNext && (<FormattedMessage id=\"VNextVmListNoVmsDescription\" defaultMessage=\"No virtual machines have been created for this lab. Publish the lab or increase lab capacity to create virtual machines. Machines created within unpublished labs can be used to reserve a portion of the capacity available in your subscription.\" description=\"Message shown on the VMs page when no VMs have yet been created.\"/>)}\r\n                                    {isGroupSyncModeEnabled && (<FormattedMessage id=\"GroupSyncModeVmListNoVmsDescription\" defaultMessage=\"Publish the lab to create virtual machines.\" description=\"Message shown on the VMs page when no VMs have yet been created in group sync mode.\"/>)}\r\n                                </div>\r\n                            </Stack>) : (<ScrollablePane id=\"vm-list-body\" className=\"vertical-scrollable-content\" scrollbarVisibility={ScrollbarVisibility.auto}>\r\n                                <div id=\"vm-details-list-content\">\r\n                                    {isReadOnly && <>{detailsList}</>}\r\n                                    {!isReadOnly && (<MarqueeSelection selection={this._selection}>\r\n                                            {detailsList}\r\n                                        </MarqueeSelection>)}\r\n                                </div>\r\n                            </ScrollablePane>)}\r\n                    </div>\r\n                </div>\r\n                {showStartDialog && (<StartVmsDialog onSubmit={() => this._onStartDialogSubmit(sortedItems)} onDismiss={() => this.setState({ showStartDialog: false, wasStartAllInvoked: false })}/>)}\r\n                {showResetDialog && (<ResetVmsDialog numberOfMachines={this.state.resetTargets.length} onSubmit={() => this._onResetDialogSubmit()} onDismiss={() => this.setState({ showResetDialog: false })}/>)}\r\n                {showCapacityFlyout && (<CapacityFlyout minCapacity={minCapacity} maxCapacity={maxCapacity} hasBeenPublished={hasBeenPublished} capacity={capacity} isGpu={isGpu} labId={lab.id} currentTenantId={currentTenantId} coresPerVm={coresPerVm} coreQuotaData={coreQuotaData} coreQuotaStatus={coreQuotaStatus} isSubmitting={isLabUpdating} onSubmit={(capacity) => this._onCapacityFlyoutSubmit(capacity)} onDismiss={() => this.setState({ showCapacityFlyout: false })}/>)}\r\n                {showSshDialog && sshCommand && (<ConnectToVmDialog sshCommand={sshCommand} onDismiss={this._onDismissConnectDialog} onDismissed={this._onDismissedConnectDialog}/>)}\r\n                {showRdpInfoDialog && rdpInfo && (<RdpInfoDialog rdpInfo={rdpInfo} onDismiss={() => this.setState({ showRdpInfoDialog: false, rdpInfo: undefined })}/>)}\r\n                {showTroubleshootDialog && (<TroubleshootDialog onDismiss={() => this.setTroubleshootDialog(false)} onRedeploy={() => this._onRedeployClicked()}/>)}\r\n            </>);\r\n    }\r\n    _buildVmStateMap() {\r\n        const msg = this.props.intl.formatMessage;\r\n        const creating = msg(commonMessages.creatingState);\r\n        const starting = msg(commonMessages.startingState);\r\n        const stopping = msg(commonMessages.stoppingState);\r\n        const running = msg(commonMessages.runningState);\r\n        const deleting = msg(commonMessages.deletingState);\r\n        const stopped = msg(commonMessages.stoppedState);\r\n        const failed = msg(commonMessages.failedState);\r\n        const resettingPassword = msg(commonMessages.resettingPasswordState);\r\n        const unknown = msg(commonMessages.unknownState);\r\n        const reimaging = msg(commonMessages.reimagingState);\r\n        const redeploying = msg(commonMessages.redeployingState);\r\n        const map = {};\r\n        map[VmState.Creating] = creating;\r\n        map[VmState.Starting] = starting;\r\n        map[VmState.Running] = running;\r\n        map[VmState.Deleting] = deleting;\r\n        map[VmState.Stopping] = stopping;\r\n        map[VmState.Stopped] = stopped;\r\n        map[VmState.Failed] = failed;\r\n        map[VmState.ResettingPassword] = resettingPassword;\r\n        map[VmState.Unknown] = unknown;\r\n        map[VmState.Reimaging] = reimaging;\r\n        map[VmState.Redeploying] = redeploying;\r\n        return map;\r\n    }\r\n    _buildVmAssignedTypeMap() {\r\n        const msg = this.props.intl.formatMessage;\r\n        const assigned = msg(messages.assignedType);\r\n        const unassigned = msg(messages.unassignedType);\r\n        const unknown = msg(commonMessages.unknownState);\r\n        const map = {};\r\n        map[VmAssignmentType.Assigned] = assigned;\r\n        map[VmAssignmentType.Unassigned] = unassigned;\r\n        map[VmAssignmentType.Unknown] = unknown;\r\n        return map;\r\n    }\r\n    _getFilterText(items, stateMap) {\r\n        if (items.length < 1) {\r\n            return '';\r\n        }\r\n        const filterStrings = items.map((item) => stateMap[item]).sort();\r\n        return filterStrings.join(', ');\r\n    }\r\n    _onRenderRow(props, defaultRender) {\r\n        const { detailsRowStyles } = getCustomTheme();\r\n        return (<div className=\"vm-list__row\">\r\n                {defaultRender({\r\n            ...props,\r\n            // Define row style in DetailsList does not work, so applying style when rendering row.\r\n            styles: detailsRowStyles,\r\n        })}\r\n            </div>);\r\n    }\r\n    getVmStateForMailto(item) {\r\n        const result = [];\r\n        const lineBreak = '%0D%0A';\r\n        if (item != null) {\r\n            for (let i = 0; i < item.length; i++) {\r\n                if (item[i].vmState == 'starting' || item[i].vmState == 'stopping') {\r\n                    let tup = '';\r\n                    tup += 'Assigned To:  ' + item[i].assignedTo + lineBreak;\r\n                    tup += 'Id:  ' + item[i].id + lineBreak;\r\n                    tup += 'State: ' + item[i].vmState + lineBreak;\r\n                    tup += lineBreak + '';\r\n                    result.push(tup);\r\n                }\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n    _renderFilterBar(vmStateMap, vmAssignedTypeMap) {\r\n        const { intl, vmListViewModel } = this.props;\r\n        const { vmDetails: items } = vmListViewModel;\r\n        const { filterText, filterStates, filterTypes } = this.state;\r\n        const { secondaryCommandBarStyles, filterBarStyles } = getCustomTheme();\r\n        const msg = intl.formatMessage;\r\n        const availableTypes = items\r\n            .map((item) => item.vmAssignmentType)\r\n            .filter((value, index, self) => self.indexOf(value) === index);\r\n        const availableStates = items\r\n            .map((item) => item.vmState)\r\n            .filter((value, index, self) => self.indexOf(value) === index);\r\n        const availableTypeOptions = availableTypes\r\n            .map((type) => ({\r\n            key: type,\r\n            text: vmAssignedTypeMap[type],\r\n            canCheck: true,\r\n            checked: filterTypes.indexOf(type) > -1,\r\n            className: 'vm-list__filter-button',\r\n            onClick: (ev) => {\r\n                ev && ev.preventDefault();\r\n                this._onFilterTypeChange(type);\r\n            },\r\n        }))\r\n            .sortBy((option) => option.text)\r\n            .toArray();\r\n        const availableStateOptions = availableStates\r\n            .map((state) => ({\r\n            key: state,\r\n            text: vmStateMap[state],\r\n            canCheck: true,\r\n            checked: filterStates.indexOf(state) > -1,\r\n            className: 'vm-list__filter-button',\r\n            onClick: (ev) => {\r\n                ev && ev.preventDefault();\r\n                this._onFilterStateChange(state);\r\n            },\r\n        }))\r\n            .sortBy((option) => option.text)\r\n            .toArray();\r\n        if (availableTypeOptions.length > 0) {\r\n            availableTypeOptions.push({\r\n                key: 'clearDivider',\r\n                itemType: ContextualMenuItemType.Divider,\r\n            });\r\n            availableTypeOptions.push({\r\n                key: 'clear',\r\n                text: msg(commonMessages.clearFilters),\r\n                canCheck: false,\r\n                checked: false,\r\n                className: 'vm-list__filter-clear-button',\r\n                iconProps: {\r\n                    iconName: 'Cancel',\r\n                    styles: {\r\n                        root: {\r\n                            color: 'rgb(50, 49, 48)',\r\n                            fontSize: '14px',\r\n                        },\r\n                    },\r\n                },\r\n                onClick: (ev) => {\r\n                    ev && ev.preventDefault();\r\n                    this._onClearTypeFilter();\r\n                },\r\n            });\r\n        }\r\n        if (availableStateOptions.length > 0) {\r\n            availableStateOptions.push({\r\n                key: 'clearDivider',\r\n                itemType: ContextualMenuItemType.Divider,\r\n            });\r\n            availableStateOptions.push({\r\n                key: 'clear',\r\n                text: msg(commonMessages.clearFilters),\r\n                canCheck: false,\r\n                checked: false,\r\n                className: 'vm-list__filter-clear-button',\r\n                iconProps: {\r\n                    iconName: 'Cancel',\r\n                    styles: {\r\n                        root: {\r\n                            color: 'rgb(50, 49, 48)',\r\n                            fontSize: '14px',\r\n                        },\r\n                    },\r\n                },\r\n                onClick: (ev) => {\r\n                    ev && ev.preventDefault();\r\n                    this._onClearStateFilter();\r\n                },\r\n            });\r\n        }\r\n        return (<CommandBar styles={_.merge({}, secondaryCommandBarStyles, filterBarStyles)} items={[\r\n            {\r\n                key: 'filterByName',\r\n                onRender: () => (<SearchBox ariaLabel={msg(commonMessages.filterByName)} styles={{\r\n                    root: {\r\n                        backgroundColor: 'transparent',\r\n                        border: 'none',\r\n                        marginTop: 8,\r\n                        width: '300px',\r\n                    },\r\n                }} value={filterText} spellCheck={false} placeholder={msg(commonMessages.filterByName)} iconProps={{ iconName: 'Filter' }} onChange={(_, newValue) => this._onFilterTextChange(newValue || '')}/>),\r\n            },\r\n        ]} farItems={[\r\n            {\r\n                key: 'filterByType',\r\n                text: filterTypes.length > 0\r\n                    ? msg(messages.typeFilterMenuSelected, {\r\n                        selectedTypes: this._getFilterText(filterTypes, vmAssignedTypeMap),\r\n                    })\r\n                    : msg(messages.typeFilterMenu),\r\n                subMenuProps: {\r\n                    items: availableTypeOptions,\r\n                },\r\n            },\r\n            {\r\n                key: 'filterByState',\r\n                text: filterStates.length > 0\r\n                    ? msg(messages.stateFilterMenuSelected, {\r\n                        selectedStates: this._getFilterText(filterStates, vmStateMap),\r\n                    })\r\n                    : msg(messages.stateColumnHeader),\r\n                subMenuProps: {\r\n                    items: availableStateOptions,\r\n                },\r\n            },\r\n            {\r\n                key: 'closeFilter',\r\n                text: msg(commonMessages.closeFilterCommand),\r\n                ariaLabel: msg(commonMessages.closeFilterCommand),\r\n                iconProps: { iconName: 'Cancel' },\r\n                iconOnly: true,\r\n                onClick: () => this._onFilterClose(),\r\n            },\r\n        ]}/>);\r\n    }\r\n    _renderListHeader(props, defaultRender) {\r\n        const { detailsHeaderStyles } = getCustomTheme();\r\n        return (<Sticky stickyPosition={StickyPositionType.Header} isScrollSynced={true}>\r\n                {defaultRender({\r\n            ...props,\r\n            onRenderColumnHeaderTooltip: (tooltipHostProps) => (<TooltipHost {...tooltipHostProps} styles={detailsHeaderStyles}/>),\r\n            styles: detailsHeaderStyles,\r\n        })}\r\n            </Sticky>);\r\n    }\r\n    // Renders default command bar shown when there is no selection\r\n    _renderDefaultCommandBar(vms) {\r\n        const { intl, vmListViewModel, navigateRoute } = this.props;\r\n        const { capacity, isReadOnly, isGroupSyncModeEnabled, lab, isTeamsOrLmsIntegrationEnabled, shouldDisableLabUpdate, isVmActionsEnabled, } = vmListViewModel;\r\n        const { showFilter } = this.state;\r\n        const { formatMessage: msg } = intl;\r\n        const { primaryCommandBarStyles } = getCustomTheme();\r\n        const items = [];\r\n        if (!isGroupSyncModeEnabled) {\r\n            items.push({\r\n                key: 'labCapacity',\r\n                disabled: isReadOnly || !!shouldDisableLabUpdate,\r\n                text: msg(messages.labCapacityCommandFormat, {\r\n                    numberOfMachines: capacity,\r\n                }),\r\n                iconProps: { iconName: 'TVMonitor' },\r\n                onClick: () => this.setState({ showCapacityFlyout: true }),\r\n            });\r\n        }\r\n        if ((!isReadOnly || isVmActionsEnabled) && vms.length > 0) {\r\n            if (this._isStartAllEnabled(vms)) {\r\n                items.push({\r\n                    key: 'startAll',\r\n                    text: msg(messages.startAllCommand),\r\n                    iconProps: { iconName: 'TriangleRight12' },\r\n                    onClick: () => this.setState({ wasStartAllInvoked: true, showStartDialog: true }),\r\n                });\r\n            }\r\n            if (this._isStopAllEnabled(vms)) {\r\n                items.push({\r\n                    key: 'stopAll',\r\n                    text: msg(messages.stopAllCommand),\r\n                    iconProps: { iconName: 'Stop' },\r\n                    onClick: () => this._onStopAllClicked(vms),\r\n                });\r\n            }\r\n        }\r\n        const overflowItems = [];\r\n        let farItems = [];\r\n        const exportItem = {\r\n            key: 'export',\r\n            text: msg(commonMessages.exportToCsv),\r\n            iconProps: { iconName: 'Export' },\r\n            onClick: this._onExportClicked,\r\n        };\r\n        const filterItem = {\r\n            key: 'filter',\r\n            ariaLabel: msg(messages.filterVirtualMachines),\r\n            text: msg(messages.filterVirtualMachines),\r\n            iconProps: { iconName: 'Filter' },\r\n            iconOnly: true,\r\n            'aria-expanded': showFilter ? true : false,\r\n            onClick: () => this._onFilterOpen(),\r\n        };\r\n        if (isReadOnly) {\r\n            items.push(exportItem);\r\n        }\r\n        else {\r\n            overflowItems.push(exportItem);\r\n        }\r\n        const overflowButtonProps = { title: msg(commonMessages.moreActionsMenu) };\r\n        if (isTeamsOrLmsIntegrationEnabled) {\r\n            items.push(filterItem);\r\n            if (isTeamsOrLmsIntegrationEnabled && lab && lab.id) {\r\n                farItems = getNavigationItems(intl, lab.id, LabNavKeys.VirualMachine, navigateRoute);\r\n            }\r\n        }\r\n        else {\r\n            farItems.push(filterItem);\r\n        }\r\n        return (<CommandBar styles={primaryCommandBarStyles} items={items} overflowItems={overflowItems} overflowButtonProps={overflowButtonProps} farItems={farItems}/>);\r\n    }\r\n    // Renders command bar shown when there is non=empty selection\r\n    _renderSelectionCommandBar() {\r\n        const { vmListViewModel, intl } = this.props;\r\n        const { isReadOnly, isVmActionsEnabled } = vmListViewModel;\r\n        const { formatMessage: msg } = intl;\r\n        const { startTargets, stopTargets, resetTargets, redeployTargets } = this.state;\r\n        const { secondaryCommandBarStyles } = getCustomTheme();\r\n        const items = [];\r\n        if (!isReadOnly || isVmActionsEnabled) {\r\n            if (startTargets.length > 0) {\r\n                items.push({\r\n                    key: 'start',\r\n                    text: msg(messages.startCommand),\r\n                    iconProps: { iconName: 'TriangleRight12' },\r\n                    onClick: () => this.setState({ showStartDialog: true }),\r\n                });\r\n            }\r\n            if (stopTargets.length > 0) {\r\n                items.push({\r\n                    key: 'stop',\r\n                    text: msg(messages.stopCommand),\r\n                    iconProps: { iconName: 'Stop' },\r\n                    onClick: () => this._onStopClicked(),\r\n                });\r\n            }\r\n            if (resetTargets.length > 0) {\r\n                items.push({\r\n                    key: 'reset',\r\n                    text: msg(messages.resetCommand),\r\n                    iconProps: { iconName: 'Refresh' },\r\n                    onClick: () => this.setState({ showResetDialog: true }),\r\n                });\r\n            }\r\n            if (redeployTargets.length > 0) {\r\n                items.push({\r\n                    key: 'troubleshoot',\r\n                    text: msg(commonMessages.troubleshoot),\r\n                    iconProps: { iconName: 'Repair' },\r\n                    onClick: () => this.setTroubleshootDialog(true),\r\n                });\r\n            }\r\n        }\r\n        return (<CommandBar styles={secondaryCommandBarStyles} items={items} farItems={[\r\n            {\r\n                key: 'clearSelection',\r\n                text: msg(commonMessages.clearSelectionCommand),\r\n                ariaLabel: msg(commonMessages.clearSelectionCommand),\r\n                iconProps: { iconName: 'Cancel' },\r\n                iconOnly: true,\r\n                onClick: () => this._selection.setAllSelected(false),\r\n            },\r\n            {\r\n                key: 'selectedCount',\r\n                onRender: () => (<Stack verticalFill verticalAlign=\"center\">\r\n                                <Stack.Item>\r\n                                    {msg(commonMessages.selectedFormat, {\r\n                    numberOfObjects: this.state.selectedCount,\r\n                })}\r\n                                </Stack.Item>\r\n                            </Stack>),\r\n            },\r\n        ]}/>);\r\n    }\r\n    // Column definitions for the details list view control\r\n    _createColumns(sortByColumn, isSortDescending, locale) {\r\n        const { intl } = this.props;\r\n        const msg = intl.formatMessage;\r\n        const nameColumnLabel = msg(commonMessages.nameColumnHeader);\r\n        const stateColumnLabel = msg(messages.stateColumnHeader);\r\n        const usageColumnLabel = msg(commonMessages.usageColumnHeader);\r\n        const privateIPColumnLabel = msg(messages.privateIpColumnHeader);\r\n        const result = [\r\n            {\r\n                key: 'assignedTo',\r\n                name: nameColumnLabel,\r\n                minWidth: 210,\r\n                maxWidth: 400,\r\n                isRowHeader: true,\r\n                isResizable: true,\r\n                isSorted: sortByColumn === 'assignedTo',\r\n                isSortedDescending: sortByColumn === 'assignedTo' ? isSortDescending : false,\r\n                sortAscendingAriaLabel: msg(commonMessages.sortedAtoZ),\r\n                sortDescendingAriaLabel: msg(commonMessages.sortedZtoA),\r\n                onColumnClick: (_, column) => this._onColumnClick(column),\r\n                onRender: (item) => this._onRenderNameColumn(item),\r\n                className: 'vm-list__name-column',\r\n            },\r\n            {\r\n                key: 'vmState',\r\n                name: stateColumnLabel,\r\n                minWidth: 100,\r\n                maxWidth: 150,\r\n                isResizable: true,\r\n                isCollapsable: true,\r\n                isSorted: sortByColumn === 'vmState',\r\n                isSortedDescending: sortByColumn === 'vmState' ? isSortDescending : false,\r\n                sortAscendingAriaLabel: msg(commonMessages.sortedAtoZ),\r\n                sortDescendingAriaLabel: msg(commonMessages.sortedZtoA),\r\n                onColumnClick: (_, column) => this._onColumnClick(column),\r\n                onRender: (item) => this._onRenderStateColumn(item),\r\n                className: 'vm-list__state-column',\r\n            },\r\n            {\r\n                key: 'currentUsage',\r\n                name: usageColumnLabel,\r\n                minWidth: 130,\r\n                maxWidth: 130,\r\n                isResizable: true,\r\n                isCollapsible: true,\r\n                isSorted: sortByColumn === 'currentUsage',\r\n                isSortedDescending: sortByColumn === 'currentUsage' ? isSortDescending : false,\r\n                sortAscendingAriaLabel: msg(commonMessages.sortedSmallerToLarger),\r\n                sortDescendingAriaLabel: msg(commonMessages.sortedLargerToSmaller),\r\n                onColumnClick: (_, column) => this._onColumnClick(column),\r\n                onRender: (item) => (<Stack horizontal verticalAlign=\"center\">\r\n                        <Stack.Item align=\"start\" styles={{ root: { paddingRight: '10px' } }}>\r\n                            <VmUsageColumn locale={locale} currentUsage={item.currentUsage} \r\n                // setting quota to 0 so it doesn't show the quota\r\n                usageQuota={0}/>\r\n                        </Stack.Item>\r\n                    </Stack>),\r\n            },\r\n            {\r\n                key: 'privateIpAddress',\r\n                name: privateIPColumnLabel,\r\n                fieldName: 'privateIpAddress',\r\n                minWidth: 100,\r\n                maxWidth: 100,\r\n                isResizable: true,\r\n                isCollapsible: true,\r\n                isSorted: sortByColumn === 'privateIpAddress',\r\n                isSortedDescending: sortByColumn === 'privateIpAddress' ? isSortDescending : false,\r\n                sortAscendingAriaLabel: msg(commonMessages.sortedSmallerToLarger),\r\n                sortDescendingAriaLabel: msg(commonMessages.sortedLargerToSmaller),\r\n                className: 'ms-fontSize-14 vm-list__user-select',\r\n                onColumnClick: (_, column) => this._onColumnClick(column),\r\n            },\r\n        ];\r\n        return result;\r\n    }\r\n    // Handles changes to column sort order for the list view\r\n    _onColumnClick(column) {\r\n        const sortByColumn = column.key || 'assignedTo';\r\n        const isNewColumn = this.state.sortByColumn !== sortByColumn;\r\n        const isSortDescending = isNewColumn ? false : !this.state.isSortDescending;\r\n        this.setState({ sortByColumn, isSortDescending });\r\n    }\r\n    // Renders Name cell of list view row including icon, name and command bar\r\n    _onRenderNameColumn(item) {\r\n        const { vmListViewModel, intl } = this.props;\r\n        const { useSharedPassword, isReadOnly, isTeamsOrLmsIntegrationEnabled, isBastionEnabled, isLabDraft, isVmActionsEnabled, operations, currentTenantId, vmParentId, } = vmListViewModel;\r\n        const vmParentIdParts = vmParentId?.split('/');\r\n        let subscriptionId = '';\r\n        if (vmParentIdParts?.length > 2) {\r\n            subscriptionId = vmParentIdParts[2];\r\n        }\r\n        const { selectedIds, selectedCount, connectExpandData } = this.state;\r\n        const msg = intl.formatMessage;\r\n        const selected = selectedIds.indexOf(item.id) > -1;\r\n        const vmOperation = operations?.find((o) => o.ResourceId?.id == item.id) || mapResourceErrorToOperation(vmListViewModel.vmDetails.find((vm) => vm.id == item.id)?.resourceOperationError);\r\n        const vmOperationStatus = vmOperation?.status;\r\n        const vmOperationType = vmOperation?.operationType || OperationType.Unknown;\r\n        const isUnassigned = item.vmAssignmentType === VmAssignmentType.Unassigned;\r\n        const assignedTo = isUnassigned ? msg(messages.unassignedType) : item.assignedTo;\r\n        const isSingleSelect = selectedCount < 1 || (selected && selectedCount === 1);\r\n        const canConnect = useSharedPassword && item.canConnect && isSingleSelect;\r\n        const canShowRdpInfo = item.rdpAuthority && item.rdpAuthority.length > 0;\r\n        const canShowRedeployButton = item.canRedeploy;\r\n        const styles = {\r\n            root: {\r\n                backgroundColor: 'inherit',\r\n                borderStyle: 'none',\r\n                height: '100%',\r\n            },\r\n        };\r\n        const connectItemProps = {\r\n            ariaLabel: msg(messages.connectCommand),\r\n            styles,\r\n            iconProps: {\r\n                iconName: 'ConnectVirtualMachine',\r\n                styles: { root: { color: '#605E5C' } },\r\n            },\r\n            menuIconProps: {\r\n                // this is used to hide the chevron\r\n                style: { display: 'none' },\r\n            },\r\n            className: canConnect\r\n                ? 'vm-list__action-selected'\r\n                : 'vm-list__action-selected-hidden',\r\n        };\r\n        const isRdpConnectionInTeams = isTeamsOrLmsIntegrationEnabled && item.connectionTypes.indexOf(ConnectionType.Rdp) > -1;\r\n        const connectionTypes = item.connectionTypes.filter((type) => isBastionEnabled || (type !== ConnectionType.RdpInBrowser && type !== ConnectionType.SshInBrowser));\r\n        if (!!connectExpandData[item.id] || item.isExpanding) {\r\n            connectItemProps.iconProps = undefined;\r\n            connectItemProps.onRenderIcon = () => (<Spinner ariaLabel={msg(messages.preparingToConnect)} size={SpinnerSize.small} styles={{ root: { paddingBottom: '3px', paddingRight: '10px' } }}/>);\r\n        }\r\n        else if (connectionTypes.length > 1 || isRdpConnectionInTeams) {\r\n            const items = getConnectionContextMenuItems(item.canConnect, item, connectionTypes, this._onConnect, intl, isTeamsOrLmsIntegrationEnabled);\r\n            connectItemProps.menuProps = { items, isSubMenu: true };\r\n        }\r\n        else if (connectionTypes.length === 1) {\r\n            connectItemProps.onClick = () => this._onConnect(item, connectionTypes[0]);\r\n        }\r\n        const resetButtonProps = {\r\n            ariaLabel: msg(messages.resetCommand),\r\n            styles,\r\n            iconProps: {\r\n                iconName: 'Refresh',\r\n                styles: { root: { color: '#605E5C' } },\r\n            },\r\n            className: item.canReset ? 'vm-list__action-selected' : 'vm-list__action-selected-hidden',\r\n            onClick: () => this.setState({ showResetDialog: true }),\r\n        };\r\n        let rdpInfoProps;\r\n        if (canShowRdpInfo) {\r\n            rdpInfoProps = {\r\n                ariaLabel: msg(commonMessages.showRdpInfoTitle),\r\n                styles,\r\n                iconProps: {\r\n                    iconName: 'ClipboardList',\r\n                    styles: { root: { color: '#605E5C' } },\r\n                },\r\n                className: 'vm-list__action-selected',\r\n                onClick: () => this.setState({ showRdpInfoDialog: true, rdpInfo: item.rdpAuthority }),\r\n            };\r\n        }\r\n        let redeployButtonProps;\r\n        if (canShowRedeployButton) {\r\n            redeployButtonProps = {\r\n                ariaLabel: msg(commonMessages.troubleshoot),\r\n                styles,\r\n                iconProps: {\r\n                    iconName: 'Repair',\r\n                    styles: { root: { color: '#605E5C' } },\r\n                },\r\n                className: item.canRedeploy ? 'vm-list__action-selected' : 'vm-list__action-selected-hidden',\r\n                onClick: () => this.setState({ showTroubleshootDialog: true }),\r\n            };\r\n        }\r\n        return (<Stack className=\"vm-list__name-stack\" horizontal horizontalAlign=\"start\" verticalAlign=\"center\" grow>\r\n                {vmOperationStatus && vmOperationStatus == OperationStatus.Failed && item.errorCode !== \"HeartbeatNotReceived\" && (<Stack styles={{ root: { paddingTop: '4px' } }}>\r\n                        {item.errorCode != \"AgentFailure\" &&\r\n            (<VmOperationError tenantId={currentTenantId} subscriptionId={subscriptionId} operationType={vmOperationType}/>)}\r\n                    </Stack>)}\r\n                {vmOperationStatus && vmOperationStatus == OperationStatus.Succeeded && item.errorCode !== \"HeartbeatNotReceived\" && (<Stack styles={{ root: { paddingTop: '4px' } }}>\r\n                        <VmOperationSuccess operationType={vmOperationType}/>\r\n                    </Stack>)}\r\n                {item.errorCode == \"AgentFailure\" && (<Stack styles={{ root: { paddingTop: '4px' } }}>\r\n                        <VmAgentError tenantId={currentTenantId} subscriptionId={subscriptionId}/>\r\n                    </Stack>)}\r\n                {item.errorCode == \"HeartbeatNotReceived\" && (<Stack styles={{ root: { paddingTop: '4px' } }}>\r\n                        <VmHeartbeatError tenantId={currentTenantId} subscriptionId={subscriptionId}/>\r\n                    </Stack>)}\r\n                <Stack.Item className=\"vm-list__name-text-stack-item\" align=\"start\">\r\n                    <TooltipHost content={assignedTo}>\r\n                        <Stack horizontal styles={{ root: { paddingLeft: '10px' } }} tokens={{ childrenGap: 9 }}>\r\n                            \r\n                            \r\n                            <Text block={true} nowrap={true} styles={{ root: { paddingTop: '11px' } }}>\r\n                                {assignedTo}\r\n                            </Text>\r\n                        </Stack>\r\n                    </TooltipHost>\r\n                </Stack.Item>\r\n                <Stack.Item grow>\r\n                    <div />\r\n                </Stack.Item>\r\n                {(!isReadOnly || isVmActionsEnabled) && !isLabDraft && (<>\r\n                        <Stack.Item className=\"vm-list__name-action-stack-item\" align=\"end\">\r\n                            <TooltipHost directionalHint={DirectionalHint.topRightEdge} content={connectItemProps.ariaLabel}>\r\n                                <IconButton {...connectItemProps}/>\r\n                            </TooltipHost>\r\n                        </Stack.Item>\r\n                        {!!rdpInfoProps && (<Stack.Item className=\"vm-list__name-action-stack-item\" align=\"end\">\r\n                                <TooltipHost directionalHint={DirectionalHint.topRightEdge} content={rdpInfoProps.ariaLabel}>\r\n                                    <IconButton {...rdpInfoProps}/>\r\n                                </TooltipHost>\r\n                            </Stack.Item>)}\r\n                        {!!redeployButtonProps && (<Stack.Item className=\"vm-list__name-action-stack-item\" align=\"end\">\r\n                                <TooltipHost directionalHint={DirectionalHint.topRightEdge} content={redeployButtonProps.ariaLabel}>\r\n                                    <IconButton {...redeployButtonProps}/>\r\n                                </TooltipHost>\r\n                        </Stack.Item>)}\r\n                        <Stack.Item className=\"vm-list__name-action-stack-item\" align=\"end\">\r\n                            <TooltipHost directionalHint={DirectionalHint.topRightEdge} content={resetButtonProps.ariaLabel}>\r\n                                <IconButton {...resetButtonProps}/>\r\n                            </TooltipHost>\r\n                        </Stack.Item>\r\n                    </>)}\r\n            </Stack>);\r\n    }\r\n    // Renders State cell of list view row including context menu\r\n    _onRenderStateColumn(item) {\r\n        const { vmListViewModel, intl } = this.props;\r\n        const { isReadOnly, isLabDraft, isVmActionsEnabled } = vmListViewModel;\r\n        const { vmState } = item;\r\n        const msg = intl.formatMessage;\r\n        const unpublished = msg(templateMessages.templateUnpublishedStatus);\r\n        return (<Stack className=\"vm-list__state-container\" horizontal tokens={{ childrenGap: 8 }} verticalFill verticalAlign=\"center\" horizontalAlign=\"start\" grow>\r\n                <Stack.Item className=\"vm-list__state-stack-item\" grow>\r\n                    {!isLabDraft && (<VmPowerState forceDisable={isReadOnly && !isVmActionsEnabled} vmState={vmState} onStart={() => this.setState({ showStartDialog: true })} onStop={this._onStopClicked}/>)}\r\n                    {!!isLabDraft && (<Text block={true} nowrap={true} styles={{ root: { paddingLeft: '10px', paddingTop: '11px' } }}>\r\n                            {unpublished}\r\n                        </Text>)}\r\n                </Stack.Item>\r\n            </Stack>);\r\n    }\r\n    _onCapacityFlyoutSubmit(capacity) {\r\n        this.props.updateCapacity(capacity);\r\n    }\r\n    _onResetDialogSubmit() {\r\n        const { resetEnvironments } = this.props;\r\n        const { resetTargets } = this.state;\r\n        if (resetTargets.length > 0) {\r\n            resetEnvironments(resetTargets);\r\n        }\r\n        this.setState({ showResetDialog: false });\r\n    }\r\n    _onStartDialogSubmit(vms) {\r\n        const { wasStartAllInvoked } = this.state;\r\n        const { startEnvironments } = this.props;\r\n        if (wasStartAllInvoked) {\r\n            const ids = vms.filter((o) => o.canStart).map((o) => o.id);\r\n            startEnvironments(ids);\r\n            this.setState({ showStartDialog: false, wasStartAllInvoked: false });\r\n        }\r\n        else {\r\n            const { startTargets } = this.state;\r\n            if (startTargets.length > 0) {\r\n                startEnvironments(startTargets);\r\n            }\r\n            this.setState({ showStartDialog: false });\r\n        }\r\n    }\r\n    _onStopClicked() {\r\n        const { stopEnvironments } = this.props;\r\n        const { stopTargets } = this.state;\r\n        if (stopTargets.length > 0) {\r\n            stopEnvironments(stopTargets);\r\n        }\r\n    }\r\n    _onRedeployClicked() {\r\n        const { redeployVirtualMachines } = this.props;\r\n        const { redeployTargets } = this.state;\r\n        if (redeployTargets.length > 0) {\r\n            redeployVirtualMachines(redeployTargets);\r\n        }\r\n    }\r\n    setTroubleshootDialog(openDialog) {\r\n        this.setState({ showTroubleshootDialog: openDialog });\r\n    }\r\n    _isStopAllEnabled(vms) {\r\n        return vms.some((o) => o.canStop);\r\n    }\r\n    _isStartAllEnabled(vms) {\r\n        return vms.some((o) => o.canStart);\r\n    }\r\n    _onStopAllClicked(vms) {\r\n        const ids = vms.filter((o) => o.canStop).map((o) => o.id);\r\n        this.props.stopEnvironments(ids);\r\n    }\r\n    _onFilterTextChange(filterText) {\r\n        this.setState({ filterText });\r\n    }\r\n    _onFilterTypeChange(filterType) {\r\n        const { filterTypes: oldFilterTypes } = this.state;\r\n        const filterTypes = [...oldFilterTypes];\r\n        const index = oldFilterTypes.indexOf(filterType);\r\n        if (index > -1) {\r\n            filterTypes.splice(index, 1);\r\n        }\r\n        else {\r\n            filterTypes.push(filterType);\r\n        }\r\n        this.setState({ filterTypes });\r\n    }\r\n    _onFilterStateChange(filterState) {\r\n        const { filterStates: oldFilterStates } = this.state;\r\n        const filterStates = [...oldFilterStates];\r\n        const index = oldFilterStates.indexOf(filterState);\r\n        if (index > -1) {\r\n            filterStates.splice(index, 1);\r\n        }\r\n        else {\r\n            filterStates.push(filterState);\r\n        }\r\n        this.setState({ filterStates });\r\n    }\r\n    _onClearTypeFilter() {\r\n        this.setState({ filterTypes: [] });\r\n    }\r\n    _onClearStateFilter() {\r\n        this.setState({ filterStates: [] });\r\n    }\r\n    _onFilterClose() {\r\n        this.setState({ showFilter: false, filterText: '', filterStates: [], filterTypes: [] });\r\n    }\r\n    _onFilterOpen() {\r\n        this.setState({ showFilter: true });\r\n    }\r\n    _onDismissConnectDialog() {\r\n        this.setState({\r\n            showSshDialog: false,\r\n        });\r\n    }\r\n    _onDismissedConnectDialog() {\r\n        this.setState({\r\n            sshCommand: undefined,\r\n        });\r\n    }\r\n    _onConnect(vm, connectionType) {\r\n        const hasConnectInfo = !!vm.rdpAuthority || !!vm.rdpInBrowserUrl || !!vm.sshAuthority || !!vm.sshInBrowserUrl;\r\n        if (!hasConnectInfo) {\r\n            const { connectExpandData } = this.state;\r\n            connectExpandData[vm.id] = connectionType;\r\n            this.props.getEnvironmentNetworkData(vm.id);\r\n            this.setState({ connectExpandData });\r\n        }\r\n        else {\r\n            switch (connectionType) {\r\n                case ConnectionType.Rdp:\r\n                    this._onConnectRdp(vm);\r\n                    break;\r\n                case ConnectionType.RdpInBrowser:\r\n                    this._onConnectRdpInBrowser(vm);\r\n                    break;\r\n                case ConnectionType.Ssh:\r\n                    this._onConnectSsh(vm);\r\n                    break;\r\n                case ConnectionType.SshInBrowser:\r\n                    this._onConnectSshInBrowser(vm);\r\n                    break;\r\n                default:\r\n                    trackTrace(`vm-list: Failed to connect to a VM. connectionType: ${connectionType}`);\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n    _onConnectSsh(vm) {\r\n        const { sshAuthority, username } = vm;\r\n        const { port, url } = getSshConnectData(sshAuthority);\r\n        const sshCommand = getSshCommand(port, username, url);\r\n        this.setState({ showSshDialog: true, sshCommand });\r\n    }\r\n    _onConnectRdp(vm) {\r\n        const { isWindows, labTitle } = this.props.vmListViewModel;\r\n        const { rdpAuthority, username } = vm;\r\n        const { fileName, fileContent } = getRdpConnectData(rdpAuthority, isWindows, username, labTitle);\r\n        createAndDownloadFile(fileName, fileContent);\r\n    }\r\n    _onConnectRdpInBrowser(vm) {\r\n        window.open(vm.rdpInBrowserUrl, `rdp-${vm.id}`); // eslint-disable-line security/detect-non-literal-fs-filename\r\n    }\r\n    _onConnectSshInBrowser(vm) {\r\n        window.open(vm.sshInBrowserUrl, `ssh-${vm.id}`); // eslint-disable-line security/detect-non-literal-fs-filename\r\n    }\r\n}\r\nexport const VmList = injectIntl(VmListInjected);\r\nexport default VmList;\r\n","import * as React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { PageTitle } from '../common/page/page-title';\r\nimport { VmState } from '../data/models/environment-common';\r\nimport { LabUpdateOperation } from '../data/models/lab';\r\nimport { clearLoadError, clearRedeployErrors, clearResetError, clearStartError, clearStartErrors, clearStopError, clearStopErrors, getEnvironment, pollEnvironmentsStart, pollEnvironmentsStop, redeployVirtualMachines, resetEnvironments, startEnvironments, stopEnvironments, } from '../redux/actions/environment/environment-action-creators';\r\nimport { clearLabCapacityExceedsCoresError, clearLabUpdateError, updateLab, updateVNextLab, } from '../redux/actions/lab/lab-action-creators';\r\nimport { pollUsersStart, pollUsersStop } from '../redux/actions/user/user-action-creators';\r\nimport { DefaultPollingInterval, FiveSecondInterval, OneMinuteInterval, TenSecondInterval } from '../utils/constants';\r\nimport { VmList } from './vm-list';\r\nimport { messages } from './vm-list-messages';\r\nimport { routerActions } from 'connected-react-router';\r\nimport { getVmListContainerModel } from './vm-list-selectors';\r\nimport { isVNextLab } from '../redux/selectors/lab-selectors';\r\nimport { isVNextLabDraft, isVNextLabScaling } from '../redux/selectors/vnext/lab-selectors';\r\nimport { determinePollingInitialDelay } from '../common/vm/vm-polling-initial-delay';\r\nfunction determineEnvironmentsPollingIntervalLength(vmDetails, lab) {\r\n    if (vmDetails.some((vm) => vm.vmState === VmState.Starting || vm.vmState === VmState.Stopping)) {\r\n        return FiveSecondInterval;\r\n    }\r\n    const isVNext = isVNextLab(lab?.id);\r\n    const isDraft = isVNext && isVNextLabDraft(lab);\r\n    if (!isDraft &&\r\n        (vmDetails.some((vm) => vm.vmState === VmState.Creating || vm.vmState === VmState.Deleting || vm.vmState === VmState.Redeploying) ||\r\n            (isVNext && isVNextLabScaling(lab)))) {\r\n        return TenSecondInterval;\r\n    }\r\n    return OneMinuteInterval;\r\n}\r\nfunction determineEnvironmentsPollingInitialDelay(vmDetails, lab) {\r\n    const isVNext = isVNextLab(lab?.id);\r\n    if (isVNext && isVNextLabScaling(lab)) {\r\n        return TenSecondInterval;\r\n    }\r\n    return determinePollingInitialDelay(vmDetails.toJS(), isVNext);\r\n}\r\nfunction getAllPossibleErrorIds(vmDetails) {\r\n    const results = vmDetails.map((o) => o.id);\r\n    return [...results, 'all'];\r\n}\r\nclass VmListContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._startPollingEnvironments = this._startPollingEnvironments.bind(this);\r\n        this._startPollingUsers = this._startPollingUsers.bind(this);\r\n        this._getEnvironmentNetworkData = this._getEnvironmentNetworkData.bind(this);\r\n        this._updateLabCapacity = this._updateLabCapacity.bind(this);\r\n        this._navigateRoute = this._navigateRoute.bind(this);\r\n        this._startEnvironments = this._startEnvironments.bind(this);\r\n        this._stopEnvironments = this._stopEnvironments.bind(this);\r\n        this._clearStartError = this._clearStartError.bind(this);\r\n        this._clearStopError = this._clearStopError.bind(this);\r\n        this._redeployVirtualMachines = this._redeployVirtualMachines.bind(this);\r\n        this._clearRedeployError = this._clearRedeployError.bind(this);\r\n    }\r\n    componentDidMount() {\r\n        const { lab, vmParentId, vmDetails } = this.props.vmListViewModel;\r\n        if (lab) {\r\n            this._startPollingUsers(lab.id);\r\n        }\r\n        if (!!vmParentId) {\r\n            const nextPollingIntervalMs = determineEnvironmentsPollingIntervalLength(vmDetails, lab);\r\n            this._startPollingEnvironments(vmParentId, nextPollingIntervalMs);\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { lab, vmParentId, vmDetails } = this.props.vmListViewModel;\r\n        if (lab && (!prevProps.vmListViewModel.lab || prevProps.vmListViewModel.lab.id !== lab.id)) {\r\n            this.props.pollUsersStop();\r\n            this._startPollingUsers(lab.id);\r\n        }\r\n        if (!!vmParentId) {\r\n            const nextPollingIntervalMs = determineEnvironmentsPollingIntervalLength(vmDetails, lab);\r\n            if (!prevProps.vmListViewModel.vmParentId || prevProps.vmListViewModel.vmParentId !== vmParentId) {\r\n                this.props.pollEnvironmentsStop();\r\n                this._startPollingEnvironments(vmParentId, nextPollingIntervalMs);\r\n            }\r\n            else if (this._environmentsPollingIntervalMs !== nextPollingIntervalMs) {\r\n                this.props.pollEnvironmentsStop();\r\n                const initialDelayMs = determineEnvironmentsPollingInitialDelay(vmDetails, lab);\r\n                this._startPollingEnvironments(vmParentId, nextPollingIntervalMs, initialDelayMs);\r\n            }\r\n        }\r\n    }\r\n    _startPollingEnvironments(vmParentId, pollingIntervalMs, initialDelayMs) {\r\n        this._environmentsPollingIntervalMs = pollingIntervalMs;\r\n        this.props.pollEnvironmentsStart(vmParentId, pollingIntervalMs, initialDelayMs);\r\n    }\r\n    _startPollingUsers(labId, initialDelayMs) {\r\n        this.props.pollUsersStart(labId, DefaultPollingInterval, initialDelayMs);\r\n    }\r\n    _getEnvironmentNetworkData(id) {\r\n        this.props.getEnvironment(id, true);\r\n    }\r\n    _updateLabCapacity(maxUsersInLab) {\r\n        const { vmListViewModel, updateLab, updateVNextLab } = this.props;\r\n        const { lab } = vmListViewModel;\r\n        if (!!lab) {\r\n            if (!isVNextLab(lab.id)) {\r\n                const currentLab = lab;\r\n                const labUpdate = { ...currentLab, maxUsersInLab };\r\n                updateLab(labUpdate, LabUpdateOperation.Capacity);\r\n            }\r\n            else {\r\n                const currentLab = lab;\r\n                const newSku = { ...currentLab.virtualMachineProfile.sku, capacity: maxUsersInLab };\r\n                const labUpdate = {\r\n                    virtualMachineProfile: { ...currentLab.virtualMachineProfile, sku: newSku },\r\n                };\r\n                updateVNextLab(currentLab.id, labUpdate, LabUpdateOperation.Capacity);\r\n            }\r\n        }\r\n    }\r\n    _navigateRoute(pathname) {\r\n        const { push, search } = this.props;\r\n        push({ pathname, search });\r\n    }\r\n    componentWillUnmount() {\r\n        this.props.pollEnvironmentsStop();\r\n        this.props.pollUsersStop();\r\n    }\r\n    _startEnvironments(ids) {\r\n        const { isVNext, startEnvironments, clearStartErrors, vmListViewModel } = this.props;\r\n        const { vmDetails } = vmListViewModel;\r\n        if (isVNext) {\r\n            const errorIds = getAllPossibleErrorIds(vmDetails);\r\n            clearStartErrors([...errorIds]);\r\n        }\r\n        startEnvironments(ids);\r\n    }\r\n    _stopEnvironments(ids) {\r\n        const { isVNext, stopEnvironments, clearStopErrors, vmListViewModel } = this.props;\r\n        const { vmDetails } = vmListViewModel;\r\n        if (isVNext) {\r\n            const errorIds = getAllPossibleErrorIds(vmDetails);\r\n            clearStopErrors([...errorIds]);\r\n        }\r\n        stopEnvironments(ids);\r\n    }\r\n    _redeployVirtualMachines(ids) {\r\n        const { isVNext, redeployVirtualMachines, vmListViewModel, clearRedeployErrors } = this.props;\r\n        const { vmDetails } = vmListViewModel;\r\n        if (isVNext) {\r\n            const errorIds = getAllPossibleErrorIds(vmDetails);\r\n            clearRedeployErrors([...errorIds]);\r\n            redeployVirtualMachines(ids);\r\n        }\r\n    }\r\n    _clearStartError() {\r\n        const { isVNext, clearStartError, clearStartErrors, vmListViewModel } = this.props;\r\n        const { vmDetails } = vmListViewModel;\r\n        if (isVNext) {\r\n            const errorIds = getAllPossibleErrorIds(vmDetails);\r\n            clearStartErrors([...errorIds]);\r\n        }\r\n        else {\r\n            clearStartError();\r\n        }\r\n    }\r\n    _clearStopError() {\r\n        const { isVNext, clearStopError, clearStopErrors, vmListViewModel } = this.props;\r\n        const { vmDetails } = vmListViewModel;\r\n        if (isVNext) {\r\n            const errorIds = getAllPossibleErrorIds(vmDetails);\r\n            clearStopErrors([...errorIds]);\r\n        }\r\n        else {\r\n            clearStopError();\r\n        }\r\n    }\r\n    _clearRedeployError() {\r\n        const { isVNext, clearRedeployErrors, vmListViewModel } = this.props;\r\n        const { vmDetails } = vmListViewModel;\r\n        if (isVNext) {\r\n            const errorIds = getAllPossibleErrorIds(vmDetails);\r\n            clearRedeployErrors([...errorIds]);\r\n        }\r\n    }\r\n    render() {\r\n        const { vmListViewModel, resetEnvironments, clearLoadError, clearLabUpdateError, clearLabCapacityExceedsCoresError, clearResetError, } = this.props;\r\n        const pageTitle = this.props.intl.formatMessage(messages.pageTitle);\r\n        return (<>\r\n                <PageTitle subtitle={pageTitle}/>\r\n                <VmList vmListViewModel={vmListViewModel} clearLabUpdateError={clearLabUpdateError} clearLabCapacityExceedsCoresError={clearLabCapacityExceedsCoresError} clearLoadError={clearLoadError} clearStartError={this._clearStartError} clearStopError={this._clearStopError} clearResetError={clearResetError} updateCapacity={this._updateLabCapacity} startEnvironments={this._startEnvironments} stopEnvironments={this._stopEnvironments} resetEnvironments={resetEnvironments} getEnvironmentNetworkData={this._getEnvironmentNetworkData} navigateRoute={this._navigateRoute} redeployVirtualMachines={this._redeployVirtualMachines} clearRedeployError={this._clearRedeployError}/>\r\n            </>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getVmListContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    updateLab,\r\n    updateVNextLab,\r\n    clearLabUpdateError,\r\n    clearLabCapacityExceedsCoresError,\r\n    startEnvironments,\r\n    stopEnvironments,\r\n    resetEnvironments,\r\n    clearLoadError,\r\n    clearStartError,\r\n    clearStopError,\r\n    clearResetError,\r\n    pollEnvironmentsStart,\r\n    pollEnvironmentsStop,\r\n    getEnvironment,\r\n    pollUsersStart,\r\n    pollUsersStop,\r\n    push: routerActions.push,\r\n    clearStartErrors,\r\n    clearStopErrors,\r\n    redeployVirtualMachines,\r\n    clearRedeployErrors,\r\n};\r\nexport const VmListContainer = connect(mapStateToProps, mapDispatchToProps)(injectIntl(VmListContainerInjected));\r\nexport default VmListContainer;\r\n","import _ from 'lodash';\r\nimport { DefaultButton, getTheme, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport Constants from '../utils/constants';\r\nimport { Routes } from '../utils/routes';\r\nimport { labAppNavMessages } from './lab-app-nav-messages';\r\nimport './lab-app-nav.css';\r\nconst theme = getTheme();\r\nconst navButtonStyles = {\r\n    root: {\r\n        height: '36px',\r\n        minWidth: '58px',\r\n        width: '100%',\r\n        display: 'flex',\r\n        justifyContent: 'flex-start',\r\n        border: 0,\r\n        backgroundColor: theme.palette.neutralLighter,\r\n        textAlign: 'left',\r\n    },\r\n    rootHovered: {\r\n        backgroundColor: theme.palette.neutralLight,\r\n    },\r\n    label: {\r\n        fontWeight: 400,\r\n    },\r\n};\r\nconst navButtonSelectedStyles = _.merge({}, navButtonStyles, {\r\n    root: {\r\n        backgroundColor: theme.palette.neutralQuaternaryAlt,\r\n    },\r\n    label: {\r\n        fontWeight: 600,\r\n    },\r\n});\r\nconst navButtonIconOnlyStyles = _.merge({}, navButtonStyles, {\r\n    root: {\r\n        justifyContent: 'center',\r\n    },\r\n});\r\nconst navButtonSelectedIconOnlyStyles = _.merge({}, navButtonSelectedStyles, {\r\n    root: {\r\n        justifyContent: 'center',\r\n    },\r\n});\r\nconst navButtonHeader = _.merge({}, navButtonStyles, {\r\n    root: {\r\n        height: '44px',\r\n        width: '58px',\r\n    },\r\n});\r\nconst messages = defineMessages({\r\n    collapseAriaLabel: {\r\n        id: 'LabAppNavCollapseButtonLabel',\r\n        defaultMessage: 'Collapse',\r\n        description: 'Aria label for a button to collapse the navigation menu.',\r\n    },\r\n    expandAriaLabel: {\r\n        id: 'LabAppNavExpandButtonLabel',\r\n        defaultMessage: 'Expand',\r\n        description: 'Aria label for a button to expand the navigation menu.',\r\n    },\r\n    labAppNavAriaLabel: {\r\n        id: 'LabAppNavAriaLabel',\r\n        defaultMessage: 'Lab page navigation',\r\n        description: 'Aria label for the lab navigation element.',\r\n    },\r\n});\r\nconst LabAppNavInjected = (props) => {\r\n    const { route, selectedLabId, navigateRoute, expanded, updateExpanded, intl } = props;\r\n    const msg = intl.formatMessage;\r\n    const encodedRoute = encodeURI(route);\r\n    const dashboardRoute = Routes.Dashboard(selectedLabId);\r\n    const settingsRoute = Routes.Settings(selectedLabId);\r\n    const templateRoute = Routes.Template(selectedLabId);\r\n    const virtualMachinesRoute = Routes.VirtualMachines(selectedLabId);\r\n    const usersRoute = Routes.Users(selectedLabId);\r\n    const schedulesRoute = Routes.Schedule(selectedLabId);\r\n    const buttonStyles = expanded ? navButtonStyles : navButtonIconOnlyStyles;\r\n    const buttonSelectedStyles = expanded ? navButtonSelectedStyles : navButtonSelectedIconOnlyStyles;\r\n    const headerAria = expanded ? msg(messages.collapseAriaLabel) : msg(messages.expandAriaLabel);\r\n    const dashboardText = msg(labAppNavMessages.dashboard);\r\n    const settingsText = msg(labAppNavMessages.settings);\r\n    const templateText = msg(labAppNavMessages.template);\r\n    const virtualMachinePoolText = msg(labAppNavMessages.virtualMachinePool);\r\n    const usersText = msg(commonMessages.users);\r\n    const scheduleText = msg(commonMessages.schedule);\r\n    const navAriaLabel = msg(messages.labAppNavAriaLabel);\r\n    return (<nav id=\"lab-app-nav\" role=\"navigation\" aria-label={navAriaLabel}>\r\n            <Stack>\r\n                <ul role=\"menu\" aria-expanded={expanded} style={{ minWidth: expanded ? Constants.NavWidthExpanded : undefined }}>\r\n                    <Stack.Item styles={{ root: { borderBottom: 'solid 1px #EDEBE9' } }}>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" iconProps={{ iconName: expanded ? 'DoubleChevronLeft' : 'DoubleChevronRight' }} onClick={() => updateExpanded(!expanded)} ariaLabel={headerAria} title={headerAria} styles={navButtonHeader}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                    <Stack.Item styles={{ root: { marginTop: '20px' } }}>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" onClick={() => navigateRoute(dashboardRoute)} iconProps={{ iconName: 'ViewDashboard' }} text={expanded ? dashboardText : undefined} title={expanded ? undefined : dashboardText} ariaLabel={dashboardText} styles={encodedRoute === dashboardRoute ? buttonSelectedStyles : buttonStyles}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" onClick={() => navigateRoute(templateRoute)} iconProps={{ iconName: 'TestBeaker' }} text={expanded ? templateText : undefined} title={expanded ? undefined : templateText} ariaLabel={templateText} styles={encodedRoute === templateRoute ? buttonSelectedStyles : buttonStyles}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" onClick={() => navigateRoute(virtualMachinesRoute)} iconProps={{ iconName: 'TVMonitor' }} text={expanded ? virtualMachinePoolText : undefined} title={expanded ? undefined : virtualMachinePoolText} ariaLabel={virtualMachinePoolText} styles={encodedRoute === virtualMachinesRoute ? buttonSelectedStyles : buttonStyles}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" onClick={() => navigateRoute(usersRoute)} iconProps={{ iconName: 'People' }} text={expanded ? usersText : undefined} title={expanded ? undefined : usersText} ariaLabel={usersText} styles={encodedRoute === usersRoute ? buttonSelectedStyles : buttonStyles}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" onClick={() => navigateRoute(schedulesRoute)} iconProps={{ iconName: 'DateTime' }} text={expanded ? scheduleText : undefined} title={expanded ? undefined : scheduleText} ariaLabel={scheduleText} styles={encodedRoute === schedulesRoute ? buttonSelectedStyles : buttonStyles}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <li role=\"none\">\r\n                            <DefaultButton role=\"menuitem\" onClick={() => navigateRoute(settingsRoute)} iconProps={{ iconName: 'Settings' }} text={expanded ? settingsText : undefined} title={expanded ? undefined : settingsText} ariaLabel={settingsText} styles={encodedRoute === settingsRoute ? buttonSelectedStyles : buttonStyles}/>\r\n                        </li>\r\n                    </Stack.Item>\r\n                </ul>\r\n            </Stack>\r\n        </nav>);\r\n};\r\nexport const LabAppNav = injectIntl(LabAppNavInjected);\r\nexport default LabAppNav;\r\n","import { Icon, ProgressIndicator, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { ImageAndSizeInfo } from '../common/image-and-size-info';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nconst LabCreatingView = (props) => {\r\n    const { secondaryBackgroundColor } = getCustomTheme();\r\n    return (<Stack horizontalAlign=\"center\" grow verticalFill styles={{ root: { backgroundColor: secondaryBackgroundColor } }}>\r\n            <Stack.Item>\r\n                <Icon iconName=\"creating-template\" styles={{ root: { marginTop: 140, marginBottom: 20 } }}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <Stack horizontalAlign=\"start\">\r\n                    <Stack.Item>\r\n                        <div className=\"ms-fontSize-m ms-fontWeight-semibold\">\r\n                            <FormattedMessage id=\"LabCreatingViewMessage\" defaultMessage=\"Creating lab\" description=\"Message shown when the lab is being created.\"/>\r\n                        </div>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <ProgressIndicator barHeight={4} description={<>\r\n                                    <FormattedMessage id=\"LabCreatingViewDescription\" defaultMessage=\"Setting up virtual machine template.\" description=\"Description shown below the progress bar when the lab is being created.\"/>\r\n                                    <ImageAndSizeInfo {...props}/>\r\n                                </>} styles={{\r\n        root: { minWidth: 250, width: '100%', marginBottom: 15 },\r\n    }}/>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default LabCreatingView;\r\n","import { Icon, ProgressIndicator, Stack } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { ImageAndSizeInfo } from '../common/image-and-size-info';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nconst PermissionPropagationView = (props) => {\r\n    const { secondaryBackgroundColor } = getCustomTheme();\r\n    return (<Stack horizontalAlign=\"center\" grow verticalFill styles={{ root: { backgroundColor: secondaryBackgroundColor } }}>\r\n            <Stack.Item>\r\n                <Icon iconName=\"creating-template\" styles={{ root: { marginTop: 140, marginBottom: 20 } }}/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <Stack horizontalAlign=\"start\">\r\n                    <Stack.Item>\r\n                        <div className=\"ms-fontSize-m ms-fontWeight-semibold\">\r\n                            <FormattedMessage id=\"PermissionPropagationViewMessage\" defaultMessage=\"Please do not refresh the page. We are propagating the permissions while we create the lab.\" description=\"Message shown when the permission is propagating.\"/>\r\n                        </div>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <ProgressIndicator barHeight={4} description={<>\r\n                                    <FormattedMessage id=\"PermissionPropagationViewDescription\" defaultMessage=\"If you refresh the page, you may experience a delay in accessing the newly created lab.\" description=\"Message shown below the progress bar when the permission is propagating.\"/>\r\n                                    <br />\r\n                                    <ImageAndSizeInfo {...props}/>\r\n                                </>} styles={{\r\n        root: { minWidth: 250, width: '100%', marginBottom: 15 },\r\n    }}/>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default PermissionPropagationView;\r\n","import { FocusZone, Link, MessageBar, MessageBarType } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Redirect, Route, Switch } from 'react-router-dom';\r\nimport { getCustomTheme } from '../common/themes/selectors';\r\nimport ErrorCode from '../common/error-codes';\r\nimport LoadingContainer from '../common/loading-section';\r\nimport DashboardContainer from '../dashboard/dashboard-container';\r\nimport { commonMessages } from '../language/common-messages';\r\nimport { SchedulesContainer } from '../schedule/schedule-container';\r\nimport SettingsPageContainer from '../settings-page/settings-page-container';\r\nimport TemplateContainer from '../template/template-container';\r\nimport { UserListContainer } from '../user-list/user-list-container';\r\nimport { Routes } from '../utils/routes';\r\nimport { VmListContainer } from '../vm-list/vm-list-container';\r\nimport { LabAppNav } from './lab-app-nav';\r\nimport LabCreatingView from './lab-creating-view';\r\nimport PermissionPropagationView from './lab-creating-permission-propagating-view';\r\nimport LinkedLmsUpdateErrors from '../common/linked-lms-update-errors';\r\nimport './lab-app.css';\r\nexport const LabAppMessageBar = (props) => {\r\n    const { showCovidBanner, isBlockedLab, isWriteable, isMoving, onDismissedCovidBanner, templateCreateError, isVmActionsEnabled, } = props;\r\n    const intl = useIntl();\r\n    const { messageBarStyles } = getCustomTheme();\r\n    if (!isWriteable && !isVmActionsEnabled) {\r\n        return (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                <FormattedMessage id=\"LabAppReadOnlyMessage\" defaultMessage=\"You do not have permission to make any changes to this lab. Contact your Lab Services administator to get additional permissions.\" description=\"Message displayed in a message bar in the lab view when a user does not have write permissions to a lab.\"/>\r\n            </MessageBar>);\r\n    }\r\n    if (isBlockedLab) {\r\n        return (<MessageBar messageBarType={MessageBarType.blocked} styles={messageBarStyles}>\r\n                <FormattedMessage id=\"LabAppBlockedMessage\" defaultMessage=\"Unfortunately, this lab was affected by the recent Azure Lab Services outage and is not recoverable. Please delete it and create a new lab. For detailed steps on how to proceed, please see our{blogPostLink}. We are deeply sorry for the inconvenience this has caused.\" description=\"Message displayed in a message bar in the lab view when a lab is blocked due to an outage. Note: the missing space before {blogPostLink} is intentional.\" values={{\r\n            blogPostLink: (<Link target=\"_blank\" href=\"https://aka.ms/azlabs-outage\">\r\n                                <FormattedMessage id=\"LabAppBlockedMessageLinkText\" defaultMessage=\"outage blog post\" description=\"Text for the {blogPostLink} parameter in LabAppBlockedMessage.\"/>\r\n                            </Link>),\r\n        }}/>\r\n            </MessageBar>);\r\n    }\r\n    if (isMoving) {\r\n        return (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                <FormattedMessage id=\"LabAppMovingRegionsMessage\" defaultMessage=\"This lab is being moved to another Azure region. The lab will be read-only until the move is finished. Your lab users can't use their virtual machines at this time.\" description=\"Message displayed in a message bar in the lab view when a lab is being moved between Azure regions.\"/>\r\n            </MessageBar>);\r\n    }\r\n    if (!!templateCreateError) {\r\n        switch (templateCreateError.code) {\r\n            case ErrorCode.PeerVnetAddressRangeOutOfAddresses:\r\n                return (<MessageBar messageBarType={MessageBarType.blocked} styles={messageBarStyles}>\r\n                        <FormattedMessage id=\"CreateTemplateErrorPeerVnetAddressRangeOutOfAddressesMessage\" defaultMessage=\"Lab creation failed because the IP address range is too narrow in this lab account. Please contact your Lab Services administator to widen the range, and recreate this lab. {blogPostLink}\" description=\"Message displayed in a message bar in the lab view when a lab is blocked due template creation failure. Note: the missing space before {blogPostLink} is intentional.\" values={{\r\n                    blogPostLink: (<Link target=\"_blank\" href=\"https://aka.ms/azlabs-vnetaddressrange\">\r\n                                        <FormattedMessage id=\"CreateTemplateErrorPeerVnetAddressRangeOutOfAddressesMessageLinkText\" defaultMessage=\"Learn more\" description=\"Text for the {blogPostLink} parameter in CreateTemplateErrorPeerVnetAddressRangeOutOfAddressesMessage.\"/>\r\n                                    </Link>),\r\n                }}/>\r\n                    </MessageBar>);\r\n            case ErrorCode.PasswordNotValid:\r\n                return (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                        <FormattedMessage id=\"CreateTemplateErrorPasswordNotValid\" defaultMessage=\"Lab creation failed because the password wasn't complex enough.\" description=\"Message displayed in a message bar in the lab view when a lab is blocked due to a password not meeting policy.\"/>\r\n                    </MessageBar>);\r\n            case ErrorCode.VMAgentStatusCommunicationError:\r\n                return (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                        <FormattedMessage id=\"CreateTemplateVmAgentNoCommunicationError\" defaultMessage=\"Communication could not be established with the VM agent. Please verify that the VM agent is enabled and functioning.\" description=\"Occurs when the agent cannot be communicated with.\"/>\r\n                    </MessageBar>);\r\n            default:\r\n                return (<MessageBar messageBarType={MessageBarType.blocked}>\r\n                        <FormattedMessage id=\"CreateTemplateErrorDefaultMessage\" defaultMessage=\"Lab creation failed. Contact your lab administrator or try creating again.\" description=\"Message displayed in a message bar in the lab view when a lab failed to create.\"/>\r\n                    </MessageBar>);\r\n        }\r\n    }\r\n    if (showCovidBanner) {\r\n        return (<MessageBar messageBarType={MessageBarType.warning} onDismiss={onDismissedCovidBanner} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)}>\r\n                <FormattedMessage {...commonMessages.covidWarning}/>\r\n            </MessageBar>);\r\n    }\r\n    return null;\r\n};\r\nexport const LabApp = (props) => {\r\n    const { labAppViewModel, navigateRoute, onDismissedCovidBanner, clearUpdateLinkedLmsError } = props;\r\n    // ****** IMPORTANT ******Keep the flag as false until we're ready to show the retirement message******\r\n    const shouldShowRetirementMessage = true;\r\n    const { route, search, selectedLabId, isInitializing, showCovidBanner, showOldV1GpuLabBanner, isBlockedLab, isWriteable, isMoving, templateCreateError, isTeamsOrLmsIntegrationEnabled, isVNextLabCreating, isVnextLabPermissionPropagating, imageName, cores, memoryInGB, storageSize, storageType, labSkuInfo, updateLinkedLmsErrors, isVmActionsEnabled, } = labAppViewModel;\r\n    const mainRef = React.useRef();\r\n    const intl = useIntl();\r\n    const [navExpanded, updateNavExpanded] = React.useState(true);\r\n    if (isInitializing && !isVnextLabPermissionPropagating) {\r\n        return <LoadingContainer />;\r\n    }\r\n    // move focus to the main content when the route changes\r\n    const onNavigate = (route) => {\r\n        mainRef.current?.focus();\r\n        navigateRoute(route);\r\n    };\r\n    return (<div id=\"lab-app-container\">\r\n            <div id=\"lab-app-content\">\r\n                <div id=\"lab-app-header\">\r\n                    {shouldShowRetirementMessage && (<MessageBar messageBarType={MessageBarType.severeWarning}>\r\n                            <FormattedMessage id=\"ServiceRetirementLabAppMessage\" defaultMessage=\"Azure Lab Services will be retired on June 28th, 2027. Click {RetirementMessageLink} for more information.\" description=\"Retirement message displayed in a message bar for lab app.\" values={{\r\n        RetirementMessageLink: (<Link target=\"_blank\" style={{ paddingLeft: '0px' }} href={'https://aka.ms/azlabs-retirementguide'}>\r\n                                            <FormattedMessage id=\"ServiceRetirementLabAppLink\" defaultMessage=\"here\" description=\"A link to the service retirement public document.\"/>\r\n                                        </Link>),\r\n    }}/>\r\n                        </MessageBar>)}\r\n                    <LabAppMessageBar templateCreateError={templateCreateError} showCovidBanner={showCovidBanner} isBlockedLab={isBlockedLab} isWriteable={isWriteable} isMoving={isMoving} onDismissedCovidBanner={onDismissedCovidBanner} isVmActionsEnabled={isVmActionsEnabled}/>\r\n                    {showOldV1GpuLabBanner && (\r\n    // The banner will continue to show up, we're not caching this value.\r\n    <MessageBar messageBarType={MessageBarType.severeWarning} dismissButtonAriaLabel={intl.formatMessage(commonMessages.close)}>\r\n                            <FormattedMessage {...commonMessages.oldV1GpuLabWarning} values={{\r\n        gpuOutage: (<Link href={'https://aka.ms/V1GPUIssues'}>\r\n                                            <FormattedMessage id=\"OldV1GpuLabWarningLink\" defaultMessage=\"More information.\" description=\"Link to documentation describing the GPU outage with older GPU labs.\"/>\r\n                                        </Link>),\r\n    }}/>\r\n                        </MessageBar>)}\r\n                    {updateLinkedLmsErrors.size > 0 && (<LinkedLmsUpdateErrors errors={updateLinkedLmsErrors} clearError={clearUpdateLinkedLmsError}/>)}\r\n                </div>\r\n                <div id=\"lab-app-body\">\r\n                    {!isVNextLabCreating && !isVnextLabPermissionPropagating && (<>\r\n                            {!isTeamsOrLmsIntegrationEnabled && (<div id=\"lab-app-nav\">\r\n                                    <FocusZone className=\"lab-app-focus-zone\">\r\n                                        <LabAppNav route={route} selectedLabId={selectedLabId} navigateRoute={onNavigate} expanded={navExpanded} updateExpanded={updateNavExpanded}/>\r\n                                    </FocusZone>\r\n                                </div>)}\r\n                            \r\n                            <div ref={mainRef} id=\"lab-app-page\">\r\n                                <Switch>\r\n                                    <Route exact={true} path={Routes.Dashboard()} render={() => <DashboardContainer />}/>\r\n                                    <Route exact={true} path={Routes.Template()} render={() => <TemplateContainer labId={selectedLabId}/>}/>\r\n                                    <Route exact={true} path={Routes.Schedule()} render={() => <SchedulesContainer />}/>\r\n                                    <Route exact={true} path={Routes.Users()} render={() => <UserListContainer labId={selectedLabId}/>}/>\r\n                                    <Route exact={true} path={Routes.VirtualMachines()} render={() => <VmListContainer labId={selectedLabId}/>}/>\r\n                                    <Route exact={true} path={Routes.Settings()} render={() => <SettingsPageContainer />}/>\r\n                                    <Route path={Routes.Lab()} render={() => (<Redirect to={{ pathname: Routes.Dashboard(selectedLabId), search }}/>)}/>\r\n                                </Switch>\r\n                            </div>\r\n                        </>)}\r\n                    {!!isVNextLabCreating && !isVnextLabPermissionPropagating && (<LabCreatingView memorySize={memoryInGB} imageName={imageName} cores={cores} storageSize={storageSize} storageType={storageType} labSkuInfo={labSkuInfo}/>)}\r\n                    {!!isVnextLabPermissionPropagating && (<PermissionPropagationView memorySize={memoryInGB} imageName={imageName} cores={cores} storageSize={storageSize} storageType={storageType} labSkuInfo={labSkuInfo}/>)}\r\n                </div>\r\n            </div>\r\n        </div>);\r\n};\r\nexport default LabApp;\r\n","import memoize from 'memoize-one';\r\nimport { getLocale, isTeamsOrLmsMode, storeIsLoading } from '../redux/selectors/common-selectors';\r\nimport { getUserSettings } from '../redux/selectors/identity-selector';\r\nimport { getTemplateCreateError } from '../redux/selectors/template-selectors';\r\nimport { doesCurrentLabExist, getCurrentLabId, isCurrentLabBlocked, isCurrentLabWriteable, isCurrentLabMoving, getLabStoreLoadState, isCreatingLab, isVNextLab, getCurrentLab, isLabAssistantRole, isCurrentLabOldV1Lab, } from '../redux/selectors/lab-selectors';\r\nimport { getRoute, getSearch } from '../redux/selectors/route-selector';\r\nimport { InitializationState } from '../redux/state/common-store';\r\nimport { getCurrentLabImage } from '../redux/selectors/vnext/image-selectors';\r\nimport { getCurrentLabSkuInfo } from '../redux/selectors/vnext/sku-selectors';\r\nimport { getUpdateLmsErrors } from '../redux/selectors/vnext/lab-plan-selectors';\r\nimport { isVNextLabCreating as isLabCreating, getVnextLabPermissionPropagating } from '../redux/selectors/vnext/lab-selectors';\r\nexport const getLabAppViewModel = memoize((state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const labAppInitializeState = commonStore.get('labAppInitializeState');\r\n    const isAppInitializing = labAppInitializeState === InitializationState.NotStarted ||\r\n        labAppInitializeState === InitializationState.Initializing;\r\n    const labStoreLoadState = getLabStoreLoadState(state);\r\n    const isLoadingLabs = storeIsLoading(labStoreLoadState);\r\n    const currentLabId = getCurrentLabId(state);\r\n    const currentLabExists = doesCurrentLabExist(state);\r\n    const isCreating = isCreatingLab(state);\r\n    const isBlockedLab = isCurrentLabBlocked(state);\r\n    const isWriteable = isCurrentLabWriteable(state);\r\n    const isMoving = isCurrentLabMoving(state);\r\n    const search = getSearch(state);\r\n    const route = getRoute(state);\r\n    const locale = getLocale(state);\r\n    const isInitialized = !isAppInitializing && !isLoadingLabs && !isCreating && currentLabExists;\r\n    const settings = getUserSettings(state);\r\n    const showCovidBanner = !settings.get('hasDismissedCovidBanner');\r\n    const showOldV1GpuLabBanner = isCurrentLabOldV1Lab(state);\r\n    // vCurrent template creation error\r\n    const templateCreateError = getTemplateCreateError(state);\r\n    const isTeamsOrLmsIntegrationEnabled = isTeamsOrLmsMode(state);\r\n    const currentLab = getCurrentLab(state);\r\n    const isVNextLabCreating = isVNextLab(currentLab?.id) && isLabCreating(currentLab);\r\n    const isVnextLabPermissionPropagating = getVnextLabPermissionPropagating(state);\r\n    const isVmActionsEnabled = isVNextLab(currentLab?.id) ? isLabAssistantRole(currentLab) : false;\r\n    let cores, memoryInGB, imageName, storageSize, storageType, labSkuInfo;\r\n    const updateLinkedLmsErrors = getUpdateLmsErrors(state);\r\n    if (isVNextLabCreating) {\r\n        const image = getCurrentLabImage(state);\r\n        labSkuInfo = getCurrentLabSkuInfo(state);\r\n        cores = labSkuInfo?.cores;\r\n        memoryInGB = labSkuInfo?.memoryGB;\r\n        imageName = image?.displayName;\r\n        storageSize = labSkuInfo?.storageGB;\r\n        storageType = labSkuInfo?.storageType;\r\n    }\r\n    return {\r\n        locale,\r\n        isInitializing: !isInitialized,\r\n        isBlockedLab,\r\n        isWriteable,\r\n        isMoving,\r\n        showCovidBanner,\r\n        showOldV1GpuLabBanner,\r\n        search,\r\n        route,\r\n        templateCreateError,\r\n        isTeamsOrLmsIntegrationEnabled,\r\n        selectedLabId: currentLabId,\r\n        isVNextLabCreating,\r\n        isVnextLabPermissionPropagating,\r\n        cores,\r\n        memoryInGB,\r\n        imageName,\r\n        storageSize,\r\n        storageType,\r\n        labSkuInfo,\r\n        updateLinkedLmsErrors,\r\n        isVmActionsEnabled,\r\n    };\r\n});\r\nexport const getLabAppContainerModel = memoize((state) => {\r\n    const isCreating = isCreatingLab(state);\r\n    const labStoreLoadState = getLabStoreLoadState(state);\r\n    const isLoadingLabs = storeIsLoading(labStoreLoadState);\r\n    const currentLabExists = doesCurrentLabExist(state);\r\n    const currentLabId = getCurrentLabId(state);\r\n    const labAppViewModel = getLabAppViewModel(state);\r\n    const currentLab = getCurrentLab(state);\r\n    return {\r\n        labAppViewModel,\r\n        isCreatingLab: isCreating,\r\n        isLoadingLabs,\r\n        currentLabExists,\r\n        currentLabId,\r\n        currentLab,\r\n    };\r\n});\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { listImages } from '../redux/actions/vnext/images/image-action-creators';\r\nimport ErrorCode from '../common/error-codes';\r\nimport { Page } from '../common/page/page';\r\nimport { fatalError, labAppInitialize } from '../redux/actions/common/common-action-creators';\r\nimport { dismissCovidBanner } from '../redux/actions/identity/identity-action-creators';\r\nimport { LabApp } from './lab-app';\r\nimport { getLabAppContainerModel } from './lab-app-selectors';\r\nimport { clearUpdateLinkedLmsError } from '../redux/actions/lab-plan/lab-plan-action-creators';\r\nclass LabAppContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._navigateRoute = this._navigateRoute.bind(this);\r\n        this._onDismissedCovid19Banner = this._onDismissedCovid19Banner.bind(this);\r\n    }\r\n    _navigateRoute(pathname) {\r\n        const { push, labAppViewModel } = this.props;\r\n        const { search } = labAppViewModel;\r\n        push({ pathname, search });\r\n    }\r\n    _onDismissedCovid19Banner() {\r\n        this.props.dismissCovidBanner();\r\n    }\r\n    componentDidMount() {\r\n        const { currentLabId, labAppInitialize, labAppViewModel, listImages, currentLab } = this.props;\r\n        const { isVNextLabCreating } = labAppViewModel;\r\n        if (!!currentLabId) {\r\n            labAppInitialize(currentLabId);\r\n        }\r\n        if (isVNextLabCreating && currentLab) {\r\n            const vNextLab = currentLab;\r\n            if (vNextLab.labPlanId) {\r\n                listImages(vNextLab.labPlanId);\r\n            }\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { isLoadingLabs, isCreatingLab, currentLabId, labAppInitialize, currentLabExists, fatalError, labAppViewModel, currentLab, listImages, } = this.props;\r\n        const { isVNextLabCreating, isVnextLabPermissionPropagating } = labAppViewModel;\r\n        const { currentLabId: previousCurrentLabId, labAppViewModel: previousLabAppViewModel } = prevProps;\r\n        if (!!currentLabId &&\r\n            (!previousCurrentLabId || previousCurrentLabId.toLowerCase() !== currentLabId.toLowerCase())) {\r\n            labAppInitialize(currentLabId);\r\n        }\r\n        // HACK: This hack is needed because the API does not return resource not found for labs that do not exist\r\n        // when loading templates, users or other lab resources\r\n        // Note: this handles cases where the lab does not actually exist\r\n        if (!isLoadingLabs && !isCreatingLab && !currentLabExists && !isVnextLabPermissionPropagating) {\r\n            fatalError(ErrorCode.ResourceNotFound, new Error('Lab app failed to find the current lab.'));\r\n        }\r\n        if (!previousLabAppViewModel.isVNextLabCreating && isVNextLabCreating && currentLab) {\r\n            const vNextLab = currentLab;\r\n            if (vNextLab.labPlanId) {\r\n                listImages(vNextLab.labPlanId);\r\n            }\r\n        }\r\n    }\r\n    render() {\r\n        const { labAppViewModel, clearUpdateLinkedLmsError } = this.props;\r\n        return (<Page>\r\n                <LabApp labAppViewModel={labAppViewModel} navigateRoute={this._navigateRoute} onDismissedCovidBanner={this._onDismissedCovid19Banner} clearUpdateLinkedLmsError={clearUpdateLinkedLmsError}/>\r\n            </Page>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getLabAppContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    push: routerActions.push,\r\n    labAppInitialize,\r\n    dismissCovidBanner,\r\n    fatalError,\r\n    listImages,\r\n    clearUpdateLinkedLmsError,\r\n};\r\nexport const LabAppContainer = connect(mapStateToProps, mapDispatchToProps)(LabAppContainerInjected);\r\nexport default LabAppContainer;\r\n","import * as React from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { getLabListRoute } from '../data/helpers/route-helpers';\r\nimport { Routes } from '../utils/routes';\r\nimport { Loading } from './loading';\r\nexport const Welcome = (props) => {\r\n    const { clearSelectedLabParent } = props;\r\n    const { search, isLoadingLabParentResources, labAccounts, currentLabParentResourceId, resourceGroups, } = props.welcomeViewModel;\r\n    if (isLoadingLabParentResources) {\r\n        return <Loading />;\r\n    }\r\n    if (labAccounts.size > 0 || (!!resourceGroups && resourceGroups.size > 0)) {\r\n        return <Redirect to={{ pathname: getLabListRoute(currentLabParentResourceId), search }}/>;\r\n    }\r\n    clearSelectedLabParent();\r\n    return <Redirect to={{ pathname: Routes.StudentView, search }}/>;\r\n};\r\nexport default Welcome;\r\n","import memoize from 'memoize-one';\r\nimport { isVNextFeatureEnabledOrLms, storeIsLoading } from '../redux/selectors/common-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nimport { getCurrentLabParentId, getResourceGroups, isLoadingLabParents, } from '../redux/selectors/lab-parent-resource-selectors';\r\nexport const getWelcomeViewModel = memoize((state) => {\r\n    const search = getSearch(state);\r\n    const isVNext = isVNextFeatureEnabledOrLms(state);\r\n    const currentLabParentResourceId = getCurrentLabParentId(state);\r\n    const labAccountStore = state.get('labAccountStore');\r\n    const labAccounts = labAccountStore.get('labAccounts');\r\n    if (!isVNext) {\r\n        const loadState = labAccountStore.get('loadState');\r\n        const isLoadingLabParentResources = storeIsLoading(loadState);\r\n        return {\r\n            search,\r\n            isLoadingLabParentResources,\r\n            labAccounts,\r\n            currentLabParentResourceId,\r\n        };\r\n    }\r\n    else {\r\n        const resourceGroups = getResourceGroups(state);\r\n        const isLoadingLabParentResources = isLoadingLabParents(state);\r\n        return {\r\n            search,\r\n            isLoadingLabParentResources,\r\n            labAccounts,\r\n            currentLabParentResourceId,\r\n            resourceGroups,\r\n        };\r\n    }\r\n});\r\nexport const getWelcomeContainerModel = memoize((state) => {\r\n    const welcomeViewModel = getWelcomeViewModel(state);\r\n    return {\r\n        welcomeViewModel,\r\n    };\r\n});\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Welcome } from './welcome';\r\nimport { getWelcomeContainerModel } from './welcome-selectors';\r\nimport { clearSelectedLabParentResource } from '../redux/actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nclass WelcomeContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        const { welcomeViewModel, clearSelectedLabParentResource } = this.props;\r\n        return <Welcome welcomeViewModel={welcomeViewModel} clearSelectedLabParent={clearSelectedLabParentResource}/>;\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getWelcomeContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    clearSelectedLabParentResource,\r\n};\r\nexport const WelcomeContainer = connect(mapStateToProps, mapDispatchToProps)(WelcomeContainerInjected);\r\nexport default WelcomeContainer;\r\n","export const TeamsActionType = {\r\n    TEAMS_INITIALIZE: 'TEAMS_INITIALIZE',\r\n    TEAMS_INITIALIZE_SUCCESS: 'TEAMS_INITIALIZE_SUCCESS',\r\n    TEAMS_INITIALIZE_ERROR: 'TEAMS_INITIALIZE_ERROR',\r\n    TEAMS_DISABLE_SAVE_BUTTON: 'TEAMS_DISABLE_SAVE_BUTTON',\r\n    TEAMS_DISABLE_SAVE_BUTTON_SUCCESS: 'TEAMS_DISABLE_SAVE_BUTTON_SUCCESS',\r\n    TEAMS_DISABLE_SAVE_BUTTON_ERROR: 'TEAMS_DISABLE_SAVE_BUTTON_ERROR',\r\n    TEAMS_CONFIGURE_TAB: 'TEAMS_CONFIGURE_TAB',\r\n    TEAMS_CONFIGURE_TAB_SUCCESS: 'TEAMS_CONFIGURE_TAB_SUCCESS',\r\n    TEAMS_CONFIGURE_TAB_ERROR: 'TEAMS_CONFIGURE_TAB_ERROR',\r\n    TEAMS_START_MFA: 'TEAMS_START_MFA',\r\n    TEAMS_START_MFA_ERROR: 'TEAMS_START_MFA_ERROR',\r\n    TEAMS_START_MFA_REDIRECTING: 'TEAMS_START_MFA_REDIRECTING',\r\n    TEAMS_COMPLETE_MFA: 'TEAMS_COMPLETE_MFA',\r\n    TEAMS_COMPLETE_MFA_SUCCESS: 'TEAMS_COMPLETE_MFA_SUCCESS',\r\n    TEAMS_COMPLETE_MFA_FAILED: 'TEAMS_COMPLETE_MFA_FAILED',\r\n    TEAMS_COMPLETE_MFA_ERROR: 'TEAMS_COMPLETE_MFA_ERROR',\r\n    SET_USER_TEAM_ROLE: 'SET_USER_TEAM_ROLE',\r\n    SET_TEAMS_CHANNEL_TYPE: 'SET_TEAMS_CHANNEL_TYPE',\r\n    SET_TEAMS_THEME: 'SET_TEAMS_THEME',\r\n};\r\n","import { TeamsActionType, } from './teams-actions';\r\nexport const teamsInitialize = () => ({\r\n    type: TeamsActionType.TEAMS_INITIALIZE,\r\n});\r\nexport const teamsInitializeSuccess = () => ({\r\n    type: TeamsActionType.TEAMS_INITIALIZE_SUCCESS,\r\n});\r\nexport const teamsInitializeError = (error) => ({\r\n    type: TeamsActionType.TEAMS_INITIALIZE_ERROR,\r\n    error,\r\n});\r\nexport const teamsDisableSaveButton = () => ({\r\n    type: TeamsActionType.TEAMS_DISABLE_SAVE_BUTTON,\r\n});\r\nexport const teamsDisableSaveButtonSuccess = () => ({\r\n    type: TeamsActionType.TEAMS_DISABLE_SAVE_BUTTON_SUCCESS,\r\n});\r\nexport const teamsDisableSaveButtonError = (disableSaveButtonError) => ({\r\n    type: TeamsActionType.TEAMS_DISABLE_SAVE_BUTTON_ERROR,\r\n    disableSaveButtonError,\r\n});\r\nexport const teamsConfigureTab = (labAccountId) => ({\r\n    type: TeamsActionType.TEAMS_CONFIGURE_TAB,\r\n    labAccountId,\r\n});\r\nexport const teamsConfigureTabSuccess = () => ({\r\n    type: TeamsActionType.TEAMS_CONFIGURE_TAB_SUCCESS,\r\n});\r\nexport const teamsConfigureTabError = (configureTabError) => ({\r\n    type: TeamsActionType.TEAMS_CONFIGURE_TAB_ERROR,\r\n    configureTabError,\r\n});\r\nexport const teamsStartMfa = () => ({\r\n    type: TeamsActionType.TEAMS_START_MFA,\r\n});\r\nexport const teamsStartMfaError = (error) => ({\r\n    type: TeamsActionType.TEAMS_START_MFA_ERROR,\r\n    error,\r\n});\r\nexport const teamsStartMfaRedirecting = () => ({\r\n    type: TeamsActionType.TEAMS_START_MFA_REDIRECTING,\r\n});\r\nexport const teamsCompleteMfa = () => ({\r\n    type: TeamsActionType.TEAMS_COMPLETE_MFA,\r\n});\r\nexport const teamsCompleteMfaSuccess = () => ({\r\n    type: TeamsActionType.TEAMS_COMPLETE_MFA_SUCCESS,\r\n});\r\nexport const teamsCompleteMfaFailed = () => ({\r\n    type: TeamsActionType.TEAMS_COMPLETE_MFA_FAILED,\r\n});\r\nexport const teamsCompleteMfaError = (error) => ({\r\n    type: TeamsActionType.TEAMS_COMPLETE_MFA_ERROR,\r\n    error,\r\n});\r\nexport const setUserTeamRole = (userTeamRole) => ({\r\n    type: TeamsActionType.SET_USER_TEAM_ROLE,\r\n    userTeamRole,\r\n});\r\nexport const setTeamsChannelType = (channelType) => ({\r\n    type: TeamsActionType.SET_TEAMS_CHANNEL_TYPE,\r\n    channelType,\r\n});\r\nexport const setTeamsTheme = (theme) => ({\r\n    type: TeamsActionType.SET_TEAMS_THEME,\r\n    theme,\r\n});\r\nconst actions = {\r\n    teamsInitialize,\r\n    teamsInitializeSuccess,\r\n    teamsInitializeError,\r\n    teamsDisableSaveButton,\r\n    teamsDisableSaveButtonSuccess,\r\n    teamsDisableSaveButtonError,\r\n    teamsConfigureTab,\r\n    teamsConfigureTabSuccess,\r\n    teamsConfigureTabError,\r\n    teamsStartMfa,\r\n    teamsStartMfaError,\r\n    teamsStartMfaRedirecting,\r\n    teamsCompleteMfa,\r\n    teamsCompleteMfaSuccess,\r\n    teamsCompleteMfaFailed,\r\n    teamsCompleteMfaError,\r\n    setUserTeamRole,\r\n    setTeamsChannelType,\r\n    setTeamsTheme,\r\n};\r\nexport default actions;\r\n","import { Stack, Icon, Link, ProgressIndicator, Dropdown, ResponsiveMode, } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage, defineMessages, useIntl } from 'react-intl';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nconst messages = defineMessages({\r\n    teamsChooseLabAccountMessage: {\r\n        id: 'TeamsChooseLabAccountMessage',\r\n        defaultMessage: 'Which container would you like to use for creating labs in this team?',\r\n        description: 'Message for dialog box to choose container for labs',\r\n    },\r\n});\r\nexport const TeamsConfigureLabParent = (props) => {\r\n    const { labParentItems, onSave, isRefreshing, refreshLabParents, defaultSelectedId } = props;\r\n    const hasSingleLabParent = labParentItems.size === 1;\r\n    return (<Stack tokens={{ childrenGap: '25px' }} grow verticalFill>\r\n            <Stack.Item>\r\n                <Icon iconName=\"teams-choose-lab-account-content\"/>\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { paddingRight: '5px', paddingLeft: '5px' } }}>\r\n                <Stack>\r\n                    <Stack.Item styles={{ root: { fontWeight: 600, fontSize: '20px' } }}>\r\n                        <FormattedMessage id=\"TeamsConfigureLabAccountTitle\" defaultMessage=\"Welcome to Azure Lab Services\" description=\"Title for choose lab account dialog\"/>\r\n                    </Stack.Item>\r\n                    {hasSingleLabParent && (<Stack.Item styles={{ root: { paddingTop: '16px' } }}>\r\n                            <FormattedMessage id=\"TeamsChooseLabAccountGetStartedDescriptionSingleAccount\" defaultMessage=\"All labs in this team will be created within the container below.\" description=\"Description for the teams configuration page when a single lab account is found.\"/>\r\n                        </Stack.Item>)}\r\n                    {!hasSingleLabParent && (<Stack.Item>\r\n                            <TeamsChooseLabParentContent labParentItems={labParentItems} onSave={onSave} defaultSelectedId={defaultSelectedId}/>\r\n                        </Stack.Item>)}\r\n                    {hasSingleLabParent && (<Stack.Item>\r\n                            <TeamsSingleLabParentContent labParentItem={labParentItems.get(0)} isRefreshing={isRefreshing} refreshLabParents={refreshLabParents} onSave={onSave}/>\r\n                        </Stack.Item>)}\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nconst getOption = (labParentItem, selected) => {\r\n    const option = { key: labParentItem.id, text: labParentItem.name, selected };\r\n    return option;\r\n};\r\nconst getOptions = (labParentItems) => {\r\n    const options = labParentItems.toArray().map((o) => {\r\n        return getOption(o);\r\n    });\r\n    return options;\r\n};\r\nexport const TeamsChooseLabParentContent = (props) => {\r\n    const intl = useIntl();\r\n    const { labParentItems, onSave, defaultSelectedId } = props;\r\n    const defaultSelectedItem = labParentItems.find((o) => caseInsensitiveCultureInvariantCompare(o.id, defaultSelectedId) === 0);\r\n    const [selectedOption, setSelectedOption] = React.useState(getOption(defaultSelectedItem, true));\r\n    const options = getOptions(labParentItems);\r\n    const onChange = (option) => {\r\n        setSelectedOption(option);\r\n        onSave(option.key);\r\n    };\r\n    const dropdownProps = {\r\n        options,\r\n        selectedKey: selectedOption.key,\r\n        onChange: (_, option) => !!option && onChange(option),\r\n        // set responsive mode to let the list rendered in callout, rather than in a new panel\r\n        responsiveMode: ResponsiveMode.large,\r\n        calloutProps: {\r\n            minPagePadding: 0,\r\n            calloutMaxHeight: 110,\r\n        },\r\n    };\r\n    return (<Stack.Item styles={{ root: { paddingTop: '20px', fontWeight: 600 } }}>\r\n            <Dropdown {...dropdownProps} label={intl.formatMessage(messages.teamsChooseLabAccountMessage)}/>\r\n        </Stack.Item>);\r\n};\r\nexport const TeamsSingleLabParentContent = (props) => {\r\n    const { labParentItem, isRefreshing, refreshLabParents } = props;\r\n    return (<Stack>\r\n            <Stack.Item>\r\n                <Stack horizontal styles={{ root: { paddingTop: '34px', fontWeight: 600 } }}>\r\n                    <Stack.Item>\r\n                        <Icon iconName=\"Completed\" styles={{ root: { color: '#008373' } }}/>\r\n                    </Stack.Item>\r\n                    <Stack styles={{ root: { paddingLeft: '10px' } }}>\r\n                        <Stack.Item>\r\n                            <FormattedMessage id=\"TeamsSingleLabAccountMessage\" defaultMessage='\"<span>{labParentName}</span>\" will be used for the labs in this team.' description=\"Description about the current single account that will be used for this team. The value of {labParentName} contains the name of the lab account that is selected.\" values={{\r\n        labParentName: labParentItem.name || '',\r\n        span: (chunks) => <span style={{ fontWeight: 600 }}>{chunks}</span>,\r\n    }}/>\r\n                        </Stack.Item>\r\n                        <Stack.Item styles={{ root: { paddingTop: '7px' } }}>\r\n                            <FormattedMessage id=\"TeamsCheckAdditionalAccounts\" defaultMessage=\"If this isn't the resource group or lab account you want to use, <Link>check for additional options.</Link>\" description=\"Link to refresh resource groups/lab accounts if the current container is not what uses want\" values={{\r\n        Link: (chunks) => (<Link onClick={isRefreshing ? undefined : refreshLabParents}>{chunks}</Link>),\r\n    }}/>\r\n                        </Stack.Item>\r\n                    </Stack>\r\n                </Stack>\r\n            </Stack.Item>\r\n            <Stack.Item styles={{ root: { paddingLeft: '10px' } }}>\r\n                {isRefreshing && <ProgressIndicator styles={{ root: { marginTop: '35px' } }}/>}\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default TeamsConfigureLabParent;\r\n","import { Stack, Icon, Link, ProgressIndicator } from '@fluentui/react';\r\nimport * as React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport commonMessages from '../language/common-messages';\r\nexport const TeamsGetStartedContent = (props) => {\r\n    const { isRefreshing, showNoFoundLabAccountsMessage, refreshLabParents } = props;\r\n    const SectionNumber = (numberMessage) => {\r\n        return (<span style={{ fontSize: '32px', color: '#0078D7', marginLeft: '9px', marginRight: '5px' }}>\r\n                {numberMessage}\r\n            </span>);\r\n    };\r\n    const numberOne = SectionNumber(<FormattedMessage {...commonMessages.numberOne}/>);\r\n    const numberTwo = SectionNumber(<FormattedMessage {...commonMessages.numberTwo}/>);\r\n    return (<Stack tokens={{ childrenGap: '25px' }} styles={{ root: { paddingLeft: '10px', paddingRight: '10px' } }}>\r\n            <Stack.Item styles={{ root: { fontWeight: 600, fontSize: '20px', paddingTop: '10px' } }}>\r\n                <FormattedMessage id=\"TeamsGetStartedTitle\" defaultMessage=\"Welcome to Azure Lab Services! Follow these steps to get started.\" description=\"Title for instructions to get started on Azure Lab Services.\"/>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <Stack horizontal tokens={{ childrenGap: '34px' }}>\r\n                    <Stack.Item>\r\n                        <Icon iconName=\"teams-illustration-1\"/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <Stack tokens={{ childrenGap: '8px' }}>\r\n                            <Stack.Item styles={{ root: { fontSize: '18px', fontWeight: 'bold' } }}>\r\n                                <FormattedMessage {...commonMessages.stepGetAnAzureSubscription} values={{ numberSpan: numberOne }}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item styles={{ root: { paddingLeft: '10px' } }}>\r\n                                <FormattedMessage id=\"CreateAzureAccountText\" defaultMessage=\"Use your personal Microsoft account (MSA) or a Work or school account to create an Azure subscription.\" description=\"Details about getting an Azure subscription.\"/>\r\n                            </Stack.Item>\r\n                        </Stack>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </Stack.Item>\r\n            <Stack.Item>\r\n                <Stack horizontal tokens={{ childrenGap: '20px' }}>\r\n                    <Stack.Item>\r\n                        <Icon iconName=\"teams-illustration-2\"/>\r\n                    </Stack.Item>\r\n                    <Stack.Item>\r\n                        <Stack tokens={{ childrenGap: '8px' }}>\r\n                            <Stack.Item styles={{ root: { fontSize: '18px', fontWeight: 'bold' } }}>\r\n                                <FormattedMessage {...commonMessages.stepAddLabAccount} values={{ numberSpan: numberTwo }}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item styles={{ root: { paddingLeft: '10px' } }}>\r\n                                <FormattedMessage id=\"AddLabAccountText\" defaultMessage=\"In the Azure Portal, <Link1>create a lab plan (preview)</Link1> or <Link2>create a lab account</Link2>\" description=\"Details about creating a lab plan or a lab account.\" values={{\r\n        Link1: (chunks) => (<Link href=\"https://aka.ms/azlabs/new-labplan\" target=\"_blank\">\r\n                                                {chunks}\r\n                                            </Link>),\r\n        Link2: (chunks) => (<Link href=\"https://aka.ms/labaccount\" target=\"_blank\">\r\n                                                {chunks}\r\n                                            </Link>),\r\n    }}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item styles={{ root: { paddingLeft: '10px', paddingTop: '15px', fontWeight: 'bold' } }}>\r\n                                <FormattedMessage id=\"ConfirmToRefreshLabAccountsText\" defaultMessage=\"Once the setup steps are complete, <Link>confirm the container</Link> you want to use with this team.\" description=\"Confirmation to get the latest lab accounts or resource groups.\" values={{\r\n        Link: (chunks) => (<Link onClick={isRefreshing ? undefined : refreshLabParents}>{chunks}</Link>),\r\n    }}/>\r\n                            </Stack.Item>\r\n                            <Stack.Item styles={{ root: { paddingLeft: '10px' } }}>\r\n                                {isRefreshing && <ProgressIndicator styles={{ root: { marginTop: '35px' } }}/>}\r\n                                {showNoFoundLabAccountsMessage && (<div style={{ color: '#C4314B', marginTop: '25px' }}>\r\n                                        <FormattedMessage id=\"NoLabAccountErrorMessgae\" defaultMessage=\"No lab plan or lab account found. Please create one to continue.\" description=\"Error message shown to the users when no lab plans or lab accounts found after refreshing.\"/>\r\n                                    </div>)}\r\n                            </Stack.Item>\r\n                        </Stack>\r\n                    </Stack.Item>\r\n                </Stack>\r\n            </Stack.Item>\r\n        </Stack>);\r\n};\r\nexport default TeamsGetStartedContent;\r\n","import * as React from 'react';\r\nimport TeamsConfigureLabParent from './teams-configure-lab-parent-content';\r\nimport LoadingContainer from '../common/loading-section';\r\nimport TeamsGetStartedContent from './teams-get-started-content';\r\nimport TeamsMessages from './teams-messages';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport { FormattedMessage } from 'react-intl';\r\nexport const TeamsConfig = (props) => {\r\n    const { isStudent, isInvalidChannel, isLoading, isRefreshing, showNoFoundLabAccountsMessage, labParentItems, defaultSelectedId, onSave, refreshLabParents, } = props;\r\n    // add TeamsMessages just for building the resouces.json so that these strings can be translated.\r\n    {\r\n        false && <TeamsMessages />;\r\n    }\r\n    if (isLoading) {\r\n        return <LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>;\r\n    }\r\n    if (isStudent) {\r\n        return (<FullPageMessage image=\"error-access\" message={<FormattedMessage id=\"ErrorMessageStudentAddTab\" defaultMessage=\"Only owners can create labs for this team\" description=\"The error message displayed when students try to add the tab in Teams.\"/>} messageDetails={<FormattedMessage id=\"ErrorMessageStudentAddTabDetails\" defaultMessage=\"Please contact the team owner if you need to set up a lab.\" description=\"The error message displayed when students try to add the tab in Teams.\"/>} imageSize={{ width: 250, height: 250 }} styles={{ root: { backgroundColor: 'inherit' } }}/>);\r\n    }\r\n    if (isInvalidChannel) {\r\n        return (<FullPageMessage image=\"error-access\" message={<FormattedMessage id=\"ErrorMessageAddInPrivateChannel\" defaultMessage=\"Labs cannot be created in private channels.\" description=\"The error message displayed when adding the tab in private channel.\"/>} messageDetails={<FormattedMessage id=\"ErrorMessageAddInPrivateChannelDetails\" defaultMessage=\"Please use a public channel to set up your lab.\" description=\"The error message displayed when adding the tab in private channel.\"/>} imageSize={{ width: 250, height: 250 }} styles={{ root: { backgroundColor: 'inherit' } }}/>);\r\n    }\r\n    if (labParentItems.size > 0) {\r\n        return (<TeamsConfigureLabParent labParentItems={labParentItems} onSave={onSave} isRefreshing={isRefreshing} refreshLabParents={refreshLabParents} defaultSelectedId={defaultSelectedId}/>);\r\n    }\r\n    else {\r\n        return (<TeamsGetStartedContent refreshLabParents={refreshLabParents} isRefreshing={isRefreshing} showNoFoundLabAccountsMessage={showNoFoundLabAccountsMessage}/>);\r\n    }\r\n};\r\nexport default TeamsConfig;\r\n","import * as React from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nconst messages = defineMessages({\r\n    simpleUserExperience: {\r\n        id: 'SimpleUserExperience',\r\n        defaultMessage: 'Simple user experience',\r\n        description: 'Introduction to student user experience in adding tab dialog in Teams',\r\n    },\r\n    simpleUserExperienceDescription: {\r\n        id: 'SimpleUserExperienceDescription',\r\n        defaultMessage: 'Provide immediate access to VMs for invited users',\r\n        description: 'Details about simple user experience',\r\n    },\r\n    flexibilityInCreatingLab: {\r\n        id: 'FlexibilityInCreatingLab',\r\n        defaultMessage: 'Flexibility in creating customized lab environments',\r\n        description: 'Introduction to professor user experience in adding tab dialog in Teams',\r\n    },\r\n    flexibilityInCreatingLabDescription: {\r\n        id: 'FlexibilityInCreatingLabDescription',\r\n        defaultMessage: 'Use Azure Marketplace images or bring in your custom images',\r\n        description: 'Details about flexibility in creating lab environments',\r\n    },\r\n    costOptimization: {\r\n        id: 'CostOptimization',\r\n        defaultMessage: 'Cost optimization',\r\n        description: 'Introduction to schedule in adding tab dialog in Teams',\r\n    },\r\n    costOptimizationDescription: {\r\n        id: 'CostOptimizationDescription',\r\n        defaultMessage: 'Schedule designated usage times or limit usage by setting up quotas',\r\n        description: 'Details about cost optimization',\r\n    },\r\n    payForWhatYouNeed: {\r\n        id: 'PayForWhatYouNeed',\r\n        defaultMessage: 'Pay for just what you need',\r\n        description: 'Introduction to dashboard in adding tab dialog in Teams',\r\n    },\r\n    payForWhatYouNeedDescription: {\r\n        id: 'PayForWhatYouNeedDescription',\r\n        defaultMessage: 'Only pay for active usage in your labs',\r\n        description: 'Details about just pay for what you need',\r\n    },\r\n    computerLabsInCloud: {\r\n        id: 'ComputerLabsInCloud',\r\n        defaultMessage: 'Computer labs in the cloud',\r\n        description: 'Title of introduction about Azure Lab Services',\r\n    },\r\n    aboutAzureLabServicesContentPartOne: {\r\n        id: 'AboutAzureLabServicesContentPartOne',\r\n        defaultMessage: 'Azure Lab Services is a managed cloud service that enables educators and IT to easily roll out cost-efficient labs with customizable virtual machines, without having to master the complexities of setting up cloud infrastructure.',\r\n        description: 'First part for about Azure Lab Services',\r\n    },\r\n    aboutAzureLabServicesContentPartTwo: {\r\n        id: 'AboutAzureLabServicesContentPartTwo',\r\n        defaultMessage: 'Azure Lab Services helps to quickly create virtual lab environments and enables to easily run a class, set up a training lab, or host a hackathon in the cloud so that users can access lab resources from anywhere, anytime.',\r\n        description: 'Second part for about Azure Lab Services',\r\n    },\r\n    aboutAzureLabServicesKeyCapabilities: {\r\n        id: 'AboutAzureLabServicesKeyCapabilities',\r\n        defaultMessage: 'Azure Lab Services provides the following key capabilities –',\r\n        description: 'Key capabilities of Azure Lab Services',\r\n    },\r\n    simpleUserExperienceCapability: {\r\n        id: 'SimpleUserExperienceCapability',\r\n        defaultMessage: '· Simple User Experience – Provide immediate access to VMs for invited users. With one click users can connect and start working - no Azure subscription needed.',\r\n        description: 'Details about simple user experience in about Azure Lab Services content',\r\n    },\r\n    flexibilityCapability: {\r\n        id: 'FlexibilityDetails',\r\n        defaultMessage: '· Flexibility – Use thousands of Azure Marketplace images or bring in your custom images to quickly provision lab VMs and use repeatedly across labs.',\r\n        description: 'Details about flexibility in about Azure Lab Services content',\r\n    },\r\n    costOptimizationCapability: {\r\n        id: 'CostOptimizationDetails',\r\n        defaultMessage: '· Cost Optimization and Tracking – Manage your lab budget with usage control features. Schedule designated usage times or set up recurring auto-shutdowns and start times. Track individuals’ hourly usage or limit usage by setting up quotas.',\r\n        description: 'Details about cost optimization and Tracking',\r\n    },\r\n    automaticManagementAndScalingCapability: {\r\n        id: 'AutomaticManagementAndScalingCapability',\r\n        defaultMessage: '· Automatic Management and Scaling - Provisioning and scaling to hundreds of VMs with a single click, with the service managing all underlying infrastructure.',\r\n        description: 'Details about automatic management and scaling',\r\n    },\r\n    syncWithTeams: {\r\n        id: 'SyncWithTeams',\r\n        defaultMessage: \"When a lab is created within Teams, Azure Lab Services will sync with your Team's member list and automatically provision or decommission your lab's virtual machines based on membership:\",\r\n        description: 'Sync with Teams introduction in About content',\r\n    },\r\n    addUsersInTeams: {\r\n        id: 'AddUsersInTeams',\r\n        defaultMessage: 'When new users are added to your Team, new virtual machines will be created and assigned to them.',\r\n        description: 'Details about adding users when in Teams',\r\n    },\r\n    deleteUsersInTeams: {\r\n        id: 'DeleteUsersInTeams',\r\n        defaultMessage: 'When users are deleted from your Team, virtual machines that were assigned to them will be deleted.',\r\n        description: 'Details about deleting users when in Teams',\r\n    },\r\n});\r\nexport const TeamsMessages = () => {\r\n    return (<>\r\n            <FormattedMessage {...messages.simpleUserExperience}/>\r\n            <FormattedMessage {...messages.simpleUserExperienceDescription}/>\r\n            <FormattedMessage {...messages.flexibilityInCreatingLab}/>\r\n            <FormattedMessage {...messages.flexibilityInCreatingLabDescription}/>\r\n            <FormattedMessage {...messages.costOptimization}/>\r\n            <FormattedMessage {...messages.costOptimizationDescription}/>\r\n            <FormattedMessage {...messages.payForWhatYouNeed}/>\r\n            <FormattedMessage {...messages.payForWhatYouNeedDescription}/>\r\n            <FormattedMessage {...messages.computerLabsInCloud}/>\r\n            <FormattedMessage {...messages.aboutAzureLabServicesContentPartOne}/>\r\n            <FormattedMessage {...messages.aboutAzureLabServicesContentPartTwo}/>\r\n            <FormattedMessage {...messages.aboutAzureLabServicesKeyCapabilities}/>\r\n            <FormattedMessage {...messages.simpleUserExperienceCapability}/>\r\n            <FormattedMessage {...messages.flexibilityCapability}/>\r\n            <FormattedMessage {...messages.costOptimizationCapability}/>\r\n            <FormattedMessage {...messages.automaticManagementAndScalingCapability}/>\r\n            <FormattedMessage {...messages.addUsersInTeams}/>\r\n            <FormattedMessage {...messages.deleteUsersInTeams}/>\r\n        </>);\r\n};\r\nexport default TeamsMessages;\r\n","export const UserTeamRole = {\r\n    Unknown: '',\r\n    Admin: 'Admin',\r\n    User: 'User',\r\n    Guest: 'Guest',\r\n};\r\n// We can't use UserTeamRole from teams directly because this type of enum\r\n// is not usable beyond being a type when using isolated modules. Instead,\r\n// we have to convert it to one of our constant types.\r\nexport function convertUserTeamRole(role) {\r\n    switch (role) {\r\n        case 0:\r\n            return UserTeamRole.Admin;\r\n        case 1:\r\n            return UserTeamRole.User;\r\n        case 2:\r\n            return UserTeamRole.Guest;\r\n        default:\r\n            return UserTeamRole.Unknown;\r\n    }\r\n}\r\nexport const ChannelType = {\r\n    Unknown: '',\r\n    Regular: 'Regular',\r\n    Private: 'Private',\r\n};\r\nexport function convertChannelType(channelType) {\r\n    switch (channelType) {\r\n        case ChannelType.Regular:\r\n            return ChannelType.Regular;\r\n        case ChannelType.Private:\r\n            return ChannelType.Private;\r\n        default:\r\n            return ChannelType.Unknown;\r\n    }\r\n}\r\nexport const TeamsTheme = {\r\n    Unknown: '',\r\n    Default: 'default',\r\n    Dark: 'dark',\r\n    Contrast: 'contrast',\r\n};\r\nexport function convertTeamsTheme(teamsTheme) {\r\n    switch (teamsTheme) {\r\n        case TeamsTheme.Dark:\r\n            return TeamsTheme.Dark;\r\n        case TeamsTheme.Contrast:\r\n            return TeamsTheme.Contrast;\r\n        case TeamsTheme.Default:\r\n            return TeamsTheme.Default;\r\n        default:\r\n            return TeamsTheme.Unknown;\r\n    }\r\n}\r\n","import memoize from 'memoize-one';\r\nimport { UserTeamRole, ChannelType } from '../../data/models/teams';\r\nexport const isTeamsAdmin = memoize((state) => {\r\n    const teamsRole = state.get('teamsStore').get('userTeamRole');\r\n    return teamsRole === UserTeamRole.Admin;\r\n});\r\nexport const isRegularChannel = memoize((state) => {\r\n    const channelType = state.get('teamsStore').get('channelType');\r\n    return channelType === ChannelType.Regular;\r\n});\r\n","import memoize from 'memoize-one';\r\nimport { isHealthyState } from '../utils/provisioning-state';\r\nimport { compareByName } from '../utils/common';\r\nimport { storeIsLoading } from '../redux/selectors/common-selectors';\r\nimport { isTeamsAdmin, isRegularChannel } from '../redux/selectors/teams-selectors';\r\nimport { getCurrentLabParentId, getResourceGroups, hasRefreshedLabParentResources, hasRefreshLabParentResourcesError, isRefreshingLabParentResources, } from '../redux/selectors/lab-parent-resource-selectors';\r\nimport { mapLabParentResourcesToItems } from '../common/page-header/page-header-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../utils/string-comparison';\r\nimport { List } from 'immutable';\r\nexport const getTeamsConfigViewModel = memoize((state) => {\r\n    const labParentResourcesStore = state.get('labParentResourceStore');\r\n    const loadState = labParentResourcesStore.get('loadState');\r\n    const isLoading = storeIsLoading(loadState);\r\n    const isStudent = !isTeamsAdmin(state);\r\n    const isInvalidChannel = !isRegularChannel(state);\r\n    let defaultSelectedId = getCurrentLabParentId(state);\r\n    let labParentItems = List();\r\n    if (!isLoading) {\r\n        const labAccountStore = state.get('labAccountStore');\r\n        const labAccounts = labAccountStore\r\n            .get('labAccounts')\r\n            .filter((o) => isHealthyState(o))\r\n            .sort(compareByName);\r\n        const resourceGroups = getResourceGroups(state);\r\n        labParentItems = mapLabParentResourcesToItems(labAccounts, resourceGroups).sort(compareByName);\r\n        if (!labParentItems.find((o) => caseInsensitiveCultureInvariantCompare(o.id, defaultSelectedId) === 0)) {\r\n            defaultSelectedId = labParentItems.get(0)?.id;\r\n        }\r\n    }\r\n    const isRefreshing = isRefreshingLabParentResources(state);\r\n    const hasRefreshError = hasRefreshLabParentResourcesError(state);\r\n    const hasRefreshed = hasRefreshedLabParentResources(state);\r\n    return {\r\n        isLoading,\r\n        isRefreshing,\r\n        hasRefreshError,\r\n        hasRefreshed,\r\n        labParentItems,\r\n        isStudent,\r\n        isInvalidChannel,\r\n        defaultSelectedId,\r\n    };\r\n});\r\nexport const getTeamsConfigContainerModel = memoize((state) => {\r\n    const teamsConfigViewModel = getTeamsConfigViewModel(state);\r\n    return {\r\n        teamsConfigViewModel,\r\n    };\r\n});\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { teamsConfigureTab, teamsDisableSaveButton } from '../redux/actions/teams/teams-action-creators';\r\nimport TeamsConfig from './teams-config';\r\nimport { getTeamsConfigContainerModel } from './teams-config-selectors';\r\nimport { refreshSubscriptionsAndLabParentResources } from '../redux/actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nclass TeamsConfigContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidMount() {\r\n        const { teamsConfigureTab, teamsConfigViewModel } = this.props;\r\n        const { isStudent, isInvalidChannel, defaultSelectedId } = teamsConfigViewModel;\r\n        if (!isStudent && !isInvalidChannel && defaultSelectedId) {\r\n            teamsConfigureTab(defaultSelectedId);\r\n        }\r\n    }\r\n    componentDidUpdate(prevProps) {\r\n        const { teamsConfigViewModel, teamsConfigureTab, teamsDisableSaveButton } = this.props;\r\n        const { isStudent, isInvalidChannel, labParentItems, isRefreshing, defaultSelectedId } = teamsConfigViewModel;\r\n        if (isStudent || isInvalidChannel) {\r\n            return;\r\n        }\r\n        if (prevProps.teamsConfigViewModel.labParentItems.size !== labParentItems.size) {\r\n            if (prevProps.teamsConfigViewModel.labParentItems.size === 0 && defaultSelectedId) {\r\n                teamsConfigureTab(defaultSelectedId);\r\n            }\r\n            else if (labParentItems.size === 0) {\r\n                teamsDisableSaveButton();\r\n            }\r\n        }\r\n        // if refreshing subscriptions and lab accounts is in process, disable the save button\r\n        // when refreshing is done, configure the save button with the current single lab account.\r\n        if (labParentItems.size === 1 && prevProps.teamsConfigViewModel.labParentItems.size === 1) {\r\n            if (!prevProps.teamsConfigViewModel.isRefreshing && isRefreshing) {\r\n                teamsDisableSaveButton();\r\n            }\r\n            else if (prevProps.teamsConfigViewModel.isRefreshing && !isRefreshing) {\r\n                teamsConfigureTab(labParentItems.get(0).id);\r\n            }\r\n        }\r\n    }\r\n    render() {\r\n        const { teamsConfigViewModel, teamsConfigureTab, refreshSubscriptionsAndLabParentResources } = this.props;\r\n        const { isStudent, isLoading, isRefreshing, isInvalidChannel, labParentItems, hasRefreshed, hasRefreshError, defaultSelectedId, } = teamsConfigViewModel;\r\n        // NOTE: Using #FFFFFF directly here so this change is low impact. When we can properly support a dark / high contrast\r\n        // mode theme in teams this backgroundColor style will be removed\r\n        return (<div style={{ backgroundColor: '#FFFFFF', height: '100%', width: '100%' }}>\r\n                <TeamsConfig isStudent={isStudent} isInvalidChannel={isInvalidChannel} isLoading={isLoading} isRefreshing={isRefreshing} showNoFoundLabAccountsMessage={!isRefreshing && hasRefreshed && !hasRefreshError} labParentItems={labParentItems} defaultSelectedId={defaultSelectedId} onSave={(labParentId) => {\r\n            teamsConfigureTab(labParentId);\r\n        }} refreshLabParents={refreshSubscriptionsAndLabParentResources}/>\r\n            </div>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getTeamsConfigContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    teamsDisableSaveButton,\r\n    teamsConfigureTab,\r\n    refreshSubscriptionsAndLabParentResources,\r\n};\r\nexport const TeamsConfigContainer = connect(mapStateToProps, mapDispatchToProps)(TeamsConfigContainerInjected);\r\nexport default TeamsConfigContainer;\r\n","import * as React from 'react';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport { Loading } from '../welcome/loading';\r\nimport { Routes } from '../utils/routes';\r\nimport { LabListContainer } from '../lab-list/lab-list-container';\r\nimport { LabAppContainer } from '../lab-app/lab-app-container';\r\nimport { WelcomeContainer } from '../welcome/welcome-container';\r\nimport { TeamsConfigContainer } from '../teams-app/teams-config-container';\r\nexport const ProfessorApp = (props) => {\r\n    const { isInitializing, isTeamsModeEnabled } = props;\r\n    if (isInitializing) {\r\n        return (<Switch>\r\n                <Route exact={true} path={Routes.TeamsConfig} component={TeamsConfigContainer}/>\r\n                <Route render={() => <Loading hideHeader={isTeamsModeEnabled}/>}/>\r\n            </Switch>);\r\n    }\r\n    return (<Switch>\r\n            <Route exact={true} path={Routes.TeamsConfig} component={TeamsConfigContainer}/>\r\n            <Route exact={true} path={Routes.LabList()} render={() => <LabListContainer showNewLabFlyout={false}/>}/>\r\n            <Route exact={true} path={Routes.NewLab()} render={() => <LabListContainer showNewLabFlyout={true}/>}/>\r\n            <Route exact={true} path={[\r\n        Routes.Dashboard(),\r\n        Routes.Template(),\r\n        Routes.Schedule(),\r\n        Routes.Users(),\r\n        Routes.VirtualMachines(),\r\n        Routes.Settings(),\r\n        Routes.Lab(),\r\n        Routes.VNextLab(),\r\n    ]} component={LabAppContainer}/>\r\n            <Route component={WelcomeContainer}/>\r\n        </Switch>);\r\n};\r\nexport default ProfessorApp;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { professorInitialize } from '../redux/actions/common/common-action-creators';\r\nimport { InitializationState } from '../redux/state/common-store';\r\nimport { ProfessorApp } from './professor-app';\r\nimport { isTeamsMode } from '../redux/selectors/common-selectors';\r\nclass ProfessorAppContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidMount() {\r\n        if (this.props.professorInitializationState === InitializationState.NotStarted) {\r\n            this.props.professorInitialize();\r\n        }\r\n    }\r\n    render() {\r\n        const { isInitializing, isTeamsModeEnabled } = this.props;\r\n        return <ProfessorApp isInitializing={isInitializing} isTeamsModeEnabled={isTeamsModeEnabled}/>;\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const professorInitializationState = commonStore.get('professorInitializationState');\r\n    const isInitializing = professorInitializationState === InitializationState.NotStarted ||\r\n        professorInitializationState === InitializationState.Initializing;\r\n    const isTeamsModeEnabled = isTeamsMode(state);\r\n    return {\r\n        professorInitializationState,\r\n        isInitializing,\r\n        isTeamsModeEnabled,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    professorInitialize,\r\n};\r\nexport const ProfessorAppContainer = connect(mapStateToProps, mapDispatchToProps)(ProfessorAppContainerInjected);\r\nexport default ProfessorAppContainer;\r\n","import * as React from 'react';\r\nimport { Loading } from '../welcome/loading';\r\nexport const SignInRedirectPage = () => {\r\n    return <Loading />;\r\n};\r\nexport default SignInRedirectPage;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { SignInRedirectPage } from './sign-in-redirect-page';\r\nimport { signIn } from '../redux/actions/identity/identity-action-creators';\r\nclass SignInRedirectPageContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidMount() {\r\n        this.props.signIn(true, true);\r\n    }\r\n    render() {\r\n        return <SignInRedirectPage />;\r\n    }\r\n}\r\nconst mapDispatchToProps = {\r\n    signIn,\r\n};\r\nexport const SignInRedirectPageContainer = connect(null, mapDispatchToProps)(SignInRedirectPageContainerInjected);\r\nexport default SignInRedirectPageContainer;\r\n","import * as React from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Routes } from '../utils/routes';\r\nexport const SignInReturnPage = (props) => {\r\n    const { isAuthenticated, isMfaReturnUrl, search, returnUrl } = props;\r\n    if (isAuthenticated || isMfaReturnUrl) {\r\n        return <Redirect to={returnUrl}/>;\r\n    }\r\n    return <Redirect to={{ pathname: Routes.Home, search }}/>;\r\n};\r\nexport default SignInReturnPage;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AuthenticationState } from '../data/models/identity';\r\nimport { SignInReturnPage } from './sign-in-return-page';\r\nimport { getSearch, isMfaReturn } from '../redux/selectors/route-selector';\r\nimport { resetShowRetirementAlert } from '../redux/actions/identity/identity-action-creators';\r\nclass SignInReturnPageContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidMount() {\r\n        // ****** IMPORTANT ******Keep the flag as false until we're ready to show the retirement alert******\r\n        const shouldShowRetirementAlert = true;\r\n        if (shouldShowRetirementAlert) {\r\n            this.props.resetShowRetirementAlert();\r\n        }\r\n    }\r\n    render() {\r\n        const { isAuthenticated, search, returnUrl, isMfaReturnUrl } = this.props;\r\n        return (<SignInReturnPage isAuthenticated={isAuthenticated} search={search} returnUrl={returnUrl} isMfaReturnUrl={isMfaReturnUrl}/>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    const identityStore = state.get('identityStore');\r\n    const identityState = identityStore.get('state');\r\n    const returnUrl = identityStore.get('returnUrl');\r\n    const isAuthenticated = identityState === AuthenticationState.Authenticated;\r\n    const search = getSearch(state);\r\n    const isMfaReturnUrl = isMfaReturn(state);\r\n    return {\r\n        isAuthenticated,\r\n        search,\r\n        returnUrl,\r\n        isMfaReturnUrl,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    resetShowRetirementAlert,\r\n};\r\nexport const SignInReturnPageContainer = connect(mapStateToProps, mapDispatchToProps)(SignInReturnPageContainerInjected);\r\nexport default SignInReturnPageContainer;\r\n","import * as React from 'react';\r\nimport { Spinner, SpinnerSize, Stack } from '@fluentui/react';\r\nimport { injectIntl, defineMessages, FormattedMessage } from 'react-intl';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { RegistrationState, RegistrationErrorCode } from '../data/models/register-user';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport { Routes } from '../utils/routes';\r\nimport { MlClientError, FailureOperation } from '../data/ml-client-error';\r\nimport './register-user.css';\r\nconst messages = defineMessages({\r\n    registeringLoadingLabel: {\r\n        id: 'RegisteringLoadingLabel',\r\n        defaultMessage: 'Registering...',\r\n        description: 'Message displayed below a loading spinner when lab registration is in progress.',\r\n    },\r\n    registerHeaderLabel: {\r\n        id: 'RegisterUserPageHeading',\r\n        defaultMessage: 'Registering for your lab',\r\n        description: 'Heading displayed on the register user page while registration is in progress.',\r\n    },\r\n});\r\nconst RegisterUserInjected = (props) => {\r\n    const { registerViewModel, intl } = props;\r\n    const { search, registrationState, error } = registerViewModel;\r\n    const loadingStatus = intl.formatMessage(messages.registeringLoadingLabel);\r\n    const registeringHeader = intl.formatMessage(messages.registerHeaderLabel);\r\n    const errorCode = error ? error.code : undefined;\r\n    const registrationFailed = registrationState === RegistrationState.Failed;\r\n    const registrationSuccess = registrationState === RegistrationState.Registered;\r\n    const registrationInProgress = registrationState === RegistrationState.Registering || registrationState === RegistrationState.None;\r\n    if (registrationFailed) {\r\n        let image = 'error-general';\r\n        let errorMessage;\r\n        switch (errorCode) {\r\n            case RegistrationErrorCode.InsufficientEnvironmentsToClaim:\r\n                image = 'error-access';\r\n                errorMessage = (<FormattedMessage id=\"RegisterUserInsufficientEnvironmentsToClaimMessage\" defaultMessage=\"All virtual machines have been claimed. Please contact the lab owner to increase the capacity of the lab.\" description=\"The message displayed to the user when a lab has insufficient capacity to register.\"/>);\r\n                break;\r\n            case RegistrationErrorCode.RestrictedLabAccessDenied:\r\n                image = 'error-access';\r\n                errorMessage = (<FormattedMessage id=\"RegisterUserRestrictedLabAccessDeniedMessage\" defaultMessage=\"You do not have permission to access this lab. Please contact the lab owner for access.\" description=\"The message displayed to the user when they do not have access to register for a lab.\"/>);\r\n                break;\r\n            case RegistrationErrorCode.InvalidRegistrationCode:\r\n                image = 'error-access';\r\n                errorMessage = (<FormattedMessage id=\"RegisterUserInvalidRegistrationCodeMessage\" defaultMessage=\"The registration code provided is invalid or expired.\" description=\"The message displayed to the user when lab registration files due to an invalid or expired code.\"/>);\r\n                break;\r\n            case RegistrationErrorCode.CannotRegisterToUnpublishedLab:\r\n                image = 'error-access';\r\n                errorMessage = (<FormattedMessage id=\"RegisterUserCannotRegisterToUnpublishedLabMessage\" defaultMessage=\"You cannot register to a lab that has not been published.\" description=\"The message displayed to the user when lab registration fails due to an unpublished lab.\"/>);\r\n                break;\r\n            case RegistrationErrorCode.ResourceOperationNotSupported:\r\n                errorMessage = (<FormattedMessage id=\"RegisterUserResourceOperationNotSupportedbMessage\" defaultMessage=\"We are unable to register for the lab at this time. Please try again in a few minutes.\" description=\"The message displayed to the user when lab registration fails because their user object is being deleted.\"/>);\r\n                break;\r\n            default:\r\n                throw (error ||\r\n                    new MlClientError('An unknown registration error was encountered.', '', FailureOperation.RegisterUser));\r\n        }\r\n        return <FullPageMessage image={image} message={registeringHeader} messageDetails={errorMessage}/>;\r\n    }\r\n    return (<Stack id=\"register-user-content\" verticalAlign=\"center\" horizontalAlign=\"center\" grow verticalFill>\r\n            {registrationSuccess ? (<Redirect to={{ pathname: Routes.StudentView, search }}/>) : (<Stack.Item>\r\n                    <h2 className=\"ms-fontSize-xxl ms-fontWeight-semibold\">{registeringHeader}</h2>\r\n                    {registrationInProgress && (<Spinner size={SpinnerSize.large} label={loadingStatus} ariaLive=\"assertive\"/>)}\r\n                </Stack.Item>)}\r\n        </Stack>);\r\n};\r\nexport const RegisterUser = injectIntl(RegisterUserInjected);\r\nexport default RegisterUser;\r\n","import memoize from 'memoize-one';\r\nimport { isLmsStudent } from '../redux/selectors/lti-selectors';\r\nimport { isVNextFeatureEnabledOrLms } from '../redux/selectors/common-selectors';\r\nimport { getSearch } from '../redux/selectors/route-selector';\r\nexport const getRegisterViewModel = memoize((state) => {\r\n    const isVNext = isVNextFeatureEnabledOrLms(state);\r\n    const search = getSearch(state);\r\n    const shouldHideUserMenu = isLmsStudent(state);\r\n    let registerStore;\r\n    if (isVNext) {\r\n        registerStore = state.get('vNextRegisterStore');\r\n    }\r\n    else {\r\n        registerStore = state.get('registerStore');\r\n    }\r\n    const registrationState = registerStore.get('registrationState');\r\n    const error = registerStore.get('error');\r\n    return {\r\n        registrationState,\r\n        error,\r\n        search,\r\n        shouldHideUserMenu,\r\n    };\r\n});\r\nexport const getRegisterContainerModel = memoize((state) => {\r\n    const registerViewModel = getRegisterViewModel(state);\r\n    return {\r\n        registerViewModel,\r\n    };\r\n});\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\nimport { registerUser } from '../redux/actions/register/register-action-creators';\r\nimport { RegisterUser } from './register-user';\r\nimport { Page } from '../common/page/page';\r\nimport { getRegisterContainerModel } from './register-selectors';\r\nconst messages = defineMessages({\r\n    pageTitle: {\r\n        id: 'RegisterUserPageTitle',\r\n        defaultMessage: 'Registering',\r\n        description: 'The page title for the register user page',\r\n    },\r\n});\r\nclass RegisterUserContainer extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidMount() {\r\n        this.props.registerUser(this.props.registrationCode);\r\n    }\r\n    render() {\r\n        const pageTitle = this.props.intl.formatMessage(messages.pageTitle);\r\n        const { registerViewModel } = this.props;\r\n        const { shouldHideUserMenu } = registerViewModel;\r\n        return (<Page headerProps={{\r\n            hideLabParentPicker: true,\r\n            hideLabPicker: true,\r\n            hideUserMenu: shouldHideUserMenu,\r\n        }} title={pageTitle} isScrollable={true}>\r\n                <RegisterUser registerViewModel={registerViewModel}/>\r\n            </Page>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    return getRegisterContainerModel(state);\r\n};\r\nconst mapDispatchToProps = {\r\n    registerUser,\r\n};\r\nconst container = connect(mapStateToProps, mapDispatchToProps)(injectIntl(RegisterUserContainer));\r\nexport default container;\r\n","import * as React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport RegisterUserContainer from '../register-user/register-user-container';\r\nimport StudentVmListContainer from '../student-vm-list/student-vm-list-container';\r\nimport { Routes } from '../utils/routes';\r\nimport { Loading } from '../welcome/loading';\r\nexport const StudentApp = (props) => {\r\n    if (props.isInitializing) {\r\n        return <Loading />;\r\n    }\r\n    return (<Switch>\r\n            <Route path={Routes.StudentView} component={StudentVmListContainer}/>\r\n            <Route path={Routes.Register()} render={(routeProps) => (<RegisterUserContainer registrationCode={routeProps.match.params.registrationCode}/>)}/>\r\n        </Switch>);\r\n};\r\nexport default StudentApp;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { studentInitialize } from '../redux/actions/common/common-action-creators';\r\nimport { InitializationState } from '../redux/state/common-store';\r\nimport { StudentApp } from './student-app';\r\nclass StudentAppContainerInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    componentDidMount() {\r\n        if (this.props.studentInitializeState === InitializationState.NotStarted) {\r\n            this.props.studentInitialize();\r\n        }\r\n    }\r\n    render() {\r\n        const { isInitializing } = this.props;\r\n        return <StudentApp isInitializing={isInitializing}/>;\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const studentInitializeState = commonStore.get('studentInitializeState');\r\n    const isInitializing = studentInitializeState === InitializationState.NotStarted ||\r\n        studentInitializeState === InitializationState.Initializing;\r\n    return {\r\n        studentInitializeState,\r\n        isInitializing,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    studentInitialize,\r\n};\r\nexport const StudentAppContainer = connect(mapStateToProps, mapDispatchToProps)(StudentAppContainerInjected);\r\nexport default StudentAppContainer;\r\n","import * as React from 'react';\r\nimport { injectIntl, defineMessages } from 'react-intl';\r\nimport FullPageMessage from '../full-page-message/full-page-message';\r\nimport { commonMessages } from '../language/common-messages';\r\nconst messages = defineMessages({\r\n    signedOutMessage: {\r\n        id: 'SignedOutMessage',\r\n        defaultMessage: 'You are signed out.',\r\n        description: 'The message displayed to a user when they sign out.',\r\n    },\r\n});\r\nconst UserLoggedOutInjected = (props) => {\r\n    const signedOutMessage = props.intl.formatMessage(messages.signedOutMessage);\r\n    const signInButtonText = props.intl.formatMessage(commonMessages.signInButtonText);\r\n    return (<FullPageMessage image=\"session-expired\" message={signedOutMessage} buttonText={signInButtonText} buttonOnClick={props.signIn}/>);\r\n};\r\nexport const UserLoggedOut = injectIntl(UserLoggedOutInjected);\r\nexport default UserLoggedOut;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { signIn } from '../redux/actions/identity/identity-action-creators';\r\nimport { UserLoggedOut } from './user-logged-out';\r\nimport { Page } from '../common/page/page';\r\nimport { initialize } from '../redux/actions/common/common-action-creators';\r\nimport { isLmsHost } from '../redux/selectors/common-selectors';\r\nconst UserLoggedOutContainerInjected = (props) => {\r\n    const { signIn, initialize, shouldOpenPopupWindow } = props;\r\n    return (<Page headerProps={{ hideLabParentPicker: true }}>\r\n            \r\n            <UserLoggedOut signIn={shouldOpenPopupWindow ? () => initialize(true) : () => signIn(true, false)}/>\r\n        </Page>);\r\n};\r\nconst mapStateToProps = (state) => {\r\n    const isLms = isLmsHost(state);\r\n    return {\r\n        shouldOpenPopupWindow: isLms,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    signIn,\r\n    initialize,\r\n};\r\nexport const UserLoggedOutContainer = connect(mapStateToProps, mapDispatchToProps)(UserLoggedOutContainerInjected);\r\nexport default UserLoggedOutContainer;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { LoadingContainer } from '../common/loading-section';\r\nimport { teamsStartMfa } from '../redux/actions/teams/teams-action-creators';\r\nconst TeamsStartMfaContainerInjected = (props) => {\r\n    const { teamsStartMfa } = props;\r\n    React.useEffect(() => {\r\n        teamsStartMfa();\r\n    }, []);\r\n    return <LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>;\r\n};\r\nconst mapDispatchToProps = {\r\n    teamsStartMfa,\r\n};\r\nexport const TeamsStartMfaContainer = connect(null, mapDispatchToProps)(TeamsStartMfaContainerInjected);\r\nexport default TeamsStartMfaContainer;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { LoadingContainer } from '../common/loading-section';\r\nimport { teamsCompleteMfa } from '../redux/actions/teams/teams-action-creators';\r\nconst TeamsCompleteMfaContainerInjected = (props) => {\r\n    const { teamsCompleteMfa } = props;\r\n    React.useEffect(() => {\r\n        teamsCompleteMfa();\r\n    }, []);\r\n    return <LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>;\r\n};\r\nconst mapDispatchToProps = {\r\n    teamsCompleteMfa,\r\n};\r\nexport const TeamsCompleteMfaContainer = connect(null, mapDispatchToProps)(TeamsCompleteMfaContainerInjected);\r\nexport default TeamsCompleteMfaContainer;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { LoadingContainer } from '../common/loading-section';\r\nimport { ltiStartOidc } from '../redux/actions/lti/lti-action-creators';\r\nconst LtiStartOidcContainerInjected = (props) => {\r\n    const { ltiStartOidc } = props;\r\n    React.useEffect(() => {\r\n        ltiStartOidc();\r\n    }, []);\r\n    return <LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>;\r\n};\r\nconst mapDispatchToProps = {\r\n    ltiStartOidc,\r\n};\r\nexport const LtiStartOidcContainer = connect(null, mapDispatchToProps)(LtiStartOidcContainerInjected);\r\nexport default LtiStartOidcContainer;\r\n","import * as React from 'react';\r\nimport { Helmet } from 'react-helmet';\r\nimport IdleTimer from 'react-idle-timer';\r\nimport { IntlProvider } from 'react-intl';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, Route, Switch } from 'react-router-dom';\r\nimport { AuthenticationState } from './data/models/identity';\r\nimport ErrorBoundaryContainer from './error-boundary/error-boundary-container';\r\nimport ErrorViewContainer from './error-view/error-view-container';\r\nimport { LandingPageContainer } from './landing-page/landing-page-container';\r\nimport { ProfessorAppContainer } from './professor-app/professor-app-container';\r\nimport { idleTimeout, initialize, processQueryParams, setTimezone, } from './redux/actions/common/common-action-creators';\r\nimport { getLocale, isTeamsMode, isTeamsHost } from './redux/selectors/common-selectors';\r\nimport { getRoute, getSearch } from './redux/selectors/route-selector';\r\nimport { InitializationState } from './redux/state/common-store';\r\nimport { SignInRedirectPageContainer } from './sign-in/sign-in-redirect-container';\r\nimport { SignInReturnPageContainer } from './sign-in/sign-in-return-container';\r\nimport { StudentAppContainer } from './student-app/student-app-container';\r\nimport { UserLoggedOutContainer } from './user-logged-out/user-logged-out-container';\r\nimport { guessTimezone } from './utils/common';\r\nimport { Urls } from './utils/constants';\r\nimport { Routes } from './utils/routes';\r\nimport { trackPageView } from './utils/telemetry/telemetry-channel';\r\nimport { Loading } from './welcome/loading';\r\nimport { TeamsStartMfaContainer } from './teams-app/teams-start-mfa-container';\r\nimport { TeamsCompleteMfaContainer } from './teams-app/teams-complete-mfa-container';\r\nimport { LtiStartOidcContainer } from './lti-app/lti-start-oidc-container';\r\nimport { LoadingContainer } from './common/loading-section';\r\nimport { getAuthenticationState } from './redux/selectors/identity-selector';\r\nimport { isLmsStudent } from './redux/selectors/lti-selectors';\r\nimport './app.css';\r\nclass AppInjected extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this._onIdle = (_e) => {\r\n            this.props.idleTimeout();\r\n        };\r\n        // Doing this in the constructor and not in\r\n        // componentDidMount so we derive a locale by\r\n        // the time we render the loading spinner.\r\n        // Otherwise, this is unsafe.\r\n        const timezone = guessTimezone();\r\n        const { search, setTimezone, processQueryParams } = this.props;\r\n        processQueryParams(search);\r\n        setTimezone(timezone);\r\n    }\r\n    // using this as a hook for detecting changes to search, can't see\r\n    // previous values of search within a saga to compare\r\n    UNSAFE_componentWillReceiveProps(nextProps) {\r\n        const { search, processQueryParams } = nextProps;\r\n        if (search !== this.props.search) {\r\n            processQueryParams(search);\r\n        }\r\n    }\r\n    componentDidMount() {\r\n        const { route, initialize } = this.props;\r\n        trackPageView('SPA', route);\r\n        initialize();\r\n    }\r\n    render() {\r\n        const { fatalError, isInitializing, isRedirecting, isAuthenticated, isSigningOut, shouldHideLoadingHeader, isTeamsHosted, search, locale, messages, isPoppingUp, isLmsCourseStudent, } = this.props;\r\n        let appContent;\r\n        if (fatalError) {\r\n            // the error is rendered by the ErrorViewContainer\r\n            appContent = null;\r\n        }\r\n        else if (isInitializing || isRedirecting || isSigningOut || isPoppingUp) {\r\n            appContent = (<Switch>\r\n                    <Route exact={true} path={[Routes.TeamsConfig, Routes.TeamsStartMfa, Routes.TeamsCompleteMfa, Routes.LtiStartOidc]} render={() => <LoadingContainer styles={{ root: { backgroundColor: 'inherit' } }}/>}/>\r\n                    <Route render={() => <Loading hideHeader={shouldHideLoadingHeader}/>}/>\r\n                </Switch>);\r\n        }\r\n        else if (!isAuthenticated) {\r\n            appContent = (<Switch>\r\n                    <Route exact={true} path={Routes.LoggedOut} component={UserLoggedOutContainer}/>\r\n                    <Route exact={true} path={Routes.SignInReturn} component={SignInReturnPageContainer}/>\r\n                    <Route exact={true} path={Routes.TeamsStartMfa} component={TeamsStartMfaContainer}/>\r\n                    <Route exact={true} path={Routes.TeamsCompleteMfa} component={TeamsCompleteMfaContainer}/>\r\n                    <Route exact={true} path={Routes.LtiStartOidc} component={LtiStartOidcContainer}/>\r\n                    <Route exact={true} path={[\r\n                Routes.Welcome,\r\n                Routes.StudentView,\r\n                Routes.TeamsConfig,\r\n                Routes.LabList(),\r\n                Routes.NewLab(),\r\n                Routes.Dashboard(),\r\n                Routes.Template(),\r\n                Routes.Schedule(),\r\n                Routes.Settings(),\r\n                Routes.Users(),\r\n                Routes.Lab(),\r\n                Routes.VirtualMachines(),\r\n                Routes.Register(),\r\n            ]} component={SignInRedirectPageContainer}/>\r\n                    <Route exact={true} path={Routes.Home} component={LandingPageContainer}/>\r\n                    <Route exact={true} path={Routes.Privacy} render={() => {\r\n                window.location.replace(Urls.Privacy);\r\n                return <></>;\r\n            }}/>\r\n                    <Route exact={true} path={Routes.TermsOfUse} render={() => {\r\n                window.location.replace(Urls.TermsOfUse);\r\n                return <></>;\r\n            }}/>\r\n                    <Route render={() => <Redirect to={{ pathname: Routes.Home, search }}/>}/>\r\n                </Switch>);\r\n        }\r\n        else {\r\n            appContent = (<Switch>\r\n                    <Route exact={true} path={Routes.SignInReturn} component={SignInReturnPageContainer}/>\r\n                    <Route exact={true} path={Routes.TeamsStartMfa} component={TeamsStartMfaContainer}/>\r\n                    <Route exact={true} path={Routes.TeamsCompleteMfa} component={TeamsCompleteMfaContainer}/>\r\n                    <Route exact={true} path={Routes.LtiStartOidc} component={LtiStartOidcContainer}/>\r\n                    <Route exact={true} path={[\r\n                Routes.Home,\r\n                Routes.Welcome,\r\n                Routes.TeamsConfig,\r\n                Routes.LabList(),\r\n                Routes.NewLab(),\r\n                Routes.Dashboard(),\r\n                Routes.Template(),\r\n                Routes.VirtualMachines(),\r\n                Routes.Users(),\r\n                Routes.Schedule(),\r\n                Routes.Settings(),\r\n                Routes.Lab(),\r\n                Routes.VNextLab(),\r\n            ]} component={ProfessorAppContainer}/>\r\n                    <Route exact={true} path={[Routes.StudentView, Routes.Register()]} component={StudentAppContainer}/>\r\n                    <Route exact={true} path={Routes.Privacy} render={() => {\r\n                window.location.replace(Urls.Privacy);\r\n                return <></>;\r\n            }}/>\r\n                    <Route exact={true} path={Routes.TermsOfUse} render={() => {\r\n                window.location.replace(Urls.TermsOfUse);\r\n                return <></>;\r\n            }}/>\r\n                    <Route render={() => <Redirect to={{ pathname: Routes.Home, search }}/>}/>\r\n                </Switch>);\r\n        }\r\n        return (<IntlProvider locale={locale} key={locale} messages={messages}>\r\n                {!isTeamsHosted && !isLmsCourseStudent && (<IdleTimer element={document} onIdle={this._onIdle} timeout={30 * 60 * 1000}/>)}\r\n                <Helmet htmlAttributes={{ lang: locale, dir: 'ltr' }}/>\r\n                <ErrorViewContainer />\r\n                <ErrorBoundaryContainer>{appContent}</ErrorBoundaryContainer>\r\n            </IntlProvider>);\r\n    }\r\n}\r\nconst mapStateToProps = (state) => {\r\n    const commonStore = state.get('commonStore');\r\n    const locale = getLocale(state);\r\n    const requestedLocale = commonStore.get('requestedLocale');\r\n    const messages = commonStore.get('messages');\r\n    const initializationState = commonStore.get('initializationState');\r\n    const fatalError = commonStore.get('fatalError');\r\n    const shouldHideLoadingHeader = isTeamsMode(state);\r\n    const isTeamsHosted = isTeamsHost(state);\r\n    const isLmsCourseStudent = isLmsStudent(state);\r\n    const identityState = getAuthenticationState(state);\r\n    const isAuthenticated = identityState === AuthenticationState.Authenticated;\r\n    const isRedirecting = identityState === AuthenticationState.Redirecting;\r\n    const isSigningOut = identityState === AuthenticationState.SigningOut;\r\n    const isPoppingUp = identityState === AuthenticationState.PoppingUp;\r\n    const isInitializing = initializationState === InitializationState.NotStarted ||\r\n        initializationState === InitializationState.Initializing;\r\n    const search = getSearch(state);\r\n    const route = getRoute(state);\r\n    return {\r\n        locale,\r\n        requestedLocale,\r\n        messages,\r\n        isInitializing,\r\n        isAuthenticated,\r\n        isRedirecting,\r\n        isSigningOut,\r\n        shouldHideLoadingHeader,\r\n        isTeamsHosted,\r\n        isLmsCourseStudent,\r\n        search,\r\n        route,\r\n        fatalError,\r\n        isPoppingUp,\r\n    };\r\n};\r\nconst mapDispatchToProps = {\r\n    initialize,\r\n    setTimezone,\r\n    idleTimeout,\r\n    processQueryParams,\r\n};\r\nexport const App = connect(mapStateToProps, mapDispatchToProps)(AppInjected);\r\nexport default App;\r\n","import * as React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport { ConnectedRouter as Router } from 'connected-react-router/immutable';\r\nimport { Fabric } from '@fluentui/react/lib/Fabric';\r\nimport { App } from './app';\r\nclass Root extends React.Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n    render() {\r\n        return (<Provider store={this.props.store}>\r\n                <Router history={this.props.history}>\r\n                    <Fabric>\r\n                        <App />\r\n                    </Fabric>\r\n                </Router>\r\n            </Provider>);\r\n    }\r\n}\r\nexport default Root;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\nconst isLocalhost = Boolean(window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/) // eslint-disable-line security/detect-unsafe-regex\r\n);\r\nexport function register(config) {\r\n    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n        // The URL constructor is available in all browsers that support SW.\r\n        const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n        if (publicUrl.origin !== window.location.origin) {\r\n            // Our service worker won't work if PUBLIC_URL is on a different origin\r\n            // from what our page is served on. This might happen if a CDN is used to\r\n            // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n            return;\r\n        }\r\n        window.addEventListener('load', () => {\r\n            const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n            if (isLocalhost) {\r\n                // This is running on localhost. Let's check if a service worker still exists or not.\r\n                checkValidServiceWorker(swUrl, config);\r\n                // Add some additional logging to localhost, pointing developers to the\r\n                // service worker/PWA documentation.\r\n                navigator.serviceWorker.ready.then(() => {\r\n                    console.log('This web app is being served cache-first by a service ' +\r\n                        'worker. To learn more, visit https://bit.ly/CRA-PWA');\r\n                });\r\n            }\r\n            else {\r\n                // Is not localhost. Just register service worker\r\n                registerValidSW(swUrl, config);\r\n            }\r\n        });\r\n    }\r\n}\r\nfunction registerValidSW(swUrl, config) {\r\n    navigator.serviceWorker\r\n        .register(swUrl)\r\n        .then((registration) => {\r\n        registration.onupdatefound = () => {\r\n            const installingWorker = registration.installing;\r\n            if (installingWorker == null) {\r\n                return;\r\n            }\r\n            installingWorker.onstatechange = () => {\r\n                if (installingWorker.state === 'installed') {\r\n                    if (navigator.serviceWorker.controller) {\r\n                        // At this point, the updated precached content has been fetched,\r\n                        // but the previous service worker will still serve the older\r\n                        // content until all client tabs are closed.\r\n                        console.log('New content is available and will be used when all ' +\r\n                            'tabs for this page are closed. See https://bit.ly/CRA-PWA.');\r\n                        // Execute callback\r\n                        if (config && config.onUpdate) {\r\n                            config.onUpdate(registration);\r\n                        }\r\n                    }\r\n                    else {\r\n                        // At this point, everything has been precached.\r\n                        // It's the perfect time to display a\r\n                        // \"Content is cached for offline use.\" message.\r\n                        console.log('Content is cached for offline use.');\r\n                        // Execute callback\r\n                        if (config && config.onSuccess) {\r\n                            config.onSuccess(registration);\r\n                        }\r\n                    }\r\n                }\r\n            };\r\n        };\r\n    })\r\n        .catch((error) => {\r\n        console.error('Error during service worker registration:', error);\r\n    });\r\n}\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n    // Check if the service worker can be found. If it can't reload the page.\r\n    fetch(swUrl)\r\n        .then((response) => {\r\n        // Ensure service worker exists, and that we really are getting a JS file.\r\n        const contentType = response.headers.get('content-type');\r\n        if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\r\n            // No service worker found. Probably a different app. Reload the page.\r\n            navigator.serviceWorker.ready.then((registration) => {\r\n                registration.unregister().then(() => {\r\n                    window.location.reload();\r\n                });\r\n            });\r\n        }\r\n        else {\r\n            // Service worker found. Proceed as normal.\r\n            registerValidSW(swUrl, config);\r\n        }\r\n    })\r\n        .catch(() => {\r\n        console.log('No internet connection found. App is running in offline mode.');\r\n    });\r\n}\r\nexport function unregister() {\r\n    if ('serviceWorker' in navigator) {\r\n        navigator.serviceWorker.ready.then((registration) => {\r\n            registration.unregister();\r\n        });\r\n    }\r\n}\r\n","export const Modes = {\r\n    None: '',\r\n    Mock: 'mock',\r\n};\r\n","import FetchMock from 'fetch-mock';\r\nimport QueryString from 'query-string';\r\nimport { Modes } from './modes';\r\nimport MockScenarios from './mock-scenarios';\r\nexport function setMocks(_scenario) {\r\n    // no mocks right now\r\n}\r\nexport function init() {\r\n    // enable passthrough so we can run partial mocks\r\n    FetchMock.config.fallbackToNetwork = true;\r\n    const queryParams = QueryString.parse(window.location.search);\r\n    if (queryParams.mode && queryParams.mode.toLowerCase() === Modes.Mock) {\r\n        const scenario = queryParams.scenario ? queryParams.scenario.toLowerCase() : MockScenarios.Default;\r\n        setMocks(scenario);\r\n    }\r\n}\r\nconst Mocks = {\r\n    setMocks,\r\n    init,\r\n};\r\nexport default Mocks;\r\n","import { Record } from 'immutable';\r\nimport { RegistrationState } from '../../data/models/register-user';\r\nimport { RegisterActionType, } from '../actions/register/register-actions';\r\nimport { Context } from '../action-context';\r\nfunction registerUser(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.Registering,\r\n    });\r\n}\r\nfunction registerUserSuccess(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.Registered,\r\n    });\r\n}\r\nfunction registerUserFailed(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        registrationState: RegistrationState.Failed,\r\n        error,\r\n    });\r\n}\r\nfunction clearRegisterErrors(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.None,\r\n        error: undefined,\r\n    });\r\n}\r\nfunction clearRegisterState(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.None,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    registrationState: RegistrationState.None,\r\n    error: undefined,\r\n})();\r\nexport const registerReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case RegisterActionType.CLEAR_USER_SESSION:\r\n        case RegisterActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case RegisterActionType.REGISTER_USER:\r\n                            return registerUser(state, action);\r\n                        case RegisterActionType.REGISTER_USER_SUCCESS:\r\n                            return registerUserSuccess(state, action);\r\n                        case RegisterActionType.REGISTER_USER_FAILED:\r\n                            return registerUserFailed(state, action);\r\n                        case RegisterActionType.CLEAR_REGISTER_ERRORS:\r\n                            return clearRegisterErrors(state, action);\r\n                        case RegisterActionType.CLEAR_REGISTER_STATE:\r\n                            return clearRegisterState(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default registerReducer;\r\n","import { List, Record, Map } from 'immutable';\r\nimport { UserEnvironmentActionType, } from '../actions/user-environment/user-environment-actions';\r\nimport { VmState } from '../../data/models/environment-common';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { Context } from '../action-context';\r\nfunction setPendingEnvironmentState(environmentId, environments, pendingVmState) {\r\n    environments = environments.update(environments.findIndex((env) => env.id === environmentId), (env) => {\r\n        return { ...env, pendingVmState };\r\n    });\r\n    return environments;\r\n}\r\nfunction clearPendingEnvironmentState(environmentId, environments) {\r\n    environments = environments.update(environments.findIndex((env) => env.id === environmentId), (env) => {\r\n        return { ...env, pendingVmState: VmState.None };\r\n    });\r\n    return environments;\r\n}\r\nfunction addEnvironmentFailure(environmentId, error, errorMap) {\r\n    let errors = errorMap.get(environmentId);\r\n    errors = errors ? errors.concat(error) : List([error]);\r\n    errorMap = errorMap.set(environmentId, errors);\r\n    return errorMap;\r\n}\r\nfunction clearSingleEnvironmentError(environmentId, errorIndex, errorMap) {\r\n    let errors = errorMap.get(environmentId);\r\n    if (!errors || errorIndex >= errors.count()) {\r\n        return errorMap;\r\n    }\r\n    errors = errors.remove(errorIndex);\r\n    errorMap = errors.count() > 0 ? errorMap.set(environmentId, errors) : errorMap.remove(environmentId);\r\n    return errorMap;\r\n}\r\nfunction clearEnvironmentError(environmentId, errorMap) {\r\n    return errorMap.remove(environmentId);\r\n}\r\nfunction listGlobalUserEnvironments(state, action) {\r\n    const oldEnvironmentState = state.get('loadState');\r\n    const loadState = oldEnvironmentState === LoadingStoreState.NotStarted || oldEnvironmentState === LoadingStoreState.Loading\r\n        ? LoadingStoreState.Loading\r\n        : LoadingStoreState.Updating;\r\n    return state.merge({\r\n        loadState,\r\n    });\r\n}\r\nfunction listGlobalUserEnvironmentsCancelled(state, action) {\r\n    const loadState = state.get('loadState') === LoadingStoreState.Loading ? LoadingStoreState.NotStarted : LoadingStoreState.Loaded;\r\n    return state.merge({\r\n        loadState,\r\n    });\r\n}\r\nfunction listGlobalUserEnvironmentsSuccess(state, action) {\r\n    const { environments: environmentArray } = action;\r\n    const environments = List(environmentArray);\r\n    return state.merge({\r\n        environments,\r\n        listEnvironmentsError: undefined,\r\n    });\r\n}\r\nfunction listGlobalUserEnvironmentsError(state, action) {\r\n    const { error: listEnvironmentsError } = action;\r\n    const loadState = state.get('loadState') === LoadingStoreState.Loading\r\n        ? LoadingStoreState.LoadingFailed\r\n        : LoadingStoreState.UpdateFailed;\r\n    return state.merge({\r\n        loadState,\r\n        listEnvironmentsError,\r\n    });\r\n}\r\nfunction clearListUserEnvironmentsError(state, action) {\r\n    return state.merge({\r\n        listEnvironmentsError: undefined,\r\n    });\r\n}\r\nfunction startEnvironment(state, action) {\r\n    const { environmentId } = action;\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = clearEnvironmentError(environmentId, startErrors);\r\n    let environments = state.get('environments');\r\n    environments = setPendingEnvironmentState(environmentId, environments, VmState.Starting);\r\n    return state.merge({\r\n        environments,\r\n        startErrors,\r\n    });\r\n}\r\nfunction startUserEnvironmentFailed(state, action) {\r\n    const { error, environmentId } = action;\r\n    let environments = state.get('environments');\r\n    environments = clearPendingEnvironmentState(environmentId, environments);\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = addEnvironmentFailure(environmentId, error, startErrors);\r\n    return state.merge({\r\n        environments,\r\n        startErrors,\r\n    });\r\n}\r\nfunction clearStartEnvironmentError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = clearSingleEnvironmentError(environmentId, errorIndex, startErrors);\r\n    return state.merge({\r\n        startErrors,\r\n    });\r\n}\r\nfunction stopEnvironment(state, action) {\r\n    const { environmentId } = action;\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = clearEnvironmentError(environmentId, stopErrors);\r\n    let environments = state.get('environments');\r\n    environments = setPendingEnvironmentState(environmentId, environments, VmState.Stopping);\r\n    return state.merge({\r\n        environments,\r\n        stopErrors,\r\n    });\r\n}\r\nfunction stopUserEnvironmentFailed(state, action) {\r\n    const { error, environmentId } = action;\r\n    let environments = state.get('environments');\r\n    environments = clearPendingEnvironmentState(environmentId, environments);\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = addEnvironmentFailure(environmentId, error, stopErrors);\r\n    return state.merge({\r\n        environments,\r\n        stopErrors,\r\n    });\r\n}\r\nfunction clearStopEnvironmentError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = clearSingleEnvironmentError(environmentId, errorIndex, stopErrors);\r\n    return state.merge({\r\n        stopErrors,\r\n    });\r\n}\r\nfunction resetPassword(state, action) {\r\n    const { environmentId } = action;\r\n    let resetPasswordErrors = state.get('resetPasswordErrors');\r\n    resetPasswordErrors = clearEnvironmentError(environmentId, resetPasswordErrors);\r\n    let environments = state.get('environments');\r\n    environments = setPendingEnvironmentState(environmentId, environments, VmState.ResettingPassword);\r\n    return state.merge({\r\n        environments,\r\n        resetPasswordErrors,\r\n    });\r\n}\r\nfunction resetUserEnvironmentPasswordFailed(state, action) {\r\n    const { error, environmentId } = action;\r\n    let environments = state.get('environments');\r\n    environments = clearPendingEnvironmentState(environmentId, environments);\r\n    let resetPasswordErrors = state.get('resetPasswordErrors');\r\n    resetPasswordErrors = addEnvironmentFailure(environmentId, error, resetPasswordErrors);\r\n    return state.merge({\r\n        environments,\r\n        resetPasswordErrors,\r\n    });\r\n}\r\nfunction clearResetEnvironmentPasswordError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let resetPasswordErrors = state.get('resetPasswordErrors');\r\n    resetPasswordErrors = clearSingleEnvironmentError(environmentId, errorIndex, resetPasswordErrors);\r\n    return state.merge({\r\n        resetPasswordErrors,\r\n    });\r\n}\r\nfunction clearErrors(state, action) {\r\n    return state.merge({\r\n        listEnvironmentsError: undefined,\r\n        startErrors: Map(),\r\n        stopErrors: Map(),\r\n        resetPasswordErrors: Map(),\r\n    });\r\n}\r\nfunction listAllUserVirtualMachinesSuccess(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    environments: List(),\r\n    listEnvironmentsError: undefined,\r\n    startErrors: Map(),\r\n    stopErrors: Map(),\r\n    resetPasswordErrors: Map(),\r\n})();\r\nexport const userEnvironmentReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case UserEnvironmentActionType.CLEAR_USER_SESSION:\r\n        case UserEnvironmentActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_SUCCESS:\r\n            return listGlobalUserEnvironmentsSuccess(state, action);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS:\r\n                            return listGlobalUserEnvironments(state, action);\r\n                        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED:\r\n                            return listGlobalUserEnvironmentsCancelled(state, action);\r\n                        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_ERROR:\r\n                            return listGlobalUserEnvironmentsError(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR:\r\n                            return clearListUserEnvironmentsError(state, action);\r\n                        case UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT:\r\n                            return startEnvironment(state, action);\r\n                        case UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT_FAILED:\r\n                            return startUserEnvironmentFailed(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_START_USER_ENVIRONMENT_ERROR:\r\n                            return clearStartEnvironmentError(state, action);\r\n                        case UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT:\r\n                            return stopEnvironment(state, action);\r\n                        case UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT_FAILED:\r\n                            return stopUserEnvironmentFailed(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_STOP_USER_ENVIRONMENT_ERROR:\r\n                            return clearStopEnvironmentError(state, action);\r\n                        case UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD:\r\n                            return resetPassword(state, action);\r\n                        case UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED:\r\n                            return resetUserEnvironmentPasswordFailed(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR:\r\n                            return clearResetEnvironmentPasswordError(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS:\r\n                            return clearErrors(state, action);\r\n                        case UserEnvironmentActionType.LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS:\r\n                            return listAllUserVirtualMachinesSuccess(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default userEnvironmentReducer;\r\n","export const Theme = {\r\n    Default: '',\r\n    Teams: 'Teams',\r\n    LmsBasics: 'LmsBasics',\r\n    Canvas: 'Canvas',\r\n};\r\nexport default Theme;\r\n","import { Record, Set } from 'immutable';\r\nimport { InitializationState } from '../state/common-store';\r\nimport { CommonActionType, } from '../actions/common/common-actions';\r\nimport { getLocaleData } from '../../language/languages';\r\nimport { MlClientError, FailureOperation } from '../../data/ml-client-error';\r\nimport { Host } from '../../utils/hosts';\r\nimport { Theme } from '../../utils/themes';\r\nfunction initialize(state, action) {\r\n    return state.merge({\r\n        initializationState: InitializationState.Initializing,\r\n    });\r\n}\r\nfunction initializeSuccess(state, action) {\r\n    return state.merge({\r\n        initializationState: InitializationState.Success,\r\n    });\r\n}\r\nfunction initializeFailed(state, action) {\r\n    return state.merge({\r\n        initializationState: InitializationState.Failed,\r\n    });\r\n}\r\nfunction initializeCancelled(state, action) {\r\n    return state.merge({\r\n        initializationState: InitializationState.NotStarted,\r\n    });\r\n}\r\nfunction professorInitialize(state, action) {\r\n    return state.merge({\r\n        professorInitializationState: InitializationState.Initializing,\r\n    });\r\n}\r\nfunction professorInitializeSuccess(state, action) {\r\n    return state.merge({\r\n        professorInitializationState: InitializationState.Success,\r\n    });\r\n}\r\nfunction professorInitializeFailed(state, action) {\r\n    return state.merge({\r\n        professorInitializationState: InitializationState.Failed,\r\n    });\r\n}\r\nfunction professorInitializeCancelled(state, action) {\r\n    return state.merge({\r\n        professorInitializationState: InitializationState.NotStarted,\r\n    });\r\n}\r\nfunction studentInitialize(state, action) {\r\n    return state.merge({\r\n        studentInitializeState: InitializationState.Initializing,\r\n    });\r\n}\r\nfunction studentInitializeSuccess(state, action) {\r\n    return state.merge({\r\n        studentInitializeState: InitializationState.Success,\r\n    });\r\n}\r\nfunction studentInitializeFailed(state, action) {\r\n    return state.merge({\r\n        studentInitializeState: InitializationState.Failed,\r\n    });\r\n}\r\nfunction studentInitializeCancelled(state, action) {\r\n    return state.merge({\r\n        studentInitializeState: InitializationState.NotStarted,\r\n    });\r\n}\r\nfunction labAppInitialize(state, action) {\r\n    return state.merge({\r\n        labAppInitializeState: InitializationState.Initializing,\r\n    });\r\n}\r\nfunction labAppInitializeSuccess(state, action) {\r\n    return state.merge({\r\n        labAppInitializeState: InitializationState.Success,\r\n    });\r\n}\r\nfunction labAppInitializeFailed(state, action) {\r\n    return state.merge({\r\n        labAppInitializeState: InitializationState.Failed,\r\n    });\r\n}\r\nfunction labAppInitializeCancelled(state, action) {\r\n    return state.merge({\r\n        labAppInitializeState: InitializationState.NotStarted,\r\n    });\r\n}\r\nfunction setHost(state, action) {\r\n    const { host } = action;\r\n    return state.merge({\r\n        host,\r\n    });\r\n}\r\nfunction setLocale(state, action) {\r\n    const { locale: requestedLocale } = action;\r\n    const { locale, market, language, messages } = getLocaleData(requestedLocale);\r\n    return state.merge({\r\n        requestedLocale,\r\n        locale,\r\n        market,\r\n        language,\r\n        messages,\r\n    });\r\n}\r\nfunction setTimezone(state, action) {\r\n    const { timezone } = action;\r\n    return state.merge({ timezone });\r\n}\r\nfunction setTheme(state, action) {\r\n    const { theme } = action;\r\n    return state.merge({ theme });\r\n}\r\nfunction setReferrer(state, action) {\r\n    const { referrer } = action;\r\n    return state.merge({ referrer });\r\n}\r\nfunction enableFeature(state, action) {\r\n    const { feature } = action;\r\n    let features = state.get('features');\r\n    features = features.add(feature);\r\n    return state.merge({ features });\r\n}\r\nfunction disableFeature(state, action) {\r\n    const { feature } = action;\r\n    let features = state.get('features');\r\n    features = features.remove(feature);\r\n    return state.merge({ features });\r\n}\r\nfunction fatalError(state, action) {\r\n    const { error: fatalError, errorCode: fatalErrorCode } = action;\r\n    // make sure we preserve the original fatal error when multiple errors occur in succession\r\n    if (!!state.get('fatalErrorCode')) {\r\n        return state;\r\n    }\r\n    return state.merge({\r\n        fatalErrorCode,\r\n        fatalError: fatalError || new MlClientError('The application encountered a fatal error.', '', FailureOperation.Unknown),\r\n    });\r\n}\r\nfunction clearFatalError(state, action) {\r\n    return state.merge({\r\n        fatalErrorCode: undefined,\r\n        fatalError: undefined,\r\n    });\r\n}\r\nfunction clearUserSession(state, action) {\r\n    return state.merge({\r\n        professorInitializationState: InitializationState.NotStarted,\r\n        studentInitializeState: InitializationState.NotStarted,\r\n        labAppInitializeState: InitializationState.NotStarted,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    initializationState: InitializationState.NotStarted,\r\n    professorInitializationState: InitializationState.NotStarted,\r\n    studentInitializeState: InitializationState.NotStarted,\r\n    labAppInitializeState: InitializationState.NotStarted,\r\n    host: Host.Web,\r\n    referrer: '',\r\n    requestedLocale: '',\r\n    locale: '',\r\n    market: '',\r\n    language: '',\r\n    messages: {},\r\n    timezone: '',\r\n    features: Set([]),\r\n    theme: Theme.Default,\r\n    fatalErrorCode: undefined,\r\n    fatalError: undefined,\r\n})();\r\nexport const commonReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case CommonActionType.INITIALIZE:\r\n            return initialize(state, action);\r\n        case CommonActionType.INITIALIZE_SUCCESS:\r\n            return initializeSuccess(state, action);\r\n        case CommonActionType.INITIALIZE_ERROR:\r\n            return initializeFailed(state, action);\r\n        case CommonActionType.INITIALIZE_CANCELLED:\r\n            return initializeCancelled(state, action);\r\n        case CommonActionType.PROFESSOR_INITIALIZE:\r\n            return professorInitialize(state, action);\r\n        case CommonActionType.PROFESSOR_INITIALIZE_SUCCESS:\r\n            return professorInitializeSuccess(state, action);\r\n        case CommonActionType.PROFESSOR_INITIALIZE_ERROR:\r\n            return professorInitializeFailed(state, action);\r\n        case CommonActionType.PROFESSOR_INITIALIZE_CANCELLED:\r\n            return professorInitializeCancelled(state, action);\r\n        case CommonActionType.STUDENT_INITIALIZE:\r\n            return studentInitialize(state, action);\r\n        case CommonActionType.STUDENT_INITIALIZE_SUCCESS:\r\n            return studentInitializeSuccess(state, action);\r\n        case CommonActionType.STUDENT_INITIALIZE_ERROR:\r\n            return studentInitializeFailed(state, action);\r\n        case CommonActionType.STUDENT_INITIALIZE_CANCELLED:\r\n            return studentInitializeCancelled(state, action);\r\n        case CommonActionType.LAB_APP_INITIALIZE:\r\n            return labAppInitialize(state, action);\r\n        case CommonActionType.LAB_APP_INITIALIZE_SUCCESS:\r\n            return labAppInitializeSuccess(state, action);\r\n        case CommonActionType.LAB_APP_INITIALIZE_ERROR:\r\n            return labAppInitializeFailed(state, action);\r\n        case CommonActionType.LAB_APP_INITIALIZE_CANCELLED:\r\n            return labAppInitializeCancelled(state, action);\r\n        case CommonActionType.SET_HOST:\r\n            return setHost(state, action);\r\n        case CommonActionType.SET_LOCALE:\r\n            return setLocale(state, action);\r\n        case CommonActionType.SET_TIMEZONE:\r\n            return setTimezone(state, action);\r\n        case CommonActionType.SET_THEME:\r\n            return setTheme(state, action);\r\n        case CommonActionType.SET_REFERRER:\r\n            return setReferrer(state, action);\r\n        case CommonActionType.ENABLE_FEATURE:\r\n            return enableFeature(state, action);\r\n        case CommonActionType.DISABLE_FEATURE:\r\n            return disableFeature(state, action);\r\n        case CommonActionType.FATAL_ERROR:\r\n            return fatalError(state, action);\r\n        case CommonActionType.CLEAR_FATAL_ERROR:\r\n            return clearFatalError(state, action);\r\n        case CommonActionType.CLEAR_USER_SESSION:\r\n        case CommonActionType.SELECT_TENANT:\r\n            return clearUserSession(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { List, Map, Record } from 'immutable';\r\nimport _ from 'lodash';\r\nimport ErrorCode from '../../common/error-codes';\r\nimport { LabUpdateOperation } from '../../data/models/lab';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { LabActionType, } from '../actions/lab/lab-actions';\r\nimport { ProvisioningState } from '../../utils/provisioning-state';\r\nimport { Context } from '../action-context';\r\nfunction addOrUpdateLab(lab, labs) {\r\n    const index = labs.findIndex((o) => o.id === lab.id);\r\n    if (index > -1) {\r\n        // preserve original role info if not returned in the get\r\n        // such as when we are polling on a lab\r\n        if (lab.roles.length < 1) {\r\n            const oldLab = labs.get(index);\r\n            lab.roles = [...oldLab.roles];\r\n        }\r\n        return labs.set(index, lab);\r\n    }\r\n    else {\r\n        return labs.push(lab);\r\n    }\r\n}\r\nfunction selectLab(state, action) {\r\n    const { labId: currentLabId } = action;\r\n    return state.merge({\r\n        currentLabId: currentLabId ? currentLabId.toLowerCase() : undefined,\r\n    });\r\n}\r\nfunction listLabs(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: state.loadState === LoadingStoreState.Loaded || state.loadState === LoadingStoreState.Updated\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listLabsSuccess(state, action) {\r\n    const { labs } = action;\r\n    return state.merge({\r\n        labs: List(labs),\r\n        loadState: state.loadState === LoadingStoreState.Updating ? LoadingStoreState.Updated : LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listLabsError(state, action) {\r\n    return state.merge({\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n        loadState: state.loadState === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n        labs: List([]),\r\n    });\r\n}\r\nfunction getLab(state, action) {\r\n    return state.merge({\r\n        errors: state.errors.clear(),\r\n    });\r\n}\r\nfunction getLabSuccess(state, action) {\r\n    const { lab } = action;\r\n    let labs = state.get('labs');\r\n    labs = addOrUpdateLab(lab, labs);\r\n    return state.merge({\r\n        labs,\r\n    });\r\n}\r\nfunction getLabError(state, action) {\r\n    return state.merge({\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction deleteLab(state, action) {\r\n    return state.merge({\r\n        isDeleting: true,\r\n    });\r\n}\r\nfunction deleteLabSuccess(state, action) {\r\n    let labs = state.get('labs');\r\n    const labsIndex = labs.findIndex((o) => o.id.toLowerCase() === action.labId.toLowerCase());\r\n    if (labsIndex > -1) {\r\n        const oldLab = labs.get(labsIndex);\r\n        const newLab = { ...oldLab, provisioningState: ProvisioningState.Deleting };\r\n        labs = labs.set(labsIndex, newLab);\r\n    }\r\n    return state.merge({\r\n        labs,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction deleteLabError(state, action) {\r\n    return state.merge({\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction createLab(state, action) {\r\n    return state.merge({\r\n        errors: state.errors.clear(),\r\n        isCreating: true,\r\n    });\r\n}\r\nfunction createLabSuccess(state, action) {\r\n    const { lab } = action;\r\n    let labs = state.get('labs');\r\n    labs = labs.push(lab);\r\n    return state.merge({\r\n        labs,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction createLabError(state, action) {\r\n    return state.merge({\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction updateLab(state, action) {\r\n    const { lab, updateOperation } = action;\r\n    let labs = state.get('labs');\r\n    if (updateOperation === LabUpdateOperation.Settings) {\r\n        const index = labs.findIndex((o) => o.id === lab.id);\r\n        if (index > -1) {\r\n            // Preserve settings while calling update operation on the lab.\r\n            const oldLab = labs.get(index);\r\n            const newLab = {\r\n                ...oldLab,\r\n                connectivityPolicy: lab.connectivityPolicy,\r\n                enableDisconnectOnIdle: lab.enableDisconnectOnIdle,\r\n                enableNoConnectShutdown: lab.enableNoConnectShutdown,\r\n                idleGracePeriod: lab.idleGracePeriod,\r\n                idleNoConnectGracePeriod: lab.idleNoConnectGracePeriod,\r\n                idleOsGracePeriod: lab.idleOsGracePeriod,\r\n                idleShutdownMode: lab.idleShutdownMode,\r\n            };\r\n            labs = labs.set(index, newLab);\r\n        }\r\n    }\r\n    return state.merge({\r\n        updateError: undefined,\r\n        isUpdating: true,\r\n        labs,\r\n    });\r\n}\r\nfunction updateLabSuccess(state, action) {\r\n    const { lab } = action;\r\n    let labs = state.get('labs');\r\n    labs = addOrUpdateLab(lab, labs);\r\n    return state.merge({\r\n        labs,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateLabError(state, action) {\r\n    const { error: updateError } = action;\r\n    if (updateError.code === ErrorCode.LabCapacityUpdateExceedsGpuCoresLimit ||\r\n        updateError.code === ErrorCode.LabCapacityUpdateExceedsStandardCoresLimit) {\r\n        return state.merge({\r\n            labCapacityExceedsCoresError: updateError,\r\n            isUpdating: false,\r\n        });\r\n    }\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, updateError, updateError.id);\r\n    return state.merge({\r\n        errors,\r\n        updateError,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateLabAccessMode(state, action) {\r\n    const { labId, userAccessMode } = action;\r\n    let labs = state.get('labs');\r\n    const index = labs.findIndex((lab) => lab.id === labId);\r\n    if (index > -1) {\r\n        const oldLab = labs.get(index);\r\n        const newLab = { ...oldLab, userAccessMode };\r\n        labs = labs.set(index, newLab);\r\n    }\r\n    return state.merge({\r\n        isUpdating: true,\r\n        labs,\r\n    });\r\n}\r\nfunction updateLabAccessModeError(state, action) {\r\n    const { labId } = action;\r\n    let labs = state.get('labs');\r\n    const index = labs.findIndex((lab) => lab.id === labId);\r\n    if (index > -1) {\r\n        const oldLab = labs.get(index);\r\n        const userAccessMode = oldLab.userAccessMode === Ml.LabUserAccessMode.Open\r\n            ? Ml.LabUserAccessMode.Restricted\r\n            : Ml.LabUserAccessMode.Open;\r\n        const newLab = { ...oldLab, userAccessMode };\r\n        labs = labs.set(index, newLab);\r\n    }\r\n    return state.merge({\r\n        isUpdating: false,\r\n        labs,\r\n    });\r\n}\r\nfunction clearError(state, action) {\r\n    let errors = state.errors.get(action.id);\r\n    if (!errors || action.errorIndex >= errors.count()) {\r\n        return state;\r\n    }\r\n    errors = errors.remove(action.errorIndex);\r\n    const errorMap = errors.count() > 0 ? state.errors.set(action.id, errors) : state.errors.remove(action.id);\r\n    return state.merge({\r\n        errors: errorMap,\r\n    });\r\n}\r\nfunction clearUpdateError(state, action) {\r\n    return state.merge({\r\n        updateError: undefined,\r\n    });\r\n}\r\nfunction clearLabCapacityExceedsCoresError(state, action) {\r\n    return state.merge({\r\n        labCapacityExceedsCoresError: undefined,\r\n    });\r\n}\r\nfunction addError(errorMap, error, id) {\r\n    const errors = errorMap.get(id);\r\n    if (errors) {\r\n        const existingError = errors.some((_error) => _.isEqual(_error, error));\r\n        if (!existingError) {\r\n            return errorMap.set(id, errors.concat(error));\r\n        }\r\n    }\r\n    else {\r\n        return errorMap.set(id, List([error]));\r\n    }\r\n    return errorMap;\r\n}\r\nfunction syncLabUsers(state, action) {\r\n    const { labId } = action;\r\n    let labs = state.get('labs');\r\n    const index = labs.findIndex((lab) => lab.id === labId);\r\n    if (index > -1) {\r\n        const oldLab = labs.get(index);\r\n        const newLab = { ...oldLab, isSyncPending: true };\r\n        labs = labs.set(index, newLab);\r\n    }\r\n    return state.merge({\r\n        labs,\r\n        syncUsersError: undefined,\r\n    });\r\n}\r\nfunction syncLabUsersError(state, action) {\r\n    const { syncUsersError, labId } = action;\r\n    let labs = state.get('labs');\r\n    const index = labs.findIndex((lab) => lab.id === labId);\r\n    if (index > -1) {\r\n        const oldLab = labs.get(index);\r\n        const newLab = { ...oldLab, isSyncPending: false };\r\n        labs = labs.set(index, newLab);\r\n    }\r\n    return state.merge({\r\n        labs,\r\n        syncUsersError,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    labs: List(),\r\n    currentLabId: '',\r\n    errors: Map(),\r\n    isDeleting: false,\r\n    isCreating: false,\r\n    isUpdating: false,\r\n    updateError: undefined,\r\n    labCapacityExceedsCoresError: undefined,\r\n    syncUsersError: undefined,\r\n})();\r\nexport const labReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case LabActionType.CLEAR_USER_SESSION:\r\n        case LabActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case LabActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case LabActionType.SELECT_LAB:\r\n                            return selectLab(state, action);\r\n                        case LabActionType.LIST_LABS:\r\n                            return listLabs(state, action);\r\n                        case LabActionType.LIST_LABS_SUCCESS:\r\n                            return listLabsSuccess(state, action);\r\n                        case LabActionType.LIST_LABS_ERROR:\r\n                            return listLabsError(state, action);\r\n                        case LabActionType.GET_LAB:\r\n                            return getLab(state, action);\r\n                        case LabActionType.GET_LAB_SUCCESS:\r\n                            return getLabSuccess(state, action);\r\n                        case LabActionType.GET_LAB_ERROR:\r\n                            return getLabError(state, action);\r\n                        case LabActionType.DELETE_LAB:\r\n                            return deleteLab(state, action);\r\n                        case LabActionType.DELETE_LAB_SUCCESS:\r\n                            return deleteLabSuccess(state, action);\r\n                        case LabActionType.DELETE_LAB_ERROR:\r\n                            return deleteLabError(state, action);\r\n                        case LabActionType.CREATE_LAB:\r\n                            return createLab(state, action);\r\n                        case LabActionType.CREATE_LAB_SUCCESS:\r\n                            return createLabSuccess(state, action);\r\n                        case LabActionType.CREATE_LAB_ERROR:\r\n                            return createLabError(state, action);\r\n                        case LabActionType.UPDATE_LAB:\r\n                            return updateLab(state, action);\r\n                        case LabActionType.UPDATE_LAB_SUCCESS:\r\n                            return updateLabSuccess(state, action);\r\n                        case LabActionType.UPDATE_LAB_ERROR:\r\n                            return updateLabError(state, action);\r\n                        case LabActionType.UPDATE_LAB_ACCESS_MODE:\r\n                            return updateLabAccessMode(state, action);\r\n                        case LabActionType.UPDATE_LAB_ACCESS_MODE_ERROR:\r\n                            return updateLabAccessModeError(state, action);\r\n                        case LabActionType.CLEAR_LAB_ERROR:\r\n                            return clearError(state, action);\r\n                        case LabActionType.CLEAR_LAB_UPDATE_ERROR:\r\n                            return clearUpdateError(state, action);\r\n                        case LabActionType.CLEAR_LAB_CAPACITY_EXCEEDS_CORES_ERROR:\r\n                            return clearLabCapacityExceedsCoresError(state, action);\r\n                        case LabActionType.SYNC_LAB_USERS:\r\n                            return syncLabUsers(state, action);\r\n                        case LabActionType.SYNC_LAB_USERS_ERROR:\r\n                            return syncLabUsersError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default labReducer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const LabAccountActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_LAB_ACCOUNTS: 'LIST_LAB_ACCOUNTS',\r\n    LIST_LAB_ACCOUNTS_SUCCESS: 'LIST_LAB_ACCOUNTS_SUCCESS',\r\n    LIST_LAB_ACCOUNTS_ERROR: 'LIST_LAB_ACCOUNTS_ERROR',\r\n    REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS: 'REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS',\r\n    REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_SUCCESS: 'REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_SUCCESS',\r\n    REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_ERROR: 'REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_ERROR',\r\n    GET_LAB_ACCOUNT: 'GET_LAB_ACCOUNT',\r\n    GET_LAB_ACCOUNT_SUCCESS: 'GET_LAB_ACCOUNT_SUCCESS',\r\n    GET_LAB_ACCOUNT_ERROR: 'GET_LAB_ACCOUNT_ERROR',\r\n    LOAD_SUBSCRIPTION_LAB_ACCOUNTS_ERROR: 'LOAD_SUBSCRIPTION_LAB_ACCOUNTS_ERROR',\r\n};\r\n","import { Record } from 'immutable';\r\nimport { List, Map } from 'immutable';\r\nimport { LabAccountActionType, } from '../actions/lab-account/lab-account-actions';\r\nimport { addToListMap } from '../../utils/common';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { InitializationState } from '../state/common-store';\r\nfunction listLabAccounts(state, action) {\r\n    return state.merge({\r\n        refreshError: undefined,\r\n        errors: Map(),\r\n        loadState: state.loadState === LoadingStoreState.Loaded || state.loadState === LoadingStoreState.Updated\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listLabAccountsSuccess(state, action) {\r\n    const { labAccounts } = action;\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.Updating ? LoadingStoreState.Updated : LoadingStoreState.Loaded,\r\n        labAccounts: List(labAccounts),\r\n    });\r\n}\r\nfunction listLabAccountsError(state, action) {\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n    });\r\n}\r\nfunction refreshSubscriptionsAndLabAccounts(state, action) {\r\n    return state.merge({\r\n        refreshInitializationState: InitializationState.Initializing,\r\n    });\r\n}\r\nfunction refreshSubscriptionsAndLabAccountsSuccess(state, action) {\r\n    return state.merge({\r\n        refreshInitializationState: InitializationState.Success,\r\n    });\r\n}\r\nfunction refreshSubscriptionsAndLabAccountsError(state, action) {\r\n    const { refreshError } = action;\r\n    return state.merge({\r\n        refreshInitializationState: InitializationState.Failed,\r\n        refreshError,\r\n    });\r\n}\r\nfunction loadSubscriptionLabAccountsError(state, action) {\r\n    const { subscription, error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, subscription.id);\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction getLabAccount(state, action) {\r\n    return state.merge({\r\n        isGettingLabAccount: true,\r\n    });\r\n}\r\nfunction getLabAccountSuccess(state, action) {\r\n    const { labAccount } = action;\r\n    let labAccounts = state.get('labAccounts');\r\n    const index = labAccounts.findIndex((l) => l.id === labAccount.id);\r\n    if (index > -1) {\r\n        labAccounts = labAccounts.set(index, labAccount);\r\n    }\r\n    else {\r\n        labAccounts = labAccounts.push(labAccount);\r\n    }\r\n    return state.merge({\r\n        isGettingLabAccount: false,\r\n        labAccounts,\r\n    });\r\n}\r\nfunction getLabAccountError(state, action) {\r\n    const { id, error: getLabAccountError } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, getLabAccountError, id);\r\n    return state.merge({\r\n        isGettingLabAccount: false,\r\n        errors,\r\n        getLabAccountError,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    isGettingLabAccount: false,\r\n    labAccounts: List(),\r\n    errors: Map(),\r\n    getLabAccountError: undefined,\r\n    refreshInitializationState: InitializationState.NotStarted,\r\n    refreshError: undefined,\r\n})();\r\nexport const labAccountReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case LabAccountActionType.LIST_LAB_ACCOUNTS:\r\n            return listLabAccounts(state, action);\r\n        case LabAccountActionType.LIST_LAB_ACCOUNTS_SUCCESS:\r\n            return listLabAccountsSuccess(state, action);\r\n        case LabAccountActionType.LIST_LAB_ACCOUNTS_ERROR:\r\n            return listLabAccountsError(state, action);\r\n        case LabAccountActionType.LOAD_SUBSCRIPTION_LAB_ACCOUNTS_ERROR:\r\n            return loadSubscriptionLabAccountsError(state, action);\r\n        case LabAccountActionType.GET_LAB_ACCOUNT:\r\n            return getLabAccount(state, action);\r\n        case LabAccountActionType.GET_LAB_ACCOUNT_SUCCESS:\r\n            return getLabAccountSuccess(state, action);\r\n        case LabAccountActionType.GET_LAB_ACCOUNT_ERROR:\r\n            return getLabAccountError(state, action);\r\n        case LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS:\r\n            return refreshSubscriptionsAndLabAccounts(state, action);\r\n        case LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_SUCCESS:\r\n            return refreshSubscriptionsAndLabAccountsSuccess(state, action);\r\n        case LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_ERROR:\r\n            return refreshSubscriptionsAndLabAccountsError(state, action);\r\n        case LabAccountActionType.CLEAR_USER_SESSION:\r\n        case LabAccountActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default labAccountReducer;\r\n","import { Record } from 'immutable';\r\nimport { AuthenticationState, UserType } from '../../data/models/identity';\r\nimport { defaultSettings } from '../../data/models/user-settings';\r\nimport { IdentityActionType, } from '../actions/identity/identity-actions';\r\nfunction signIn(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.Authenticating,\r\n    });\r\n}\r\nfunction signInSuccess(state, action) {\r\n    const { account } = action;\r\n    const { userName: displayId, name, idTokenClaims } = account;\r\n    const tenantId = idTokenClaims['tid'];\r\n    return state.merge({\r\n        state: AuthenticationState.Authenticated,\r\n        displayId,\r\n        name,\r\n        tenantId,\r\n    });\r\n}\r\nfunction signInRedirecting(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.Redirecting,\r\n    });\r\n}\r\nfunction signInPoppingUp(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.PoppingUp,\r\n    });\r\n}\r\nfunction signInFailed(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.AuthenticationFailed,\r\n    });\r\n}\r\nfunction signInError(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.AuthenticationError,\r\n    });\r\n}\r\nfunction signOut(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.SigningOut,\r\n    });\r\n}\r\nfunction resolveSignInReturnUrl(state, action) {\r\n    const { returnUrl } = action;\r\n    if (returnUrl) {\r\n        return state.merge({\r\n            returnUrl,\r\n        });\r\n    }\r\n    return state;\r\n}\r\nfunction loadUserPhotoSuccess(state, action) {\r\n    const { imageUrl } = action;\r\n    return state.merge({\r\n        imageUrl,\r\n    });\r\n}\r\nfunction updateUserSettings(state, action) {\r\n    const { settings: settingsUpdate } = action;\r\n    let settings = state.get('settings');\r\n    settings = settings.merge(settingsUpdate);\r\n    const settingsExist = state.get('settingsExist');\r\n    if (settingsExist) {\r\n        return state.merge({\r\n            settings,\r\n            settingsExist,\r\n        });\r\n    }\r\n    else {\r\n        return state.merge({\r\n            settings,\r\n        });\r\n    }\r\n}\r\nfunction loadUserSettingsError(state, action) {\r\n    const { cachedSettings } = action;\r\n    if (!!cachedSettings) {\r\n        let settings = state.get('settings');\r\n        settings = settings.merge(cachedSettings);\r\n        return state.merge({\r\n            settings,\r\n        });\r\n    }\r\n    return state;\r\n}\r\nfunction updateUserSettingsExists(state, action) {\r\n    return state.merge({\r\n        settingsExist: true,\r\n    });\r\n}\r\nfunction getAccessTokenRedirecting(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.Redirecting,\r\n    });\r\n}\r\nfunction setTenantId(state, action) {\r\n    const { tenantId } = action;\r\n    return state.merge({\r\n        tenantId,\r\n    });\r\n}\r\nfunction setLoginHint(state, action) {\r\n    const { loginHint } = action;\r\n    return state.merge({\r\n        loginHint,\r\n    });\r\n}\r\nfunction clearUserSession(state, action) {\r\n    const authState = state.get('state');\r\n    return initialState.merge({\r\n        state: authState === AuthenticationState.SigningOut ? authState : AuthenticationState.AuthenticationFailed,\r\n    });\r\n}\r\nfunction selectTenant(state, action) {\r\n    const { isRedirect } = action;\r\n    const loginHint = state.get('loginHint');\r\n    return initialState.merge({\r\n        state: isRedirect ? AuthenticationState.Redirecting : AuthenticationState.PoppingUp,\r\n        loginHint,\r\n    });\r\n}\r\nfunction requestUserConsent(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.Authenticating,\r\n    });\r\n}\r\nfunction requestUserConsentSuccess(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.Authenticated,\r\n    });\r\n}\r\nfunction requestUserConsentFailed(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.AuthenticationFailed,\r\n    });\r\n}\r\nfunction requestUserConsentError(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.AuthenticationError,\r\n    });\r\n}\r\nfunction lmsCompleteSignOut(state, action) {\r\n    return state.merge({\r\n        state: AuthenticationState.NotStarted,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    state: AuthenticationState.NotStarted,\r\n    returnUrl: '',\r\n    type: UserType.Unknown,\r\n    displayId: '',\r\n    name: '',\r\n    imageUrl: '',\r\n    tenantId: '',\r\n    loginHint: '',\r\n    settingsExist: false,\r\n    settings: Record(defaultSettings)(),\r\n})();\r\nexport const identityReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case IdentityActionType.SIGN_IN:\r\n            return signIn(state, action);\r\n        case IdentityActionType.SIGN_IN_SUCCESS:\r\n            return signInSuccess(state, action);\r\n        case IdentityActionType.SIGN_IN_REDIRECTING:\r\n            return signInRedirecting(state, action);\r\n        case IdentityActionType.SIGN_IN_FAILED:\r\n            return signInFailed(state, action);\r\n        case IdentityActionType.SIGN_IN_ERROR:\r\n            return signInError(state, action);\r\n        case IdentityActionType.SIGN_OUT:\r\n            return signOut(state, action);\r\n        case IdentityActionType.RESOLVE_SIGN_IN_RETURN_URL:\r\n            return resolveSignInReturnUrl(state, action);\r\n        case IdentityActionType.LOAD_USER_PHOTO_SUCCESS:\r\n            return loadUserPhotoSuccess(state, action);\r\n        case IdentityActionType.LOAD_USER_SETTINGS_SUCCESS:\r\n            return updateUserSettings(state, action);\r\n        case IdentityActionType.LOAD_USER_SETTINGS_ERROR:\r\n            return loadUserSettingsError(state, action);\r\n        case IdentityActionType.UPDATE_USER_SETTINGS:\r\n            return updateUserSettings(state, action);\r\n        case IdentityActionType.UPDATE_USER_SETTINGS_EXISTS:\r\n            return updateUserSettingsExists(state, action);\r\n        case IdentityActionType.GET_ACCESS_TOKEN_REDIRECTING:\r\n            return getAccessTokenRedirecting(state, action);\r\n        case IdentityActionType.SET_TENANT_ID:\r\n            return setTenantId(state, action);\r\n        case IdentityActionType.SET_LOGIN_HINT:\r\n            return setLoginHint(state, action);\r\n        case IdentityActionType.CLEAR_USER_SESSION:\r\n            return clearUserSession(state, action);\r\n        case IdentityActionType.SELECT_TENANT:\r\n            return selectTenant(state, action);\r\n        case IdentityActionType.REQUEST_USER_CONSENT:\r\n            return requestUserConsent(state, action);\r\n        case IdentityActionType.REQUEST_USER_CONSENT_SUCCESS:\r\n            return requestUserConsentSuccess(state, action);\r\n        case IdentityActionType.REQUEST_USER_CONSENT_FAILED:\r\n            return requestUserConsentFailed(state, action);\r\n        case IdentityActionType.REQUEST_USER_CONSENT_ERROR:\r\n            return requestUserConsentError(state, action);\r\n        case IdentityActionType.SIGN_IN_POPPING_UP:\r\n            return signInPoppingUp(state, action);\r\n        case IdentityActionType.LMS_COMPLETE_SIGN_OUT:\r\n            return lmsCompleteSignOut(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default identityReducer;\r\n","import { Record, List, Map } from 'immutable';\r\nimport _ from 'lodash';\r\nimport { ScheduleActionType, } from '../actions/schedule/schedule-actions';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { Context } from '../action-context';\r\nfunction listSchedules(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listSchedulesSuccess(state, action) {\r\n    const { schedules } = action;\r\n    return state.merge({\r\n        schedules: List(schedules),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listSchedulesError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        loadError: error,\r\n        schedules: List([]),\r\n    });\r\n}\r\nfunction deleteSchedule(state, action) {\r\n    return state.merge({\r\n        isDeleting: true,\r\n    });\r\n}\r\nfunction deleteScheduleSuccess(state, action) {\r\n    const { scheduleId } = action;\r\n    let schedules = state.get('schedules');\r\n    const removeAtIndex = schedules.findIndex((schedule) => schedule.id.toLowerCase() === scheduleId.toLowerCase());\r\n    if (removeAtIndex > -1) {\r\n        schedules = schedules.remove(removeAtIndex);\r\n    }\r\n    return state.merge({\r\n        schedules,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction deleteScheduleError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction createSchedule(state, action) {\r\n    return state.merge({\r\n        isCreating: true,\r\n    });\r\n}\r\nfunction createScheduleSuccess(state, action) {\r\n    const { schedule } = action;\r\n    let schedules = state.get('schedules');\r\n    schedules = schedules.push(schedule);\r\n    return state.merge({\r\n        schedules,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction createScheduleError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction updateSchedule(state, action) {\r\n    return state.merge({\r\n        isUpdating: true,\r\n    });\r\n}\r\nfunction updateScheduleSuccess(state, action) {\r\n    const { schedule } = action;\r\n    let schedules = state.get('schedules');\r\n    const index = schedules.findIndex((sch) => sch.id === schedule.id);\r\n    // ignoring an update if it is no longer in the store, should happen, but might happen\r\n    // with a race condition when a user navigates to another lab\r\n    if (index > -1) {\r\n        schedules = schedules.set(index, schedule);\r\n    }\r\n    return state.merge({\r\n        schedules,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateScheduleError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearError(state, action) {\r\n    const { id, errorIndex } = action;\r\n    let errors = state.get('errors');\r\n    let errorList = errors.get(id);\r\n    if (!errorList || errorIndex >= errorList.size) {\r\n        return state;\r\n    }\r\n    errorList = errorList.remove(errorIndex);\r\n    errors = errorList.size > 0 ? errors.set(id, errorList) : errors.remove(id);\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction addError(errorMap, error, id) {\r\n    const errors = errorMap.get(id);\r\n    if (errors) {\r\n        const existingError = errors.some((_error) => _.isEqual(_error, error));\r\n        if (!existingError) {\r\n            return errorMap.set(id, errors.push(error));\r\n        }\r\n    }\r\n    else {\r\n        return errorMap.set(id, List([error]));\r\n    }\r\n    return errorMap;\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    schedules: List(),\r\n    errors: Map(),\r\n    loadError: undefined,\r\n    isDeleting: false,\r\n    isCreating: false,\r\n    isUpdating: false,\r\n})();\r\nexport const scheduleReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case ScheduleActionType.CLEAR_USER_SESSION:\r\n        case ScheduleActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case ScheduleActionType.SELECT_LAB:\r\n        case ScheduleActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case ScheduleActionType.LIST_SCHEDULES:\r\n                            return listSchedules(state, action);\r\n                        case ScheduleActionType.LIST_SCHEDULES_SUCCESS:\r\n                            return listSchedulesSuccess(state, action);\r\n                        case ScheduleActionType.LIST_SCHEDULES_ERROR:\r\n                            return listSchedulesError(state, action);\r\n                        case ScheduleActionType.DELETE_SCHEDULE:\r\n                            return deleteSchedule(state, action);\r\n                        case ScheduleActionType.DELETE_SCHEDULE_SUCCESS:\r\n                            return deleteScheduleSuccess(state, action);\r\n                        case ScheduleActionType.DELETE_SCHEDULE_ERROR:\r\n                            return deleteScheduleError(state, action);\r\n                        case ScheduleActionType.CREATE_SCHEDULE:\r\n                            return createSchedule(state, action);\r\n                        case ScheduleActionType.CREATE_SCHEDULE_SUCCESS:\r\n                            return createScheduleSuccess(state, action);\r\n                        case ScheduleActionType.CREATE_SCHEDULE_ERROR:\r\n                            return createScheduleError(state, action);\r\n                        case ScheduleActionType.UPDATE_SCHEDULE:\r\n                            return updateSchedule(state, action);\r\n                        case ScheduleActionType.UPDATE_SCHEDULE_SUCCESS:\r\n                            return updateScheduleSuccess(state, action);\r\n                        case ScheduleActionType.UPDATE_SCHEDULE_ERROR:\r\n                            return updateScheduleError(state, action);\r\n                        case ScheduleActionType.CLEAR_LOAD_SCHEDULE_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case ScheduleActionType.CLEAR_SCHEDULE_ERROR:\r\n                            return clearError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default scheduleReducer;\r\n","import { Map } from 'immutable';\r\nexport const clearErrorsByOperation = (errorMap, op) => {\r\n    let newErrorMap = Map();\r\n    for (const [envId, errors] of errorMap) {\r\n        const newErrors = errors.filter((error) => {\r\n            return error.failureOperation != op;\r\n        });\r\n        if (!newErrors.isEmpty()) {\r\n            newErrorMap = newErrorMap.set(envId, newErrors);\r\n        }\r\n    }\r\n    return newErrorMap;\r\n};\r\n","import { Record, List, Map } from 'immutable';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport _ from 'lodash';\r\nimport { FailureOperation } from '../../data/ml-client-error';\r\nimport { TemplateActionType, } from '../actions/template/template-actions';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport PowerState from '../../utils/power-state';\r\nimport ErrorCode from '../../common/error-codes';\r\nimport { clearErrorsByOperation } from '../../utils/errors';\r\nimport { getRdpAuthority, getSshAuthority } from '../selectors/template-selectors';\r\nimport { Context } from '../action-context';\r\nfunction listTemplates(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listTemplatesSuccess(state, action) {\r\n    return state.merge({\r\n        templates: List(action.templates),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listTemplatesError(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        loadError: action.error,\r\n        templates: List([]),\r\n    });\r\n}\r\nfunction getTemplate(state, action) {\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.NotStarted ? LoadingStoreState.Loading : LoadingStoreState.Updating,\r\n    });\r\n}\r\nfunction ensureExpandedInfoNotLost(expandedTemplate, newTemplate) {\r\n    const rdpAuthority = getRdpAuthority(expandedTemplate);\r\n    const sshAuthority = getSshAuthority(expandedTemplate);\r\n    if (rdpAuthority && sshAuthority) {\r\n        _.merge(newTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n            rdpAuthority,\r\n            sshAuthority,\r\n        });\r\n    }\r\n    else if (rdpAuthority) {\r\n        _.merge(newTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n            rdpAuthority,\r\n        });\r\n    }\r\n    else if (sshAuthority) {\r\n        _.merge(newTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n            sshAuthority,\r\n        });\r\n    }\r\n    return newTemplate;\r\n}\r\n/**\r\n * On expands, we overwrite the entire template.  There is a certain case where we immediately set the pending state so the\r\n * UI is updated quickly, and we must call expand template immediately after.  We don't want to overwrite the pending state in that case.\r\n * Expands on template is called only once, to get network information, so this isn't a common occurrence.\r\n */\r\nfunction ensurePendingStateNotLost(oldTemplate, newTemplate) {\r\n    if (oldTemplate?.resourceSettings?.referenceVm?.vmStateDetails) {\r\n        _.merge(newTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n            lastKnownPowerState: oldTemplate.resourceSettings.referenceVm.vmStateDetails.lastKnownPowerState,\r\n        });\r\n    }\r\n    if (oldTemplate?.latestOperationResult?.status === PowerState.Running &&\r\n        oldTemplate?.latestOperationResult?.requestUri === 'resetPassword') {\r\n        _.merge(newTemplate.latestOperationResult, oldTemplate.latestOperationResult);\r\n    }\r\n    return newTemplate;\r\n}\r\nfunction getTemplateSuccess(state, action) {\r\n    const { expand } = action;\r\n    let templates = state.get('templates');\r\n    const templateIndex = templates.findIndex((t) => t.id === action.template.id);\r\n    if (templateIndex > -1) {\r\n        const template = templates.get(templateIndex);\r\n        action.template = expand\r\n            ? ensurePendingStateNotLost(template, action.template)\r\n            : ensureExpandedInfoNotLost(template, action.template);\r\n        templates = templates.set(templateIndex, action.template);\r\n    }\r\n    else {\r\n        templates = templates.push(action.template);\r\n    }\r\n    return state.merge({\r\n        templates,\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction getTemplateError(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        loadError: action.error,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateTemplate(state, action) {\r\n    return state.merge({\r\n        isUpdating: true,\r\n    });\r\n}\r\nfunction updateTemplateSuccess(state, action) {\r\n    let templates = state.get('templates');\r\n    const templateIndex = templates.findIndex((t) => t.id === action.template.id);\r\n    if (templateIndex > -1) {\r\n        const template = templates.get(templateIndex);\r\n        action.template = ensurePendingStateNotLost(template, action.template);\r\n        action.template = ensureExpandedInfoNotLost(template, action.template);\r\n        templates = templates.set(templateIndex, action.template);\r\n    }\r\n    else {\r\n        templates = templates.push(action.template);\r\n    }\r\n    return state.merge({\r\n        templates,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateTemplateError(state, action) {\r\n    return state.merge({\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction selectTemplate(state, action) {\r\n    return state.merge({\r\n        currentTemplate: action.template.id,\r\n    });\r\n}\r\nfunction startTemplate(state, action) {\r\n    const { templateId } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    const startingTemplate = { ...template };\r\n    _.merge(startingTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n        lastKnownPowerState: PowerState.Starting,\r\n    });\r\n    templates = templates.set(templateIndex, startingTemplate);\r\n    return state.merge({\r\n        templates,\r\n    });\r\n}\r\nfunction startTemplateError(state, action) {\r\n    const { error } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, error.id); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    const errorTemplate = { ...template };\r\n    _.merge(errorTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n        lastKnownPowerState: PowerState.Stopped,\r\n    });\r\n    templates = templates.set(templateIndex, errorTemplate);\r\n    return state.merge({\r\n        templates,\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction stopTemplate(state, action) {\r\n    const { templateId } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    const stoppingTemplate = { ...template };\r\n    _.merge(stoppingTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n        lastKnownPowerState: PowerState.Stopping,\r\n    });\r\n    templates = templates.set(templateIndex, stoppingTemplate);\r\n    return state.merge({\r\n        templates,\r\n    });\r\n}\r\nfunction stopTemplateError(state, action) {\r\n    const { error } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, error.id); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    const errorTemplate = { ...template };\r\n    _.merge(errorTemplate.resourceSettings.referenceVm.vmStateDetails, {\r\n        lastKnownPowerState: PowerState.Running,\r\n    });\r\n    templates = templates.set(templateIndex, errorTemplate);\r\n    return state.merge({\r\n        templates,\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction createTemplateError(state, action) {\r\n    const { error: createTemplateError } = action;\r\n    return state.merge({\r\n        createTemplateError,\r\n    });\r\n}\r\nfunction resetPassword(state, action) {\r\n    const { templateId } = action;\r\n    const errorStore = state.get('errors');\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    const resettingTemplate = { ...template };\r\n    _.merge(resettingTemplate.latestOperationResult, {\r\n        status: PowerState.Running,\r\n        requestUri: 'resetPassword',\r\n    });\r\n    templates = templates.set(templateIndex, resettingTemplate);\r\n    return state.merge({\r\n        templates,\r\n        errors: clearErrorsByOperation(errorStore, FailureOperation.ResetPassword),\r\n    });\r\n}\r\nfunction resetPasswordError(state, action) {\r\n    const { error } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, error.id); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    const errorTemplate = { ...template };\r\n    _.merge(errorTemplate.latestOperationResult, {\r\n        status: PowerState.None,\r\n        requestUri: '',\r\n    });\r\n    templates = templates.set(templateIndex, errorTemplate);\r\n    return state.merge({\r\n        templates,\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction publishTemplate(state, action) {\r\n    const { templateId } = action;\r\n    let templates = state.get('templates');\r\n    const index = templates.findIndex((t) => t.id === templateId);\r\n    if (index > -1) {\r\n        const oldTemplate = templates.get(index);\r\n        const newTemplate = { ...oldTemplate, publishingState: Ml.PublishingState.Publishing };\r\n        templates = templates.set(index, newTemplate);\r\n    }\r\n    return state.merge({\r\n        templates,\r\n    });\r\n}\r\nfunction publishTemplateCancelled(state, action) {\r\n    const { templateId } = action;\r\n    let templates = state.get('templates');\r\n    const index = templates.findIndex((t) => t.id === templateId);\r\n    if (index > -1) {\r\n        const oldTemplate = templates.get(index);\r\n        const newTemplate = { ...oldTemplate, publishingState: Ml.PublishingState.PublishFailed };\r\n        templates = templates.set(index, newTemplate);\r\n    }\r\n    return state.merge({\r\n        templates,\r\n    });\r\n}\r\nfunction publishTemplateError(state, action) {\r\n    const { error, templateId } = action;\r\n    let templates = state.get('templates');\r\n    const index = templates.findIndex((t) => t.id === templateId);\r\n    if (index > -1) {\r\n        const oldTemplate = templates.get(index);\r\n        const newTemplate = { ...oldTemplate, publishingState: Ml.PublishingState.PublishFailed };\r\n        templates = templates.set(index, newTemplate);\r\n    }\r\n    if (error.code === ErrorCode.PublishExceedsGpuCoresLimit ||\r\n        error.code === ErrorCode.PublishExceedsStandardCoresLimit) {\r\n        return state.merge({\r\n            templates,\r\n            publishExceedsCoresError: error,\r\n        });\r\n    }\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        templates,\r\n        errors,\r\n    });\r\n}\r\nfunction createSharedImage(state, action) {\r\n    const { templateId } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    template = { ...template, uploadState: Ml.UploadState.InProgress };\r\n    templates = templates.set(templateIndex, template);\r\n    return state.merge({\r\n        templates,\r\n    });\r\n}\r\nfunction createSharedImageError(state, action) {\r\n    const { templateId } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    template = { ...template, uploadState: Ml.UploadState.Failed };\r\n    templates = templates.set(templateIndex, template);\r\n    return state.merge({\r\n        templates,\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction updateSharedImage(state, action) {\r\n    const { templateId } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    template = { ...template, uploadState: Ml.UploadState.InProgress };\r\n    templates = templates.set(templateIndex, template);\r\n    return state.merge({\r\n        templates,\r\n    });\r\n}\r\nfunction updateSharedImageError(state, action) {\r\n    const { templateId } = action;\r\n    let { templates, template, templateIndex } = findTemplate(state, templateId); // eslint-disable-line prefer-const\r\n    if (!template) {\r\n        return state;\r\n    }\r\n    template = { ...template, uploadState: Ml.UploadState.Failed };\r\n    templates = templates.set(templateIndex, template);\r\n    return state.merge({\r\n        templates,\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction findTemplate(state, id) {\r\n    const templates = state.get('templates');\r\n    const templateIndex = templates.findIndex((t) => t.id === id);\r\n    if (templateIndex < 0) {\r\n        return { templates, template: undefined, templateIndex };\r\n    }\r\n    const template = templates.get(templateIndex);\r\n    return { templates, template, templateIndex };\r\n}\r\nfunction clearError(state, action) {\r\n    let errors = state.errors.get(action.id);\r\n    if (!errors || action.errorIndex >= errors.count()) {\r\n        return state;\r\n    }\r\n    errors = errors.remove(action.errorIndex);\r\n    const errorMap = errors.count() > 0 ? state.errors.set(action.id, errors) : state.errors.remove(action.id);\r\n    return state.merge({\r\n        errors: errorMap,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearPublishExceedsCoresError(state, action) {\r\n    return state.merge({\r\n        publishExceedsCoresError: undefined,\r\n    });\r\n}\r\nfunction addError(errorMap, error, id) {\r\n    const errors = errorMap.get(id);\r\n    if (errors) {\r\n        const existingError = errors.some((_error) => _.isEqual(_error, error));\r\n        if (!existingError) {\r\n            return errorMap.set(id, errors.concat(error));\r\n        }\r\n    }\r\n    else {\r\n        return errorMap.set(id, List([error]));\r\n    }\r\n    return errorMap;\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    loadError: undefined,\r\n    publishExceedsCoresError: undefined,\r\n    isUpdating: false,\r\n    currentTemplate: '',\r\n    templates: List(),\r\n    errors: Map(),\r\n    createTemplateError: undefined,\r\n})();\r\nexport const templateReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case TemplateActionType.CLEAR_USER_SESSION:\r\n        case TemplateActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case TemplateActionType.SELECT_LAB:\r\n        case TemplateActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case TemplateActionType.LIST_TEMPLATES:\r\n                            return listTemplates(state, action);\r\n                        case TemplateActionType.LIST_TEMPLATES_SUCCESS:\r\n                            return listTemplatesSuccess(state, action);\r\n                        case TemplateActionType.LIST_TEMPLATES_ERROR:\r\n                            return listTemplatesError(state, action);\r\n                        case TemplateActionType.GET_TEMPLATE:\r\n                            return getTemplate(state, action);\r\n                        case TemplateActionType.GET_TEMPLATE_SUCCESS:\r\n                            return getTemplateSuccess(state, action);\r\n                        case TemplateActionType.GET_TEMPLATE_ERROR:\r\n                            return getTemplateError(state, action);\r\n                        case TemplateActionType.UPDATE_TEMPLATE:\r\n                            return updateTemplate(state, action);\r\n                        case TemplateActionType.UPDATE_TEMPLATE_SUCCESS:\r\n                            return updateTemplateSuccess(state, action);\r\n                        case TemplateActionType.UPDATE_TEMPLATE_ERROR:\r\n                            return updateTemplateError(state, action);\r\n                        case TemplateActionType.START_TEMPLATE:\r\n                            return startTemplate(state, action);\r\n                        case TemplateActionType.START_TEMPLATE_ERROR:\r\n                            return startTemplateError(state, action);\r\n                        case TemplateActionType.STOP_TEMPLATE:\r\n                            return stopTemplate(state, action);\r\n                        case TemplateActionType.STOP_TEMPLATE_ERROR:\r\n                            return stopTemplateError(state, action);\r\n                        case TemplateActionType.CREATE_TEMPLATE_ERROR:\r\n                            return createTemplateError(state, action);\r\n                        case TemplateActionType.RESET_PASSWORD:\r\n                            return resetPassword(state, action);\r\n                        case TemplateActionType.RESET_PASSWORD_ERROR:\r\n                            return resetPasswordError(state, action);\r\n                        case TemplateActionType.PUBLISH_TEMPLATE:\r\n                            return publishTemplate(state, action);\r\n                        case TemplateActionType.PUBLISH_TEMPLATE_CANCELLED:\r\n                            return publishTemplateCancelled(state, action);\r\n                        case TemplateActionType.PUBLISH_TEMPLATE_ERROR:\r\n                            return publishTemplateError(state, action);\r\n                        case TemplateActionType.SELECT_TEMPLATE:\r\n                            return selectTemplate(state, action);\r\n                        case TemplateActionType.CLEAR_TEMPLATE_ERROR:\r\n                            return clearError(state, action);\r\n                        case TemplateActionType.CLEAR_LOAD_TEMPLATE_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case TemplateActionType.CLEAR_PUBLISH_EXCEEDS_CORES_ERROR:\r\n                            return clearPublishExceedsCoresError(state, action);\r\n                        case TemplateActionType.CREATE_SHARED_IMAGE:\r\n                            return createSharedImage(state, action);\r\n                        case TemplateActionType.CREATE_SHARED_IMAGE_ERROR:\r\n                            return createSharedImageError(state, action);\r\n                        case TemplateActionType.UPDATE_SHARED_IMAGE:\r\n                            return updateSharedImage(state, action);\r\n                        case TemplateActionType.UPDATE_SHARED_IMAGE_ERROR:\r\n                            return updateSharedImageError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default templateReducer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const SubscriptionActionType = {\r\n    ...CommonActionType,\r\n    LOAD_SUBSCRIPTIONS: 'LOAD_SUBSCRIPTIONS',\r\n    LOAD_SUBSCRIPTIONS_SUCCESS: 'LOAD_SUBSCRIPTIONS_SUCCESS',\r\n    LOAD_SUBSCRIPTIONS_ERROR: 'LOAD_SUBSCRIPTIONS_ERROR',\r\n    CHECK_FEATURE_ERROR: 'CHECK_FEATURE_ERROR',\r\n};\r\n","import { Record, List } from 'immutable';\r\nimport { SubscriptionActionType, } from '../actions/subscription/subscription-actions';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nfunction loadSubscriptions(state, action) {\r\n    return state.merge({\r\n        loadingState: state.loadingState === LoadingStoreState.Loaded || state.loadingState === LoadingStoreState.Updated\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction loadSubscriptionsSuccess(state, action) {\r\n    const { subscriptions } = action;\r\n    return state.merge({\r\n        loadingState: state.loadingState === LoadingStoreState.Updating ? LoadingStoreState.Updated : LoadingStoreState.Loaded,\r\n        subscriptions: List(subscriptions),\r\n    });\r\n}\r\nfunction loadSubscriptionsError(state, action) {\r\n    return state.merge({\r\n        loadingState: LoadingStoreState.LoadingFailed,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadingState: LoadingStoreState.NotStarted,\r\n    subscriptions: List(),\r\n    error: undefined,\r\n})();\r\nexport const subscriptionReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case SubscriptionActionType.LOAD_SUBSCRIPTIONS:\r\n            return loadSubscriptions(state, action);\r\n        case SubscriptionActionType.LOAD_SUBSCRIPTIONS_SUCCESS:\r\n            return loadSubscriptionsSuccess(state, action);\r\n        case SubscriptionActionType.LOAD_SUBSCRIPTIONS_ERROR:\r\n            return loadSubscriptionsError(state, action);\r\n        case SubscriptionActionType.CLEAR_USER_SESSION:\r\n        case SubscriptionActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import { Record, List, Map } from 'immutable';\r\nimport _ from 'lodash';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { GalleryImageActionType, } from '../actions/gallery-image/gallery-image-actions';\r\nimport { Context } from '../action-context';\r\nfunction listGalleryImages(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listGalleryImagesSuccess(state, action) {\r\n    return state.merge({\r\n        images: List(action.images),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listGalleryImagesError(state, action) {\r\n    return state.merge({\r\n        errors: addError(state.errors, action.error, action.error.id),\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        images: List([]),\r\n    });\r\n}\r\nfunction addError(errorMap, error, id) {\r\n    const errors = errorMap.get(id);\r\n    if (errors) {\r\n        const existingError = errors.some((_error) => _.isEqual(_error, error));\r\n        if (!existingError) {\r\n            return errorMap.set(id, errors.concat(error));\r\n        }\r\n    }\r\n    else {\r\n        return errorMap.set(id, List([error]));\r\n    }\r\n    return errorMap;\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    images: List(),\r\n    errors: Map(),\r\n})();\r\nexport const galleryImageReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case GalleryImageActionType.CLEAR_USER_SESSION:\r\n        case GalleryImageActionType.SELECT_LAB_PARENT_RESOURCE:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case GalleryImageActionType.LIST_GALLERY_IMAGES:\r\n                            return listGalleryImages(state, action);\r\n                        case GalleryImageActionType.LIST_GALLERY_IMAGES_SUCCESS:\r\n                            return listGalleryImagesSuccess(state, action);\r\n                        case GalleryImageActionType.LIST_GALLERY_IMAGES_ERROR:\r\n                            return listGalleryImagesError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default galleryImageReducer;\r\n","import { Record, List, Map } from 'immutable';\r\nimport _ from 'lodash';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { SharedImageActionType, } from '../actions/shared-image/shared-image-actions';\r\nimport { Context } from '../action-context';\r\nfunction listSharedImages(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listSharedImagesSuccess(state, action) {\r\n    return state.merge({\r\n        images: List(action.images),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listSharedImagesError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        images: List([]),\r\n    });\r\n}\r\nfunction getSharedGallerySuccess(state, action) {\r\n    return state.merge({\r\n        sharedGalleries: List(action.sharedGalleries),\r\n    });\r\n}\r\nfunction createSharedImageError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction addError(errorMap, error, id) {\r\n    const errors = errorMap.get(id);\r\n    if (errors) {\r\n        const existingError = errors.some((_error) => _.isEqual(_error, error));\r\n        if (!existingError) {\r\n            return errorMap.set(id, errors.concat(error));\r\n        }\r\n    }\r\n    else {\r\n        return errorMap.set(id, List([error]));\r\n    }\r\n    return errorMap;\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    sharedGalleries: List(),\r\n    images: List(),\r\n    errors: Map(),\r\n})();\r\nexport const sharedImageReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case SharedImageActionType.CLEAR_USER_SESSION:\r\n        case SharedImageActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case SharedImageActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case SharedImageActionType.LIST_SHARED_IMAGES:\r\n                            return listSharedImages(state, action);\r\n                        case SharedImageActionType.LIST_SHARED_IMAGES_SUCCESS:\r\n                            return listSharedImagesSuccess(state, action);\r\n                        case SharedImageActionType.LIST_SHARED_IMAGES_ERROR:\r\n                            return listSharedImagesError(state, action);\r\n                        case SharedImageActionType.GET_SHARED_GALLERY_SUCCESS:\r\n                            return getSharedGallerySuccess(state, action);\r\n                        case SharedImageActionType.CREATE_SHARED_IMAGE_ERROR:\r\n                            return createSharedImageError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default sharedImageReducer;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { List, Map, Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { UserActionType, } from '../actions/user/user-actions';\r\nimport { ProvisioningState } from '../../utils/provisioning-state';\r\nimport { Context } from '../action-context';\r\nfunction listUsers(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n        loadState: state.loadState === LoadingStoreState.Loaded ? LoadingStoreState.Updating : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listUsersCancelled(state, action) {\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.Updating ? LoadingStoreState.Loaded : LoadingStoreState.NotStarted,\r\n    });\r\n}\r\nfunction listUsersSuccess(state, action) {\r\n    return state.merge({\r\n        users: List(action.users),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listUsersError(state, action) {\r\n    const { error: loadError } = action;\r\n    return state.merge({\r\n        loadError,\r\n        loadState: state.loadState === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n    });\r\n}\r\nfunction deleteUsers(state, action) {\r\n    return state.merge({\r\n        isDeleting: true,\r\n        deleteErrors: Map(),\r\n    });\r\n}\r\nfunction deleteUsersSuccess(state, action) {\r\n    const { userIds } = action;\r\n    let users = state.get('users');\r\n    userIds.map((id) => {\r\n        users = updateUser(id, users, { provisioningState: ProvisioningState.Deleting });\r\n    });\r\n    return state.merge({\r\n        isDeleting: false,\r\n        users,\r\n    });\r\n}\r\nfunction deleteUsersError(state, action) {\r\n    const { errors } = action;\r\n    const userIds = Object.keys(errors);\r\n    let deleteErrors = state.get('deleteErrors');\r\n    userIds.map((id) => {\r\n        deleteErrors = deleteErrors.set(id, errors[id]);\r\n    });\r\n    return state.merge({\r\n        deleteErrors,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction addUsers(state, action) {\r\n    return state.merge({\r\n        isAdding: true,\r\n        addError: undefined,\r\n    });\r\n}\r\nfunction addUsersSuccess(state, action) {\r\n    const { users: newUsers } = action;\r\n    let users = state.get('users');\r\n    if (newUsers && newUsers.length > 0) {\r\n        // typescript nonsense because we can't import\r\n        // enums for the ml-ts package unless we import\r\n        // the entire models object and TS doesn't understand\r\n        // that Ml.User is the same as User imported directly\r\n        users = users.push(newUsers);\r\n    }\r\n    return state.merge({\r\n        isAdding: false,\r\n        users,\r\n    });\r\n}\r\nfunction addUsersError(state, action) {\r\n    const { error: addError } = action;\r\n    return state.merge({\r\n        addError,\r\n        isAdding: false,\r\n    });\r\n}\r\nfunction inviteUsers(state, action) {\r\n    return state.merge({\r\n        isInviting: true,\r\n        inviteError: undefined,\r\n    });\r\n}\r\nfunction inviteUsersSuccess(state, action) {\r\n    const { userIds } = action;\r\n    let users = state.get('users');\r\n    userIds.map((id) => {\r\n        users = updateUser(id, users, { registrationLinkEmailState: Ml.RegistrationLinkEmailState.Sending });\r\n    });\r\n    return state.merge({\r\n        isInviting: false,\r\n        users,\r\n    });\r\n}\r\nfunction inviteUsersError(state, action) {\r\n    const { error: inviteError } = action;\r\n    return state.merge({\r\n        inviteError,\r\n        isInviting: false,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearAddUsersError(state, action) {\r\n    return state.merge({\r\n        addError: undefined,\r\n    });\r\n}\r\nfunction clearDeleteUsersError(state, action) {\r\n    const { id } = action;\r\n    let deleteErrors = state.get('deleteErrors');\r\n    if (id) {\r\n        deleteErrors = deleteErrors.remove(id);\r\n    }\r\n    else {\r\n        deleteErrors = Map();\r\n    }\r\n    return state.merge({\r\n        deleteErrors,\r\n    });\r\n}\r\nfunction clearInviteUsersError(state, action) {\r\n    return state.merge({\r\n        inviteError: undefined,\r\n    });\r\n}\r\nfunction updateAdditionalQuota(state, action) {\r\n    return state.merge({\r\n        isUpdating: true,\r\n        updateErrors: Map(),\r\n    });\r\n}\r\nfunction updateAdditionalQuotaSuccess(state, action) {\r\n    return state.merge({\r\n        isUpdating: false,\r\n        users: updateUsers(state, action.users),\r\n    });\r\n}\r\nfunction updateAdditionalQuotaError(state, action) {\r\n    const { errors } = action;\r\n    let updateErrors = state.get('updateErrors');\r\n    for (const [userId, error] of Object.entries(errors)) {\r\n        updateErrors = updateErrors.set(userId, error);\r\n    }\r\n    return state.merge({\r\n        updateErrors,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction clearUpdateAdditionalQuotaError(state, action) {\r\n    const { id } = action;\r\n    let updateErrors = state.get('updateErrors');\r\n    if (id) {\r\n        updateErrors = updateErrors.remove(id);\r\n    }\r\n    else {\r\n        updateErrors = Map();\r\n    }\r\n    return state.merge({\r\n        updateErrors,\r\n    });\r\n}\r\n/**\r\n * Merges the update values into an existing user with the given ID.\r\n * @param id The resource ID of the user to update.\r\n * @param users The users in the current state.\r\n * @param update The updated values for the user.\r\n */\r\nfunction updateUser(id, users, update) {\r\n    const index = users.findIndex((user) => user.id === id);\r\n    if (index < 0) {\r\n        return users;\r\n    }\r\n    let user = users.get(index);\r\n    user = { ...user, ...update };\r\n    users = users.set(index, user);\r\n    return users;\r\n}\r\n/**\r\n * Adds or replaces the passed in users in the stores current list of users. Does not remove other users. Does not merge.\r\n * @param state The current store state.\r\n * @param updatedUsers The updated state of the users.\r\n */\r\nfunction updateUsers(state, updatedUsers) {\r\n    let currentUsers = state.get('users');\r\n    updatedUsers.map((user) => {\r\n        const currentUserIndex = currentUsers.findIndex((current) => current.id === user.id);\r\n        if (currentUserIndex === -1) {\r\n            currentUsers = currentUsers.push(user);\r\n        }\r\n        else {\r\n            currentUsers = currentUsers.set(currentUserIndex, user);\r\n        }\r\n    });\r\n    return currentUsers;\r\n}\r\nconst initialState = Record({\r\n    users: List(),\r\n    loadState: LoadingStoreState.NotStarted,\r\n    loadError: undefined,\r\n    isAdding: false,\r\n    isDeleting: false,\r\n    isInviting: false,\r\n    isUpdating: false,\r\n    addError: undefined,\r\n    deleteErrors: Map(),\r\n    inviteError: undefined,\r\n    updateErrors: Map(),\r\n})();\r\nexport const userReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case UserActionType.CLEAR_USER_SESSION:\r\n        case UserActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case UserActionType.SELECT_LAB:\r\n        case UserActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case UserActionType.LIST_USERS:\r\n                            return listUsers(state, action);\r\n                        case UserActionType.LIST_USERS_CANCELLED:\r\n                            return listUsersCancelled(state, action);\r\n                        case UserActionType.LIST_USERS_SUCCESS:\r\n                            return listUsersSuccess(state, action);\r\n                        case UserActionType.LIST_USERS_ERROR:\r\n                            return listUsersError(state, action);\r\n                        case UserActionType.DELETE_USERS:\r\n                            return deleteUsers(state, action);\r\n                        case UserActionType.DELETE_USERS_SUCCESS:\r\n                            return deleteUsersSuccess(state, action);\r\n                        case UserActionType.DELETE_USERS_ERROR:\r\n                            return deleteUsersError(state, action);\r\n                        case UserActionType.ADD_USERS:\r\n                            return addUsers(state, action);\r\n                        case UserActionType.ADD_USERS_SUCCESS:\r\n                            return addUsersSuccess(state, action);\r\n                        case UserActionType.ADD_USERS_ERROR:\r\n                            return addUsersError(state, action);\r\n                        case UserActionType.INVITE_USERS:\r\n                            return inviteUsers(state, action);\r\n                        case UserActionType.INVITE_USERS_SUCCESS:\r\n                            return inviteUsersSuccess(state, action);\r\n                        case UserActionType.INVITE_USERS_ERROR:\r\n                            return inviteUsersError(state, action);\r\n                        case UserActionType.CLEAR_LOAD_USERS_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case UserActionType.CLEAR_ADD_USERS_ERROR:\r\n                            return clearAddUsersError(state, action);\r\n                        case UserActionType.CLEAR_DELETE_USERS_ERROR:\r\n                            return clearDeleteUsersError(state, action);\r\n                        case UserActionType.CLEAR_INVITE_USERS_ERROR:\r\n                            return clearInviteUsersError(state, action);\r\n                        case UserActionType.UPDATE_ADDITIONAL_QUOTA:\r\n                            return updateAdditionalQuota(state, action);\r\n                        case UserActionType.UPDATE_ADDITIONAL_QUOTA_SUCCESS:\r\n                            return updateAdditionalQuotaSuccess(state, action);\r\n                        case UserActionType.UPDATE_ADDITIONAL_QUOTA_ERROR:\r\n                            return updateAdditionalQuotaError(state, action);\r\n                        case UserActionType.CLEAR_UPDATE_ADDITIONAL_QUOTA_ERROR:\r\n                            return clearUpdateAdditionalQuotaError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default userReducer;\r\n","import { List, Map, Record, Set } from 'immutable';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { EnvironmentActionType, } from '../actions/environment/environment-actions';\r\nimport { VmState } from '../../data/models/environment-common';\r\nimport { Context } from '../action-context';\r\nfunction listEnvironments(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n        loadState: state.loadState === LoadingStoreState.Loaded ? LoadingStoreState.Updating : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listEnvironmentsCancelled(state, action) {\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.Updating ? LoadingStoreState.Loaded : LoadingStoreState.NotStarted,\r\n    });\r\n}\r\nexport function listEnvironmentsSuccess(state, action) {\r\n    const { environments: newEnvironments } = action;\r\n    let environments = state.get('environments');\r\n    environments = mergeEnvironments(newEnvironments, environments);\r\n    return state.merge({\r\n        environments,\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listEnvironmentsError(state, action) {\r\n    const { error: loadError } = action;\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n        loadError,\r\n    });\r\n}\r\nfunction startEnvironments(state, action) {\r\n    const { environmentIds } = action;\r\n    let environments = state.get('environments');\r\n    environments = setPendingState(environmentIds, environments, VmState.Starting);\r\n    return state.merge({\r\n        environments,\r\n        startErrors: Map(),\r\n    });\r\n}\r\nfunction startEnvironmentsError(state, action) {\r\n    const { errors } = action;\r\n    const environmentIds = Object.keys(errors);\r\n    let environments = state.get('environments');\r\n    environments = setPendingState(environmentIds, environments, VmState.None);\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = addErrors(environmentIds, startErrors, errors);\r\n    return state.merge({\r\n        environments,\r\n        startErrors,\r\n    });\r\n}\r\nfunction stopEnvironments(state, action) {\r\n    const { environmentIds } = action;\r\n    let environments = state.get('environments');\r\n    environments = setPendingState(environmentIds, environments, VmState.Stopping);\r\n    return state.merge({\r\n        environments,\r\n        stopErrors: Map(),\r\n    });\r\n}\r\nfunction stopEnvironmentsError(state, action) {\r\n    const { errors } = action;\r\n    const environmentIds = Object.keys(errors);\r\n    let environments = state.get('environments');\r\n    environments = setPendingState(environmentIds, environments, VmState.None);\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = addErrors(environmentIds, stopErrors, errors);\r\n    return state.merge({\r\n        environments,\r\n        stopErrors,\r\n    });\r\n}\r\nfunction resetEnvironments(state, action) {\r\n    const { environmentIds } = action;\r\n    let environments = state.get('environments');\r\n    environments = setPendingState(environmentIds, environments, VmState.Deleting);\r\n    return state.merge({\r\n        environments,\r\n        resetErrors: Map(),\r\n    });\r\n}\r\nfunction resetEnvironmentsError(state, action) {\r\n    const { errors } = action;\r\n    const environmentIds = Object.keys(errors);\r\n    let environments = state.get('environments');\r\n    environments = setPendingState(environmentIds, environments, VmState.None);\r\n    let resetErrors = state.get('resetErrors');\r\n    resetErrors = addErrors(environmentIds, resetErrors, errors);\r\n    return state.merge({\r\n        environments,\r\n        resetErrors,\r\n    });\r\n}\r\nfunction getEnvironment(state, action) {\r\n    const { id } = action;\r\n    let gettingEnvironments = state.get('gettingEnvironments');\r\n    gettingEnvironments = gettingEnvironments.add(id);\r\n    return state.merge({\r\n        gettingEnvironments,\r\n    });\r\n}\r\nfunction getEnvironmentSuccess(state, action) {\r\n    const { environment } = action;\r\n    let environments = state.get('environments');\r\n    let gettingEnvironments = state.get('gettingEnvironments');\r\n    gettingEnvironments = gettingEnvironments.remove(environment.id);\r\n    environments = mergeEnvironment(environment, environments);\r\n    return state.merge({\r\n        environments,\r\n        gettingEnvironments,\r\n    });\r\n}\r\nfunction getEnvironmentCancelled(state, action) {\r\n    const { id } = action;\r\n    let gettingEnvironments = state.get('gettingEnvironments');\r\n    gettingEnvironments = gettingEnvironments.remove(id);\r\n    return state.merge({\r\n        gettingEnvironments,\r\n    });\r\n}\r\nfunction getEnvironmentError(state, action) {\r\n    const { id, error } = action;\r\n    let getErrors = state.get('getErrors');\r\n    let gettingEnvironments = state.get('gettingEnvironments');\r\n    gettingEnvironments = gettingEnvironments.remove(id);\r\n    getErrors = getErrors.set(id, error);\r\n    return state.merge({\r\n        getErrors,\r\n        gettingEnvironments,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearStartError(state, action) {\r\n    const { id } = action;\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = clearError(startErrors, id);\r\n    return state.merge({\r\n        startErrors,\r\n    });\r\n}\r\nfunction clearStopError(state, action) {\r\n    const { id } = action;\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = clearError(stopErrors, id);\r\n    return state.merge({\r\n        stopErrors,\r\n    });\r\n}\r\nfunction clearResetError(state, action) {\r\n    const { id } = action;\r\n    let resetErrors = state.get('resetErrors');\r\n    resetErrors = clearError(resetErrors, id);\r\n    return state.merge({\r\n        resetErrors,\r\n    });\r\n}\r\nfunction addErrors(ids, errorMap, errors) {\r\n    ids.map((id) => (errorMap = errorMap.set(id, errors[id])));\r\n    return errorMap;\r\n}\r\nfunction clearError(errorMap, id) {\r\n    if (id) {\r\n        return errorMap.remove(id);\r\n    }\r\n    return Map();\r\n}\r\nfunction setPendingState(environmentIds, environments, pendingVmState) {\r\n    environmentIds.map((id) => {\r\n        const index = environments.findIndex((env) => env.id === id);\r\n        if (index < 0) {\r\n            return;\r\n        }\r\n        environments = environments.update(index, (templateEnvironment) => {\r\n            return { ...templateEnvironment, pendingVmState };\r\n        });\r\n    });\r\n    return environments;\r\n}\r\nfunction mergeEnvironments(newEnvironments, oldEnvironments) {\r\n    let environments = List();\r\n    newEnvironments.map((newEnvironment) => {\r\n        const index = oldEnvironments.findIndex((e) => e.id === newEnvironment.id);\r\n        if (index > -1) {\r\n            const oldEnvironment = oldEnvironments.get(index);\r\n            const environment = preserveNetworkInterface(oldEnvironment, newEnvironment);\r\n            environments = environments.push(environment);\r\n        }\r\n        else {\r\n            environments = environments.push(newEnvironment);\r\n        }\r\n    });\r\n    return environments;\r\n}\r\nfunction mergeEnvironment(newEnvironment, environments) {\r\n    const index = environments.findIndex((e) => e.id === newEnvironment.id);\r\n    if (index > -1) {\r\n        const oldEnvironment = environments.get(index);\r\n        const environment = preserveNetworkInterface(oldEnvironment, newEnvironment);\r\n        environments = environments.set(index, environment);\r\n    }\r\n    else {\r\n        environments = environments.push(newEnvironment);\r\n    }\r\n    return environments;\r\n}\r\nfunction preserveNetworkInterface(oldEnvironment, newEnvironment) {\r\n    const { networkInterface: oldNetworkInterface } = oldEnvironment;\r\n    const { networkInterface: newNetworkInterface } = newEnvironment;\r\n    let environment;\r\n    if (!!newNetworkInterface) {\r\n        environment = newEnvironment;\r\n    }\r\n    else if (!!oldNetworkInterface) {\r\n        environment = { ...newEnvironment, networkInterface: oldNetworkInterface };\r\n    }\r\n    else {\r\n        environment = newEnvironment;\r\n    }\r\n    return environment;\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    environments: List(),\r\n    loadError: undefined,\r\n    gettingEnvironments: Set(),\r\n    getErrors: Map(),\r\n    startErrors: Map(),\r\n    stopErrors: Map(),\r\n    resetErrors: Map(),\r\n})();\r\nexport const environmentReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case EnvironmentActionType.CLEAR_USER_SESSION:\r\n        case EnvironmentActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case EnvironmentActionType.SELECT_LAB:\r\n        case EnvironmentActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS:\r\n                            return listEnvironments(state, action);\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS_CANCELLED:\r\n                            return listEnvironmentsCancelled(state, action);\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS_SUCCESS:\r\n                            return listEnvironmentsSuccess(state, action);\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS_ERROR:\r\n                            return listEnvironmentsError(state, action);\r\n                        case EnvironmentActionType.START_ENVIRONMENTS:\r\n                            return startEnvironments(state, action);\r\n                        case EnvironmentActionType.START_ENVIRONMENTS_ERROR:\r\n                            return startEnvironmentsError(state, action);\r\n                        case EnvironmentActionType.STOP_ENVIRONMENTS:\r\n                            return stopEnvironments(state, action);\r\n                        case EnvironmentActionType.STOP_ENVIRONMENTS_ERROR:\r\n                            return stopEnvironmentsError(state, action);\r\n                        case EnvironmentActionType.RESET_ENVIRONMENTS:\r\n                            return resetEnvironments(state, action);\r\n                        case EnvironmentActionType.RESET_ENVIRONMENTS_ERROR:\r\n                            return resetEnvironmentsError(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT:\r\n                            return getEnvironment(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT_SUCCESS:\r\n                            return getEnvironmentSuccess(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT_CANCELLED:\r\n                            return getEnvironmentCancelled(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT_ERROR:\r\n                            return getEnvironmentError(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_LOAD_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_START_ERROR:\r\n                            return clearStartError(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_STOP_ERROR:\r\n                            return clearStopError(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_RESET_ERROR:\r\n                            return clearResetError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default environmentReducer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabActionType } from '../lab/lab-actions';\r\nimport { CommonTemplateActionType } from '../template/template-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const PricingAndAvailabilityActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonTemplateActionType,\r\n    GET_PRICING_AND_AVAILABILITY_DATA: 'GET_PRICING_AND_AVAILABILITY_DATA',\r\n    GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS: 'GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS',\r\n    GET_PRICING_AND_AVAILABILITY_DATA_ERROR: 'GET_PRICING_AND_AVAILABILITY_DATA_ERROR',\r\n    CLEAR_PRICING_AND_AVAILABILITY_ERROR: 'CLEAR_PRICING_AND_AVAILABILITY_ERROR',\r\n    GET_LAB_PRICING_AND_AVAILABILITY_DATA: 'GET_LAB_PRICING_AND_AVAILABILITY_DATA',\r\n    GET_LAB_PRICING_AND_AVAILABILITY_DATA_SUCCESS: 'GET_LAB_PRICING_AND_AVAILABILITY_DATA_SUCCESS',\r\n    GET_LAB_PRICING_AND_AVAILABILITY_DATA_ERROR: 'GET_LAB_PRICING_AND_AVAILABILITY_DATA_ERROR',\r\n    CLEAR_LAB_PRICING_AND_AVAILABILITY_ERROR: 'CLEAR_LAB_PRICING_AND_AVAILABILITY_ERROR',\r\n};\r\n","import { Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { PricingAndAvailabilityActionType, } from '../actions/pricing-and-availability/pricing-and-availability-actions';\r\nimport { Context } from '../action-context';\r\nfunction getPricingAndAvailabilityData(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loading,\r\n        error: undefined,\r\n    });\r\n}\r\nfunction getPricingAndAvailabilityDataSuccess(state, action) {\r\n    const { data } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        data,\r\n    });\r\n}\r\nfunction getPricingAndAvailabilityDataError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n        data: {},\r\n    });\r\n}\r\nfunction getLabPricingAndAvailabilityData(state, action) {\r\n    return state.merge({\r\n        labLoadState: LoadingStoreState.Loading,\r\n        labError: undefined,\r\n    });\r\n}\r\nfunction getLabPricingAndAvailabilityDataSuccess(state, action) {\r\n    const { data: labData } = action;\r\n    return state.merge({\r\n        labLoadState: LoadingStoreState.Loaded,\r\n        labData,\r\n    });\r\n}\r\nfunction getLabPricingAndAvailabilityDataError(state, action) {\r\n    const { error: labError } = action;\r\n    return state.merge({\r\n        labLoadState: LoadingStoreState.LoadingFailed,\r\n        labError,\r\n        labData: undefined,\r\n    });\r\n}\r\nfunction clearLabData(state) {\r\n    return state.merge({\r\n        labLoadState: LoadingStoreState.NotStarted,\r\n        labError: undefined,\r\n        labData: undefined,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    error: undefined,\r\n    data: {},\r\n    labLoadState: LoadingStoreState.NotStarted,\r\n    labError: undefined,\r\n    labData: undefined,\r\n})();\r\nexport const pricingAndAvailabilityReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case PricingAndAvailabilityActionType.CLEAR_USER_SESSION:\r\n        case PricingAndAvailabilityActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case PricingAndAvailabilityActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA:\r\n                            return getPricingAndAvailabilityData(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS:\r\n                            return getPricingAndAvailabilityDataSuccess(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_ERROR:\r\n                            return getPricingAndAvailabilityDataError(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA:\r\n                            return getLabPricingAndAvailabilityData(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA_SUCCESS:\r\n                            return getLabPricingAndAvailabilityDataSuccess(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA_ERROR:\r\n                            return getLabPricingAndAvailabilityDataError(state, action);\r\n                        case PricingAndAvailabilityActionType.CLEAR_LAB_PRICING_AND_AVAILABILITY_ERROR:\r\n                        case PricingAndAvailabilityActionType.SELECT_LAB:\r\n                            return clearLabData(state);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default pricingAndAvailabilityReducer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nimport { CommonLabActionType } from '../lab/lab-actions';\r\nimport { CommonTemplateActionType } from '../template/template-actions';\r\nimport { CommonLabParentResourceActionType } from '../lab-parent-resource/lab-parent-resource-actions';\r\nexport const CoreLimitActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonTemplateActionType,\r\n    GET_CORE_RESTRICTIONS_AND_USAGE: 'GET_CORE_RESTRICTIONS_AND_USAGE',\r\n    GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS: 'GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS',\r\n    GET_CORE_RESTRICTIONS_AND_USAGE_ERROR: 'GET_CORE_RESTRICTIONS_AND_USAGE_ERROR',\r\n    GET_CORE_RESTRICTIONS_AND_USAGE_CANCELLED: 'GET_CORE_RESTRICTIONS_AND_USAGE_CANCELLED',\r\n};\r\n","import { Map, Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { CoreLimitActionType, } from '../actions/core-limit/core-limit-actions';\r\nimport { Context } from '../action-context';\r\nfunction getCoreRestrictionsAndUsages(state, action) {\r\n    return state.merge({\r\n        loadState: state.get('loadState') === LoadingStoreState.Loaded\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction getCoreRestrictionsAndUsagesSuccess(state, action) {\r\n    const { coreRestrictionsAndUsages } = action;\r\n    if (!coreRestrictionsAndUsages) {\r\n        return state;\r\n    }\r\n    const { restrictions, usages, isExempt } = coreRestrictionsAndUsages;\r\n    let coreQuotaData = state.get('coreQuotaData');\r\n    if (!coreQuotaData) {\r\n        coreQuotaData = {};\r\n    }\r\n    const newUsages = usages ? Map(usages.map((x) => [x.coreFamily, x.numberOfCores])) : undefined;\r\n    const newRestrictions = restrictions ? Map(restrictions.map((x) => [x.coreFamily, x.numberOfCores])) : undefined;\r\n    coreQuotaData = { ...coreQuotaData, isExempt, usages: newUsages, restrictions: newRestrictions };\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        coreQuotaData,\r\n    });\r\n}\r\nfunction getCoreRestrictionsAndUsagesError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: state.get('loadState') === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n        error,\r\n    });\r\n}\r\nfunction getCoreRestrictionsAndUsagesCancelled(state, action) {\r\n    return state.merge({\r\n        loadState: state.get('loadState') === LoadingStoreState.Loading\r\n            ? LoadingStoreState.NotStarted\r\n            : LoadingStoreState.Loaded,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    coreQuotaData: {\r\n        isExempt: true,\r\n        usages: Map(),\r\n        restrictions: Map(),\r\n    },\r\n    error: undefined,\r\n})();\r\nexport const coreLimitReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case CoreLimitActionType.CLEAR_USER_SESSION:\r\n        case CoreLimitActionType.SELECT_TENANT:\r\n        case CoreLimitActionType.SELECT_LAB_PARENT_RESOURCE:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    return state;\r\n                default:\r\n                    switch (action.type) {\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE:\r\n                            return getCoreRestrictionsAndUsages(state, action);\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS:\r\n                            return getCoreRestrictionsAndUsagesSuccess(state, action);\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_ERROR:\r\n                            return getCoreRestrictionsAndUsagesError(state, action);\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_CANCELLED:\r\n                            return getCoreRestrictionsAndUsagesCancelled(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n            }\r\n    }\r\n};\r\nexport default coreLimitReducer;\r\n","import { List, Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { GroupActionType, } from '../actions/group/group-actions';\r\nfunction getGroupName(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction getGroupNameSuccess(state, action) {\r\n    const { groupName } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        groupName,\r\n    });\r\n}\r\nfunction getGroupNameFailed(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction getGroupNameError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n    });\r\n}\r\nfunction setGroupId(state, action) {\r\n    const { groupId } = action;\r\n    return state.merge({\r\n        groupId,\r\n        groupName: '',\r\n    });\r\n}\r\nfunction setGroupName(state, action) {\r\n    const { groupName } = action;\r\n    return state.merge({\r\n        groupName,\r\n    });\r\n}\r\nfunction enableFilterByGroupId(state, action) {\r\n    return state.merge({\r\n        shouldFilterByGroupId: true,\r\n    });\r\n}\r\nfunction getGroups(state, action) {\r\n    return state.merge({\r\n        groupsLoadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction getGroupsSuccess(state, action) {\r\n    const { groups } = action;\r\n    return state.merge({\r\n        groupsLoadState: LoadingStoreState.Loaded,\r\n        groups: List(groups),\r\n    });\r\n}\r\nfunction getGroupsFailed(state, action) {\r\n    return state.merge({\r\n        groupsLoadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction getGroupsError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        groupsLoadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    groupId: '',\r\n    groupName: '',\r\n    error: undefined,\r\n    shouldFilterByGroupId: false,\r\n    loadState: LoadingStoreState.NotStarted,\r\n    groupsLoadState: LoadingStoreState.NotStarted,\r\n    groups: List(),\r\n})();\r\nexport const groupReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case GroupActionType.GET_GROUP_NAME:\r\n            return getGroupName(state, action);\r\n        case GroupActionType.GET_GROUP_NAME_SUCCESS:\r\n            return getGroupNameSuccess(state, action);\r\n        case GroupActionType.GET_GROUP_NAME_ERROR:\r\n            return getGroupNameError(state, action);\r\n        case GroupActionType.GET_GROUP_NAME_FAILED:\r\n            return getGroupNameFailed(state, action);\r\n        case GroupActionType.SET_GROUP_ID:\r\n            return setGroupId(state, action);\r\n        case GroupActionType.SET_GROUP_NAME:\r\n            return setGroupName(state, action);\r\n        case GroupActionType.ENABLE_FILTER_BY_GROUP_ID:\r\n            return enableFilterByGroupId(state, action);\r\n        case GroupActionType.GET_GROUPS:\r\n            return getGroups(state, action);\r\n        case GroupActionType.GET_GROUPS_SUCCESS:\r\n            return getGroupsSuccess(state, action);\r\n        case GroupActionType.GET_GROUPS_ERROR:\r\n            return getGroupsError(state, action);\r\n        case GroupActionType.GET_GROUPS_FAILED:\r\n            return getGroupsFailed(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default groupReducer;\r\n","import { Record } from 'immutable';\r\nimport { TeamsActionType, } from '../actions/teams/teams-actions';\r\nimport { InitializationState } from '../state/common-store';\r\nimport { UserTeamRole, ChannelType, TeamsTheme } from '../../data/models/teams';\r\nfunction teamsInitialize(state, action) {\r\n    return state.merge({\r\n        initializationState: InitializationState.Initializing,\r\n    });\r\n}\r\nfunction teamsInitializeSuccess(state, action) {\r\n    return state.merge({\r\n        initializationState: InitializationState.Success,\r\n    });\r\n}\r\nfunction teamsInitializeError(state, action) {\r\n    const { error: initializeError } = action;\r\n    return state.merge({\r\n        initializationState: InitializationState.Failed,\r\n        initializeError,\r\n    });\r\n}\r\nfunction teamsDisableSaveButtonError(state, action) {\r\n    const { disableSaveButtonError } = action;\r\n    return state.merge({\r\n        disableSaveButtonError,\r\n    });\r\n}\r\nfunction teamsConfigureTabError(state, action) {\r\n    const { configureTabError } = action;\r\n    return state.merge({\r\n        configureTabError,\r\n    });\r\n}\r\nfunction setUserTeamRole(state, action) {\r\n    const { userTeamRole } = action;\r\n    return state.merge({\r\n        userTeamRole,\r\n    });\r\n}\r\nfunction setTeamsChannelType(state, action) {\r\n    const { channelType } = action;\r\n    return state.merge({\r\n        channelType,\r\n    });\r\n}\r\nfunction setTeamsTheme(state, action) {\r\n    const { theme } = action;\r\n    return state.merge({\r\n        theme,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    initializationState: InitializationState.NotStarted,\r\n    disableSaveButtonError: undefined,\r\n    configureTabError: undefined,\r\n    userTeamRole: UserTeamRole.Unknown,\r\n    channelType: ChannelType.Unknown,\r\n    theme: TeamsTheme.Unknown,\r\n})();\r\nexport const teamsReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case TeamsActionType.TEAMS_INITIALIZE:\r\n            return teamsInitialize(state, action);\r\n        case TeamsActionType.TEAMS_INITIALIZE_SUCCESS:\r\n            return teamsInitializeSuccess(state, action);\r\n        case TeamsActionType.TEAMS_INITIALIZE_ERROR:\r\n            return teamsInitializeError(state, action);\r\n        case TeamsActionType.TEAMS_DISABLE_SAVE_BUTTON_ERROR:\r\n            return teamsDisableSaveButtonError(state, action);\r\n        case TeamsActionType.TEAMS_CONFIGURE_TAB_ERROR:\r\n            return teamsConfigureTabError(state, action);\r\n        case TeamsActionType.SET_USER_TEAM_ROLE:\r\n            return setUserTeamRole(state, action);\r\n        case TeamsActionType.SET_TEAMS_CHANNEL_TYPE:\r\n            return setTeamsChannelType(state, action);\r\n        case TeamsActionType.SET_TEAMS_THEME:\r\n            return setTeamsTheme(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default teamsReducer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const TenantActionType = {\r\n    ...CommonActionType,\r\n    LIST_TENANTS: 'LIST_TENANTS',\r\n    LIST_TENANTS_SUCCESS: 'LIST_TENANTS_SUCCESS',\r\n    LIST_TENANTS_ERROR: 'LIST_TENANTS_ERROR',\r\n    SELECT_TENANT_ERROR: 'SELECT_TENANT_ERROR',\r\n};\r\n","import { List, Record } from 'immutable';\r\nimport { TenantActionType, } from '../actions/tenant/tenant-actions';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nfunction listTenants(state, action) {\r\n    return state.merge({\r\n        loadingState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listTenantsSuccess(state, action) {\r\n    const { tenants } = action;\r\n    return state.merge({\r\n        loadingState: LoadingStoreState.Loaded,\r\n        tenants: List(tenants),\r\n    });\r\n}\r\nfunction listTenantsError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadingState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadingState: LoadingStoreState.NotStarted,\r\n    tenants: List(),\r\n    error: undefined,\r\n})();\r\nexport const TenantReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case TenantActionType.LIST_TENANTS:\r\n            return listTenants(state, action);\r\n        case TenantActionType.LIST_TENANTS_SUCCESS:\r\n            return listTenantsSuccess(state, action);\r\n        case TenantActionType.LIST_TENANTS_ERROR:\r\n            return listTenantsError(state, action);\r\n        case TenantActionType.CLEAR_USER_SESSION:\r\n            return state.merge(initialState);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import { Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { PricingAndAvailabilityActionType, } from '../../actions/pricing-and-availability/pricing-and-availability-actions';\r\nimport { Context } from '../../action-context';\r\nfunction getPricingAndAvailabilityData(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loading,\r\n        error: undefined,\r\n    });\r\n}\r\nfunction getPricingAndAvailabilityDataSuccess(state, action) {\r\n    const { data } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        data,\r\n    });\r\n}\r\nfunction getPricingAndAvailabilityDataError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n        data: undefined,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    error: undefined,\r\n    data: undefined,\r\n})();\r\nexport const pricingAndAvailabilityReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case PricingAndAvailabilityActionType.CLEAR_USER_SESSION:\r\n        case PricingAndAvailabilityActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case PricingAndAvailabilityActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA:\r\n                            return getPricingAndAvailabilityData(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS:\r\n                            return getPricingAndAvailabilityDataSuccess(state, action);\r\n                        case PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_ERROR:\r\n                            return getPricingAndAvailabilityDataError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default pricingAndAvailabilityReducer;\r\n","import { CommonActionType } from '../common/common-actions';\r\nexport const OperationsResultActionType = {\r\n    ...CommonActionType,\r\n    POLL_OPERATIONS_RESULT: 'POLL_OPERATIONS_RESULT',\r\n    POLL_PUBLISH_OPERATION_RESULT: 'POLL_PUBLISH_OPERATION_RESULT',\r\n    POLL_PUBLISH_OPERATION_RESULT_SUCCESS: 'POLL_PUBLISH_OPERATION_RESULT_SUCCESS',\r\n    POLL_PUBLISH_OPERATION_RESULT_CANCELLED: 'POLL_PUBLISH_OPERATION_RESULT_CANCELLED',\r\n    POLL_OPERATIONS_RESULT_SUCCESS: 'POLL_OPERATIONS_RESULT_SUCCESS',\r\n    POLL_OPERATIONS_RESULT_CANCELLED: 'POLL_OPERATIONS_RESULT_CANCELLED',\r\n    POLL_OPERATIONS_RESULT_ERROR: 'POLL_OPERATIONS_RESULT_ERROR',\r\n    POLL_USER_OPERATIONS_RESULT: 'POLL_USER_OPERATIONS_RESULT',\r\n    POLL_USER_OPERATIONS_RESULT_SUCCESS: 'POLL_USER_OPERATIONS_RESULT_SUCCESS',\r\n    POLL_USER_OPERATIONS_RESULT_CANCELLED: 'POLL_USER_OPERATIONS_RESULT_CANCELLED',\r\n    POLL_USER_OPERATIONS_RESULT_ERROR: 'POLL_USER_OPERATIONS_RESULT_ERROR',\r\n};\r\n","import { List, Map, Record, Set } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { EnvironmentActionType, } from '../../actions/environment/environment-actions';\r\nimport { VmState } from '../../../data/models/environment-common';\r\nimport { Context } from '../../action-context';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { OperationsResultActionType, } from '../../actions/operations/operations-result-actions';\r\nfunction listVirtualMachines(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        loadError: undefined,\r\n        loadState: oldLoadState === LoadingStoreState.Loaded ? LoadingStoreState.Updating : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listVirtualMachinesCancelled(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        loadState: oldLoadState === LoadingStoreState.Updating ? LoadingStoreState.Loaded : LoadingStoreState.NotStarted,\r\n    });\r\n}\r\nexport function listVirtualMachinesSuccess(state, action) {\r\n    const { virtualMachines } = action;\r\n    return state.merge({\r\n        virtualMachines: List(virtualMachines),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listVirtualMachinesError(state, action) {\r\n    const { error: loadError } = action;\r\n    const oldState = state.get('loadState');\r\n    return state.merge({\r\n        loadState: oldState === LoadingStoreState.Updating ? LoadingStoreState.UpdateFailed : LoadingStoreState.LoadingFailed,\r\n        loadError,\r\n    });\r\n}\r\nfunction startVirtualMachines(state, action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.Starting, true);\r\n    return state.merge({\r\n        virtualMachines,\r\n    });\r\n}\r\nfunction startVirtualMachinesAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    const prevOperations = state.get('operations') || List();\r\n    const operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction resetVirtualMachinesAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    const prevOperations = state.get('operations') || List();\r\n    const operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction redeployVirtualMachinesAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    const prevOperations = state.get('operations') || List();\r\n    const operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction pollOperationsResultSuccess(state, action) {\r\n    const { operationIds } = action;\r\n    const prevOperations = state.get('operations') || List();\r\n    const operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction pollOperationsResultError(state, action) {\r\n    const { error } = action;\r\n    let operationsError = state.get('operationsError');\r\n    operationsError = error;\r\n    return state.merge({\r\n        operationsError,\r\n    });\r\n}\r\nexport function mergeOperations(operations, operationIds) {\r\n    const prevOperationsArr = operations.toArray();\r\n    operationIds.map((operation) => {\r\n        const index = prevOperationsArr.findIndex((prevOp) => prevOp.ResourceId?.id.toLocaleLowerCase() === operation.ResourceId?.id.toLocaleLowerCase());\r\n        if (index > -1) {\r\n            operations = operations.set(index, operation);\r\n        }\r\n        else {\r\n            operations = operations.push(operation);\r\n        }\r\n    });\r\n    return operations;\r\n}\r\nfunction startVirtualMachinesError(state, action) {\r\n    const { errors } = action;\r\n    const virtualMachineIds = Object.keys(errors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.None, false);\r\n    const startErrors = state.get('startErrors');\r\n    return state.merge({\r\n        virtualMachines,\r\n        startErrors: addErrors(virtualMachineIds, startErrors, errors),\r\n    });\r\n}\r\nfunction stopVirtualMachines(state, action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.Stopping, true);\r\n    return state.merge({\r\n        virtualMachines,\r\n    });\r\n}\r\nfunction stopVirtualMachinesAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    const prevOperations = state.get('operations') || List();\r\n    const operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction stopVirutalMachinesError(state, action) {\r\n    const { errors } = action;\r\n    const virtualMachineIds = Object.keys(errors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.None, false);\r\n    const stopErrors = state.get('stopErrors');\r\n    return state.merge({\r\n        virtualMachines,\r\n        stopErrors: addErrors(virtualMachineIds, stopErrors, errors),\r\n    });\r\n}\r\nfunction resetVirtualMachines(state, action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.Reimaging, true);\r\n    return state.merge({\r\n        virtualMachines,\r\n        resetErrors: Map(),\r\n    });\r\n}\r\nfunction resetVirtualMachinesError(state, action) {\r\n    const { errors } = action;\r\n    const virtualMachineIds = Object.keys(errors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.None, false);\r\n    let resetErrors = state.get('resetErrors');\r\n    resetErrors = addErrors(virtualMachineIds, resetErrors, errors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        resetErrors,\r\n    });\r\n}\r\nfunction getVirtualMachine(state, action) {\r\n    const { id } = action;\r\n    let getErrors = state.get('getErrors');\r\n    getErrors = getErrors.remove(id);\r\n    let gettingVirtualMachines = state.get('gettingVirtualMachines');\r\n    gettingVirtualMachines = gettingVirtualMachines.add(id);\r\n    return state.merge({\r\n        getErrors,\r\n        gettingVirtualMachines,\r\n    });\r\n}\r\nfunction getVirtualMachineSuccess(state, action) {\r\n    const { virtualMachine } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    let gettingVirtualMachines = state.get('gettingVirtualMachines');\r\n    gettingVirtualMachines = gettingVirtualMachines.remove(virtualMachine.id);\r\n    virtualMachines = mergeVirtualMachine(virtualMachine, virtualMachines);\r\n    return state.merge({\r\n        virtualMachines,\r\n        gettingVirtualMachines,\r\n    });\r\n}\r\nfunction getVirtualMachineCancelled(state, action) {\r\n    const { id } = action;\r\n    let gettingVirtualMachines = state.get('gettingVirtualMachines');\r\n    gettingVirtualMachines = gettingVirtualMachines.remove(id);\r\n    return state.merge({\r\n        gettingVirtualMachines,\r\n    });\r\n}\r\nfunction getVirtualMachineError(state, action) {\r\n    const { id, error } = action;\r\n    let getErrors = state.get('getErrors');\r\n    let gettingVirtualMachines = state.get('gettingVirtualMachines');\r\n    gettingVirtualMachines = gettingVirtualMachines.remove(id);\r\n    getErrors = getErrors.set(id, error);\r\n    return state.merge({\r\n        getErrors,\r\n        gettingVirtualMachines,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearStartErrors(state, action) {\r\n    const { ids } = action;\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = clearErrors(ids, startErrors);\r\n    return state.merge({\r\n        startErrors,\r\n    });\r\n}\r\nfunction clearStopErrors(state, action) {\r\n    const { ids } = action;\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = clearErrors(ids, stopErrors);\r\n    return state.merge({\r\n        stopErrors,\r\n    });\r\n}\r\nfunction clearResetError(state, action) {\r\n    const { id } = action;\r\n    let resetErrors = state.get('resetErrors');\r\n    resetErrors = clearError(resetErrors, id);\r\n    return state.merge({\r\n        resetErrors,\r\n    });\r\n}\r\nfunction addErrors(ids, errorMap, errors) {\r\n    ids.map((id) => (errorMap = errorMap.set(id, errors[id])));\r\n    return errorMap;\r\n}\r\nfunction clearErrors(ids, errorMap) {\r\n    ids.map((id) => {\r\n        errorMap = clearError(errorMap, id);\r\n    });\r\n    return errorMap;\r\n}\r\nfunction clearError(errorMap, id) {\r\n    if (!!id) {\r\n        return errorMap.remove(id);\r\n    }\r\n    return Map();\r\n}\r\nfunction setPendingState(virtualMachineIds, virtualMachines, pendingVmState, isUpdatePending) {\r\n    virtualMachineIds.map((id) => {\r\n        const index = virtualMachines.findIndex((vm) => caseInsensitiveCultureInvariantCompare(vm.id, id) === 0);\r\n        if (index > -1) {\r\n            virtualMachines = virtualMachines.update(index, (vm) => {\r\n                return { ...vm, pendingVmState, isUpdatePending };\r\n            });\r\n        }\r\n    });\r\n    return virtualMachines;\r\n}\r\nfunction mergeVirtualMachine(newVirtualMachine, virtualMachines) {\r\n    const index = virtualMachines.findIndex((vm) => caseInsensitiveCultureInvariantCompare(vm.id, newVirtualMachine.id) === 0);\r\n    if (index > -1) {\r\n        virtualMachines = virtualMachines.set(index, newVirtualMachine);\r\n    }\r\n    else {\r\n        virtualMachines = virtualMachines.push(newVirtualMachine);\r\n    }\r\n    return virtualMachines;\r\n}\r\nfunction resetTemplatePassword(state, action) {\r\n    const { templateId } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState([templateId], virtualMachines, VmState.ResettingPassword, true);\r\n    return state.merge({\r\n        virtualMachines,\r\n        resetPasswordError: undefined,\r\n    });\r\n}\r\nfunction resetTemplatePasswordError(state, action) {\r\n    const { error } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState([error.id], virtualMachines, VmState.None, false);\r\n    return state.merge({\r\n        virtualMachines,\r\n        resetPasswordError: error,\r\n    });\r\n}\r\nfunction clearVirtualMachineGetError(state, action) {\r\n    const { id } = action;\r\n    let getErrors = state.get('getErrors');\r\n    getErrors = clearError(getErrors, id);\r\n    return state.merge({\r\n        getErrors,\r\n    });\r\n}\r\nfunction clearResetPasswordError(state, action) {\r\n    return state.merge({\r\n        resetPasswordError: undefined,\r\n    });\r\n}\r\nfunction saveImage(state, action) {\r\n    return state.merge({\r\n        shouldShowExportStartedMessage: true,\r\n        exportedImageName: action.displayName,\r\n    });\r\n}\r\nfunction updateImage(state, action) {\r\n    return state.merge({\r\n        shouldShowExportStartedMessage: true,\r\n    });\r\n}\r\nfunction saveImageError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        shouldShowExportStartedMessage: false,\r\n        saveImageError: error,\r\n    });\r\n}\r\nfunction clearExportError(state, action) {\r\n    return state.merge({\r\n        saveImageError: undefined,\r\n    });\r\n}\r\nfunction dismissExportStartedMessageBar(state, action) {\r\n    return state.merge({\r\n        shouldShowExportStartedMessage: false,\r\n    });\r\n}\r\nfunction redeployVirtualMachines(state, action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.Redeploying, true);\r\n    return state.merge({\r\n        virtualMachines,\r\n        redeployErrors: Map(),\r\n    });\r\n}\r\nfunction redeployVirtualMachinesError(state, action) {\r\n    const { errors } = action;\r\n    const virtualMachineIds = Object.keys(errors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingState(virtualMachineIds, virtualMachines, VmState.None, false);\r\n    let redeployErrors = state.get('redeployErrors');\r\n    redeployErrors = addErrors(virtualMachineIds, redeployErrors, errors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        redeployErrors,\r\n    });\r\n}\r\nfunction clearRedeployErrors(state, action) {\r\n    const { ids } = action;\r\n    let redeployErrors = state.get('redeployErrors');\r\n    redeployErrors = clearErrors(ids, redeployErrors);\r\n    return state.merge({\r\n        redeployErrors,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    virtualMachines: List(),\r\n    gettingVirtualMachines: Set(),\r\n    loadError: undefined,\r\n    getErrors: Map(),\r\n    startErrors: Map(),\r\n    stopErrors: Map(),\r\n    resetErrors: Map(),\r\n    resetPasswordError: undefined,\r\n    shouldShowExportStartedMessage: false,\r\n    exportedImageName: '',\r\n    saveImageError: undefined,\r\n    redeployErrors: Map(),\r\n    operations: List(),\r\n    operationsError: undefined,\r\n})();\r\nexport const vNextVirtualMachineReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case EnvironmentActionType.CLEAR_USER_SESSION:\r\n        case EnvironmentActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case EnvironmentActionType.SELECT_LAB:\r\n        case EnvironmentActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS:\r\n                            return listVirtualMachines(state, action);\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS_CANCELLED:\r\n                            return listVirtualMachinesCancelled(state, action);\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS_SUCCESS:\r\n                            return listVirtualMachinesSuccess(state, action);\r\n                        case EnvironmentActionType.LIST_ENVIRONMENTS_ERROR:\r\n                            return listVirtualMachinesError(state, action);\r\n                        case EnvironmentActionType.START_ENVIRONMENTS:\r\n                            return startVirtualMachines(state, action);\r\n                        case EnvironmentActionType.START_ENVIRONMENTS_ACCEPTED:\r\n                            return startVirtualMachinesAccepted(state, action);\r\n                        case EnvironmentActionType.START_ENVIRONMENTS_ERROR:\r\n                            return startVirtualMachinesError(state, action);\r\n                        case EnvironmentActionType.STOP_ENVIRONMENTS:\r\n                            return stopVirtualMachines(state, action);\r\n                        case EnvironmentActionType.STOP_ENVIRONMENTS_ERROR:\r\n                            return stopVirutalMachinesError(state, action);\r\n                        case EnvironmentActionType.STOP_ENVIRONMENTS_ACCEPTED:\r\n                            return stopVirtualMachinesAccepted(state, action);\r\n                        case EnvironmentActionType.RESET_ENVIRONMENTS:\r\n                            return resetVirtualMachines(state, action);\r\n                        case EnvironmentActionType.RESET_ENVIRONMENTS_ERROR:\r\n                            return resetVirtualMachinesError(state, action);\r\n                        case EnvironmentActionType.RESET_ENVIRONMENTS_ACCEPTED:\r\n                            return resetVirtualMachinesAccepted(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT:\r\n                            return getVirtualMachine(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT_SUCCESS:\r\n                            return getVirtualMachineSuccess(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT_CANCELLED:\r\n                            return getVirtualMachineCancelled(state, action);\r\n                        case EnvironmentActionType.GET_ENVIRONMENT_ERROR:\r\n                            return getVirtualMachineError(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_LOAD_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_START_ERROR:\r\n                            return clearStartErrors(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_STOP_ERROR:\r\n                            return clearStopErrors(state, action);\r\n                        case EnvironmentActionType.CLEAR_ENVIRONMENTS_RESET_ERROR:\r\n                            return clearResetError(state, action);\r\n                        case EnvironmentActionType.RESET_PASSWORD:\r\n                            return resetTemplatePassword(state, action);\r\n                        case EnvironmentActionType.RESET_PASSWORD_ERROR:\r\n                            return resetTemplatePasswordError(state, action);\r\n                        case EnvironmentActionType.CLEAR_VIRTUAL_MACHINE_GET_ERROR:\r\n                            return clearVirtualMachineGetError(state, action);\r\n                        case EnvironmentActionType.CLEAR_VIRTUAL_MACHINE_RESET_PASSWORD_ERROR:\r\n                            return clearResetPasswordError(state, action);\r\n                        case EnvironmentActionType.CREATE_SHARED_IMAGE:\r\n                            return saveImage(state, action);\r\n                        case EnvironmentActionType.UPDATE_SHARED_IMAGE:\r\n                            return updateImage(state, action);\r\n                        case EnvironmentActionType.CREATE_SHARED_IMAGE_ERROR:\r\n                            return saveImageError(state, action);\r\n                        case EnvironmentActionType.UPDATE_SHARED_IMAGE_ERROR:\r\n                            return saveImageError(state, action);\r\n                        case EnvironmentActionType.CLEAR_EXPORT_ERROR:\r\n                            return clearExportError(state, action);\r\n                        case EnvironmentActionType.DISMISS_EXPORT_STARTED_MESSAGE_BAR:\r\n                            return dismissExportStartedMessageBar(state, action);\r\n                        case EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE:\r\n                            return redeployVirtualMachines(state, action);\r\n                        case EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE_ERROR:\r\n                            return redeployVirtualMachinesError(state, action);\r\n                        case EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE_ACCEPTED:\r\n                            return redeployVirtualMachinesAccepted(state, action);\r\n                        case EnvironmentActionType.CLEAR_VIRTUAL_MACHINE_REDEPLOY_ERROR:\r\n                            return clearRedeployErrors(state, action);\r\n                        case OperationsResultActionType.POLL_OPERATIONS_RESULT_SUCCESS:\r\n                            return pollOperationsResultSuccess(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default vNextVirtualMachineReducer;\r\n","import { List, Record, Map } from 'immutable';\r\nimport { UserEnvironmentActionType, } from '../../actions/user-environment/user-environment-actions';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { Context } from '../../action-context';\r\nimport { VmState } from '../../../data/models/environment-common';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { mergeOperations } from './virtual-machine-reducer';\r\nimport { OperationsResultActionType, } from '../../../redux/actions/operations/operations-result-actions';\r\nfunction setPendingVirtualMachineState(virtualMachineId, virtualMachines, pendingVmState) {\r\n    virtualMachines = virtualMachines.update(virtualMachines.findIndex((vm) => caseInsensitiveCultureInvariantCompare(vm.id, virtualMachineId) === 0), (vm) => {\r\n        return { ...vm, pendingVmState };\r\n    });\r\n    return virtualMachines;\r\n}\r\nfunction clearPendingVirtualMachineState(virtualMachineId, virtualMachines) {\r\n    virtualMachines = virtualMachines.update(virtualMachines.findIndex((vm) => caseInsensitiveCultureInvariantCompare(vm.id, virtualMachineId) === 0), (vm) => {\r\n        return { ...vm, pendingVmState: VmState.None };\r\n    });\r\n    return virtualMachines;\r\n}\r\nfunction addVirtualMachineError(virtualMachineId, error, errorMap) {\r\n    let errors = errorMap.get(virtualMachineId);\r\n    errors = errors ? errors.concat(error) : List([error]);\r\n    errorMap = errorMap.set(virtualMachineId, errors);\r\n    return errorMap;\r\n}\r\nfunction clearSingleVirtualMachineError(virtualMachineId, errorIndex, errorMap) {\r\n    let errors = errorMap.get(virtualMachineId);\r\n    if (!errors || errorIndex >= errors.count()) {\r\n        return errorMap;\r\n    }\r\n    errors = errors.remove(errorIndex);\r\n    errorMap = errors.count() > 0 ? errorMap.set(virtualMachineId, errors) : errorMap.remove(virtualMachineId);\r\n    return errorMap;\r\n}\r\nfunction clearVirtualMachineError(virtualMachineId, errorMap) {\r\n    return errorMap.remove(virtualMachineId);\r\n}\r\nfunction listUserVirtualMachines(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        loadState: oldLoadState === LoadingStoreState.NotStarted || oldLoadState === LoadingStoreState.Loading\r\n            ? LoadingStoreState.Loading\r\n            : LoadingStoreState.Updating,\r\n    });\r\n}\r\nfunction listUserVirtualMachinesCancelled(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        loadState: oldLoadState == LoadingStoreState.Loading ? LoadingStoreState.NotStarted : LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listAllUserVirtualMachinesSuccess(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listVNextUserVirtualMachinesSuccess(state, action) {\r\n    const { virtualMachines } = action;\r\n    return state.merge({\r\n        virtualMachines: List(virtualMachines),\r\n        listVirtualMachinesError: undefined,\r\n    });\r\n}\r\nfunction listUserVirtualMachinesError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: state.loadState === LoadingStoreState.Loading\r\n            ? LoadingStoreState.LoadingFailed\r\n            : LoadingStoreState.UpdateFailed,\r\n        listVirtualMachinesError: error,\r\n    });\r\n}\r\nfunction clearListUserVirtualMachinesError(state, action) {\r\n    return state.merge({\r\n        listVirtualMachinesError: undefined,\r\n    });\r\n}\r\nfunction clearErrors(state, action) {\r\n    return state.merge({\r\n        listVirtualMachinesError: undefined,\r\n        startErrors: Map(),\r\n        stopErrors: Map(),\r\n        resetPasswordErrors: Map(),\r\n    });\r\n}\r\nfunction startVirtualMachine(state, action) {\r\n    const { environmentId } = action;\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = clearVirtualMachineError(environmentId, startErrors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingVirtualMachineState(environmentId, virtualMachines, VmState.Starting);\r\n    return state.merge({\r\n        virtualMachines,\r\n        startErrors,\r\n    });\r\n}\r\nfunction startVirtualMachineAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    let prevOperations = state.get('operations') || List();\r\n    let operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction stopVirtualMachineAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    let prevOperations = state.get('operations') || List();\r\n    let operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction reimageVirtualMachineAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    let prevOperations = state.get('operations') || List();\r\n    let operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction redeployVirtualMachineAccepted(state, action) {\r\n    const { operationIds } = action;\r\n    let prevOperations = state.get('operations') || List();\r\n    let operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction userOperationsResultSuccess(state, action) {\r\n    const { operationIds } = action;\r\n    let prevOperations = state.get('operations') || List();\r\n    let operations = mergeOperations(prevOperations, operationIds);\r\n    return state.merge({\r\n        operations,\r\n    });\r\n}\r\nfunction startVirtualMachineFailed(state, action) {\r\n    const { error, environmentId } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = clearPendingVirtualMachineState(environmentId, virtualMachines);\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = addVirtualMachineError(environmentId, error, startErrors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        startErrors,\r\n    });\r\n}\r\nfunction clearStartVirtualMachineError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let startErrors = state.get('startErrors');\r\n    startErrors = clearSingleVirtualMachineError(environmentId, errorIndex, startErrors);\r\n    return state.merge({\r\n        startErrors,\r\n    });\r\n}\r\nfunction stopVirtualMachine(state, action) {\r\n    const { environmentId } = action;\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = clearVirtualMachineError(environmentId, stopErrors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingVirtualMachineState(environmentId, virtualMachines, VmState.Stopping);\r\n    return state.merge({\r\n        virtualMachines,\r\n        stopErrors,\r\n    });\r\n}\r\nfunction stopVirtualMachineFailed(state, action) {\r\n    const { error, environmentId } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = clearPendingVirtualMachineState(environmentId, virtualMachines);\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = addVirtualMachineError(environmentId, error, stopErrors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        stopErrors,\r\n    });\r\n}\r\nfunction clearStopVirtualMachineError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let stopErrors = state.get('stopErrors');\r\n    stopErrors = clearSingleVirtualMachineError(environmentId, errorIndex, stopErrors);\r\n    return state.merge({\r\n        stopErrors,\r\n    });\r\n}\r\n// we use the same vCurrent action creator rather than creating a new one for resetting password.\r\n// we don't create new action creators to avoid passing two DispatchProps and deciding which action to dispatch in the component.\r\nfunction resetVirtualMachinePassword(state, action) {\r\n    const { environmentId } = action;\r\n    let resetPasswordErrors = state.get('resetPasswordErrors');\r\n    resetPasswordErrors = clearVirtualMachineError(environmentId, resetPasswordErrors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingVirtualMachineState(environmentId, virtualMachines, VmState.ResettingPassword);\r\n    return state.merge({\r\n        virtualMachines,\r\n        resetPasswordErrors,\r\n    });\r\n}\r\nfunction resetVirtualMachinePasswordFailed(state, action) {\r\n    const { error, environmentId } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = clearPendingVirtualMachineState(environmentId, virtualMachines);\r\n    let resetPasswordErrors = state.get('resetPasswordErrors');\r\n    resetPasswordErrors = addVirtualMachineError(environmentId, error, resetPasswordErrors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        resetPasswordErrors,\r\n    });\r\n}\r\nfunction clearResetVirtualMachinePasswordError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let resetPasswordErrors = state.get('resetPasswordErrors');\r\n    resetPasswordErrors = clearSingleVirtualMachineError(environmentId, errorIndex, resetPasswordErrors);\r\n    return state.merge({\r\n        resetPasswordErrors,\r\n    });\r\n}\r\nfunction reimageUserVirtualMachine(state, action) {\r\n    const { environmentId } = action;\r\n    let reimageErrors = state.get('reimageErrors');\r\n    reimageErrors = clearVirtualMachineError(environmentId, reimageErrors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingVirtualMachineState(environmentId, virtualMachines, VmState.Reimaging);\r\n    return state.merge({\r\n        virtualMachines,\r\n        reimageErrors,\r\n    });\r\n}\r\nfunction reimageUserVirtualMachineError(state, action) {\r\n    const { error, environmentId } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = clearPendingVirtualMachineState(environmentId, virtualMachines);\r\n    let reimageErrors = state.get('reimageErrors');\r\n    reimageErrors = addVirtualMachineError(environmentId, error, reimageErrors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        reimageErrors,\r\n    });\r\n}\r\nfunction clearReimageUserVirtualMachineError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let reimageErrors = state.get('reimageErrors');\r\n    reimageErrors = clearSingleVirtualMachineError(environmentId, errorIndex, reimageErrors);\r\n    return state.merge({\r\n        reimageErrors,\r\n    });\r\n}\r\nfunction redeployUserVirtualMachine(state, action) {\r\n    const { environmentId } = action;\r\n    let redeployErrors = state.get('redeployErrors');\r\n    redeployErrors = clearVirtualMachineError(environmentId, redeployErrors);\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = setPendingVirtualMachineState(environmentId, virtualMachines, VmState.Redeploying);\r\n    return state.merge({\r\n        virtualMachines,\r\n        redeployErrors,\r\n    });\r\n}\r\nfunction redeployUserVirtualMachineError(state, action) {\r\n    const { error, environmentId } = action;\r\n    let virtualMachines = state.get('virtualMachines');\r\n    virtualMachines = clearPendingVirtualMachineState(environmentId, virtualMachines);\r\n    let redeployErrors = state.get('redeployErrors');\r\n    redeployErrors = addVirtualMachineError(environmentId, error, redeployErrors);\r\n    return state.merge({\r\n        virtualMachines,\r\n        redeployErrors,\r\n    });\r\n}\r\nfunction clearRedeployUserVirtualMachineError(state, action) {\r\n    const { environmentId, errorIndex } = action;\r\n    let redeployErrors = state.get('redeployErrors');\r\n    redeployErrors = clearSingleVirtualMachineError(environmentId, errorIndex, redeployErrors);\r\n    return state.merge({\r\n        redeployErrors,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    virtualMachines: List(),\r\n    listVirtualMachinesError: undefined,\r\n    startErrors: Map(),\r\n    stopErrors: Map(),\r\n    resetPasswordErrors: Map(),\r\n    reimageErrors: Map(),\r\n    redeployErrors: Map(),\r\n    operations: List(),\r\n})();\r\nexport const userVirtualMachineReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case UserEnvironmentActionType.CLEAR_USER_SESSION:\r\n        case UserEnvironmentActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        case UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS:\r\n            return listVNextUserVirtualMachinesSuccess(state, action);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS:\r\n                            return listUserVirtualMachines(state, action);\r\n                        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED:\r\n                            return listUserVirtualMachinesCancelled(state, action);\r\n                        case UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_ERROR:\r\n                            return listUserVirtualMachinesError(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR:\r\n                            return clearListUserVirtualMachinesError(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS:\r\n                            return clearErrors(state, action);\r\n                        case UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT:\r\n                            return startVirtualMachine(state, action);\r\n                        case UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT_FAILED:\r\n                            return startVirtualMachineFailed(state, action);\r\n                        case UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT_ACCEPTED:\r\n                            return startVirtualMachineAccepted(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_START_USER_ENVIRONMENT_ERROR:\r\n                            return clearStartVirtualMachineError(state, action);\r\n                        case UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT:\r\n                            return stopVirtualMachine(state, action);\r\n                        case UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT_FAILED:\r\n                            return stopVirtualMachineFailed(state, action);\r\n                        case UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT_ACCEPTED:\r\n                            return stopVirtualMachineAccepted(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_STOP_USER_ENVIRONMENT_ERROR:\r\n                            return clearStopVirtualMachineError(state, action);\r\n                        case UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD:\r\n                            return resetVirtualMachinePassword(state, action);\r\n                        case UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED:\r\n                            return resetVirtualMachinePasswordFailed(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR:\r\n                            return clearResetVirtualMachinePasswordError(state, action);\r\n                        case UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE:\r\n                            return reimageUserVirtualMachine(state, action);\r\n                        case UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE_ERROR:\r\n                            return reimageUserVirtualMachineError(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_REIMAGE_USER_VIRTUAL_MACHINE_ERROR:\r\n                            return clearReimageUserVirtualMachineError(state, action);\r\n                        case UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE_ACCEPTED:\r\n                            return redeployVirtualMachineAccepted(state, action);\r\n                        case UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE:\r\n                            return redeployUserVirtualMachine(state, action);\r\n                        case UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE_ERROR:\r\n                            return redeployUserVirtualMachineError(state, action);\r\n                        case UserEnvironmentActionType.CLEAR_REDEPLOY_USER_VIRTUAL_MACHINE_ERROR:\r\n                            return clearRedeployUserVirtualMachineError(state, action);\r\n                        case UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE_ACCEPTED:\r\n                            return reimageVirtualMachineAccepted(state, action);\r\n                        case UserEnvironmentActionType.LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS:\r\n                            return listAllUserVirtualMachinesSuccess(state, action);\r\n                        case OperationsResultActionType.POLL_USER_OPERATIONS_RESULT_SUCCESS:\r\n                            return userOperationsResultSuccess(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default userVirtualMachineReducer;\r\n","import { Record } from 'immutable';\r\nimport { RegistrationState } from '../../../data/models/register-user';\r\nimport { RegisterActionType, } from '../../actions/register/register-actions';\r\nimport { Context } from '../../action-context';\r\nfunction registerUser(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.Registering,\r\n    });\r\n}\r\nfunction registerUserSuccess(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.Registered,\r\n    });\r\n}\r\nfunction registerUserFailed(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        registrationState: RegistrationState.Failed,\r\n        error,\r\n    });\r\n}\r\nfunction clearRegisterErrors(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.None,\r\n        error: undefined,\r\n    });\r\n}\r\nfunction clearRegisterState(state, action) {\r\n    return state.merge({\r\n        registrationState: RegistrationState.None,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    registrationState: RegistrationState.None,\r\n    error: undefined,\r\n})();\r\nexport const registerReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case RegisterActionType.CLEAR_USER_SESSION:\r\n        case RegisterActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case RegisterActionType.REGISTER_USER:\r\n                            return registerUser(state, action);\r\n                        case RegisterActionType.REGISTER_USER_SUCCESS:\r\n                            return registerUserSuccess(state, action);\r\n                        case RegisterActionType.REGISTER_USER_FAILED:\r\n                            return registerUserFailed(state, action);\r\n                        case RegisterActionType.CLEAR_REGISTER_ERRORS:\r\n                            return clearRegisterErrors(state, action);\r\n                        case RegisterActionType.CLEAR_REGISTER_STATE:\r\n                            return clearRegisterState(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default registerReducer;\r\n","import { List, Map, Record, Set } from 'immutable';\r\nimport { FailureOperation } from '../../../data/ml-client-error';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { addToListMap, removeFromMap } from '../../../utils/common';\r\nimport { LabActionType, } from '../../actions/lab/lab-actions';\r\nimport Context from '../../action-context';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { LabUpdateOperation } from '../../../data/models/lab';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport { toEnableState } from '../../../data/helpers/enum-helpers';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { LabAccessType } from '../../../data/models/lab';\r\nimport { OperationsResultActionType, } from '../../actions/operations/operations-result-actions';\r\nfunction addOrUpdateLab(lab, labs) {\r\n    if (!labs) {\r\n        return List([lab]);\r\n    }\r\n    else {\r\n        const index = labs.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, lab.id) === 0);\r\n        if (index > -1) {\r\n            const oldLab = labs.get(index);\r\n            // preserve original role info if not returned in the get\r\n            // such as when we are polling on a lab\r\n            if (lab.roles.length < 1) {\r\n                lab.roles = [...oldLab.roles];\r\n            }\r\n            lab.lastGroupSyncTime = oldLab?.lastGroupSyncTime;\r\n            lab.lastPublished = oldLab?.lastPublished;\r\n            return labs.set(index, lab);\r\n        }\r\n        else {\r\n            return labs.push(lab);\r\n        }\r\n    }\r\n}\r\nfunction getLabResourceGroupId(labId) {\r\n    const resourceId = new ResourceId(labId, true);\r\n    const resourceGroupId = resourceId.getResourceGroupId();\r\n    return resourceGroupId;\r\n}\r\nfunction listVNextLabs(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        loadState: oldLoadState === LoadingStoreState.Loaded || oldLoadState === LoadingStoreState.Updated\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listVNextLabsSuccess(state, action) {\r\n    const { labs, labParentId } = action;\r\n    const oldLoadState = state.get('loadState');\r\n    let resourceGroupLabsMap = Map();\r\n    // get permission propagating labs stored that cannot be fetched from ARM yet, merge into resourceGroupLabsMap when needed to show on labs portal\r\n    let resourceGroupPropagatingLabsMap = state.get('resourceGroupPropagatingLabsMap');\r\n    // lab ids from input, fectched from ARM list labs call\r\n    const labIds = Set(List(labs).map(d => d.id));\r\n    if (!labParentId) {\r\n        for (let index = 0; index < labs.length; index++) {\r\n            const resource = new ResourceId(labs[index].id, true);\r\n            const resourceGroupId = resource.getResourceGroupId();\r\n            resourceGroupLabsMap = addToListMap(resourceGroupLabsMap, labs[index], resourceGroupId);\r\n        }\r\n        const RGIds = Array.from(resourceGroupLabsMap.keys());\r\n        for (let index = 0; index < RGIds.length; index++) {\r\n            const permissionPropagatingLabs = resourceGroupPropagatingLabsMap.get(RGIds[index]);\r\n            if (permissionPropagatingLabs && permissionPropagatingLabs.size > 0) {\r\n                for (let index = 0; index < permissionPropagatingLabs.size; index++) {\r\n                    const propagatingLab = permissionPropagatingLabs.get(index);\r\n                    if (propagatingLab && !labIds.has(propagatingLab.id)) {\r\n                        // if a permission propagating lab does not exist in ARM lab list yet, need to add the lab into resourceGroupLabsMap for the current RG to show the lab\r\n                        resourceGroupLabsMap = addToListMap(resourceGroupLabsMap, propagatingLab, RGIds[index]);\r\n                    }\r\n                    if (propagatingLab && labIds.has(propagatingLab.id)) {\r\n                        // if a lab exists in permission propagating map and it exists in ARM lab list already, need to remove the lab from propagating map\r\n                        resourceGroupPropagatingLabsMap = removeFromMap(resourceGroupPropagatingLabsMap, propagatingLab, RGIds[index]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n        resourceGroupLabsMap = resourceGroupLabsMap.set(labParentId, List(labs));\r\n        const permissionPropagatingLabs = resourceGroupPropagatingLabsMap.get(labParentId);\r\n        if (permissionPropagatingLabs && permissionPropagatingLabs.size > 0) {\r\n            for (let index = 0; index < permissionPropagatingLabs.size; index++) {\r\n                const propagatingLab = permissionPropagatingLabs.get(index);\r\n                if (propagatingLab && !labIds.has(propagatingLab.id)) {\r\n                    // if a permission propagating lab does not exist in ARM lab list yet, need to add the lab into resourceGroupLabsMap for the current RG to show the lab\r\n                    resourceGroupLabsMap = addToListMap(resourceGroupLabsMap, propagatingLab, labParentId);\r\n                }\r\n                if (propagatingLab && labIds.has(propagatingLab.id)) {\r\n                    // if a lab exists in permission propagating map and it exists in ARM lab list already, need to remove the lab from propagating map\r\n                    resourceGroupPropagatingLabsMap = removeFromMap(resourceGroupPropagatingLabsMap, propagatingLab, labParentId);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return state.merge({\r\n        loadState: oldLoadState === LoadingStoreState.Updating ? LoadingStoreState.Updated : LoadingStoreState.Loaded,\r\n        resourceGroupLabsMap,\r\n        resourceGroupPropagatingLabsMap,\r\n    });\r\n}\r\nfunction filterByLabAccessType(state, action) {\r\n    const { labAccessType } = action;\r\n    return state.merge({\r\n        labAccessType,\r\n    });\r\n}\r\nfunction loadSubscriptionVNextLabsError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction createLab(state, action) {\r\n    return state.merge({\r\n        isCreating: true,\r\n    });\r\n}\r\nfunction createLabSuccess(state, action) {\r\n    const { lab } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceId = new ResourceId(lab.id, true);\r\n    resourceGroupLabsMap = addToListMap(resourceGroupLabsMap, lab, resourceId.getResourceGroupId());\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction createLabError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction deleteLab(state, action) {\r\n    return state.merge({\r\n        isDeleting: true,\r\n    });\r\n}\r\nfunction deleteLabSuccess(state, action) {\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const { labId } = action;\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    const labIndex = labs?.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, labId) === 0);\r\n    if (labIndex !== undefined && labIndex > -1) {\r\n        const oldLab = labs.get(labIndex);\r\n        const newLab = { ...oldLab, provisioningState: LabServicesModels.ProvisioningState.Deleting };\r\n        labs = labs?.set(labIndex, newLab);\r\n        resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n    }\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction deleteLabError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction updateLab(state, action) {\r\n    const { labId, updateOperation, labUpdate } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (updateOperation === LabUpdateOperation.Settings && !!labs) {\r\n        const index = labs.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, labId) === 0);\r\n        if (index > -1) {\r\n            // Preserve settings while calling update operation on the lab.\r\n            const oldLab = labs.get(index);\r\n            const newLab = {\r\n                ...oldLab,\r\n                connectionProfile: labUpdate.connectionProfile,\r\n                autoShutdownProfile: labUpdate.autoShutdownProfile,\r\n                pendingProvisioningState: LabServicesModels.ProvisioningState.Updating,\r\n            };\r\n            labs = labs.set(index, newLab);\r\n            resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n        }\r\n    }\r\n    return state.merge({\r\n        updateError: undefined,\r\n        isUpdating: true,\r\n        resourceGroupLabsMap,\r\n    });\r\n}\r\nfunction updateLabSuccess(state, action) {\r\n    const { lab } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceGroupId = getLabResourceGroupId(lab.id);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (!!labs) {\r\n        labs = addOrUpdateLab(lab, labs);\r\n        resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n    }\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateLabError(state, action) {\r\n    const { error: updateError } = action;\r\n    if (updateError.code === ErrorCode.LabCapacityUpdateExceedsGpuCoresLimit ||\r\n        updateError.code === ErrorCode.LabCapacityUpdateExceedsStandardCoresLimit) {\r\n        return state.merge({\r\n            labCapacityExceedsCoresError: updateError,\r\n            isUpdating: false,\r\n        });\r\n    }\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, updateError, updateError.id);\r\n    return state.merge({\r\n        errors,\r\n        updateError,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction clearError(state, action) {\r\n    const { errorIndex, id } = action;\r\n    const labId = id.toLowerCase();\r\n    let errors = state.get('errors').get(labId);\r\n    if (!errors || errorIndex >= errors.count()) {\r\n        return state;\r\n    }\r\n    errors = errors.remove(errorIndex);\r\n    const errorMap = errors.count() > 0 ? state.get('errors').set(labId, errors) : state.get('errors').remove(labId);\r\n    return state.merge({\r\n        errors: errorMap,\r\n    });\r\n}\r\nfunction clearUpdateError(state, action) {\r\n    return state.merge({\r\n        updateError: undefined,\r\n    });\r\n}\r\nfunction clearLabPublishError(state, action) {\r\n    const { id } = action;\r\n    const labId = id.toLowerCase();\r\n    let errors = state.get('errors').get(labId);\r\n    if (!errors || errors.count() < 1) {\r\n        return state;\r\n    }\r\n    let newErrors = errors.filter(function (value, index, arr) {\r\n        return value.failureOperation != FailureOperation.PublishTemplate;\r\n    });\r\n    const errorMap = newErrors.count() > 0 ? state.get('errors').set(labId, newErrors) : state.get('errors').remove(labId);\r\n    return state.merge({\r\n        errors: errorMap,\r\n    });\r\n}\r\nfunction clearLabCapacityExceedsCoresError(state, action) {\r\n    return state.merge({\r\n        labCapacityExceedsCoresError: undefined,\r\n    });\r\n}\r\nfunction selectLab(state, action) {\r\n    const { labId: currentLabId } = action;\r\n    return state.merge({\r\n        currentLabId,\r\n        labMetadataLoadState: LoadingStoreState.NotStarted,\r\n    });\r\n}\r\nfunction clearSelectedLab(state, action) {\r\n    return state.merge({\r\n        currentLabId: '',\r\n        labMetadataLoadState: LoadingStoreState.NotStarted,\r\n    });\r\n}\r\nfunction getLab(state, action) {\r\n    const { labId } = action;\r\n    let errors = state.get('errors');\r\n    let labErrors = errors.get(labId);\r\n    if (!!labErrors) {\r\n        labErrors = labErrors.filter((o) => o.failureOperation != FailureOperation.GetLab);\r\n        if (!!labErrors && labErrors.size > 0) {\r\n            errors = errors.set(labId, labErrors);\r\n        }\r\n        else {\r\n            errors = errors.delete(labId);\r\n        }\r\n    }\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction getLabSuccess(state, action) {\r\n    const { lab } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceGroupId = getLabResourceGroupId(lab.id);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    labs = addOrUpdateLab(lab, labs);\r\n    resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n    });\r\n}\r\nfunction getLabError(state, action) {\r\n    return state.merge({\r\n        errors: addToListMap(state.errors, action.error, action.error.id),\r\n    });\r\n}\r\nfunction updateLabAccessMode(state, action) {\r\n    const { labId, openAccess } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (!!labs) {\r\n        const index = labs.findIndex((lab) => caseInsensitiveCultureInvariantCompare(lab.id, labId) === 0);\r\n        if (index > -1) {\r\n            const oldLab = labs.get(index);\r\n            const securityProfile = { ...oldLab.securityProfile, openAccess: toEnableState(openAccess) };\r\n            const newLab = { ...oldLab, securityProfile };\r\n            labs = labs.set(index, newLab);\r\n            resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n        }\r\n    }\r\n    return state.merge({\r\n        isUpdating: true,\r\n        resourceGroupLabsMap,\r\n    });\r\n}\r\nfunction updateLabAccessModeError(state, action) {\r\n    const { labId } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (!!labs) {\r\n        const index = labs.findIndex((lab) => caseInsensitiveCultureInvariantCompare(lab.id, labId) === 0);\r\n        if (index > -1) {\r\n            const oldLab = labs.get(index);\r\n            const oldOpenAccess = oldLab.securityProfile?.openAccess;\r\n            const securityProfile = {\r\n                ...oldLab.securityProfile,\r\n                openAccess: oldOpenAccess === LabServicesModels.EnableState.Disabled\r\n                    ? LabServicesModels.EnableState.Enabled\r\n                    : LabServicesModels.EnableState.Disabled,\r\n            };\r\n            const newLab = { ...oldLab, securityProfile };\r\n            labs = labs.set(index, newLab);\r\n            resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n        }\r\n    }\r\n    return state.merge({\r\n        isUpdating: false,\r\n        resourceGroupLabsMap,\r\n    });\r\n}\r\nfunction syncLabUsers(state, action) {\r\n    const { labId } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    resourceGroupLabsMap = setPendingLabState(labId, resourceGroupLabsMap, LabServicesModels.LabState.Syncing, LabServicesModels.ProvisioningState.Updating);\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n        syncUsersError: undefined,\r\n    });\r\n}\r\nfunction syncLabUsersError(state, action) {\r\n    const { syncUsersError, labId } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    resourceGroupLabsMap = setPendingLabState(labId, resourceGroupLabsMap, undefined, undefined);\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n        syncUsersError,\r\n    });\r\n}\r\nfunction setPendingLabState(labId, resourceGroupLabsMap, pendingLabState, pendingProvisioningState) {\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (!!labs) {\r\n        const index = labs.findIndex((lab) => caseInsensitiveCultureInvariantCompare(lab.id, labId) === 0);\r\n        if (index > -1) {\r\n            const oldLab = labs.get(index);\r\n            const newLab = { ...oldLab, pendingLabState, pendingProvisioningState };\r\n            labs = labs.set(index, newLab);\r\n            resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n        }\r\n    }\r\n    return resourceGroupLabsMap;\r\n}\r\nfunction publishLab(state, action) {\r\n    const { labId, capacity } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    resourceGroupLabsMap = setPendingLabState(labId, resourceGroupLabsMap, LabServicesModels.LabState.Publishing, LabServicesModels.ProvisioningState.Updating);\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (!!labs) {\r\n        const index = labs.findIndex((lab) => caseInsensitiveCultureInvariantCompare(lab.id, labId) === 0);\r\n        if (index > -1) {\r\n            const oldLab = labs.get(index);\r\n            const newSku = { ...oldLab.virtualMachineProfile.sku, capacity };\r\n            const labUpdate = {\r\n                virtualMachineProfile: { ...oldLab.virtualMachineProfile, sku: newSku },\r\n            };\r\n            const newLab = { ...oldLab, ...labUpdate };\r\n            labs = labs.set(index, newLab);\r\n            resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n        }\r\n    }\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n    });\r\n}\r\nfunction publishVNextLabAccepted(state, action) {\r\n    const { operation } = action;\r\n    let operations = state.get('labPublishOperations');\r\n    operations = operations.set(operation.ResourceId?.id, operation);\r\n    return state.merge({\r\n        labPublishOperations: operations,\r\n    });\r\n}\r\nfunction pollOperationResultSuccess(state, action) {\r\n    const { operation } = action;\r\n    let operations = state.get('labPublishOperations');\r\n    operations = operations.set(operation.ResourceId?.id, operation);\r\n    return state.merge({\r\n        labPublishOperations: operations,\r\n    });\r\n}\r\nfunction publishLabError(state, action) {\r\n    const { labId, error } = action;\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    let errors = state.get('errors');\r\n    resourceGroupLabsMap = setPendingLabState(labId, resourceGroupLabsMap, undefined, undefined);\r\n    errors = addToListMap(errors, error, error.id);\r\n    return state.merge({\r\n        resourceGroupLabsMap,\r\n        errors,\r\n    });\r\n}\r\nfunction getLabMetadata(state, action) {\r\n    const oldLoadState = state.get('labMetadataLoadState');\r\n    return state.merge({\r\n        labMetadataLoadState: oldLoadState === LoadingStoreState.NotStarted ? LoadingStoreState.Loading : LoadingStoreState.Updating,\r\n    });\r\n}\r\nfunction getLabMetadataSuccess(state, action) {\r\n    const { labMetadata, labId } = action;\r\n    const oldLoadState = state.get('labMetadataLoadState');\r\n    let resourceGroupLabsMap = state.get('resourceGroupLabsMap');\r\n    const resourceGroupId = getLabResourceGroupId(labId);\r\n    let labs = resourceGroupLabsMap.get(resourceGroupId);\r\n    if (!!labs) {\r\n        const index = labs.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, labId) === 0);\r\n        if (index > -1) {\r\n            const oldLab = labs.get(index);\r\n            const newLab = { ...oldLab, ...labMetadata };\r\n            labs = labs.set(index, newLab);\r\n        }\r\n        resourceGroupLabsMap = resourceGroupLabsMap.set(resourceGroupId, labs);\r\n    }\r\n    return state.merge({\r\n        labMetadataLoadState: oldLoadState === LoadingStoreState.Loading ? LoadingStoreState.Loaded : LoadingStoreState.Updated,\r\n        resourceGroupLabsMap,\r\n    });\r\n}\r\nfunction getLabMetadataError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, error.id);\r\n    const oldLoadState = state.get('labMetadataLoadState');\r\n    return state.merge({\r\n        labMetadataLoadState: oldLoadState === LoadingStoreState.Loading\r\n            ? LoadingStoreState.LoadingFailed\r\n            : LoadingStoreState.UpdateFailed,\r\n        errors,\r\n    });\r\n}\r\nfunction updateVnextCreatelabPermission(state, action) {\r\n    const { createLabPermissionOnLabPlan } = action;\r\n    return state.merge({\r\n        hasCreateLabPermissionOnLabPlan: createLabPermissionOnLabPlan,\r\n    });\r\n}\r\nfunction updateVnextPermissionPropagation(state, action) {\r\n    const { vNextLabPermissionPropagating } = action;\r\n    return state.merge({\r\n        isVnextLabPermissionPropagating: vNextLabPermissionPropagating,\r\n    });\r\n}\r\nfunction addVnextPermissionPropagatingLab(state, action) {\r\n    const { lab, labParentId } = action;\r\n    let resourceGroupPropagatingLabsMap = state.get('resourceGroupPropagatingLabsMap');\r\n    if (!labParentId) {\r\n        const resource = new ResourceId(lab.id, true);\r\n        const resourceGroupId = resource.getResourceGroupId();\r\n        resourceGroupPropagatingLabsMap = addToListMap(resourceGroupPropagatingLabsMap, lab, resourceGroupId);\r\n    }\r\n    else {\r\n        resourceGroupPropagatingLabsMap = addToListMap(resourceGroupPropagatingLabsMap, lab, labParentId);\r\n    }\r\n    return state.merge({\r\n        resourceGroupPropagatingLabsMap,\r\n    });\r\n}\r\nfunction removeVnextPermissionPropagatingLab(state, action) {\r\n    const { lab, labParentId } = action;\r\n    let resourceGroupPropagatingLabsMap = state.get('resourceGroupPropagatingLabsMap');\r\n    if (!labParentId) {\r\n        const resource = new ResourceId(lab.id, true);\r\n        const resourceGroupId = resource.getResourceGroupId();\r\n        resourceGroupPropagatingLabsMap = removeFromMap(resourceGroupPropagatingLabsMap, lab, resourceGroupId);\r\n    }\r\n    else {\r\n        resourceGroupPropagatingLabsMap = removeFromMap(resourceGroupPropagatingLabsMap, lab, labParentId);\r\n    }\r\n    return state.merge({\r\n        resourceGroupPropagatingLabsMap,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    resourceGroupLabsMap: Map(),\r\n    currentLabId: '',\r\n    errors: Map(),\r\n    isDeleting: false,\r\n    isCreating: false,\r\n    isUpdating: false,\r\n    updateError: undefined,\r\n    labCapacityExceedsCoresError: undefined,\r\n    syncUsersError: undefined,\r\n    isUpdatingMetadata: false,\r\n    labMetadataLoadState: LoadingStoreState.NotStarted,\r\n    labAccessType: LabAccessType.writeAccess,\r\n    labPublishOperations: Map(),\r\n    hasCreateLabPermissionOnLabPlan: undefined,\r\n    isVnextLabPermissionPropagating: undefined,\r\n    resourceGroupPropagatingLabsMap: Map(),\r\n})();\r\nexport const labReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case LabActionType.CLEAR_USER_SESSION:\r\n        case LabActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case LabActionType.LIST_LABS:\r\n                            return listVNextLabs(state, action);\r\n                        case LabActionType.LIST_LABS_SUCCESS:\r\n                            return listVNextLabsSuccess(state, action);\r\n                        case LabActionType.FILTER_BY_LAB_ACCESS_TYPE:\r\n                            return filterByLabAccessType(state, action);\r\n                        case LabActionType.LOAD_SUBSCRIPTION_VNEXT_LABS_ERROR:\r\n                            return loadSubscriptionVNextLabsError(state, action);\r\n                        case LabActionType.UPDATE_VNEXT_CREATELAB_PERMISSION:\r\n                            return updateVnextCreatelabPermission(state, action);\r\n                        case LabActionType.UPDATE_VNEXT_PERMISSION_PROPAGATION:\r\n                            return updateVnextPermissionPropagation(state, action);\r\n                        case LabActionType.ADD_VNEXT_PERMISSION_PROPAGATING_LAB:\r\n                            return addVnextPermissionPropagatingLab(state, action);\r\n                        case LabActionType.REMOVE_VNEXT_PERMISSION_PROPAGATING_LAB:\r\n                            return removeVnextPermissionPropagatingLab(state, action);\r\n                        case LabActionType.CREATE_LAB:\r\n                            return createLab(state, action);\r\n                        case LabActionType.CREATE_LAB_SUCCESS:\r\n                            return createLabSuccess(state, action);\r\n                        case LabActionType.CREATE_LAB_ERROR:\r\n                            return createLabError(state, action);\r\n                        case LabActionType.DELETE_LAB:\r\n                            return deleteLab(state, action);\r\n                        case LabActionType.DELETE_LAB_SUCCESS:\r\n                            return deleteLabSuccess(state, action);\r\n                        case LabActionType.DELETE_LAB_ERROR:\r\n                            return deleteLabError(state, action);\r\n                        case LabActionType.UPDATE_LAB:\r\n                            return updateLab(state, action);\r\n                        case LabActionType.UPDATE_LAB_SUCCESS:\r\n                            return updateLabSuccess(state, action);\r\n                        case LabActionType.UPDATE_LAB_ERROR:\r\n                            return updateLabError(state, action);\r\n                        case LabActionType.CLEAR_LAB_ERROR:\r\n                            return clearError(state, action);\r\n                        case LabActionType.CLEAR_LAB_UPDATE_ERROR:\r\n                            return clearUpdateError(state, action);\r\n                        case LabActionType.CLEAR_LAB_CAPACITY_EXCEEDS_CORES_ERROR:\r\n                            return clearLabCapacityExceedsCoresError(state, action);\r\n                        case LabActionType.CLEAR_PUBLISH_LAB_ERROR:\r\n                            return clearLabPublishError(state, action);\r\n                        case LabActionType.SELECT_LAB:\r\n                            return selectLab(state, action);\r\n                        case LabActionType.CLEAR_SELECTED_LAB:\r\n                            return clearSelectedLab(state, action);\r\n                        case LabActionType.SELECT_LAB_PARENT_RESOURCE:\r\n                            return clearSelectedLab(state, action);\r\n                        case LabActionType.GET_LAB:\r\n                            return getLab(state, action);\r\n                        case LabActionType.GET_LAB_SUCCESS:\r\n                            return getLabSuccess(state, action);\r\n                        case LabActionType.GET_LAB_ERROR:\r\n                            return getLabError(state, action);\r\n                        case LabActionType.UPDATE_LAB_ACCESS_MODE:\r\n                            return updateLabAccessMode(state, action);\r\n                        case LabActionType.UPDATE_LAB_ACCESS_MODE_ERROR:\r\n                            return updateLabAccessModeError(state, action);\r\n                        case LabActionType.SYNC_LAB_USERS:\r\n                            return syncLabUsers(state, action);\r\n                        case LabActionType.SYNC_LAB_USERS_ERROR:\r\n                            return syncLabUsersError(state, action);\r\n                        case LabActionType.PUBLISH_LAB:\r\n                            return publishLab(state, action);\r\n                        case LabActionType.PUBLISH_LAB_ERROR:\r\n                            return publishLabError(state, action);\r\n                        case LabActionType.PUBLISH_LAB_ACCEPTED:\r\n                            return publishVNextLabAccepted(state, action);\r\n                        case LabActionType.GET_LAB_METADATA:\r\n                            return getLabMetadata(state, action);\r\n                        case LabActionType.GET_LAB_METADATA_SUCCESS:\r\n                            return getLabMetadataSuccess(state, action);\r\n                        case LabActionType.GET_LAB_METADATA_ERROR:\r\n                            return getLabMetadataError(state, action);\r\n                        case OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT_SUCCESS:\r\n                            return pollOperationResultSuccess(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default labReducer;\r\n","import { Record, List, Map } from 'immutable';\r\nimport _ from 'lodash';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { Context } from '../../action-context';\r\nimport { ScheduleActionType, } from '../../actions/schedule/schedule-actions';\r\nfunction listSchedules(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listSchedulesSuccess(state, action) {\r\n    const { schedules } = action;\r\n    return state.merge({\r\n        schedules: List(schedules),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listSchedulesError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        loadError: error,\r\n        schedules: List([]),\r\n    });\r\n}\r\nfunction deleteSchedule(state, action) {\r\n    return state.merge({\r\n        isDeleting: true,\r\n    });\r\n}\r\nfunction deleteScheduleSuccess(state, action) {\r\n    const { scheduleId } = action;\r\n    let schedules = state.get('schedules');\r\n    const removeAtIndex = schedules.findIndex((schedule) => caseInsensitiveCultureInvariantCompare(schedule.id, scheduleId) === 0);\r\n    if (removeAtIndex > -1) {\r\n        schedules = schedules.remove(removeAtIndex);\r\n    }\r\n    return state.merge({\r\n        schedules,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction deleteScheduleError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction createSchedule(state, action) {\r\n    return state.merge({\r\n        isCreating: true,\r\n    });\r\n}\r\nfunction createScheduleSuccess(state, action) {\r\n    const { schedule } = action;\r\n    let schedules = state.get('schedules');\r\n    schedules = schedules.push(schedule);\r\n    return state.merge({\r\n        schedules,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction createScheduleError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isCreating: false,\r\n    });\r\n}\r\nfunction updateSchedule(state, action) {\r\n    return state.merge({\r\n        isUpdating: true,\r\n    });\r\n}\r\nfunction updateScheduleSuccess(state, action) {\r\n    const { schedule } = action;\r\n    let schedules = state.get('schedules');\r\n    const index = schedules.findIndex((sch) => caseInsensitiveCultureInvariantCompare(sch.id, schedule.id) === 0);\r\n    // ignoring an update if it is no longer in the store, should happen, but might happen\r\n    // with a race condition when a user navigates to another lab\r\n    if (index > -1) {\r\n        schedules = schedules.set(index, schedule);\r\n    }\r\n    return state.merge({\r\n        schedules,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction updateScheduleError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addError(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearError(state, action) {\r\n    const { id, errorIndex } = action;\r\n    let errors = state.get('errors');\r\n    let errorList = errors.get(id);\r\n    if (!errorList || errorIndex >= errorList.size) {\r\n        return state;\r\n    }\r\n    errorList = errorList.remove(errorIndex);\r\n    errors = errorList.size > 0 ? errors.set(id, errorList) : errors.remove(id);\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction addError(errorMap, error, id) {\r\n    const errors = errorMap.get(id);\r\n    if (errors) {\r\n        const existingError = errors.some((_error) => _.isEqual(_error, error));\r\n        if (!existingError) {\r\n            return errorMap.set(id, errors.push(error));\r\n        }\r\n    }\r\n    else {\r\n        return errorMap.set(id, List([error]));\r\n    }\r\n    return errorMap;\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    schedules: List(),\r\n    errors: Map(),\r\n    loadError: undefined,\r\n    isDeleting: false,\r\n    isCreating: false,\r\n    isUpdating: false,\r\n})();\r\nexport const scheduleReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case ScheduleActionType.CLEAR_USER_SESSION:\r\n        case ScheduleActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case ScheduleActionType.SELECT_LAB:\r\n        case ScheduleActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case ScheduleActionType.LIST_SCHEDULES:\r\n                            return listSchedules(state, action);\r\n                        case ScheduleActionType.LIST_SCHEDULES_SUCCESS:\r\n                            return listSchedulesSuccess(state, action);\r\n                        case ScheduleActionType.LIST_SCHEDULES_ERROR:\r\n                            return listSchedulesError(state, action);\r\n                        case ScheduleActionType.DELETE_SCHEDULE:\r\n                            return deleteSchedule(state, action);\r\n                        case ScheduleActionType.DELETE_SCHEDULE_SUCCESS:\r\n                            return deleteScheduleSuccess(state, action);\r\n                        case ScheduleActionType.DELETE_SCHEDULE_ERROR:\r\n                            return deleteScheduleError(state, action);\r\n                        case ScheduleActionType.CREATE_SCHEDULE:\r\n                            return createSchedule(state, action);\r\n                        case ScheduleActionType.CREATE_SCHEDULE_SUCCESS:\r\n                            return createScheduleSuccess(state, action);\r\n                        case ScheduleActionType.CREATE_SCHEDULE_ERROR:\r\n                            return createScheduleError(state, action);\r\n                        case ScheduleActionType.UPDATE_SCHEDULE:\r\n                            return updateSchedule(state, action);\r\n                        case ScheduleActionType.UPDATE_SCHEDULE_SUCCESS:\r\n                            return updateScheduleSuccess(state, action);\r\n                        case ScheduleActionType.UPDATE_SCHEDULE_ERROR:\r\n                            return updateScheduleError(state, action);\r\n                        case ScheduleActionType.CLEAR_LOAD_SCHEDULE_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case ScheduleActionType.CLEAR_SCHEDULE_ERROR:\r\n                            return clearError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default scheduleReducer;\r\n","import { Record } from 'immutable';\r\nimport { Map } from 'immutable';\r\nimport { LabParentResourceActionType, } from '../actions/lab-parent-resource/lab-parent-resource-actions';\r\nimport { LoadingStoreState } from '../../data/models/loading-store-state';\r\nimport { addToListMap } from '../../utils/common';\r\nimport { InitializationState } from '../state/common-store';\r\nfunction selectLabParentResource(state, action) {\r\n    const { resourceId } = action;\r\n    return state.merge({\r\n        currentLabParentId: resourceId,\r\n    });\r\n}\r\nfunction clearSelectedLabParentResource(state, action) {\r\n    return state.merge({\r\n        currentLabParentId: '',\r\n    });\r\n}\r\nfunction listLabParentResources(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: oldLoadState === LoadingStoreState.Loaded || oldLoadState === LoadingStoreState.Updated\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listLabParentResourcesSuccess(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    return state.merge({\r\n        loadState: oldLoadState === LoadingStoreState.Updating ? LoadingStoreState.Updated : LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listLabParentResourcesError(state, action) {\r\n    const oldLoadState = state.get('loadState');\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(state.errors, action.error, action.error.id);\r\n    return state.merge({\r\n        errors,\r\n        loadState: oldLoadState === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n    });\r\n}\r\nfunction refreshSubscriptionsAndLabParentResources(state, action) {\r\n    return state.merge({\r\n        refreshInitializationState: InitializationState.Initializing,\r\n        refreshError: undefined,\r\n        errors: Map(),\r\n    });\r\n}\r\nfunction refreshSubscriptionsAndLabParentResourcesSuccess(state, action) {\r\n    return state.merge({\r\n        refreshInitializationState: InitializationState.Success,\r\n    });\r\n}\r\nfunction refreshSubscriptionsAndLabParentResourcesError(state, action) {\r\n    const { refreshError } = action;\r\n    return state.merge({\r\n        refreshInitializationState: InitializationState.Failed,\r\n        refreshError,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    currentLabParentId: '',\r\n    loadState: LoadingStoreState.NotStarted,\r\n    errors: Map(),\r\n    refreshError: undefined,\r\n    refreshInitializationState: InitializationState.NotStarted,\r\n})();\r\nexport const LabParentResourceReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case LabParentResourceActionType.CLEAR_USER_SESSION:\r\n        case LabParentResourceActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        case LabParentResourceActionType.SELECT_LAB_PARENT_RESOURCE:\r\n            return selectLabParentResource(state, action);\r\n        case LabParentResourceActionType.CLEAR_SELECTED_LAB_PARENT_RESOURCE:\r\n            return clearSelectedLabParentResource(state, action);\r\n        case LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES:\r\n            return listLabParentResources(state, action);\r\n        case LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES_SUCCESS:\r\n            return listLabParentResourcesSuccess(state, action);\r\n        case LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES_ERROR:\r\n            return listLabParentResourcesError(state, action);\r\n        case LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES:\r\n            return refreshSubscriptionsAndLabParentResources(state, action);\r\n        case LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_SUCCESS:\r\n            return refreshSubscriptionsAndLabParentResourcesSuccess(state, action);\r\n        case LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES_ERROR:\r\n            return refreshSubscriptionsAndLabParentResourcesError(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default LabParentResourceReducer;\r\n","import { Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { CoreLimitActionType, } from '../../actions/core-limit/core-limit-actions';\r\nimport { Context } from '../../action-context';\r\nfunction getCoreRestrictionsAndUsages(state, action) {\r\n    return state.merge({\r\n        loadState: state.get('loadState') === LoadingStoreState.Loaded\r\n            ? LoadingStoreState.Updating\r\n            : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction getCoreRestrictionsAndUsagesSuccess(state, action) {\r\n    const { coreUsage } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        coreUsage,\r\n    });\r\n}\r\nfunction getCoreRestrictionsAndUsagesError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: state.get('loadState') === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n        error,\r\n    });\r\n}\r\nfunction getCoreRestrictionsAndUsagesCancelled(state, action) {\r\n    return state.merge({\r\n        loadState: state.get('loadState') === LoadingStoreState.Loading\r\n            ? LoadingStoreState.NotStarted\r\n            : LoadingStoreState.Loaded,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    coreUsage: {\r\n        used: {\r\n            standard: 0,\r\n            gpu: 0,\r\n        },\r\n        alloted: {\r\n            standard: 0,\r\n            gpu: 0,\r\n        },\r\n    },\r\n    error: undefined,\r\n})();\r\nexport const coreUsageReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case CoreLimitActionType.CLEAR_USER_SESSION:\r\n        case CoreLimitActionType.SELECT_TENANT:\r\n        case CoreLimitActionType.SELECT_LAB_PARENT_RESOURCE:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case CoreLimitActionType.SELECT_LAB:\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE:\r\n                            return getCoreRestrictionsAndUsages(state, action);\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS:\r\n                            return getCoreRestrictionsAndUsagesSuccess(state, action);\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_ERROR:\r\n                            return getCoreRestrictionsAndUsagesError(state, action);\r\n                        case CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_CANCELLED:\r\n                            return getCoreRestrictionsAndUsagesCancelled(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default coreUsageReducer;\r\n","import { Record } from 'immutable';\r\nimport { List, Map } from 'immutable';\r\nimport { LabPlanActionType, } from '../../actions/lab-plan/lab-plan-actions';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { addToListMap } from '../../../utils/common';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nfunction addOrUpdateLabPlan(labPlan, labPlans) {\r\n    const index = labPlans.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, labPlan.id) === 0);\r\n    if (index > -1) {\r\n        const oldLabPlan = labPlans.get(index);\r\n        return labPlans.set(index, { ...labPlan, roles: oldLabPlan.roles });\r\n    }\r\n    else {\r\n        return labPlans.push(labPlan);\r\n    }\r\n}\r\nfunction listLabPlans(state, action) {\r\n    return state.merge({\r\n        errors: Map(),\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listLabPlansSuccess(state, action) {\r\n    const { labPlans } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        labPlans: List(labPlans),\r\n    });\r\n}\r\nfunction selectLabPlan(state, action) {\r\n    const { labPlanId } = action;\r\n    return state.merge({\r\n        currentLabPlanId: labPlanId,\r\n    });\r\n}\r\nfunction loadSubscriptionLabPlansError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n    });\r\n}\r\nfunction getLabPlan(state, action) {\r\n    return state.merge({\r\n        isGettingLabPlan: true,\r\n        getLabPlanError: undefined,\r\n    });\r\n}\r\nfunction getLabPlanSuccess(state, action) {\r\n    const { labPlan } = action;\r\n    let labPlans = state.get('labPlans');\r\n    labPlans = addOrUpdateLabPlan(labPlan, labPlans);\r\n    return state.merge({\r\n        labPlans,\r\n        isGettingLabPlan: false,\r\n    });\r\n}\r\nfunction getLabPlanError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        getLabPlanError: error,\r\n        isGettingLabPlan: false,\r\n    });\r\n}\r\nfunction updateLabPlansLmsSettings(state, action) {\r\n    return state.merge({\r\n        isUpdatingLms: true,\r\n    });\r\n}\r\nfunction updateLabPlansLmsSettingsSuccess(state, action) {\r\n    const { labPlans: updatedLabPlans } = action;\r\n    let labPlans = state.get('labPlans');\r\n    updatedLabPlans.forEach((o) => (labPlans = addOrUpdateLabPlan(o, labPlans)));\r\n    return state.merge({\r\n        isUpdatingLms: false,\r\n        labPlans,\r\n    });\r\n}\r\nfunction updateLabPlansLmsSettingsError(state, action) {\r\n    const { errors } = action;\r\n    const labPlanIds = Object.keys(errors);\r\n    let updateLmsErrors = state.get('updateLmsErrors');\r\n    labPlanIds.map((id) => {\r\n        updateLmsErrors = updateLmsErrors.set(id, errors[id]);\r\n    });\r\n    return state.merge({\r\n        updateLmsErrors,\r\n        isUpdatingLms: false,\r\n    });\r\n}\r\nfunction clearUpdateLinkedLmsError(state, action) {\r\n    const { id } = action;\r\n    let updateLmsErrors = state.get('updateLmsErrors');\r\n    if (id) {\r\n        updateLmsErrors = updateLmsErrors.remove(id);\r\n    }\r\n    else {\r\n        updateLmsErrors = Map();\r\n    }\r\n    return state.merge({\r\n        updateLmsErrors,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    labPlans: List(),\r\n    errors: Map(),\r\n    currentLabPlanId: '',\r\n    isGettingLabPlan: false,\r\n    getLabPlanError: undefined,\r\n    isUpdatingLms: false,\r\n    updateLmsErrors: Map(),\r\n})();\r\nexport const labPlanReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case LabPlanActionType.CLEAR_USER_SESSION:\r\n        case LabPlanActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        case LabPlanActionType.LIST_LAB_PLANS:\r\n            return listLabPlans(state, action);\r\n        case LabPlanActionType.LIST_LAB_PLANS_SUCCESS:\r\n            return listLabPlansSuccess(state, action);\r\n        case LabPlanActionType.SELECT_LAB_PLAN:\r\n            return selectLabPlan(state, action);\r\n        case LabPlanActionType.LOAD_SUBSCRIPTION_LAB_PLANS_ERROR:\r\n            return loadSubscriptionLabPlansError(state, action);\r\n        case LabPlanActionType.GET_LAB_PLAN:\r\n            return getLabPlan(state, action);\r\n        case LabPlanActionType.GET_LAB_PLAN_SUCCESS:\r\n            return getLabPlanSuccess(state, action);\r\n        case LabPlanActionType.GET_LAB_PLAN_ERROR:\r\n            return getLabPlanError(state, action);\r\n        case LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS:\r\n            return updateLabPlansLmsSettings(state, action);\r\n        case LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS_SUCCESS:\r\n            return updateLabPlansLmsSettingsSuccess(state, action);\r\n        case LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS_ERROR:\r\n            return updateLabPlansLmsSettingsError(state, action);\r\n        case LabPlanActionType.CLEAR_UPDATE_LMS_ERROR:\r\n            return clearUpdateLinkedLmsError(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default labPlanReducer;\r\n","import { Record, List, Map } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { Context } from '../../action-context';\r\nimport { ImageActionType, } from '../../actions/vnext/images/image-actions';\r\nimport { addToListMap } from '../../../utils/common';\r\nfunction listLabPlanImages(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loading,\r\n        errors: Map(),\r\n    });\r\n}\r\nfunction listLabPlanImagesSuccess(state, action) {\r\n    const { images } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        images: List(images),\r\n    });\r\n}\r\nfunction listLabPlanImagesError(state, action) {\r\n    const { error } = action;\r\n    let errors = state.get('errors');\r\n    errors = addToListMap(errors, error, error.id);\r\n    return state.merge({\r\n        errors,\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n    });\r\n}\r\nfunction createImageAccepted(state, action) {\r\n    const { image } = action;\r\n    return state.merge({\r\n        images: state.get('images').push(image),\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    images: List(),\r\n    errors: Map(),\r\n})();\r\nexport const ImageReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case ImageActionType.CLEAR_USER_SESSION:\r\n        case ImageActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case ImageActionType.SELECT_TENANT:\r\n        case ImageActionType.SELECT_LAB_PLAN:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case ImageActionType.LIST_IMAGES:\r\n                            return listLabPlanImages(state, action);\r\n                        case ImageActionType.LIST_IMAGES_SUCCESS:\r\n                            return listLabPlanImagesSuccess(state, action);\r\n                        case ImageActionType.LIST_IMAGES_ERROR:\r\n                            return listLabPlanImagesError(state, action);\r\n                        case ImageActionType.CREATE_IMAGE_ACCEPTED:\r\n                            return createImageAccepted(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default ImageReducer;\r\n","import { List, Map, Record } from 'immutable';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport Context from '../../action-context';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { UserActionType, } from '../../actions/user/user-actions';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nfunction setPendingProvisioningState(userIds, users, pendingProvisioningState) {\r\n    userIds.map((id) => {\r\n        const index = users.findIndex((user) => caseInsensitiveCultureInvariantCompare(user.id, id) === 0);\r\n        if (index > -1) {\r\n            users = users.update(index, (user) => {\r\n                return { ...user, pendingProvisioningState };\r\n            });\r\n        }\r\n    });\r\n    return users;\r\n}\r\nfunction listUsers(state, action) {\r\n    const { loadState: oldLoadState } = state;\r\n    return state.merge({\r\n        loadError: undefined,\r\n        loadState: oldLoadState === LoadingStoreState.Loaded ? LoadingStoreState.Updating : LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listUsersCancelled(state, action) {\r\n    const { loadState: oldLoadState } = state;\r\n    return state.merge({\r\n        loadState: oldLoadState === LoadingStoreState.Updating ? LoadingStoreState.Loaded : LoadingStoreState.NotStarted,\r\n    });\r\n}\r\nfunction listUsersSuccess(state, action) {\r\n    const { users } = action;\r\n    return state.merge({\r\n        users: List(users),\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listUsersError(state, action) {\r\n    const { error: loadError } = action;\r\n    const { loadState: oldLoadState } = state;\r\n    return state.merge({\r\n        loadError,\r\n        loadState: oldLoadState === LoadingStoreState.Updating\r\n            ? LoadingStoreState.UpdateFailed\r\n            : LoadingStoreState.LoadingFailed,\r\n    });\r\n}\r\nfunction deleteUsers(state, action) {\r\n    return state.merge({\r\n        isDeleting: true,\r\n        deleteErrors: Map(),\r\n    });\r\n}\r\nfunction deleteUsersSuccess(state, action) {\r\n    const { userIds } = action;\r\n    let users = state.get('users');\r\n    userIds.map((_id) => {\r\n        // TODO: why is this called inside a loop?\r\n        users = setPendingProvisioningState(userIds, users, LabServicesModels.ProvisioningState.Deleting);\r\n    });\r\n    return state.merge({\r\n        isDeleting: false,\r\n        users,\r\n    });\r\n}\r\nfunction deleteUsersError(state, action) {\r\n    const { errors } = action;\r\n    const userIds = Object.keys(errors);\r\n    let deleteErrors = state.get('deleteErrors');\r\n    userIds.map((id) => {\r\n        deleteErrors = deleteErrors.set(id, errors[id]);\r\n    });\r\n    return state.merge({\r\n        deleteErrors,\r\n        isDeleting: false,\r\n    });\r\n}\r\nfunction addUsers(state, action) {\r\n    return state.merge({\r\n        isAdding: true,\r\n        addErrors: Map(),\r\n    });\r\n}\r\nfunction addUsersSuccess(state, action) {\r\n    const { users: newUsers } = action;\r\n    let users = state.get('users');\r\n    if (!!newUsers && newUsers.length > 0) {\r\n        newUsers.forEach((user) => {\r\n            if (users.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, user.id) === 0) < 0) {\r\n                users = users.push(user);\r\n            }\r\n        });\r\n    }\r\n    return state.merge({\r\n        isAdding: false,\r\n        users,\r\n    });\r\n}\r\nfunction addUsersError(state, action) {\r\n    const { errors } = action;\r\n    const userIds = Object.keys(errors);\r\n    let addErrors = state.get('addErrors');\r\n    userIds.map((id) => {\r\n        addErrors = addErrors.set(id, errors[id]);\r\n    });\r\n    return state.merge({\r\n        addErrors,\r\n        isAdding: false,\r\n    });\r\n}\r\nfunction inviteUsers(state, action) {\r\n    return state.merge({\r\n        isInviting: true,\r\n        inviteErrors: Map(),\r\n    });\r\n}\r\nfunction inviteUsersSuccess(state, action) {\r\n    const { userIds } = action;\r\n    let users = state.get('users');\r\n    userIds.map((id) => {\r\n        const index = users.findIndex((user) => caseInsensitiveCultureInvariantCompare(user.id, id) === 0);\r\n        if (index > -1) {\r\n            users = users.update(index, (user) => {\r\n                return { ...user, isSendingInivatationPending: true };\r\n            });\r\n        }\r\n    });\r\n    return state.merge({\r\n        isInviting: false,\r\n        users,\r\n    });\r\n}\r\nfunction inviteUsersError(state, action) {\r\n    const { errors } = action;\r\n    const userIds = Object.keys(errors);\r\n    let inviteErrors = state.get('inviteErrors');\r\n    userIds.map((id) => {\r\n        inviteErrors = inviteErrors.set(id, errors[id]);\r\n    });\r\n    return state.merge({\r\n        inviteErrors,\r\n        isInviting: false,\r\n    });\r\n}\r\nfunction clearLoadError(state, action) {\r\n    return state.merge({\r\n        loadError: undefined,\r\n    });\r\n}\r\nfunction clearUserErrors(errors, id) {\r\n    if (!!id) {\r\n        errors = errors.remove(id);\r\n    }\r\n    else {\r\n        errors = Map();\r\n    }\r\n    return errors;\r\n}\r\nfunction clearAddUsersError(state, action) {\r\n    const { id } = action;\r\n    let addErrors = state.get('addErrors');\r\n    addErrors = clearUserErrors(addErrors, id);\r\n    return state.merge({\r\n        addErrors,\r\n    });\r\n}\r\nfunction clearDeleteUsersError(state, action) {\r\n    const { id } = action;\r\n    let deleteErrors = state.get('deleteErrors');\r\n    deleteErrors = clearUserErrors(deleteErrors, id);\r\n    return state.merge({\r\n        deleteErrors,\r\n    });\r\n}\r\nfunction clearInviteUsersError(state, action) {\r\n    const { id } = action;\r\n    let inviteErrors = state.get('inviteErrors');\r\n    inviteErrors = clearUserErrors(inviteErrors, id);\r\n    return state.merge({\r\n        inviteErrors,\r\n    });\r\n}\r\nfunction updateAdditionalQuota(state, action) {\r\n    return state.merge({\r\n        isUpdating: true,\r\n        updateErrors: Map(),\r\n    });\r\n}\r\nfunction updateAdditionalQuotaSuccess(state, action) {\r\n    let users = state.get('users');\r\n    const { users: updatedUsers } = action;\r\n    updatedUsers.map((user) => {\r\n        const index = users.findIndex((o) => caseInsensitiveCultureInvariantCompare(o.id, user.id) === 0);\r\n        if (index === -1) {\r\n            users = users.push(user);\r\n        }\r\n        else {\r\n            users = users.set(index, user);\r\n        }\r\n    });\r\n    return state.merge({\r\n        isUpdating: false,\r\n        users,\r\n    });\r\n}\r\nfunction updateAdditionalQuotaError(state, action) {\r\n    const { errors } = action;\r\n    let updateErrors = state.get('updateErrors');\r\n    for (const [userId, error] of Object.entries(errors)) {\r\n        updateErrors = updateErrors.set(userId, error);\r\n    }\r\n    return state.merge({\r\n        updateErrors,\r\n        isUpdating: false,\r\n    });\r\n}\r\nfunction clearUpdateAdditionalQuotaError(state, action) {\r\n    const { id } = action;\r\n    let updateErrors = state.get('updateErrors');\r\n    if (id) {\r\n        updateErrors = updateErrors.remove(id);\r\n    }\r\n    else {\r\n        updateErrors = Map();\r\n    }\r\n    return state.merge({\r\n        updateErrors,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    users: List(),\r\n    loadState: LoadingStoreState.NotStarted,\r\n    loadError: undefined,\r\n    isAdding: false,\r\n    isDeleting: false,\r\n    isInviting: false,\r\n    isUpdating: false,\r\n    addErrors: Map(),\r\n    deleteErrors: Map(),\r\n    inviteErrors: Map(),\r\n    updateErrors: Map(),\r\n})();\r\nexport const userReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case UserActionType.CLEAR_USER_SESSION:\r\n        case UserActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case UserActionType.SELECT_LAB:\r\n        case UserActionType.SELECT_TENANT:\r\n            return state.merge(initialState);\r\n        default:\r\n            switch (action.context) {\r\n                case Context.VNext:\r\n                    switch (action.type) {\r\n                        case UserActionType.LIST_USERS:\r\n                            return listUsers(state, action);\r\n                        case UserActionType.LIST_USERS_CANCELLED:\r\n                            return listUsersCancelled(state, action);\r\n                        case UserActionType.LIST_USERS_SUCCESS:\r\n                            return listUsersSuccess(state, action);\r\n                        case UserActionType.LIST_USERS_ERROR:\r\n                            return listUsersError(state, action);\r\n                        case UserActionType.DELETE_USERS:\r\n                            return deleteUsers(state, action);\r\n                        case UserActionType.DELETE_USERS_SUCCESS:\r\n                            return deleteUsersSuccess(state, action);\r\n                        case UserActionType.DELETE_USERS_ERROR:\r\n                            return deleteUsersError(state, action);\r\n                        case UserActionType.ADD_USERS:\r\n                            return addUsers(state, action);\r\n                        case UserActionType.ADD_USERS_SUCCESS:\r\n                            return addUsersSuccess(state, action);\r\n                        case UserActionType.ADD_USERS_ERROR:\r\n                            return addUsersError(state, action);\r\n                        case UserActionType.INVITE_USERS:\r\n                            return inviteUsers(state, action);\r\n                        case UserActionType.INVITE_USERS_SUCCESS:\r\n                            return inviteUsersSuccess(state, action);\r\n                        case UserActionType.INVITE_USERS_ERROR:\r\n                            return inviteUsersError(state, action);\r\n                        case UserActionType.CLEAR_LOAD_USERS_ERROR:\r\n                            return clearLoadError(state, action);\r\n                        case UserActionType.CLEAR_ADD_USERS_ERROR:\r\n                            return clearAddUsersError(state, action);\r\n                        case UserActionType.CLEAR_DELETE_USERS_ERROR:\r\n                            return clearDeleteUsersError(state, action);\r\n                        case UserActionType.CLEAR_INVITE_USERS_ERROR:\r\n                            return clearInviteUsersError(state, action);\r\n                        case UserActionType.UPDATE_ADDITIONAL_QUOTA:\r\n                            return updateAdditionalQuota(state, action);\r\n                        case UserActionType.UPDATE_ADDITIONAL_QUOTA_SUCCESS:\r\n                            return updateAdditionalQuotaSuccess(state, action);\r\n                        case UserActionType.UPDATE_ADDITIONAL_QUOTA_ERROR:\r\n                            return updateAdditionalQuotaError(state, action);\r\n                        case UserActionType.CLEAR_UPDATE_ADDITIONAL_QUOTA_ERROR:\r\n                            return clearUpdateAdditionalQuotaError(state, action);\r\n                        default:\r\n                            return state;\r\n                    }\r\n                default:\r\n                    return state;\r\n            }\r\n    }\r\n};\r\nexport default userReducer;\r\n","import { Record } from 'immutable';\r\nimport { AuthenticationState } from '../../data/models/identity';\r\nimport { LtiActionType, } from '../actions/lti/lti-actions';\r\nfunction ltiSignIn(state, action) {\r\n    return state.merge({\r\n        authenticationState: AuthenticationState.Authenticating,\r\n    });\r\n}\r\nfunction ltiSignInSuccess(state, action) {\r\n    return state.merge({\r\n        authenticationState: AuthenticationState.Authenticated,\r\n    });\r\n}\r\nfunction ltiSignInError(state, action) {\r\n    const { error: initializeError } = action;\r\n    return state.merge({\r\n        authenticationState: AuthenticationState.AuthenticationError,\r\n        initializeError,\r\n    });\r\n}\r\nfunction setLtiContext(state, action) {\r\n    const { ltiContext } = action;\r\n    return state.merge({\r\n        ltiContext,\r\n    });\r\n}\r\nfunction setMembershipUrl(state, action) {\r\n    const { membershipUrl } = action;\r\n    return state.merge({\r\n        membershipUrl,\r\n    });\r\n}\r\nfunction setLtiRoles(state, action) {\r\n    const { roles } = action;\r\n    return state.merge({\r\n        roles,\r\n    });\r\n}\r\nfunction ltiRequestWebStorageAccess(state, action) {\r\n    return state.merge({\r\n        requestWebStorageAccessError: undefined,\r\n    });\r\n}\r\nfunction ltiRequestWebStorageAccessSuccess(state, action) {\r\n    return state.merge({\r\n        hasGrantedWebStorageAccess: true,\r\n    });\r\n}\r\nfunction ltiRequestWebStorageAccessError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        requestWebStorageAccessError: error,\r\n    });\r\n}\r\nfunction setLmsInstance(state, action) {\r\n    const { lmsInstance } = action;\r\n    return state.merge({\r\n        lmsInstance,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    authenticationState: AuthenticationState.NotStarted,\r\n    initializeError: undefined,\r\n    roles: [],\r\n    membershipUrl: '',\r\n    ltiContext: undefined,\r\n    requestWebStorageAccessError: undefined,\r\n    hasGrantedWebStorageAccess: false,\r\n    lmsInstance: '',\r\n})();\r\nexport const ltiReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case LtiActionType.LTI_SIGN_IN:\r\n            return ltiSignIn(state, action);\r\n        case LtiActionType.LTI_SIGN_IN_SUCCESS:\r\n            return ltiSignInSuccess(state, action);\r\n        case LtiActionType.LTI_SIGN_IN_ERROR:\r\n            return ltiSignInError(state, action);\r\n        case LtiActionType.SET_LTI_CONTEXT:\r\n            return setLtiContext(state, action);\r\n        case LtiActionType.SET_LTI_ROLES:\r\n            return setLtiRoles(state, action);\r\n        case LtiActionType.SET_MEMBERSHIP_URL:\r\n            return setMembershipUrl(state, action);\r\n        case LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS:\r\n            return ltiRequestWebStorageAccess(state, action);\r\n        case LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS_SUCCESS:\r\n            return ltiRequestWebStorageAccessSuccess(state, action);\r\n        case LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS_ERROR:\r\n            return ltiRequestWebStorageAccessError(state, action);\r\n        case LtiActionType.SET_LMS_INSTANCE:\r\n            return setLmsInstance(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default ltiReducer;\r\n","import { CommonActionType } from '../../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../../lab-parent-resource/lab-parent-resource-actions';\r\nexport const SkuActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    LIST_SKU_DATA: 'LIST_SKU_DATA',\r\n    LIST_SKU_DATA_SUCCESS: 'LIST_SKU_DATA_SUCCESS',\r\n    LIST_SKU_DATA_ERROR: 'LIST_SKU_DATA_ERROR',\r\n};\r\n","import { Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { SkuActionType, } from '../../actions/vnext/sku/sku-actions';\r\nfunction listSkuData(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loading,\r\n        error: undefined,\r\n    });\r\n}\r\nfunction listSkuDataSuccess(state, action) {\r\n    const { data } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        skus: data,\r\n    });\r\n}\r\nfunction listSkuDataError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n        skus: undefined,\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    error: undefined,\r\n    skus: [],\r\n})();\r\nexport const skuReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case SkuActionType.SELECT_TENANT:\r\n        case SkuActionType.CLEAR_USER_SESSION:\r\n        case SkuActionType.SELECT_LAB_PARENT_RESOURCE:\r\n            return state.merge(initialState);\r\n        case SkuActionType.LIST_SKU_DATA:\r\n            return listSkuData(state, action);\r\n        case SkuActionType.LIST_SKU_DATA_SUCCESS:\r\n            return listSkuDataSuccess(state, action);\r\n        case SkuActionType.LIST_SKU_DATA_ERROR:\r\n            return listSkuDataError(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default skuReducer;\r\n","import { CommonActionType } from '../../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../../lab-parent-resource/lab-parent-resource-actions';\r\nimport { CommonLabPlanActionType } from '../../lab-plan/lab-plan-actions';\r\nimport { CommonLabActionType } from '../../lab/lab-actions';\r\nexport const UsageActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabPlanActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonLabActionType,\r\n    LIST_USAGE_DATA: 'LIST_USAGE_DATA',\r\n    LIST_REGION_USAGE_DATA_SUCCESS: 'LIST_REGION_USAGE_DATA_SUCCESS',\r\n    LIST_USAGE_DATA_ERROR: 'LIST_USAGE_DATA_ERROR',\r\n    LIST_USAGE_DATA_CANCELLED: 'LIST_USAGE_DATA_CANCELLED',\r\n    LIST_USAGE_DATA_SUCCESS: 'LIST_USAGE_DATA_SUCCESS',\r\n};\r\n","import { Map, Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { UsageActionType, } from '../../actions/vnext/usage/usage-actions';\r\nfunction listUsage(state, action) {\r\n    return state.merge({\r\n        error: undefined,\r\n        loadState: LoadingStoreState.Loading,\r\n    });\r\n}\r\nfunction listRegionUsageSuccess(state, action) {\r\n    const { data, region } = action;\r\n    let usageByRegion = state.get('usageByRegion');\r\n    usageByRegion = usageByRegion?.set(region, data);\r\n    return state.merge({\r\n        usageByRegion,\r\n    });\r\n}\r\nfunction listUsageError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n    });\r\n}\r\nfunction listUsageSuccess(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n    });\r\n}\r\nfunction listUsageCancelled(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.NotStarted,\r\n        usageByRegion: Map(),\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    error: undefined,\r\n    usageByRegion: Map(),\r\n})();\r\nexport const usageReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case UsageActionType.SELECT_TENANT:\r\n        case UsageActionType.SELECT_LAB:\r\n        case UsageActionType.SELECT_LAB_PLAN:\r\n        case UsageActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case UsageActionType.CLEAR_USER_SESSION:\r\n            return state.merge(initialState);\r\n        case UsageActionType.LIST_USAGE_DATA:\r\n            return listUsage(state, action);\r\n        case UsageActionType.LIST_REGION_USAGE_DATA_SUCCESS:\r\n            return listRegionUsageSuccess(state, action);\r\n        case UsageActionType.LIST_USAGE_DATA_ERROR:\r\n            return listUsageError(state, action);\r\n        case UsageActionType.LIST_USAGE_DATA_SUCCESS:\r\n            return listUsageSuccess(state, action);\r\n        case UsageActionType.LIST_USAGE_DATA_CANCELLED:\r\n            return listUsageCancelled(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default usageReducer;\r\n","import { CommonActionType } from '../../common/common-actions';\r\nimport { CommonLabParentResourceActionType } from '../../lab-parent-resource/lab-parent-resource-actions';\r\nimport { CommonLabPlanActionType } from '../../lab-plan/lab-plan-actions';\r\nimport { CommonLabActionType } from '../../lab/lab-actions';\r\nexport const PriceActionType = {\r\n    ...CommonActionType,\r\n    ...CommonLabParentResourceActionType,\r\n    ...CommonLabActionType,\r\n    ...CommonLabPlanActionType,\r\n    LIST_PRICE_DATA: 'LIST_PRICE_DATA',\r\n    LIST_PRICE_DATA_SUCCESS: 'LIST_PRICE_DATA_SUCCESS',\r\n    LIST_PRICE_DATA_ERROR: 'LIST_PRICE_DATA_ERROR',\r\n    LIST_PRICE_DATA_CANCELLED: 'LIST_PRICE_DATA_CANCELLED',\r\n};\r\n","import { Map, Record } from 'immutable';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { PriceActionType, } from '../../actions/vnext/price/price-actions';\r\nfunction listPriceData(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loading,\r\n        error: undefined,\r\n    });\r\n}\r\nfunction listPriceDataSuccess(state, action) {\r\n    const { data } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.Loaded,\r\n        prices: data,\r\n    });\r\n}\r\nfunction listPriceDataError(state, action) {\r\n    const { error } = action;\r\n    return state.merge({\r\n        loadState: LoadingStoreState.LoadingFailed,\r\n        error,\r\n        prices: undefined,\r\n    });\r\n}\r\nfunction listPriceDataCancelled(state, action) {\r\n    return state.merge({\r\n        loadState: LoadingStoreState.NotStarted,\r\n        prices: Map(),\r\n    });\r\n}\r\nconst initialState = Record({\r\n    loadState: LoadingStoreState.NotStarted,\r\n    error: undefined,\r\n    prices: Map(),\r\n})();\r\nexport const priceReducer = (state = initialState, action) => {\r\n    switch (action.type) {\r\n        case PriceActionType.SELECT_TENANT:\r\n        case PriceActionType.SELECT_LAB:\r\n        case PriceActionType.SELECT_LAB_PLAN:\r\n        case PriceActionType.SELECT_LAB_PARENT_RESOURCE:\r\n        case PriceActionType.CLEAR_USER_SESSION:\r\n        case PriceActionType.LIST_PRICE_DATA:\r\n            return listPriceData(state, action);\r\n        case PriceActionType.LIST_PRICE_DATA_SUCCESS:\r\n            return listPriceDataSuccess(state, action);\r\n        case PriceActionType.LIST_PRICE_DATA_ERROR:\r\n            return listPriceDataError(state, action);\r\n        case PriceActionType.LIST_PRICE_DATA_CANCELLED:\r\n            return listPriceDataCancelled(state, action);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\nexport default priceReducer;\r\n","import { connectRouter } from 'connected-react-router/immutable';\r\nimport { combineReducers } from 'redux-immutable';\r\nimport { registerReducer } from './register-reducer';\r\nimport { userEnvironmentReducer } from './user-environment-reducer';\r\nimport { commonReducer } from './common-reducer';\r\nimport { labReducer } from './lab-reducer';\r\nimport { labAccountReducer } from './lab-account-reducer.';\r\nimport { identityReducer } from './identity-reducer';\r\nimport { scheduleReducer } from './schedule-reducer';\r\nimport { templateReducer } from './template-reducer';\r\nimport { subscriptionReducer } from './subscription-reducer';\r\nimport { galleryImageReducer } from './gallery-image-reducer';\r\nimport { sharedImageReducer } from './shared-image-reducer';\r\nimport { userReducer } from './user-reducer';\r\nimport { environmentReducer } from './environment-reducer';\r\nimport { pricingAndAvailabilityReducer } from './pricing-and-availability-reducer';\r\nimport { coreLimitReducer } from './core-limit-reducer';\r\nimport { groupReducer } from './group-reducer';\r\nimport { teamsReducer } from './teams-reducers';\r\nimport { TenantReducer } from './tenant-reducer';\r\nimport { pricingAndAvailabilityReducer as vNextpricingAndAvailabilityReducer } from './vnext/pricing-and-availability-reducer';\r\nimport { userVirtualMachineReducer as vNextUserVirtualMachineReducer } from './vnext/user-virtual-machine-reducer';\r\nimport { registerReducer as vNextRegisterReducer } from './vnext/register-reducer';\r\nimport { labReducer as vNextLabReducer } from './vnext/lab-reducer';\r\nimport { scheduleReducer as vNextSchedulerReducer } from './vnext/schedule-reducer';\r\nimport LabParentResourceReducer from './lab-parent-resource-reducer';\r\nimport coreUsageReducer from './vnext/core-usage-reducer';\r\nimport labPlanReducer from './vnext/lab-plan-reducer';\r\nimport imageReducer from './vnext/image-reducer';\r\nimport vNextVirtualMachineReducer from './vnext/virtual-machine-reducer';\r\nimport vNextUserReducer from './vnext/user-reducer';\r\nimport ltiReducer from './lti-reducer';\r\nimport skuReducer from './vnext/sku-reducer';\r\nimport usageReducer from './vnext/usage-reducer';\r\nimport priceReducer from './vnext/price-reducer';\r\n// NOTE: TypeScript does not handle these types well\r\nexport const combinedReducer = (history) => combineReducers({\r\n    registerStore: registerReducer,\r\n    identityStore: identityReducer,\r\n    userEnvironmentStore: userEnvironmentReducer,\r\n    commonStore: commonReducer,\r\n    galleryImageStore: galleryImageReducer,\r\n    sharedImageStore: sharedImageReducer,\r\n    labStore: labReducer,\r\n    labAccountStore: labAccountReducer,\r\n    scheduleStore: scheduleReducer,\r\n    templateStore: templateReducer,\r\n    subscriptionStore: subscriptionReducer,\r\n    coreLimitStore: coreLimitReducer,\r\n    userStore: userReducer,\r\n    environmentStore: environmentReducer,\r\n    pricingAndAvailabilityStore: pricingAndAvailabilityReducer,\r\n    groupStore: groupReducer,\r\n    teamsStore: teamsReducer,\r\n    tenantStore: TenantReducer,\r\n    router: connectRouter(history),\r\n    ltiStore: ltiReducer,\r\n    //vNext reducers\r\n    vNextPricingAndAvailabilityStore: vNextpricingAndAvailabilityReducer,\r\n    vNextUserVirtualMachineStore: vNextUserVirtualMachineReducer,\r\n    vNextRegisterStore: vNextRegisterReducer,\r\n    vNextLabStore: vNextLabReducer,\r\n    vNextScheduleStore: vNextSchedulerReducer,\r\n    labParentResourceStore: LabParentResourceReducer,\r\n    labPlanStore: labPlanReducer,\r\n    vNextCoreUsageStore: coreUsageReducer,\r\n    vNextImageStore: imageReducer,\r\n    vNextVirtualMachineStore: vNextVirtualMachineReducer,\r\n    vNextUserStore: vNextUserReducer,\r\n    vNextSkuStore: skuReducer,\r\n    vNextUsageStore: usageReducer,\r\n    vNextPriceStore: priceReducer,\r\n});\r\nexport default combinedReducer;\r\n","import { ManagedLabsClient } from '@azure-lab-services/ml-ts';\r\nimport { TokenCredentials, RestError } from 'ms-rest-js';\r\nimport Constants from '../../utils/constants';\r\nimport Settings from '../../settings/settings';\r\nimport { environmentType, EnvironmentType } from '../../utils/environment';\r\nimport { getAcceptLanguage } from '../../language/languages';\r\nimport { LabServicesClient } from 'lab-services';\r\nimport { TokenCredentials as AzureTokenCredentials } from '@azure/ms-rest-js';\r\nlet baseUri = Settings.ArmUrl;\r\nlet baseUriVNext = Settings.ArmUrlVNext;\r\n/**\r\n * Performs a get against ARM\r\n * in most scenarios, you should use the ML Client instead.\r\n * @param relativeUrl relative url to the management endpoint.\r\n * @param tenantId tenant the token should be valid for.\r\n */\r\nexport const get = async (relativeUrl, accessToken, locale, language) => {\r\n    const headers = new Headers();\r\n    headers.append('Authorization', 'Bearer ' + accessToken);\r\n    headers.append('Accept-Language', getAcceptLanguage(locale, language));\r\n    const url = `${baseUri}${relativeUrl}`;\r\n    const response = await fetch(url, {\r\n        headers: headers,\r\n    });\r\n    if (response.status >= 400) {\r\n        const errorResponse = (await response.json());\r\n        const { Error } = errorResponse;\r\n        throw new RestError(Error?.Message || 'A request error occurred.', Error?.Code || response.statusText);\r\n    }\r\n    return response;\r\n};\r\n/**\r\n * Performs a post operation against ARM.\r\n * in most scenarios, you should use the ML Client instead.\r\n * @param relativeUrl relative url to the management endpoint.\r\n * @param body body of the post request.\r\n * @param tenantId tenant the token should be valid for.\r\n */\r\nexport const post = async (relativeUrl, accessToken, locale, language, body) => {\r\n    const headers = new Headers();\r\n    headers.append('Content-Type', 'application/json');\r\n    headers.append('Authorization', `Bearer ${accessToken}`);\r\n    headers.append('Accept-Language', getAcceptLanguage(locale, language));\r\n    const url = `${baseUri}${relativeUrl}`;\r\n    const response = await fetch(url, {\r\n        body: body,\r\n        headers: headers,\r\n        method: 'POST',\r\n    });\r\n    if (response.status >= 400) {\r\n        const errorResponse = (await response.json());\r\n        const { Error } = errorResponse;\r\n        throw new RestError(Error?.Message || 'A request error occurred.', Error?.Code || response.statusText);\r\n    }\r\n    return response;\r\n};\r\n/**\r\n * Get a client for Managed Labs to perform operations.\r\n * @param subscriptionId Subscription id targeted for the operation.\r\n */\r\nexport const getMlClient = (subscriptionId, accessToken, locale, language) => {\r\n    const azureToken = new TokenCredentials(accessToken);\r\n    const client = new ManagedLabsClient(azureToken, subscriptionId, baseUri, {\r\n        acceptLanguage: getAcceptLanguage(locale, language),\r\n    });\r\n    return adjustForEnvironment(client);\r\n};\r\nexport const enableProxy = () => {\r\n    baseUri = Settings.ArmProxyUrl;\r\n    baseUriVNext = Settings.ArmProxyUrl;\r\n};\r\nexport const disableProxy = () => {\r\n    baseUri = Settings.ArmUrl;\r\n    baseUriVNext = Settings.ArmUrlVNext;\r\n};\r\nconst adjustForEnvironment = (client) => {\r\n    if (client.subscriptionId === Constants.NoSubscriptionId) {\r\n        switch (environmentType) {\r\n            case EnvironmentType.INSIDERS: {\r\n                client.apiVersion = '2017-12-01-beta';\r\n                break;\r\n            }\r\n            case EnvironmentType.DEV: // i.e. local development\r\n            case EnvironmentType.LOCAL: {\r\n                client.apiVersion = '2017-12-01-preview';\r\n                break;\r\n            }\r\n            default: {\r\n                // Do nothing, default to production endpoint.\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return client;\r\n};\r\nexport const createVNextArmApiClient = (subscriptionId, accessToken, locale, language) => {\r\n    const azureToken = new AzureTokenCredentials(accessToken);\r\n    const client = new LabServicesClient(azureToken, subscriptionId, {\r\n        baseUri: baseUriVNext,\r\n        acceptLanguage: getAcceptLanguage(locale, language),\r\n    });\r\n    return client;\r\n};\r\nconst ArmProvider = {\r\n    get,\r\n    post,\r\n    getMlClient,\r\n    enableProxy,\r\n    disableProxy,\r\n    createVNextArmApiClient,\r\n};\r\nexport default ArmProvider;\r\n","import { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { PowerState, EnvironmentState, VmState, OperatingSystem } from '../models/environment-common';\r\nimport { OperationResultStatus, ProvisioningState } from '../models/common';\r\nexport function processPowerState(lastKnownPowerState) {\r\n    if (!lastKnownPowerState) {\r\n        return PowerState.Unknown;\r\n    }\r\n    const processedPowerState = lastKnownPowerState\r\n        .trim()\r\n        .toLowerCase()\r\n        .replace('powerstate/', '')\r\n        .replace('deallocating', PowerState.Stopping)\r\n        .replace('deallocated', PowerState.Stopped);\r\n    return processedPowerState;\r\n}\r\nexport function processEnvironmentState(environmentState) {\r\n    if (!environmentState) {\r\n        return EnvironmentState.Unknown;\r\n    }\r\n    return environmentState.trim().toLowerCase();\r\n}\r\nexport function processVmState(powerState, state, latestOperationResult) {\r\n    if (state === EnvironmentState.Creating || state === ProvisioningState.Creating) {\r\n        return VmState.Creating;\r\n    }\r\n    else if (state === EnvironmentState.Failed || state === ProvisioningState.Failed) {\r\n        return VmState.Failed;\r\n    }\r\n    else if (state === ProvisioningState.Deleting) {\r\n        return VmState.Deleting;\r\n    }\r\n    if (!latestOperationResult) {\r\n        return VmState.Unknown;\r\n    }\r\n    const { status, requestUri } = latestOperationResult;\r\n    const activeRequestUri = status === OperationResultStatus.Running && requestUri ? requestUri.trim().toLowerCase() : '';\r\n    if (activeRequestUri.indexOf('/start') > -1) {\r\n        return VmState.Starting;\r\n    }\r\n    else if (activeRequestUri.indexOf('/stop') > -1) {\r\n        return VmState.Stopping;\r\n    }\r\n    else if (activeRequestUri.indexOf('/resetpassword') > -1) {\r\n        return VmState.ResettingPassword;\r\n    }\r\n    else if (powerState === PowerState.Stopping) {\r\n        return VmState.Stopping;\r\n    }\r\n    else if (powerState === PowerState.Starting) {\r\n        return VmState.Starting;\r\n    }\r\n    else if (powerState === PowerState.Stopped) {\r\n        return VmState.Stopped;\r\n    }\r\n    else if (powerState === PowerState.Running) {\r\n        return VmState.Running;\r\n    }\r\n    // defaulting to stopped, could also return unknown or none\r\n    return VmState.Stopped;\r\n}\r\nexport function processProvisioningState(provisioningState) {\r\n    if (!provisioningState) {\r\n        return ProvisioningState.None;\r\n    }\r\n    return provisioningState.trim().toLowerCase();\r\n}\r\nexport function processOperationSystem(osType) {\r\n    return osType === Ml.OsType.Linux ? OperatingSystem.Linux : OperatingSystem.Windows;\r\n}\r\n","import Constants from '../../utils/constants';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { VmState } from '../models/environment-common';\r\nimport { ProvisioningState } from '../models/common';\r\nimport { getMlClient } from './arm-data-provider';\r\nimport { processPowerState, processEnvironmentState, processProvisioningState, processVmState, processOperationSystem, } from '../helpers/environment-helpers';\r\nfunction _convertEnvironmentFromListAllEnvironmentDetails(serverEnvironment) {\r\n    const { lastKnownPowerState: powerState, environmentState: envState, id, name, description, latestOperationResult, passwordLastReset, provisioningState: provState, virtualMachineDetails, usageQuota, totalUsage, runningInSchedule, sharedPasswordEnabled, osType, supportInfo, } = serverEnvironment;\r\n    const lastKnownPowerState = processPowerState(powerState);\r\n    const environmentState = processEnvironmentState(envState);\r\n    const provisioningState = processProvisioningState(provState);\r\n    const vmState = processVmState(lastKnownPowerState, environmentState, latestOperationResult);\r\n    const vmProvisioningState = virtualMachineDetails\r\n        ? processProvisioningState(virtualMachineDetails.provisioningState)\r\n        : ProvisioningState.None;\r\n    const os = processOperationSystem(osType);\r\n    return {\r\n        id: id || '',\r\n        name,\r\n        description,\r\n        lastKnownPowerState,\r\n        latestOperationResult,\r\n        useSharedPassword: sharedPasswordEnabled,\r\n        passwordLastReset,\r\n        provisioningState,\r\n        vmState,\r\n        pendingVmState: VmState.None,\r\n        vmUsername: virtualMachineDetails ? virtualMachineDetails.userName : undefined,\r\n        vmSshAuthority: virtualMachineDetails ? virtualMachineDetails.sshAuthority : undefined,\r\n        vmSshBrowserUrl: virtualMachineDetails ? virtualMachineDetails.sshInBrowserUrl : undefined,\r\n        vmRdpAuthority: virtualMachineDetails ? virtualMachineDetails.rdpAuthority : undefined,\r\n        vmRdpBrowserUrl: virtualMachineDetails ? virtualMachineDetails.rdpInBrowserUrl : undefined,\r\n        vmProvisioningState,\r\n        usageQuota,\r\n        totalUsage,\r\n        environmentState,\r\n        runningInSchedule: !!runningInSchedule,\r\n        os,\r\n        supportInfo,\r\n    };\r\n}\r\nexport async function listEnvironments(accessToken, locale, language, aadGroupId) {\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    const options = {\r\n        customHeaders: !!aadGroupId ? { 'x-ml-aad-group-id': aadGroupId } : undefined,\r\n    };\r\n    const response = await mlClient.globalUsers.listAllEnvironments(Constants.NoUsername, options);\r\n    if (!response || !response.environments) {\r\n        return [];\r\n    }\r\n    const environments = response.environments.map((environment) => _convertEnvironmentFromListAllEnvironmentDetails(environment));\r\n    return environments;\r\n}\r\nexport async function start(environmentId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await mlClient.globalUsers.beginStartEnvironment(Constants.NoUsername, {\r\n        environmentId,\r\n    });\r\n}\r\nexport async function stop(environmentId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await mlClient.globalUsers.beginStopEnvironment(Constants.NoUsername, {\r\n        environmentId,\r\n    });\r\n}\r\nexport async function resetPassword(environmentId, username, password, accessToken, locale, language) {\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    const resourceId = new ResourceId(environmentId);\r\n    await mlClient.globalUsers.beginResetPassword(resourceId.name, {\r\n        environmentId,\r\n        username: username.trim(),\r\n        password: password.trim(),\r\n    });\r\n}\r\nconst UserEnvironmentProvider = {\r\n    listEnvironments,\r\n    start,\r\n    stop,\r\n    resetPassword,\r\n};\r\nexport default UserEnvironmentProvider;\r\n","import memoize from 'memoize-one';\r\nexport const getUserEnvironment = memoize((state, environmentId) => {\r\n    const envStore = state.get('userEnvironmentStore');\r\n    const environments = envStore.get('environments');\r\n    const env = environments.find((e) => e.id === environmentId);\r\n    return env;\r\n});\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport { takeEvery, select, put, call, takeLatest, all } from 'redux-saga/effects';\r\nimport queryString from 'query-string';\r\nimport { Feature } from '../../../utils/features';\r\nimport { trackException, enableConsoleLog, disableConsoleLog } from '../../../utils/telemetry/telemetry-channel';\r\nimport { CommonActionType, } from '../../actions/common/common-actions';\r\nimport { enableFeature as enableFeatureActionCreator, enableFeatureError, enableFeatureSuccess, processUrlFeaturesError, processUrlFeaturesSuccess, } from '../../actions/common/common-action-creators';\r\nimport { getCurrentReturnUrl } from '../../selectors/identity-selector';\r\nimport { getSearch, getRoute } from '../../selectors/route-selector';\r\nimport Routes from '../../../utils/routes';\r\nexport const queryParamPrefix = 'feature_';\r\nexport function isFeatureParam(featureParam) {\r\n    return featureParam.trim().toLowerCase().startsWith(queryParamPrefix);\r\n}\r\nexport function formatFeatureParam(feature) {\r\n    return `${queryParamPrefix}${feature.trim().toLowerCase()}`;\r\n}\r\nexport function getFeature(featureParam) {\r\n    const feature = featureParam.trim().toLowerCase().slice(queryParamPrefix.length);\r\n    return feature;\r\n}\r\nexport function resolveUrlFeature(searchParams, featureParam) {\r\n    const urlParams = Object.keys(searchParams);\r\n    for (let i = 0; i < urlParams.length; ++i) {\r\n        const param = urlParams[i];\r\n        if (param.trim().toLowerCase() === featureParam.trim().toLowerCase()) {\r\n            return param;\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\nexport function* processUrlFeature(featureParam) {\r\n    try {\r\n        const isFeatureFlag = yield call(isFeatureParam, featureParam);\r\n        if (isFeatureFlag) {\r\n            const feature = yield call(getFeature, featureParam);\r\n            yield put(enableFeatureActionCreator(feature));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* processUrlFeatures(action) {\r\n    try {\r\n        let search = yield select(getSearch);\r\n        const route = yield select(getRoute);\r\n        if (route === Routes.SignInReturn) {\r\n            // in the case of interactive sign in, getSearch will be empty and we rely on getting params from returnUrl\r\n            const returnUrl = yield select(getCurrentReturnUrl);\r\n            const index = returnUrl.lastIndexOf('?');\r\n            if (index > -1) {\r\n                search = returnUrl.substring(index);\r\n            }\r\n        }\r\n        const searchParams = yield call(queryString.parse, search);\r\n        yield all(Object.keys(searchParams).map((param) => call(processUrlFeature, param)));\r\n        yield put(processUrlFeaturesSuccess());\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n        yield put(processUrlFeaturesError());\r\n    }\r\n}\r\nexport function* enableFeature(action) {\r\n    try {\r\n        const { feature } = action;\r\n        if (feature === Feature.Dev) {\r\n            yield call(enableConsoleLog);\r\n        }\r\n        const currentSearch = yield select(getSearch);\r\n        const featureParam = yield call(formatFeatureParam, feature);\r\n        const searchParams = yield call(queryString.parse, currentSearch);\r\n        const urlFeatureParam = yield call(resolveUrlFeature, searchParams, featureParam);\r\n        if (!urlFeatureParam) {\r\n            searchParams[featureParam] = 'true';\r\n            const pathname = yield select(getRoute);\r\n            const search = yield call(queryString.stringify, searchParams);\r\n            yield put(routerActions.replace({ pathname, search }));\r\n        }\r\n        yield put(enableFeatureSuccess());\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n        yield put(enableFeatureError());\r\n    }\r\n}\r\nexport function* disableFeature(action) {\r\n    try {\r\n        const { feature } = action;\r\n        if (feature === Feature.Dev) {\r\n            yield call(disableConsoleLog);\r\n        }\r\n        const currentSearch = yield select(getSearch);\r\n        const featureParam = yield call(formatFeatureParam, feature);\r\n        const searchParams = yield call(queryString.parse, currentSearch);\r\n        const urlFeatureParam = yield call(resolveUrlFeature, searchParams, featureParam);\r\n        if (!!urlFeatureParam) {\r\n            delete searchParams[urlFeatureParam];\r\n            const pathname = yield select(getRoute);\r\n            const search = yield call(queryString.stringify, searchParams);\r\n            yield put(routerActions.replace({ pathname, search }));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* processUrlFeaturesSaga() {\r\n    yield takeLatest(CommonActionType.PROCESS_URL_FEATURES, processUrlFeatures);\r\n}\r\nexport function* enableFeatureSaga() {\r\n    yield takeEvery(CommonActionType.ENABLE_FEATURE, enableFeature);\r\n}\r\nexport function* disableFeatureSaga() {\r\n    yield takeEvery(CommonActionType.DISABLE_FEATURE, disableFeature);\r\n}\r\n","import * as msTeams from '@microsoft/teams-js';\r\nimport { formatFeatureParam } from '../../redux/sagas/common/features';\r\nimport Feature from '../../utils/features';\r\nimport { Host } from '../../utils/hosts';\r\nimport Routes from '../../utils/routes';\r\nimport { getLabListRoute } from '../helpers/route-helpers';\r\nimport ArmProvider from './arm-data-provider';\r\nimport { getAccessToken as getAccessTokenMsal, loginSilent as loginSilentMsal, clearCacheForScope as clearCacheForScopeMsal, } from './msal-provider';\r\nlet useMsal = false;\r\nexport function notifyAppLoaded() {\r\n    msTeams.appInitialization.notifyAppLoaded();\r\n}\r\nexport function notifySuccess() {\r\n    msTeams.appInitialization.notifySuccess();\r\n}\r\n// TODO: Actually wire this up\r\nexport function notifyAuthFailure() {\r\n    const request = {\r\n        reason: 'AuthFailed',\r\n    };\r\n    msTeams.appInitialization.notifyFailure(request);\r\n}\r\nexport async function disableSaveButton() {\r\n    msTeams.settings.setValidityState(false);\r\n}\r\nexport async function configureTab(labParentId, shouldAddVNextFeatureWQueryParam) {\r\n    const { groupId, tid } = await getContext();\r\n    const labParentRoute = getLabListRoute(labParentId);\r\n    const baseUrl = `${window.location.origin}${labParentRoute}`;\r\n    let contentUrl = `${baseUrl}?host=${encodeURIComponent(Host.Teams)}`;\r\n    let websiteUrl = `${baseUrl}?referrer=${encodeURIComponent(Host.Teams)}&tenantId=${tid}&groupId=${encodeURIComponent(groupId || '')}`;\r\n    if (shouldAddVNextFeatureWQueryParam) {\r\n        const featureParam = formatFeatureParam(Feature.VNext);\r\n        contentUrl = `${contentUrl}&${featureParam}=true`;\r\n        websiteUrl = `${websiteUrl}&${featureParam}=true`;\r\n    }\r\n    msTeams.settings.registerOnSaveHandler((saveEvent) => {\r\n        msTeams.settings.setSettings({\r\n            // set the url that iframe loads\r\n            contentUrl,\r\n            // display the web icon on the top app bar and set the url for the external link\r\n            websiteUrl,\r\n            entityId: 'AzureLabs',\r\n        });\r\n        saveEvent.notifySuccess();\r\n    });\r\n    msTeams.settings.setValidityState(true);\r\n}\r\nexport function clearCacheForScope(accessToken) {\r\n    if (useMsal) {\r\n        clearCacheForScopeMsal(accessToken);\r\n    }\r\n    // no cache clear for teams SSO tokens unfortunately, so we don't do anything\r\n}\r\nexport async function getAccessToken(scopes, tenantId, returnUrl) {\r\n    if (useMsal) {\r\n        const result = await getAccessTokenMsal(scopes, tenantId);\r\n        return result;\r\n    }\r\n    const promise = new Promise((resolve, reject) => {\r\n        const request = {\r\n            successCallback: (token) => {\r\n                const result = {\r\n                    isRedirecting: false,\r\n                    accessToken: token,\r\n                };\r\n                resolve(result);\r\n            },\r\n            failureCallback: (reason) => reject(new Error(reason)),\r\n            silent: !returnUrl,\r\n        };\r\n        msTeams.authentication.getAuthToken(request);\r\n    });\r\n    const result = await promise;\r\n    return result;\r\n}\r\nexport async function loginSilent(tenantId) {\r\n    if (useMsal) {\r\n        const result = await loginSilentMsal(tenantId);\r\n        return result;\r\n    }\r\n    const context = await getContext();\r\n    const account = {\r\n        accountIdentifier: '',\r\n        homeAccountIdentifier: '',\r\n        idToken: {},\r\n        sid: '',\r\n        environment: '',\r\n        userName: context.loginHint || '',\r\n        name: '',\r\n        idTokenClaims: {\r\n            tid: context.tid || '',\r\n        },\r\n    };\r\n    const result = {\r\n        isAuthenticated: true,\r\n        account,\r\n    };\r\n    return result;\r\n}\r\nexport async function initialize() {\r\n    const promise = new Promise((resolve, reject) => {\r\n        try {\r\n            if (!msTeams.ParentAppWindow) {\r\n                reject(new Error('Teams initialization failed. Not running in a Teams host.'));\r\n            }\r\n            else {\r\n                // NOTE: This has no failure callback, should we fail after a timeout?\r\n                // Teams will do that for us since we won't notifySuccess, but good to\r\n                // keep this in mind.\r\n                msTeams.initialize(async () => {\r\n                    try {\r\n                        await configureArmAndAuth();\r\n                        resolve();\r\n                    }\r\n                    catch (err) {\r\n                        reject(err);\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        catch (err) {\r\n            reject(err);\r\n        }\r\n    });\r\n    return promise;\r\n}\r\nexport async function configureArmAndAuth() {\r\n    const msalSignInResult = await loginSilentMsal();\r\n    useMsal = msalSignInResult.isAuthenticated;\r\n    if (!useMsal) {\r\n        ArmProvider.enableProxy();\r\n    }\r\n    else {\r\n        ArmProvider.disableProxy();\r\n    }\r\n}\r\nexport async function getContext() {\r\n    const promise = new Promise((resolve, reject) => {\r\n        try {\r\n            msTeams.getContext((context) => {\r\n                resolve(context);\r\n            });\r\n        }\r\n        catch (err) {\r\n            reject(err);\r\n        }\r\n    });\r\n    const context = await promise;\r\n    return context;\r\n}\r\nexport function requestUserConsentOrMfa() {\r\n    const promise = new Promise((resolve, reject) => {\r\n        const url = `https://${window.location.host}${Routes.TeamsStartMfa}?host=${encodeURIComponent(Host.Teams)}`;\r\n        const request = {\r\n            url,\r\n            successCallback: (result) => {\r\n                useMsal = true;\r\n                ArmProvider.disableProxy();\r\n                resolve(result);\r\n            },\r\n            failureCallback: (reason) => {\r\n                reject(new Error(reason || ''));\r\n            },\r\n        };\r\n        msTeams.authentication.authenticate(request);\r\n    });\r\n    return promise;\r\n}\r\nexport function notifyMfaSuccess() {\r\n    msTeams.authentication.notifySuccess();\r\n}\r\nexport function notifyMfaFailure() {\r\n    msTeams.authentication.notifyFailure();\r\n}\r\nconst TeamsProvider = {\r\n    initialize,\r\n    getContext,\r\n    disableSaveButton,\r\n    configureTab,\r\n    getAccessToken,\r\n    loginSilent,\r\n    requestUserConsentOrMfa,\r\n    notifyMfaSuccess,\r\n    notifyMfaFailure,\r\n};\r\nexport default TeamsProvider;\r\n","import { call, put, takeLatest } from 'redux-saga/effects';\r\nimport { getLtiToken } from '../../../data/providers/lti-provider';\r\nimport { ErrorCode } from '../../../common/error-codes';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { IdentityErrorCode } from '../../../data/models/identity';\r\nimport { fatalError } from '../../actions/common/common-action-creators';\r\nimport { decodeLtiTokenPayload } from '../../selectors/lti-selectors';\r\nimport { LtiActionType } from '../../actions/lti/lti-actions';\r\nimport { getLtiTokenError, getLtiToken as getLtiTokenActionCreator, getLtiTokenSuccess, } from '../../actions/lti/lti-action-creators';\r\nimport { createTokenPromise, tokenPromiseWait } from '../identity/access-tokens';\r\nexport const expirationTimeField = 'exp';\r\nexport function* getLtiTokenRequest(action) {\r\n    const { resolve, reject } = action;\r\n    try {\r\n        const token = yield call(getLtiToken);\r\n        const decodedPayload = yield call(decodeLtiTokenPayload, token);\r\n        const exp = decodedPayload[expirationTimeField];\r\n        if (!exp || Date.now() >= exp * 1000) {\r\n            const error = new MlClientError('lti token expired', '', FailureOperation.GetLtiToken, ErrorCode.LtiTokenExpired);\r\n            yield put(getLtiTokenError(error));\r\n            yield put(fatalError(ErrorCode.LtiTokenExpired, error));\r\n            yield call(reject, error);\r\n        }\r\n        else {\r\n            yield put(getLtiTokenSuccess());\r\n            yield call(resolve, token);\r\n        }\r\n    }\r\n    catch (err) {\r\n        const errorCode = IdentityErrorCode.Failed;\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.GetLtiToken, err ? err.code : errorCode);\r\n        yield put(getLtiTokenError(error));\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n        yield call(reject, error);\r\n    }\r\n}\r\nexport function* getLtiTokenSaga() {\r\n    const { resolve, reject, promise } = (yield call(createTokenPromise));\r\n    yield put(getLtiTokenActionCreator(resolve, reject));\r\n    const token = yield call(tokenPromiseWait, promise);\r\n    return token;\r\n}\r\nexport function* getLtiTokenRequestSaga() {\r\n    yield takeLatest(LtiActionType.GET_LTI_TOKEN, getLtiTokenRequest);\r\n}\r\n","import { actionChannel, call, put, select, take } from 'redux-saga/effects';\r\nimport { ErrorCode } from '../../../common/error-codes';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { IdentityErrorCode } from '../../../data/models/identity';\r\nimport { getAccessToken } from '../../../data/providers/msal-provider';\r\nimport { getAccessToken as getAccessTokenTeams } from '../../../data/providers/teams-provider';\r\nimport { fatalError } from '../../actions/common/common-action-creators';\r\nimport { getAccessTokenError, getAccessTokenFailed, getAccessTokenRedirecting, getAccessTokenSuccess, getArmAccessToken, getGraphAccessToken, getLabsApiAccessToken, } from '../../actions/identity/identity-action-creators';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { isLmsHost, isTeamsHost } from '../../selectors/common-selectors';\r\nimport { getTenantId } from '../../selectors/identity-selector';\r\nimport { getReturnUrl } from '../../selectors/route-selector';\r\nimport { isLmsStudent } from '../../selectors/lti-selectors';\r\nimport { getLtiTokenSaga } from '../lti/lti-token';\r\nexport async function tokenPromiseWait(promise) {\r\n    const token = await promise;\r\n    return token;\r\n}\r\nexport function createTokenPromise() {\r\n    let resolve;\r\n    let reject;\r\n    const promise = new Promise((res, rej) => {\r\n        resolve = res;\r\n        reject = rej;\r\n    });\r\n    return {\r\n        resolve: resolve,\r\n        reject: reject,\r\n        promise,\r\n    };\r\n}\r\nexport function* getArmAccessTokenSaga(canRedirect = false, returnUrl) {\r\n    const tenant = yield select(getTenantId);\r\n    const { resolve, reject, promise } = (yield call(createTokenPromise));\r\n    yield put(getArmAccessToken(resolve, reject, tenant, canRedirect, returnUrl));\r\n    const token = yield call(tokenPromiseWait, promise);\r\n    return token;\r\n}\r\nexport function* getLabsApiAccessTokenSaga(canRedirect = false, returnUrl, shouldAlwaysUseLtiTokenWhenInLms) {\r\n    let shouldUseLtiToken = false;\r\n    if (shouldAlwaysUseLtiTokenWhenInLms) {\r\n        // we should always use ltiToken when calling api for student virtual machines both in student view or the professor 'My virutal machines' panel view.\r\n        shouldUseLtiToken = yield select(isLmsHost);\r\n    }\r\n    else {\r\n        // for other labs api call which are for professor only, e.g. coreUsage,  we should still use aad token. so we determine which token to use by the lti role.\r\n        shouldUseLtiToken = yield select(isLmsStudent);\r\n    }\r\n    if (shouldUseLtiToken) {\r\n        const token = yield call(getLtiTokenSaga);\r\n        return token;\r\n    }\r\n    else {\r\n        const tenant = yield select(getTenantId);\r\n        const { resolve, reject, promise } = (yield call(createTokenPromise));\r\n        yield put(getLabsApiAccessToken(resolve, reject, tenant, canRedirect, returnUrl));\r\n        const token = yield call(tokenPromiseWait, promise);\r\n        return token;\r\n    }\r\n}\r\nexport function* getGraphAccessTokenSaga(tenantId, canRedirect = false) {\r\n    const tenant = tenantId ? tenantId : yield select(getTenantId);\r\n    const { resolve, reject, promise } = (yield call(createTokenPromise));\r\n    yield put(getGraphAccessToken(resolve, reject, tenant, canRedirect));\r\n    const token = yield call(tokenPromiseWait, promise);\r\n    return token;\r\n}\r\nexport function* getAccessTokenRequest(action) {\r\n    let { returnUrl } = action;\r\n    const { scopes, isErrorTerminal, tenantId, canRedirect, resolve, reject } = action;\r\n    try {\r\n        if (!tenantId) {\r\n            const error = new MlClientError(undefined, tenantId, FailureOperation.GetAccessToken, IdentityErrorCode.AccessDenied);\r\n            yield call(reject, error);\r\n            return;\r\n        }\r\n        let result;\r\n        const isTeamsHosted = yield select(isTeamsHost);\r\n        const isLmsHosted = yield select(isLmsHost);\r\n        if (isLmsHosted) {\r\n            result = yield call(getAccessToken, scopes, tenantId, undefined, true);\r\n        }\r\n        else if (canRedirect) {\r\n            if (!returnUrl) {\r\n                returnUrl = yield select(getReturnUrl);\r\n            }\r\n            if (isTeamsHosted) {\r\n                result = yield call(getAccessTokenTeams, scopes, tenantId, returnUrl);\r\n            }\r\n            else {\r\n                result = yield call(getAccessToken, scopes, tenantId, returnUrl);\r\n            }\r\n        }\r\n        else {\r\n            if (isTeamsHosted) {\r\n                result = yield call(getAccessTokenTeams, scopes, tenantId);\r\n            }\r\n            else {\r\n                result = yield call(getAccessToken, scopes, tenantId);\r\n            }\r\n        }\r\n        const { accessToken, isRedirecting, errorCode } = result;\r\n        if (accessToken) {\r\n            yield put(getAccessTokenSuccess());\r\n            yield call(resolve, accessToken);\r\n        }\r\n        else if (isRedirecting) {\r\n            yield put(getAccessTokenRedirecting(scopes, tenantId));\r\n        }\r\n        else {\r\n            const error = new MlClientError(undefined, tenantId, FailureOperation.GetAccessToken, errorCode);\r\n            switch (errorCode) {\r\n                case IdentityErrorCode.Renewal:\r\n                case IdentityErrorCode.InteractionRequired:\r\n                case IdentityErrorCode.UserLogin:\r\n                case IdentityErrorCode.LoginRequired:\r\n                case IdentityErrorCode.EmptyIdToken: {\r\n                    yield put(getAccessTokenFailed(errorCode));\r\n                    if (isErrorTerminal) {\r\n                        yield put(fatalError(ErrorCode.SessionExpired, error));\r\n                    }\r\n                    break;\r\n                }\r\n                case IdentityErrorCode.EndpointsError:\r\n                case IdentityErrorCode.InvalidState: {\r\n                    yield put(getAccessTokenError(errorCode, error));\r\n                    if (isErrorTerminal) {\r\n                        yield put(fatalError(ErrorCode.AuthenticationFailed, error));\r\n                    }\r\n                    break;\r\n                }\r\n                case IdentityErrorCode.PopupWindowError:\r\n                    yield put(getAccessTokenError(errorCode, error));\r\n                    if (isErrorTerminal) {\r\n                        yield put(fatalError(ErrorCode.PopupWindowBlocked, error));\r\n                    }\r\n                    break;\r\n                default: {\r\n                    yield put(getAccessTokenError(errorCode, error));\r\n                    if (isErrorTerminal) {\r\n                        yield put(fatalError(ErrorCode.GenericError, error));\r\n                    }\r\n                    break;\r\n                }\r\n            }\r\n            yield call(reject, error);\r\n        }\r\n    }\r\n    catch (err) {\r\n        const errorCode = IdentityErrorCode.Failed;\r\n        const error = new MlClientError(err ? err.message : undefined, tenantId, FailureOperation.GetAccessToken, err ? err.code : errorCode);\r\n        yield put(getAccessTokenError(errorCode, error));\r\n        if (isErrorTerminal) {\r\n            yield put(fatalError(ErrorCode.GenericError, error));\r\n        }\r\n        yield call(reject, error);\r\n    }\r\n}\r\nexport function* watchGetAccessTokenRequests() {\r\n    const requestChannel = yield actionChannel(IdentityActionType.GET_ACCESS_TOKEN);\r\n    while (true) {\r\n        // this allows the action channel to act as a queue and lets us run\r\n        // our access token requests in serial to resolve issues with the MSAL\r\n        // library we use to acquire tokens\r\n        const action = yield take(requestChannel);\r\n        yield call(getAccessTokenRequest, action);\r\n    }\r\n}\r\n","import { LabsApiClient } from 'lab-services-internal';\r\nimport { TokenCredentials } from '@azure/ms-rest-js';\r\nimport Settings from '../../../../settings/settings';\r\nimport { getAcceptLanguage } from '../../../../language/languages';\r\nconst baseUri = Settings.LabsApiUrl;\r\nexport const createLabsApiClient = (subscriptionId, accessToken, locale, language) => {\r\n    const azureToken = new TokenCredentials(accessToken);\r\n    const client = new LabsApiClient(azureToken, subscriptionId, {\r\n        baseUri,\r\n        acceptLanguage: getAcceptLanguage(locale, language),\r\n    });\r\n    return client;\r\n};\r\n","import Constants from '../../../../utils/constants';\r\nimport { createLabsApiClient } from './labs-api-client-factory';\r\nimport { VmState } from '../../../models/environment-common';\r\nimport { OperationType } from '../../../models/vnext/operation';\r\nexport async function listVirtualMachines(accessToken, locale, language, aadGroupId) {\r\n    const labsApiClient = createLabsApiClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    const options = {\r\n        customHeaders: !!aadGroupId ? { 'x-ml-aad-group-id': aadGroupId } : undefined,\r\n    };\r\n    const response = await labsApiClient.virtualMachine.list(options);\r\n    const userVirtualMachines = [];\r\n    response.map((vm, index) => {\r\n        userVirtualMachines[index] = { ...vm, pendingVmState: VmState.None };\r\n    });\r\n    return userVirtualMachines;\r\n}\r\nexport async function start(subscription, region, virtualMachineId, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(subscription, accessToken, locale, language);\r\n    const startVmResult = await labsApiClient.virtualMachine.start(region, virtualMachineId);\r\n    return { ...startVmResult._response.parsedBody, operationType: OperationType.StartOperation };\r\n}\r\nexport async function stop(subscription, region, virtualMachineId, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(subscription, accessToken, locale, language);\r\n    const stopVmResult = await labsApiClient.virtualMachine.stop(region, virtualMachineId);\r\n    return { ...stopVmResult._response.parsedBody, operationType: OperationType.StopOperation };\r\n}\r\nexport async function resetPassword(subscription, region, virtualMachineId, username, password, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(subscription, accessToken, locale, language);\r\n    const body = {\r\n        username,\r\n        password,\r\n    };\r\n    await labsApiClient.virtualMachine.resetPassword(body, region, virtualMachineId);\r\n}\r\nexport async function reimage(subscription, region, virtualMachineId, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(subscription, accessToken, locale, language);\r\n    const reimageVmResult = await labsApiClient.virtualMachine.reimage(region, virtualMachineId);\r\n    return { ...reimageVmResult._response.parsedBody, operationType: OperationType.ReimageOperation };\r\n}\r\nexport async function redeploy(subscription, region, virtualMachineId, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(subscription, accessToken, locale, language);\r\n    const redeployVmResult = await labsApiClient.virtualMachine.redeploy(region, virtualMachineId);\r\n    return { ...redeployVmResult._response.parsedBody, operationType: OperationType.RedeployOperation };\r\n}\r\nconst UserVirtualMachinesProvider = {\r\n    listVirtualMachines,\r\n    start,\r\n    stop,\r\n    resetPassword,\r\n    reimage,\r\n    redeploy,\r\n};\r\nexport default UserVirtualMachinesProvider;\r\n","import { fork, takeLatest, select } from 'redux-saga/effects';\r\nimport { isVNextFeatureEnabledOrLms } from '../selectors/common-selectors';\r\nfunction featureBasedTaskHelper(vCurrentWorker, vNextWorker) {\r\n    return function* (action) {\r\n        const isVNext = yield select(isVNextFeatureEnabledOrLms);\r\n        if (isVNext && !!vNextWorker) {\r\n            yield fork(vNextWorker, action);\r\n        }\r\n        else if (!!vCurrentWorker) {\r\n            yield fork(vCurrentWorker, action);\r\n        }\r\n    };\r\n}\r\n//todo: figure out the correct type for the parameters so that we do not need to cast the worker type to any when calling featureBasedTakeLeast\r\nexport function featureBasedTakeLatest(pattern, vCurrentWorker, vNextWorker) {\r\n    const helper = featureBasedTaskHelper(vCurrentWorker, vNextWorker);\r\n    return takeLatest(pattern, helper);\r\n}\r\n","import { OperationsResultActionType, } from './operations-result-actions';\r\nexport const GetOperationsResult = (labId) => ({\r\n    type: OperationsResultActionType.POLL_OPERATIONS_RESULT,\r\n    labId,\r\n});\r\nexport const GetPublishOperationResult = (labId) => ({\r\n    type: OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT,\r\n    labId,\r\n});\r\nexport const operationsResultSuccess = (operationIds) => ({\r\n    type: OperationsResultActionType.POLL_OPERATIONS_RESULT_SUCCESS,\r\n    operationIds,\r\n});\r\nexport const publishOperationResultSuccess = (operation) => ({\r\n    type: OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT_SUCCESS,\r\n    operation,\r\n});\r\nexport const operationsResultCancelled = () => ({\r\n    type: OperationsResultActionType.POLL_OPERATIONS_RESULT_CANCELLED,\r\n});\r\nexport const publishOperationResultCancelled = () => ({\r\n    type: OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT_CANCELLED,\r\n});\r\nexport const operationsResultError = (error) => ({\r\n    type: OperationsResultActionType.POLL_OPERATIONS_RESULT_ERROR,\r\n    error,\r\n});\r\nexport const GetUserOperationsResult = (labId) => ({\r\n    type: OperationsResultActionType.POLL_USER_OPERATIONS_RESULT,\r\n    labId,\r\n});\r\nexport const userOperationsResultSuccess = (operationIds) => ({\r\n    type: OperationsResultActionType.POLL_USER_OPERATIONS_RESULT_SUCCESS,\r\n    operationIds,\r\n});\r\nexport const userOperationsResultCancelled = () => ({\r\n    type: OperationsResultActionType.POLL_USER_OPERATIONS_RESULT_CANCELLED,\r\n});\r\nexport const userOperationsResultError = (error) => ({\r\n    type: OperationsResultActionType.POLL_USER_OPERATIONS_RESULT_ERROR,\r\n    error,\r\n});\r\n","import { OperationStatus } from '../../../data/models/vnext/operation';\r\nimport memoize from 'memoize-one';\r\nexport const getOperations = memoize((store) => {\r\n    return store.get('vNextVirtualMachineStore').get('operations');\r\n});\r\nexport const getOperationsInProgress = memoize((store) => {\r\n    let operations = store.get('vNextVirtualMachineStore').get('operations');\r\n    let filteredOperations = operations.filter((op) => op.status === OperationStatus.InProgress);\r\n    return filteredOperations.toArray();\r\n});\r\nexport const getUserOperationsInProgress = memoize((store) => {\r\n    let operations = store.get('vNextUserVirtualMachineStore').get('operations');\r\n    let filteredOperations = operations?.filter((op) => op.status === OperationStatus.InProgress);\r\n    return filteredOperations ? filteredOperations.toArray() : [];\r\n});\r\nexport const getLabOperations = memoize((store) => {\r\n    return store.get('vNextLabStore').get('labPublishOperations');\r\n});\r\n","import { getMlClient } from './arm-data-provider';\r\nimport { processPowerState, processProvisioningState, processVmState } from '../helpers/environment-helpers';\r\nimport { VmState, EnvironmentState } from '../models/environment-common';\r\nfunction processEnvironmentState(mlEnvironment) {\r\n    if (!mlEnvironment.resourceSets || !mlEnvironment.resourceSets.vmResourceId) {\r\n        return EnvironmentState.Creating;\r\n    }\r\n    return undefined;\r\n}\r\nexport function processTemplateEnvironment(mlEnvironment) {\r\n    const { id, lastKnownPowerState, latestOperationResult, claimedByUserName: name, provisioningState: provState, networkInterface, claimedByUserPrincipalId, } = mlEnvironment;\r\n    const powerState = processPowerState(lastKnownPowerState);\r\n    const provisioningState = processProvisioningState(provState);\r\n    const environmentState = processEnvironmentState(mlEnvironment);\r\n    const state = environmentState || provisioningState;\r\n    const vmState = processVmState(powerState, state, latestOperationResult);\r\n    let environmentNetworkInterface = undefined;\r\n    if (networkInterface &&\r\n        (!!networkInterface.sshAuthority ||\r\n            !!networkInterface.rdpAuthority ||\r\n            !!networkInterface.rdpInBrowserUrl ||\r\n            !!networkInterface.sshInBrowserUrl)) {\r\n        const { rdpAuthority, rdpInBrowserUrl, sshAuthority, sshInBrowserUrl, username, privateIpAddress, } = networkInterface;\r\n        environmentNetworkInterface = {\r\n            rdpAuthority,\r\n            rdpInBrowserUrl,\r\n            sshAuthority,\r\n            sshInBrowserUrl,\r\n            username,\r\n            privateIpAddress,\r\n        };\r\n    }\r\n    const environment = {\r\n        id: id,\r\n        name: name,\r\n        vmState,\r\n        pendingVmState: VmState.None,\r\n        lastKnownPowerState: powerState,\r\n        provisioningState,\r\n        networkInterface: environmentNetworkInterface,\r\n        claimedByUserPrincipalId,\r\n    };\r\n    return environment;\r\n}\r\nexport async function listEnvironments(templateId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    const environments = await mlClient.environments.list(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name);\r\n    const templateEnvironments = environments.map((env) => processTemplateEnvironment(env));\r\n    return templateEnvironments;\r\n}\r\nexport async function deleteEnvironment(environmentId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(environmentId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environments.beginDeleteMethod(environmentId.resourceGroupName, environmentId.parent.parent.parent.name, environmentId.parent.parent.name, environmentId.parent.name, environmentId.name);\r\n}\r\nexport async function startEnvironment(environmentId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(environmentId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environments.beginStart(environmentId.resourceGroupName, environmentId.parent.parent.parent.name, environmentId.parent.parent.name, environmentId.parent.name, environmentId.name, { environmentId: environmentId.id });\r\n}\r\nexport async function stopEnvironment(environmentId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(environmentId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environments.beginStop(environmentId.resourceGroupName, environmentId.parent.parent.parent.name, environmentId.parent.parent.name, environmentId.parent.name, environmentId.name, { environmentId: environmentId.id });\r\n}\r\nexport async function resetPassword(environmentId, username, password, accessToken, locale, language) {\r\n    const mlClient = getMlClient(environmentId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environments.beginResetPassword(environmentId.resourceGroupName, environmentId.parent.parent.parent.name, environmentId.parent.parent.name, environmentId.parent.name, environmentId.name, { environmentId: environmentId.id, username: username.trim(), password: password.trim() });\r\n}\r\nexport async function getEnvironment(environmentId, accessToken, locale, language, includeNetwork = false) {\r\n    const options = includeNetwork\r\n        ? {\r\n            expand: 'properties($expand=networkInterface)',\r\n        }\r\n        : {};\r\n    const mlClient = getMlClient(environmentId.subscriptionId, accessToken, locale, language);\r\n    const mlEnvironment = await mlClient.environments.get(environmentId.resourceGroupName, environmentId.parent.parent.parent.name, environmentId.parent.parent.name, environmentId.parent.name, environmentId.name, options);\r\n    const environment = processTemplateEnvironment(mlEnvironment);\r\n    return environment;\r\n}\r\nconst EnvironmentProvider = {\r\n    listEnvironments,\r\n    deleteEnvironment,\r\n    startEnvironment,\r\n    stopEnvironment,\r\n    resetPassword,\r\n    getEnvironment,\r\n};\r\nexport default EnvironmentProvider;\r\n","import { VmState } from '../../../models/environment-common';\r\nimport { createVNextArmApiClient } from '../../arm-data-provider';\r\nimport { OperationType } from '../../../models/vnext/operation';\r\nimport { Urls } from '../../../../utils/constants';\r\nimport Settings from '../../../../settings/settings';\r\nimport { getAcceptLanguage } from '../../../../language/languages';\r\nimport { get as armGet } from '../../arm-data-provider';\r\nimport { RestError } from 'ms-rest-js';\r\nexport async function listVirtualMachines(labId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    let currentPage = await armApiClient.virtualMachines.listByLab(labId.resourceGroupName, labId.name);\r\n    let response = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await armApiClient.virtualMachines.listByLabNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        response = response.concat(nextPage);\r\n    }\r\n    const virtualMachines = [];\r\n    response.map((vm, index) => {\r\n        virtualMachines[index] = { ...vm, pendingVmState: VmState.None };\r\n    });\r\n    return virtualMachines;\r\n}\r\nexport async function reimageVirtualMachine(virtualMachineId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(virtualMachineId.subscriptionId, accessToken, locale, language);\r\n    const reimageVmResult = await armApiClient.virtualMachines.beginReimage(virtualMachineId.resourceGroupName, virtualMachineId.parent.name, virtualMachineId.name);\r\n    const asyncOperationUrl = reimageVmResult?.getInitialResponse().headers?.get('azure-asyncoperation');\r\n    return {\r\n        ...reimageVmResult?.getInitialResponse().parsedBody,\r\n        operationType: OperationType.ReimageOperation,\r\n        asyncPollOperationUrl: asyncOperationUrl,\r\n    };\r\n}\r\nexport async function startVirtualMachine(virtualMachineId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(virtualMachineId.subscriptionId, accessToken, locale, language);\r\n    const startVmResult = await armApiClient.virtualMachines.beginStart(virtualMachineId.resourceGroupName, virtualMachineId.parent.name, virtualMachineId.name);\r\n    const asyncOperationUrl = startVmResult?.getInitialResponse().headers?.get('azure-asyncoperation');\r\n    return {\r\n        ...startVmResult?.getInitialResponse().parsedBody,\r\n        operationType: OperationType.StartOperation,\r\n        asyncPollOperationUrl: asyncOperationUrl,\r\n    };\r\n}\r\nexport async function stopVirtualMachine(virtualMachineId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(virtualMachineId.subscriptionId, accessToken, locale, language);\r\n    const stopVmResult = await armApiClient.virtualMachines.beginStop(virtualMachineId.resourceGroupName, virtualMachineId.parent.name, virtualMachineId.name);\r\n    const asyncOperationUrl = stopVmResult?.getInitialResponse().headers?.get('azure-asyncoperation');\r\n    return {\r\n        ...stopVmResult?.getInitialResponse().parsedBody,\r\n        operationType: OperationType.StopOperation,\r\n        asyncPollOperationUrl: asyncOperationUrl,\r\n    };\r\n}\r\nexport async function getVirtualMachine(virtualMachineId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(virtualMachineId.subscriptionId, accessToken, locale, language);\r\n    const response = await armApiClient.virtualMachines.get(virtualMachineId.resourceGroupName, virtualMachineId.parent.name, virtualMachineId.name);\r\n    const virtualMachine = { ...response, pendingVmState: VmState.None };\r\n    return virtualMachine;\r\n}\r\nexport async function resetPassword(virtualMachineId, accessToken, locale, language, username, password) {\r\n    const armApiClient = createVNextArmApiClient(virtualMachineId.subscriptionId, accessToken, locale, language);\r\n    const body = {\r\n        username,\r\n        password,\r\n    };\r\n    await armApiClient.virtualMachines.beginResetPassword(body, virtualMachineId.resourceGroupName, virtualMachineId.parent.name, virtualMachineId.name);\r\n}\r\nexport async function redeployVirtualMachine(virtualMachineId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(virtualMachineId.subscriptionId, accessToken, locale, language);\r\n    const redeployVmResult = await armApiClient.virtualMachines.beginRedeploy(virtualMachineId.resourceGroupName, virtualMachineId.parent.name, virtualMachineId.name);\r\n    const asyncOperationUrl = redeployVmResult?.getInitialResponse().headers?.get('azure-asyncoperation');\r\n    return {\r\n        ...redeployVmResult?.getInitialResponse().parsedBody,\r\n        operationType: OperationType.RedeployOperation,\r\n        asyncPollOperationUrl: asyncOperationUrl,\r\n    };\r\n}\r\nexport const get = async (baseUri, relativeUrl, accessToken, locale, language) => {\r\n    const headers = new Headers();\r\n    headers.append('Authorization', 'Bearer ' + accessToken);\r\n    headers.append('Accept-Language', getAcceptLanguage(locale, language));\r\n    const url = `${baseUri}${relativeUrl}`;\r\n    console.log(url);\r\n    const response = await fetch(url, {\r\n        headers: headers,\r\n    });\r\n    if (response.status >= 400) {\r\n        const errorResponse = (await response.json());\r\n        const { Error } = errorResponse;\r\n        throw new RestError(Error?.Message || 'A request error occurred.', Error?.Code || response.statusText);\r\n    }\r\n    return response;\r\n};\r\nexport async function getOperationResultARM(operation, accessToken, locale, language) {\r\n    const url = new URL(operation.asyncPollOperationUrl);\r\n    const relativeUrl = url.pathname + url.search;\r\n    const resultPromise = await armGet(relativeUrl, accessToken, locale, language);\r\n    const result = await resultPromise.json();\r\n    const operationResult = {\r\n        ...operation,\r\n        status: result.status,\r\n        endTime: result.endTime,\r\n    };\r\n    return operationResult;\r\n}\r\nexport async function getOperationResultLabsApi(operation, accessToken, locale, language) {\r\n    const relativeUrl = operation?.id + Urls.OperationsResultLabsApi;\r\n    const regex = /\\/locations\\/(\\w+)\\//;\r\n    const match = operation?.id.match(regex);\r\n    let operationRegion = '';\r\n    if (match && match.length > 0) {\r\n        operationRegion = match[1];\r\n    }\r\n    const baseUri = Settings.LabsApiUrl + '/' + operationRegion + '/api';\r\n    const resultPromise = await get(baseUri, relativeUrl, accessToken, locale, language);\r\n    const result = await resultPromise.json();\r\n    const operationResult = {\r\n        ...operation,\r\n        status: result.status,\r\n        endTime: result.endTime,\r\n    };\r\n    return operationResult;\r\n}\r\nconst VirtualMachineProvider = {\r\n    listVirtualMachines,\r\n    reimageVirtualMachine,\r\n    startVirtualMachine,\r\n    stopVirtualMachine,\r\n    getVirtualMachine,\r\n    resetPassword,\r\n    redeployVirtualMachine,\r\n    getOperationResultLabsApi,\r\n    getOperationResultARM,\r\n};\r\nexport default VirtualMachineProvider;\r\n","import { fork, takeLatest, select, takeEvery } from 'redux-saga/effects';\r\nimport { isCurrentLabParentLabAccount } from '../selectors/lab-parent-resource-selectors';\r\nfunction labParentBasedTaskHelper(labAccountWorker, resourceGroupWorker) {\r\n    return function* (action) {\r\n        const isLabAccount = yield select(isCurrentLabParentLabAccount);\r\n        if (!isLabAccount && !!resourceGroupWorker) {\r\n            yield fork(resourceGroupWorker, action);\r\n        }\r\n        else if (isLabAccount && !!labAccountWorker) {\r\n            yield fork(labAccountWorker, action);\r\n        }\r\n    };\r\n}\r\n//todo: figure out the correct type for the parameters so that we do not need to cast the worker type to any when calling featureBasedTakeLeast\r\nexport function labParentBasedTakeLatest(pattern, labAccountWorker, resourceGroupWorker) {\r\n    const helper = labParentBasedTaskHelper(labAccountWorker, resourceGroupWorker);\r\n    return takeLatest(pattern, helper);\r\n}\r\nexport function labParentBasedTakeEvery(pattern, labAccountWorker, resourceGroupWorker) {\r\n    const helper = labParentBasedTaskHelper(labAccountWorker, resourceGroupWorker);\r\n    return takeEvery(pattern, helper);\r\n}\r\n","import { call, put, delay, race, take, cancelled, cancel, fork, select, all } from 'redux-saga/effects';\r\nimport { EnvironmentActionType, } from '../../actions/environment/environment-actions';\r\nimport EnvironmentProvider from '../../../data/providers/environment-provider';\r\nimport { listEnvironmentsSuccess, listEnvironmentsError, listEnvironments as listEnvironmentsActionCreator, pollEnvironmentsCancelled, listEnvironmentsCancelled, listVNextVirtualMachinesSuccess, } from '../../actions/environment/environment-action-creators';\r\nimport { GetOperationsResult, operationsResultCancelled, operationsResultError, operationsResultSuccess, } from '../../actions/operations/operations-result-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { OperationsResultActionType, } from '../../../redux/actions/operations/operations-result-actions';\r\nimport { getOperationsInProgress } from '../../../redux/selectors/vnext/operations-selector';\r\nimport { FiveSecondInterval } from '../../../utils/constants';\r\nexport function* listEnvironments(action) {\r\n    const { id: templateId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(templateId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { environments, changed } = yield race({\r\n            environments: call(EnvironmentProvider.listEnvironments, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(EnvironmentActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(EnvironmentActionType.SELECT_LAB),\r\n                take(EnvironmentActionType.POLL_ENVIRONMENTS_CANCELLED),\r\n                take(EnvironmentActionType.POLL_ENVIRONMENTS_STOP),\r\n                take(EnvironmentActionType.START_ENVIRONMENTS),\r\n                take(EnvironmentActionType.STOP_ENVIRONMENTS),\r\n                take(EnvironmentActionType.RESET_ENVIRONMENTS),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listEnvironmentsCancelled());\r\n        }\r\n        else {\r\n            yield put(listEnvironmentsSuccess(environments));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.LoadEnvironments, e ? e.code : undefined);\r\n        yield put(listEnvironmentsError(error));\r\n    }\r\n}\r\nexport async function callGetOperationResult(operation, armAccessToken, labsApiAccessToken, locale, language, isUserEnvironment) {\r\n    try {\r\n        let operationResult = null;\r\n        if (isUserEnvironment) {\r\n            operationResult = await VirtualMachineProvider.getOperationResultLabsApi(operation, labsApiAccessToken, locale, language);\r\n        }\r\n        else {\r\n            operationResult = await VirtualMachineProvider.getOperationResultARM(operation, armAccessToken, locale, language);\r\n        }\r\n        return operationResult;\r\n    }\r\n    catch (e) {\r\n        throw e;\r\n    }\r\n}\r\nexport function* getOperationsResult(action) {\r\n    const { labId } = action;\r\n    const armAccessToken = yield call(getArmAccessTokenSaga);\r\n    const locale = yield select(getLocale);\r\n    const language = yield select(getLanguage);\r\n    const pollingInterval = FiveSecondInterval;\r\n    try {\r\n        while (true) {\r\n            yield delay(pollingInterval);\r\n            const operations = yield select(getOperationsInProgress);\r\n            if (operations.length <= 0) {\r\n                yield put(operationsResultCancelled());\r\n            }\r\n            const { operationsResult, cancel } = yield race({\r\n                operationsResult: yield all(operations.map((operation) => call(callGetOperationResult, operation, armAccessToken, \"\", locale, language, false))),\r\n                cancel: take(OperationsResultActionType.POLL_OPERATIONS_RESULT_CANCELLED),\r\n            });\r\n            if (operationsResult) {\r\n                yield put(operationsResultSuccess(operationsResult));\r\n            }\r\n            if (cancel) {\r\n                yield put(operationsResultCancelled());\r\n            }\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.GetOperationsResultFailure, e ? e.code : undefined);\r\n        yield put(operationsResultError(error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(operationsResultCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* listVNextVirtualMachines(action) {\r\n    const { id: labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { virtualMachines, changed } = yield race({\r\n            virtualMachines: call(VirtualMachineProvider.listVirtualMachines, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(EnvironmentActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(EnvironmentActionType.SELECT_LAB),\r\n                take(EnvironmentActionType.POLL_ENVIRONMENTS_CANCELLED),\r\n                take(EnvironmentActionType.POLL_ENVIRONMENTS_STOP),\r\n                take(EnvironmentActionType.START_ENVIRONMENTS),\r\n                take(EnvironmentActionType.STOP_ENVIRONMENTS),\r\n                take(EnvironmentActionType.RESET_ENVIRONMENTS),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listEnvironmentsCancelled());\r\n        }\r\n        else {\r\n            yield put(listVNextVirtualMachinesSuccess(virtualMachines));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.LoadEnvironments, e ? e.code : undefined);\r\n        yield put(listEnvironmentsError(error));\r\n    }\r\n}\r\nfunction* pollEnvironments(action) {\r\n    try {\r\n        // allowing for an initial delay before we kick off polling\r\n        // to mitigate a state flashing bug due to issues in the RP\r\n        const { initialDelayMs, vmParentId } = action;\r\n        if (!!initialDelayMs) {\r\n            yield delay(initialDelayMs);\r\n        }\r\n        yield put(GetOperationsResult(vmParentId));\r\n        // this looks like an infinite loop, but the finally block will get triggered when\r\n        // the task that is running this is canceled, which happens when the POLL_ENVIRONMENTS_STOP\r\n        // action is dispatched\r\n        while (true) {\r\n            yield put(listEnvironmentsActionCreator(vmParentId));\r\n            yield race({\r\n                success: take(EnvironmentActionType.LIST_ENVIRONMENTS_SUCCESS),\r\n                cancelled: take(EnvironmentActionType.LIST_ENVIRONMENTS_CANCELLED),\r\n                error: take(EnvironmentActionType.LIST_ENVIRONMENTS_ERROR),\r\n            });\r\n            const { intervalMs } = action;\r\n            yield delay(intervalMs);\r\n        }\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(pollEnvironmentsCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollOperationsSaga() {\r\n    while (true) {\r\n        const action = yield take(OperationsResultActionType.POLL_OPERATIONS_RESULT);\r\n        const pollOperationsTask = yield fork(getOperationsResult, action);\r\n        yield take(OperationsResultActionType.POLL_OPERATIONS_RESULT_CANCELLED);\r\n        yield cancel(pollOperationsTask);\r\n    }\r\n}\r\nexport function* pollEnvironmentsSaga() {\r\n    // while this looks like an infinite loop, yield take(POLL_ENVIRONMENTS_START)\r\n    // will pause this code until polling is started\r\n    while (true) {\r\n        const action = yield take(EnvironmentActionType.POLL_ENVIRONMENTS_START);\r\n        // forking so the polling task runs without blocking\r\n        const pollEnvironmentsTask = yield fork(pollEnvironments, action);\r\n        // waits until the stop is triggered so we can cancel the polling task\r\n        yield take(EnvironmentActionType.POLL_ENVIRONMENTS_STOP);\r\n        yield cancel(pollEnvironmentsTask);\r\n    }\r\n}\r\nexport function* listEnvironmentsSaga() {\r\n    yield labParentBasedTakeLatest(EnvironmentActionType.LIST_ENVIRONMENTS, listEnvironments, listVNextVirtualMachines);\r\n}\r\n","import { all, call, cancel, cancelled, delay, fork, put, race, select, take, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { VmState } from '../../../data/models/environment-common';\r\nimport { OperationResultStatus } from '../../../data/models/common';\r\nimport UserEnvironmentProvider from '../../../data/providers/user-environment-provider';\r\nimport { listUserEnvironments as listEnvironmentsActionCreator, listUserEnvironmentsCancelled, listUserEnvironmentsError, listUserEnvironmentsSuccess, pollListUserEnvironmentsCancelled, resetUserEnvironmentPasswordFailed, stopUserEnvironmentFailed, startUserEnvironmentFailed, listVCurrentUserVirtualMachines, listVCurrentUserVirtualMachinesFailures, listVNextUserVirtualMachines, listVNextUserVirtualMachinesSuccess, listVNextUserVirtualMachinesFailure, listAllUserVirtualMachinesSuccess, } from '../../actions/user-environment/user-environment-action-creators';\r\nimport { UserEnvironmentActionType, } from '../../actions/user-environment/user-environment-actions';\r\nimport { getLanguage, getLocale, isLmsHost } from '../../selectors/common-selectors';\r\nimport { getUserEnvironment as getUserEnvironmentSelector } from '../../selectors/user-environment-selectors';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { listVirtualMachines } from '../../../data/providers/vnext/labs-api/user-virtual-machine-provider';\r\nimport { featureBasedTakeLatest } from '../../effects/feature-based';\r\nimport { OperationsResultActionType, } from '../../../redux/actions/operations/operations-result-actions';\r\nimport { FiveSecondInterval } from '../../../utils/constants';\r\nimport { GetUserOperationsResult, userOperationsResultCancelled, userOperationsResultError, userOperationsResultSuccess, } from '../../../redux/actions/operations/operations-result-action-creators';\r\nimport { getUserOperationsInProgress } from '../../../redux/selectors/vnext/operations-selector';\r\nimport { callGetOperationResult } from '../../../redux/sagas/environment/list-environments';\r\nfunction getErrorForOperation(env, failureOp) {\r\n    switch (failureOp) {\r\n        case FailureOperation.StartUserEnvironment:\r\n        case FailureOperation.StopUserEnvironment:\r\n        case FailureOperation.ResetPassword:\r\n            return new MlClientError(env.latestOperationResult.errorMessage, env.id, failureOp, env.latestOperationResult.errorCode);\r\n        default:\r\n            return new MlClientError('', env.id, failureOp);\r\n    }\r\n}\r\nfunction hasOperationFailed(previousEnvironment, currentEnvironment) {\r\n    return previousEnvironment &&\r\n        previousEnvironment.latestOperationResult &&\r\n        previousEnvironment.latestOperationResult.status &&\r\n        previousEnvironment.latestOperationResult.status !== OperationResultStatus.Failed &&\r\n        currentEnvironment &&\r\n        currentEnvironment.latestOperationResult &&\r\n        currentEnvironment.latestOperationResult.status === OperationResultStatus.Failed\r\n        ? true\r\n        : false;\r\n}\r\nexport function* listUserEnvironments(action) {\r\n    try {\r\n        const { aadGroupId } = action;\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { environments, changed } = yield race({\r\n            environments: call(UserEnvironmentProvider.listEnvironments, accessToken, locale, language, aadGroupId),\r\n            changed: race([\r\n                take(UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP),\r\n                take(UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED),\r\n                take(UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD),\r\n                take(UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT),\r\n                take(UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listUserEnvironmentsCancelled());\r\n        }\r\n        else {\r\n            // get the previous environments we fetched so we can compare it to the most recently fetched template.\r\n            // we compare the two states to see if an ongoing operation has failed, and if so we'll send the\r\n            // appropriate error action so the UI can be updated with the correct error message.\r\n            for (const environment of environments) {\r\n                const previousEnvironment = yield select(getUserEnvironmentSelector, environment.id);\r\n                if (previousEnvironment) {\r\n                    if (hasOperationFailed(previousEnvironment, environment)) {\r\n                        if (previousEnvironment.vmState === VmState.ResettingPassword) {\r\n                            const error = getErrorForOperation(environment, FailureOperation.ResetPassword);\r\n                            yield put(resetUserEnvironmentPasswordFailed(environment.id, error));\r\n                        }\r\n                        else if (previousEnvironment.vmState === VmState.Starting) {\r\n                            const error = getErrorForOperation(environment, FailureOperation.StartUserEnvironment);\r\n                            yield put(startUserEnvironmentFailed(environment.id, error));\r\n                        }\r\n                        else if (previousEnvironment.vmState === VmState.Stopping) {\r\n                            const error = getErrorForOperation(environment, FailureOperation.StopUserEnvironment);\r\n                            yield put(stopUserEnvironmentFailed(environment.id, error));\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            yield put(listUserEnvironmentsSuccess(environments));\r\n            yield put(listAllUserVirtualMachinesSuccess());\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, 'all', FailureOperation.ListUserEnvironments, err ? err.code : undefined);\r\n        yield put(listUserEnvironmentsError(error));\r\n    }\r\n}\r\nfunction* pollForEnvironments(action) {\r\n    const { aadGroupId } = action;\r\n    try {\r\n        // allowing for an initial delay before we kick off polling\r\n        // to mitigate a state flashing bug due to issues in the RP\r\n        const { initialDelayMs } = action;\r\n        if (!!initialDelayMs) {\r\n            yield delay(initialDelayMs);\r\n        }\r\n        // this looks like an infinite loop, but the finally block will get triggered when\r\n        // the task that is running this is canceled, which happens when the POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP\r\n        // action is dispatched\r\n        while (true) {\r\n            yield put(listEnvironmentsActionCreator(aadGroupId));\r\n            yield race({\r\n                success: take(UserEnvironmentActionType.LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS),\r\n                cancelled: take(UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED),\r\n                error: take(UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_ERROR),\r\n            });\r\n            const { intervalMs } = action;\r\n            yield delay(intervalMs);\r\n        }\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(pollListUserEnvironmentsCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollUserEnvironmentsSaga() {\r\n    // while this looks like an infinite loop, yield take(POLL_LIST_GLOBAL_USER_ENVIRONMENTS_START)\r\n    // will pause this code until polling is started\r\n    while (true) {\r\n        const action = yield take(UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_START);\r\n        // forking so the polling task runs without blocking\r\n        const pollUserEnvironmentsTask = yield fork(pollForEnvironments, action);\r\n        // waits until the stop is triggered so we can cancel the polling task\r\n        yield take(UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP);\r\n        yield cancel(pollUserEnvironmentsTask);\r\n    }\r\n}\r\nexport function* pollUserOperations(action) {\r\n    const labsApiAccessToken = yield call(getLabsApiAccessTokenSaga);\r\n    const locale = yield select(getLocale);\r\n    const language = yield select(getLanguage);\r\n    let pollingInterval = FiveSecondInterval;\r\n    try {\r\n        while (true) {\r\n            yield delay(pollingInterval);\r\n            let operations = yield select(getUserOperationsInProgress);\r\n            if (operations.length <= 0) {\r\n                yield put(userOperationsResultCancelled());\r\n            }\r\n            const { userOperationsResult, cancel } = yield race({\r\n                userOperationsResult: yield all(operations.map((operation) => call(callGetOperationResult, operation, \"\", labsApiAccessToken, locale, language, true))),\r\n                cancel: take(OperationsResultActionType.POLL_USER_OPERATIONS_RESULT_CANCELLED),\r\n            });\r\n            if (userOperationsResult) {\r\n                yield put(userOperationsResultSuccess(userOperationsResult));\r\n            }\r\n            if (cancel) {\r\n                yield put(userOperationsResultCancelled());\r\n            }\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, '', FailureOperation.GetUserOperationsResultFailure, e ? e.code : undefined);\r\n        yield put(userOperationsResultError(error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(userOperationsResultCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollUserOperationsSaga() {\r\n    while (true) {\r\n        const action = yield take(OperationsResultActionType.POLL_USER_OPERATIONS_RESULT);\r\n        const pollUserOperationsTask = yield fork(pollUserOperations, action);\r\n        yield take(OperationsResultActionType.POLL_USER_OPERATIONS_RESULT_CANCELLED);\r\n        yield cancel(pollUserOperationsTask);\r\n    }\r\n}\r\n//vNext saga\r\nexport function* listAllUserVirtualMachines(action) {\r\n    try {\r\n        const { aadGroupId } = action;\r\n        const shouldListVNextVirtualMachinesOnly = yield select(isLmsHost);\r\n        let apiCallRace;\r\n        if (shouldListVNextVirtualMachinesOnly) {\r\n            yield put(listVNextUserVirtualMachines(aadGroupId));\r\n            apiCallRace = all({\r\n                vNext: race({\r\n                    success: take(UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS),\r\n                    failure: take(UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_FAILURE),\r\n                }),\r\n            });\r\n        }\r\n        else {\r\n            yield put(listVNextUserVirtualMachines(aadGroupId));\r\n            yield put(listVCurrentUserVirtualMachines(aadGroupId));\r\n            apiCallRace = all({\r\n                vNext: race({\r\n                    success: take(UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_SUCCESS),\r\n                    failure: take(UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES_FAILURE),\r\n                }),\r\n                vCurrent: race({\r\n                    success: take(UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_SUCCESS),\r\n                    failure: take(UserEnvironmentActionType.LIST_VCURRENT_USER_VIRTUAL_MACHINES_FAILURE),\r\n                }),\r\n            });\r\n        }\r\n        const { apiCallResult, changed } = yield race({\r\n            apiCallResult: apiCallRace,\r\n            changed: race([\r\n                take(UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_STOP),\r\n                take(UserEnvironmentActionType.POLL_LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED),\r\n                take(UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD),\r\n                take(UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT),\r\n                take(UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT),\r\n                take(UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE),\r\n                take(UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listUserEnvironmentsCancelled());\r\n        }\r\n        else {\r\n            if ((shouldListVNextVirtualMachinesOnly && apiCallResult?.vNext?.failure) ||\r\n                (!shouldListVNextVirtualMachinesOnly &&\r\n                    apiCallResult?.vNext?.failure &&\r\n                    apiCallResult?.vCurrent?.failure)) {\r\n                // All API calls failed\r\n                const error = new MlClientError(undefined, 'all', FailureOperation.ListUserEnvironments, undefined);\r\n                yield put(listUserEnvironmentsError(error));\r\n                return;\r\n            }\r\n            else if (apiCallResult?.vNext?.failure || apiCallResult?.vCurrent?.failure) {\r\n                // One of two API calls failed\r\n                const error = new MlClientError(undefined, 'all', FailureOperation.ListUserEnvironmentsPartial, undefined);\r\n                yield put(listUserEnvironmentsError(error));\r\n            }\r\n            yield put(listAllUserVirtualMachinesSuccess());\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, 'all', FailureOperation.ListUserEnvironments, err ? err.code : undefined);\r\n        yield put(listUserEnvironmentsError(error));\r\n    }\r\n}\r\nexport function* listVCurrentVirtualMachines(action) {\r\n    try {\r\n        const { aadGroupId } = action;\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const armAccessToken = yield call(getArmAccessTokenSaga);\r\n        const response = yield call(UserEnvironmentProvider.listEnvironments, armAccessToken, locale, language, aadGroupId);\r\n        yield put(listUserEnvironmentsSuccess(response));\r\n    }\r\n    catch (err) {\r\n        yield put(listVCurrentUserVirtualMachinesFailures());\r\n    }\r\n}\r\nexport function* listVNextVirtualMachines(action) {\r\n    try {\r\n        const { aadGroupId } = action;\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const labsApiAccessToken = yield call(getLabsApiAccessTokenSaga, false, undefined, true);\r\n        const response = yield call(listVirtualMachines, labsApiAccessToken, locale, language, aadGroupId);\r\n        yield put(listVNextUserVirtualMachinesSuccess(response));\r\n        yield put(GetUserOperationsResult(''));\r\n    }\r\n    catch (err) {\r\n        yield put(listVNextUserVirtualMachinesFailure());\r\n    }\r\n}\r\nexport function* listEnvironmentsSaga() {\r\n    yield featureBasedTakeLatest(UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS, listUserEnvironments, listAllUserVirtualMachines);\r\n}\r\nexport function* listVCurrentVirtualMachinesSaga() {\r\n    yield takeLatest(UserEnvironmentActionType.LIST_VCURRENT_USER_VIRTUAL_MACHINES, listVCurrentVirtualMachines);\r\n}\r\nexport function* listVNextVirtualMachinesSaga() {\r\n    yield takeLatest(UserEnvironmentActionType.LIST_VNEXT_USER_VIRTUAL_MACHINES, listVNextVirtualMachines);\r\n}\r\n","import { fork, takeEvery, takeLatest } from 'redux-saga/effects';\r\nimport { isValidResourceId } from '../../utils/resource-id';\r\nfunction environmentIdBasedTaskHelper(vCurrentWorker, vNextWorker) {\r\n    return function* (action) {\r\n        const environmentId = action.environmentId;\r\n        if (!isValidResourceId(environmentId) && !!vNextWorker) {\r\n            yield fork(vNextWorker, action);\r\n        }\r\n        else if (!!vCurrentWorker) {\r\n            yield fork(vCurrentWorker, action);\r\n        }\r\n    };\r\n}\r\nexport function environmentIdBasedTakeLatest(pattern, vCurrentWorker, vNextWorker) {\r\n    const helper = environmentIdBasedTaskHelper(vCurrentWorker, vNextWorker);\r\n    return takeLatest(pattern, helper);\r\n}\r\nexport function environmentIdBasedTakeEvery(pattern, vCurrentWorker, vNextWorker) {\r\n    const helper = environmentIdBasedTaskHelper(vCurrentWorker, vNextWorker);\r\n    return takeEvery(pattern, helper);\r\n}\r\n","import memoize from 'memoize-one';\r\nexport const getUserVirtualMachines = memoize((store) => {\r\n    return store.get('vNextUserVirtualMachineStore').get('virtualMachines');\r\n});\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport { startUserEnvironmentFailed, stopUserEnvironmentFailed, resetUserEnvironmentPasswordFailed, startUserEnvironmentAccepted, stopUserEnvironmentAccepted, } from '../../actions/user-environment/user-environment-action-creators';\r\nimport { start, stop, resetPassword } from '../../../data/providers/user-environment-provider';\r\nimport { UserEnvironmentActionType, } from '../../actions/user-environment/user-environment-actions';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { start as startVNext, stop as stopVNext, resetPassword as resetPasswordVNext, } from '../../../data/providers/vnext/labs-api/user-virtual-machine-provider';\r\nimport { environmentIdBasedTakeLatest, environmentIdBasedTakeEvery } from '../../effects/environment-id-based';\r\nimport { getUserVirtualMachines } from '../../selectors/vnext/user-virtual-machine-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nexport function* startEnvironment(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(start, environmentId, accessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, 'all', FailureOperation.StartUserEnvironment, err ? err.code : undefined);\r\n        yield put(startUserEnvironmentFailed(environmentId, error));\r\n    }\r\n}\r\nexport function* stopEnvironment(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(stop, environmentId, accessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, 'all', FailureOperation.StopUserEnvironment, err ? err.code : undefined);\r\n        yield put(stopUserEnvironmentFailed(environmentId, error));\r\n    }\r\n}\r\nexport function* resetEnvironmentPassword(action) {\r\n    const { environmentId, username, password } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(resetPassword, environmentId, username, password, accessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, 'all', FailureOperation.ResetUserEnvironmentPassword, err ? err.code : undefined);\r\n        yield put(resetUserEnvironmentPasswordFailed(environmentId, error));\r\n    }\r\n}\r\n//vNext saga\r\nexport function* startVNextVirtualMachine(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga, false, undefined, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const userVirtualMachines = yield select(getUserVirtualMachines);\r\n        const userVirtualMachine = userVirtualMachines.find((o) => caseInsensitiveCultureInvariantCompare(o.id, environmentId) === 0);\r\n        let startVmResult = yield call(startVNext, userVirtualMachine.subscriptionId, userVirtualMachine.location, environmentId, accessToken, locale, language);\r\n        startVmResult.ResourceId = new ResourceId(userVirtualMachine.id, true);\r\n        yield put(startUserEnvironmentAccepted(environmentId, [startVmResult]));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, environmentId, FailureOperation.StartUserEnvironment, err ? err.code : undefined);\r\n        yield put(startUserEnvironmentFailed(environmentId, error));\r\n    }\r\n}\r\nexport function* stopVNextVirtualMachine(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga, false, undefined, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const userVirtualMachines = yield select(getUserVirtualMachines);\r\n        const userVirtualMachine = userVirtualMachines.find((o) => caseInsensitiveCultureInvariantCompare(o.id, environmentId) === 0);\r\n        let stopVmResult = yield call(stopVNext, userVirtualMachine.subscriptionId, userVirtualMachine.location, environmentId, accessToken, locale, language);\r\n        stopVmResult.ResourceId = new ResourceId(userVirtualMachine.id, true);\r\n        yield put(stopUserEnvironmentAccepted(environmentId, [stopVmResult]));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, environmentId, FailureOperation.StopUserEnvironment, err ? err.code : undefined);\r\n        yield put(stopUserEnvironmentFailed(environmentId, error));\r\n    }\r\n}\r\nexport function* resetVNextVirtualMachinePassword(action) {\r\n    const { environmentId, username, password } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga, false, undefined, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const userVirtualMachines = yield select(getUserVirtualMachines);\r\n        const userVirtualMachine = userVirtualMachines.find((o) => caseInsensitiveCultureInvariantCompare(o.id, environmentId) === 0);\r\n        yield call(resetPasswordVNext, userVirtualMachine.subscriptionId, userVirtualMachine.location, environmentId, username, password, accessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, environmentId, FailureOperation.ResetUserEnvironmentPassword, err ? err.code : undefined);\r\n        yield put(resetUserEnvironmentPasswordFailed(environmentId, error));\r\n    }\r\n}\r\nexport function* startEnvironmentSaga() {\r\n    yield environmentIdBasedTakeEvery(UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT, startEnvironment, startVNextVirtualMachine);\r\n}\r\nexport function* stopEnvironmentSaga() {\r\n    yield environmentIdBasedTakeEvery(UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT, stopEnvironment, stopVNextVirtualMachine);\r\n}\r\nexport function* resetEnvironmentPasswordSaga() {\r\n    yield environmentIdBasedTakeLatest(UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD, resetEnvironmentPassword, resetVNextVirtualMachinePassword);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport UserVirtualMachinesProvider from '../../../data/providers/vnext/labs-api/user-virtual-machine-provider';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { UserEnvironmentActionType, } from '../../actions/user-environment/user-environment-actions';\r\nimport { getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { reimageUserEnvironmentAccepted, reimageUserVirtualMachineError, } from '../../actions/user-environment/user-environment-action-creators';\r\nimport { getUserVirtualMachines } from '../../selectors/vnext/user-virtual-machine-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nexport function* reimageVirtualMachine(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga, false, undefined, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const userVirtualMachines = yield select(getUserVirtualMachines);\r\n        const userVirtualMachine = userVirtualMachines.find((o) => caseInsensitiveCultureInvariantCompare(o.id, environmentId) === 0);\r\n        const reimageVmsResult = [];\r\n        const reimageVmResult = yield call(UserVirtualMachinesProvider.reimage, userVirtualMachine.subscriptionId, userVirtualMachine.location, environmentId, accessToken, locale, language);\r\n        reimageVmResult['ResourceId'] = new ResourceId(environmentId, true);\r\n        reimageVmsResult.push(reimageVmResult);\r\n        yield put(reimageUserEnvironmentAccepted(environmentId, reimageVmsResult));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, environmentId, FailureOperation.ReimageUserVirtualMachine, err ? err.code : undefined);\r\n        yield put(reimageUserVirtualMachineError(environmentId, error));\r\n    }\r\n}\r\nexport function* reimageVirtualMachineSaga() {\r\n    yield takeLatest(UserEnvironmentActionType.REIMAGE_USER_VIRTUAL_MACHINE, reimageVirtualMachine);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport UserVirtualMachinesProvider from '../../../data/providers/vnext/labs-api/user-virtual-machine-provider';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { UserEnvironmentActionType, } from '../../actions/user-environment/user-environment-actions';\r\nimport { getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { redeployUserEnvironmentAccepted, redeployUserVirtualMachineError, } from '../../actions/user-environment/user-environment-action-creators';\r\nimport { getUserVirtualMachines } from '../../selectors/vnext/user-virtual-machine-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nexport function* redeployVirtualMachine(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga, false, undefined, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const userVirtualMachines = yield select(getUserVirtualMachines);\r\n        const userVirtualMachine = userVirtualMachines.find((o) => caseInsensitiveCultureInvariantCompare(o.id, environmentId) === 0);\r\n        const redeployVmsResult = [];\r\n        const redeployVmResult = yield call(UserVirtualMachinesProvider.redeploy, userVirtualMachine.subscriptionId, userVirtualMachine.location, environmentId, accessToken, locale, language);\r\n        redeployVmResult['ResourceId'] = new ResourceId(environmentId, true);\r\n        ;\r\n        redeployVmsResult.push(redeployVmResult);\r\n        yield put(redeployUserEnvironmentAccepted(environmentId, redeployVmsResult));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, environmentId, FailureOperation.RedeployUserVirtualMachine, err ? err.code : undefined);\r\n        yield put(redeployUserVirtualMachineError(environmentId, error));\r\n    }\r\n}\r\nexport function* redeployVirtualMachineSaga() {\r\n    yield takeLatest(UserEnvironmentActionType.REDEPLOY_USER_VIRTUAL_MACHINE, redeployVirtualMachine);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listEnvironmentsSaga, listVCurrentVirtualMachinesSaga, listVNextVirtualMachinesSaga, pollUserEnvironmentsSaga, pollUserOperationsSaga, } from './list-environments';\r\nimport { startEnvironmentSaga, stopEnvironmentSaga, resetEnvironmentPasswordSaga } from './modify-environment';\r\nimport { reimageVirtualMachineSaga } from './reimage-virtual-machine';\r\nimport { redeployVirtualMachineSaga } from './redeploy-virtual-machine';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listVCurrentVirtualMachinesSaga),\r\n        fork(listVNextVirtualMachinesSaga),\r\n        fork(listEnvironmentsSaga),\r\n        fork(pollUserEnvironmentsSaga),\r\n        fork(startEnvironmentSaga),\r\n        fork(stopEnvironmentSaga),\r\n        fork(resetEnvironmentPasswordSaga),\r\n        fork(reimageVirtualMachineSaga),\r\n        fork(redeployVirtualMachineSaga),\r\n        fork(pollUserOperationsSaga),\r\n    ]);\r\n}\r\n","import { getMlClient } from './arm-data-provider';\r\nimport Constants from '../../utils/constants';\r\nexport async function register(registrationCode, accessToken, locale, language) {\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await mlClient.globalUsers.register(Constants.NoUsername, {\r\n        registrationCode: registrationCode.trim(),\r\n    });\r\n}\r\nconst RegisterProvider = {\r\n    register,\r\n};\r\nexport default RegisterProvider;\r\n","import Constants from '../../../../utils/constants';\r\nimport { createLabsApiClient } from './labs-api-client-factory';\r\nexport async function register(registrationCode, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await labsApiClient.register.global(registrationCode.trim());\r\n}\r\nconst RegisterProvider = {\r\n    register,\r\n};\r\nexport default RegisterProvider;\r\n","const guidRegex = /^[{]?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}[}]?$/;\r\nexport function isValidGuid(id) {\r\n    return guidRegex.test(id);\r\n}\r\n","import { isValidGuid } from '../../utils/guid';\r\nimport { VCurrentRegistrationCodeLength } from '../../utils/constants';\r\nexport const isVNextRegistrationCode = (registrationCode) => {\r\n    const isGuid = isValidGuid(registrationCode);\r\n    return registrationCode.length !== VCurrentRegistrationCodeLength && !isGuid;\r\n};\r\n","import { fork, takeLatest } from 'redux-saga/effects';\r\nimport { isVNextRegistrationCode } from '../../common/selectors/registration-code';\r\nfunction registrationCodeLengthBasedBasedTaskHelper(vCurrentWorker, vNextWorker) {\r\n    return function* (action) {\r\n        const registrationCode = action.registrationCode;\r\n        if (isVNextRegistrationCode(registrationCode) && !!vNextWorker) {\r\n            yield fork(vNextWorker, action);\r\n        }\r\n        else if (!!vCurrentWorker) {\r\n            yield fork(vCurrentWorker, action);\r\n        }\r\n    };\r\n}\r\nexport function registrationCodeLengthBasedTakeLatest(pattern, vCurrentWorker, vNextWorker) {\r\n    const helper = registrationCodeLengthBasedBasedTaskHelper(vCurrentWorker, vNextWorker);\r\n    return takeLatest(pattern, helper);\r\n}\r\n","import { call, put, race, select, take } from 'redux-saga/effects';\r\nimport { register } from '../../../data/providers/register-provider';\r\nimport { registerUserSuccess, registerUserFailed } from '../../actions/register/register-action-creators';\r\nimport { RegisterActionType } from '../../actions/register/register-actions';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { register as registerVNext } from '../../../data/providers/vnext/labs-api/register-provider';\r\nimport { registrationCodeLengthBasedTakeLatest } from '../../effects/registration-code-length-based';\r\nimport { enableFeature } from '../../actions/common/common-action-creators';\r\nimport Feature from '../../../utils/features';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { isRegisterRoute } from '../../selectors/route-selector';\r\nexport function* registerUser(action) {\r\n    const { registrationCode } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(register, registrationCode, accessToken, locale, language);\r\n        yield put(registerUserSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, registrationCode, FailureOperation.RegisterUser, err ? err.code : undefined);\r\n        yield put(registerUserFailed(error));\r\n    }\r\n}\r\n//vNext saga\r\nexport function* registerVNextUser(action) {\r\n    const { registrationCode } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(registerVNext, registrationCode, accessToken, locale, language);\r\n        const isRegisterUrl = yield select(isRegisterRoute);\r\n        // a workaround for now to enable vNext feature if registering using the link from email inivation. so we could test vNext student scenarios more smoothly.\r\n        // we only enable vnext feature if users are registering with the registration link.\r\n        if (isRegisterUrl) {\r\n            yield put(enableFeature(Feature.VNext));\r\n            yield race({\r\n                success: take(CommonActionType.ENABLE_FEATURE_SUCCESS),\r\n                error: take(CommonActionType.ENABLE_FEATURE_ERROR),\r\n            });\r\n        }\r\n        yield put(registerUserSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, registrationCode, FailureOperation.RegisterUser, err ? err.code : undefined);\r\n        yield put(registerUserFailed(error));\r\n    }\r\n}\r\nexport function* registerUserSaga() {\r\n    yield registrationCodeLengthBasedTakeLatest(RegisterActionType.REGISTER_USER, registerUser, registerVNextUser);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { registerUserSaga } from './register-user';\r\nexport function* rootSaga() {\r\n    yield all([fork(registerUserSaga)]);\r\n}\r\n","import Constants from '../../utils/constants';\r\nimport ArmProvider from './arm-data-provider';\r\nexport const ActionPermissions = {\r\n    WriteLab: 'Microsoft.LabServices/labAccounts/labs/write',\r\n};\r\nexport const VNextActionPermissions = {\r\n    WriteLab: 'Microsoft.LabServices/labs/write',\r\n    WriteLabPlan: 'Microsoft.LabServices/labPlans/write',\r\n    WriteLabVm: 'Microsoft.LabServices/labs/virtualMachines/start/action',\r\n};\r\nexport const VNextDataActionPermission = {\r\n    CreateLabInLabPlan: \"Microsoft.LabServices/labPlans/createLab/action\"\r\n};\r\nexport async function hasAccess(actionToCheck, id, accessToken, locale, language) {\r\n    const resourcePermissionsUrl = `${id}${Constants.Urls.Permissions}`;\r\n    const response = await ArmProvider.get(resourcePermissionsUrl, accessToken, locale, language);\r\n    const permissions = response && response.json ? await response.json() : { value: [] };\r\n    if (actionToCheck === VNextDataActionPermission.CreateLabInLabPlan) {\r\n        return hasDataActionAccess(actionToCheck, permissions);\r\n    }\r\n    return hasActionAccess(actionToCheck, permissions);\r\n}\r\nfunction hasActionAccess(actionToCheck, resourcePermissions) {\r\n    const allActionsWildCardString = '*';\r\n    const explicitactionPermissions = resourcePermissions.value.filter((values) => values.actions.find((action) => action === actionToCheck));\r\n    const allPermissions = resourcePermissions.value.filter((values) => values.actions.find((action) => action === allActionsWildCardString));\r\n    return explicitactionPermissions.length > 0 || allPermissions.length > 0;\r\n}\r\nfunction hasDataActionAccess(actionToCheck, resourcePermissions) {\r\n    const explicitDataActionPermissions = resourcePermissions.value.filter((values) => values.dataActions.find((dataActions) => dataActions === actionToCheck));\r\n    return explicitDataActionPermissions.length > 0;\r\n}\r\nconst PermissionsProvider = {\r\n    ActionPermissions,\r\n    VNextActionPermissions,\r\n    VNextDataActionPermission,\r\n    hasAccess,\r\n};\r\nexport default PermissionsProvider;\r\n","import { ResourceId } from '../../utils/resource-id';\r\nimport { trackTrace } from '../../utils/telemetry/telemetry-channel';\r\nimport { defaultLabRoles, Roles } from '../models/roles';\r\nimport { getMlClient } from './arm-data-provider';\r\nimport { ActionPermissions, hasAccess } from './permissions-provider';\r\nasync function getLabRoles(lab, accessToken, locale, language) {\r\n    const roles = [...defaultLabRoles];\r\n    try {\r\n        if (await hasAccess(ActionPermissions.WriteLab, lab.id, accessToken, locale, language)) {\r\n            roles.push(Roles.Write);\r\n        }\r\n    }\r\n    catch (e) {\r\n        trackTrace(`Unable to determine write access for lab ${lab.name} due to error ${e.message}, assuming no access.`);\r\n    }\r\n    return roles;\r\n}\r\nexport async function getLab(labId, accessToken, locale, language, includeRoles) {\r\n    const id = labId instanceof ResourceId ? labId : new ResourceId(labId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const lab = await client.labs.get(id.resourceGroupName, id.parent.name, id.name);\r\n    if (includeRoles) {\r\n        const roles = await getLabRoles(lab, accessToken, locale, language);\r\n        return { ...lab, roles };\r\n    }\r\n    return { ...lab, roles: [] };\r\n}\r\nexport async function listLabs(labAccountId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labAccountId.subscriptionId, accessToken, locale, language);\r\n    const mlLabs = await mlClient.labs.list(labAccountId.resourceGroupName, labAccountId.name);\r\n    const labs = [];\r\n    await Promise.all(mlLabs.map(async (lab, index) => {\r\n        const roles = await getLabRoles(lab, accessToken, locale, language);\r\n        labs[index] = { ...lab, roles };\r\n    }));\r\n    return labs;\r\n}\r\nexport async function beginDeleteLab(labResourceId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labResourceId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.labs.beginDeleteMethod(labResourceId.resourceGroupName, labResourceId.parent.name, labResourceId.name);\r\n}\r\nexport async function updateLab(lab, accessToken, locale, language) {\r\n    const { roles, id } = lab;\r\n    const resourceId = new ResourceId(id);\r\n    const mlClient = getMlClient(resourceId.subscriptionId, accessToken, locale, language);\r\n    const updatedLab = await mlClient.labs.createOrUpdate(resourceId.resourceGroupName, resourceId.parent.name, resourceId.name, lab);\r\n    return { ...updatedLab, roles: [...roles] };\r\n}\r\nexport async function addUsers(labId, emailAddresses, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.labs.addUsers(labId.resourceGroupName, labId.parent.name, labId.name, {\r\n        emailAddresses: emailAddresses,\r\n    });\r\n}\r\nexport async function sendEmail(labId, emailAddresses, extraMessage, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.labs.sendEmail(labId.resourceGroupName, labId.parent.name, labId.name, {\r\n        emailAddresses: emailAddresses,\r\n        extraMessage: extraMessage,\r\n    });\r\n}\r\nexport async function getPricingAndAvailability(labId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labId.subscriptionId, accessToken, locale, language);\r\n    const result = await mlClient.labs.getLabPricingAndAvailability(labId.resourceGroupName, labId.parent.name, labId.name);\r\n    return result;\r\n}\r\nexport async function syncUserList(labId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.labs.beginSyncUserList(labId.resourceGroupName, labId.parent.name, labId.name);\r\n}\r\nconst LabProvider = {\r\n    getLab,\r\n    listLabs,\r\n    beginDeleteLab,\r\n    updateLab,\r\n    addUsers,\r\n    sendEmail,\r\n    syncUserList,\r\n};\r\nexport default LabProvider;\r\n","import { createVNextArmApiClient, get } from '../../arm-data-provider';\r\nimport { VNextActionPermissions, hasAccess } from '../../permissions-provider';\r\nimport { defaultLabRoles, newLabRoles, Roles } from '../../../../data/models/roles';\r\nimport { trackTrace } from '../../../../utils/telemetry/telemetry-channel';\r\nimport { Urls } from '../../../../utils/constants';\r\nasync function getLabRoles(lab, accessToken, locale, language) {\r\n    const roles = [...defaultLabRoles];\r\n    try {\r\n        if (await hasAccess(VNextActionPermissions.WriteLab, lab.id, accessToken, locale, language)) {\r\n            roles.push(Roles.Write);\r\n        }\r\n        if (await hasAccess(VNextActionPermissions.WriteLabVm, lab.id, accessToken, locale, language)) {\r\n            roles.push(Roles.LabAssistant);\r\n        }\r\n    }\r\n    catch (e) {\r\n        trackTrace(`Unable to determine write access for lab ${lab.name} due to error ${e.message}, assuming no access.`);\r\n    }\r\n    return roles;\r\n}\r\nexport async function listSubscriptionLabs(subscription, armAccessToken, locale, language) {\r\n    const client = createVNextArmApiClient(subscription.subscriptionId, armAccessToken, locale, language);\r\n    let currentPage = await client.labs.listBySubscription();\r\n    let response = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await client.labs.listBySubscriptionNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        response = response.concat(nextPage);\r\n    }\r\n    const labs = [];\r\n    await Promise.all(response.map(async (lab, index) => {\r\n        const roles = await getLabRoles(lab, armAccessToken, locale, language);\r\n        labs[index] = { ...lab, roles };\r\n    }));\r\n    return labs;\r\n}\r\nexport async function listResourceGroupLabs(resourceId, armAccessToken, locale, language) {\r\n    const client = createVNextArmApiClient(resourceId.subscriptionId, armAccessToken, locale, language);\r\n    let currentPage = await client.labs.listByResourceGroup(resourceId.resourceGroupName);\r\n    let response = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await client.labs.listByResourceGroupNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        response = response.concat(nextPage);\r\n    }\r\n    const labs = [];\r\n    await Promise.all(response.map(async (lab, index) => {\r\n        const roles = await getLabRoles(lab, armAccessToken, locale, language);\r\n        labs[index] = { ...lab, roles };\r\n    }));\r\n    return labs;\r\n}\r\nexport async function createOrUpdateLab(labParentId, labData, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labParentId.subscriptionId, accessToken, locale, language);\r\n    const lroPoller = await client.labs.beginCreateOrUpdate(labData, labParentId.resourceGroupName, labData.name);\r\n    return { ...lroPoller.getInitialResponse().parsedBody, roles: [...newLabRoles] };\r\n}\r\nexport async function deleteLab(labId, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    await client.labs.beginDeleteMethod(labId.resourceGroupName, labId.name);\r\n}\r\nexport async function syncLabUser(labId, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    await client.labs.syncGroup(labId.resourceGroupName, labId.name);\r\n}\r\nexport async function getLab(labId, armAccessToken, labsApiAccessToken, locale, language, includeRoles) {\r\n    const client = createVNextArmApiClient(labId.subscriptionId, armAccessToken, locale, language);\r\n    const lab = await client.labs.get(labId.resourceGroupName, labId.name);\r\n    if (includeRoles) {\r\n        const roles = await getLabRoles(lab, armAccessToken, locale, language);\r\n        return { ...lab, roles };\r\n    }\r\n    return { ...lab, roles: [] };\r\n}\r\nexport async function publishLab(labId, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    const publishLabResult = await client.labs.publish(labId.resourceGroupName, labId.name);\r\n    return publishLabResult?._response.parsedBody;\r\n}\r\nexport async function updateLab(labId, labUpdateData, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    return await client.labs.update(labUpdateData, labId.resourceGroupName, labId.name);\r\n}\r\nexport async function beginUpdateLab(labId, labUpdateData, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    const lroPoller = await client.labs.beginUpdate(labUpdateData, labId.resourceGroupName, labId.name);\r\n    return lroPoller.getInitialResponse().parsedBody;\r\n}\r\nexport async function getOperationResult(operation, accessToken, locale, language) {\r\n    const relativeUrl = operation?.id + Urls.OperationsResult;\r\n    const resultPromise = await get(relativeUrl, accessToken, locale, language);\r\n    const result = await resultPromise.json();\r\n    const operationResult = {\r\n        ...operation,\r\n        status: result.status,\r\n        endTime: result.endTime,\r\n        error: result.error,\r\n    };\r\n    return operationResult;\r\n}\r\nconst LabProvider = {\r\n    listSubscriptionLabs,\r\n    listResourceGroupLabs,\r\n    createOrUpdateLab,\r\n    deleteLab,\r\n    syncLabUser,\r\n    getLab,\r\n    publishLab,\r\n    updateLab,\r\n    beginUpdateLab,\r\n    getOperationResult,\r\n};\r\nexport default LabProvider;\r\n","import { call, put, race, select, take, delay, cancelled, fork, cancel } from 'redux-saga/effects';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { listLabs } from '../../../data/providers/lab-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { fatalError } from '../../actions/common/common-action-creators';\r\nimport { listLabs as listLabsActionCreator, listLabsError, listLabsSuccess, pollLabListCancelled, listLabsCancelled, loadSubscriptionVNextLabsError, listVNextLabsSuccess, } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType, } from '../../actions/lab/lab-actions';\r\nimport { getLanguage, getLocale, isLmsHost } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { IdentityErrorCode } from '../../../data/models/identity';\r\nimport { isRouteTeamsConfig } from '../../selectors/route-selector';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { LabParentResourceActionType } from '../../actions/lab-parent-resource/lab-parent-resource-actions';\r\nimport LabProvider from '../../../data/providers/vnext/arm-api/lab-provider';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { getLtiContextId } from '../../selectors/lti-selectors';\r\nexport function* listLabsForLabAccount(action) {\r\n    const { labParentId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labParentId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { labs, changed } = yield race({\r\n            labs: call(listLabs, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(LabActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(LabActionType.POLL_LAB_LIST_STOP),\r\n                take(LabActionType.POLL_LAB_LIST_CANCELLED),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listLabsCancelled());\r\n        }\r\n        else {\r\n            yield put(listLabsSuccess(labs));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labParentId, FailureOperation.LoadLabs, e ? e.code : undefined);\r\n        yield put(listLabsError(error));\r\n    }\r\n}\r\nexport function* listLabsOnLabParentChange(action) {\r\n    const { resourceId } = action;\r\n    const isTeamsConfigPage = yield select(isRouteTeamsConfig);\r\n    if (!isTeamsConfigPage) {\r\n        yield put(listLabsActionCreator(resourceId));\r\n        const { error: errorAction } = yield race({\r\n            success: take(LabActionType.LIST_LABS_SUCCESS),\r\n            error: take(LabActionType.LIST_LABS_ERROR),\r\n        });\r\n        if (errorAction) {\r\n            const { error } = errorAction;\r\n            switch (error.code) {\r\n                case IdentityErrorCode.AccessDenied:\r\n                case ErrorCode.AuthorizationFailed:\r\n                    yield put(fatalError(ErrorCode.LabAccountAuthorizationFailed, error));\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction* pollLabList(action) {\r\n    try {\r\n        const { initialDelayMs, labParentId } = action;\r\n        if (!!initialDelayMs) {\r\n            yield delay(initialDelayMs);\r\n        }\r\n        while (true) {\r\n            yield put(listLabsActionCreator(labParentId));\r\n            yield race({\r\n                success: take(LabActionType.LIST_LABS_SUCCESS),\r\n                error: take(LabActionType.LIST_LABS_ERROR),\r\n                cancelled: take(LabActionType.LIST_LABS_CANCELLED),\r\n            });\r\n            const { intervalMs } = action;\r\n            yield delay(intervalMs);\r\n        }\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(pollLabListCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollLabListSaga() {\r\n    while (true) {\r\n        const action = yield take(LabActionType.POLL_LAB_LIST_START);\r\n        const pollLabListTask = yield fork(pollLabList, action);\r\n        yield take(LabActionType.POLL_LAB_LIST_STOP);\r\n        yield cancel(pollLabListTask);\r\n    }\r\n}\r\nexport function* loadSubscriptionVNextLabs(subscription) {\r\n    let labs = [];\r\n    const armAccessToken = yield call(getArmAccessTokenSaga);\r\n    const locale = yield select(getLocale);\r\n    const language = yield select(getLanguage);\r\n    try {\r\n        labs = yield call(LabProvider.listSubscriptionLabs, subscription, armAccessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, subscription.subscriptionId, FailureOperation.ListVNextLabsForSubscription, err ? err.code : undefined);\r\n        yield put(loadSubscriptionVNextLabsError(subscription, error));\r\n    }\r\n    return labs;\r\n}\r\nexport function* listResourceGroupLabs(action) {\r\n    const { labParentId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labParentId);\r\n        const armAccessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const isLms = yield select(isLmsHost);\r\n        // eslint-disable-next-line prefer-const\r\n        let { labs, changed } = yield race({\r\n            labs: call(LabProvider.listResourceGroupLabs, resourceId, armAccessToken, locale, language),\r\n            changed: race([\r\n                take(LabActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(LabActionType.POLL_LAB_LIST_STOP),\r\n                take(LabActionType.POLL_LAB_LIST_CANCELLED),\r\n            ]),\r\n        });\r\n        if (isLms) {\r\n            const ltiContextId = yield select(getLtiContextId);\r\n            labs = labs.filter((o) => !!o.rosterProfile?.ltiContextId &&\r\n                caseInsensitiveCultureInvariantCompare(o.rosterProfile?.ltiContextId, ltiContextId) === 0);\r\n        }\r\n        if (changed) {\r\n            yield put(listLabsCancelled());\r\n        }\r\n        else {\r\n            yield put(listVNextLabsSuccess(labs, labParentId));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labParentId, FailureOperation.LoadLabs, e ? e.code : undefined);\r\n        yield put(listLabsError(error));\r\n    }\r\n}\r\nexport function* listLabsSaga() {\r\n    yield labParentBasedTakeLatest(LabActionType.LIST_LABS, listLabsForLabAccount, listResourceGroupLabs);\r\n}\r\nexport function* listLabsOnLabParentChangeSaga() {\r\n    yield labParentBasedTakeLatest(LabParentResourceActionType.SELECT_LAB_PARENT_RESOURCE, listLabsOnLabParentChange, undefined);\r\n}\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport PermissionsProvider from '../../../data/providers/permissions-provider';\r\nimport { trackTrace } from '../../../utils/telemetry/telemetry-channel';\r\nimport { updateVnextCreatelabPermission, updateVnextPermissionPropagation } from '../../actions/lab/lab-action-creators';\r\nimport { getCreateLabPermissionOnLabPlan } from '../../selectors/vnext/lab-selectors';\r\nexport function* checkVNextCreateLabPermissionOnLabPlan(action) {\r\n    const { labPlanId } = action;\r\n    const armAccessToken = yield call(getArmAccessTokenSaga);\r\n    const locale = yield select(getLocale);\r\n    const language = yield select(getLanguage);\r\n    const hasCreateLabPermissionOnLabPlan = yield select(getCreateLabPermissionOnLabPlan);\r\n    try {\r\n        // check CreateLabInLabPlan dataAction permission for VNext lab permission propagation scenario, \r\n        // to update initial flag hasCreateLabPermissionOnLabPlan and propagation status flag isVnextLabPermissionPropagating in lab store\r\n        const newHasCreateLabPermissionOnLabPlan = yield call(PermissionsProvider.hasAccess, PermissionsProvider.VNextDataActionPermission.CreateLabInLabPlan, labPlanId, armAccessToken, locale, language);\r\n        if (newHasCreateLabPermissionOnLabPlan) {\r\n            yield put(updateVnextPermissionPropagation(true));\r\n            if (!hasCreateLabPermissionOnLabPlan) {\r\n                yield put(updateVnextCreatelabPermission(true));\r\n            }\r\n        }\r\n        // when permission has changed, sync this flag in lab store\r\n        if (!newHasCreateLabPermissionOnLabPlan && hasCreateLabPermissionOnLabPlan) {\r\n            yield put(updateVnextCreatelabPermission(false));\r\n        }\r\n    }\r\n    catch (e) {\r\n        trackTrace(`Unable to determine write access for lab plan ${labPlanId} due to error ${e.message}, assuming no access.`);\r\n    }\r\n}\r\nexport function* checkVNextCreateLabPermissionOnLabPlanSaga() {\r\n    yield takeLatest(LabActionType.CHECK_VNEXT_CREATELAB_PERMISSION, checkVNextCreateLabPermissionOnLabPlan);\r\n}\r\n","import { put, race, select, take, delay, cancelled } from 'redux-saga/effects';\r\nimport { labAppInitialize } from '../../actions/common/common-action-creators';\r\nimport { isTerminalState } from '../../selectors/common-selectors';\r\nimport { getLab, getLabMetadata, pollLabCancelled, pollLabStop, updateVnextPermissionPropagation, } from '../../actions/lab/lab-action-creators';\r\nimport { getVNextLab, getVnextLabPermissionPropagating } from '../../selectors/vnext/lab-selectors';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport ErrorCode from '../../../common/error-codes';\r\nexport function* pollLab(action) {\r\n    let shouldPoll = true;\r\n    const { id, intervalMs, initialDelayMs, shouldStopWhenTerminalState } = action;\r\n    const isVnextLabPermissionPropagating = yield select(getVnextLabPermissionPropagating);\r\n    if (isVnextLabPermissionPropagating) {\r\n        // poll get lab for VNext lab permission propagation scenario until it succeeds\r\n        try {\r\n            if (!!initialDelayMs) {\r\n                yield delay(initialDelayMs);\r\n            }\r\n            while (shouldPoll) {\r\n                yield put(getLab(id, false));\r\n                const { success: labSuccess, error: labError } = yield race({\r\n                    success: take(LabActionType.GET_LAB_SUCCESS),\r\n                    error: take(LabActionType.GET_LAB_ERROR),\r\n                    cancelled: take(LabActionType.GET_LAB_CANCELLED),\r\n                });\r\n                if (shouldStopWhenTerminalState) {\r\n                    if (!!labError) {\r\n                        shouldPoll = labError.error.code === ErrorCode.AuthorizationFailed;\r\n                    }\r\n                    else if (!!labSuccess) {\r\n                        shouldPoll = false;\r\n                    }\r\n                    else {\r\n                        shouldPoll = true;\r\n                    }\r\n                }\r\n                if (shouldPoll) {\r\n                    yield delay(intervalMs);\r\n                }\r\n                else {\r\n                    // update isVnextLabPermissionPropagating to false\r\n                    yield put(updateVnextPermissionPropagation(false));\r\n                    if (shouldStopWhenTerminalState) {\r\n                        yield put(getLabMetadata(id));\r\n                    }\r\n                    yield put(pollLabStop());\r\n                    // permission propagation finished, retry vNextLabAppInitialize for the same lab id\r\n                    yield put(labAppInitialize(id));\r\n                }\r\n            }\r\n        }\r\n        finally {\r\n            if (yield cancelled()) {\r\n                yield put(pollLabCancelled());\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        // old logic for other scenarios\r\n        try {\r\n            if (!!initialDelayMs) {\r\n                yield delay(initialDelayMs);\r\n            }\r\n            while (shouldPoll) {\r\n                yield put(getLab(id));\r\n                yield race({\r\n                    success: take(LabActionType.GET_LAB_SUCCESS),\r\n                    error: take(LabActionType.GET_LAB_ERROR),\r\n                    cancelled: take(LabActionType.GET_LAB_CANCELLED),\r\n                });\r\n                const currentLab = yield select(getVNextLab, id);\r\n                if (shouldStopWhenTerminalState) {\r\n                    shouldPoll = !isTerminalState(currentLab.provisioningState);\r\n                }\r\n                if (shouldPoll) {\r\n                    yield delay(intervalMs);\r\n                }\r\n                else {\r\n                    if (shouldStopWhenTerminalState) {\r\n                        yield put(getLabMetadata(id));\r\n                    }\r\n                    yield put(pollLabStop());\r\n                }\r\n            }\r\n        }\r\n        finally {\r\n            if (yield cancelled()) {\r\n                yield put(pollLabCancelled());\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { call, cancel, fork, put, race, select, take, delay, cancelled } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport LabProvider from '../../../data/providers/lab-provider';\r\nimport VNextLabProvider from '../../../data/providers/vnext/arm-api/lab-provider';\r\nimport { getLanguage, getLocale } from '../../../redux/selectors/common-selectors';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getLabCancelled, getLabError, getLabMetadata, getLabSuccess, getVNextLabSuccess, publishVNextLabError, syncLabUsersError, } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { listUsers } from '../../actions/user/user-action-creators';\r\nimport { isLabUserSyncFailed, isLabUserSyncSucceeded, isLabUserSyncing, } from '../../../common/selectors/lab-latest-operation';\r\nimport { getCurrentLab } from '../../selectors/lab-selectors';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { pollLab } from './poll-non-terminal-state-lab';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { listEnvironments } from '../../actions/environment/environment-action-creators';\r\nimport { OperationsResultActionType, } from '../../../redux/actions/operations/operations-result-actions';\r\nimport { getLabOperations } from '../../../redux/selectors/vnext/operations-selector';\r\nimport { FiveSecondInterval } from '../../../utils/constants';\r\nimport { OperationStatus } from '../../../data/models/vnext/operation';\r\nimport { publishOperationResultSuccess, publishOperationResultCancelled, operationsResultError, } from '../../actions/operations/operations-result-action-creators';\r\nexport function* getLab(action) {\r\n    const { labId, includeRoles } = action;\r\n    try {\r\n        const oldLab = yield select(getCurrentLab);\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { lab, changed } = yield race({\r\n            lab: call(LabProvider.getLab, resourceId, accessToken, locale, language, includeRoles),\r\n            // TODO: Add other actions that should cancel update here\r\n            changed: race([\r\n                take(LabActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(LabActionType.SELECT_LAB),\r\n                take(LabActionType.POLL_LAB_STOP),\r\n                take(LabActionType.POLL_LAB_CANCELLED),\r\n                take(LabActionType.UPDATE_LAB),\r\n                take(LabActionType.UPDATE_LAB_SUCCESS),\r\n                take(LabActionType.LIST_LABS),\r\n                take(LabActionType.LIST_LABS_SUCCESS),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getLabCancelled());\r\n        }\r\n        else {\r\n            yield put(getLabSuccess(lab));\r\n            const newLab = lab;\r\n            if (!!oldLab && isLabUserSyncing(oldLab)) {\r\n                if (isLabUserSyncFailed(newLab)) {\r\n                    const syncUsersError = new MlClientError(newLab.latestOperationResult?.errorMessage, labId, FailureOperation.SyncLabUsers, newLab.latestOperationResult?.errorCode);\r\n                    yield put(syncLabUsersError(labId, syncUsersError));\r\n                }\r\n                else if (isLabUserSyncSucceeded(newLab)) {\r\n                    yield put(listUsers(labId));\r\n                }\r\n            }\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e?.message, labId, FailureOperation.GetLab, e?.code);\r\n        yield put(getLabError(error));\r\n    }\r\n}\r\nexport function* getVNextLab(action) {\r\n    const { labId, includeRoles, includeMetadata } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId, true);\r\n        const oldLab = yield select(getCurrentLab);\r\n        const armAccessToken = yield call(getArmAccessTokenSaga);\r\n        const labsApiAccessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { lab, changed } = yield race({\r\n            lab: call(VNextLabProvider.getLab, resourceId, armAccessToken, labsApiAccessToken, locale, language, includeRoles),\r\n            changed: race([\r\n                take(LabActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(LabActionType.SELECT_LAB),\r\n                take(LabActionType.POLL_LAB_STOP),\r\n                take(LabActionType.POLL_LAB_CANCELLED),\r\n                take(LabActionType.UPDATE_LAB),\r\n                take(LabActionType.UPDATE_LAB_SUCCESS),\r\n                take(LabActionType.LIST_LABS),\r\n                take(LabActionType.LIST_LABS_SUCCESS),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getLabCancelled());\r\n        }\r\n        else {\r\n            yield put(getVNextLabSuccess(lab));\r\n            const newLab = lab;\r\n            if (oldLab?.state === LabServicesModels.LabState.Syncing &&\r\n                newLab.state !== LabServicesModels.LabState.Syncing) {\r\n                yield put(listUsers(labId));\r\n            }\r\n            if (oldLab?.provisioningState === LabServicesModels.ProvisioningState.Creating &&\r\n                newLab.provisioningState === LabServicesModels.ProvisioningState.Succeeded) {\r\n                yield put(listEnvironments(labId));\r\n            }\r\n        }\r\n        if (includeMetadata) {\r\n            yield put(getLabMetadata(labId));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e?.message, labId, FailureOperation.GetLab, e?.code);\r\n        yield put(getLabError(error));\r\n    }\r\n}\r\nexport function* pollLabSaga() {\r\n    // while this looks like an infinite loop, yield take(POLL_LAB_START)\r\n    // will pause this code until polling is started\r\n    while (true) {\r\n        const action = yield take(LabActionType.POLL_LAB_START);\r\n        // forking so the polling task runs without blocking\r\n        const pollTask = yield fork(pollLab, action);\r\n        // waits until the stop is triggered so we can cancel the polling task\r\n        yield race([\r\n            take(LabActionType.SELECT_LAB_PARENT_RESOURCE),\r\n            take(LabActionType.SELECT_LAB),\r\n            take(LabActionType.POLL_LAB_STOP),\r\n            take(LabActionType.SELECT_TENANT),\r\n        ]);\r\n        yield cancel(pollTask);\r\n    }\r\n}\r\nexport function* getLabSaga() {\r\n    yield labParentBasedTakeLatest(LabActionType.GET_LAB, getLab, getVNextLab);\r\n}\r\nexport async function callGetOperationResult(operation, accessToken, locale, language) {\r\n    try {\r\n        const operationResult = await VNextLabProvider.getOperationResult(operation, accessToken, locale, language);\r\n        return operationResult;\r\n    }\r\n    catch (e) {\r\n        throw e;\r\n    }\r\n}\r\nexport function* getOperationResult(action) {\r\n    const { labId } = action;\r\n    const accessToken = yield call(getArmAccessTokenSaga);\r\n    const locale = yield select(getLocale);\r\n    const language = yield select(getLanguage);\r\n    const pollingInterval = FiveSecondInterval;\r\n    try {\r\n        while (true) {\r\n            yield delay(pollingInterval);\r\n            const operations = yield select(getLabOperations);\r\n            const operation = operations.get(labId);\r\n            if (operation.status == OperationStatus.InProgress) {\r\n                const { operationResult, cancel } = yield race({\r\n                    operationResult: call(callGetOperationResult, operation, accessToken, locale, language),\r\n                    cancel: take(OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT_CANCELLED),\r\n                });\r\n                if (operationResult) {\r\n                    yield put(publishOperationResultSuccess(operationResult));\r\n                    if (operationResult.status == OperationStatus.Failed) {\r\n                        const error = new MlClientError(undefined, labId, FailureOperation.PublishTemplate, operationResult.error ? operationResult.error.code : undefined);\r\n                        yield put(publishVNextLabError(labId, error));\r\n                    }\r\n                }\r\n                if (cancel) {\r\n                    yield put(publishOperationResultCancelled());\r\n                }\r\n            }\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.GetOperationsResultFailure, e ? e.code : undefined);\r\n        yield put(operationsResultError(error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(publishOperationResultCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollLabOperationSaga() {\r\n    while (true) {\r\n        const action = yield take(OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT);\r\n        const pollOperationsTask = yield fork(getOperationResult, action);\r\n        yield take(OperationsResultActionType.POLL_PUBLISH_OPERATION_RESULT_CANCELLED);\r\n        yield cancel(pollOperationsTask);\r\n    }\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { beginDeleteLab } from '../../../data/providers/lab-provider';\r\nimport { deleteLabError, deleteLabSuccess } from '../../actions/lab/lab-action-creators';\r\nimport MlClientError, { FailureOperation, AzurePolicyViolation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport LabProvider from '../../../data/providers/vnext/arm-api/lab-provider';\r\nimport { labParentBasedTakeEvery } from '../../effects/lab-parent-based';\r\nexport function* deleteLab(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const labResourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(beginDeleteLab, labResourceId, accessToken, locale, language);\r\n        yield put(deleteLabSuccess(labId));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.DeleteLab, e ? e.code : undefined);\r\n        yield put(deleteLabError(error));\r\n    }\r\n}\r\nexport function* deleteVNextLab(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const labResourceId = new ResourceId(labId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(LabProvider.deleteLab, labResourceId, accessToken, locale, language);\r\n        yield put(deleteLabSuccess(labId));\r\n    }\r\n    catch (e) {\r\n        let policyViolationDefinitionIds = undefined;\r\n        if (e?.code === AzurePolicyViolation.CODE) {\r\n            policyViolationDefinitionIds = [];\r\n            const errorObject = JSON.parse(e.response.body);\r\n            for (const additionalInfo of errorObject.error.additionalInfo) {\r\n                policyViolationDefinitionIds.push(additionalInfo.info.policyDefinitionId);\r\n            }\r\n        }\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.DeleteLab, e ? e.code : undefined, policyViolationDefinitionIds ? policyViolationDefinitionIds : undefined);\r\n        yield put(deleteLabError(error));\r\n    }\r\n}\r\nexport function* deleteLabSaga() {\r\n    yield labParentBasedTakeEvery(LabActionType.DELETE_LAB, deleteLab, deleteVNextLab);\r\n}\r\n","import { call, put, race, select, take } from 'redux-saga/effects';\r\nimport { isLabUserSyncFailed, isLabUserSyncRunning, isLabUserSyncSucceeded, } from '../../../common/selectors/lab-latest-operation';\r\nimport { listUsers } from '../../actions/user/user-action-creators';\r\nimport { FailureOperation, MlClientError, AzurePolicyViolation } from '../../../data/ml-client-error';\r\nimport { LabUpdateOperation } from '../../../data/models/lab';\r\nimport LabProvider from '../../../data/providers/lab-provider';\r\nimport VNextLabProvider from '../../../data/providers/vnext/arm-api/lab-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { updateLabError, updateLabSuccess, syncLabUsers, updateVNextLabSuccess, getLab, pollLabUntilTerminalStateStart, } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getGroupName } from '../../actions/group/group-action-creators';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getVNextLab } from '../../selectors/vnext/lab-selectors';\r\nimport { TenSecondInterval } from '../../../utils/constants';\r\nexport function* updateLab(action) {\r\n    const { lab, updateOperation } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const updatedLab = yield call(LabProvider.updateLab, lab, accessToken, locale, language);\r\n        yield put(updateLabSuccess(updatedLab));\r\n        // The updatelab operation doesn't return the syncoperation from the RP - should be fixed in vnext\r\n        // for now, we manually force a sync operation in cases when we're setting the group id to let the ui render the proper state\r\n        // additionally, we wont have the group name until we reload the lab-app unless we call this here and we want to show it on the page\r\n        if (updateOperation === LabUpdateOperation.SetGroup) {\r\n            yield put(getGroupName(updatedLab.aadGroupId));\r\n            yield put(syncLabUsers(updatedLab.id));\r\n        }\r\n        // dispatch listUsers action to make sure the user list will be updated if the new syncUserList job is finished before next polling of lab\r\n        if ((lab.latestOperationResult?.operationUrl !== updatedLab.latestOperationResult?.operationUrl ||\r\n            isLabUserSyncRunning(lab)) &&\r\n            (isLabUserSyncSucceeded(updatedLab) || isLabUserSyncFailed(updatedLab))) {\r\n            yield put(listUsers(lab.id));\r\n        }\r\n    }\r\n    catch (e) {\r\n        let failureOperation;\r\n        switch (updateOperation) {\r\n            case LabUpdateOperation.AccessMode:\r\n                failureOperation = FailureOperation.UpdateLabAccessMode;\r\n                break;\r\n            case LabUpdateOperation.Capacity:\r\n                failureOperation = FailureOperation.UpdateLabCapacity;\r\n                break;\r\n            case LabUpdateOperation.Quota:\r\n                failureOperation = FailureOperation.UpdateLabQuota;\r\n                break;\r\n            case LabUpdateOperation.Settings:\r\n                failureOperation = FailureOperation.UpdateLabSettings;\r\n                break;\r\n            default:\r\n                failureOperation = FailureOperation.UpdateLab;\r\n                break;\r\n        }\r\n        const error = new MlClientError(e ? e.message : undefined, lab.id, failureOperation, e ? e.code : undefined);\r\n        yield put(updateLabError(error));\r\n    }\r\n}\r\nexport function* updateVNextLab(action) {\r\n    const { labId, labUpdate, updateOperation } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId, true);\r\n        const oldLab = yield select(getVNextLab, labId);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        let updatedLab;\r\n        if (updateOperation === LabUpdateOperation.Capacity ||\r\n            updateOperation === LabUpdateOperation.SetGroup ||\r\n            updateOperation === LabUpdateOperation.Settings) {\r\n            updatedLab = yield call(VNextLabProvider.beginUpdateLab, resourceId, labUpdate, accessToken, locale, language);\r\n        }\r\n        else {\r\n            updatedLab = yield call(VNextLabProvider.updateLab, resourceId, labUpdate, accessToken, locale, language);\r\n        }\r\n        yield put(updateVNextLabSuccess({ ...updatedLab, roles: [...oldLab.roles] }));\r\n        if (updateOperation === LabUpdateOperation.Capacity ||\r\n            updateOperation === LabUpdateOperation.SetGroup ||\r\n            updateOperation === LabUpdateOperation.Settings) {\r\n            yield put(pollLabUntilTerminalStateStart(labId, TenSecondInterval, TenSecondInterval));\r\n        }\r\n    }\r\n    catch (e) {\r\n        let failureOperation;\r\n        switch (updateOperation) {\r\n            case LabUpdateOperation.AccessMode:\r\n                failureOperation = FailureOperation.UpdateLabAccessMode;\r\n                break;\r\n            case LabUpdateOperation.Capacity:\r\n                if (e?.code == FailureOperation.ScalingDownWhenVirtualMachinesAreRunning) {\r\n                    failureOperation = FailureOperation.ScalingDownWhenVirtualMachinesAreRunning;\r\n                }\r\n                else {\r\n                    failureOperation = FailureOperation.UpdateLabCapacity;\r\n                }\r\n                break;\r\n            case LabUpdateOperation.Quota:\r\n                failureOperation = FailureOperation.UpdateLabQuota;\r\n                break;\r\n            case LabUpdateOperation.TitleOrDesciption:\r\n                failureOperation = FailureOperation.UpdateLabTitleOrDescription;\r\n                break;\r\n            case LabUpdateOperation.Settings:\r\n                failureOperation = FailureOperation.UpdateLabSettings;\r\n                yield put(getLab(labId));\r\n                yield race({\r\n                    success: take(LabActionType.GET_LAB_SUCCESS),\r\n                    cancelled: take(LabActionType.GET_LAB_CANCELLED),\r\n                    error: take(LabActionType.GET_LAB_ERROR),\r\n                });\r\n                break;\r\n            default:\r\n                failureOperation = FailureOperation.UpdateLab;\r\n                break;\r\n        }\r\n        let policyViolationDefinitionIds = undefined;\r\n        if (e?.code === AzurePolicyViolation.CODE) {\r\n            policyViolationDefinitionIds = [];\r\n            const errorObject = JSON.parse(e.response.body);\r\n            for (const additionalInfo of errorObject.error.additionalInfo) {\r\n                policyViolationDefinitionIds.push(additionalInfo.info.policyDefinitionId);\r\n            }\r\n        }\r\n        const error = new MlClientError(e ? e.message : undefined, labId, failureOperation, e ? e.code : undefined, policyViolationDefinitionIds ? policyViolationDefinitionIds : undefined);\r\n        yield put(updateLabError(error));\r\n    }\r\n}\r\nexport function* updateLabSaga() {\r\n    yield labParentBasedTakeLatest(LabActionType.UPDATE_LAB, updateLab, updateVNextLab);\r\n}\r\n","import _ from 'lodash';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { newLabRoles } from '../models/roles';\r\nimport { getMlClient } from './arm-data-provider';\r\nexport async function listSubscriptionLabAccounts(subscription, accessToken, locale, language) {\r\n    const client = getMlClient(subscription.subscriptionId, accessToken, locale, language);\r\n    const labAccounts = await client.labAccounts.listBySubscription();\r\n    const result = _.uniqBy(labAccounts, (labAccount) => labAccount.id.toLowerCase());\r\n    return result;\r\n}\r\nexport async function getCoreRestrictionsAndUsages(labAccountId, accessToken, locale, language) {\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const result = await client.labAccounts.getRestrictionsAndUsage(id.resourceGroupName, id.name);\r\n    return result;\r\n}\r\nexport async function getLabAccount(labAccountId, accessToken, locale, language) {\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const result = await client.labAccounts.get(id.resourceGroupName, id.name);\r\n    return result;\r\n}\r\nexport async function listGalleryImages(labAccountId, accessToken, locale, language) {\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const result = await client.galleryImages.list(id.resourceGroupName, id.name, {\r\n        filter: `(properties/isEnabled)`,\r\n    });\r\n    return result;\r\n}\r\nexport async function createLab(labAccountId, props, accessToken, locale, language) {\r\n    // trimming the lab name so that we don't create labs with trailing spaces\r\n    // even though the RP allows it, due to other RP bugs (can't delete or adjust capacity)\r\n    const labParameters = props.labParameters\r\n        ? {\r\n            ...props.labParameters,\r\n            username: props.labParameters.username ? props.labParameters.username.trim() : undefined,\r\n            password: props.labParameters.password ? props.labParameters.password.trim() : undefined,\r\n        }\r\n        : undefined;\r\n    const createProps = { ...props, name: props.name.trim(), labParameters };\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const lab = await client.labAccounts.createLab(id.resourceGroupName, id.name, createProps);\r\n    return { ...lab, roles: [...newLabRoles] };\r\n}\r\nexport async function getPricingAndAvailability(labAccountId, accessToken, locale, language) {\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const result = await client.labAccounts.getPricingAndAvailability(id.resourceGroupName, id.name);\r\n    return result.operatingSystems || {};\r\n}\r\nconst LabAccountProvider = {\r\n    listSubscriptionLabAccounts,\r\n    getLabAccount,\r\n    listGalleryImages,\r\n    createLab,\r\n    getCoreRestrictionsAndUsages,\r\n};\r\nexport default LabAccountProvider;\r\n","import { newLabRoles } from '../../../../data/models/roles';\r\nimport { createLabsApiClient } from './labs-api-client-factory';\r\nexport async function createLab(labParentId, labData, accessToken, locale, language, ltiToken) {\r\n    const client = createLabsApiClient(labParentId.subscriptionId, accessToken, locale, language);\r\n    const options = {\r\n        customHeaders: !!ltiToken ? { 'x-ml-lti-id-token': ltiToken } : undefined,\r\n    };\r\n    const lab = await client.lab.labPlanPut(labData, labData.location, labParentId.resourceGroupName, labData.name, options);\r\n    return { ...lab, roles: [...newLabRoles] };\r\n}\r\nexport async function publishLab(region, labId, accessToken, locale, language, capacity) {\r\n    const client = createLabsApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    let publishLabResult = await client.lab.publish(region, labId.resourceGroupName, labId.name, {\r\n        capacity,\r\n    });\r\n    return publishLabResult._response.parsedBody;\r\n}\r\nconst LabProvider = {\r\n    createLab,\r\n    publishLab,\r\n};\r\nexport default LabProvider;\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport { call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation, AzurePolicyViolation } from '../../../data/ml-client-error';\r\nimport LabAccountProvider from '../../../data/providers/lab-account-provider';\r\nimport { clearCacheForScope } from '../../../data/providers/msal-provider';\r\nimport { clearCacheForScope as clearCacheForScopeTeams } from '../../../data/providers/teams-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { createLabError, createLabSuccess, createVNextLabSuccess, selectLab, updateVnextPermissionPropagation, addVnextPermissionPropagatingLab, } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { getLanguage, getLocale, isLmsHost, isTeamsHost } from '../../selectors/common-selectors';\r\nimport { getSearch } from '../../selectors/route-selector';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport LabProvider from '../../../data/providers/vnext/labs-api/lab-provider';\r\nimport { getLtiTokenSaga } from '../lti/lti-token';\r\nimport { getVnextLabPermissionPropagating, getCreateLabPermissionOnLabPlan } from '../../selectors/vnext/lab-selectors';\r\nexport function* createLab(action) {\r\n    const { labParentId, props, getCompleteRoute } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labParentId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const newLab = yield call(LabAccountProvider.createLab, resourceId, props, accessToken, locale, language);\r\n        const isTeamsHosted = yield select(isTeamsHost);\r\n        if (isTeamsHosted) {\r\n            yield call(clearCacheForScopeTeams, accessToken);\r\n        }\r\n        else {\r\n            yield call(clearCacheForScope, accessToken);\r\n        }\r\n        // refresh access token and allow redirects for browsers\r\n        // such as Safari or Brave\r\n        const labId = `${labParentId}/labs/${newLab.name}`;\r\n        const returnUrl = yield call(getCompleteRoute, labId);\r\n        yield call(getArmAccessTokenSaga, true, returnUrl);\r\n        // TODO: Create a saga that always injects search so we can stop doing this\r\n        // all over the codebase\r\n        const search = yield select(getSearch);\r\n        yield put(selectLab(labId));\r\n        yield put(routerActions.push({ pathname: returnUrl, search }));\r\n        yield put(createLabSuccess(newLab));\r\n    }\r\n    catch (e) {\r\n        const labId = `${labParentId}/labs/${props.name}`;\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.CreateLab, e ? e.code : undefined);\r\n        yield put(createLabError(error));\r\n    }\r\n}\r\n// create vNext lab saga\r\nexport function* createVNextLab(action) {\r\n    const { labParentId, props, getCompleteRoute } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labParentId);\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const isLms = yield select(isLmsHost);\r\n        let ltiToken;\r\n        if (isLms) {\r\n            ltiToken = yield call(getLtiTokenSaga);\r\n        }\r\n        const newLab = yield call(LabProvider.createLab, resourceId, props, accessToken, locale, language, isLms ? ltiToken : undefined);\r\n        const isTeamsHosted = yield select(isTeamsHost);\r\n        if (isTeamsHosted) {\r\n            yield call(clearCacheForScopeTeams, accessToken);\r\n        }\r\n        else {\r\n            yield call(clearCacheForScope, accessToken);\r\n        }\r\n        const search = yield select(getSearch);\r\n        // refresh access token and allow redirects for browsers\r\n        // such as Safari or Brave\r\n        const labId = `${labParentId}/providers/microsoft.labservices/labs/${newLab.name}`;\r\n        const returnUrl = yield call(getCompleteRoute, labId);\r\n        yield call(getArmAccessTokenSaga, true, `${returnUrl}${search}`);\r\n        yield call(getLabsApiAccessTokenSaga, true, `${returnUrl}${search}`);\r\n        yield put(selectLab(labId));\r\n        yield put(routerActions.push({ pathname: returnUrl, search }));\r\n        yield put(createVNextLabSuccess(newLab));\r\n        const hasCreateLabPermissionOnLabPlan = yield select(getCreateLabPermissionOnLabPlan);\r\n        if (hasCreateLabPermissionOnLabPlan) {\r\n            yield put(addVnextPermissionPropagatingLab(newLab));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const labId = `${labParentId}/providers/microsoft.labservices/labs/${props.name}`;\r\n        const policyViolationDefinitionIds = [];\r\n        if (e?.code === AzurePolicyViolation.CODE) {\r\n            const errorObject = JSON.parse(e.response.body);\r\n            for (const additionalInfo of errorObject.error.additionalInfo) {\r\n                policyViolationDefinitionIds.push(additionalInfo.info.policyDefinitionId);\r\n            }\r\n        }\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.CreateLab, e ? e.code : undefined, policyViolationDefinitionIds ? policyViolationDefinitionIds : []);\r\n        yield put(createLabError(error));\r\n        // check permission propagating flag in vnext lab store\r\n        const vNextLabPermissionPropagating = yield select(getVnextLabPermissionPropagating);\r\n        // need to clear the propagating flag when create lab failed to not show the permission propagating banner\r\n        if (vNextLabPermissionPropagating) {\r\n            // update isVnextLabPermissionPropagating to false for the current lab that failed lab creation\r\n            yield put(updateVnextPermissionPropagation(false));\r\n        }\r\n    }\r\n}\r\nexport function* createLabSaga() {\r\n    yield labParentBasedTakeLatest(LabActionType.CREATE_LAB, createLab, createVNextLab);\r\n}\r\n","import { put, race, select, take } from 'redux-saga/effects';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getVNextLab } from '../../selectors/vnext/lab-selectors';\r\nimport { LabUpdateOperation } from '../../../data/models/lab';\r\nimport { updateLab, updateLabAccessModeError, updateLabAccessModeSuccess, updateVNextLab, } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType, } from '../../actions/lab/lab-actions';\r\nimport { getVCurrentLab } from '../../selectors/lab-selectors';\r\nimport { toEnableState } from '../../../data/helpers/enum-helpers';\r\nexport function* updateLabAccessMode(action) {\r\n    const { labId, userAccessMode } = action;\r\n    try {\r\n        const lab = yield select(getVCurrentLab, labId);\r\n        if (!lab) {\r\n            yield put(updateLabAccessModeError(labId));\r\n        }\r\n        else {\r\n            const labUpdate = { ...lab, userAccessMode };\r\n            yield put(updateLab(labUpdate, LabUpdateOperation.AccessMode));\r\n            const { success } = yield race({\r\n                success: take(LabActionType.UPDATE_LAB_SUCCESS),\r\n                error: take(LabActionType.UPDATE_LAB_ERROR),\r\n            });\r\n            if (success) {\r\n                yield put(updateLabAccessModeSuccess());\r\n            }\r\n            else {\r\n                yield put(updateLabAccessModeError(labId));\r\n            }\r\n        }\r\n    }\r\n    catch (error) {\r\n        yield put(updateLabAccessModeError(labId));\r\n    }\r\n}\r\nexport function* updateVNextLabAccessMode(action) {\r\n    const { labId, openAccess } = action;\r\n    try {\r\n        const lab = yield select(getVNextLab, labId);\r\n        if (!lab) {\r\n            yield put(updateLabAccessModeError(labId));\r\n        }\r\n        else {\r\n            const securityProfile = { ...lab.securityProfile, openAccess: toEnableState(openAccess) };\r\n            const labUpdateData = { securityProfile };\r\n            yield put(updateVNextLab(labId, labUpdateData, LabUpdateOperation.AccessMode));\r\n            const { success } = yield race({\r\n                success: take(LabActionType.UPDATE_LAB_SUCCESS),\r\n                error: take(LabActionType.UPDATE_LAB_ERROR),\r\n            });\r\n            if (success) {\r\n                yield put(updateLabAccessModeSuccess());\r\n            }\r\n            else {\r\n                yield put(updateLabAccessModeError(labId));\r\n            }\r\n        }\r\n    }\r\n    catch (error) {\r\n        yield put(updateLabAccessModeError(labId));\r\n    }\r\n}\r\nexport function* updateLabAccessModeSaga() {\r\n    yield labParentBasedTakeLatest(LabActionType.UPDATE_LAB_ACCESS_MODE, updateLabAccessMode, updateVNextLabAccessMode);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport LabProvider from '../../../data/providers/lab-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { getLab, syncLabUsersError } from '../../actions/lab/lab-action-creators';\r\nimport VNextLabProvider from '../../../data/providers/vnext/arm-api/lab-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { listUsers } from '../../actions/user/user-action-creators';\r\nexport function* syncLabUsers(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(LabProvider.syncUserList, resourceId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.SyncLabUsers, e ? e.code : undefined);\r\n        yield put(syncLabUsersError(labId, error));\r\n    }\r\n}\r\nexport function* syncVNextLabUsers(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(VNextLabProvider.syncLabUser, resourceId, accessToken, locale, language);\r\n        yield put(getLab(labId, true, true));\r\n        yield put(listUsers(labId));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.SyncLabUsers, e ? e.code : undefined);\r\n        yield put(syncLabUsersError(labId, error));\r\n    }\r\n}\r\nexport function* syncLabUsersSaga() {\r\n    yield labParentBasedTakeLatest(LabActionType.SYNC_LAB_USERS, syncLabUsers, syncVNextLabUsers);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport LabProvider from '../../../data/providers/vnext/arm-api/lab-provider';\r\nimport { getVNextLab } from '../../selectors/vnext/lab-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getLab, pollLabUntilTerminalStateStart, publishVNextLabError, clearPublishLabError, } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { OneMinuteInterval } from '../../../utils/constants';\r\nimport LabsApiLabProvider from '../../../data/providers/vnext/labs-api/lab-provider';\r\nexport function* publishVNextLab(action) {\r\n    const { labId, capacity, shouldUpdateCapacity } = action;\r\n    try {\r\n        yield put(clearPublishLabError(labId));\r\n        const resourceId = new ResourceId(labId, true);\r\n        const lab = yield select(getVNextLab, labId);\r\n        if (!lab) {\r\n            yield put(publishVNextLabError(labId, new MlClientError('Lab was not found', labId, FailureOperation.PublishTemplate)));\r\n            return;\r\n        }\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        if (lab.state === LabServicesModels.LabState.Draft && shouldUpdateCapacity) {\r\n            const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n            yield call(LabsApiLabProvider.publishLab, lab.location, resourceId, accessToken, locale, language, capacity);\r\n            yield put(pollLabUntilTerminalStateStart(labId, OneMinuteInterval, OneMinuteInterval));\r\n        }\r\n        else {\r\n            const accessToken = yield call(getArmAccessTokenSaga);\r\n            yield call(LabProvider.publishLab, resourceId, accessToken, locale, language);\r\n            // get lab to clear the pending state and get the latest lab state\r\n            yield put(getLab(labId, true, true));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.PublishTemplate, e ? e.code : undefined);\r\n        yield put(publishVNextLabError(labId, error));\r\n    }\r\n}\r\nexport function* publishVNextLabSaga() {\r\n    yield takeLatest(LabActionType.PUBLISH_LAB, publishVNextLab);\r\n}\r\n","import { createLabsApiClient } from './labs-api-client-factory';\r\nexport async function getLabMetadata(region, resourceId, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(resourceId.subscriptionId, accessToken, locale, language);\r\n    const response = (await labsApiClient.lab.getMetadata(region, resourceId.resourceGroupName, resourceId.name));\r\n    return response;\r\n}\r\nconst ResourceMetaDataProvider = {\r\n    getLabMetadata,\r\n};\r\nexport default ResourceMetaDataProvider;\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport ResourceMetaDataProvider from '../../../data/providers/vnext/labs-api/resource-metadata-provider';\r\nimport { getLabMetadataError, getLabMetadataSuccess } from '../../actions/lab/lab-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getVNextLab } from '../../selectors/vnext/lab-selectors';\r\nexport function* getLabMetadata(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const resourceId = new ResourceId(labId, true);\r\n        const lab = yield select(getVNextLab, labId);\r\n        const metadata = yield call(ResourceMetaDataProvider.getLabMetadata, lab.location, resourceId, accessToken, locale, language);\r\n        yield put(getLabMetadataSuccess(labId, metadata));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.GetLabMetadata, e ? e.code : undefined);\r\n        yield put(getLabMetadataError(error));\r\n    }\r\n}\r\nexport function* getLabMetadataSaga() {\r\n    yield takeLatest(LabActionType.GET_LAB_METADATA, getLabMetadata);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listLabsSaga, listLabsOnLabParentChangeSaga, pollLabListSaga } from './list-labs';\r\nimport { checkVNextCreateLabPermissionOnLabPlanSaga } from './check-permission';\r\nimport { getLabSaga, pollLabSaga, pollLabOperationSaga } from './get-lab';\r\nimport { deleteLabSaga } from './delete-lab';\r\nimport { updateLabSaga } from './update-lab';\r\nimport { createLabSaga } from './create-lab';\r\nimport { updateLabAccessModeSaga } from './update-lab-access-mode';\r\nimport { syncLabUsersSaga } from './sync-lab-users';\r\nimport { publishVNextLabSaga } from './publish-lab';\r\nimport { getLabMetadataSaga } from './get-lab-metadata';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listLabsSaga),\r\n        fork(getLabSaga),\r\n        fork(deleteLabSaga),\r\n        fork(checkVNextCreateLabPermissionOnLabPlanSaga),\r\n        fork(createLabSaga),\r\n        fork(updateLabSaga),\r\n        fork(listLabsOnLabParentChangeSaga),\r\n        fork(updateLabAccessModeSaga),\r\n        fork(pollLabSaga),\r\n        fork(syncLabUsersSaga),\r\n        fork(pollLabListSaga),\r\n        fork(publishVNextLabSaga),\r\n        fork(getLabMetadataSaga),\r\n        fork(pollLabOperationSaga),\r\n    ]);\r\n}\r\n","import { LabAccountActionType, } from './lab-account-actions';\r\nexport const listLabAccounts = (selectFirst, selectFirstIfSelectedNotFound) => ({\r\n    type: LabAccountActionType.LIST_LAB_ACCOUNTS,\r\n    selectFirst,\r\n    selectFirstIfSelectedNotFound,\r\n});\r\nexport const listLabAccountsSuccess = (labAccounts) => ({\r\n    type: LabAccountActionType.LIST_LAB_ACCOUNTS_SUCCESS,\r\n    labAccounts,\r\n});\r\nexport const listLabAccountsError = (error) => ({\r\n    type: LabAccountActionType.LIST_LAB_ACCOUNTS_ERROR,\r\n    error,\r\n});\r\nexport const refreshSubscriptionsAndLabAccounts = () => ({\r\n    type: LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS,\r\n});\r\nexport const refreshSubscriptionsAndLabAccountsSuccess = () => ({\r\n    type: LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_SUCCESS,\r\n});\r\nexport const refreshSubscriptionsAndLabAccountsError = (refreshError) => ({\r\n    type: LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS_ERROR,\r\n    refreshError,\r\n});\r\nexport const loadSubscriptionLabAccountsError = (subscription, error) => ({\r\n    type: LabAccountActionType.LOAD_SUBSCRIPTION_LAB_ACCOUNTS_ERROR,\r\n    subscription,\r\n    error,\r\n});\r\nexport const getLabAccount = (id) => ({\r\n    type: LabAccountActionType.GET_LAB_ACCOUNT,\r\n    id,\r\n});\r\nexport const getLabAccountSuccess = (labAccount) => ({\r\n    type: LabAccountActionType.GET_LAB_ACCOUNT_SUCCESS,\r\n    labAccount,\r\n});\r\nexport const getLabAccountError = (id, error) => ({\r\n    type: LabAccountActionType.GET_LAB_ACCOUNT_ERROR,\r\n    id,\r\n    error,\r\n});\r\nconst actions = {\r\n    listLabAccounts,\r\n    listLabAccountsSuccess,\r\n    listLabAccountsError,\r\n    loadSubscriptionLabAccountsError,\r\n    getLabAccount,\r\n    getLabAccountSuccess,\r\n    getLabAccountError,\r\n};\r\nexport default actions;\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport LabAccountProvider from '../../../data/providers/lab-account-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getLabAccountError, getLabAccountSuccess } from '../../actions/lab-account/lab-account-action-creators';\r\nimport { LabAccountActionType } from '../../actions/lab-account/lab-account-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* getLabAccount(action) {\r\n    const { id } = action;\r\n    try {\r\n        const resourceId = new ResourceId(id);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const labAccount = yield call(LabAccountProvider.getLabAccount, resourceId, accessToken, locale, language);\r\n        yield put(getLabAccountSuccess(labAccount));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, id, FailureOperation.GetLabAccount, err ? err.code : undefined);\r\n        yield put(getLabAccountError(id, error));\r\n    }\r\n}\r\nexport function* getLabAccountSaga() {\r\n    yield takeLatest(LabAccountActionType.GET_LAB_ACCOUNT, getLabAccount);\r\n}\r\n","import { call, put, takeLatest, select, all } from 'redux-saga/effects';\r\nimport { LabAccountActionType } from '../../actions/lab-account/lab-account-actions';\r\nimport { listSubscriptionLabAccounts } from '../../../data/providers/lab-account-provider';\r\nimport { loadSubscriptionLabAccountsError, listLabAccountsSuccess, listLabAccountsError, } from '../../actions/lab-account/lab-account-action-creators';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getSubscriptions } from '../../selectors/subscription-selector';\r\nimport { isHealthyState } from '../../../utils/provisioning-state';\r\nimport { compareByName } from '../../../utils/common';\r\nimport { getCurrentLabAccountId } from '../../selectors/lab-parent-resource-selectors';\r\nimport { selectLabParentResource } from '../../actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nexport function getFirstValidLabAccount(labAccounts) {\r\n    const validLabAccounts = labAccounts.filter((o) => isHealthyState(o)).sort(compareByName);\r\n    const labAccount = validLabAccounts.length > 0 ? validLabAccounts[0] : undefined;\r\n    return labAccount;\r\n}\r\nexport function* loadSubscriptionLabAccounts(subscription) {\r\n    let labAccounts = [];\r\n    const accessToken = yield call(getArmAccessTokenSaga);\r\n    const locale = yield select(getLocale);\r\n    const language = yield select(getLanguage);\r\n    try {\r\n        labAccounts = yield call(listSubscriptionLabAccounts, subscription, accessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, subscription.subscriptionId, FailureOperation.ListLabAccountsForSubscription, err ? err.code : undefined);\r\n        yield put(loadSubscriptionLabAccountsError(subscription, error));\r\n    }\r\n    return labAccounts;\r\n}\r\nexport function* listLabAccounts(action) {\r\n    try {\r\n        const { selectFirst, selectFirstIfSelectedNotFound } = action;\r\n        const subscriptions = yield select(getSubscriptions);\r\n        const loadLabAccountsCalls = subscriptions.toArray().map((subscription) => {\r\n            return call(loadSubscriptionLabAccounts, subscription);\r\n        });\r\n        const labAccountsResults = yield all(loadLabAccountsCalls);\r\n        let labAccounts = [];\r\n        labAccountsResults?.forEach((value) => {\r\n            labAccounts = [...labAccounts, ...value];\r\n        });\r\n        // select a lab account if required (must happen before success otherwise there is a race condition)\r\n        if (selectFirst) {\r\n            const firstLabAccount = yield call(getFirstValidLabAccount, labAccounts);\r\n            if (firstLabAccount && firstLabAccount.id) {\r\n                yield put(selectLabParentResource(firstLabAccount.id));\r\n            }\r\n        }\r\n        else if (selectFirstIfSelectedNotFound) {\r\n            // This is used to fallback to the first lab account if the one restored from\r\n            // user settings is no longer being returned. Otherwise, the user would see a resource\r\n            // not found page.\r\n            const selectedLabAccountId = yield select(getCurrentLabAccountId);\r\n            if (labAccounts.findIndex((la) => la.id === selectedLabAccountId) < 0) {\r\n                const firstLabAccount = yield call(getFirstValidLabAccount, labAccounts);\r\n                if (firstLabAccount && firstLabAccount.id) {\r\n                    yield put(selectLabParentResource(firstLabAccount.id));\r\n                }\r\n            }\r\n        }\r\n        yield put(listLabAccountsSuccess(labAccounts));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, 'all-subscriptions', FailureOperation.ListLabAccounts, err ? err.code : undefined);\r\n        yield put(listLabAccountsError(error));\r\n    }\r\n}\r\nexport function* listLabAccountsSaga() {\r\n    yield takeLatest(LabAccountActionType.LIST_LAB_ACCOUNTS, listLabAccounts);\r\n}\r\n","import { put, select } from 'redux-saga/effects';\r\nimport { updateUserSettings } from '../../actions/identity/identity-action-creators';\r\nimport { LabAccountActionType } from '../../actions/lab-account/lab-account-actions';\r\nimport { featureBasedTakeLatest } from '../../effects/feature-based';\r\nimport { getUserSettings } from '../../selectors/identity-selector';\r\nexport function* rememberLabAccount(action) {\r\n    const { resourceId: lastUsedLabParent } = action;\r\n    // only update our user settings if this value changes\r\n    const currentSettings = yield select(getUserSettings);\r\n    if (currentSettings.get('lastUsedParentResource') !== lastUsedLabParent) {\r\n        const settingsUpdate = {\r\n            lastUsedParentResource: lastUsedLabParent,\r\n        };\r\n        yield put(updateUserSettings(settingsUpdate));\r\n    }\r\n}\r\nexport function* rememberVNextLabParent(action) {\r\n    const { resourceId: lastUsedLabParent } = action;\r\n    // only update our user settings if this value changes\r\n    const currentSettings = yield select(getUserSettings);\r\n    if (currentSettings.get('lastUsedParentResource') !== lastUsedLabParent) {\r\n        const settingsUpdate = {\r\n            lastUsedParentResource: lastUsedLabParent,\r\n        };\r\n        yield put(updateUserSettings(settingsUpdate));\r\n    }\r\n}\r\nexport function* rememberLabAccountSaga() {\r\n    yield featureBasedTakeLatest(LabAccountActionType.SELECT_LAB_PARENT_RESOURCE, rememberLabAccount, rememberVNextLabParent);\r\n}\r\n","import { SubscriptionActionType, } from './subscription-actions';\r\nexport const loadSubscriptions = () => ({\r\n    type: SubscriptionActionType.LOAD_SUBSCRIPTIONS,\r\n});\r\nexport const loadSubscriptionsSuccess = (subscriptions) => ({\r\n    type: SubscriptionActionType.LOAD_SUBSCRIPTIONS_SUCCESS,\r\n    subscriptions,\r\n});\r\nexport const loadSubscriptionsError = (error) => ({\r\n    type: SubscriptionActionType.LOAD_SUBSCRIPTIONS_ERROR,\r\n    error,\r\n});\r\nexport const checkFeatureError = (error) => ({\r\n    type: SubscriptionActionType.CHECK_FEATURE_ERROR,\r\n    error,\r\n});\r\n","import { race, put, take, takeLatest } from 'redux-saga/effects';\r\nimport { LabAccountActionType, } from '../../actions/lab-account/lab-account-actions';\r\nimport { loadSubscriptions } from '../../actions/subscription/subscription-action-creators';\r\nimport { SubscriptionActionType } from '../../actions/subscription/subscription-actions';\r\nimport { refreshSubscriptionsAndLabAccountsError, listLabAccounts, refreshSubscriptionsAndLabAccountsSuccess, } from '../../actions/lab-account/lab-account-action-creators';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nexport function* refreshSubscriptionsAndLabAccounts(action) {\r\n    try {\r\n        yield put(loadSubscriptions());\r\n        const { error: loadSubscriptionErrorAction } = yield race({\r\n            success: take(SubscriptionActionType.LOAD_SUBSCRIPTIONS_SUCCESS),\r\n            error: take(SubscriptionActionType.LOAD_SUBSCRIPTIONS_ERROR),\r\n        });\r\n        if (loadSubscriptionErrorAction) {\r\n            const { error } = loadSubscriptionErrorAction;\r\n            yield put(refreshSubscriptionsAndLabAccountsError(error));\r\n        }\r\n        else {\r\n            yield put(listLabAccounts(false, false));\r\n            const { error: listLabAccountsErrorAction } = yield race({\r\n                success: take(LabAccountActionType.LIST_LAB_ACCOUNTS_SUCCESS),\r\n                error: take(LabAccountActionType.LIST_LAB_ACCOUNTS_ERROR),\r\n            });\r\n            if (listLabAccountsErrorAction) {\r\n                const { error } = listLabAccountsErrorAction;\r\n                yield put(refreshSubscriptionsAndLabAccountsError(error));\r\n            }\r\n            else {\r\n                yield put(refreshSubscriptionsAndLabAccountsSuccess());\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.RefreshSubscriptionsAndLabAccounts, err ? err.code : undefined);\r\n        yield put(refreshSubscriptionsAndLabAccountsError(error));\r\n    }\r\n}\r\nexport function* refreshSubscriptionsAndLabAccountsSaga() {\r\n    yield takeLatest(LabAccountActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_ACCOUNTS, refreshSubscriptionsAndLabAccounts);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { getLabAccountSaga } from './get-lab-account';\r\nimport { listLabAccountsSaga } from './list-lab-accounts';\r\nimport { rememberLabAccountSaga } from './remember-lab-account';\r\nimport { refreshSubscriptionsAndLabAccountsSaga } from './refresh-subscriptions-and-lab-accounts';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listLabAccountsSaga),\r\n        fork(getLabAccountSaga),\r\n        fork(rememberLabAccountSaga),\r\n        fork(refreshSubscriptionsAndLabAccountsSaga),\r\n    ]);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { isLmsProfessor } from '../../selectors/lti-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { IdentityErrorCode } from '../../../data/models/identity';\r\nimport { getRedirectAuthError, loginPopup, loginRedirect, loginSilent, } from '../../../data/providers/msal-provider';\r\nimport { loginSilent as loginSilentTeams } from '../../../data/providers/teams-provider';\r\nimport { setAuthenticatedUserContext } from '../../../utils/telemetry/telemetry-channel';\r\nimport { loadUserPhoto, setLoginHint, signInError, signInFailed, signInRedirecting, signInSuccess, signInPoppingUp, } from '../../actions/identity/identity-action-creators';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { isTeamsHost } from '../../selectors/common-selectors';\r\nimport { getCurrentReturnUrl, getTenantId, getDisplayId, getLoginHint } from '../../selectors/identity-selector';\r\nimport { getReturnUrl } from '../../selectors/route-selector';\r\nexport function* signIn(action) {\r\n    try {\r\n        const { isInteractive, persistUrl } = action;\r\n        // fetch tenantId and we will sign in user's account to this specified tenantId\r\n        const tenantId = yield select(getTenantId);\r\n        const loginHint = yield select(getLoginHint);\r\n        const shouldPopupWindow = yield select(isLmsProfessor);\r\n        // determine if we have any auth errors from a previous\r\n        // sign in attempt\r\n        const authError = yield call(getRedirectAuthError);\r\n        if (authError) {\r\n            const { errorCode } = authError;\r\n            switch (errorCode) {\r\n                case IdentityErrorCode.LoginRequired:\r\n                    if (shouldPopupWindow) {\r\n                        yield put(signInPoppingUp());\r\n                    }\r\n                    else {\r\n                        yield put(signInRedirecting());\r\n                    }\r\n                    let returnUrl = yield select(getCurrentReturnUrl);\r\n                    if (!returnUrl) {\r\n                        returnUrl = yield select(getReturnUrl);\r\n                    }\r\n                    if (shouldPopupWindow) {\r\n                        const result = yield call(loginPopup, tenantId, loginHint);\r\n                        const { account } = result;\r\n                        yield put(signInSuccess(account));\r\n                    }\r\n                    else {\r\n                        yield call(loginRedirect, returnUrl, tenantId, loginHint);\r\n                    }\r\n                    break;\r\n                case IdentityErrorCode.AccessDenied:\r\n                case IdentityErrorCode.UserCanceled:\r\n                    yield put(signInFailed(errorCode));\r\n                    break;\r\n                default:\r\n                    const error = new MlClientError(undefined, '', FailureOperation.SignIn, errorCode);\r\n                    yield put(signInError(errorCode, error));\r\n                    break;\r\n            }\r\n            return;\r\n        }\r\n        let result;\r\n        const isTeamsHosted = yield select(isTeamsHost);\r\n        if (isTeamsHosted) {\r\n            result = yield call(loginSilentTeams, tenantId);\r\n        }\r\n        else {\r\n            result = yield call(loginSilent, tenantId);\r\n        }\r\n        const { isAuthenticated, account, errorCode } = result;\r\n        if (isAuthenticated) {\r\n            yield put(signInSuccess(account));\r\n            if (!isTeamsHosted) {\r\n                const loginHint = account.idTokenClaims['preferred_username'];\r\n                yield put(setLoginHint(loginHint));\r\n                yield put(loadUserPhoto());\r\n            }\r\n        }\r\n        else if (isInteractive) {\r\n            if (shouldPopupWindow) {\r\n                yield put(signInPoppingUp());\r\n                result = yield call(loginPopup, tenantId, loginHint);\r\n                const { account } = result;\r\n                yield put(signInSuccess(account));\r\n            }\r\n            else {\r\n                yield put(signInRedirecting());\r\n                if (persistUrl) {\r\n                    const returnUrl = yield select(getReturnUrl);\r\n                    yield call(loginRedirect, returnUrl, tenantId, loginHint);\r\n                }\r\n                else {\r\n                    yield call(loginRedirect, undefined, tenantId, loginHint);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            yield put(signInFailed(errorCode));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const errorCode = IdentityErrorCode.Unknown;\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.SignIn, err ? err.code : errorCode);\r\n        yield put(signInError(errorCode, error));\r\n    }\r\n}\r\nexport function* updateTelemetryUserId(action) {\r\n    const displayId = yield select(getDisplayId);\r\n    yield call(setAuthenticatedUserContext, displayId);\r\n}\r\nexport function* signInSaga() {\r\n    yield takeLatest(IdentityActionType.SIGN_IN, signIn);\r\n}\r\nexport function* updateTelemetryUserIdSaga() {\r\n    yield takeLatest(IdentityActionType.SIGN_IN_SUCCESS, updateTelemetryUserId);\r\n}\r\n","import { call, takeLatest, put, select } from 'redux-saga/effects';\r\nimport { logOut } from '../../../data/providers/msal-provider';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { clearAuthenticatedUserContext } from '../../../utils/telemetry/telemetry-channel';\r\nimport { lmsCompleteSignOut, signOutError } from '../../actions/identity/identity-action-creators';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { clearFatalError, clearUserSession, fatalError } from '../../actions/common/common-action-creators';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport { routerActions } from 'connected-react-router';\r\nimport Routes from '../../../utils/routes';\r\nimport { isLmsHost } from '../../selectors/common-selectors';\r\nexport function* signOut(action) {\r\n    try {\r\n        const isLms = yield select(isLmsHost);\r\n        yield put(clearUserSession());\r\n        yield call(clearAuthenticatedUserContext);\r\n        if (isLms) {\r\n            yield put(clearFatalError());\r\n            yield put(routerActions.push({ pathname: Routes.LoggedOut }));\r\n            yield put(lmsCompleteSignOut());\r\n        }\r\n        else {\r\n            yield call(logOut);\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.SignOut, err ? err.code : undefined);\r\n        yield put(signOutError(error));\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n    }\r\n}\r\nexport function* signOutSaga() {\r\n    yield takeLatest(IdentityActionType.SIGN_OUT, signOut);\r\n}\r\n","// move to config?\r\nconst graphPictureUrl = 'https://graph.microsoft.com/v1.0/me/photos/48x48/$value';\r\nconst graphPictureContentType = 'image/jpg';\r\nexport async function getUserPhotoUrl(accessToken) {\r\n    const headers = new Headers();\r\n    headers.append('Content-Type', graphPictureContentType);\r\n    headers.append('Authorization', `Bearer ${accessToken}`);\r\n    const result = await fetch(graphPictureUrl, {\r\n        method: 'GET',\r\n        headers,\r\n        mode: 'cors',\r\n    });\r\n    if (result.status === 404 || result.status === 401) {\r\n        return undefined;\r\n    }\r\n    else if (result.status === 200) {\r\n        const pictureBlob = await result.blob();\r\n        const pictureUrl = URL.createObjectURL(pictureBlob);\r\n        return pictureUrl;\r\n    }\r\n    const response = await result.json();\r\n    throw new Error(`An error occurred while acquiring the user photo. Status: ${result.status}, Response: ${response}`);\r\n}\r\n","import { takeLatest, put, call } from 'redux-saga/effects';\r\nimport { getUserPhotoUrl } from '../../../data/providers/user-photo-provider';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { loadUserPhotoError, loadUserPhotoFailed, loadUserPhotoSuccess, } from '../../actions/identity/identity-action-creators';\r\nimport { getGraphAccessTokenSaga } from './access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nexport function* loadUserPhoto(action) {\r\n    try {\r\n        // We need to allow redirect here to get graph tokens in browsers with cookie sandboxing (safari, brave)\r\n        // Redirecting here so we don't lose context later when we try to get the group info\r\n        const accessToken = yield call(getGraphAccessTokenSaga, undefined, true);\r\n        const photoUrl = yield call(getUserPhotoUrl, accessToken);\r\n        if (!photoUrl) {\r\n            yield put(loadUserPhotoFailed());\r\n        }\r\n        else {\r\n            yield put(loadUserPhotoSuccess(photoUrl));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.GetUserPhoto, err ? err.code : undefined);\r\n        yield put(loadUserPhotoError(error));\r\n    }\r\n}\r\nexport function* loadUserPhotoSaga() {\r\n    yield takeLatest(IdentityActionType.LOAD_USER_PHOTO, loadUserPhoto);\r\n}\r\n","import { call, takeLatest } from 'redux-saga/effects';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { clearUserSession as clearMsalUserSession } from '../../../data/providers/msal-provider';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nexport function* clearUserSession(action) {\r\n    try {\r\n        yield call(clearMsalUserSession);\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n    }\r\n}\r\nexport function* clearUserSessionSaga() {\r\n    yield takeLatest(IdentityActionType.CLEAR_USER_SESSION, clearUserSession);\r\n}\r\n","import { Constants } from '../../utils/constants';\r\nimport { getItem, setItem } from '../../utils/storage';\r\nimport { trackException, trackTrace } from '../../utils/telemetry/telemetry-channel';\r\nimport { defaultSettings, settingsCacheKey } from '../models/user-settings';\r\nimport { getMlClient } from './arm-data-provider';\r\nexport function getCacheKey(displayId) {\r\n    return `${settingsCacheKey}-${displayId}`;\r\n}\r\nexport function updateSettingsCache(displayId, settings) {\r\n    const key = getCacheKey(displayId);\r\n    const cache = getUserSettingsFromCache(displayId);\r\n    if (cache) {\r\n        if (settings.disableHints !== undefined) {\r\n            cache.disableHints = settings.disableHints;\r\n        }\r\n        if (settings.dismissedLabListFirstRun !== undefined) {\r\n            cache.dismissedLabListFirstRun = settings.dismissedLabListFirstRun;\r\n        }\r\n        if (settings.showRetirementAlert !== undefined) {\r\n            cache.showRetirementAlert = settings.showRetirementAlert;\r\n        }\r\n        if (settings.hasDismissedCovidBanner !== undefined) {\r\n            cache.hasDismissedCovidBanner = settings.hasDismissedCovidBanner;\r\n        }\r\n        if (settings.hasDismissedOldV1GpuLabBanner !== undefined) {\r\n            cache.hasDismissedOldV1GpuLabBanner = settings.hasDismissedOldV1GpuLabBanner;\r\n        }\r\n        if (settings.lastUsedParentResource !== undefined) {\r\n            cache.lastUsedParentResource = settings.lastUsedParentResource;\r\n        }\r\n        setItem(key, JSON.stringify(cache));\r\n    }\r\n    else {\r\n        setItem(key, JSON.stringify(settings));\r\n    }\r\n}\r\nexport function getUserSettingsFromCache(displayId) {\r\n    const key = getCacheKey(displayId);\r\n    const settingsJson = getItem(key);\r\n    if (settingsJson) {\r\n        try {\r\n            const settings = JSON.parse(settingsJson);\r\n            // recast from vcurrent format to vnext\r\n            if (settings.lastUsedLabAccount) {\r\n                settings.lastUsedParentResource = settings.lastUsedLabAccount;\r\n                delete settings.lastUsedLabAccount;\r\n            }\r\n            return settings;\r\n        }\r\n        catch (err) {\r\n            trackException(err);\r\n            trackTrace('UserSettings: failed to parse cached settings.');\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\nexport async function getUserSettings(displayId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    const response = await mlClient.globalUsers.userSettings(Constants.NoUsername, { settingsJson: undefined });\r\n    if (!response) {\r\n        throw new Error('Failed to get user settings from server');\r\n    }\r\n    if (!!response.settingsJson) {\r\n        const settings = JSON.parse(response.settingsJson);\r\n        // recast from vcurrent format to vnext\r\n        if (settings.lastUsedLabAccount) {\r\n            settings.lastUsedParentResource = settings.lastUsedLabAccount;\r\n            delete settings.lastUsedLabAccount;\r\n        }\r\n        updateSettingsCache(displayId, settings);\r\n        return settings;\r\n    }\r\n    return defaultSettings;\r\n}\r\nexport async function updateUserSettings(settings, displayId, accessToken, locale, language) {\r\n    updateSettingsCache(displayId, settings);\r\n    const settingsJson = JSON.stringify(settings);\r\n    const payload = {\r\n        settingsJson,\r\n    };\r\n    const mlClient = getMlClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await mlClient.globalUsers.userSettings(Constants.NoUsername, payload);\r\n}\r\nconst UserSettingsProvider = {\r\n    getUserSettingsFromCache,\r\n    getUserSettings,\r\n    updateUserSettings,\r\n};\r\nexport default UserSettingsProvider;\r\n","import Constants from '../../../../utils/constants';\r\nimport { defaultSettings } from '../../../models/user-settings';\r\nimport { updateSettingsCache } from '../../user-settings-provider';\r\nimport { createLabsApiClient } from './labs-api-client-factory';\r\n// need to convert string types to boolean types\r\nfunction convertResponse(body) {\r\n    if (body.disableHints) {\r\n        body.disableHints = body.disableHints === 'true' ? true : false;\r\n    }\r\n    if (body.dismissedLabListFirstRun) {\r\n        body.dismissedLabListFirstRun = body.dismissedLabListFirstRun === 'true' ? true : false;\r\n    }\r\n    if (body.showRetirementAlert) {\r\n        body.showRetirementAlert = body.showRetirementAlert === 'true' ? true : false;\r\n    }\r\n    if (body.hasDismissedCovidBanner) {\r\n        body.hasDismissedCovidBanner = body.hasDismissedCovidBanner === 'true' ? true : false;\r\n    }\r\n    if (body.hasDismissedOldV1GpuLabBanner) {\r\n        body.hasDismissedOldV1GpuLabBanner = body.hasDismissedOldV1GpuLabBanner === 'true' ? true : false;\r\n    }\r\n    return body;\r\n}\r\nexport async function getUserSettings(displayId, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    const response = await labsApiClient.userSettings.get();\r\n    if (!response) {\r\n        throw new Error('Failed to get user settings from server');\r\n    }\r\n    if (!!response) {\r\n        const settings = convertResponse(response);\r\n        updateSettingsCache(displayId, settings);\r\n        return settings;\r\n    }\r\n    return defaultSettings;\r\n}\r\nexport async function createUserSettings(settings, displayId, accessToken, locale, language) {\r\n    updateSettingsCache(displayId, settings);\r\n    const labsApiClient = createLabsApiClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await labsApiClient.userSettings.createOrUpdate(settings);\r\n}\r\nexport async function updateUserSettings(settings, displayId, accessToken, locale, language) {\r\n    updateSettingsCache(displayId, settings);\r\n    const labsApiClient = createLabsApiClient(Constants.NoSubscriptionId, accessToken, locale, language);\r\n    await labsApiClient.userSettings.update(settings);\r\n}\r\nconst UserSettingsProvider = {\r\n    getUserSettings,\r\n    createUserSettings,\r\n    updateUserSettings,\r\n};\r\nexport default UserSettingsProvider;\r\n","import { put, call, select } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport UserSettingsProvider from '../../../data/providers/user-settings-provider';\r\nimport { default as VNextUserSettingsProvider } from '../../../data/providers/vnext/labs-api/user-settings-provider';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { loadUserSettingsSuccess, loadUserSettingsError, updateUserSettingsExists, } from '../../actions/identity/identity-action-creators';\r\nimport { featureBasedTakeLatest } from '../../effects/feature-based';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getDisplayId } from '../../selectors/identity-selector';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from './access-tokens';\r\nexport function* loadUserSettings(action) {\r\n    try {\r\n        const { canRedirect } = action;\r\n        const accessToken = yield call(getArmAccessTokenSaga, canRedirect);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const displayId = yield select(getDisplayId);\r\n        const settings = yield call(UserSettingsProvider.getUserSettings, displayId, accessToken, locale, language);\r\n        yield put(loadUserSettingsSuccess(settings));\r\n    }\r\n    catch (err) {\r\n        let message = undefined;\r\n        let code = undefined;\r\n        const errorString = !!err ? `${err}` : '';\r\n        if (!!errorString && errorString.startsWith('Error: ')) {\r\n            const errorPayloadString = errorString.replace('Error: ', '');\r\n            try {\r\n                const errorResult = JSON.parse(errorPayloadString);\r\n                if (!!errorResult.Error) {\r\n                    message = errorResult.Error.Message;\r\n                    code = errorResult.Error.Code;\r\n                }\r\n            }\r\n            catch {\r\n                // do nothing\r\n            }\r\n        }\r\n        if (!message) {\r\n            message = !!err ? err.message : undefined;\r\n        }\r\n        if (!code) {\r\n            code = !!err ? err.code : undefined;\r\n        }\r\n        const error = new MlClientError(message, '', FailureOperation.GetUserSettings, code);\r\n        let cachedSettings = undefined;\r\n        try {\r\n            const displayId = yield select(getDisplayId);\r\n            cachedSettings = yield call(UserSettingsProvider.getUserSettingsFromCache, displayId);\r\n        }\r\n        catch {\r\n            // do nothing\r\n        }\r\n        yield put(loadUserSettingsError(error, cachedSettings));\r\n    }\r\n}\r\nexport function* loadVNextUserSettings(action) {\r\n    try {\r\n        const { canRedirect } = action;\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga, canRedirect);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const displayId = yield select(getDisplayId);\r\n        const settings = yield call(VNextUserSettingsProvider.getUserSettings, displayId, accessToken, locale, language);\r\n        yield put(loadUserSettingsSuccess(settings));\r\n        yield put(updateUserSettingsExists());\r\n    }\r\n    catch (err) {\r\n        let message = undefined;\r\n        let code = undefined;\r\n        const errorString = !!err ? `${err}` : '';\r\n        if (!!errorString && errorString.startsWith('Error: ')) {\r\n            const errorPayloadString = errorString.replace('Error: ', '');\r\n            try {\r\n                const errorResult = JSON.parse(errorPayloadString);\r\n                if (!!errorResult.Error) {\r\n                    message = errorResult.Error.Message;\r\n                    code = errorResult.Error.Code;\r\n                }\r\n            }\r\n            catch {\r\n                // do nothing\r\n            }\r\n        }\r\n        if (!message) {\r\n            message = !!err ? err.message : undefined;\r\n        }\r\n        if (!code) {\r\n            code = !!err ? err.code : undefined;\r\n        }\r\n        const error = new MlClientError(message, '', FailureOperation.GetUserSettings, code);\r\n        let cachedSettings = undefined;\r\n        try {\r\n            const displayId = yield select(getDisplayId);\r\n            cachedSettings = yield call(UserSettingsProvider.getUserSettingsFromCache, displayId);\r\n        }\r\n        catch {\r\n            // do nothing\r\n        }\r\n        yield put(loadUserSettingsError(error, cachedSettings));\r\n    }\r\n}\r\nexport function* loadUserSettingsSaga() {\r\n    yield featureBasedTakeLatest(IdentityActionType.LOAD_USER_SETTINGS, loadUserSettings, loadVNextUserSettings);\r\n}\r\n","import { put, call, select, delay, race, take } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport { settingsUpdateDebounceInMs } from '../../../data/models/user-settings';\r\nimport UserSettingsProvider from '../../../data/providers/user-settings-provider';\r\nimport { default as VNextUserSettingsProvider } from '../../../data/providers/vnext/labs-api/user-settings-provider';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { updateUserSettingsSuccess, updateUserSettingsError, updateUserSettingsExists, updateUserSettingsCancelled, } from '../../actions/identity/identity-action-creators';\r\nimport { featureBasedTakeLatest } from '../../effects/feature-based';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getUserSettings, getDisplayId, doesSettingsExist } from '../../selectors/identity-selector';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from './access-tokens';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nexport function* updateUserSettings(action) {\r\n    try {\r\n        // debounce so we can group updates together\r\n        yield delay(settingsUpdateDebounceInMs);\r\n        const accessToken = yield call(getArmAccessTokenSaga, false);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const displayId = yield select(getDisplayId);\r\n        // the merge of the settings update with the existing settings happens in our reducer\r\n        // which happens as soon as the action is dispatched and before this saga is started\r\n        const settings = yield select(getUserSettings);\r\n        yield call(UserSettingsProvider.updateUserSettings, settings.toJS(), displayId, accessToken, locale, language);\r\n        yield put(updateUserSettingsSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.UpdateUserSettings, err ? err.code : undefined);\r\n        yield put(updateUserSettingsError(error));\r\n    }\r\n}\r\nexport function* updateVNextUserSettings(action) {\r\n    try {\r\n        // debounce so we can group updates together\r\n        const { changed } = yield race({\r\n            delayed: delay(settingsUpdateDebounceInMs),\r\n            changed: take(CommonActionType.SELECT_TENANT),\r\n        });\r\n        // when selecting tenant in canvas, we are signing in with popup window rather than redirecting. if not cancelling user settings updating,\r\n        // it will try to get access token for the previously signed in tenant, which would requires login interactively again while we are signing\r\n        // in to the newly selected tenant.\r\n        if (changed) {\r\n            yield put(updateUserSettingsCancelled());\r\n        }\r\n        else {\r\n            const accessToken = yield call(getLabsApiAccessTokenSaga, false);\r\n            const locale = yield select(getLocale);\r\n            const language = yield select(getLanguage);\r\n            const displayId = yield select(getDisplayId);\r\n            // the merge of the settings update with the existing settings happens in our reducer\r\n            // which happens as soon as the action is dispatched and before this saga is started\r\n            const settingsExist = yield select(doesSettingsExist);\r\n            if (settingsExist) {\r\n                yield call(VNextUserSettingsProvider.updateUserSettings, action.settings, // TODO: figure out the type error\r\n                displayId, accessToken, locale, language);\r\n            }\r\n            else {\r\n                const settings = yield select(getUserSettings);\r\n                yield call(VNextUserSettingsProvider.createUserSettings, settings.toJS(), displayId, accessToken, locale, language);\r\n                yield put(updateUserSettingsExists());\r\n            }\r\n            yield put(updateUserSettingsSuccess());\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.UpdateUserSettings, err ? err.code : undefined);\r\n        yield put(updateUserSettingsError(error));\r\n    }\r\n}\r\nexport function* updateUserSettingsSaga() {\r\n    yield featureBasedTakeLatest(IdentityActionType.UPDATE_USER_SETTINGS, updateUserSettings, updateVNextUserSettings);\r\n}\r\n","import { put, call, takeLatest, all } from 'redux-saga/effects';\r\nimport { requestUserConsentOrMfa } from '../../../data/providers/teams-provider';\r\nimport { IdentityActionType } from '../../actions/identity/identity-actions';\r\nimport { requestUserConsentSuccess, requestUserConsentFailed, requestUserConsentError, } from '../../actions/identity/identity-action-creators';\r\nimport { fatalError, clearFatalError, initialize } from '../../actions/common/common-action-creators';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nexport function* requestUserConsent(action) {\r\n    try {\r\n        const result = yield call(requestUserConsentOrMfa);\r\n        yield all([put(clearFatalError()), put(requestUserConsentSuccess(result)), put(initialize())]);\r\n    }\r\n    catch (err) {\r\n        const message = !!err ? err.message : undefined;\r\n        const code = !!err ? err.code || err.message : undefined;\r\n        const error = new MlClientError(message, '', FailureOperation.RequestUserConsent, code);\r\n        let fatalErrorCode;\r\n        switch (code) {\r\n            case 'FailedToOpenWindow':\r\n            case 'CancelledByUser':\r\n                fatalErrorCode =\r\n                    code === 'FailedToOpenWindow' ? ErrorCode.InvalidGrantPopupBlocked : ErrorCode.InvalidGrant;\r\n                yield put(requestUserConsentFailed());\r\n                break;\r\n            default:\r\n                fatalErrorCode = ErrorCode.GenericError;\r\n                yield put(requestUserConsentError(error));\r\n                break;\r\n        }\r\n        yield put(clearFatalError());\r\n        yield put(fatalError(fatalErrorCode, error));\r\n    }\r\n}\r\nexport function* requestUserConsentSaga() {\r\n    yield takeLatest(IdentityActionType.REQUEST_USER_CONSENT, requestUserConsent);\r\n}\r\n","import { fork, all } from 'redux-saga/effects';\r\nimport { signInSaga, updateTelemetryUserIdSaga } from './sign-in';\r\nimport { signOutSaga } from './sign-out';\r\nimport { watchGetAccessTokenRequests } from './access-tokens';\r\nimport { loadUserPhotoSaga } from './load-user-photo';\r\nimport { clearUserSessionSaga } from './clear-user-session';\r\nimport { loadUserSettingsSaga } from './load-user-settings';\r\nimport { updateUserSettingsSaga } from './update-user-settings';\r\nimport { requestUserConsentSaga } from './request-user-consent';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(signInSaga),\r\n        fork(updateTelemetryUserIdSaga),\r\n        fork(signOutSaga),\r\n        fork(watchGetAccessTokenRequests),\r\n        fork(loadUserPhotoSaga),\r\n        fork(clearUserSessionSaga),\r\n        fork(loadUserSettingsSaga),\r\n        fork(updateUserSettingsSaga),\r\n        fork(requestUserConsentSaga),\r\n    ]);\r\n}\r\n","export function getDateInLocalTime(dateString) {\r\n    const dateAndTimeSplit = dateString.split('T');\r\n    const dateSplit = dateAndTimeSplit[0].split('-');\r\n    const timeSplit = dateAndTimeSplit[1].split(':');\r\n    const year = +dateSplit[0];\r\n    const month = +dateSplit[1] - 1;\r\n    const date = +dateSplit[2];\r\n    const hour = +timeSplit[0];\r\n    const minute = +timeSplit[1];\r\n    const second = +timeSplit[2].slice(0, 2);\r\n    return new Date(year, month, date, hour, minute, second);\r\n}\r\n","import { trackTrace } from '../../utils/telemetry/telemetry-channel';\r\nimport { getDateInLocalTime } from '../helpers/date-helpers';\r\nimport { getMlClient } from './arm-data-provider';\r\nfunction adjustScheduleDatesIfNeeded(schedules, scheduleJson) {\r\n    const adjustedSchedules = [...schedules];\r\n    for (let i = 0; i < scheduleJson.length; i++) {\r\n        const id = scheduleJson[i].id;\r\n        const index = schedules.findIndex((schedule) => schedule.id.toLowerCase() === id.toLowerCase());\r\n        const newStart = getDateInLocalTime(scheduleJson[i].properties.start);\r\n        const newEnd = getDateInLocalTime(scheduleJson[i].properties.end);\r\n        adjustedSchedules[index].start = newStart;\r\n        adjustedSchedules[index].end = newEnd;\r\n    }\r\n    return adjustedSchedules;\r\n}\r\nfunction adjustScheduleDateIfNeeded(schedule, scheduleJson) {\r\n    try {\r\n        const newStart = getDateInLocalTime(scheduleJson.properties.start);\r\n        const newEnd = getDateInLocalTime(scheduleJson.properties.end);\r\n        schedule.start = newStart;\r\n        schedule.end = newEnd;\r\n    }\r\n    catch (e) {\r\n        trackTrace(`schedule-provider.ts: Encountered error parsing dates for schedule ${scheduleJson}`);\r\n    }\r\n    return schedule;\r\n}\r\nexport async function listSchedules(id, accessToken, locale, language) {\r\n    const mlClient = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const schedules = await mlClient.schedules.list(id.resourceGroupName, id.parent.parent.name, id.parent.name, id.name);\r\n    const scheduleHttpResponse = await mlClient.schedules.listWithHttpOperationResponse(id.resourceGroupName, id.parent.parent.name, id.parent.name, id.name);\r\n    const scheduleJsonResponse = JSON.parse(scheduleHttpResponse.bodyAsText).value;\r\n    const adjustedSchedules = adjustScheduleDatesIfNeeded(schedules, scheduleJsonResponse);\r\n    return adjustedSchedules;\r\n}\r\nexport async function deleteSchedule(id, accessToken, locale, language) {\r\n    if (!id.subscriptionId) {\r\n        throw new Error('Subscription id not provided');\r\n    }\r\n    if (!id.resourceGroupName) {\r\n        throw new Error('Resource group name not provided');\r\n    }\r\n    if (!id.name) {\r\n        throw new Error('Schedule name not provided');\r\n    }\r\n    if (!id.parent.name) {\r\n        throw new Error('Template name not provided');\r\n    }\r\n    if (!id.parent.parent.name) {\r\n        throw new Error('Lab name not provided');\r\n    }\r\n    if (!id.parent.parent.parent.name) {\r\n        throw new Error('Lab account name not provided');\r\n    }\r\n    const mlClient = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    await mlClient.schedules.deleteMethod(id.resourceGroupName, id.parent.parent.parent.name, id.parent.parent.name, id.parent.name, id.name);\r\n}\r\nexport async function createOrUpdateSchedule(id, accessToken, locale, language, schedule) {\r\n    if (!id.subscriptionId) {\r\n        throw new Error('Subscription id not provided');\r\n    }\r\n    if (!id.resourceGroupName) {\r\n        throw new Error('Resource group name not provided');\r\n    }\r\n    if (!schedule.name) {\r\n        throw new Error('Schedule name not provided');\r\n    }\r\n    if (!id.name) {\r\n        throw new Error('Template name not provided');\r\n    }\r\n    if (!id.parent.name) {\r\n        throw new Error('Lab name not provided');\r\n    }\r\n    if (!id.parent.parent.name) {\r\n        throw new Error('Lab account name not provided');\r\n    }\r\n    const mlClient = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const createdScheduleHttpResponse = await mlClient.schedules.createOrUpdateWithHttpOperationResponse(id.resourceGroupName, id.parent.parent.name, id.parent.name, id.name, schedule.name, schedule);\r\n    const deserializedSchedule = createdScheduleHttpResponse.bodyAsJson;\r\n    const scheduleJsonWithoutDeserializedDates = JSON.parse(createdScheduleHttpResponse.bodyAsText);\r\n    const adjustedSchedule = adjustScheduleDateIfNeeded(deserializedSchedule, scheduleJsonWithoutDeserializedDates);\r\n    return adjustedSchedule;\r\n}\r\nconst ScheduleProvider = {\r\n    listSchedules,\r\n    deleteSchedule,\r\n    createOrUpdateSchedule,\r\n};\r\nexport default ScheduleProvider;\r\n","import { findWindows } from 'windows-iana';\r\nimport { trackTrace } from '../../../../utils/telemetry/telemetry-channel';\r\nimport { getDateInLocalTime } from '../../../helpers/date-helpers';\r\nimport { createVNextArmApiClient } from '../../arm-data-provider';\r\nfunction adjustScheduleDatesIfNeeded(schedules) {\r\n    schedules.forEach((schedule) => adjustScheduleDateIfNeeded(schedule));\r\n}\r\nfunction adjustScheduleDateIfNeeded(schedule) {\r\n    try {\r\n        if (schedule.startAt) {\r\n            const newStart = getDateInLocalTime(schedule.startAt.toISOString());\r\n            schedule.startAt = newStart;\r\n        }\r\n        const newStop = getDateInLocalTime(schedule.stopAt.toISOString());\r\n        schedule.stopAt = newStop;\r\n        if (schedule.recurrencePattern?.expirationDate) {\r\n            const newExpirationDate = getDateInLocalTime(schedule.recurrencePattern.expirationDate.toISOString());\r\n            schedule.recurrencePattern.expirationDate = newExpirationDate;\r\n        }\r\n        schedule.timeZoneId = findWindows(schedule.timeZoneId);\r\n    }\r\n    catch (e) {\r\n        trackTrace(`schedule-provider.ts: Encountered error adjusting dates for schedule ${JSON.stringify(schedule)}`);\r\n    }\r\n}\r\nexport async function listSchedules(id, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(id.subscriptionId, accessToken, locale, language);\r\n    let currentPage = await armApiClient.schedules.listByLab(id.resourceGroupName, id.name);\r\n    let schedules = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await armApiClient.schedules.listByLabNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        schedules = schedules.concat(nextPage);\r\n    }\r\n    adjustScheduleDatesIfNeeded(schedules);\r\n    return schedules;\r\n}\r\nexport async function deleteSchedule(id, accessToken, locale, language) {\r\n    if (!id.subscriptionId) {\r\n        throw new Error('Subscription id not provided');\r\n    }\r\n    if (!id.resourceGroupName) {\r\n        throw new Error('Resource group name not provided');\r\n    }\r\n    if (!id.name) {\r\n        throw new Error('Schedule name not provided');\r\n    }\r\n    if (!id.parent || !id.parent.name) {\r\n        throw new Error('Lab name not provided');\r\n    }\r\n    const armApiClient = createVNextArmApiClient(id.subscriptionId, accessToken, locale, language);\r\n    await armApiClient.schedules.beginDeleteMethod(id.resourceGroupName, id.parent.name, id.name);\r\n}\r\nexport async function createSchedule(id, accessToken, locale, language, schedule) {\r\n    if (!id.subscriptionId) {\r\n        throw new Error('Subscription id not provided');\r\n    }\r\n    if (!id.resourceGroupName) {\r\n        throw new Error('Resource group name not provided');\r\n    }\r\n    if (!schedule.name) {\r\n        throw new Error('Schedule name not provided');\r\n    }\r\n    if (!id.name) {\r\n        throw new Error('Lab name not provided');\r\n    }\r\n    const armApiClient = createVNextArmApiClient(id.subscriptionId, accessToken, locale, language);\r\n    const adjustedSchedule = await armApiClient.schedules.createOrUpdate(schedule, id.resourceGroupName, id.name, schedule.name);\r\n    adjustScheduleDateIfNeeded(adjustedSchedule);\r\n    return adjustedSchedule;\r\n}\r\nexport async function updateSchedule(id, accessToken, locale, language, schedule) {\r\n    if (!id.subscriptionId) {\r\n        throw new Error('Subscription id not provided');\r\n    }\r\n    if (!id.resourceGroupName) {\r\n        throw new Error('Resource group name not provided');\r\n    }\r\n    if (!schedule.name) {\r\n        throw new Error('Schedule name not provided');\r\n    }\r\n    if (!id.name) {\r\n        throw new Error('Lab name not provided');\r\n    }\r\n    const armApiClient = createVNextArmApiClient(id.subscriptionId, accessToken, locale, language);\r\n    // We use PUT rather than PATCH here as the startAt field will be ignored in SDK if we set it to null when switching the schedule type from standard to stopOnly.\r\n    const updatedSchedule = await armApiClient.schedules.createOrUpdate(schedule, id.resourceGroupName, id.name, schedule.name);\r\n    adjustScheduleDateIfNeeded(updatedSchedule);\r\n    return updatedSchedule;\r\n}\r\nconst ScheduleProvider = {\r\n    listSchedules,\r\n    deleteSchedule,\r\n    createSchedule,\r\n    updateSchedule,\r\n};\r\nexport default ScheduleProvider;\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport ScheduleProvider from '../../../data/providers/schedule-provider';\r\nimport { default as VNextScheduleProvider } from '../../../data/providers/vnext/arm-api/schedule-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { ScheduleActionType, } from '../../actions/schedule/schedule-actions';\r\nimport { listSchedulesSuccess, listVNextSchedulesSuccess, listSchedulesError, } from '../../actions/schedule/schedule-action-creators';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* listSchedules(action) {\r\n    const { environmentId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(environmentId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const schedules = yield call(ScheduleProvider.listSchedules, resourceId, accessToken, locale, language);\r\n        yield put(listSchedulesSuccess(schedules));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, environmentId, FailureOperation.LoadSchedules, e ? e.code : undefined);\r\n        yield put(listSchedulesError(error));\r\n    }\r\n}\r\nexport function* listVNextSchedules(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const schedules = yield call(VNextScheduleProvider.listSchedules, resourceId, accessToken, locale, language);\r\n        yield put(listVNextSchedulesSuccess(schedules));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.LoadSchedules, e ? e.code : undefined);\r\n        yield put(listSchedulesError(error));\r\n    }\r\n}\r\nexport function* listSchedulesSaga() {\r\n    yield labParentBasedTakeLatest(ScheduleActionType.LIST_SCHEDULES, listSchedules, listVNextSchedules);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport { ScheduleActionType, } from '../../actions/schedule/schedule-actions';\r\nimport { createScheduleSuccess, createVNextScheduleSuccess, createScheduleError, } from '../../actions/schedule/schedule-action-creators';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport ScheduleProvider from '../../../data/providers/schedule-provider';\r\nimport { default as VNextScheduleProvider } from '../../../data/providers/vnext/arm-api/schedule-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* createSchedule(action) {\r\n    const { schedule, templateId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(templateId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const createdSchedule = yield call(ScheduleProvider.createOrUpdateSchedule, resourceId, accessToken, locale, language, schedule);\r\n        yield put(createScheduleSuccess(createdSchedule));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.CreateSchedule, e ? e.code : undefined);\r\n        yield put(createScheduleError(error));\r\n    }\r\n}\r\nexport function* createVNextSchedule(action) {\r\n    const { schedule, labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const createdSchedule = yield call(VNextScheduleProvider.createSchedule, resourceId, accessToken, locale, language, schedule);\r\n        yield put(createVNextScheduleSuccess(createdSchedule));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.CreateSchedule, e ? e.code : undefined);\r\n        yield put(createScheduleError(error));\r\n    }\r\n}\r\nexport function* createScheduleSaga() {\r\n    yield labParentBasedTakeLatest(ScheduleActionType.CREATE_SCHEDULE, createSchedule, createVNextSchedule);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport ScheduleProvider from '../../../data/providers/schedule-provider';\r\nimport { default as VNextScheduleProvider } from '../../../data/providers/vnext/arm-api/schedule-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { ScheduleActionType } from '../../actions/schedule/schedule-actions';\r\nimport { deleteScheduleSuccess, deleteScheduleError } from '../../actions/schedule/schedule-action-creators';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* deleteSchedule(action) {\r\n    const { scheduleId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(scheduleId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(ScheduleProvider.deleteSchedule, resourceId, accessToken, locale, language);\r\n        yield put(deleteScheduleSuccess(scheduleId));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, scheduleId, FailureOperation.DeleteSchedule, e ? e.code : undefined);\r\n        yield put(deleteScheduleError(error));\r\n    }\r\n}\r\nexport function* deleteVNextSchedule(action) {\r\n    const { scheduleId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(scheduleId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(VNextScheduleProvider.deleteSchedule, resourceId, accessToken, locale, language);\r\n        yield put(deleteScheduleSuccess(scheduleId));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, scheduleId, FailureOperation.DeleteSchedule, e ? e.code : undefined);\r\n        yield put(deleteScheduleError(error));\r\n    }\r\n}\r\nexport function* deleteScheduleSaga() {\r\n    yield labParentBasedTakeLatest(ScheduleActionType.DELETE_SCHEDULE, deleteSchedule, deleteVNextSchedule);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport ScheduleProvider from '../../../data/providers/schedule-provider';\r\nimport { default as VNextScheduleProvider } from '../../../data/providers/vnext/arm-api/schedule-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { ScheduleActionType, } from '../../actions/schedule/schedule-actions';\r\nimport { updateScheduleSuccess, updateVNextScheduleSuccess, updateScheduleError, } from '../../actions/schedule/schedule-action-creators';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* updateSchedule(action) {\r\n    const { schedule, templateId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(templateId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const updatedSchedule = yield call(ScheduleProvider.createOrUpdateSchedule, resourceId, accessToken, locale, language, schedule);\r\n        yield put(updateScheduleSuccess(updatedSchedule));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, schedule.id, FailureOperation.UpdateSchedule, e ? e.code : undefined);\r\n        yield put(updateScheduleError(error));\r\n    }\r\n}\r\nexport function* updateVNextSchedule(action) {\r\n    const { schedule, labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const updatedSchedule = yield call(VNextScheduleProvider.updateSchedule, resourceId, accessToken, locale, language, schedule);\r\n        yield put(updateVNextScheduleSuccess(updatedSchedule));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, schedule.id, FailureOperation.UpdateSchedule, e ? e.code : undefined);\r\n        yield put(updateScheduleError(error));\r\n    }\r\n}\r\nexport function* updateScheduleSaga() {\r\n    yield labParentBasedTakeLatest(ScheduleActionType.UPDATE_SCHEDULE, updateSchedule, updateVNextSchedule);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listSchedulesSaga } from './list-schedules';\r\nimport { createScheduleSaga } from './create-schedule';\r\nimport { deleteScheduleSaga } from './delete-schedule';\r\nimport { updateScheduleSaga } from './update-schedule';\r\nexport function* rootSaga() {\r\n    yield all([fork(listSchedulesSaga), fork(createScheduleSaga), fork(deleteScheduleSaga), fork(updateScheduleSaga)]);\r\n}\r\n","import { getMlClient } from './arm-data-provider';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nexport async function listTemplates(id, accessToken, locale, language, expand = false) {\r\n    const mlClient = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const expandParams = {\r\n        expand: 'properties($expand=resourceSettings($expand=referenceVm($expand=vmStateDetails)))',\r\n    };\r\n    return expand\r\n        ? await mlClient.environmentSettings.list(id.resourceGroupName, id.parent.name, id.name, expandParams)\r\n        : await mlClient.environmentSettings.list(id.resourceGroupName, id.parent.name, id.name);\r\n}\r\nexport async function getTemplate(id, accessToken, locale, language, expand = false) {\r\n    const mlClient = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    const expandParams = {\r\n        expand: 'properties($expand=resourceSettings($expand=referenceVm($expand=vmStateDetails)))',\r\n    };\r\n    return expand\r\n        ? await mlClient.environmentSettings.get(id.resourceGroupName, id.parent.parent.name, id.parent.name, id.name, expandParams)\r\n        : await mlClient.environmentSettings.get(id.resourceGroupName, id.parent.parent.name, id.parent.name, id.name);\r\n}\r\nexport async function beginCreateTemplate(template, accessToken, locale, language) {\r\n    const templateId = new ResourceId(template.id);\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environmentSettings.beginCreateOrUpdate(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name, template);\r\n}\r\nexport async function updateTemplate(template, accessToken, locale, language) {\r\n    const templateId = new ResourceId(template.id);\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    return await mlClient.environmentSettings.createOrUpdate(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name, template);\r\n}\r\nexport async function resetPassword(id, username, password, accessToken, locale, language) {\r\n    const templateId = new ResourceId(id);\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environmentSettings.beginResetPassword(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name, { username: username.trim(), password: password.trim() });\r\n}\r\nexport async function publishTemplate(id, useExistingImage, accessToken, locale, language) {\r\n    const templateId = new ResourceId(id);\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environmentSettings.publish(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name, { useExistingImage });\r\n}\r\nexport async function startTemplate(id, accessToken, locale, language) {\r\n    const templateId = new ResourceId(id);\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environmentSettings.beginStart(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name);\r\n}\r\nexport async function stopTemplate(id, accessToken, locale, language) {\r\n    const templateId = new ResourceId(id);\r\n    const mlClient = getMlClient(templateId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.environmentSettings.beginStop(templateId.resourceGroupName, templateId.parent.parent.name, templateId.parent.name, templateId.name);\r\n}\r\nconst TemplateProvider = {\r\n    startTemplate,\r\n    stopTemplate,\r\n    getTemplate,\r\n    beginCreateTemplate,\r\n    updateTemplate,\r\n    listTemplates,\r\n    resetPassword,\r\n    publishTemplate,\r\n};\r\nexport default TemplateProvider;\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { listTemplatesSuccess, listTemplatesError, selectTemplate, createTemplateError, } from '../../actions/template/template-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { hasTemplateCreationFailed } from '../../selectors/template-selectors';\r\nexport function* listTemplates(action) {\r\n    const { labId, expand, storeFirst } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const templates = yield call(TemplateProvider.listTemplates, resourceId, accessToken, locale, language, expand);\r\n        if (templates.length > 0 && storeFirst) {\r\n            const template = templates[0];\r\n            yield put(selectTemplate(template));\r\n            if (hasTemplateCreationFailed(template)) {\r\n                const error = new MlClientError(template.latestOperationResult.errorMessage, template.id, FailureOperation.CreateTemplate, template.latestOperationResult.errorCode);\r\n                yield put(createTemplateError(error));\r\n            }\r\n        }\r\n        yield put(listTemplatesSuccess(templates));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.ListTemplates, e ? e.code : undefined);\r\n        yield put(listTemplatesError(error));\r\n    }\r\n}\r\nexport function* listTemplatesSaga() {\r\n    yield takeLatest(TemplateActionType.LIST_TEMPLATES, listTemplates);\r\n}\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { updateTemplateSuccess, updateTemplateError } from '../../actions/template/template-action-creators';\r\nimport { getTemplate as getTemplateSelector } from '../../../redux/selectors/template-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nexport function* updateTemplate(action) {\r\n    const { templateId, title, description } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const oldTemplate = yield select(getTemplateSelector, templateId);\r\n        const template = { ...oldTemplate, title, description };\r\n        const updatedTemplate = yield call(TemplateProvider.updateTemplate, template, accessToken, locale, language);\r\n        yield put(updateTemplateSuccess(updatedTemplate));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.UpdateTemplate, e ? e.code : undefined);\r\n        yield put(updateTemplateError(error));\r\n    }\r\n}\r\nexport function* updateTemplateSaga() {\r\n    yield takeLatest(TemplateActionType.UPDATE_TEMPLATE, updateTemplate);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { resetPasswordError } from '../../actions/template/template-action-creators';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nexport function* resetPassword(action) {\r\n    try {\r\n        const { templateId, username, password } = action;\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(TemplateProvider.resetPassword, templateId, username, password, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, action.templateId, FailureOperation.ResetPassword, e ? e.code : undefined);\r\n        yield put(resetPasswordError(error));\r\n    }\r\n}\r\nexport function* resetVNextTemplatePassword(action) {\r\n    try {\r\n        const { templateId, username, password } = action;\r\n        const resourceId = new ResourceId(templateId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(VirtualMachineProvider.resetPassword, resourceId, accessToken, locale, language, username, password);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, action.templateId, FailureOperation.ResetPassword, e ? e.code : undefined);\r\n        yield put(resetPasswordError(error));\r\n    }\r\n}\r\nexport function* resetPasswordSaga() {\r\n    yield labParentBasedTakeLatest(TemplateActionType.RESET_PASSWORD, resetPassword, resetVNextTemplatePassword);\r\n}\r\n","import { call, put, takeLatest, take, cancel, fork, delay, race, cancelled, select } from 'redux-saga/effects';\r\nimport { ManagedLabsModels as Ml } from '@azure-lab-services/ml-ts';\r\nimport { TemplateActionType, } from '../../actions/template/template-actions';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { getTemplateSuccess, getTemplateError, getTemplate as getTemplateActionCreator, pollTemplateCancelled, getTemplateCancelled, publishTemplateError, startTemplateError, stopTemplateError, resetPasswordError, createTemplateError, } from '../../actions/template/template-action-creators';\r\nimport { isTemplateStarting, isTemplateStopping, hasTemplateCreationFailed, isTemplateResettingPassword, isTemplatePublishingOrScaling, getActionFromUri, } from '../../selectors/template-selectors';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getTemplate as getTemplateSelector } from '../../../redux/selectors/template-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { createSharedImageError } from '../../actions/shared-image/shared-image-action-creators';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nfunction getErrorForOperation(template, failureOp) {\r\n    switch (failureOp) {\r\n        case FailureOperation.StartTemplate:\r\n        case FailureOperation.StopTemplate:\r\n        case FailureOperation.CreateTemplate:\r\n        case FailureOperation.ResetPassword:\r\n            return new MlClientError(template.latestOperationResult.errorMessage, template.id, failureOp, template.latestOperationResult.errorCode);\r\n        case FailureOperation.SaveSharedImage:\r\n            if (getActionFromUri(template) === 'saveImage') {\r\n                return new MlClientError(template.latestOperationResult.errorMessage, template.id, failureOp, template.latestOperationResult.errorCode);\r\n            }\r\n            return new MlClientError('', template.id, FailureOperation.PublishTemplate);\r\n        case FailureOperation.PublishTemplate:\r\n            if (getActionFromUri(template) === 'publish') {\r\n                return new MlClientError(template.latestOperationResult.errorMessage, template.id, failureOp, template.latestOperationResult.errorCode);\r\n            }\r\n            return new MlClientError('', template.id, failureOp);\r\n        default:\r\n            return new MlClientError('', template.id, failureOp);\r\n    }\r\n}\r\nfunction hasOperationFailed(previousTemplate, currentTemplate) {\r\n    return previousTemplate &&\r\n        previousTemplate.latestOperationResult &&\r\n        currentTemplate &&\r\n        currentTemplate.latestOperationResult\r\n        ? previousTemplate.latestOperationResult.status === 'Running' &&\r\n            currentTemplate.latestOperationResult.status === 'Failed'\r\n        : false;\r\n}\r\nexport function* getTemplate(action) {\r\n    const { templateId, expand } = action;\r\n    try {\r\n        const resourceId = new ResourceId(templateId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { template, changed } = yield race({\r\n            template: call(TemplateProvider.getTemplate, resourceId, accessToken, locale, language, expand),\r\n            // TODO: Add other actions that should cancel update here\r\n            changed: race([\r\n                take(TemplateActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(TemplateActionType.SELECT_LAB),\r\n                take(TemplateActionType.SELECT_TEMPLATE),\r\n                take(TemplateActionType.POLL_TEMPLATE_STOP),\r\n                take(TemplateActionType.POLL_TEMPLATE_CANCELLED),\r\n                take(TemplateActionType.CREATE_SHARED_IMAGE),\r\n                take(TemplateActionType.START_TEMPLATE),\r\n                take(TemplateActionType.STOP_TEMPLATE),\r\n                take(TemplateActionType.UPDATE_SHARED_IMAGE),\r\n                take(TemplateActionType.RESET_PASSWORD),\r\n                take(TemplateActionType.PUBLISH_TEMPLATE),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getTemplateCancelled());\r\n        }\r\n        else if (hasTemplateCreationFailed(template)) {\r\n            const error = getErrorForOperation(template, FailureOperation.CreateTemplate);\r\n            yield put(createTemplateError(error));\r\n        }\r\n        else {\r\n            // get the previous template we fetched so we can compare it to the most recently fetched template.\r\n            // we compare the two states to see if an ongoing operation has failed, and if so we'll send the\r\n            // appropriate error action so the UI can be updated with the correct error message.\r\n            const previousTemplate = yield select(getTemplateSelector, templateId);\r\n            if (previousTemplate) {\r\n                if (isTemplatePublishingOrScaling(previousTemplate) &&\r\n                    template.publishingState === Ml.PublishingState.PublishFailed) {\r\n                    const error = getErrorForOperation(template, FailureOperation.PublishTemplate);\r\n                    yield put(publishTemplateError(templateId, error));\r\n                }\r\n                if (previousTemplate.uploadState === Ml.UploadState.InProgress &&\r\n                    template.uploadState === Ml.UploadState.Failed) {\r\n                    const error = getErrorForOperation(template, FailureOperation.SaveSharedImage);\r\n                    yield put(createSharedImageError(template.id, error));\r\n                }\r\n                if (hasOperationFailed(previousTemplate, template)) {\r\n                    if (isTemplateStarting(previousTemplate)) {\r\n                        const error = getErrorForOperation(template, FailureOperation.StartTemplate);\r\n                        yield put(startTemplateError(error));\r\n                    }\r\n                    else if (isTemplateStopping(previousTemplate)) {\r\n                        const error = getErrorForOperation(template, FailureOperation.StopTemplate);\r\n                        yield put(stopTemplateError(error));\r\n                    }\r\n                    else if (isTemplateResettingPassword(previousTemplate)) {\r\n                        const error = getErrorForOperation(template, FailureOperation.ResetPassword);\r\n                        yield put(resetPasswordError(error));\r\n                    }\r\n                }\r\n            }\r\n            yield put(getTemplateSuccess(template, expand));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.GetTemplate, e ? e.code : undefined);\r\n        yield put(getTemplateError(error));\r\n    }\r\n}\r\nfunction* pollTemplate(action) {\r\n    try {\r\n        // allowing for an initial delay before we kick off polling\r\n        // to mitigate a state flashing bug due to issues in the RP\r\n        const { initialDelayMs, id } = action;\r\n        if (!!initialDelayMs) {\r\n            yield delay(initialDelayMs);\r\n        }\r\n        // this looks like an infinite loop, but the finally block will get triggered when\r\n        // the task that is running this is canceled, which happens when the POLL_TEMPLATE_STOP\r\n        // action is dispatched\r\n        while (true) {\r\n            yield put(getTemplateActionCreator(id));\r\n            yield race({\r\n                success: take(TemplateActionType.GET_TEMPLATE_SUCCESS),\r\n                cancelled: take(TemplateActionType.GET_TEMPLATE_CANCELLED),\r\n                error: take(TemplateActionType.GET_TEMPLATE_ERROR),\r\n            });\r\n            const { intervalMs } = action;\r\n            yield delay(intervalMs);\r\n        }\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(pollTemplateCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollTemplateSaga() {\r\n    // while this looks like an infinite loop, yield take(POLL_TEMPLATE_START)\r\n    // will pause this code until polling is started\r\n    while (true) {\r\n        const action = yield take(TemplateActionType.POLL_TEMPLATE_START);\r\n        // forking so the polling task runs without blocking\r\n        const pollTask = yield fork(pollTemplate, action);\r\n        // waits until the stop is triggered so we can cancel the polling task\r\n        yield take(TemplateActionType.POLL_TEMPLATE_STOP);\r\n        yield cancel(pollTask);\r\n    }\r\n}\r\nexport function* getTemplateSaga() {\r\n    yield takeLatest(TemplateActionType.GET_TEMPLATE, getTemplate);\r\n}\r\n","import { call, put, race, select, take, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { LabUpdateOperation } from '../../../data/models/lab';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { updateLab } from '../../actions/lab/lab-action-creators';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { publishTemplateCancelled, publishTemplateError } from '../../actions/template/template-action-creators';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getVCurrentLab } from '../../selectors/lab-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* publishTemplate(action) {\r\n    const { templateId, maxUsersInLab, useExistingImage } = action;\r\n    try {\r\n        const resourceId = new ResourceId(templateId);\r\n        // if the publish requires a lab capacity update, we take care of it first\r\n        if (!isNaN(maxUsersInLab)) {\r\n            const labId = resourceId.parent.id;\r\n            const lab = yield select(getVCurrentLab, labId);\r\n            if (!lab) {\r\n                yield put(publishTemplateError(templateId, new MlClientError('Lab was not found', templateId, FailureOperation.PublishTemplate)));\r\n                return;\r\n            }\r\n            if (lab.maxUsersInLab !== maxUsersInLab) {\r\n                yield put(updateLab({ ...lab, maxUsersInLab }, LabUpdateOperation.Capacity));\r\n                const { error } = yield race({\r\n                    success: take(LabActionType.UPDATE_LAB_SUCCESS),\r\n                    error: take(LabActionType.UPDATE_LAB_ERROR),\r\n                });\r\n                if (error) {\r\n                    yield put(publishTemplateCancelled(templateId));\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(TemplateProvider.publishTemplate, templateId, useExistingImage, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.PublishTemplate, e ? e.code : undefined);\r\n        yield put(publishTemplateError(templateId, error));\r\n    }\r\n}\r\nexport function* publishTemplateSaga() {\r\n    yield takeLatest(TemplateActionType.PUBLISH_TEMPLATE, publishTemplate);\r\n}\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { startTemplateError } from '../../actions/template/template-action-creators';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nexport function* startTemplate(action) {\r\n    try {\r\n        const { templateId } = action;\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(TemplateProvider.startTemplate, templateId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, action.templateId, FailureOperation.StartTemplate, e ? e.code : undefined);\r\n        yield put(startTemplateError(error));\r\n    }\r\n}\r\nexport function* startTemplateSaga() {\r\n    yield takeLatest(TemplateActionType.START_TEMPLATE, startTemplate);\r\n}\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport TemplateProvider from '../../../data/providers/template-provider';\r\nimport { stopTemplateError } from '../../actions/template/template-action-creators';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nexport function* stopTemplate(action) {\r\n    try {\r\n        const { templateId } = action;\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(TemplateProvider.stopTemplate, templateId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, action.templateId, FailureOperation.StopTemplate, e ? e.code : undefined);\r\n        yield put(stopTemplateError(error));\r\n    }\r\n}\r\nexport function* stopTemplateSaga() {\r\n    yield takeLatest(TemplateActionType.STOP_TEMPLATE, stopTemplate);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listTemplatesSaga } from './list-templates';\r\nimport { updateTemplateSaga } from './update-template';\r\nimport { resetPasswordSaga } from './reset-password';\r\nimport { getTemplateSaga, pollTemplateSaga } from './get-template';\r\nimport { publishTemplateSaga } from './publish-template';\r\nimport { startTemplateSaga } from './start-template';\r\nimport { stopTemplateSaga } from './stop-template';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listTemplatesSaga),\r\n        fork(updateTemplateSaga),\r\n        fork(resetPasswordSaga),\r\n        fork(getTemplateSaga),\r\n        fork(pollTemplateSaga),\r\n        fork(publishTemplateSaga),\r\n        fork(startTemplateSaga),\r\n        fork(stopTemplateSaga),\r\n    ]);\r\n}\r\n","import queryString from 'query-string';\r\nexport const getQueryParams = (search) => {\r\n    const queryParams = queryString.parse(search);\r\n    return queryParams;\r\n};\r\n","import { cancel, fork, race, take, takeEvery, takeLatest, takeLeading, cancelled, select, } from 'redux-saga/effects';\r\nimport { CommonActionType } from '../actions/common/common-actions';\r\nimport { trackException } from '../../utils/telemetry/telemetry-channel';\r\nimport { isCurrentLabParentLabAccount } from '../selectors/lab-parent-resource-selectors';\r\nexport function cancelableHelper(labAccountWorker, successPattern, errorPattern, cancelPattern, resourceGroupWorker) {\r\n    return function* (action) {\r\n        const isLabAccount = yield select(isCurrentLabParentLabAccount);\r\n        let worker = labAccountWorker;\r\n        if (!isLabAccount && !!resourceGroupWorker) {\r\n            worker = resourceGroupWorker;\r\n        }\r\n        let task;\r\n        try {\r\n            task = yield fork(worker, action);\r\n            const { cancelledAction } = yield race({\r\n                success: take(successPattern),\r\n                error: take(errorPattern),\r\n                cancelledAction: take(cancelPattern),\r\n            });\r\n            if (cancelledAction) {\r\n                yield cancel(task);\r\n                task = null;\r\n            }\r\n        }\r\n        catch (err) {\r\n            trackException(err);\r\n            if (task) {\r\n                yield cancel(task);\r\n                task = null;\r\n            }\r\n        }\r\n        finally {\r\n            if (yield cancelled()) {\r\n                if (task) {\r\n                    yield cancel(task);\r\n                    task = null;\r\n                }\r\n            }\r\n        }\r\n    };\r\n}\r\nexport function cancelableTakeLatest(pattern, worker, successPattern, errorPattern, cancelPattern = CommonActionType.FATAL_ERROR) {\r\n    const helper = cancelableHelper(worker, successPattern, errorPattern, cancelPattern);\r\n    return takeLatest(pattern, helper);\r\n}\r\nexport function cancelableTakeLeading(pattern, worker, successPattern, errorPattern, cancelPattern = CommonActionType.FATAL_ERROR) {\r\n    const helper = cancelableHelper(worker, successPattern, errorPattern, cancelPattern);\r\n    return takeLeading(pattern, helper);\r\n}\r\nexport function cancelableTakeEvery(pattern, worker, successPattern, errorPattern, cancelPattern = CommonActionType.FATAL_ERROR) {\r\n    const helper = cancelableHelper(worker, successPattern, errorPattern, cancelPattern);\r\n    return takeEvery(pattern, helper);\r\n}\r\nexport function labParentBasedCancelableTakeLeading(pattern, labAccountWorker, resourceGroupWorker, successPattern, errorPattern, cancelPattern = CommonActionType.FATAL_ERROR) {\r\n    const helper = cancelableHelper(labAccountWorker, successPattern, errorPattern, cancelPattern, resourceGroupWorker);\r\n    return takeLeading(pattern, helper);\r\n}\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport queryString from 'query-string';\r\nimport { call, cancelled, put, race, select, take } from 'redux-saga/effects';\r\nimport { ltiSignIn } from '../../actions/lti/lti-action-creators';\r\nimport { LtiActionType } from '../../actions/lti/lti-actions';\r\nimport { ErrorCode } from '../../../common/error-codes';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport { getReturnUrl, init as initMsal } from '../../../data/providers/msal-provider';\r\nimport { getQueryParams } from '../../../utils/query-params';\r\nimport { fatalError, initializeCancelled, initializeError, initializeSuccess, processUrlFeatures, } from '../../actions/common/common-action-creators';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { loadUserSettings, resolveSignInReturnUrl, signIn } from '../../actions/identity/identity-action-creators';\r\nimport { IdentityActionType, } from '../../actions/identity/identity-actions';\r\nimport { teamsInitialize } from '../../actions/teams/teams-action-creators';\r\nimport { TeamsActionType } from '../../actions/teams/teams-actions';\r\nimport { cancelableTakeLeading } from '../../effects/cancelable';\r\nimport { isTeamsHost } from '../../selectors/common-selectors';\r\nimport { getRoute, getSearch, isLtiOidcRoute, isLtiReturnOidc, isMfaRouteOrRedirect, } from '../../selectors/route-selector';\r\nimport { shouldSignInAad } from '../../selectors/lti-selectors';\r\nexport function* initialize(action) {\r\n    try {\r\n        const { shouldSignInInteractively } = action;\r\n        // LTI oidc redirect, short-circuit\r\n        const isLtiStart = yield select(isLtiOidcRoute);\r\n        if (isLtiStart) {\r\n            yield put(initializeSuccess());\r\n            return;\r\n        }\r\n        const isLtiReturn = yield select(isLtiReturnOidc);\r\n        if (isLtiReturn) {\r\n            yield put(ltiSignIn());\r\n            const { error: ltiError } = yield race({\r\n                success: take(LtiActionType.LTI_SIGN_IN_SUCCESS),\r\n                error: take(LtiActionType.LTI_SIGN_IN_ERROR),\r\n            });\r\n            if (ltiError) {\r\n                const { error } = ltiError;\r\n                yield put(initializeError(error));\r\n                yield put(fatalError(ErrorCode.GenericError, error));\r\n                return;\r\n            }\r\n        }\r\n        const shouldAadSignIn = yield select(shouldSignInAad);\r\n        if (shouldAadSignIn) {\r\n            yield call(initMsal);\r\n        }\r\n        else {\r\n            yield put(initializeSuccess());\r\n            return;\r\n        }\r\n        const isTeamsHosted = yield select(isTeamsHost);\r\n        if (isTeamsHosted) {\r\n            yield put(teamsInitialize());\r\n            const { error: teamsError } = yield race({\r\n                success: take(TeamsActionType.TEAMS_INITIALIZE_SUCCESS),\r\n                error: take(TeamsActionType.TEAMS_INITIALIZE_ERROR),\r\n            });\r\n            if (teamsError) {\r\n                const { error } = teamsError;\r\n                yield put(initializeError(error));\r\n                yield put(fatalError(ErrorCode.GenericError, error));\r\n                return;\r\n            }\r\n        }\r\n        else {\r\n            // set the return URL based on our MSAL stored state if\r\n            // applicable\r\n            const returnUrl = yield call(getReturnUrl);\r\n            if (!!returnUrl) {\r\n                yield put(resolveSignInReturnUrl(returnUrl));\r\n            }\r\n        }\r\n        yield put(processUrlFeatures());\r\n        yield race({\r\n            success: take(CommonActionType.PROCESS_URL_FEATURES_SUCCESS),\r\n            error: take(CommonActionType.PROCESS_URL_FEATURES_ERROR),\r\n        });\r\n        // if this is an MFA flow, we can stop now\r\n        const isMfa = yield select(isMfaRouteOrRedirect);\r\n        if (isMfa) {\r\n            yield put(initializeSuccess());\r\n            return;\r\n        }\r\n        yield put(signIn(shouldSignInInteractively));\r\n        // we race all of the possible outcomes of sign in so that\r\n        // initialization does not proceed until sign in completes\r\n        const { error: errorAction, failure } = yield race({\r\n            success: take(IdentityActionType.SIGN_IN_SUCCESS),\r\n            failure: take(IdentityActionType.SIGN_IN_FAILED),\r\n            error: take(IdentityActionType.SIGN_IN_ERROR),\r\n        });\r\n        if (errorAction) {\r\n            // if we hit an auth error then something unexpected happened so we\r\n            // need to fail initialization\r\n            const { error } = errorAction;\r\n            yield put(initializeError(error));\r\n            yield put(fatalError(ErrorCode.AuthenticationFailed, error));\r\n            return;\r\n        }\r\n        if (!failure) {\r\n            yield put(loadUserSettings(true));\r\n            const { error: settingsErrorAction } = yield race({\r\n                success: take(IdentityActionType.LOAD_USER_SETTINGS_SUCCESS),\r\n                error: take(IdentityActionType.LOAD_USER_SETTINGS_ERROR),\r\n            });\r\n            if (!!settingsErrorAction) {\r\n                const { error: settingsError } = settingsErrorAction;\r\n                if (settingsError?.code === ErrorCode.InvalidGrant) {\r\n                    yield put(initializeError(settingsError));\r\n                    yield put(fatalError(ErrorCode.InvalidGrant, settingsError));\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n        // remove the tenant id in query string since we don't show the current tenant id in url when switching tenant\r\n        // and we will select the first valid tenant in list if the tenant id specified in url is invalid.\r\n        let search = yield select(getSearch);\r\n        const queryParams = yield call(getQueryParams, search);\r\n        if (!!queryParams.tenantId) {\r\n            delete queryParams.tenantId;\r\n            const pathname = yield select(getRoute);\r\n            search = yield call(queryString.stringify, queryParams);\r\n            yield put(routerActions.replace({ pathname, search }));\r\n        }\r\n        // if auth failed (isInteractive = false only), then we are done\r\n        // initializing and will show the route\r\n        yield put(initializeSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.Initialize, err ? err.code : undefined);\r\n        yield put(initializeError(error));\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(initializeCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* initializeSaga() {\r\n    yield cancelableTakeLeading(CommonActionType.INITIALIZE, initialize, CommonActionType.INITIALIZE_SUCCESS, CommonActionType.INITIALIZE_ERROR);\r\n}\r\n","import { TenantActionType, } from './tenant-actions';\r\nexport const listTenants = () => ({\r\n    type: TenantActionType.LIST_TENANTS,\r\n});\r\nexport const listTenantsSuccess = (tenants) => ({\r\n    type: TenantActionType.LIST_TENANTS_SUCCESS,\r\n    tenants,\r\n});\r\nexport const listTenantsError = (error) => ({\r\n    type: TenantActionType.LIST_TENANTS_ERROR,\r\n    error,\r\n});\r\nexport const selectTenantError = (error) => ({\r\n    type: TenantActionType.SELECT_TENANT_ERROR,\r\n    error,\r\n});\r\nconst actions = {\r\n    listTenants,\r\n    listTenantsSuccess,\r\n    listTenantsError,\r\n    selectTenantError,\r\n};\r\nexport default actions;\r\n","import { call, cancelled, put, race, select, take } from 'redux-saga/effects';\r\nimport { getSubscriptions } from '../../selectors/subscription-selector';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { fatalError, professorInitializeCancelled, professorInitializeError, professorInitializeSuccess, } from '../../actions/common/common-action-creators';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { getGroupName } from '../../actions/group/group-action-creators';\r\nimport { setTenantId } from '../../actions/identity/identity-action-creators';\r\nimport { selectLab } from '../../actions/lab/lab-action-creators';\r\nimport { loadSubscriptions } from '../../actions/subscription/subscription-action-creators';\r\nimport { SubscriptionActionType } from '../../actions/subscription/subscription-actions';\r\nimport { listTenants } from '../../actions/tenant/tenant-action-creators';\r\nimport { TenantActionType } from '../../actions/tenant/tenant-actions';\r\nimport { cancelableTakeLeading } from '../../effects/cancelable';\r\nimport { isTeamsHost, isVNextFeatureEnabled } from '../../selectors/common-selectors';\r\nimport { getGroupId, getGroupName as getGroupNameFromStore } from '../../selectors/group-selectors';\r\nimport { getTenantId, getUserSettings } from '../../selectors/identity-selector';\r\nimport { getLabIdFromRoute, getLabParentIdFromRoute } from '../../selectors/route-selector';\r\nimport { getTenants } from '../../selectors/tenant-selectors';\r\nimport { listLabParentResources, selectLabParentResource, } from '../../actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nimport { getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* professorInitialize(action) {\r\n    try {\r\n        let tenantError = undefined;\r\n        let signedInTenantId = yield select(getTenantId);\r\n        const isTeamsHosted = yield select(isTeamsHost);\r\n        if (!isTeamsHosted) {\r\n            yield put(listTenants());\r\n            const { error: tenantErrorAction } = yield race({\r\n                success: take(TenantActionType.LIST_TENANTS_SUCCESS),\r\n                error: take(TenantActionType.LIST_TENANTS_ERROR),\r\n            });\r\n            if (tenantErrorAction) {\r\n                tenantError = tenantErrorAction.error;\r\n            }\r\n        }\r\n        if (!!tenantError) {\r\n            yield put(professorInitializeError(tenantError));\r\n            yield put(fatalError(ErrorCode.GenericError, tenantError));\r\n            return;\r\n        }\r\n        const tenants = yield select(getTenants);\r\n        const signedInTenant = tenants.find((a) => a.tenantId == signedInTenantId);\r\n        // if the signed in tenant is not in the list of tenants returned from arm, we will select the first tenant\r\n        if (!signedInTenant && tenants.size > 0) {\r\n            signedInTenantId = tenants.get(0).tenantId;\r\n            yield put(setTenantId(signedInTenantId));\r\n        }\r\n        yield put(loadSubscriptions());\r\n        const { error: errorAction } = yield race({\r\n            success: take(SubscriptionActionType.LOAD_SUBSCRIPTIONS_SUCCESS),\r\n            error: take(SubscriptionActionType.LOAD_SUBSCRIPTIONS_ERROR),\r\n        });\r\n        if (errorAction) {\r\n            const { error } = errorAction;\r\n            yield put(professorInitializeError(error));\r\n            yield put(fatalError(ErrorCode.GenericError, error));\r\n        }\r\n        else {\r\n            const isVNext = yield select(isVNextFeatureEnabled);\r\n            if (isVNext) {\r\n                yield call(getLabsApiAccessTokenSaga, true);\r\n            }\r\n            // we process the lab and lab parent IDs out of their routes so we can set up\r\n            // our initial application state\r\n            let selectFirstIfSelectedNotFound = false;\r\n            let labParentId = yield select(getLabParentIdFromRoute);\r\n            const labId = yield select(getLabIdFromRoute);\r\n            // if a lab parent isn't specified in our route,\r\n            // lets see if we have a previously used one in our user settings\r\n            if (!labParentId) {\r\n                const settings = yield select(getUserSettings);\r\n                const lastUsedParentResource = settings.get('lastUsedParentResource');\r\n                // we select last used lab parent if its subscription still exists\r\n                // if the subscription no longer exists, we will select a default\r\n                // otherwise, users would encounter fatal error\r\n                if (lastUsedParentResource) {\r\n                    const resourceId = new ResourceId(lastUsedParentResource);\r\n                    const lastUsedSubscriptionId = resourceId.subscriptionId;\r\n                    const subscriptions = yield select(getSubscriptions);\r\n                    if (subscriptions.find((o) => o.subscriptionId == lastUsedSubscriptionId)) {\r\n                        labParentId = lastUsedParentResource;\r\n                        selectFirstIfSelectedNotFound = true;\r\n                    }\r\n                }\r\n            }\r\n            // kick off the lab parent load, but let pages decide if they want to wait on them all\r\n            // to load before displaying anything\r\n            if (labParentId) {\r\n                yield put(selectLabParentResource(labParentId));\r\n                yield put(listLabParentResources(false, selectFirstIfSelectedNotFound));\r\n                // if we have a specific lab, select it\r\n                if (labId) {\r\n                    yield put(selectLab(labId));\r\n                }\r\n            }\r\n            else {\r\n                yield put(listLabParentResources(true));\r\n            }\r\n            // fetch the group name from graph if we have an id\r\n            const groupId = yield select(getGroupId);\r\n            const groupName = yield select(getGroupNameFromStore);\r\n            if (!!groupId && !groupName) {\r\n                yield put(getGroupName(groupId));\r\n            }\r\n            yield put(professorInitializeSuccess());\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.ProfessorInitialize, err ? err.code : undefined);\r\n        yield put(professorInitializeError(error));\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(professorInitializeCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* professorInitializeSaga() {\r\n    yield cancelableTakeLeading(CommonActionType.PROFESSOR_INITIALIZE, professorInitialize, CommonActionType.PROFESSOR_INITIALIZE_SUCCESS, CommonActionType.PROFESSOR_INITIALIZE_ERROR);\r\n}\r\n","import { put, call, cancelled, select } from 'redux-saga/effects';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { studentInitializeSuccess, studentInitializeError, studentInitializeCancelled, } from '../../actions/common/common-action-creators';\r\nimport { cancelableTakeLeading } from '../../effects/cancelable';\r\nimport { isLmsHost } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* studentInitialize(action) {\r\n    try {\r\n        const shouldSkipGetAccessToken = yield select(isLmsHost);\r\n        // if lms, we got the lti token during initial handshake and stored it.\r\n        // so skip getting access token here when in lms.\r\n        if (!shouldSkipGetAccessToken) {\r\n            // get access tokens, allow a full frame redirect if required\r\n            yield call(getLabsApiAccessTokenSaga, true); // vNext\r\n            yield call(getArmAccessTokenSaga, true); // vCurrent\r\n        }\r\n        yield put(studentInitializeSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.StudentInitialize, err ? err.code : undefined);\r\n        yield put(studentInitializeError(error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(studentInitializeCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* studentInitializeSaga() {\r\n    yield cancelableTakeLeading(CommonActionType.STUDENT_INITIALIZE, studentInitialize, CommonActionType.STUDENT_INITIALIZE_SUCCESS, CommonActionType.STUDENT_INITIALIZE_ERROR);\r\n}\r\n","import { UsageActionType, } from './usage-actions';\r\nexport const listUsageData = (subscriptionId, regions) => ({\r\n    type: UsageActionType.LIST_USAGE_DATA,\r\n    subscriptionId,\r\n    regions,\r\n});\r\nexport const listRegionUsageDataSuccess = (region, data) => ({\r\n    type: UsageActionType.LIST_REGION_USAGE_DATA_SUCCESS,\r\n    region,\r\n    data,\r\n});\r\nexport const listUsageDataError = (regions, error) => ({\r\n    type: UsageActionType.LIST_USAGE_DATA_ERROR,\r\n    regions,\r\n    error,\r\n});\r\nexport const listUsageDataSuccess = () => ({\r\n    type: UsageActionType.LIST_USAGE_DATA_SUCCESS,\r\n});\r\nexport const listUsageDataCancelled = () => ({\r\n    type: UsageActionType.LIST_USAGE_DATA_CANCELLED,\r\n});\r\nconst actions = {\r\n    listUsageData,\r\n    listRegionUsageDataSuccess,\r\n    listUsageDataSuccess,\r\n    listUsageDataError,\r\n    listUsageDataCancelled,\r\n};\r\nexport default actions;\r\n","import { PriceActionType, } from './price-actions';\r\nexport const listPriceData = (subscriptionId, regions) => ({\r\n    type: PriceActionType.LIST_PRICE_DATA,\r\n    subscriptionId,\r\n    regions,\r\n});\r\nexport const listPriceDataSuccess = (data) => ({\r\n    type: PriceActionType.LIST_PRICE_DATA_SUCCESS,\r\n    data,\r\n});\r\nexport const listPriceDataError = (error) => ({\r\n    type: PriceActionType.LIST_PRICE_DATA_ERROR,\r\n    error,\r\n});\r\nexport const listPriceDataCancelled = () => ({\r\n    type: PriceActionType.LIST_PRICE_DATA_CANCELLED,\r\n});\r\nconst actions = {\r\n    listPriceData,\r\n    listPriceDataSuccess,\r\n    listPriceDataError,\r\n    listPriceDataCancelled,\r\n};\r\nexport default actions;\r\n","import { take, put, race, call, all, select, cancelled } from 'redux-saga/effects';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { labAppInitializeSuccess, labAppInitializeError, fatalError, labAppInitializeCancelled, } from '../../actions/common/common-action-creators';\r\nimport { listTemplates } from '../../actions/template/template-action-creators';\r\nimport { TemplateActionType } from '../../actions/template/template-actions';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport { listUsers } from '../../actions/user/user-action-creators';\r\nimport { listEnvironments } from '../../actions/environment/environment-action-creators';\r\nimport { listSchedules, listVNextSchedules } from '../../actions/schedule/schedule-action-creators';\r\nimport { getCurrentTemplateId } from '../../selectors/template-selectors';\r\nimport { labParentBasedCancelableTakeLeading } from '../../effects/cancelable';\r\nimport { getLab, getLabMetadata, pollLabUntilTerminalStateStart, updateVnextPermissionPropagation, removeVnextPermissionPropagatingLab } from '../../actions/lab/lab-action-creators';\r\nimport { getVCurrentLab as getLabFromLabStore, labStoreIsLoadingOrUpdating } from '../../selectors/lab-selectors';\r\nimport { LabActionType } from '../../actions/lab/lab-actions';\r\nimport { getGroupId, getGroupName as getGroupNameFromStore } from '../../selectors/group-selectors';\r\nimport { getGroupName, setGroupId, getGroups } from '../../actions/group/group-action-creators';\r\nimport { getVNextLab, isVNextLabCreating, getCreateLabPermissionOnLabPlan, getVnextLabPermissionPropagating } from '../../selectors/vnext/lab-selectors';\r\nimport { isTerminalState } from '../../selectors/common-selectors';\r\nimport { OneMinuteInterval } from '../../../utils/constants';\r\nimport { listUsageData } from '../../actions/vnext/usage/usage-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { listPriceData } from '../../actions/vnext/price/price-action-creators';\r\nexport function* labAppInitialize(action) {\r\n    const { labId } = action;\r\n    try {\r\n        // make sure we can get an access token and allow for redirects\r\n        try {\r\n            yield call(getArmAccessTokenSaga, true);\r\n        }\r\n        catch (err) {\r\n            const error = new MlClientError(err ? err.message : undefined, labId, FailureOperation.LabAppInitialize, err ? err.code : undefined);\r\n            yield put(labAppInitializeError(error));\r\n            return;\r\n        }\r\n        // if the labStore is marked as loading, then we have already called listLabs and don't need to call getLab\r\n        // see bug for context: https://dev.azure.com/devdiv/OnlineServices/_workitems/edit/1240387\r\n        // regardless, load templates since all pages need them and treat it as a blocking call\r\n        const isListingLabs = yield select(labStoreIsLoadingOrUpdating);\r\n        const listTemplatesEffect = put(listTemplates(labId, true, true));\r\n        if (isListingLabs) {\r\n            yield listTemplatesEffect;\r\n        }\r\n        else {\r\n            yield all([put(getLab(labId, false)), listTemplatesEffect]);\r\n        }\r\n        const { labResult, templateResult } = yield all({\r\n            labResult: race({\r\n                success: race([take(LabActionType.GET_LAB_SUCCESS), take(LabActionType.LIST_LABS_SUCCESS)]),\r\n                error: race([take(LabActionType.GET_LAB_ERROR), take(LabActionType.LIST_LABS_ERROR)]),\r\n            }),\r\n            templateResult: race({\r\n                success: take(TemplateActionType.LIST_TEMPLATES_SUCCESS),\r\n                error: take(TemplateActionType.LIST_TEMPLATES_ERROR),\r\n            }),\r\n        });\r\n        if (templateResult.success && labResult.success) {\r\n            // kicking off the loads for lab resources, but up to pages to wait on them or not\r\n            const templateId = yield select(getCurrentTemplateId);\r\n            if (!!templateId) {\r\n                yield all([\r\n                    put(listUsers(labId)),\r\n                    put(listEnvironments(templateId)),\r\n                    put(listSchedules(templateId)),\r\n                    put(getGroups()),\r\n                ]);\r\n            }\r\n            else {\r\n                yield all([put(listUsers(labId)), put(getGroups())]);\r\n            }\r\n            // update the aadGroupId and aadGroupName when switching between labs\r\n            // update group name only when it is changed due to the rate limit of graph call\r\n            const lab = yield select(getLabFromLabStore, labId);\r\n            const currentLabGroupId = yield select(getGroupId);\r\n            const currentLabGroupName = yield select(getGroupNameFromStore);\r\n            if (lab && lab.aadGroupId && (lab.aadGroupId !== currentLabGroupId || !currentLabGroupName)) {\r\n                yield put(setGroupId(lab.aadGroupId));\r\n                yield put(getGroupName(lab.aadGroupId));\r\n            }\r\n            yield put(labAppInitializeSuccess());\r\n        }\r\n        else {\r\n            const labError = labResult.error ? labResult.error.error : undefined;\r\n            const templateError = templateResult.error\r\n                ? templateResult.error.error\r\n                : undefined;\r\n            const error = labError ||\r\n                templateError ||\r\n                new MlClientError('Unknown lab app init failure', labId, FailureOperation.LabAppInitialize);\r\n            const code = error.code;\r\n            switch (code) {\r\n                case ErrorCode.AuthorizationFailed:\r\n                    yield put(fatalError(ErrorCode.LabAuthorizationFailed, error));\r\n                    break;\r\n                case ErrorCode.ResourceGroupNotFound:\r\n                    yield put(fatalError(ErrorCode.ResourceGroupNotFound, error));\r\n                    break;\r\n                case ErrorCode.ResourceInGroupDoesNotExist:\r\n                case ErrorCode.ResourceNotFound:\r\n                    yield put(fatalError(ErrorCode.ResourceNotFound, error));\r\n                    break;\r\n                default:\r\n                    yield put(fatalError(ErrorCode.GenericError, error));\r\n            }\r\n            yield put(labAppInitializeError(error));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labId, FailureOperation.LabAppInitialize, err ? err.code : undefined);\r\n        yield put(labAppInitializeError(error));\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(labAppInitializeCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* vNextLabAppInitialize(action) {\r\n    const { labId } = action;\r\n    try {\r\n        // make sure we can get an access token and allow for redirects\r\n        try {\r\n            yield call(getArmAccessTokenSaga, true);\r\n        }\r\n        catch (err) {\r\n            const error = new MlClientError(err ? err.message : undefined, labId, FailureOperation.LabAppInitialize, err ? err.code : undefined);\r\n            yield put(labAppInitializeError(error));\r\n            return;\r\n        }\r\n        // if the labStore is marked as loading, then we have already called listLabs and don't need to call getLab\r\n        // see bug for context: https://dev.azure.com/devdiv/OnlineServices/_workitems/edit/1240387\r\n        // regardless, load templates since all pages need them and treat it as a blocking call\r\n        const isListingLabs = yield select(labStoreIsLoadingOrUpdating);\r\n        if (!isListingLabs) {\r\n            yield put(getLab(labId, false));\r\n        }\r\n        const { error: labError } = yield race({\r\n            success: race([take(LabActionType.GET_LAB_SUCCESS), take(LabActionType.LIST_LABS_SUCCESS)]),\r\n            error: race({\r\n                getLabError: take(LabActionType.GET_LAB_ERROR),\r\n                listLabsError: take(LabActionType.LIST_LABS_ERROR),\r\n            }),\r\n        });\r\n        const oldVnextLabPermissionPropagating = yield select(getVnextLabPermissionPropagating);\r\n        const hasCreateLabPermissionOnLabPlan = yield select(getCreateLabPermissionOnLabPlan);\r\n        if (!labError) {\r\n            // no error for get lab means the current lab is not propagating permission, need to clear old permission propagating flag\r\n            if (oldVnextLabPermissionPropagating) {\r\n                // update isVnextLabPermissionPropagating to false for the current selected lab\r\n                yield put(updateVnextPermissionPropagation(false));\r\n            }\r\n            const lab = yield select(getVNextLab, labId);\r\n            const resourceId = new ResourceId(labId, true);\r\n            // remove the lab from the resourceGroupPropagatingLabsMap in lab store since this get lab succeeded from ARM, propagation finished\r\n            if (hasCreateLabPermissionOnLabPlan) {\r\n                yield put(removeVnextPermissionPropagatingLab(lab));\r\n            }\r\n            // kicking off the loads for lab resources, but up to pages to wait on them or not\r\n            if (!isVNextLabCreating(lab)) {\r\n                yield all([\r\n                    put(listUsers(labId)),\r\n                    put(listEnvironments(labId)),\r\n                    put(listVNextSchedules(labId)),\r\n                    put(getGroups()),\r\n                    put(getLabMetadata(labId)),\r\n                    put(listUsageData(resourceId.subscriptionId, [lab.location])),\r\n                    put(listPriceData(resourceId.subscriptionId, [lab.location])),\r\n                ]);\r\n            }\r\n            else {\r\n                yield all([\r\n                    put(listVNextSchedules(labId)),\r\n                    put(getGroups()),\r\n                    put(listUsers(labId)),\r\n                    put(getLabMetadata(labId)),\r\n                    put(listUsageData(resourceId.subscriptionId, [lab.location])),\r\n                    put(listPriceData(resourceId.subscriptionId, [lab.location])),\r\n                ]);\r\n            }\r\n            if (!isTerminalState(lab.provisioningState)) {\r\n                // todo: set different polling interval based on lab state\r\n                yield put(pollLabUntilTerminalStateStart(labId, OneMinuteInterval, OneMinuteInterval));\r\n            }\r\n            // update the aadGroupId and aadGroupName when switching between labs\r\n            // update group name only when it is changed due to the rate limit of graph call\r\n            const currentLabGroupId = yield select(getGroupId);\r\n            const currentLabGroupName = yield select(getGroupNameFromStore);\r\n            if (lab &&\r\n                lab.rosterProfile?.activeDirectoryGroupId &&\r\n                (lab.rosterProfile.activeDirectoryGroupId !== currentLabGroupId || !currentLabGroupName)) {\r\n                yield put(setGroupId(lab.rosterProfile.activeDirectoryGroupId));\r\n                yield put(getGroupName(lab.rosterProfile.activeDirectoryGroupId));\r\n            }\r\n            yield put(labAppInitializeSuccess());\r\n        }\r\n        else {\r\n            let error = labError.getLabError\r\n                ? labError.getLabError.error\r\n                : labError.listLabsError\r\n                    ? labError.listLabsError.error\r\n                    : undefined;\r\n            error =\r\n                error || new MlClientError('Unknown lab app init failure', labId, FailureOperation.LabAppInitialize);\r\n            const code = error.code;\r\n            switch (code) {\r\n                case ErrorCode.AuthorizationFailed:\r\n                    if (hasCreateLabPermissionOnLabPlan) {\r\n                        // VNext lab permission propagation scenario, poll lab until succeed and retry lab app initialize action\r\n                        if (!oldVnextLabPermissionPropagating) {\r\n                            // last time selected a differnt lab that had propagation already done, need to flip the flag in lab store for the current lab.\r\n                            yield put(updateVnextPermissionPropagation(true));\r\n                        }\r\n                        yield put(pollLabUntilTerminalStateStart(labId, OneMinuteInterval, OneMinuteInterval));\r\n                    }\r\n                    else {\r\n                        // Not related to VNext lab permission propagation scenario, put LabAuthorizationFailed error to display error view\r\n                        yield put(fatalError(ErrorCode.LabAuthorizationFailed, error));\r\n                    }\r\n                    break;\r\n                case ErrorCode.ResourceGroupNotFound:\r\n                    yield put(fatalError(ErrorCode.ResourceGroupNotFound, error));\r\n                    break;\r\n                case ErrorCode.ResourceInGroupDoesNotExist:\r\n                case ErrorCode.ResourceNotFound:\r\n                    yield put(fatalError(ErrorCode.ResourceNotFound, error));\r\n                    break;\r\n                default:\r\n                    yield put(fatalError(ErrorCode.GenericError, error));\r\n            }\r\n            yield put(labAppInitializeError(error));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labId, FailureOperation.LabAppInitialize, err ? err.code : undefined);\r\n        yield put(labAppInitializeError(error));\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(labAppInitializeCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* labAppStartupSaga() {\r\n    yield labParentBasedCancelableTakeLeading(CommonActionType.LAB_APP_INITIALIZE, labAppInitialize, vNextLabAppInitialize, CommonActionType.LAB_APP_INITIALIZE_SUCCESS, CommonActionType.LAB_APP_INITIALIZE_ERROR);\r\n}\r\n","import { put, takeLatest, select } from 'redux-saga/effects';\r\nimport { LOCATION_CHANGE } from 'connected-react-router/immutable';\r\nimport { getLabIdFromRoute, getLabParentIdFromRoute } from '../../selectors/route-selector';\r\nimport { getCurrentLabId } from '../../selectors/lab-selectors';\r\nimport { selectLab } from '../../actions/lab/lab-action-creators';\r\nimport { isProfessorAppInitialized } from '../../selectors/common-selectors';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { getCurrentLabParentId } from '../../selectors/lab-parent-resource-selectors';\r\nimport { selectLabParentResource } from '../../actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nexport function* routeChange() {\r\n    try {\r\n        const professorInitialized = yield select(isProfessorAppInitialized);\r\n        // we need to wait for professor initialization so that our subscription / tenant\r\n        // map has been created, otherwise the listLabs caused from selectLabParentResource\r\n        // will fail\r\n        if (professorInitialized) {\r\n            const routeLabParentId = yield select(getLabParentIdFromRoute);\r\n            // process lab and lab account changes that result from history (go back / go forward)\r\n            // changes\r\n            if (routeLabParentId) {\r\n                const currentLabParentId = yield select(getCurrentLabParentId);\r\n                if (currentLabParentId !== routeLabParentId) {\r\n                    yield put(selectLabParentResource(routeLabParentId));\r\n                }\r\n                const routeLabId = yield select(getLabIdFromRoute);\r\n                if (routeLabId) {\r\n                    const currentLabId = yield select(getCurrentLabId);\r\n                    if (currentLabId !== routeLabId) {\r\n                        yield put(selectLab(routeLabId));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* routeChangeSaga() {\r\n    yield takeLatest(LOCATION_CHANGE, routeChange);\r\n}\r\n","import { put, takeLatest, select, all } from 'redux-saga/effects';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { clearUserSession, clearFatalError } from '../../actions/common/common-action-creators';\r\nimport { Host } from '../../../utils/hosts';\r\nimport { getHost, getReferrer } from '../../selectors/common-selectors';\r\nimport { routerActions } from 'connected-react-router/immutable';\r\nimport { Routes } from '../../../utils/routes';\r\nimport { getSearch } from '../../selectors/route-selector';\r\nexport function* fatalError(action) {\r\n    try {\r\n        const { errorCode } = action;\r\n        switch (errorCode) {\r\n            case ErrorCode.SessionExpired:\r\n            case ErrorCode.IdleSessionExpired:\r\n            case ErrorCode.AuthenticationFailed:\r\n                yield put(clearUserSession());\r\n                break;\r\n            case ErrorCode.LabAccountAuthorizationFailed:\r\n            case ErrorCode.ResourceNotFound:\r\n                const host = yield select(getHost);\r\n                const referrer = yield select(getReferrer);\r\n                // when running in Teams or coming from Teams, if a user can't access the lab account\r\n                // then we will send them to the student view\r\n                if (host === Host.Teams || referrer === Host.Teams) {\r\n                    const search = yield select(getSearch);\r\n                    yield all([\r\n                        put(clearFatalError()),\r\n                        put(routerActions.replace({ pathname: Routes.StudentView, search })),\r\n                    ]);\r\n                }\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n    }\r\n}\r\nexport function* fatalErrorSaga() {\r\n    yield takeLatest(CommonActionType.FATAL_ERROR, fatalError);\r\n}\r\n","import { put, select, takeLatest } from 'redux-saga/effects';\r\nimport ErrorCode from '../../../common/error-codes';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { fatalError } from '../../actions/common/common-action-creators';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { isUserAuthenticated } from '../../selectors/identity-selector';\r\nexport function* idleTimeout(action) {\r\n    try {\r\n        const isAuthenticated = yield select(isUserAuthenticated);\r\n        if (isAuthenticated) {\r\n            const error = new MlClientError('Session expired because the user was idle for too long.', '', FailureOperation.IdleTimeout);\r\n            yield put(fatalError(ErrorCode.IdleSessionExpired, error));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(err);\r\n    }\r\n}\r\nexport function* idleTimeoutSaga() {\r\n    yield takeLatest(CommonActionType.IDLE_TIMEOUT, idleTimeout);\r\n}\r\n","export const DefaultTheme = {\r\n    palette: {\r\n        themePrimary: '#0078d4',\r\n        themeLighterAlt: '#eff6fc',\r\n        themeLighter: '#deecf9',\r\n        themeLight: '#c7e0f4',\r\n        themeTertiary: '#71afe5',\r\n        themeSecondary: '#2b88d8',\r\n        themeDarkAlt: '#106ebe',\r\n        themeDark: '#005a9e',\r\n        themeDarker: '#004578',\r\n        neutralLighterAlt: '#faf9f8',\r\n        neutralLighter: '#f3f2f1',\r\n        neutralLight: '#edebe9',\r\n        neutralQuaternaryAlt: '#e1dfdd',\r\n        neutralQuaternary: '#d0d0d0',\r\n        neutralTertiaryAlt: '#c8c6c4',\r\n        neutralTertiary: '#a19f9d',\r\n        neutralSecondary: '#605e5c',\r\n        neutralPrimaryAlt: '#3b3a39',\r\n        neutralPrimary: '#323130',\r\n        neutralDark: '#201f1e',\r\n        black: '#000000',\r\n        white: '#ffffff',\r\n    },\r\n};\r\nexport const TeamsTheme = {\r\n    palette: {\r\n        themePrimary: '#6264a7',\r\n        themeLighterAlt: '#f7f7fb',\r\n        themeLighter: '#e1e1f1',\r\n        themeLight: '#c8c9e4',\r\n        themeTertiary: '#989ac9',\r\n        themeSecondary: '#7173b0',\r\n        themeDarkAlt: '#585a95',\r\n        themeDark: '#464775',\r\n        themeDarker: '#37385d',\r\n        neutralLighterAlt: '#faf9f8',\r\n        neutralLighter: '#f3f2f1',\r\n        neutralLight: '#edebe9',\r\n        neutralQuaternaryAlt: '#e1dfdd',\r\n        neutralQuaternary: '#d0d0d0',\r\n        neutralTertiaryAlt: '#c8c6c4',\r\n        neutralTertiary: '#a19f9d',\r\n        neutralSecondary: '#605e5c',\r\n        neutralPrimaryAlt: '#3b3a39',\r\n        neutralPrimary: '#323130',\r\n        neutralDark: '#201f1e',\r\n        black: '#000000',\r\n        white: '#ffffff',\r\n    },\r\n};\r\nexport const CanvasTheme = {\r\n    palette: {\r\n        themePrimary: '#2275d3',\r\n        themeLighterAlt: '#f5f9fd',\r\n        themeLighter: '#d7e6f8',\r\n        themeLight: '#b5d1f2',\r\n        themeTertiary: '#72a7e5',\r\n        themeSecondary: '#3983d9',\r\n        themeDarkAlt: '#1e69be',\r\n        themeDark: '#1a59a1',\r\n        themeDarker: '#134177',\r\n        neutralLighterAlt: '#faf9f8',\r\n        neutralLighter: '#f3f2f1',\r\n        neutralLight: '#edebe9',\r\n        neutralQuaternaryAlt: '#e1dfdd',\r\n        neutralQuaternary: '#d0d0d0',\r\n        neutralTertiaryAlt: '#c8c6c4',\r\n        neutralTertiary: '#a19f9d',\r\n        neutralSecondary: '#605e5c',\r\n        neutralPrimaryAlt: '#3b3a39',\r\n        neutralPrimary: '#323130',\r\n        neutralDark: '#201f1e',\r\n        black: '#000000',\r\n        white: '#ffffff',\r\n    },\r\n};\r\n","import { loadTheme } from '@fluentui/react';\r\nimport { call, put, takeEvery, takeLatest, all } from 'redux-saga/effects';\r\nimport { CanvasCustomTheme, DefaultCustomTheme, LmsBasicsCustomTheme, TeamsCustomTheme, } from '../../../common/themes/custom-themes';\r\nimport { loadCustomTheme } from '../../../common/themes/selectors';\r\nimport { CanvasTheme, DefaultTheme, TeamsTheme } from '../../../common/themes/themes';\r\nimport Feature from '../../../utils/features';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { CommonActionType, } from '../../actions/common/common-actions';\r\nimport { setTheme as setThemeAction } from '../../actions/common/common-action-creators';\r\nimport { Theme } from '../../../utils/themes';\r\nexport function* loadTeamsOrDefaultTheme(action) {\r\n    try {\r\n        const { feature } = action;\r\n        if (feature === Feature.TeamsIntegration || feature === Feature.CanvasIntegration) {\r\n            if (action.type === CommonActionType.ENABLE_FEATURE) {\r\n                switch (feature) {\r\n                    case Feature.TeamsIntegration:\r\n                        yield put(setThemeAction(Theme.Teams));\r\n                        break;\r\n                    case Feature.CanvasIntegration:\r\n                        yield put(setThemeAction(Theme.Canvas));\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            else {\r\n                yield put(setThemeAction(Theme.Default));\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* loadTeamsOrDefaultThemeSaga() {\r\n    yield takeEvery([CommonActionType.ENABLE_FEATURE, CommonActionType.DISABLE_FEATURE], loadTeamsOrDefaultTheme);\r\n}\r\nexport function* setTheme(action) {\r\n    try {\r\n        const { theme } = action;\r\n        switch (theme) {\r\n            case Theme.Teams:\r\n                yield all([call(loadTheme, TeamsTheme), call(loadCustomTheme, TeamsCustomTheme)]);\r\n                break;\r\n            case Theme.LmsBasics:\r\n                yield all([call(loadTheme, DefaultTheme), call(loadCustomTheme, LmsBasicsCustomTheme)]);\r\n                break;\r\n            case Theme.Canvas:\r\n                yield all([call(loadTheme, CanvasTheme), call(loadCustomTheme, CanvasCustomTheme)]);\r\n                break;\r\n            case Theme.Default:\r\n            default:\r\n                yield all([call(loadTheme, DefaultTheme), call(loadCustomTheme, DefaultCustomTheme)]);\r\n                break;\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* setThemeSaga() {\r\n    yield takeLatest(CommonActionType.SET_THEME, setTheme);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { resolveSearchLocale } from '../../../language/languages';\r\nimport { getQueryParams } from '../../../utils/query-params';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { setHost, setLocale, setReferrer } from '../../actions/common/common-action-creators';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { setTenantId, setLoginHint } from '../../actions/identity/identity-action-creators';\r\nimport { setGroupId, enableFilterByGroupId } from '../../actions/group/group-action-creators';\r\nimport { getGroupId } from '../../selectors/group-selectors';\r\nimport { getHost, getLocale } from '../../selectors/common-selectors';\r\nimport { getTenantId, getLoginHint } from '../../selectors/identity-selector';\r\nexport function* processQueryParams(action) {\r\n    try {\r\n        const { search } = action;\r\n        const queryParams = yield call(getQueryParams, search);\r\n        const locale = yield select(getLocale);\r\n        const host = yield select(getHost);\r\n        const tenantId = yield select(getTenantId);\r\n        const groupId = yield select(getGroupId);\r\n        const loginHint = yield select(getLoginHint);\r\n        const queryLocale = yield call(resolveSearchLocale, queryParams);\r\n        if (locale !== queryLocale) {\r\n            yield put(setLocale(queryLocale));\r\n        }\r\n        const { host: queryHost, tenantId: queryTenantId, groupId: queryGroupId, loginHint: queryLoginHint, referrer, } = queryParams;\r\n        if (host !== queryHost && !!queryHost) {\r\n            yield put(setHost(queryHost));\r\n        }\r\n        // the default tenant ID gets set as part of processing the ID token claims on a successful sign in\r\n        // so if it is already set and it matches the query param we are also in single tenant mode, which gets\r\n        // set as part of putting setTenantId on the store\r\n        if ((!!tenantId && tenantId === queryTenantId) || (!tenantId && !!queryTenantId)) {\r\n            yield put(setTenantId(queryTenantId));\r\n        }\r\n        if (!groupId && !!queryGroupId) {\r\n            yield put(setGroupId(queryGroupId));\r\n            yield put(enableFilterByGroupId());\r\n        }\r\n        if (!loginHint && !!queryLoginHint) {\r\n            yield put(setLoginHint(queryLoginHint));\r\n        }\r\n        if (!!referrer) {\r\n            yield put(setReferrer(referrer));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* processQueryParamsSaga() {\r\n    yield takeLatest(CommonActionType.PROCESS_QUERY_PARAMS, processQueryParams);\r\n}\r\n","import { call, takeLatest } from 'redux-saga/effects';\r\nimport { CommonActionType } from '../../actions/common/common-actions';\r\nimport { setCurrentLocale } from '../../../utils/string-comparison';\r\nexport function* setLocale(action) {\r\n    const { locale } = action;\r\n    yield call(setCurrentLocale, locale);\r\n}\r\nexport function* setLocaleSaga() {\r\n    yield takeLatest(CommonActionType.SET_LOCALE, setLocale);\r\n}\r\n","import { fork, all } from 'redux-saga/effects';\r\nimport { initializeSaga } from './startup';\r\nimport { professorInitializeSaga } from './professor-startup';\r\nimport { studentInitializeSaga } from './student-startup';\r\nimport { labAppStartupSaga } from './lab-app-startup';\r\nimport { routeChangeSaga } from './route-change';\r\nimport { processUrlFeaturesSaga, enableFeatureSaga, disableFeatureSaga } from './features';\r\nimport { fatalErrorSaga } from './fatal-error';\r\nimport { idleTimeoutSaga } from './idle-timeout';\r\nimport { loadTeamsOrDefaultThemeSaga, setThemeSaga } from './themes';\r\nimport { processQueryParamsSaga } from './process-query-params';\r\nimport { setLocaleSaga } from './locale';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(initializeSaga),\r\n        fork(professorInitializeSaga),\r\n        fork(studentInitializeSaga),\r\n        fork(labAppStartupSaga),\r\n        fork(routeChangeSaga),\r\n        fork(processUrlFeaturesSaga),\r\n        fork(enableFeatureSaga),\r\n        fork(disableFeatureSaga),\r\n        fork(fatalErrorSaga),\r\n        fork(idleTimeoutSaga),\r\n        fork(loadTeamsOrDefaultThemeSaga),\r\n        fork(setThemeSaga),\r\n        fork(processQueryParamsSaga),\r\n        fork(setLocaleSaga),\r\n    ]);\r\n}\r\n","import _ from 'lodash';\r\nimport ArmProvider from './arm-data-provider';\r\nimport { SubscriptionEnabledState } from '../models/subscription';\r\nimport Constants from '../../utils/constants';\r\nfunction processSubs(response) {\r\n    const subs = response && response.value ? response.value : [];\r\n    const enabledSubs = _.filter(subs, (sub) => sub.state.toLowerCase() === SubscriptionEnabledState);\r\n    return enabledSubs;\r\n}\r\nexport async function listSubscriptionsForTenant(accessToken, locale, language) {\r\n    let response = await ArmProvider.get(Constants.Urls.Subscriptions, accessToken, locale, language);\r\n    let subsResponse = response && response.json ? (await response.json()) : undefined;\r\n    let enabledSubs = processSubs(subsResponse);\r\n    while (!!subsResponse && !!subsResponse.nextLink) {\r\n        response = await ArmProvider.get(subsResponse.nextLink.slice('https://management.azure.com'.length), accessToken, locale, language);\r\n        subsResponse = response && response.json ? (await response.json()) : undefined;\r\n        const pageSubs = processSubs(subsResponse);\r\n        enabledSubs = enabledSubs.concat(pageSubs);\r\n    }\r\n    return enabledSubs;\r\n}\r\nconst SubscriptionsProvider = {\r\n    listSubscriptionsForTenant,\r\n};\r\nexport default SubscriptionsProvider;\r\n","export const SubscriptionEnabledState = 'enabled';\r\n","import { checkFeatureError } from './../../redux/actions/subscription/subscription-action-creators';\r\nimport { MlClientError, FailureOperation } from './../ml-client-error';\r\nimport { call, put, select } from 'redux-saga/effects';\r\nimport ArmProvider from './arm-data-provider';\r\nimport Constants from '../../utils/constants';\r\nimport { getArmAccessTokenSaga } from './../../redux/sagas/identity/access-tokens';\r\nimport { getLanguage, getLocale } from './../../redux/selectors/common-selectors';\r\nasync function getAllFeatureFlags(subscriptionId, accessToken, locale, language) {\r\n    const allFeatureFlagsUrl = `${subscriptionId}${Constants.Urls.AllFeatureFlags}`;\r\n    const response = await ArmProvider.get(allFeatureFlagsUrl, accessToken, locale, language);\r\n    const allFeaturesResult = response?.json ? await response.json() : [];\r\n    return allFeaturesResult;\r\n}\r\nexport function* allFeatures(subscription) {\r\n    let allFeatures = [];\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        allFeatures = yield call(getAllFeatureFlags, subscription.id, accessToken, locale, language);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, subscription.subscriptionId, FailureOperation.CheckFeatureFlags, err ? err.code : undefined);\r\n        yield put(checkFeatureError(error));\r\n        return allFeatures;\r\n    }\r\n    return allFeatures;\r\n}\r\n","import { all, call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { listSubscriptionsForTenant } from '../../../data/providers/subscription-provider';\r\nimport { loadSubscriptionsError, loadSubscriptionsSuccess, } from '../../actions/subscription/subscription-action-creators';\r\nimport { SubscriptionActionType } from '../../actions/subscription/subscription-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { allFeatures } from '../../../data/providers/feature-provider';\r\nexport function* loadSubscriptions(action) {\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const subscriptions = yield call(listSubscriptionsForTenant, accessToken, locale, language);\r\n        const checkCalls = subscriptions.map((subscription) => {\r\n            return { allFeatures: call(allFeatures, subscription) };\r\n        });\r\n        const foundFeatures = yield all(checkCalls.map((call) => call.allFeatures));\r\n        subscriptions.map(async (subscription, index) => {\r\n            subscriptions[index] = {\r\n                ...subscription,\r\n                features: foundFeatures[index].value === undefined\r\n                    ? []\r\n                    : foundFeatures[index].value\r\n                        .filter((x) => x.properties.state == 'Registered')\r\n                        .map((x) => x.name),\r\n            };\r\n        });\r\n        yield put(loadSubscriptionsSuccess(subscriptions));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.LoadSubscriptions, err ? err.code : undefined);\r\n        yield put(loadSubscriptionsError(error));\r\n    }\r\n}\r\nexport function* loadSubscriptionsSaga() {\r\n    yield takeLatest(SubscriptionActionType.LOAD_SUBSCRIPTIONS, loadSubscriptions);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { loadSubscriptionsSaga } from './load-subscriptions';\r\nexport function* rootSaga() {\r\n    yield all([fork(loadSubscriptionsSaga)]);\r\n}\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { GalleryImageActionType } from '../../actions/gallery-image/gallery-image-actions';\r\nimport { listGalleryImagesSuccess, listGalleryImagesError, } from '../../actions/gallery-image/gallery-image-action-creators';\r\nimport LabAccountProvider from '../../../data/providers/lab-account-provider';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nexport function* listGalleryImages(action) {\r\n    const { labAccountId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labAccountId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const images = yield call(LabAccountProvider.listGalleryImages, resourceId, accessToken, locale, language);\r\n        yield put(listGalleryImagesSuccess(images));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labAccountId, FailureOperation.ListGalleryImages, e ? e.code : undefined);\r\n        yield put(listGalleryImagesError(error));\r\n    }\r\n}\r\nexport function* listGalleryImagesSaga() {\r\n    yield takeLatest(GalleryImageActionType.LIST_GALLERY_IMAGES, listGalleryImages);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listGalleryImagesSaga } from './list-gallery-images';\r\nexport function* rootSaga() {\r\n    yield all([fork(listGalleryImagesSaga)]);\r\n}\r\n","import { getMlClient } from './arm-data-provider';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nexport async function listSharedImages(labAccountId, accessToken, locale, language) {\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    return await client.sharedImages.list(id.resourceGroupName, id.name);\r\n}\r\nexport async function getSharedGallery(labAccountId, accessToken, locale, language) {\r\n    const id = labAccountId instanceof ResourceId ? labAccountId : new ResourceId(labAccountId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    return await client.sharedGalleries.list(id.resourceGroupName, id.name);\r\n}\r\nexport async function createSharedImage(templateId, displayName, accessToken, locale, language) {\r\n    const id = new ResourceId(templateId);\r\n    const client = getMlClient(id.subscriptionId, accessToken, locale, language);\r\n    return await client.environmentSettings.beginSaveImage(id.resourceGroupName, id.parent.parent.name, id.parent.name, id.name, { displayName });\r\n}\r\nexport async function updateSharedImage(sharedImageId, templateId, accessToken, locale, language) {\r\n    const sharedImageResourceId = new ResourceId(sharedImageId);\r\n    const templateResourceId = new ResourceId(templateId);\r\n    const client = getMlClient(sharedImageResourceId.subscriptionId, accessToken, locale, language);\r\n    return await client.environmentSettings.beginSaveImage(templateResourceId.resourceGroupName, templateResourceId.parent.parent.name, templateResourceId.parent.name, templateResourceId.name, { sharedImageResourceId: sharedImageResourceId.id });\r\n}\r\nconst SharedImageProvider = {\r\n    listSharedImages,\r\n    createSharedImage,\r\n    updateSharedImage,\r\n    getSharedGallery,\r\n};\r\nexport default SharedImageProvider;\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { SharedImageActionType } from '../../actions/shared-image/shared-image-actions';\r\nimport { listSharedImagesSuccess, listSharedImagesError, } from '../../actions/shared-image/shared-image-action-creators';\r\nimport SharedImageProvider from '../../../data/providers/shared-image-provider';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nexport function* listSharedImages(action) {\r\n    const { labAccountId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labAccountId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const images = yield call(SharedImageProvider.listSharedImages, resourceId, accessToken, locale, language);\r\n        yield put(listSharedImagesSuccess(images));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labAccountId, FailureOperation.ListSharedImages, e ? e.code : undefined);\r\n        yield put(listSharedImagesError(error));\r\n    }\r\n}\r\nexport function* listSharedImagesSaga() {\r\n    yield takeLatest(SharedImageActionType.LIST_SHARED_IMAGES, listSharedImages);\r\n}\r\n","import { createVNextArmApiClient } from '../../arm-data-provider';\r\nimport { Roles } from '../../../../data/models/roles';\r\nimport { hasAccess, VNextActionPermissions } from '../../permissions-provider';\r\nimport { trackTrace } from '../../../../utils/telemetry/telemetry-channel';\r\nasync function getLabPlanRoles(lab, accessToken, locale, language) {\r\n    const roles = [Roles.Read];\r\n    try {\r\n        if (await hasAccess(VNextActionPermissions.WriteLabPlan, lab.id, accessToken, locale, language)) {\r\n            roles.push(Roles.Write);\r\n        }\r\n    }\r\n    catch (e) {\r\n        trackTrace(`Unable to determine write access for lab ${lab.name} due to error ${e.message}, assuming no access.`);\r\n    }\r\n    return roles;\r\n}\r\nexport async function listSubscriptionLabPlans(subscription, accessToken, locale, language, includeRoles) {\r\n    const client = createVNextArmApiClient(subscription.subscriptionId, accessToken, locale, language);\r\n    const response = await client.labPlans.listBySubscription();\r\n    if (includeRoles) {\r\n        const labPlans = [];\r\n        await Promise.all(response.map(async (labPlan, index) => {\r\n            const roles = await getLabPlanRoles(labPlan, accessToken, locale, language);\r\n            labPlans[index] = { ...labPlan, roles };\r\n        }));\r\n        return labPlans;\r\n    }\r\n    else {\r\n        return response;\r\n    }\r\n}\r\nexport async function getLabPlan(labPlanId, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labPlanId.subscriptionId, accessToken, locale, language);\r\n    const result = await client.labPlans.get(labPlanId.resourceGroupName, labPlanId.name);\r\n    return result;\r\n}\r\nexport async function updateLabPlan(labPlanId, labPlanUpdate, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(labPlanId.subscriptionId, accessToken, locale, language);\r\n    const result = await client.labPlans.update(labPlanUpdate, labPlanId.resourceGroupName, labPlanId.name);\r\n    return result;\r\n}\r\nexport async function saveImage(labPlanId, accessToken, locale, language, name, labVirtualMachineId) {\r\n    const client = createVNextArmApiClient(labPlanId.subscriptionId, accessToken, locale, language);\r\n    const saveImageBody = {\r\n        name,\r\n        labVirtualMachineId,\r\n    };\r\n    await client.labPlans.beginSaveImage(saveImageBody, labPlanId.resourceGroupName, labPlanId.name);\r\n}\r\nconst LabPlanProvider = {\r\n    listSubscriptionLabPlans,\r\n    saveImage,\r\n    getLabPlan,\r\n    updateLabPlan,\r\n};\r\nexport default LabPlanProvider;\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { SharedImageActionType } from '../../actions/shared-image/shared-image-actions';\r\nimport { createSharedImageError } from '../../actions/shared-image/shared-image-action-creators';\r\nimport SharedImageProvider from '../../../data/providers/shared-image-provider';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport LabPlanProvider from '../../../data/providers/vnext/arm-api/lab-plan-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getCurrentLab } from '../../selectors/lab-selectors';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { createSharedImageAccepted } from '../../../redux/actions/vnext/images/image-action-creators';\r\nexport function* createSharedImage(action) {\r\n    const { templateId, displayName } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(SharedImageProvider.createSharedImage, templateId, displayName, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.SaveSharedImage, e ? e.code : undefined);\r\n        yield put(createSharedImageError(templateId, error));\r\n    }\r\n}\r\nexport function* createVNextSharedImage(action) {\r\n    const { displayName, templateId } = action;\r\n    try {\r\n        const currentLab = yield select(getCurrentLab);\r\n        // we disable 'Export to Azure Compute Gallery' when the lab is not created by a lab plan with sharedGalleryId\r\n        const labPlanResourceId = new ResourceId(currentLab.labPlanId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(LabPlanProvider.saveImage, labPlanResourceId, accessToken, locale, language, displayName, templateId);\r\n        const image = {\r\n            id: labPlanResourceId.id + '/images/' + displayName,\r\n            sharedGalleryId: labPlanResourceId.id + '/images/' + displayName,\r\n            type: 'Microsoft.LabServices/labPlans/images',\r\n            name: displayName,\r\n            displayName: displayName,\r\n            enabledState: LabServicesModels.EnableState.Enabled,\r\n            provisioningState: LabServicesModels.ProvisioningState.Updating,\r\n        };\r\n        yield put(createSharedImageAccepted(currentLab.labPlanId, image));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.SaveSharedImage, e ? e.code : undefined);\r\n        yield put(createSharedImageError(templateId, error));\r\n    }\r\n}\r\nexport function* createSharedImageSaga() {\r\n    yield labParentBasedTakeLatest(SharedImageActionType.CREATE_SHARED_IMAGE, createSharedImage, createVNextSharedImage);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { SharedImageActionType } from '../../actions/shared-image/shared-image-actions';\r\nimport { updateSharedImageSuccess, updateSharedImageError, } from '../../actions/shared-image/shared-image-action-creators';\r\nimport SharedImageProvider from '../../../data/providers/shared-image-provider';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport LabPlanProvider from '../../../data/providers/vnext/arm-api/lab-plan-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getCurrentLab } from '../../selectors/lab-selectors';\r\nexport function* updateSharedImage(action) {\r\n    const { sharedImageId, templateId } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(SharedImageProvider.updateSharedImage, sharedImageId, templateId, accessToken, locale, language);\r\n        yield put(updateSharedImageSuccess());\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, sharedImageId, FailureOperation.SaveSharedImage, e ? e.code : undefined);\r\n        yield put(updateSharedImageError(templateId, error));\r\n    }\r\n}\r\nexport function* updateVNextSharedImage(action) {\r\n    const { templateId, sharedImageId } = action;\r\n    try {\r\n        const currentLab = yield select(getCurrentLab);\r\n        // we disable 'Export to Azure Compute Gallery' when the lab is not created by a lab plan with sharedGalleryId\r\n        const labPlanResourceId = new ResourceId(currentLab.labPlanId, true);\r\n        const sharedImageResourceId = new ResourceId(sharedImageId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(LabPlanProvider.saveImage, labPlanResourceId, accessToken, locale, language, sharedImageResourceId.name, templateId);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, templateId, FailureOperation.SaveSharedImage, e ? e.code : undefined);\r\n        yield put(updateSharedImageError(templateId, error));\r\n    }\r\n}\r\nexport function* updateSharedImageSaga() {\r\n    yield labParentBasedTakeLatest(SharedImageActionType.UPDATE_SHARED_IMAGE, updateSharedImage, updateVNextSharedImage);\r\n}\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { SharedImageActionType } from '../../actions/shared-image/shared-image-actions';\r\nimport { getSharedGallerySuccess, getSharedGalleryError, } from '../../actions/shared-image/shared-image-action-creators';\r\nimport SharedImageProvider from '../../../data/providers/shared-image-provider';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nexport function* getSharedGallery(action) {\r\n    const { labAccountId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labAccountId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const sharedGallery = yield call(SharedImageProvider.getSharedGallery, resourceId, accessToken, locale, language);\r\n        yield put(getSharedGallerySuccess(sharedGallery));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labAccountId, FailureOperation.GetSharedGallery, e ? e.code : undefined);\r\n        yield put(getSharedGalleryError(error));\r\n    }\r\n}\r\nexport function* getSharedGallerySaga() {\r\n    yield takeLatest(SharedImageActionType.GET_SHARED_GALLERY, getSharedGallery);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listSharedImagesSaga } from './list-shared-images';\r\nimport { createSharedImageSaga } from './create-shared-image';\r\nimport { updateSharedImageSaga } from './update-shared-image';\r\nimport { getSharedGallerySaga } from './get-shared-gallery';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listSharedImagesSaga),\r\n        fork(createSharedImageSaga),\r\n        fork(updateSharedImageSaga),\r\n        fork(getSharedGallerySaga),\r\n    ]);\r\n}\r\n","import { getMlClient } from './arm-data-provider';\r\nimport { ResourceId } from '../../utils/resource-id';\r\nimport { compareByName } from '../../utils/common';\r\nexport async function listUsers(labId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(labId.subscriptionId, accessToken, locale, language);\r\n    const users = await mlClient.users.list(labId.resourceGroupName, labId.parent.name, labId.name);\r\n    return users.sort(compareByName);\r\n}\r\nexport async function deleteUser(userId, accessToken, locale, language) {\r\n    const mlClient = getMlClient(userId.subscriptionId, accessToken, locale, language);\r\n    await mlClient.users.beginDeleteMethod(userId.resourceGroupName, userId.parent.parent.name, userId.parent.name, userId.name);\r\n}\r\nexport async function updateUser(user, accessToken, locale, language) {\r\n    const userResourceId = new ResourceId(user.id);\r\n    const labResourceId = userResourceId.parent;\r\n    const labAccountResourceId = labResourceId.parent;\r\n    const mlClient = getMlClient(userResourceId.subscriptionId, accessToken, locale, language);\r\n    const updatedUser = await mlClient.users.createOrUpdate(userResourceId.resourceGroupName, labAccountResourceId.name, labResourceId.name, userResourceId.name, user);\r\n    return updatedUser;\r\n}\r\nconst UserProvider = {\r\n    listUsers,\r\n    deleteUser,\r\n    updateUser,\r\n};\r\nexport default UserProvider;\r\n","import { ResourceId } from '../../../../utils/resource-id';\r\nimport { createVNextArmApiClient } from '../../arm-data-provider';\r\nimport { v4 as uuid } from 'uuid';\r\nexport async function listUsers(labId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    let currentPage = await armApiClient.users.listByLab(labId.resourceGroupName, labId.name);\r\n    let users = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await armApiClient.users.listByLabNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        users = users.concat(nextPage);\r\n    }\r\n    return users;\r\n}\r\nexport async function deleteUser(userId, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(userId.subscriptionId, accessToken, locale, language);\r\n    await armApiClient.users.beginDeleteMethod(userId.resourceGroupName, userId.parent.name, userId.name);\r\n}\r\nexport async function updateUser(user, accessToken, locale, language, additionalUsageQuota) {\r\n    const userResourceId = new ResourceId(user.id);\r\n    const labResourceId = userResourceId.parent;\r\n    const armApiClient = createVNextArmApiClient(userResourceId.subscriptionId, accessToken, locale, language);\r\n    const newUser = await armApiClient.users.update(userResourceId.resourceGroupName, labResourceId.name, userResourceId.name, {\r\n        additionalUsageQuota,\r\n    });\r\n    return newUser;\r\n}\r\nexport async function addUser(labId, accessToken, locale, language, email) {\r\n    const user = {\r\n        email,\r\n    };\r\n    const armApiClient = createVNextArmApiClient(labId.subscriptionId, accessToken, locale, language);\r\n    const newUser = await armApiClient.users.createOrUpdate(user, labId.resourceGroupName, labId.name, \r\n    // PUT method requires the labName in the api route. Use GUID for now when sending the request.\r\n    uuid());\r\n    return newUser;\r\n}\r\nexport async function inviteUser(userId, accessToken, locale, language, text) {\r\n    const armApiClient = createVNextArmApiClient(userId.subscriptionId, accessToken, locale, language);\r\n    await armApiClient.users.beginInvite(userId.resourceGroupName, userId.parent.name, userId.name, {\r\n        text,\r\n    });\r\n}\r\nconst UserProvider = {\r\n    listUsers,\r\n    deleteUser,\r\n    updateUser,\r\n    inviteUser,\r\n    addUser,\r\n};\r\nexport default UserProvider;\r\n","import { call, put, delay, race, take, cancelled, cancel, fork, select } from 'redux-saga/effects';\r\nimport { UserActionType } from '../../actions/user/user-actions';\r\nimport UserProvider from '../../../data/providers/user-provider';\r\nimport { listUsers as listUsersActionCreator, listUsersSuccess, listUsersError, pollUsersCancelled, listUsersCancelled, listVNextUsersSuccess, } from '../../actions/user/user-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VNextUserProvider from '../../../data/providers/vnext/arm-api/user-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nexport function* listUsers(action) {\r\n    const labId = action.labId;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { users, changed } = yield race({\r\n            users: call(UserProvider.listUsers, resourceId, accessToken, locale, language),\r\n            // TODO: Remaining cancel actions\r\n            changed: race([\r\n                take(UserActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(UserActionType.SELECT_LAB),\r\n                take(UserActionType.POLL_USERS_STOP),\r\n                take(UserActionType.POLL_USERS_CANCELLED),\r\n                take(UserActionType.UPDATE_ADDITIONAL_QUOTA),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listUsersCancelled());\r\n        }\r\n        else {\r\n            yield put(listUsersSuccess(users));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.LoadUsers, e ? e.code : undefined);\r\n        yield put(listUsersError(error));\r\n    }\r\n}\r\nexport function* listVNextUsers(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { users, changed } = yield race({\r\n            users: call(VNextUserProvider.listUsers, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(UserActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(UserActionType.SELECT_LAB),\r\n                take(UserActionType.POLL_USERS_STOP),\r\n                take(UserActionType.POLL_USERS_CANCELLED),\r\n                take(UserActionType.UPDATE_ADDITIONAL_QUOTA),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listUsersCancelled());\r\n        }\r\n        else {\r\n            yield put(listVNextUsersSuccess(users));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.LoadUsers, e ? e.code : undefined);\r\n        yield put(listUsersError(error));\r\n    }\r\n}\r\nfunction* pollUsers(action) {\r\n    try {\r\n        // allowing for an initial delay before we kick off polling\r\n        // to mitigate a state flashing bug due to issues in the RP\r\n        const { initialDelayMs, labId } = action;\r\n        if (!!initialDelayMs) {\r\n            yield delay(initialDelayMs);\r\n        }\r\n        // this looks like an infinite loop, but the finally block will get triggered when\r\n        // the task that is running this is canceled, which happens when the POLL_USERS_STOP\r\n        // action is dispatched\r\n        while (true) {\r\n            yield put(listUsersActionCreator(labId));\r\n            yield race({\r\n                success: take(UserActionType.LIST_USERS_SUCCESS),\r\n                cancelled: take(UserActionType.LIST_USERS_CANCELLED),\r\n                error: take(UserActionType.LIST_USERS_ERROR),\r\n            });\r\n            const { intervalMs } = action;\r\n            yield delay(intervalMs);\r\n        }\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(pollUsersCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollUsersSaga() {\r\n    // while this looks like an infinite loop, yield take(POLL_USERS_START)\r\n    // will pause this code until polling is started\r\n    while (true) {\r\n        const action = yield take(UserActionType.POLL_USERS_START);\r\n        // forking so the polling task runs without blocking\r\n        const pollUsersTask = yield fork(pollUsers, action);\r\n        // waits until the stop is triggered so we can cancel the polling task\r\n        yield take(UserActionType.POLL_USERS_STOP);\r\n        yield cancel(pollUsersTask);\r\n    }\r\n}\r\nexport function* listUsersSaga() {\r\n    yield labParentBasedTakeLatest(UserActionType.LIST_USERS, listUsers, listVNextUsers);\r\n}\r\n","import memoize from 'memoize-one';\r\nexport const getUsers = memoize((state) => {\r\n    const userStore = state.get('userStore');\r\n    const users = userStore.get('users');\r\n    return users;\r\n});\r\n","import memoize from 'memoize-one';\r\nexport const getVNextUsers = memoize((state) => {\r\n    const userStore = state.get('vNextUserStore');\r\n    const users = userStore.get('users');\r\n    return users;\r\n});\r\n","import { call, put, race, select, take, delay, all } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport { ProvisioningState } from '../../../data/models/common';\r\nimport LabProvider from '../../../data/providers/lab-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { addUsersError, addUsersSuccess, addVNextUsersError, addVNextUsersSuccess, listUsers, } from '../../actions/user/user-action-creators';\r\nimport { UserActionType } from '../../actions/user/user-actions';\r\nimport { getUsers } from '../../selectors/user-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getVNextUsers } from '../../selectors/vnext/user-selectors';\r\nimport UserProvider from '../../../data/providers/vnext/arm-api/user-provider';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nexport function* addUsers(action) {\r\n    const { labId, emailAddresses } = action;\r\n    try {\r\n        // compare against our current list of users to make\r\n        // sure we have new users to add\r\n        const currentUsers = yield select(getUsers);\r\n        const newEmails = emailAddresses.filter((email) => currentUsers.findIndex((user) => user.email === email) < 0);\r\n        // the emails are all duplicates, don't need to do anything\r\n        if (newEmails.length < 1) {\r\n            yield delay(500); // HACK: Doing this since the state change happens too fast for flyouts to auto-close\r\n            yield put(addUsersSuccess([]));\r\n        }\r\n        // time to actually add the users\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(LabProvider.addUsers, resourceId, newEmails, accessToken, locale, language);\r\n        // refresh the user list\r\n        yield put(listUsers(labId));\r\n        const { success } = yield race({\r\n            success: take(UserActionType.LIST_USERS_SUCCESS),\r\n            cancelled: take(UserActionType.LIST_USERS_CANCELLED),\r\n            error: take(UserActionType.LIST_USERS_ERROR),\r\n        });\r\n        if (success) {\r\n            // get the updated list of users\r\n            const users = yield select(getUsers);\r\n            // determine if any emails didn't get added for some reason\r\n            const failedEmails = newEmails.filter((email) => users.findIndex((user) => user.email === email) < 0);\r\n            if (failedEmails.length > 0) {\r\n                // we have some errors so dispatch an error\r\n                const error = new MlClientError(undefined, labId, FailureOperation.AddUsers);\r\n                yield put(addUsersError(error, failedEmails));\r\n            }\r\n            if (failedEmails.length < newEmails.length) {\r\n                // we have at least some successes so dispatch success\r\n                yield put(addUsersSuccess([]));\r\n            }\r\n        }\r\n        else {\r\n            // add placeholder users since the list call failed so we can move on\r\n            const newUsers = newEmails.map((email) => {\r\n                const user = {\r\n                    id: email,\r\n                    email,\r\n                    provisioningState: ProvisioningState.Unknown,\r\n                };\r\n                return user;\r\n            });\r\n            yield put(addUsersSuccess(newUsers));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.AddUsers, e ? e.code : undefined);\r\n        yield put(addUsersError(error));\r\n    }\r\n}\r\nexport async function callAddUser(resourceId, accessToken, locale, language, errors, emailAddress, successfulUsers) {\r\n    try {\r\n        const newUser = await UserProvider.addUser(resourceId, accessToken, locale, language, emailAddress);\r\n        successfulUsers.push(newUser);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, emailAddress, FailureOperation.AddUsers, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n    }\r\n}\r\nexport function* addVNextUsers(action) {\r\n    const { labId, emailAddresses } = action;\r\n    try {\r\n        // compare against our current list of users to make\r\n        // sure we have new users to add\r\n        const currentUsers = yield select(getVNextUsers);\r\n        const newEmails = emailAddresses.filter((email) => currentUsers.findIndex((user) => caseInsensitiveCultureInvariantCompare(user.email, email) === 0) < 0);\r\n        // the emails are all duplicates, don't need to do anything\r\n        if (newEmails.length < 1) {\r\n            yield delay(500); // HACK: Doing this since the state change happens too fast for flyouts to auto-close\r\n            yield put(addVNextUsersSuccess([]));\r\n        }\r\n        const successfulUsers = [];\r\n        const errors = {};\r\n        const resourceId = new ResourceId(labId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield all(newEmails.map((emailAddress) => call(callAddUser, resourceId, accessToken, locale, language, errors, emailAddress, successfulUsers)));\r\n        if (successfulUsers.length > 0) {\r\n            yield put(addVNextUsersSuccess(successfulUsers));\r\n        }\r\n        const failedIds = Object.keys(errors);\r\n        if (failedIds.length > 0) {\r\n            yield put(addVNextUsersError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.AddUsers, e ? e.code : undefined);\r\n        const errors = {};\r\n        errors[error.id] = error;\r\n        yield put(addVNextUsersError(errors));\r\n    }\r\n}\r\nexport function* addUsersSaga() {\r\n    yield labParentBasedTakeLatest(UserActionType.ADD_USERS, addUsers, addVNextUsers);\r\n}\r\n","import { all, call, put, select } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport UserProvider from '../../../data/providers/user-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { deleteUsersError, deleteUsersSuccess } from '../../actions/user/user-action-creators';\r\nimport { UserActionType } from '../../actions/user/user-actions';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport VNextUserProvider from '../../../data/providers/vnext/arm-api/user-provider';\r\nexport async function callDeleteUser(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        await UserProvider.deleteUser(resourceId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.DeleteUsers, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n    }\r\n}\r\nexport function* deleteUsers(action) {\r\n    const { userIds } = action;\r\n    try {\r\n        const resourceIds = userIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        yield all(resourceIds.map((resourceId) => call(callDeleteUser, resourceId, accessToken, locale, language, errors)));\r\n        const failedIds = Object.keys(errors);\r\n        if (failedIds.length < userIds.length) {\r\n            // we had at least partial success\r\n            const successIds = userIds.filter((id) => failedIds.indexOf(id) < 0);\r\n            yield put(deleteUsersSuccess(successIds));\r\n        }\r\n        if (failedIds.length > 0) {\r\n            // log the failures we had\r\n            yield put(deleteUsersError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.DeleteUsers, e ? e.code : undefined);\r\n        const errors = {};\r\n        errors[error.id] = error;\r\n        yield put(deleteUsersError(errors));\r\n    }\r\n}\r\nexport async function callDeleteVNextUser(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        await VNextUserProvider.deleteUser(resourceId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.DeleteUsers, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n    }\r\n}\r\nexport function* deleteVNextUsers(action) {\r\n    const { userIds } = action;\r\n    try {\r\n        const resourceIds = userIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        yield all(resourceIds.map((resourceId) => call(callDeleteVNextUser, resourceId, accessToken, locale, language, errors)));\r\n        const failedIds = Object.keys(errors);\r\n        if (failedIds.length < userIds.length) {\r\n            const successIds = userIds.filter((id) => failedIds.indexOf(id) < 0);\r\n            yield put(deleteUsersSuccess(successIds));\r\n        }\r\n        if (failedIds.length > 0) {\r\n            yield put(deleteUsersError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.DeleteUsers, e ? e.code : undefined);\r\n        const errors = {};\r\n        errors[error.id] = error;\r\n        yield put(deleteUsersError(errors));\r\n    }\r\n}\r\nexport function* deleteUsersSaga() {\r\n    yield labParentBasedTakeLatest(UserActionType.DELETE_USERS, deleteUsers, deleteVNextUsers);\r\n}\r\n","import { all, call, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport LabProvider from '../../../data/providers/lab-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { inviteUsersError, inviteUsersSuccess, inviteVNextUsersError } from '../../actions/user/user-action-creators';\r\nimport { UserActionType } from '../../actions/user/user-actions';\r\nimport { getUsers } from '../../selectors/user-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport VNextUserProvider from '../../../data/providers/vnext/arm-api/user-provider';\r\nexport function* inviteUsers(action) {\r\n    const { labId, userIds, extraMessage } = action;\r\n    try {\r\n        // resolve emails form the user Ids\r\n        const users = yield select(getUsers);\r\n        const emails = users\r\n            .filter((user) => userIds.indexOf(user.id) > -1)\r\n            .map((user) => user.email)\r\n            .toArray();\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        yield call(LabProvider.sendEmail, resourceId, emails, extraMessage, accessToken, locale, language);\r\n        yield put(inviteUsersSuccess(userIds));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labId, FailureOperation.InviteUsers, e ? e.code : undefined);\r\n        yield put(inviteUsersError(error));\r\n    }\r\n}\r\nexport async function callInviteUser(resourceId, accessToken, locale, language, errors, text) {\r\n    try {\r\n        await VNextUserProvider.inviteUser(resourceId, accessToken, locale, language, text);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.InviteUsers, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n    }\r\n}\r\nexport function* inviteVNextUsers(action) {\r\n    const { userIds, extraMessage } = action;\r\n    try {\r\n        const resourceIds = userIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        yield all(resourceIds.map((resourceId) => call(callInviteUser, resourceId, accessToken, locale, language, errors, extraMessage)));\r\n        const failedIds = Object.keys(errors);\r\n        if (failedIds.length < userIds.length) {\r\n            const successIds = userIds.filter((id) => failedIds.indexOf(id) < 0);\r\n            yield put(inviteUsersSuccess(successIds));\r\n        }\r\n        if (failedIds.length > 0) {\r\n            yield put(inviteVNextUsersError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.InviteUsers, e ? e.code : undefined);\r\n        const errors = {};\r\n        errors[error.id] = error;\r\n        yield put(inviteVNextUsersError(errors));\r\n    }\r\n}\r\nexport function* inviteUsersSaga() {\r\n    yield labParentBasedTakeLatest(UserActionType.INVITE_USERS, inviteUsers, inviteVNextUsers);\r\n}\r\n","import { all, call, put, select } from 'redux-saga/effects';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { UserActionType } from '../../actions/user/user-actions';\r\nimport { getUsers } from '../../selectors/user-selectors';\r\nimport { duration } from 'moment';\r\nimport UserProvider from '../../../data/providers/user-provider';\r\nimport { updateAdditionalQuotaForUsersError, updateAdditionalQuotaForUsersSuccess, updateVNextAdditionalQuotaForUsersSuccess, } from '../../actions/user/user-action-creators';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VNextUserProvider from '../../../data/providers/vnext/arm-api/user-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { getVNextUsers } from '../../selectors/vnext/user-selectors';\r\nasync function callUpdateUser(user, accessToken, locale, language, errors, successfulUsers) {\r\n    let updatedUser;\r\n    try {\r\n        updatedUser = await UserProvider.updateUser(user, accessToken, locale, language);\r\n        successfulUsers.push(updatedUser);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, user.id, FailureOperation.UpdateAdditionalQuotaForUsers, e ? e.code : undefined);\r\n        errors[user.id] = error;\r\n    }\r\n}\r\nexport function* updateAdditionalQuota(action) {\r\n    const { userIds, additionalQuota } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        //get users to update\r\n        const users = yield select(getUsers);\r\n        const selectedUsersWithQuota = users\r\n            .filter((user) => userIds.indexOf(user.id) > -1)\r\n            .map((user) => {\r\n            // override existing user quota\r\n            const updatedUser = { ...user, additionalUsageQuota: duration(additionalQuota, 'hours') };\r\n            return updatedUser;\r\n        });\r\n        const errors = {};\r\n        const successfulUsers = [];\r\n        yield all(selectedUsersWithQuota\r\n            .map((user) => call(callUpdateUser, user, accessToken, locale, language, errors, successfulUsers))\r\n            .toArray());\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(updateAdditionalQuotaForUsersError(errors));\r\n        }\r\n        if (successfulUsers.length > 0) {\r\n            yield put(updateAdditionalQuotaForUsersSuccess(successfulUsers));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : '', 'all', FailureOperation.UpdateAdditionalQuotaForUsers, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(updateAdditionalQuotaForUsersError(errors));\r\n    }\r\n}\r\nasync function callUpdateVNextUser(user, additionalQuota, accessToken, locale, language, errors, successfulUsers) {\r\n    try {\r\n        const updatedUser = await VNextUserProvider.updateUser(user, accessToken, locale, language, additionalQuota);\r\n        successfulUsers.push(updatedUser);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, user.id, FailureOperation.UpdateAdditionalQuotaForUsers, e ? e.code : undefined);\r\n        errors[user.id] = error;\r\n    }\r\n}\r\nexport function* updateVNextAdditionalQuota(action) {\r\n    const { userIds, additionalQuota } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const users = yield select(getVNextUsers);\r\n        const selectedUsersWithQuota = users.filter((user) => userIds.indexOf(user.id) > -1);\r\n        const additionalUsageQuota = duration(additionalQuota, 'hours').toISOString();\r\n        const successfulUsers = [];\r\n        const errors = {};\r\n        yield all(selectedUsersWithQuota\r\n            .map((user) => call(callUpdateVNextUser, user, additionalUsageQuota, accessToken, locale, language, errors, successfulUsers))\r\n            .toArray());\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(updateAdditionalQuotaForUsersError(errors));\r\n        }\r\n        if (successfulUsers.length > 0) {\r\n            yield put(updateVNextAdditionalQuotaForUsersSuccess(successfulUsers));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : '', 'all', FailureOperation.UpdateAdditionalQuotaForUsers, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(updateAdditionalQuotaForUsersError(errors));\r\n    }\r\n}\r\nexport function* updateAdditionalQuotaSaga() {\r\n    yield labParentBasedTakeLatest(UserActionType.UPDATE_ADDITIONAL_QUOTA, updateAdditionalQuota, updateVNextAdditionalQuota);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listUsersSaga, pollUsersSaga } from './list-users';\r\nimport { addUsersSaga } from './add-users';\r\nimport { deleteUsersSaga } from './delete-users';\r\nimport { inviteUsersSaga } from './invite-users';\r\nimport { updateAdditionalQuotaSaga } from './update-additional-quota';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listUsersSaga),\r\n        fork(pollUsersSaga),\r\n        fork(addUsersSaga),\r\n        fork(deleteUsersSaga),\r\n        fork(inviteUsersSaga),\r\n        fork(updateAdditionalQuotaSaga),\r\n    ]);\r\n}\r\n","import { all, call, put, select } from 'redux-saga/effects';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nimport EnvironmentProvider from '../../../data/providers/environment-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { resetEnvironmentsError, resetEnvironmentAccepted, } from '../../actions/environment/environment-action-creators';\r\nimport { EnvironmentActionType } from '../../actions/environment/environment-actions';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nimport { labParentBasedTakeEvery } from '../../effects/lab-parent-based';\r\nimport { GetOperationsResult } from '../../actions/operations/operations-result-action-creators';\r\nimport { OperationType } from '../../../data/models/vnext/operation';\r\nexport async function callResetEnvironment(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        await EnvironmentProvider.deleteEnvironment(resourceId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.ResetEnvironments, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n    }\r\n}\r\nexport function* resetEnvironments(action) {\r\n    const { environmentIds } = action;\r\n    try {\r\n        const resourceIds = environmentIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        yield all(resourceIds.map((resourceId) => call(callResetEnvironment, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(resetEnvironmentsError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.ResetEnvironments, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(resetEnvironmentsError(errors));\r\n    }\r\n}\r\nexport async function callResetVNextVirtualMachine(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        const reimageVmResult = await VirtualMachineProvider.reimageVirtualMachine(resourceId, accessToken, locale, language);\r\n        reimageVmResult['ResourceId'] = resourceId;\r\n        return reimageVmResult;\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.ResetEnvironments, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n        return {\r\n            operationType: OperationType.ReimageOperation,\r\n            ResourceId: resourceId,\r\n            error,\r\n        };\r\n    }\r\n}\r\nexport function* resetVNextVirtualMachines(action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    try {\r\n        const resourceIds = virtualMachineIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        const resetVmsResult = yield all(resourceIds.map((resourceId) => call(callResetVNextVirtualMachine, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(resetEnvironmentsError(errors));\r\n        }\r\n        yield put(resetEnvironmentAccepted(resetVmsResult));\r\n        yield put(GetOperationsResult(''));\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.ResetEnvironments, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(resetEnvironmentsError(errors));\r\n    }\r\n}\r\nexport function* resetEnvironmentsSaga() {\r\n    yield labParentBasedTakeEvery(EnvironmentActionType.RESET_ENVIRONMENTS, resetEnvironments, resetVNextVirtualMachines);\r\n}\r\n","import { all, call, put, select } from 'redux-saga/effects';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nimport EnvironmentProvider from '../../../data/providers/environment-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { startEnvironmentsError, startEnvironmentsAccepted, } from '../../actions/environment/environment-action-creators';\r\nimport { EnvironmentActionType } from '../../actions/environment/environment-actions';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nimport { labParentBasedTakeEvery } from '../../../redux/effects/lab-parent-based';\r\nimport { GetOperationsResult } from '../../actions/operations/operations-result-action-creators';\r\nimport { OperationType } from '../../../data/models/vnext/operation';\r\nexport async function callStartEnvironment(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        await EnvironmentProvider.startEnvironment(resourceId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.StartEnvironments, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n    }\r\n}\r\nexport function* startEnvironments(action) {\r\n    const { environmentIds } = action;\r\n    try {\r\n        const resourceIds = environmentIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        yield all(resourceIds.map((resourceId) => call(callStartEnvironment, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(startEnvironmentsError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.StartEnvironments, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(startEnvironmentsError(errors));\r\n    }\r\n}\r\nexport async function callStartVNextVirtualMachine(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        const startVmResult = await VirtualMachineProvider.startVirtualMachine(resourceId, accessToken, locale, language);\r\n        startVmResult['ResourceId'] = resourceId;\r\n        return startVmResult;\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.StartEnvironments, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n        return {\r\n            operationType: OperationType.StartOperation,\r\n            ResourceId: resourceId,\r\n            error,\r\n        };\r\n    }\r\n}\r\nexport function* startVNextVirtualMachines(action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    try {\r\n        const resourceIds = virtualMachineIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        const startVmsResult = yield all(resourceIds.map((resourceId) => call(callStartVNextVirtualMachine, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(startEnvironmentsError(errors));\r\n        }\r\n        yield put(startEnvironmentsAccepted(startVmsResult));\r\n        yield put(GetOperationsResult(''));\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, virtualMachineIds.length === 1 ? virtualMachineIds[0] : 'all', FailureOperation.StartEnvironments, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(startEnvironmentsError(errors));\r\n    }\r\n}\r\nexport function* startEnvironmentsSaga() {\r\n    yield labParentBasedTakeEvery(EnvironmentActionType.START_ENVIRONMENTS, startEnvironments, startVNextVirtualMachines);\r\n}\r\n","import { all, call, put, select } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport EnvironmentProvider from '../../../data/providers/environment-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { stopEnvironmentsError, stopEnvironmentsAccepted } from '../../actions/environment/environment-action-creators';\r\nimport { EnvironmentActionType } from '../../actions/environment/environment-actions';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nimport { labParentBasedTakeEvery } from '../../effects/lab-parent-based';\r\nimport { GetOperationsResult } from '../../actions/operations/operations-result-action-creators';\r\nimport { OperationType } from '../../../data/models/vnext/operation';\r\nexport async function callStopEnvironment(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        await EnvironmentProvider.stopEnvironment(resourceId, accessToken, locale, language);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.StopEnvironments, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n    }\r\n}\r\nexport function* stopEnvironments(action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    try {\r\n        const resourceIds = virtualMachineIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        yield all(resourceIds.map((resourceId) => call(callStopEnvironment, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(stopEnvironmentsError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.StopEnvironments, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(stopEnvironmentsError(errors));\r\n    }\r\n}\r\nexport async function callStopVNextVirtualMachine(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        const stopVmResult = await VirtualMachineProvider.stopVirtualMachine(resourceId, accessToken, locale, language);\r\n        stopVmResult['ResourceId'] = resourceId;\r\n        return stopVmResult;\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.StopEnvironments, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n        return {\r\n            operationType: OperationType.StopOperation,\r\n            ResourceId: resourceId,\r\n            error,\r\n        };\r\n    }\r\n}\r\nexport function* stopVNextVirtualMachines(action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    try {\r\n        const resourceIds = virtualMachineIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        const stopVmsResult = yield all(resourceIds.map((resourceId) => call(callStopVNextVirtualMachine, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(stopEnvironmentsError(errors));\r\n        }\r\n        yield put(stopEnvironmentsAccepted(stopVmsResult));\r\n        yield put(GetOperationsResult(''));\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, virtualMachineIds.length === 1 ? virtualMachineIds[0] : 'all', FailureOperation.StopEnvironments, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(stopEnvironmentsError(errors));\r\n    }\r\n}\r\nexport function* stopEnvironmentsSaga() {\r\n    yield labParentBasedTakeEvery(EnvironmentActionType.STOP_ENVIRONMENTS, stopEnvironments, stopVNextVirtualMachines);\r\n}\r\n","import { put, call, take, race, select, delay, cancelled, fork, cancel } from 'redux-saga/effects';\r\nimport { EnvironmentActionType, } from '../../actions/environment/environment-actions';\r\nimport { getEnvironmentSuccess, getEnvironmentError, getEnvironmentCancelled, getVNextVirtualMachineSuccess, getEnvironment as getEnvironmentActionCreator, pollVirtualMachineCancelled, } from '../../actions/environment/environment-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport EnvironmentProvider from '../../../data/providers/environment-provider';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { labParentBasedTakeEvery } from '../../effects/lab-parent-based';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nexport function* getEnvironment(action) {\r\n    const { id, includeNetwork } = action;\r\n    try {\r\n        const resourceId = new ResourceId(id);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { environment, changed } = yield race({\r\n            environment: call(EnvironmentProvider.getEnvironment, resourceId, accessToken, locale, language, includeNetwork),\r\n            changed: race([\r\n                take(EnvironmentActionType.SELECT_LAB),\r\n                take(EnvironmentActionType.SELECT_LAB_PARENT_RESOURCE),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getEnvironmentCancelled(id));\r\n        }\r\n        else {\r\n            yield put(getEnvironmentSuccess(environment));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, id, includeNetwork ? FailureOperation.GetEnvironmentWithNetwork : FailureOperation.GetEnvironment, err ? err.code : undefined);\r\n        yield put(getEnvironmentError(id, error));\r\n    }\r\n}\r\nexport function* getVNextVirtualMachine(action) {\r\n    const { id } = action;\r\n    try {\r\n        const resourceId = new ResourceId(id);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { virtualMachine, changed } = yield race({\r\n            virtualMachine: call(VirtualMachineProvider.getVirtualMachine, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(EnvironmentActionType.SELECT_LAB),\r\n                take(EnvironmentActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(EnvironmentActionType.GET_ENVIRONMENT_CANCELLED),\r\n                take(EnvironmentActionType.POLL_VIRTUAL_MACHINE_STOP),\r\n                take(EnvironmentActionType.POLL_VIRTUAL_MACHINE_CANCELLED),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getEnvironmentCancelled(id));\r\n        }\r\n        else {\r\n            yield put(getVNextVirtualMachineSuccess(virtualMachine));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, id, FailureOperation.GetEnvironment, err ? err.code : undefined);\r\n        yield put(getEnvironmentError(id, error));\r\n    }\r\n}\r\nexport function* getEnvironmentSaga() {\r\n    yield labParentBasedTakeEvery(EnvironmentActionType.GET_ENVIRONMENT, getEnvironment, getVNextVirtualMachine);\r\n}\r\nfunction* pollVirutalMachine(action) {\r\n    try {\r\n        // allowing for an initial delay before we kick off polling\r\n        // to mitigate a state flashing bug due to issues in the RP\r\n        const { initialDelayMs, id } = action;\r\n        if (!!initialDelayMs) {\r\n            yield delay(initialDelayMs);\r\n        }\r\n        // this looks like an infinite loop, but the finally block will get triggered when\r\n        // the task that is running this is canceled, which happens when the POLL_TEMPLATE_STOP\r\n        // action is dispatched\r\n        while (true) {\r\n            yield put(getEnvironmentActionCreator(id));\r\n            yield race({\r\n                success: take(EnvironmentActionType.GET_ENVIRONMENT_SUCCESS),\r\n                cancelled: take(EnvironmentActionType.GET_ENVIRONMENT_CANCELLED),\r\n                error: take(EnvironmentActionType.GET_ENVIRONMENT_ERROR),\r\n            });\r\n            const { intervalMs } = action;\r\n            yield delay(intervalMs);\r\n        }\r\n    }\r\n    finally {\r\n        if (yield cancelled()) {\r\n            yield put(pollVirtualMachineCancelled());\r\n        }\r\n    }\r\n}\r\nexport function* pollVirtualMachineSaga() {\r\n    while (true) {\r\n        const action = yield take(EnvironmentActionType.POLL_VIRTUAL_MACHINE_START);\r\n        // forking so the polling task runs without blocking\r\n        const pollTask = yield fork(pollVirutalMachine, action);\r\n        // waits until the stop is triggered so we can cancel the polling task\r\n        yield take(EnvironmentActionType.POLL_VIRTUAL_MACHINE_STOP);\r\n        yield cancel(pollTask);\r\n    }\r\n}\r\n","import { all, call, put, takeEvery, select } from 'redux-saga/effects';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { redeployVirtualMachinesAccepted, redeployVirtualMachinesError, } from '../../actions/environment/environment-action-creators';\r\nimport { EnvironmentActionType } from '../../actions/environment/environment-actions';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport VirtualMachineProvider from '../../../data/providers/vnext/arm-api/virtual-machine-provider';\r\nimport { GetOperationsResult } from '../../actions/operations/operations-result-action-creators';\r\nimport { OperationType } from '../../../data/models/vnext/operation';\r\nexport async function callRedeployVNextVirtualMachine(resourceId, accessToken, locale, language, errors) {\r\n    try {\r\n        const redeployVmResult = await VirtualMachineProvider.redeployVirtualMachine(resourceId, accessToken, locale, language);\r\n        redeployVmResult['ResourceId'] = resourceId;\r\n        return redeployVmResult;\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.RedeployVirtualMachine, e ? e.code : undefined);\r\n        errors[resourceId.id] = error;\r\n        return {\r\n            operationType: OperationType.StartOperation,\r\n            ResourceId: resourceId,\r\n            error,\r\n        };\r\n    }\r\n}\r\nexport function* redeployVNextVirtualMachines(action) {\r\n    const { environmentIds: virtualMachineIds } = action;\r\n    try {\r\n        const resourceIds = virtualMachineIds.map((o) => new ResourceId(o));\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const errors = {};\r\n        const redeployVmsResult = yield all(resourceIds.map((resourceId) => call(callRedeployVNextVirtualMachine, resourceId, accessToken, locale, language, errors)));\r\n        if (Object.keys(errors).length > 0) {\r\n            yield put(redeployVirtualMachinesError(errors));\r\n        }\r\n        yield put(redeployVirtualMachinesAccepted(redeployVmsResult));\r\n        yield put(GetOperationsResult(''));\r\n    }\r\n    catch (e) {\r\n        const errors = {};\r\n        const error = new MlClientError(e ? e.message : undefined, virtualMachineIds.length === 1 ? virtualMachineIds[0] : 'all', FailureOperation.RedeployVirtualMachine, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n        yield put(redeployVirtualMachinesError(errors));\r\n    }\r\n}\r\nexport function* redeployVirtualMachinesSaga() {\r\n    yield takeEvery(EnvironmentActionType.REDEPLOY_VIRTUAL_MACHINE, redeployVNextVirtualMachines);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listEnvironmentsSaga, pollEnvironmentsSaga, pollOperationsSaga } from './list-environments';\r\nimport { resetEnvironmentsSaga } from './reset-environments';\r\nimport { startEnvironmentsSaga } from './start-environments';\r\nimport { stopEnvironmentsSaga } from './stop-environments';\r\nimport { getEnvironmentSaga, pollVirtualMachineSaga } from './get-environment';\r\nimport { redeployVirtualMachinesSaga } from './redeploy-virtual-machines';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(listEnvironmentsSaga),\r\n        fork(pollEnvironmentsSaga),\r\n        fork(startEnvironmentsSaga),\r\n        fork(stopEnvironmentsSaga),\r\n        fork(resetEnvironmentsSaga),\r\n        fork(getEnvironmentSaga),\r\n        fork(pollVirtualMachineSaga),\r\n        fork(redeployVirtualMachinesSaga),\r\n        fork(pollOperationsSaga),\r\n    ]);\r\n}\r\n","import { ResourceId } from '../../../../utils/resource-id';\r\nimport { createLabsApiClient } from './labs-api-client-factory';\r\nexport async function getPricingAndAvailability(labParentId, accessToken, locale, language) {\r\n    const id = labParentId instanceof ResourceId ? labParentId : new ResourceId(labParentId);\r\n    const mlClient = createLabsApiClient(id.subscriptionId, accessToken, locale, language);\r\n    const response = await mlClient.priceAndAvailability.get();\r\n    return response;\r\n}\r\n","import { PricingAndAvailabilityActionType, } from './pricing-and-availability-actions';\r\nexport const getPricingAndAvailabilityData = (labAccountId) => ({\r\n    type: PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA,\r\n    labAccountId,\r\n});\r\nexport const getPricingAndAvailabilityDataSuccess = (data) => ({\r\n    type: PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS,\r\n    data,\r\n});\r\nexport const getVNextPricingAndAvailabilityDataSuccess = (data) => ({\r\n    type: PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_SUCCESS,\r\n    data,\r\n});\r\nexport const getPricingAndAvailabilityDataError = (error) => ({\r\n    type: PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA_ERROR,\r\n    error,\r\n});\r\nexport const getLabPricingAndAvailabilityData = (labId) => ({\r\n    type: PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA,\r\n    labId,\r\n});\r\nexport const getLabPricingAndAvailabilityDataSuccess = (data) => ({\r\n    type: PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA_SUCCESS,\r\n    data,\r\n});\r\nexport const getLabPricingAndAvailabilityDataError = (error) => ({\r\n    type: PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA_ERROR,\r\n    error,\r\n});\r\nexport const clearLabPricingAndAvailabilityError = () => ({\r\n    type: PricingAndAvailabilityActionType.CLEAR_LAB_PRICING_AND_AVAILABILITY_ERROR,\r\n});\r\nconst actions = {\r\n    getPricingAndAvailabilityData,\r\n    getPricingAndAvailabilityDataSuccess,\r\n    getPricingAndAvailabilityDataError,\r\n    getLabPricingAndAvailabilityData,\r\n    getLabPricingAndAvailabilityDataSuccess,\r\n    getLabPricingAndAvailabilityDataError,\r\n    clearLabPricingAndAvailabilityError,\r\n    getVNextPricingAndAvailabilityDataSuccess,\r\n};\r\nexport default actions;\r\n","import { takeLatest, call, select, put } from 'redux-saga/effects';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { getPricingAndAvailability } from '../../../data/providers/lab-account-provider';\r\nimport { getPricingAndAvailability as getVNextPricingAndAvailabilityData } from '../../../data/providers/vnext/labs-api/pricing-and-availability-providers';\r\nimport { MlClientError, FailureOperation } from '../../../data/ml-client-error';\r\nimport { PricingAndAvailabilityActionType, } from '../../actions/pricing-and-availability/pricing-and-availability-actions';\r\nimport { getPricingAndAvailabilityData as getPricingAndAvailabilityDataActionCreator, getPricingAndAvailabilityDataSuccess, getPricingAndAvailabilityDataError, getVNextPricingAndAvailabilityDataSuccess, } from '../../actions/pricing-and-availability/pricing-and-availability-action-creators';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { isRouteTeamsConfig } from '../../selectors/route-selector';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nexport function* getPricingAndAvailabilityData(action) {\r\n    const { labAccountId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labAccountId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const data = yield call(getPricingAndAvailability, resourceId, accessToken, locale, language);\r\n        yield put(getPricingAndAvailabilityDataSuccess(data));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labAccountId, FailureOperation.GetPricingAndAvailabilityData, err ? err.code : undefined);\r\n        yield put(getPricingAndAvailabilityDataError(error));\r\n    }\r\n}\r\nexport function* getPricesAndAvailabilityOnLabParentSelect(action) {\r\n    const { resourceId } = action;\r\n    const isTeamsConfigPage = yield select(isRouteTeamsConfig);\r\n    if (!isTeamsConfigPage) {\r\n        try {\r\n            yield put(getPricingAndAvailabilityDataActionCreator(resourceId));\r\n        }\r\n        catch (err) {\r\n            trackException(undefined, err);\r\n        }\r\n    }\r\n}\r\n//vNext saga\r\nexport function* getVnextPricingAndAvailabilityData(action) {\r\n    const { labAccountId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labAccountId);\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const data = yield call(getVNextPricingAndAvailabilityData, resourceId, accessToken, locale, language);\r\n        yield put(getVNextPricingAndAvailabilityDataSuccess(data));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labAccountId, FailureOperation.GetPricingAndAvailabilityData, err ? err.code : undefined);\r\n        yield put(getPricingAndAvailabilityDataError(error));\r\n    }\r\n}\r\nexport function* getPricesAndAvailabilityOnLabParentSelectSaga() {\r\n    yield takeLatest(PricingAndAvailabilityActionType.SELECT_LAB_PARENT_RESOURCE, getPricesAndAvailabilityOnLabParentSelect);\r\n}\r\nexport function* getPricingAndAvailabilityDataSaga() {\r\n    yield labParentBasedTakeLatest(PricingAndAvailabilityActionType.GET_PRICING_AND_AVAILABILITY_DATA, getPricingAndAvailabilityData, getVnextPricingAndAvailabilityData);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { isTemplateCreating } from '../../selectors/template-selectors';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport { LoadingStoreState } from '../../../data/models/loading-store-state';\r\nimport { getPricingAndAvailability } from '../../../data/providers/lab-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { getLabPricingAndAvailabilityData as getLabPricingAndAvailabilityDataActionCreator, getLabPricingAndAvailabilityDataError, getLabPricingAndAvailabilityDataSuccess, } from '../../actions/pricing-and-availability/pricing-and-availability-action-creators';\r\nimport { PricingAndAvailabilityActionType, } from '../../actions/pricing-and-availability/pricing-and-availability-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getCurrentLabId } from '../../selectors/lab-selectors';\r\nimport { getLabPricingAndAvailabilityLoadState } from '../../selectors/pricing-and-availability-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nexport function* getLabPricingAndAvailabilityData(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const data = yield call(getPricingAndAvailability, resourceId, accessToken, locale, language);\r\n        yield put(getLabPricingAndAvailabilityDataSuccess(data));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labId, FailureOperation.GetLabPricingAndAvailabilityData, err ? err.code : undefined);\r\n        yield put(getLabPricingAndAvailabilityDataError(error));\r\n    }\r\n}\r\nexport function* getLabPricesAndAvailabilityOnLoadTemplate(action) {\r\n    try {\r\n        const labLoadState = yield select(getLabPricingAndAvailabilityLoadState);\r\n        if (labLoadState === LoadingStoreState.NotStarted) {\r\n            const currentTemplate = action.type === PricingAndAvailabilityActionType.GET_TEMPLATE_SUCCESS\r\n                ? action.template\r\n                : action.templates[0];\r\n            if (currentTemplate && !isTemplateCreating(currentTemplate)) {\r\n                const labId = yield select(getCurrentLabId);\r\n                yield put(getLabPricingAndAvailabilityDataActionCreator(labId));\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* getLabPricesAndAvailabilityOnLoadTemplateSaga() {\r\n    yield takeLatest([\r\n        PricingAndAvailabilityActionType.LIST_TEMPLATES_SUCCESS,\r\n        PricingAndAvailabilityActionType.GET_TEMPLATE_SUCCESS,\r\n    ], getLabPricesAndAvailabilityOnLoadTemplate);\r\n}\r\nexport function* getLabPricingAndAvailabilityDataSaga() {\r\n    yield takeLatest(PricingAndAvailabilityActionType.GET_LAB_PRICING_AND_AVAILABILITY_DATA, getLabPricingAndAvailabilityData);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { getPricingAndAvailabilityDataSaga, getPricesAndAvailabilityOnLabParentSelectSaga, } from './get-pricing-and-availability';\r\nimport { getLabPricingAndAvailabilityDataSaga, getLabPricesAndAvailabilityOnLoadTemplateSaga, } from './get-lab-pricing-and-availability';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(getPricingAndAvailabilityDataSaga),\r\n        fork(getPricesAndAvailabilityOnLabParentSelectSaga),\r\n        fork(getLabPricingAndAvailabilityDataSaga),\r\n        fork(getLabPricesAndAvailabilityOnLoadTemplateSaga),\r\n    ]);\r\n}\r\n","import { CoreLimitActionType, } from './core-limit-actions';\r\nexport const getCoreRestrictionsAndUsages = (id) => ({\r\n    type: CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE,\r\n    id,\r\n});\r\nexport const getCoreRestrictionsAndUsagesSuccess = (coreRestrictionsAndUsages) => ({\r\n    type: CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS,\r\n    coreRestrictionsAndUsages,\r\n});\r\nexport const getCoreRestrictionsAndUsagesError = (id, error) => ({\r\n    type: CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_ERROR,\r\n    id,\r\n    error,\r\n});\r\nexport const getCoreRestrictionsAndUsagesCancelled = () => ({\r\n    type: CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_CANCELLED,\r\n});\r\nexport const getVNextCoreUsagesSuccess = (coreUsage) => ({\r\n    type: CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE_SUCCESS,\r\n    coreUsage,\r\n});\r\nconst actions = {\r\n    getCoreRestrictionsAndUsages,\r\n    getCoreRestrictionsAndUsagesSuccess,\r\n    getCoreRestrictionsAndUsagesError,\r\n    getCoreRestrictionsAndUsagesCancelled,\r\n    getVNextCoreUsagesSuccess,\r\n};\r\nexport default actions;\r\n","import { ResourceId } from '../../../../utils/resource-id';\r\nimport { createLabsApiClient } from './labs-api-client-factory';\r\nexport async function getCoreUsage(labParentId, accessToken, locale, language) {\r\n    const id = labParentId instanceof ResourceId ? labParentId : new ResourceId(labParentId);\r\n    const client = createLabsApiClient(id.subscriptionId, accessToken, locale, language);\r\n    const result = await client.coreUsage.get();\r\n    return result;\r\n}\r\nconst CoreUsageProvider = {\r\n    getCoreUsage,\r\n};\r\nexport default CoreUsageProvider;\r\n","import { call, put, select, takeLatest, race, take } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport LabAccountProvider from '../../../data/providers/lab-account-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { CoreLimitActionType } from '../../actions/core-limit/core-limit-actions';\r\nimport { getCoreRestrictionsAndUsages as getCoreRestrictionsActionCreator, getCoreRestrictionsAndUsagesSuccess, getCoreRestrictionsAndUsagesError, getCoreRestrictionsAndUsagesCancelled, getVNextCoreUsagesSuccess, } from '../../actions/core-limit/core-limit-action-creators';\r\nimport { trackException } from '../../../utils/telemetry/telemetry-channel';\r\nimport { getCoreLimits, convertToRestModel } from '../../selectors/core-limit-selectors';\r\nimport { MlCoreFamily } from '../../../data/models/core-quota-data';\r\nimport { getLabPricingAndAvailabilityData } from '../../selectors/pricing-and-availability-selectors';\r\nimport { getIsGpu, getCores, getCurrentTemplate, getTemplate, hasBeenPublished, } from '../../selectors/template-selectors';\r\nimport { isRouteTeamsConfig } from '../../selectors/route-selector';\r\nimport CoreUsageProvider from '../../../data/providers/vnext/labs-api/core-usage-provider';\r\nimport { labParentBasedTakeLatest } from '../../effects/lab-parent-based';\r\nimport { LabServicesModels } from 'lab-services';\r\nimport { getVNextLab } from '../../selectors/vnext/lab-selectors';\r\nexport function* getCoreRestrictionsAndUsage(action) {\r\n    const { id } = action;\r\n    try {\r\n        const resourceId = new ResourceId(id);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { coreRestrictionsAndUsages, changed } = yield race({\r\n            coreRestrictionsAndUsages: call(LabAccountProvider.getCoreRestrictionsAndUsages, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(CoreLimitActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(CoreLimitActionType.SELECT_LAB),\r\n                take(CoreLimitActionType.PUBLISH_TEMPLATE),\r\n                take(CoreLimitActionType.UPDATE_LAB_SUCCESS),\r\n                take(CoreLimitActionType.CREATE_LAB_SUCCESS),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getCoreRestrictionsAndUsagesCancelled());\r\n        }\r\n        else {\r\n            yield put(getCoreRestrictionsAndUsagesSuccess(coreRestrictionsAndUsages));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, id, FailureOperation.GetCoreRestrictionsAndUsages, err ? err.code : undefined);\r\n        yield put(getCoreRestrictionsAndUsagesError(id, error));\r\n    }\r\n}\r\nexport function* getCoreLimitsOnLabParentSelect(action) {\r\n    const { resourceId } = action;\r\n    const isTeamsConfigPage = yield select(isRouteTeamsConfig);\r\n    if (!isTeamsConfigPage) {\r\n        try {\r\n            yield put(getCoreRestrictionsActionCreator(resourceId));\r\n        }\r\n        catch (err) {\r\n            trackException(undefined, err);\r\n        }\r\n    }\r\n}\r\nexport function* getCoreLimitsOnLabSelect(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labId);\r\n        const labAccountId = resourceId.parent?.id ?? '';\r\n        yield put(getCoreRestrictionsActionCreator(labAccountId || labId));\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* getCoreLimitsOnPublishTemplate(action) {\r\n    const { maxUsersInLab, templateId } = action;\r\n    try {\r\n        const template = yield select(getTemplate, templateId);\r\n        // if template has already been published, cores are already accounted for\r\n        if (!hasBeenPublished(template)) {\r\n            // unfortunately the short running publish call does not update core usage in the DB\r\n            //  as the core usage is updated in the publish job\r\n            // to avoid polling and to keep the UI data consistent with what's happening in the DB, calculate what the usage would be here\r\n            const sizeData = yield select(getLabPricingAndAvailabilityData);\r\n            const isGpu = getIsGpu(sizeData);\r\n            const coresPerVm = getCores(sizeData);\r\n            const previousCoreData = yield select(getCoreLimits);\r\n            if (previousCoreData && previousCoreData.usages && coresPerVm) {\r\n                const newCores = maxUsersInLab * coresPerVm;\r\n                const usages = previousCoreData.usages;\r\n                const coreFamily = isGpu ? MlCoreFamily.GPU : MlCoreFamily.Standard;\r\n                const newUsage = usages.get(coreFamily) + newCores;\r\n                const newUsages = usages.set(coreFamily, newUsage);\r\n                const newCoreData = { ...previousCoreData, usages: newUsages };\r\n                const coreRestrictionsAndUsages = convertToRestModel(newCoreData);\r\n                yield put(getCoreRestrictionsAndUsagesSuccess(coreRestrictionsAndUsages));\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* getCoreLimitsOnCreateLabSuccess(action) {\r\n    const { lab } = action;\r\n    try {\r\n        const labId = lab.id;\r\n        const resourceId = new ResourceId(labId);\r\n        const labAccountId = resourceId.parent?.id ?? '';\r\n        yield put(getCoreRestrictionsActionCreator(labAccountId || labId));\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* getCoreLimitsOnUpdateLabSuccess(action) {\r\n    const { lab } = action;\r\n    try {\r\n        const template = yield select(getCurrentTemplate);\r\n        if (hasBeenPublished(template)) {\r\n            const labId = lab.id;\r\n            const resourceId = new ResourceId(labId);\r\n            const labAccountId = resourceId.parent?.id ?? '';\r\n            yield put(getCoreRestrictionsActionCreator(labAccountId || labId));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\n//vNext\r\nexport function* getVNextCoreUsage(action) {\r\n    const { id } = action;\r\n    try {\r\n        const resourceId = new ResourceId(id);\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const { coreUsage, changed } = yield race({\r\n            coreUsage: call(CoreUsageProvider.getCoreUsage, resourceId, accessToken, locale, language),\r\n            changed: race([\r\n                take(CoreLimitActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(CoreLimitActionType.SELECT_LAB),\r\n                take(CoreLimitActionType.PUBLISH_TEMPLATE),\r\n                take(CoreLimitActionType.UPDATE_LAB_SUCCESS),\r\n                take(CoreLimitActionType.CREATE_LAB_SUCCESS),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(getCoreRestrictionsAndUsagesCancelled());\r\n        }\r\n        else {\r\n            yield put(getVNextCoreUsagesSuccess(coreUsage));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, id, FailureOperation.GetCoreRestrictionsAndUsages, err ? err.code : undefined);\r\n        yield put(getCoreRestrictionsAndUsagesError(id, error));\r\n    }\r\n}\r\nexport function* getVNextCoreUsageOnUpdateLabSuccess(action) {\r\n    const { lab } = action;\r\n    try {\r\n        if (lab.state === LabServicesModels.LabState.Published) {\r\n            const labId = lab.id;\r\n            const resourceId = new ResourceId(labId, true);\r\n            const labParentId = resourceId.parent?.id ?? '';\r\n            yield put(getCoreRestrictionsActionCreator(labParentId));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* getCoreUsageOnPublishVNextLab(action) {\r\n    const { labId } = action;\r\n    try {\r\n        const lab = yield select(getVNextLab, labId);\r\n        if (lab.state != LabServicesModels.LabState.Published) {\r\n            const resourceId = new ResourceId(labId, true);\r\n            const labParentId = resourceId.parent?.id ?? '';\r\n            yield put(getCoreRestrictionsActionCreator(labParentId));\r\n        }\r\n    }\r\n    catch (err) {\r\n        trackException(undefined, err);\r\n    }\r\n}\r\nexport function* getCoreLimitsSaga() {\r\n    yield labParentBasedTakeLatest(CoreLimitActionType.GET_CORE_RESTRICTIONS_AND_USAGE, getCoreRestrictionsAndUsage, getVNextCoreUsage);\r\n}\r\nexport function* getCoreLimitsOnSelectLabParentResourceSaga() {\r\n    yield takeLatest(CoreLimitActionType.SELECT_LAB_PARENT_RESOURCE, getCoreLimitsOnLabParentSelect);\r\n}\r\nexport function* getCoreLimitsOnSelectLabSaga() {\r\n    yield takeLatest(CoreLimitActionType.SELECT_LAB, getCoreLimitsOnLabSelect);\r\n}\r\nexport function* getCoreLimitsOnPublishTemplateSaga() {\r\n    yield labParentBasedTakeLatest(CoreLimitActionType.PUBLISH_TEMPLATE, getCoreLimitsOnPublishTemplate, undefined);\r\n}\r\nexport function* getCoreLimitsOnCreateLabSuccessSaga() {\r\n    yield takeLatest(CoreLimitActionType.CREATE_LAB_SUCCESS, getCoreLimitsOnCreateLabSuccess);\r\n}\r\nexport function* getCoreLimitsOnUpdateLabSuccessSaga() {\r\n    yield labParentBasedTakeLatest(CoreLimitActionType.UPDATE_LAB_SUCCESS, getCoreLimitsOnUpdateLabSuccess, getVNextCoreUsageOnUpdateLabSuccess);\r\n}\r\nexport function* getCoreUsageOnPublishVNextLabSaga() {\r\n    yield labParentBasedTakeLatest(CoreLimitActionType.PUBLISH_LAB, undefined, getCoreUsageOnPublishVNextLab);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { getCoreLimitsSaga, getCoreLimitsOnSelectLabParentResourceSaga, getCoreLimitsOnSelectLabSaga, getCoreLimitsOnPublishTemplateSaga, getCoreLimitsOnCreateLabSuccessSaga, getCoreLimitsOnUpdateLabSuccessSaga, getCoreUsageOnPublishVNextLabSaga, } from './get-core-limits';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(getCoreLimitsSaga),\r\n        fork(getCoreLimitsOnSelectLabParentResourceSaga),\r\n        fork(getCoreLimitsOnSelectLabSaga),\r\n        fork(getCoreLimitsOnPublishTemplateSaga),\r\n        fork(getCoreLimitsOnCreateLabSuccessSaga),\r\n        fork(getCoreLimitsOnUpdateLabSuccessSaga),\r\n        fork(getCoreUsageOnPublishVNextLabSaga),\r\n    ]);\r\n}\r\n","// move to config?\r\nconst graphGroupsUrlBase = 'https://graph.microsoft.com/v1.0/groups/';\r\nconst graphGroupRequestContentType = 'content/json';\r\nasync function getGroup(accessToken, groupId) {\r\n    const headers = new Headers();\r\n    headers.append('Content-Type', graphGroupRequestContentType);\r\n    headers.append('Authorization', `Bearer ${accessToken}`);\r\n    const result = await fetch(graphGroupsUrlBase + groupId, {\r\n        method: 'GET',\r\n        headers,\r\n        mode: 'cors',\r\n    });\r\n    if (result.status === 404) {\r\n        return undefined;\r\n    }\r\n    else if (result.status === 401) {\r\n        const response = await result.json();\r\n        throw new Error(`An error occurred while acquiring the group ${groupId}. Status: ${result.status}, Response: ${response}`);\r\n    }\r\n    else if (result.status === 200) {\r\n        const response = await result.json();\r\n        const group = response;\r\n        return group;\r\n    }\r\n    const response = await result.json();\r\n    throw new Error(`An error occurred while acquiring the group ${groupId}. Status: ${result.status}, Response: ${response}`);\r\n}\r\nasync function listGroups(accessToken, filterText) {\r\n    const headers = new Headers();\r\n    headers.append('Content-Type', graphGroupRequestContentType);\r\n    headers.append('Authorization', `Bearer ${accessToken}`);\r\n    const groupsFetchUrl = filterText == ''\r\n        ? graphGroupsUrlBase\r\n        : `${graphGroupsUrlBase}?$filter=startsWith(displayName, '${filterText}')`;\r\n    const result = await fetch(groupsFetchUrl, {\r\n        method: 'GET',\r\n        headers,\r\n        mode: 'cors',\r\n    });\r\n    if (result.status === 404) {\r\n        return [];\r\n    }\r\n    else if (result.status === 401) {\r\n        const response = await result.json();\r\n        throw new Error(`An error occurred while attempting to list groups. Status: ${result.status}, Response: ${response}`);\r\n    }\r\n    else if (result.status === 200) {\r\n        const response = await result.json();\r\n        const groups = response.value;\r\n        return groups;\r\n    }\r\n    const response = await result.json();\r\n    throw new Error(`An error occurred while attempting to list groups. Status: ${result.status}, Response: ${response}`);\r\n}\r\nexport async function getGroupNameById(accessToken, groupId) {\r\n    const group = await getGroup(accessToken, groupId);\r\n    return group?.displayName;\r\n}\r\nfunction minimizeGroup(group) {\r\n    return {\r\n        name: group.displayName,\r\n        id: group.id,\r\n        description: group.description,\r\n    };\r\n}\r\nfunction isTeamsGroup(group) {\r\n    if (!!group.creationOptions && group.creationOptions.includes('Team')) {\r\n        return true;\r\n    }\r\n    if (!!group.resourceProvisioningOptions && group.resourceProvisioningOptions.includes('Team')) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\nexport async function getGroups(accessToken, filterText) {\r\n    const groups = await listGroups(accessToken, filterText);\r\n    return groups.filter((group) => !isTeamsGroup(group)).map(minimizeGroup);\r\n}\r\n","import { takeLatest, put, call } from 'redux-saga/effects';\r\nimport { getGroupNameById } from '../../../data/providers/group-provider';\r\nimport { getGroupNameError, getGroupNameFailed, getGroupNameSuccess } from '../../actions/group/group-action-creators';\r\nimport { GroupActionType } from '../../actions/group/group-actions';\r\nimport { getGraphAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nexport function* getGroupName(action) {\r\n    const { groupId } = action;\r\n    try {\r\n        const accessToken = yield call(getGraphAccessTokenSaga);\r\n        const groupName = yield call(getGroupNameById, accessToken, groupId);\r\n        if (!groupName) {\r\n            yield put(getGroupNameFailed());\r\n        }\r\n        else {\r\n            yield put(getGroupNameSuccess(groupName));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, groupId, FailureOperation.GetGroupName, err ? err.code : undefined);\r\n        yield put(getGroupNameError(error));\r\n    }\r\n}\r\nexport function* getGroupNameSaga() {\r\n    yield takeLatest(GroupActionType.GET_GROUP_NAME, getGroupName);\r\n}\r\n","import { takeLatest, put, call } from 'redux-saga/effects';\r\nimport { getGroups as getGroupsFromGraph } from '../../../data/providers/group-provider';\r\nimport { getGroupsFailed, getGroupsSuccess, getGroupsError } from '../../actions/group/group-action-creators';\r\nimport { GroupActionType } from '../../actions/group/group-actions';\r\nimport { getGraphAccessTokenSaga } from '../identity/access-tokens';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nexport function* getGroups(action) {\r\n    const { filterText } = action;\r\n    try {\r\n        const accessToken = yield call(getGraphAccessTokenSaga);\r\n        const groups = yield call(getGroupsFromGraph, accessToken, filterText);\r\n        if (!groups) {\r\n            yield put(getGroupsFailed());\r\n        }\r\n        else {\r\n            yield put(getGroupsSuccess(groups));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, filterText, FailureOperation.GetGroups, err ? err.code : undefined);\r\n        yield put(getGroupsError(error));\r\n    }\r\n}\r\nexport function* getGroupsSaga() {\r\n    yield takeLatest(GroupActionType.GET_GROUPS, getGroups);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { getGroupNameSaga } from './get-group-name';\r\nimport { getGroupsSaga } from './get-groups';\r\nexport function* rootSaga() {\r\n    yield all([fork(getGroupNameSaga), fork(getGroupsSaga)]);\r\n}\r\n","import { configureTab } from '../../../data/providers/teams-provider';\r\nimport { call, takeLatest, put, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { TeamsActionType } from '../../actions/teams/teams-actions';\r\nimport { teamsConfigureTabSuccess, teamsConfigureTabError } from '../../actions/teams/teams-action-creators';\r\nimport { isVNextFeatureEnabled } from '../../selectors/common-selectors';\r\nexport function* teamsConfigureTab(action) {\r\n    const { labAccountId } = action;\r\n    const shouldAddVNextFeatureWQueryParam = yield select(isVNextFeatureEnabled);\r\n    try {\r\n        yield call(configureTab, labAccountId, shouldAddVNextFeatureWQueryParam);\r\n        yield put(teamsConfigureTabSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labAccountId, FailureOperation.TeamsConfigureTab, err ? err.code : undefined);\r\n        yield put(teamsConfigureTabError(error));\r\n    }\r\n}\r\nexport function* configureTabSaga() {\r\n    yield takeLatest(TeamsActionType.TEAMS_CONFIGURE_TAB, teamsConfigureTab);\r\n}\r\n","import { disableSaveButton } from '../../../data/providers/teams-provider';\r\nimport { call, takeLatest, put } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { TeamsActionType } from '../../actions/teams/teams-actions';\r\nimport { teamsDisableSaveButtonError, teamsDisableSaveButtonSuccess } from '../../actions/teams/teams-action-creators';\r\nexport function* teamsDisableSaveButton(action) {\r\n    try {\r\n        yield call(disableSaveButton);\r\n        yield put(teamsDisableSaveButtonSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.TeamsDisableSaveButton, err ? err.code : undefined);\r\n        yield put(teamsDisableSaveButtonError(error));\r\n    }\r\n}\r\nexport function* disableSaveButtonSaga() {\r\n    yield takeLatest(TeamsActionType.TEAMS_DISABLE_SAVE_BUTTON, teamsDisableSaveButton);\r\n}\r\n","import { routerActions } from 'connected-react-router/immutable';\r\nimport { all, call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { convertChannelType, convertTeamsTheme, convertUserTeamRole, UserTeamRole, } from '../../../data/models/teams';\r\nimport { getContext, initialize, notifyAppLoaded, notifySuccess } from '../../../data/providers/teams-provider';\r\nimport { Routes } from '../../../utils/routes';\r\nimport { Theme } from '../../../utils/themes';\r\nimport { setLocale, setTheme } from '../../actions/common/common-action-creators';\r\nimport { enableFilterByGroupId, setGroupId, setGroupName } from '../../actions/group/group-action-creators';\r\nimport { setLoginHint, setTenantId } from '../../actions/identity/identity-action-creators';\r\nimport { setTeamsChannelType, setTeamsTheme, setUserTeamRole, teamsInitializeError, teamsInitializeSuccess, } from '../../actions/teams/teams-action-creators';\r\nimport { TeamsActionType } from '../../actions/teams/teams-actions';\r\nimport { listTenantsSuccess } from '../../actions/tenant/tenant-action-creators';\r\nimport { getSearch, isRouteTeamsConfig, isMfaRouteOrRedirect } from '../../selectors/route-selector';\r\nexport function* teamsInitialize(action) {\r\n    try {\r\n        // initialize the Teams SDK and configure our ARM proxy\r\n        yield call(initialize);\r\n        // set our context\r\n        const context = yield call(getContext);\r\n        const { tid, loginHint, locale, groupId, teamName, userTeamRole: teamsUserTeamRole, channelType: teamsChannelType, theme: teamsTheme, } = context;\r\n        const userTeamRole = yield call(convertUserTeamRole, teamsUserTeamRole);\r\n        const channelType = yield call(convertChannelType, teamsChannelType);\r\n        const theme = yield call(convertTeamsTheme, teamsTheme);\r\n        const tenant = {\r\n            id: tid || '',\r\n            tenantId: tid || '',\r\n            displayName: '',\r\n            defaultDomain: '',\r\n        };\r\n        yield all([\r\n            put(setTenantId(tid || '')),\r\n            put(setLoginHint(loginHint || '')),\r\n            put(setLocale(locale)),\r\n            put(setGroupId(groupId || '')),\r\n            put(setGroupName(teamName || '')),\r\n            put(enableFilterByGroupId()),\r\n            put(setUserTeamRole(userTeamRole)),\r\n            put(setTeamsChannelType(channelType)),\r\n            put(setTeamsTheme(theme)),\r\n            put(setTheme(Theme.Teams)),\r\n            put(listTenantsSuccess([tenant])),\r\n        ]);\r\n        // if this is not a config or MFA page and the user is not an admin, we will redirect them to the student view\r\n        const isTeamsConfigPage = yield select(isRouteTeamsConfig);\r\n        const isMfa = yield select(isMfaRouteOrRedirect);\r\n        if (!isTeamsConfigPage && !isMfa) {\r\n            switch (userTeamRole) {\r\n                case UserTeamRole.Admin:\r\n                    break;\r\n                case UserTeamRole.User:\r\n                case UserTeamRole.Guest:\r\n                default:\r\n                    const search = yield select(getSearch);\r\n                    yield put(routerActions.replace({ pathname: Routes.StudentView, search }));\r\n                    break;\r\n            }\r\n        }\r\n        // tell Teams we have started successfully (no all because order is important)\r\n        yield call(notifyAppLoaded);\r\n        yield call(notifySuccess);\r\n        yield put(teamsInitializeSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.TeamsInitialize, err ? err.code : undefined);\r\n        yield put(teamsInitializeError(error));\r\n    }\r\n}\r\nexport function* teamsInitializeSaga() {\r\n    yield takeLatest(TeamsActionType.TEAMS_INITIALIZE, teamsInitialize);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { armScopes } from '../../../data/models/identity';\r\nimport { getAccessToken, loginRedirect, loginSilent } from '../../../data/providers/msal-provider';\r\nimport { initialize, getContext } from '../../../data/providers/teams-provider';\r\nimport { Routes } from '../../../utils/routes';\r\nimport { teamsCompleteMfa, teamsStartMfaError, teamsStartMfaRedirecting, } from '../../actions/teams/teams-action-creators';\r\nimport { TeamsActionType } from '../../actions/teams/teams-actions';\r\nimport { getSearch } from '../../selectors/route-selector';\r\nexport function* teamsStartMfa(action) {\r\n    try {\r\n        yield call(initialize);\r\n        const search = yield select(getSearch);\r\n        const context = yield call(getContext);\r\n        const { tid, loginHint } = context;\r\n        const result = yield call(loginSilent, tid);\r\n        if (!result.isAuthenticated) {\r\n            yield put(teamsStartMfaRedirecting());\r\n            const signInReturnUrl = `${Routes.TeamsStartMfa}${search}`;\r\n            yield call(loginRedirect, signInReturnUrl, tid, loginHint);\r\n        }\r\n        else {\r\n            const accessTokenReturnUrl = `${Routes.TeamsCompleteMfa}${search}`;\r\n            const result = yield call(getAccessToken, armScopes, tid, accessTokenReturnUrl);\r\n            if (result.isRedirecting) {\r\n                yield put(teamsStartMfaRedirecting());\r\n            }\r\n            else {\r\n                yield put(teamsCompleteMfa());\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.TeamsStartMfa, err ? err.code : undefined);\r\n        yield put(teamsStartMfaError(error));\r\n    }\r\n}\r\nexport function* teamsStartMfaSaga() {\r\n    yield takeLatest(TeamsActionType.TEAMS_START_MFA, teamsStartMfa);\r\n}\r\n","import { call, put, takeLatest } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { armScopes } from '../../../data/models/identity';\r\nimport { getAccessToken } from '../../../data/providers/msal-provider';\r\nimport { initialize, getContext, notifyMfaSuccess, notifyMfaFailure } from '../../../data/providers/teams-provider';\r\nimport { teamsCompleteMfaError, teamsCompleteMfaFailed, teamsCompleteMfaSuccess, } from '../../actions/teams/teams-action-creators';\r\nimport { TeamsActionType } from '../../actions/teams/teams-actions';\r\nexport function* teamsCompleteMfa(action) {\r\n    try {\r\n        yield call(initialize);\r\n        const context = yield call(getContext);\r\n        const { tid } = context;\r\n        const result = yield call(getAccessToken, armScopes, tid);\r\n        if (!!result.accessToken) {\r\n            yield put(teamsCompleteMfaSuccess());\r\n            yield call(notifyMfaSuccess);\r\n        }\r\n        else {\r\n            yield put(teamsCompleteMfaFailed());\r\n            yield call(notifyMfaFailure);\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.TeamsCompleteMfa, err ? err.code : undefined);\r\n        yield put(teamsCompleteMfaError(error));\r\n    }\r\n}\r\nexport function* teamsCompleteMfaSaga() {\r\n    yield takeLatest(TeamsActionType.TEAMS_COMPLETE_MFA, teamsCompleteMfa);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { configureTabSaga } from './teams-configure-tab';\r\nimport { disableSaveButtonSaga } from './teams-disable-save-button';\r\nimport { teamsInitializeSaga } from './teams-initialize';\r\nimport { teamsStartMfaSaga } from './teams-start-mfa';\r\nimport { teamsCompleteMfaSaga } from './teams-complete-mfa';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(teamsInitializeSaga),\r\n        fork(disableSaveButtonSaga),\r\n        fork(configureTabSaga),\r\n        fork(teamsStartMfaSaga),\r\n        fork(teamsCompleteMfaSaga),\r\n    ]);\r\n}\r\n","import ArmProvider from './arm-data-provider';\r\nimport Constants from '../../utils/constants';\r\nexport async function listTenants(accessToken, locale, language) {\r\n    const response = await ArmProvider.get(Constants.Urls.Tenants, accessToken, locale, language);\r\n    const tenantResponse = response && response.json ? (await response.json()) : undefined;\r\n    let tenants = tenantResponse && tenantResponse.value ? tenantResponse.value : [];\r\n    tenants = tenants.filter((o) => !!o.displayName);\r\n    return tenants;\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { TenantActionType } from '../../actions/tenant/tenant-actions';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { listTenantsError, listTenantsSuccess } from '../../actions/tenant/tenant-action-creators';\r\nimport { listTenants } from '../../../data/providers/tenant-provider';\r\nexport function* listUserTenants(action) {\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga, true);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const tenants = yield call(listTenants, accessToken, locale, language);\r\n        yield put(listTenantsSuccess(tenants));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'listTenants', FailureOperation.ListTenants, e ? e.code : undefined);\r\n        yield put(listTenantsError(error));\r\n    }\r\n}\r\nexport function* listTenantsSaga() {\r\n    yield takeLatest(TenantActionType.LIST_TENANTS, listUserTenants);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { TenantActionType } from '../../actions/tenant/tenant-actions';\r\nimport { getSearch } from '../../selectors/route-selector';\r\nimport { loginPopup, loginRedirect } from '../../../data/providers/msal-provider';\r\nimport { getLoginHint } from '../../selectors/identity-selector';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { selectTenantError } from '../../actions/tenant/tenant-action-creators';\r\nimport { fatalError, initialize } from '../../actions/common/common-action-creators';\r\nimport { ErrorCode } from '../../../common/error-codes';\r\nimport Routes from '../../../utils/routes';\r\nimport { isLmsHost } from '../../selectors/common-selectors';\r\nimport { routerActions } from 'connected-react-router';\r\nimport { setTenantId } from '../../actions/identity/identity-action-creators';\r\nexport function* selectTenant(action) {\r\n    const { tenantId } = action;\r\n    try {\r\n        const search = yield select(getSearch);\r\n        const loginHint = yield select(getLoginHint);\r\n        const isLms = yield select(isLmsHost);\r\n        if (!isLms) {\r\n            yield call(loginRedirect, `${Routes.Home}${search}`, tenantId, loginHint, false);\r\n        }\r\n        else {\r\n            yield put(setTenantId(tenantId));\r\n            yield put(routerActions.replace({ pathname: Routes.Home, search }));\r\n            yield call(loginPopup, tenantId, loginHint, false);\r\n            yield put(initialize());\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, tenantId, FailureOperation.SelectTenant, e ? e.code : undefined);\r\n        yield put(selectTenantError(error));\r\n        yield put(fatalError(ErrorCode.AuthenticationFailed, error));\r\n    }\r\n}\r\nexport function* selectTenantSaga() {\r\n    yield takeLatest(TenantActionType.SELECT_TENANT, selectTenant);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listTenantsSaga } from './list-tenant';\r\nimport { selectTenantSaga } from './select-tenant';\r\nexport function* rootSaga() {\r\n    yield all([fork(listTenantsSaga), fork(selectTenantSaga)]);\r\n}\r\n","import { call, put, select } from 'redux-saga/effects';\r\nimport { loadSubscriptionLabPlansError } from '../../actions/lab-plan/lab-plan-action-creators';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { listSubscriptionLabPlans } from '../../../data/providers/vnext/arm-api/lab-plan-provider';\r\nexport function* loadSubscriptionLabPlans(subscription, includeRoles) {\r\n    let labPlans = [];\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        labPlans = yield call(listSubscriptionLabPlans, subscription, accessToken, locale, language, includeRoles);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, subscription.subscriptionId, FailureOperation.ListLabPlansForSubscription, err ? err.code : undefined);\r\n        yield put(loadSubscriptionLabPlansError(subscription, error));\r\n    }\r\n    return labPlans;\r\n}\r\n","import { all, call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { LabParentResourceActionType, } from '../../actions/lab-parent-resource/lab-parent-resource-actions';\r\nimport { listLabAccountsSuccess } from '../../actions/lab-account/lab-account-action-creators';\r\nimport { listLabParentResourcesError, listLabParentResourcesSuccess, selectLabParentResource, } from '../../actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nimport { getSubscriptions } from '../../selectors/subscription-selector';\r\nimport { isLmsHost, isVNextFeatureEnabled } from '../../selectors/common-selectors';\r\nimport { loadSubscriptionLabAccounts } from '../lab-account/list-lab-accounts';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { listVNextLabsSuccess } from '../../actions/lab/lab-action-creators';\r\nimport { loadSubscriptionVNextLabs } from '../lab/list-labs';\r\nimport { loadSubscriptionLabPlans } from '../lab-plan/list-lab-plan';\r\nimport { getCurrentLabParentId } from '../../selectors/lab-parent-resource-selectors';\r\nimport { listLabPlansSuccess } from '../../actions/lab-plan/lab-plan-action-creators';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nimport { getCurrentLmsInstance, getLtiContextId, isLmsAdministrator } from '../../selectors/lti-selectors';\r\nimport { compareByName } from '../../../utils/common';\r\nimport { isHealthyState } from '../../../utils/provisioning-state';\r\nimport { isLinkedLmsInstanceValid, isValidLabPlan } from '../../../redux/selectors/vnext/lab-plan-selectors';\r\nfunction getVNextLabParentItem(id) {\r\n    const resourceId = new ResourceId(id, true);\r\n    return {\r\n        id: resourceId.parent?.id ?? '',\r\n        name: resourceId.parent?.name ?? '',\r\n    };\r\n}\r\nexport function getFirstValidLabParentId(labAccounts, labs, labPlans, lmsInstance, isLms) {\r\n    let labParentId;\r\n    if (labAccounts.length > 0) {\r\n        const validLabAccounts = labAccounts.filter((o) => isHealthyState(o)).sort(compareByName);\r\n        labParentId = validLabAccounts.length > 0 ? validLabAccounts[0].id : undefined;\r\n    }\r\n    if (!labParentId && labs.length > 0) {\r\n        const validLabs = labs.filter((o) => isHealthyState(o));\r\n        const resourceGroups = validLabs.map((o) => getVNextLabParentItem(o.id)).sort(compareByName);\r\n        labParentId = resourceGroups.length > 0 ? resourceGroups[0].id : undefined;\r\n    }\r\n    if (!labParentId && labPlans.length > 0) {\r\n        const validLabPlans = labPlans.filter((o) => isValidLabPlan(o, lmsInstance, isLms));\r\n        const resourceGroups = validLabPlans.map((o) => getVNextLabParentItem(o.id)).sort(compareByName);\r\n        labParentId = resourceGroups.length > 0 ? resourceGroups[0].id : undefined;\r\n    }\r\n    return labParentId;\r\n}\r\nexport function* listLabParentResources(action) {\r\n    const { selectFirst, selectFirstIfSelectedNotFound } = action;\r\n    try {\r\n        const subscriptions = yield select(getSubscriptions);\r\n        const isVNext = yield select(isVNextFeatureEnabled);\r\n        const isLms = yield select(isLmsHost);\r\n        const loadLabAccountsCalls = subscriptions.toArray().map((subscription) => {\r\n            return call(loadSubscriptionLabAccounts, subscription);\r\n        });\r\n        let labAccounts = [];\r\n        let labs = [];\r\n        const labPlans = [];\r\n        if (isVNext || isLms) {\r\n            const loadLabsCalls = subscriptions.toArray().map((subscription) => {\r\n                return call(loadSubscriptionVNextLabs, subscription);\r\n            });\r\n            const isLmsAdmin = yield select(isLmsAdministrator);\r\n            const loadLabPlansCalls = subscriptions.toArray().map((subscription) => {\r\n                return call(loadSubscriptionLabPlans, subscription, isLmsAdmin);\r\n            });\r\n            if (!isLms) {\r\n                const results = yield all([\r\n                    all(loadLabAccountsCalls),\r\n                    all(loadLabsCalls),\r\n                    all(loadLabPlansCalls),\r\n                ]);\r\n                results[0]?.forEach((value) => {\r\n                    labAccounts.push(...value);\r\n                });\r\n                results[1]?.forEach((value) => {\r\n                    labs.push(...value);\r\n                });\r\n                results[2]?.forEach((value) => {\r\n                    labPlans.push(...value);\r\n                });\r\n            }\r\n            else {\r\n                const results = yield all([\r\n                    all(loadLabsCalls),\r\n                    all(loadLabPlansCalls),\r\n                ]);\r\n                results[0]?.forEach((value) => {\r\n                    labs.push(...value);\r\n                });\r\n                if (isLms) {\r\n                    const ltiContextId = yield select(getLtiContextId);\r\n                    labs = labs.filter((o) => !!o.rosterProfile?.ltiContextId &&\r\n                        caseInsensitiveCultureInvariantCompare(o.rosterProfile?.ltiContextId, ltiContextId) === 0);\r\n                }\r\n                results[1]?.forEach((value) => {\r\n                    labPlans.push(...value);\r\n                });\r\n            }\r\n        }\r\n        else {\r\n            const labAccountsResults = yield all(loadLabAccountsCalls);\r\n            labAccountsResults?.forEach((value) => {\r\n                labAccounts = [...labAccounts, ...value];\r\n            });\r\n        }\r\n        let lmsInstance = '';\r\n        if (isLms) {\r\n            lmsInstance = yield select(getCurrentLmsInstance);\r\n        }\r\n        // select a lab account if required (must happen before success otherwise there is a race condition)\r\n        if (selectFirst) {\r\n            const firstLabParentId = yield call(getFirstValidLabParentId, labAccounts, labs, labPlans, lmsInstance, isLms);\r\n            if (firstLabParentId) {\r\n                yield put(selectLabParentResource(firstLabParentId));\r\n            }\r\n        }\r\n        else if (selectFirstIfSelectedNotFound) {\r\n            // This is used to fallback to the first lab account if the one restored from\r\n            // user settings is no longer being returned. Otherwise, the user would see a resource\r\n            // not found page.\r\n            const selectedLabParentId = yield select(getCurrentLabParentId);\r\n            const foundInLabAccounts = labAccounts.findIndex((la) => caseInsensitiveCultureInvariantCompare(la.id, selectedLabParentId) === 0) > -1;\r\n            const foundInLabPlans = labPlans.findIndex((lp) => {\r\n                const id = new ResourceId(lp.id, true);\r\n                return (caseInsensitiveCultureInvariantCompare(id.parent.id, selectedLabParentId) === 0 &&\r\n                    isLinkedLmsInstanceValid(lp, lmsInstance, isLms));\r\n            }) > -1;\r\n            const foundInLabs = labs.findIndex((lab) => {\r\n                const id = new ResourceId(lab.id, true);\r\n                return caseInsensitiveCultureInvariantCompare(id.parent.id, selectedLabParentId) === 0;\r\n            }) > -1;\r\n            if (!foundInLabAccounts && !foundInLabPlans && !foundInLabs) {\r\n                const firstLabParentId = yield call(getFirstValidLabParentId, labAccounts, labs, labPlans, lmsInstance, isLms);\r\n                if (firstLabParentId) {\r\n                    yield put(selectLabParentResource(firstLabParentId));\r\n                }\r\n            }\r\n        }\r\n        yield put(listLabAccountsSuccess(labAccounts));\r\n        if (isVNext || isLms) {\r\n            yield put(listVNextLabsSuccess(labs));\r\n            yield put(listLabPlansSuccess(labPlans));\r\n        }\r\n        yield put(listLabParentResourcesSuccess());\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'all-subscriptions', FailureOperation.ListLabParentResources, e ? e.code : undefined);\r\n        yield put(listLabParentResourcesError(error));\r\n    }\r\n}\r\nexport function* listLabParentResourcesSaga() {\r\n    yield takeLatest(LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES, listLabParentResources);\r\n}\r\n","import { race, put, take, takeLatest } from 'redux-saga/effects';\r\nimport { loadSubscriptions } from '../../actions/subscription/subscription-action-creators';\r\nimport { SubscriptionActionType } from '../../actions/subscription/subscription-actions';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { LabParentResourceActionType, } from '../../actions/lab-parent-resource/lab-parent-resource-actions';\r\nimport { listLabParentResources, refreshSubscriptionsAndLabParentResourcesError, refreshSubscriptionsAndLabParentResourcesSuccess, } from '../../actions/lab-parent-resource/lab-parent-resource-action-creators';\r\nexport function* refreshSubscriptionsAndLabParentResources(action) {\r\n    try {\r\n        yield put(loadSubscriptions());\r\n        const { error: loadSubscriptionErrorAction } = yield race({\r\n            success: take(SubscriptionActionType.LOAD_SUBSCRIPTIONS_SUCCESS),\r\n            error: take(SubscriptionActionType.LOAD_SUBSCRIPTIONS_ERROR),\r\n        });\r\n        if (loadSubscriptionErrorAction) {\r\n            const { error } = loadSubscriptionErrorAction;\r\n            yield put(refreshSubscriptionsAndLabParentResourcesError(error));\r\n        }\r\n        else {\r\n            yield put(listLabParentResources(false, false));\r\n            const { error: listLabParentResourcesErrorAction } = yield race({\r\n                success: take(LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES_SUCCESS),\r\n                error: take(LabParentResourceActionType.LIST_LAB_PARENT_RESOURCES_ERROR),\r\n            });\r\n            if (listLabParentResourcesErrorAction) {\r\n                const { error } = listLabParentResourcesErrorAction;\r\n                yield put(refreshSubscriptionsAndLabParentResourcesError(error));\r\n            }\r\n            else {\r\n                yield put(refreshSubscriptionsAndLabParentResourcesSuccess());\r\n            }\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.RefreshSubscriptionsAndLabParentResources, err ? err.code : undefined);\r\n        yield put(refreshSubscriptionsAndLabParentResourcesError(error));\r\n    }\r\n}\r\nexport function* refreshSubscriptionsAndLabParentResourcesSaga() {\r\n    yield takeLatest(LabParentResourceActionType.REFRESH_SUBSCRIPTIONS_AND_LAB_PARENT_RESOURCES, refreshSubscriptionsAndLabParentResources);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listLabParentResourcesSaga } from './list-lab-parent-resources';\r\nimport { refreshSubscriptionsAndLabParentResourcesSaga } from './refresh-subscriptions-and-lab-parent-resources';\r\nexport function* rootSaga() {\r\n    yield all([fork(listLabParentResourcesSaga), fork(refreshSubscriptionsAndLabParentResourcesSaga)]);\r\n}\r\n","import { createVNextArmApiClient } from '../../arm-data-provider';\r\nexport async function listImages(labPlanId, accessToken, locale, language, listEnabledOnly) {\r\n    const armApiClient = createVNextArmApiClient(labPlanId.subscriptionId, accessToken, locale, language);\r\n    const options = listEnabledOnly\r\n        ? {\r\n            filter: \"properties/enabledState eq 'Enabled'\",\r\n        }\r\n        : undefined;\r\n    let currentPage = await armApiClient.images.listByLabPlan(labPlanId.resourceGroupName, labPlanId.name, options);\r\n    let images = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await armApiClient.images.listByLabPlanNext(currentPage.nextLink, options);\r\n        currentPage = nextPage;\r\n        images = images.concat(nextPage);\r\n    }\r\n    return images;\r\n}\r\nexport async function updateImage(imageId, accessToken, locale, language) {\r\n    const client = createVNextArmApiClient(imageId.subscriptionId, accessToken, locale, language);\r\n    await client.images.update(imageId.resourceGroupName, imageId.parent.name, imageId.name);\r\n}\r\nconst ImageProvider = {\r\n    listImages,\r\n    updateImage,\r\n};\r\nexport default ImageProvider;\r\n","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../../data/ml-client-error';\r\nimport { getArmAccessTokenSaga } from '../../identity/access-tokens';\r\nimport { ResourceId } from '../../../../utils/resource-id';\r\nimport { getLocale, getLanguage } from '../../../selectors/common-selectors';\r\nimport { ImageActionType } from '../../../actions/vnext/images/image-actions';\r\nimport ImageProvider from '../../../../data/providers/vnext/arm-api/image-provider';\r\nimport { listImagesError, listImagesSuccess } from '../../../actions/vnext/images/image-action-creators';\r\nexport function* listImages(action) {\r\n    const { labPlanId, listEnabledOnly } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labPlanId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const images = yield call(ImageProvider.listImages, resourceId, accessToken, locale, language, listEnabledOnly);\r\n        yield put(listImagesSuccess(images));\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labPlanId, FailureOperation.ListLabPlanImages, e ? e.code : undefined);\r\n        yield put(listImagesError(error));\r\n    }\r\n}\r\nexport function* listImagesSaga() {\r\n    yield takeLatest(ImageActionType.LIST_IMAGES, listImages);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listImagesSaga } from './list-images';\r\nexport function* rootSaga() {\r\n    yield all([fork(listImagesSaga)]);\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { fatalError, setTheme } from '../../actions/common/common-action-creators';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { initialize, oidcAuth } from '../../../data/providers/lti-provider';\r\nimport { getQueryParams } from '../../../utils/query-params';\r\nimport { ltiStartOidcError, ltiStartOidcRedirecting } from '../../actions/lti/lti-action-creators';\r\nimport { LtiActionType } from '../../actions/lti/lti-actions';\r\nimport { getSearch } from '../../selectors/route-selector';\r\nimport Theme from '../../../utils/themes';\r\nexport function* ltiStartOidc(action) {\r\n    try {\r\n        yield put(setTheme(Theme.LmsBasics));\r\n        // Commenting out this step as it's causing bug in Safari in Firefox, leaving in for context/potential refactoring\r\n        /*\r\n        try {\r\n            \r\n            const hasAccess = yield call(hasStorageAccess);\r\n            const isEdge = yield call(isEdgeBrowser);\r\n            if (!hasAccess && !isEdge) {\r\n                const error = new MlClientError(\r\n                    'Lti: Users need to request web storage access manually',\r\n                    '',\r\n                    FailureOperation.LtiStartOidc,\r\n                    ErrorCode.LtiRequestStorageAccessNeeded\r\n                );\r\n                yield put(ltiStartOidcError(error));\r\n                yield put(fatalError(ErrorCode.LtiRequestStorageAccessNeeded, error));\r\n                return;\r\n            }\r\n        } catch (e) {\r\n            // do nothing if storage access api is not supported in the browser and we will catch storage access error when call initialize below\r\n        }\r\n        */\r\n        yield call(initialize);\r\n        const search = yield select(getSearch);\r\n        const queryParams = yield call(getQueryParams, search);\r\n        if (!!queryParams.ltiAuthUrl) {\r\n            yield call(oidcAuth, queryParams.ltiAuthUrl);\r\n            yield put(ltiStartOidcRedirecting());\r\n        }\r\n        else {\r\n            const error = new MlClientError('LtiOidc: The required LTI auth URL query parameter is missing.', '', FailureOperation.LtiStartOidc);\r\n            yield put(ltiStartOidcError(error));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.LtiStartOidc, err ? err.code : undefined);\r\n        yield put(ltiStartOidcError(error));\r\n        yield put(fatalError(err.code, error));\r\n    }\r\n}\r\nexport function* ltiStartOidcSaga() {\r\n    yield takeLatest(LtiActionType.LTI_START_OIDC, ltiStartOidc);\r\n}\r\n","import { all, call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport { ltiSignInError, ltiSignInSuccess, setLmsInstance, setLtiContext, setLtiRoles, setMembershipUrl, } from '../../actions/lti/lti-action-creators';\r\nimport { LtiActionType } from '../../actions/lti/lti-actions';\r\nimport { getHash } from '../../selectors/route-selector';\r\nimport { LtiClaims } from '../../../utils/constants';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { getNonce, getState, setLtiToken } from '../../../data/providers/lti-provider';\r\nimport { decodeLtiTokenPayload, getValidatedLtiToken, isLmsProfessor } from '../../selectors/lti-selectors';\r\nimport Routes from '../../../utils/routes';\r\nimport { routerActions } from 'connected-react-router/immutable';\r\nimport { setHost, setTheme } from '../../actions/common/common-action-creators';\r\nimport Host from '../../../utils/hosts';\r\nimport Theme from '../../../utils/themes';\r\nimport { URLBuilder } from '@azure/ms-rest-js';\r\nconst LtilmsInstance = 'lmsinstance';\r\nexport function* ltiSignIn(action) {\r\n    try {\r\n        const hash = yield select(getHash);\r\n        const state = yield call(getState);\r\n        const nonce = yield call(getNonce);\r\n        const ltiToken = yield call(getValidatedLtiToken, hash, state, nonce);\r\n        if (!ltiToken) {\r\n            const error = new MlClientError('LtiSignIn: invalid state or nonce', '', FailureOperation.LtiSignIn);\r\n            yield put(ltiSignInError(error));\r\n            return;\r\n        }\r\n        yield call(setLtiToken, ltiToken);\r\n        const decodedPayload = yield call(decodeLtiTokenPayload, ltiToken);\r\n        const roles = decodedPayload[LtiClaims.roles];\r\n        const context = decodedPayload[LtiClaims.context];\r\n        const toolPlatform = decodedPayload[LtiClaims.toolPlatform];\r\n        let lms = Host.Unknown;\r\n        let theme = Theme.Default;\r\n        let lmsInstance = '';\r\n        if (!!toolPlatform) {\r\n            const id = toolPlatform['guid'];\r\n            const pfc = toolPlatform['product_family_code'];\r\n            if ((!!id && id.includes('canvas')) || (!!pfc && pfc.includes('canvas'))) {\r\n                lms = Host.Canvas;\r\n                theme = Theme.Canvas;\r\n            }\r\n        }\r\n        const namesRoleServices = decodedPayload[LtiClaims.namesroleservice];\r\n        const membershipUrl = namesRoleServices[LtiClaims.contextMembershipUrl];\r\n        const customClaims = decodedPayload[LtiClaims.custom];\r\n        if (!!customClaims) {\r\n            const url = new URLBuilder();\r\n            url.setHost(customClaims[LtilmsInstance] + '/');\r\n            url.setScheme('https');\r\n            lmsInstance = url.toString();\r\n        }\r\n        yield all([\r\n            put(setHost(lms)),\r\n            put(setLtiRoles(roles || [])),\r\n            put(setMembershipUrl(membershipUrl || '')),\r\n            put(setLtiContext(context)),\r\n            put(setTheme(theme)),\r\n            put(setLmsInstance(lmsInstance)),\r\n        ]);\r\n        const isProfessor = yield select(isLmsProfessor);\r\n        if (!isProfessor) {\r\n            yield put(routerActions.replace({ pathname: Routes.StudentView }));\r\n        }\r\n        else {\r\n            yield put(routerActions.replace({ pathname: Routes.Home }));\r\n        }\r\n        yield put(ltiSignInSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.LtiSignIn, err ? err.code : undefined);\r\n        yield put(ltiSignInError(error));\r\n    }\r\n}\r\nexport function* ltiSignInSaga() {\r\n    yield takeLatest(LtiActionType.LTI_SIGN_IN, ltiSignIn);\r\n}\r\n","import { call, put, takeLatest } from 'redux-saga/effects';\r\nimport { clearFatalError, fatalError } from '../../actions/common/common-action-creators';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport { requestStorageAccess } from '../../../data/providers/lti-provider';\r\nimport { LtiActionType } from '../../actions/lti/lti-actions';\r\nimport { ltiRequestWebStorageAccessError, ltiRequestWebStorageAccessSuccess, } from '../../actions/lti/lti-action-creators';\r\nimport ErrorCode from '../../../common/error-codes';\r\nexport function* ltiRequestStorageAccess(action) {\r\n    try {\r\n        yield call(requestStorageAccess);\r\n        yield put(ltiRequestWebStorageAccessSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, '', FailureOperation.LtiRequestBrowserStorageAccess, ErrorCode.CookiesAndDataBlocked);\r\n        yield put(ltiRequestWebStorageAccessError(error));\r\n        yield put(clearFatalError());\r\n        yield put(fatalError(ErrorCode.CookiesAndDataBlocked, error));\r\n    }\r\n}\r\nexport function* ltiRequestStorageAccessSaga() {\r\n    yield takeLatest(LtiActionType.LTI_REQUEST_WEB_STORAGE_ACCESS, ltiRequestStorageAccess);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { ltiStartOidcSaga } from './lti-start-oidc';\r\nimport { ltiSignInSaga } from './lti-sign-in';\r\nimport { getLtiTokenRequestSaga } from './lti-token';\r\nimport { ltiRequestStorageAccessSaga } from './lti-request-storage-access';\r\nexport function* rootSaga() {\r\n    yield all([\r\n        fork(ltiStartOidcSaga),\r\n        fork(ltiSignInSaga),\r\n        fork(getLtiTokenRequestSaga),\r\n        fork(ltiRequestStorageAccessSaga),\r\n    ]);\r\n}\r\n","import { createVNextArmApiClient } from '../../arm-data-provider';\r\nexport async function listSkus(id, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(id.subscriptionId, accessToken, locale, language);\r\n    let currentPage = await armApiClient.skus.list();\r\n    let skus = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await armApiClient.skus.listNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        skus = skus.concat(nextPage);\r\n    }\r\n    return skus;\r\n}\r\nconst SkuProvider = {\r\n    listSkus,\r\n};\r\nexport default SkuProvider;\r\n","import { SkuActionType } from './sku-actions';\r\nexport const listSkuData = (labParentId) => ({\r\n    type: SkuActionType.LIST_SKU_DATA,\r\n    labParentId,\r\n});\r\nexport const listSkuDataSuccess = (data) => ({\r\n    type: SkuActionType.LIST_SKU_DATA_SUCCESS,\r\n    data,\r\n});\r\nexport const listSkuDataError = (error) => ({\r\n    type: SkuActionType.LIST_SKU_DATA_ERROR,\r\n    error,\r\n});\r\nconst actions = {\r\n    listSkuData,\r\n    listSkuDataSuccess,\r\n    listSkuDataError,\r\n};\r\nexport default actions;\r\n","import { takeLatest, call, select, put } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../../data/ml-client-error';\r\nimport SkuProvider from '../../../../data/providers/vnext/arm-api/sku-provider';\r\nimport { ResourceId } from '../../../../utils/resource-id';\r\nimport { SkuActionType } from '../../../actions/vnext/sku/sku-actions';\r\nimport { listSkuData, listSkuDataError, listSkuDataSuccess } from '../../../actions/vnext/sku/sku-action-creators';\r\nimport { getLanguage, getLocale } from '../../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../../identity/access-tokens';\r\nimport { isRouteTeamsConfig } from '../../../selectors/route-selector';\r\nimport { labParentBasedTakeLatest } from '../../../effects/lab-parent-based';\r\nexport function* listSkus(action) {\r\n    const { labParentId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labParentId);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const data = yield call(SkuProvider.listSkus, resourceId, accessToken, locale, language);\r\n        yield put(listSkuDataSuccess(data));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labParentId, FailureOperation.ListSkuData, err ? err.code : undefined);\r\n        yield put(listSkuDataError(error));\r\n    }\r\n}\r\nexport function* listSkusOnLabParentSelect(action) {\r\n    const { resourceId } = action;\r\n    const isTeamsConfigPage = yield select(isRouteTeamsConfig);\r\n    if (!isTeamsConfigPage) {\r\n        yield put(listSkuData(resourceId));\r\n    }\r\n}\r\nexport function* listSkusSaga() {\r\n    yield takeLatest(SkuActionType.LIST_SKU_DATA, listSkus);\r\n}\r\nexport function* listSkusOnLabParentSelectSaga() {\r\n    yield labParentBasedTakeLatest(SkuActionType.SELECT_LAB_PARENT_RESOURCE, undefined, listSkusOnLabParentSelect);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listSkusSaga, listSkusOnLabParentSelectSaga } from './list-skus';\r\nexport function* rootSaga() {\r\n    yield all([fork(listSkusSaga), fork(listSkusOnLabParentSelectSaga)]);\r\n}\r\n","import { createVNextArmApiClient } from '../../arm-data-provider';\r\nexport async function listUsage(subscriptionId, location, accessToken, locale, language) {\r\n    const armApiClient = createVNextArmApiClient(subscriptionId, accessToken, locale, language);\r\n    let currentPage = await armApiClient.usages.listByLocation(location);\r\n    let usage = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await armApiClient.usages.listByLocationNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        usage = usage.concat(nextPage);\r\n    }\r\n    return { region: location, usage };\r\n}\r\nconst UsageProvider = {\r\n    listUsage,\r\n};\r\nexport default UsageProvider;\r\n","import { all, call, put, race, select, take, takeLatest } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../../data/ml-client-error';\r\nimport UsageProvider from '../../../../data/providers/vnext/arm-api/usage-provider';\r\nimport { UsageActionType } from '../../../actions/vnext/usage/usage-actions';\r\nimport { listRegionUsageDataSuccess, listUsageDataCancelled, listUsageDataError, listUsageDataSuccess, } from '../../../actions/vnext/usage/usage-action-creators';\r\nimport { getLanguage, getLocale } from '../../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../../identity/access-tokens';\r\nexport function* listUsage(action) {\r\n    const { subscriptionId, regions } = action;\r\n    try {\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const usageCalls = regions.map((region) => {\r\n            return call(UsageProvider.listUsage, subscriptionId, region, accessToken, locale, language);\r\n        });\r\n        if (usageCalls) {\r\n            // TODO: this will fail if any of the calls fail.\r\n            // If we want to protect against a single failure, try to follow pattern in:\r\n            // https://devdiv.visualstudio.com/OnlineServices/_git/azure-lab-services/pullrequest/358391\r\n            const { results, changed } = yield race({\r\n                results: all(usageCalls),\r\n                changed: race([\r\n                    take(UsageActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                    take(UsageActionType.SELECT_LAB),\r\n                    take(UsageActionType.SELECT_LAB_PLAN),\r\n                ]),\r\n            });\r\n            if (changed) {\r\n                yield put(listUsageDataCancelled());\r\n            }\r\n            else {\r\n                for (const result of results) {\r\n                    yield put(listRegionUsageDataSuccess(result.region, result.usage));\r\n                }\r\n            }\r\n        }\r\n        yield put(listUsageDataSuccess());\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, subscriptionId, FailureOperation.ListUsageData, err ? err.code : undefined);\r\n        yield put(listUsageDataError(regions, error));\r\n    }\r\n}\r\nexport function* listUsageSaga() {\r\n    yield takeLatest(UsageActionType.LIST_USAGE_DATA, listUsage);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listUsageSaga } from './list-usage';\r\nexport function* rootSaga() {\r\n    yield all([fork(listUsageSaga)]);\r\n}\r\n","import { createLabsApiClient } from './labs-api-client-factory';\r\nexport async function listPrice(subscriptionId, region, accessToken, locale, language) {\r\n    const labsApiClient = createLabsApiClient(subscriptionId, accessToken, locale, language);\r\n    let currentPage = await labsApiClient.subscriptionPrices.list(region);\r\n    let usage = currentPage;\r\n    while (!!currentPage.nextLink) {\r\n        const nextPage = await labsApiClient.subscriptionPrices.listNext(currentPage.nextLink);\r\n        currentPage = nextPage;\r\n        usage = usage.concat(nextPage);\r\n    }\r\n    return usage;\r\n}\r\nconst PriceProvider = {\r\n    listPrice,\r\n};\r\nexport default PriceProvider;\r\n","import { all, call, put, race, select, take, takeLatest } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../../data/ml-client-error';\r\nimport PriceProvider from '../../../../data/providers/vnext/labs-api/price-provider';\r\nimport { PriceActionType } from '../../../actions/vnext/price/price-actions';\r\nimport { listPriceDataCancelled, listPriceDataError, listPriceDataSuccess, } from '../../../actions/vnext/price/price-action-creators';\r\nimport { getLanguage, getLocale } from '../../../selectors/common-selectors';\r\nimport { Map } from 'immutable';\r\nimport { getLabsApiAccessTokenSaga } from '../../identity/access-tokens';\r\nexport function* listPrice(action) {\r\n    const { subscriptionId, regions } = action;\r\n    try {\r\n        const accessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const priceCalls = regions.map((region) => {\r\n            return call(PriceProvider.listPrice, subscriptionId, region, accessToken, locale, language);\r\n        });\r\n        const { results, changed } = yield race({\r\n            results: all(priceCalls),\r\n            changed: race([\r\n                take(PriceActionType.SELECT_LAB_PARENT_RESOURCE),\r\n                take(PriceActionType.SELECT_LAB),\r\n                take(PriceActionType.SELECT_LAB_PLAN),\r\n            ]),\r\n        });\r\n        if (changed) {\r\n            yield put(listPriceDataCancelled());\r\n        }\r\n        else {\r\n            let map = Map();\r\n            for (let index = 0; index < regions.length; index++) {\r\n                map = map.set(regions[index], results[index]);\r\n            }\r\n            yield put(listPriceDataSuccess(map));\r\n        }\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, subscriptionId, FailureOperation.ListPriceData, err ? err.code : undefined);\r\n        yield put(listPriceDataError(error));\r\n    }\r\n}\r\nexport function* listPriceSaga() {\r\n    yield takeLatest(PriceActionType.LIST_PRICE_DATA, listPrice);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { listPriceSaga } from './list-price';\r\nexport function* rootSaga() {\r\n    yield all([fork(listPriceSaga)]);\r\n}\r\n","import { call, put, select, takeLatest, race, take } from 'redux-saga/effects';\r\nimport MlClientError, { FailureOperation } from '../../../data/ml-client-error';\r\nimport LabPlanProvider from '../../../data/providers/vnext/arm-api/lab-plan-provider';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getLabPlan as getLabPlanAction, getLabPlanError, getLabPlanSuccess, } from '../../actions/lab-plan/lab-plan-action-creators';\r\nimport { LabPlanActionType } from '../../actions/lab-plan/lab-plan-actions';\r\nimport { getLanguage, getLocale } from '../../selectors/common-selectors';\r\nimport { getArmAccessTokenSaga } from '../identity/access-tokens';\r\nimport { listImages } from '../../actions/vnext/images/image-action-creators';\r\nimport { getLabPlans } from '../../selectors/vnext/lab-plan-selectors';\r\nimport { listUsageData } from '../../actions/vnext/usage/usage-action-creators';\r\nimport { listPriceData } from '../../actions/vnext/price/price-action-creators';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nexport function* getLabPlan(action) {\r\n    const { labPlanId } = action;\r\n    try {\r\n        const resourceId = new ResourceId(labPlanId, true);\r\n        const accessToken = yield call(getArmAccessTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const labPlan = yield call(LabPlanProvider.getLabPlan, resourceId, accessToken, locale, language);\r\n        yield put(getLabPlanSuccess(labPlan));\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : undefined, labPlanId, FailureOperation.GetLabPlan, err ? err.code : undefined);\r\n        yield put(getLabPlanError(error));\r\n    }\r\n}\r\nexport function* selectLabPlan(action) {\r\n    const { labPlanId } = action;\r\n    yield put(getLabPlanAction(labPlanId));\r\n    const { error: getlabPlanError } = yield race({\r\n        success: take(LabPlanActionType.GET_LAB_PLAN_SUCCESS),\r\n        error: take(LabPlanActionType.GET_LAB_PLAN_ERROR),\r\n    });\r\n    if (!getlabPlanError) {\r\n        const labPlans = yield select(getLabPlans);\r\n        const labPlan = labPlans.find((o) => caseInsensitiveCultureInvariantCompare(o.id, labPlanId) === 0);\r\n        const resourceId = new ResourceId(labPlanId, true);\r\n        yield put(listImages(labPlanId));\r\n        if (!!labPlan?.allowedRegions) {\r\n            yield put(listUsageData(resourceId.subscriptionId, labPlan?.allowedRegions));\r\n            yield put(listPriceData(resourceId.subscriptionId, labPlan?.allowedRegions));\r\n        }\r\n    }\r\n}\r\nexport function* getLabPlanSaga() {\r\n    yield takeLatest(LabPlanActionType.GET_LAB_PLAN, getLabPlan);\r\n}\r\nexport function* selectLabPlanSaga() {\r\n    yield takeLatest(LabPlanActionType.SELECT_LAB_PLAN, selectLabPlan);\r\n}\r\n","import { call, put, select, all, takeLatest } from 'redux-saga/effects';\r\nimport { FailureOperation, MlClientError } from '../../../data/ml-client-error';\r\nimport { ResourceId } from '../../../utils/resource-id';\r\nimport { getArmAccessTokenSaga, getLabsApiAccessTokenSaga } from '../identity/access-tokens';\r\nimport { getLocale, getLanguage } from '../../selectors/common-selectors';\r\nimport { LabPlanActionType } from '../../actions/lab-plan/lab-plan-actions';\r\nimport { updateLabPlansLmsSettingsError, updateLabPlansLmsSettingsSuccess, } from '../../actions/lab-plan/lab-plan-action-creators';\r\nimport LtiProvider from '../../../data/providers/lti-provider';\r\nimport { getLtiTokenSaga } from '../lti/lti-token';\r\nimport LabPlanProvider from '../../../data/providers/vnext/arm-api/lab-plan-provider';\r\nimport { getLabPlans } from '../../selectors/vnext/lab-plan-selectors';\r\nimport { caseInsensitiveCultureInvariantCompare } from '../../../utils/string-comparison';\r\nexport async function callLinkLms(labPlan, lmsInstance, accessToken, ltiToken, locale, language, errors, successfulLabPlans) {\r\n    try {\r\n        await LtiProvider.linkLms(labPlan.id, accessToken, locale, language, ltiToken, labPlan.location);\r\n        successfulLabPlans.push({ ...labPlan, linkedLmsInstance: lmsInstance });\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, labPlan.id, FailureOperation.LinkLabPlan, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n    }\r\n}\r\nexport async function callUnLinkLms(labPlan, accessToken, locale, language, errors, successfulLabPlans) {\r\n    const resourceId = new ResourceId(labPlan.id, true);\r\n    try {\r\n        const newLabPlan = await LabPlanProvider.updateLabPlan(resourceId, { linkedLmsInstance: null, allowedRegions: labPlan.allowedRegions }, accessToken, locale, language);\r\n        successfulLabPlans.push(newLabPlan);\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, resourceId.id, FailureOperation.UnlinkLabPlan, e ? e.code : undefined);\r\n        errors[error.id] = error;\r\n    }\r\n}\r\nexport function* updateLabPlansLmsSettings(action) {\r\n    const { linkIds, unlinkIds, lmsInstance } = action;\r\n    try {\r\n        const successfulLabPlans = [];\r\n        const errors = {};\r\n        const armAccessToken = yield call(getArmAccessTokenSaga);\r\n        const labsAccessToken = yield call(getLabsApiAccessTokenSaga);\r\n        const ltiToken = yield call(getLtiTokenSaga);\r\n        const locale = yield select(getLocale);\r\n        const language = yield select(getLanguage);\r\n        const labPlans = yield select(getLabPlans);\r\n        const linkLabPlanCalls = linkIds.map((id) => {\r\n            const labPlan = labPlans.find((o) => caseInsensitiveCultureInvariantCompare(o.id, id) === 0);\r\n            return call(callLinkLms, labPlan, lmsInstance, labsAccessToken, ltiToken, locale, language, errors, successfulLabPlans);\r\n        });\r\n        const unlinkLabPlanCalls = unlinkIds.map((id) => {\r\n            const labPlan = labPlans.find((o) => caseInsensitiveCultureInvariantCompare(o.id, id) === 0);\r\n            return call(callUnLinkLms, labPlan, armAccessToken, locale, language, errors, successfulLabPlans);\r\n        });\r\n        yield all([...linkLabPlanCalls, ...unlinkLabPlanCalls]);\r\n        if (successfulLabPlans.length > 0) {\r\n            yield put(updateLabPlansLmsSettingsSuccess(successfulLabPlans));\r\n        }\r\n        const failedIds = Object.keys(errors);\r\n        if (failedIds.length > 0) {\r\n            yield put(updateLabPlansLmsSettingsError(errors));\r\n        }\r\n    }\r\n    catch (e) {\r\n        const error = new MlClientError(e ? e.message : undefined, 'all', FailureOperation.UpdateLmsSettings, e ? e.code : undefined);\r\n        const errors = {};\r\n        errors[error.id] = error;\r\n        yield put(updateLabPlansLmsSettingsError(errors));\r\n    }\r\n}\r\nexport function* updateLabPlansLmsSettingsSaga() {\r\n    yield takeLatest(LabPlanActionType.UPDATE_LAB_PLANS_LMS_SETTINGS, updateLabPlansLmsSettings);\r\n}\r\n","import { all, fork } from 'redux-saga/effects';\r\nimport { getLabPlanSaga, selectLabPlanSaga } from './get-lab-plan';\r\nimport { updateLabPlansLmsSettingsSaga } from './update-lab-plans-lms-settings';\r\nexport function* rootSaga() {\r\n    yield all([fork(getLabPlanSaga), fork(selectLabPlanSaga), fork(updateLabPlansLmsSettingsSaga)]);\r\n}\r\n","import { fork, all, put } from 'redux-saga/effects';\r\nimport { rootSaga as userEnvironmentRootSaga } from './user-environment/root-saga';\r\nimport { rootSaga as registerRootSaga } from './register/root-saga';\r\nimport { rootSaga as labRootSaga } from './lab/root-saga';\r\nimport { rootSaga as labAccountRootSaga } from './lab-account/root-saga';\r\nimport { rootSaga as identityRootSaga } from './identity/root-saga';\r\nimport { rootSaga as scheduleRootSaga } from './schedule/root-saga';\r\nimport { rootSaga as templateRootSaga } from './template/root-saga';\r\nimport { rootSaga as commonRootSaga } from './common/root-saga';\r\nimport { rootSaga as subscriptionRootSaga } from './subscription/root-saga';\r\nimport { rootSaga as galleryImageRootSaga } from './gallery-image/root-saga';\r\nimport { rootSaga as sharedImageRootSaga } from './shared-image/root-saga';\r\nimport { rootSaga as userRootSaga } from './user/root-saga';\r\nimport { rootSaga as environmentRootSaga } from './environment/root-saga';\r\nimport { rootSaga as pricingAndAvailabilityRootSaga } from './pricing-and-availability/root-saga';\r\nimport { rootSaga as getCoreLimitsRootSaga } from './core-limit/root-saga';\r\nimport { rootSaga as groupRootSaga } from './group/root-saga';\r\nimport { rootSaga as teamsConfigRootSaga } from './teams/root-saga';\r\nimport { rootSaga as tenantRootSaga } from './tenant/root-saga';\r\nimport { rootSaga as vNextLabParentResourceRootSaga } from './lab-parent-resource/root-saga';\r\nimport { rootSaga as vNextImageRootSaga } from './vnext/image/root-saga';\r\nimport { rootSaga as ltiRootSaga } from './lti/root-saga';\r\nimport { rootSaga as skuRootSaga } from './vnext/sku/root-saga';\r\nimport { rootSaga as usageRootSaga } from './vnext/usage/root-saga';\r\nimport { rootSaga as priceRootSaga } from './vnext/price/root-sage';\r\nimport { rootSaga as labPlanRootSaga } from './lab-plan/root-saga';\r\nimport { fatalError } from '../actions/common/common-action-creators';\r\nimport { ErrorCode } from '../../common/error-codes';\r\nimport MlClientError, { FailureOperation } from '../../data/ml-client-error';\r\nexport function* rootSaga() {\r\n    try {\r\n        yield all([\r\n            fork(userEnvironmentRootSaga),\r\n            fork(registerRootSaga),\r\n            fork(galleryImageRootSaga),\r\n            fork(sharedImageRootSaga),\r\n            fork(labRootSaga),\r\n            fork(labAccountRootSaga),\r\n            fork(identityRootSaga),\r\n            fork(scheduleRootSaga),\r\n            fork(templateRootSaga),\r\n            fork(commonRootSaga),\r\n            fork(subscriptionRootSaga),\r\n            fork(userRootSaga),\r\n            fork(environmentRootSaga),\r\n            fork(pricingAndAvailabilityRootSaga),\r\n            fork(getCoreLimitsRootSaga),\r\n            fork(groupRootSaga),\r\n            fork(teamsConfigRootSaga),\r\n            fork(tenantRootSaga),\r\n            fork(vNextLabParentResourceRootSaga),\r\n            fork(vNextImageRootSaga),\r\n            fork(ltiRootSaga),\r\n            fork(skuRootSaga),\r\n            fork(usageRootSaga),\r\n            fork(priceRootSaga),\r\n            fork(labPlanRootSaga),\r\n        ]);\r\n    }\r\n    catch (err) {\r\n        const error = new MlClientError(err ? err.message : 'Redux sagas failed', '', FailureOperation.ReduxSagas, err ? err.code : undefined);\r\n        yield put(fatalError(ErrorCode.GenericError, error));\r\n    }\r\n}\r\n","import { LOCATION_CHANGE, CALL_HISTORY_METHOD } from 'connected-react-router/immutable';\r\nimport { trackEvent, trackTrace } from '../../utils/telemetry/telemetry-channel';\r\nimport { CommonActionType } from '../actions/common/common-actions';\r\nimport { IdentityActionType } from '../actions/identity/identity-actions';\r\n// these actions are noisy and fire a lot and are not particularly interesting to track\r\nconst ignoreActions = [\r\n    IdentityActionType.GET_ACCESS_TOKEN,\r\n    IdentityActionType.GET_ACCESS_TOKEN_SUCCESS,\r\n    CommonActionType.FATAL_ERROR,\r\n];\r\nexport function logAction(action) {\r\n    const { type } = action;\r\n    const scrubbedAction = cleanPii(action);\r\n    if (scrubbedAction) {\r\n        delete scrubbedAction['type'];\r\n    }\r\n    // used for our funnels\r\n    trackEvent(type);\r\n    // used for debugging\r\n    trackEvent('ActionDispatched', {\r\n        type,\r\n        payload: JSON.stringify(scrubbedAction),\r\n    });\r\n}\r\nexport const actionLoggerMiddleware = () => (next) => (action) => {\r\n    const result = next(action);\r\n    const { type } = action;\r\n    if (type === LOCATION_CHANGE || type === CALL_HISTORY_METHOD) {\r\n        const payload = action.payload;\r\n        trackEvent('ActionDispatched', { type, payload: JSON.stringify(cleanPii(payload)) });\r\n    }\r\n    else if (ignoreActions.indexOf(type) < 0) {\r\n        logAction(action);\r\n    }\r\n    return result;\r\n};\r\nconst safeParse = (payload) => {\r\n    const seen = [];\r\n    const stringified = JSON.stringify(payload, (_, value) => {\r\n        if (value && typeof value === 'object') {\r\n            if (seen.indexOf(value) >= 0) {\r\n                return;\r\n            }\r\n            seen.push(value);\r\n        }\r\n        return value;\r\n    });\r\n    return JSON.parse(stringified);\r\n};\r\nexport const cleanPii = (payload) => {\r\n    try {\r\n        const scrubbedPayload = safeParse(payload);\r\n        deleteProperty(scrubbedPayload, 'claimedByUserPrincipalId');\r\n        deleteProperty(scrubbedPayload, 'createdByUserPrincipalName');\r\n        deleteProperty(scrubbedPayload, 'homeAccountIdentifier');\r\n        deleteProperty(scrubbedPayload, 'accountIdentifier');\r\n        deleteProperty(scrubbedPayload, 'createdByObjectId');\r\n        deleteProperty(scrubbedPayload, 'preferred_username');\r\n        deleteProperty(scrubbedPayload, 'emailAddresses');\r\n        deleteProperty(scrubbedPayload, 'familyName');\r\n        deleteProperty(scrubbedPayload, 'givenName');\r\n        deleteProperty(scrubbedPayload, 'userName');\r\n        deleteProperty(scrubbedPayload, 'username');\r\n        deleteProperty(scrubbedPayload, 'password');\r\n        deleteProperty(scrubbedPayload, 'email');\r\n        deleteProperty(scrubbedPayload, 'puid');\r\n        deleteProperty(scrubbedPayload, 'oid');\r\n        deleteProperty(scrubbedPayload, 'aud');\r\n        deleteProperty(scrubbedPayload, 'sub');\r\n        deleteProperty(scrubbedPayload, 'data'); // pricing data is pretty large, no reason to log the whole thing\r\n        deleteProperty(scrubbedPayload, 'hash');\r\n        deleteProperty(scrubbedPayload, 'description');\r\n        if (scrubbedPayload['account']) {\r\n            deleteProperty(scrubbedPayload, 'name');\r\n        }\r\n        return scrubbedPayload;\r\n    }\r\n    catch (e) {\r\n        const actionName = payload ? payload['type'] : 'Unknown';\r\n        trackTrace(`Unable to clean payload for action ${actionName} due to error ${e ? e.message : 'Unknown error'}, will not send payload.`);\r\n    }\r\n};\r\nexport const deleteProperty = (object, key) => {\r\n    if (!object) {\r\n        return;\r\n    }\r\n    Object.keys(object).forEach((k) => {\r\n        if (k === key) {\r\n            delete object[key];\r\n            return;\r\n        }\r\n        if (object[k] && typeof object[k] === 'object') {\r\n            deleteProperty(object[k], key);\r\n        }\r\n    });\r\n};\r\nexport default actionLoggerMiddleware;\r\n","import { hasFatalError, getFatalError, getFatalErrorCode } from '../selectors/common-selectors';\r\nimport { trackException, flush, trackEvent } from '../../utils/telemetry/telemetry-channel';\r\nimport ErrorCode from '../../common/error-codes';\r\nimport { CommonActionType } from '../actions/common/common-actions';\r\nimport { logAction } from './action-logger-middleware';\r\nexport const fatalErrorMiddleware = ({ getState }) => (next) => (action) => {\r\n    // Evaluated prior to the action being dispatched to the reducer layer so\r\n    // we can get a snapshot before the state change occurs.\r\n    let storeState = getState();\r\n    const alreadyHasFatal = hasFatalError(storeState);\r\n    // If the action is a FatalErrorAction, we log the action itself when\r\n    // there isn't a pre-existing fatal error in our state. If there was\r\n    // a pre-existing one, we log a specific event instead to reduce noise and duplicate logs.\r\n    if (action.type === CommonActionType.FATAL_ERROR) {\r\n        if (!alreadyHasFatal) {\r\n            // FATAL_ERROR is excluded from the action-logger-middleware\r\n            // so we can use more specific logic when evaluating whether the action\r\n            // gets logged or not. Thus it is handled here.\r\n            logAction(action);\r\n        }\r\n        else {\r\n            const { errorCode, error } = action;\r\n            if (errorCode === ErrorCode.GenericError) {\r\n                trackEvent('DuplicateFatalErrorActionDispatched', {\r\n                    errorCode: errorCode,\r\n                    error: !!error ? JSON.stringify(error) : 'N/A',\r\n                });\r\n            }\r\n        }\r\n    }\r\n    // lets the action continue through the middleware pipeline\r\n    const result = next(action);\r\n    // Evaluated after the action has been processed by the reducer layer\r\n    // and represents what is actually in our application state. We are interested\r\n    // in the state and not the actions when logging these events because it is possible\r\n    // for other actions beyond the explicit FATAL_ERROR action to result in a\r\n    // fatal error in our store.\r\n    if (!alreadyHasFatal) {\r\n        storeState = getState();\r\n        if (hasFatalError(storeState)) {\r\n            const errorCode = getFatalErrorCode(storeState);\r\n            const error = getFatalError(storeState);\r\n            trackEvent('FatalErrorOccurred', {\r\n                errorCode: errorCode,\r\n                error: !!error ? JSON.stringify(error) : 'N/A',\r\n            });\r\n            if (errorCode === ErrorCode.GenericError) {\r\n                trackException(undefined, !!error ? error : new Error('No fatal error data specified.'));\r\n            }\r\n            flush();\r\n        }\r\n    }\r\n    return result;\r\n};\r\nexport default fatalErrorMiddleware;\r\n","import { isVNextFeatureEnabledOrLms } from '../selectors/common-selectors';\r\nimport { Context } from '../action-context';\r\nimport { CALL_HISTORY_METHOD, LOCATION_CHANGE } from 'connected-react-router/immutable';\r\nimport { getCurrentLabParentId } from '../selectors/lab-parent-resource-selectors';\r\nimport { isCurrentLabParentResourceGroup } from '../selectors/lab-parent-resource-selectors';\r\nimport { UserEnvironmentActionType } from '../actions/user-environment/user-environment-actions';\r\nimport { isValidResourceId } from '../../utils/resource-id';\r\nconst environmentIdBasedActions = [\r\n    UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT,\r\n    UserEnvironmentActionType.START_GLOBAL_USER_ENVIRONMENT_FAILED,\r\n    UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT,\r\n    UserEnvironmentActionType.STOP_GLOBAL_USER_ENVIRONMENT_FAILED,\r\n    UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD,\r\n    UserEnvironmentActionType.RESET_GLOBAL_USER_ENVIRONMENT_PASSWORD_FAILED,\r\n    UserEnvironmentActionType.CLEAR_START_USER_ENVIRONMENT_ERROR,\r\n    UserEnvironmentActionType.CLEAR_STOP_USER_ENVIRONMENT_ERROR,\r\n    UserEnvironmentActionType.CLEAR_RESET_USER_ENVIRONMENT_PASSWORD_ERROR,\r\n];\r\nconst featureFlagOnlyBasedActions = [\r\n    UserEnvironmentActionType.LIST_ALL_USER_VIRTUAL_MACHINES_SUCCESS,\r\n    UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS,\r\n    UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_CANCELLED,\r\n    UserEnvironmentActionType.LIST_GLOBAL_USER_ENVIRONMENTS_ERROR,\r\n    UserEnvironmentActionType.CLEAR_LIST_GLOBAL_USER_ENVIRONMENTS_ERROR,\r\n    UserEnvironmentActionType.CLEAR_GLOBAL_USER_ENVIRONMENT_ERRORS,\r\n];\r\nexport const vNextMiddleware = ({ getState }) => (next) => (action) => {\r\n    const state = getState();\r\n    const isVNext = isVNextFeatureEnabledOrLms(state);\r\n    const currentLabParentId = getCurrentLabParentId(state);\r\n    const isResourceGroup = isCurrentLabParentResourceGroup(state);\r\n    if (isVNext && action.type !== LOCATION_CHANGE && action.type !== CALL_HISTORY_METHOD) {\r\n        if (environmentIdBasedActions.indexOf(action.type) >= 0) {\r\n            const environmentId = action.environmentId;\r\n            if (!isValidResourceId(environmentId)) {\r\n                action.context = Context.VNext;\r\n            }\r\n        }\r\n        else if (featureFlagOnlyBasedActions.indexOf(action.type) >= 0) {\r\n            action.context = Context.VNext;\r\n        }\r\n        else if (!currentLabParentId || isResourceGroup) {\r\n            action.context = Context.VNext;\r\n        }\r\n    }\r\n    const result = next(action);\r\n    return result;\r\n};\r\nexport default vNextMiddleware;\r\n","import { createStore, applyMiddleware } from 'redux';\r\nimport createSagaMiddleware from 'redux-saga';\r\nimport { routerMiddleware as createRouterMiddleware } from 'connected-react-router/immutable';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport { combinedReducer } from './reducers/combined-reducer';\r\nimport { rootSaga } from './sagas/root-saga';\r\nimport { fatalErrorMiddleware } from './middleware/fatal-error-middleware';\r\nimport { actionLoggerMiddleware } from './middleware/action-logger-middleware';\r\nimport { vNextMiddleware } from './middleware/vnext-middleware';\r\nexport const configureStore = (history) => {\r\n    const sagaMiddleware = createSagaMiddleware();\r\n    const routerMiddleware = createRouterMiddleware(history);\r\n    const middleware = [\r\n        sagaMiddleware,\r\n        routerMiddleware,\r\n        fatalErrorMiddleware,\r\n        vNextMiddleware,\r\n        actionLoggerMiddleware,\r\n    ];\r\n    const composeEnhancers = composeWithDevTools({ maxAge: 150 });\r\n    const enhancer = composeEnhancers(applyMiddleware(...middleware));\r\n    // Redux does not play well with Typescript sometimes...\r\n    const store = createStore(combinedReducer(history), undefined, enhancer);\r\n    sagaMiddleware.run(rootSaga);\r\n    return store;\r\n};\r\nexport default configureStore;\r\n","import * as React from 'react';\r\n// todo: load from file\r\n// <svg>\r\n//     <use href=\"src/images/logo.svg\" />\r\n// </svg>\r\nexport const svgIcons = {\r\n    'hero-illustration': (<svg width=\"420\" height=\"280\" viewBox=\"0 0 420 280\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M351.25 219.58C352.05 215.82 352.47 211.93 352.47 207.94C352.47 177.03 327.41 151.97 296.49 151.97C293.16 151.97 289.9 152.28 286.73 152.83C281.69 149.54 275.68 147.62 269.21 147.62C251.5 147.62 237.14 161.98 237.14 179.69C237.14 185.75 238.82 191.41 241.74 196.25C240.94 200.02 240.51 203.93 240.51 207.94C240.51 238.85 265.57 263.92 296.49 263.92C300.48 263.92 304.38 263.49 308.13 262.7C312.49 264.92 317.42 266.18 322.65 266.18C340.36 266.18 354.72 251.82 354.72 234.11C354.72 228.87 353.46 223.94 351.25 219.58Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M259.44 94.46H192.08C190.32 94.46 188.89 95.89 188.89 97.65V185.58C188.89 187.34 190.32 188.77 192.08 188.77H211.09L228.92 206.79C229.86 207.74 231.49 207.07 231.48 205.73L231.02 188.77H259.44C261.2 188.77 262.63 187.34 262.63 185.58V97.65C262.63 95.89 261.2 94.46 259.44 94.46Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M229.46 38.78C233.023 38.78 235.91 35.8922 235.91 32.33C235.91 28.7678 233.023 25.88 229.46 25.88C225.898 25.88 223.01 28.7678 223.01 32.33C223.01 35.8922 225.898 38.78 229.46 38.78Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M292.36 41.95C295.923 41.95 298.81 39.0622 298.81 35.5C298.81 31.9378 295.923 29.05 292.36 29.05C288.798 29.05 285.91 31.9378 285.91 35.5C285.91 39.0622 288.798 41.95 292.36 41.95Z\" fill=\"#3E8EED\"/>\r\n            <path d=\"M190.884 73.9999L193.792 78.0569L200.8 76.6757C209.224 74.7907 215.261 69.3006 215.816 68.7601C216.706 67.8252 216.617 66.375 214.618 66.9291C214.934 66.5193 216.443 65.3338 216.448 64.0925C216.445 63.498 215.636 62.9127 214.821 63.2935C210.016 65.6417 204.267 67.0432 204.267 67.0432L205.424 65.2033C206.321 63.8632 206.978 62.7967 207.394 62.0037C207.708 61.2747 207.68 60.7843 207.31 60.5327C206.888 60.2689 206.355 60.3859 205.721 60.886C200.179 65.3925 190.884 73.9999 190.884 73.9999Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M173.4 104.02C160.68 64.43 118.27 42.64 78.6804 55.36C74.4104 56.73 70.3704 58.46 66.5404 60.48C58.7404 58.34 50.2404 58.35 41.9604 61.01C19.2704 68.31 6.79041 92.61 14.0804 115.3C15.8804 120.91 18.7404 125.87 22.3404 130.08C16.0704 136.52 12.2104 145.32 12.2104 155.02C12.2104 174.67 28.0504 190.61 47.6504 190.79C56.9304 210.46 76.9304 224.08 100.13 224.08C127.95 224.08 151.18 204.49 156.81 178.35C174.75 159.04 182.03 130.9 173.4 104.02Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M92.6905 170.47C92.4605 172.49 92.0405 205.42 92.6105 223.58C95.0705 223.9 97.5805 224.07 100.13 224.07C111.91 224.07 122.87 220.55 132.01 214.51C133.96 192.26 133.73 172.98 130.32 162.31C122.23 136.91 93.4205 142.91 92.6905 170.47Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M61.3504 161.54C59.5604 166.83 57.4104 192.47 60.3404 208.25C70.1104 217.48 83.0904 223.35 97.4404 224.01C98.2304 206.71 98.5704 175.1 98.3504 173.09C97.8104 145.53 69.5604 137.24 61.3504 161.54Z\" fill=\"#106EBE\"/>\r\n            <path d=\"M408.06 60.18C408.06 44.08 395.01 31.02 378.9 31.02C373.39 31.02 368.24 32.55 363.85 35.2C360.42 34.47 356.87 34.08 353.22 34.08C331.38 34.08 312.76 47.84 305.54 67.17C304.81 67.09 304.08 67.05 303.33 67.05C291.91 67.05 282.65 76.31 282.65 87.73C282.65 99.15 291.91 108.41 303.33 108.41C304.87 108.41 306.36 108.24 307.8 107.92C316.19 124.49 333.37 135.86 353.21 135.86C381.31 135.86 404.1 113.08 404.1 84.97C404.1 81.94 403.82 78.98 403.31 76.1C406.32 71.53 408.06 66.06 408.06 60.18Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M355.87 64.83C358.1 66.92 357.82 69.95 356.61 73.39C353.59 82.01 339.42 94.59 332.01 100.58C329.65 102.49 324.53 102.67 322.57 99.93C320.53 97.07 321.77 93.36 323.51 91.68C333.94 81.54 341.23 71.85 343.95 67.05C346.67 62.25 352.68 61.86 355.87 64.83Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M330.13 250.06V248.83C330.13 246.2 327.99 244.05 325.35 244.05H321.48V234.53H316.58V252.35H315.98V255.11H315.15L314.7 265.18C316.03 265.5 319.25 266.36 323.4 266.12L322.91 255.12H322.07V252.36H321.47V245.6H325.34C327.13 245.6 328.58 247.05 328.58 248.84V250.07C327.65 251.51 326.89 253.15 326.76 254.85C326.74 255.14 326.97 255.4 327.26 255.4H331.43C331.72 255.4 331.96 255.15 331.93 254.85C331.82 253.14 331.07 251.5 330.13 250.06Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M298.17 184.4L292.83 205.22C292.51 206.46 291.75 207.53 290.7 208.25L280.1 215.43L282.39 220.36L299.93 213.21L300.55 186.8L298.17 184.4Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M341.8 221.48L346.42 177.08C346.51 176.31 348.73 170.09 344.9 170.42L332.61 171.1C328.92 171.3 325.22 171.26 321.54 170.97L310.86 170.13C307.87 170.1 305.3 172.27 304.83 175.23L294.7 238.13H338.83C343.77 238.13 347.05 233.03 345.01 228.53L341.8 221.48Z\" fill=\"#797673\"/>\r\n            <path d=\"M321.58 179.88C315.67 179.88 309.46 179.62 304.14 178.83L304.32 177.61C320.03 179.93 343.66 177.63 343.9 177.61L344.02 178.83C343.86 178.85 333.3 179.88 321.58 179.88Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M319.14 189.41C313.04 189.41 306.7 189.15 301.38 188.36L301.56 187.14C317.28 189.46 342.12 187.16 342.37 187.14L342.48 188.36C342.31 188.39 331.21 189.41 319.14 189.41Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M318.29 199.25C312.15 199.25 305.77 198.99 300.45 198.2L300.63 196.98C316.35 199.3 341.49 197 341.75 196.98L341.86 198.2C341.69 198.22 330.46 199.25 318.29 199.25Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M319.1 209.23C312.98 209.23 306.27 209.17 299.9 208.97L299.94 207.74C318.9 208.32 340.95 207.75 341.17 207.74L341.2 208.97C341.06 208.97 331.25 209.23 319.1 209.23Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M339.95 218.81H298.69V220.04H339.95V218.81Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M341.8 229.26H300.54V230.49H341.8V229.26Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M345.31 226.6C344.16 221.41 343.8 216.08 344.25 210.78L347.61 172.69C347.7 171.66 346.99 170.73 345.98 170.54C344.84 170.33 343.75 171.14 343.63 172.29L339.71 208.12C338.91 215.37 339.35 222.7 340.99 229.81L341.7 232.88C342.07 234.46 340.86 235.97 339.23 235.95L319.13 235.76V235.88H317.91C314.11 235.88 310.41 236.97 307.24 238.99C306.25 239.62 306.08 240.99 306.89 241.83C307.5 242.46 308.45 242.63 309.23 242.23L310.31 241.69C312.45 240.61 314.82 240.05 317.22 240.05H319.12H329.56H340.36C344.44 240.05 347.47 236.27 346.58 232.29L345.31 226.6Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M270.84 257.59L272.97 242.46L296.58 238.06C301.68 237.11 306 233.73 308.15 229.01L314.84 214.32L293.12 214.5L290.33 221.16L264.85 228.44C261.8 229.3 259.63 232.01 259.47 235.18L258.75 249.33C258.75 249.33 263.68 254.15 270.84 257.59Z\" fill=\"#2B579A\"/>\r\n            <path d=\"M314.53 206.7L304.29 224.71L295.88 228.55C291.69 230.46 289.52 235.14 290.75 239.58L297.85 263.89C299.47 263.86 303.32 263.68 308.14 262.68C309.21 263.22 310.28 263.67 311.23 264.02L308.1 240.96C307.86 239.18 309.14 237.56 310.92 237.37L318.87 236.54C322.66 236.15 325.6 233.06 325.82 229.26L326.02 225.75L314.53 206.7Z\" fill=\"#4A78B0\"/>\r\n            <path d=\"M302.33 173.09C306.55 170.21 311.75 171.36 311.75 171.36L316.96 170.42C326.71 171.43 333.33 180.59 332.08 189.18L325.95 231.47L325.2 230.86C316 223.47 304.45 219.62 292.65 220.02L287.78 220.18L295.39 205.24C298.17 197.6 293.09 179.4 302.33 173.09Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M330.74 189.56C327.07 191.82 317.89 189.56 317.89 189.56L321.54 210C321.71 210.97 321.2 211.93 320.31 212.34L303.72 219.82L296.64 217.84C295.13 217.42 293.53 218.08 292.76 219.44L291.29 222.02L294.71 226.84L306.38 225.82L306.51 225.06L326.43 220.06C329.81 219.21 332.12 216.09 331.93 212.61C331.55 205.51 330.94 194.11 330.74 189.56Z\" fill=\"url(#paint1_radial)\"/>\r\n            <path d=\"M254.99 210.17C255.47 209.8 256.05 209.57 256.66 209.52L288.05 207C289.32 206.9 290.53 207.59 291.08 208.74L299.13 225.18C299.32 225.58 299.74 225.81 300.18 225.78L318.38 224.32L318.53 226.13L298.29 227.75L265.3 230.4L254.56 210.51L254.99 210.17Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M254.94 210.38L286.86 207.82C287.88 207.74 288.85 208.29 289.3 209.22L297.5 226.15C297.97 227.11 298.98 227.69 300.04 227.61L302.31 227.43L263.27 230.56L254.16 211.75C253.87 211.14 254.28 210.44 254.94 210.38Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M261.9 227.73L296.91 224.92L297.25 225.64L262.24 228.45L261.9 227.73Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M274.73 218.44L274.08 217.13L276.1 216.97L276.74 218.28L274.73 218.44Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M274.21 218.48L272.39 218.63L271.74 217.32L273.57 217.17L274.21 218.48Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M274.96 218.9L276.97 218.74L277.62 220.05L275.6 220.21L274.96 218.9Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M274.44 218.94L275.09 220.25L273.26 220.4L272.62 219.09L274.44 218.94Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M257.7 145.42H193.79C192.98 145.42 192.32 144.76 192.32 143.95V99.41C192.32 98.6 192.98 97.94 193.79 97.94H257.7C258.51 97.94 259.17 98.6 259.17 99.41V143.95C259.16 144.76 258.51 145.42 257.7 145.42Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M223.2 122.64H213.81V142.5H223.2V122.64Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M252.88 55.95H243.49V142.5H252.88V55.95Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M208.36 132.34H198.97V142.5H208.36V132.34Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M238.04 77.55H228.65V142.5H238.04V77.55Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M292.21 33.7C291.19 33.7 290.35 34.53 290.35 35.56C290.35 35.77 290.39 35.97 290.46 36.16L249.04 59.05C248.7 58.68 248.22 58.45 247.68 58.45C246.66 58.45 245.82 59.28 245.82 60.31C245.82 61.33 246.65 62.17 247.68 62.17C248.7 62.17 249.54 61.34 249.54 60.31C249.54 60.12 249.5 59.94 249.45 59.76L290.89 36.86C291.23 37.21 291.7 37.42 292.22 37.42C293.24 37.42 294.08 36.59 294.08 35.56C294.07 34.54 293.24 33.7 292.21 33.7ZM247.68 61.34C247.11 61.34 246.64 60.87 246.64 60.3C246.64 59.73 247.11 59.26 247.68 59.26C248.25 59.26 248.72 59.73 248.72 60.3C248.72 60.87 248.25 61.34 247.68 61.34ZM292.21 36.6C291.64 36.6 291.17 36.13 291.17 35.56C291.17 34.99 291.64 34.52 292.21 34.52C292.78 34.52 293.25 34.99 293.25 35.56C293.25 36.13 292.79 36.6 292.21 36.6Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M233.7 79.61L230.16 34.2C230.9 33.95 231.43 33.26 231.43 32.44C231.43 31.42 230.6 30.58 229.57 30.58C228.55 30.58 227.71 31.41 227.71 32.44C227.71 33.39 228.42 34.16 229.34 34.27L232.88 79.66C232.12 79.89 231.56 80.59 231.56 81.43C231.56 82.45 232.39 83.29 233.42 83.29C234.44 83.29 235.28 82.46 235.28 81.43C235.28 80.5 234.59 79.74 233.7 79.61ZM228.53 32.44C228.53 31.87 229 31.4 229.57 31.4C230.14 31.4 230.61 31.87 230.61 32.44C230.61 33.01 230.14 33.48 229.57 33.48C229 33.48 228.53 33.01 228.53 32.44ZM233.42 82.48C232.85 82.48 232.38 82.01 232.38 81.44C232.38 80.87 232.85 80.4 233.42 80.4C233.99 80.4 234.46 80.87 234.46 81.44C234.46 82.01 234 82.48 233.42 82.48Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M381.88 104.84C381.85 104.77 381.82 104.7 381.88 104.84V104.84Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M366.72 61.93C369.46 60.58 372.19 61.91 374.99 64.25C381.99 70.11 388.9 88.56 391.9 97.61C392.86 100.49 391.11 104.59 387.85 105.46C384.46 106.36 381.42 103.89 380.45 101.68C374.63 88.35 368.12 78.11 364.59 73.88C361.06 69.65 362.82 63.86 366.72 61.93Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M353.23 135.87C356.07 135.87 358.84 135.63 361.55 135.18C361.58 134.46 361.58 133.93 361.57 133.61C362.37 112.45 340.65 110.74 335.65 128.4C335.32 129.57 335.05 130.92 334.81 132.42C340.52 134.64 346.73 135.87 353.23 135.87Z\" fill=\"url(#paint2_radial)\"/>\r\n            <path d=\"M359.47 133.6C359.45 133.96 359.46 134.6 359.49 135.47C368.76 134.33 377.26 130.7 384.29 125.27C377.63 109.61 358.9 113.74 359.47 133.6Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M331.26 91.22C331.31 91.26 331.37 91.31 331.26 91.22V91.22Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M332.84 99.88C329.7 103.08 325.31 102.85 323.07 100.52C309.44 86.35 303.44 69.31 302.34 66.47L305.8 64.69C309.92 70.56 317.25 80.12 331.81 91.59C334.13 93.39 335.68 96.43 332.84 99.88Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M384.3 125.31C383.74 125.31 336.87 125.05 336.93 124.97C337.84 121.77 346.52 97.76 342.84 83.72C341.41 79.19 341.34 76.66 341.54 74.07C341.93 69.21 343.79 65.17 349 62.2C349.03 62.18 349.05 62.17 349.09 62.15C352.4 60.27 356.42 59.18 360.76 59.2C364.73 59.22 368.54 59.97 371.56 61.78C371.58 61.79 371.61 61.8 371.63 61.82C377.73 64.98 379.03 68.03 379.64 73.66C379.94 76.45 379.76 79.03 378.65 83.63C375.64 97.89 384.45 124.71 384.3 125.31Z\" fill=\"#797673\"/>\r\n            <path d=\"M371.56 61.79C370.13 65.06 365.57 67.44 360.19 67.42C355.06 67.4 350.7 65.21 349.09 62.16C352.4 60.28 356.42 59.19 360.76 59.21C364.73 59.22 368.54 59.97 371.56 61.79Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M115.81 78.5C131.9 81.4 152.84 88.02 157.92 86.36C163 84.7 192.29 71.5 192.29 71.5L197.57 80.21C197.57 80.21 171.78 99.31 159.51 100.56C147.24 101.81 133.27 102.65 114.97 96.98C96.6705 91.32 100.72 75.78 115.81 78.5Z\" fill=\"url(#paint3_radial)\"/>\r\n            <path d=\"M61.3504 161.54C61.1304 160.77 63.5304 151.58 67.9604 140.88C71.1004 133.32 71.0104 119.45 69.0304 114.8C64.7304 104.69 65.6704 101.64 65.6704 98.04C65.6704 86.26 79.0804 76.72 95.6304 76.72C112.17 76.72 125.59 86.27 125.59 98.04C125.59 101.77 124.77 107.3 122.98 114.45C121.19 121.6 119.76 134.46 122.27 140.89C126.39 151.49 128.72 157.26 130.03 161.38C130.11 161.49 117.24 162.05 96.0505 162.05C74.8605 162.05 61.3504 161.55 61.3504 161.54Z\" fill=\"url(#paint4_radial)\"/>\r\n            <path d=\"M96.0204 82.58C90.1804 82.58 84.7404 81.54 80.2104 79.75C84.7204 77.73 89.9904 76.55 95.6404 76.55C101.44 76.55 106.83 77.79 111.42 79.91C106.97 81.59 101.69 82.58 96.0204 82.58Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M75.4005 33.77C81.3805 35.78 85.3605 38.83 85.3605 38.83C85.3605 38.83 77.2205 41.35 74.4205 52.51C74.0205 54.22 74.7705 57.28 76.6605 61.72C78.3805 66.26 79.0005 69.31 78.8005 70.63C78.7205 72.9 77.4705 77.83 70.1505 80.06C61.4905 82.68 56.5805 77.66 56.8205 77.64C63.4605 77.25 60.8005 70.29 60.8005 70.29C55.2305 53.96 53.9605 48.93 53.8405 46.61C53.4505 38.33 58.5605 35.44 60.7905 34.19C64.5705 32.26 69.4505 32.12 75.4005 33.77Z\" fill=\"#33312D\"/>\r\n            <path d=\"M74.6704 29.29C77.6904 23.46 82.2604 19.64 88.3904 17.82C94.5304 16.03 100.45 16.78 106.17 20.08C111.85 23.38 115.63 28.26 117.52 34.71C119.42 41.19 118.86 47.35 115.84 53.18C112.82 59.01 108.25 62.82 102.11 64.61C95.9704 66.4 90.0504 65.65 84.3304 62.35C78.6604 59.08 74.8704 54.2 72.9804 47.72C71.0904 41.26 71.6504 35.12 74.6704 29.29Z\" fill=\"#594539\"/>\r\n            <path d=\"M80.9705 78.83C81.3105 78.79 86.0405 77.88 86.6905 77.34C87.7305 76.53 87.9405 75.11 87.8205 73.5L87.6505 54.65H104.13V72.42C104.25 73.96 104.22 74.79 104.88 75.86C105.53 76.74 108.69 77.63 111.53 77.91C107.43 84.11 88.9505 86.96 80.9705 78.83Z\" fill=\"url(#paint5_radial)\"/>\r\n            <path d=\"M105.243 66.5401C114.075 64.102 118.522 52.3034 115.178 40.1872C111.833 28.071 101.962 20.2253 93.13 22.6634C84.2984 25.1015 79.8505 36.9002 83.1954 49.0164C86.5402 61.1326 96.4113 68.9783 105.243 66.5401Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M100.45 39.16L109.33 36.71L113.77 52.79L104.89 55.24L100.45 39.16Z\" fill=\"url(#paint6_radial)\"/>\r\n            <path d=\"M104.65 50.4C104.06 50.93 103.78 51.22 103.79 51.29L103.74 51.3C101.32 50.15 100.44 47.31 101.58 43.29L102.19 44.42C102.8 45.29 103.63 45.96 104.7 46.43C105.19 46.63 105.52 47 105.71 47.55C105.89 48.1 105.91 48.58 105.76 48.99C105.59 49.44 105.22 49.91 104.65 50.4Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M80.6204 28.19C81.3704 26.78 85.8204 23.85 88.0704 30.53C89.3404 39.48 82.9604 40.64 85.5304 48.13C85.9104 49.25 83.0704 52.79 82.6604 54.02C77.6804 48.7 77.4704 34.07 80.6204 28.19Z\" fill=\"#594539\"/>\r\n            <path d=\"M99.8705 57.96C100.48 58.14 101.13 58.29 101.77 58.38C102.41 58.45 103.05 58.51 103.67 58.45C104.3 58.4 104.9 58.26 105.47 58.03C106.06 57.83 106.56 57.45 107.1 57.08L107.13 57.06C107.27 56.96 107.47 57 107.57 57.14C107.65 57.26 107.64 57.41 107.56 57.52C107.11 58.08 106.56 58.6 105.88 58.92C105.21 59.23 104.48 59.46 103.75 59.5C103.02 59.53 102.29 59.49 101.59 59.32C100.89 59.15 100.23 58.92 99.5905 58.55C99.4405 58.46 99.3905 58.27 99.4705 58.12C99.5505 57.99 99.7005 57.93 99.8405 57.97L99.8705 57.96Z\" fill=\"#9A6541\"/>\r\n            <path d=\"M110.438 44.46C111.263 44.2322 111.627 42.9428 111.25 41.58C110.874 40.2172 109.9 39.297 109.075 39.5248C108.25 39.7526 107.886 41.0421 108.262 42.4049C108.639 43.7677 109.613 44.6878 110.438 44.46Z\" fill=\"#594539\"/>\r\n            <path d=\"M96.0375 48.5084C96.8626 48.2806 97.2266 46.9912 96.8503 45.6284C96.4741 44.2656 95.5002 43.3455 94.6751 43.5733C93.8499 43.8011 93.486 45.0905 93.8622 46.4533C94.2385 47.8161 95.2124 48.7362 96.0375 48.5084Z\" fill=\"#594539\"/>\r\n            <path d=\"M86.2204 57.2C88.7941 57.2 90.8804 55.1136 90.8804 52.54C90.8804 49.9664 88.7941 47.88 86.2204 47.88C83.6468 47.88 81.5604 49.9664 81.5604 52.54C81.5604 55.1136 83.6468 57.2 86.2204 57.2Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M76.2804 31.2C76.4604 31.2 78.9004 34.04 81.1204 35.04C83.1804 34.82 85.0004 32.02 99.7604 35.31C106.1 36.72 120.96 36.62 122.1 22.07C119.35 24.07 118.85 24.76 112.55 20.37C103.87 14.32 94.6904 14.62 89.4004 16.46C81.4304 19.23 78.6704 24.02 76.2804 31.2Z\" fill=\"#594539\"/>\r\n            <path d=\"M58.4304 162.39C59.1604 163.36 62.7904 164.83 65.9404 164.79C69.0904 164.75 77.3504 167.64 78.0804 168.61C78.8104 169.58 82.5804 173.57 82.5804 173.57C82.5804 173.57 82.7804 174.74 81.8404 174.98C81.0104 175.19 80.2304 174.82 80.2304 174.82C80.2304 174.82 80.1304 176.29 78.3904 176.32C77.5304 176.33 72.3204 172.2 72.3204 172.2L68.2604 170.71C68.2604 170.71 70.1804 172.39 71.2804 173.93C71.9104 174.81 73.2604 178.34 73.2604 178.34C73.2604 178.34 71.8304 180.23 69.1304 176.9C66.1404 173.21 64.2404 172.53 64.2404 172.53C64.2404 172.53 59.6704 174.7 55.6604 172.4C51.6504 170.11 50.6604 166.52 50.6604 166.52L58.4304 162.39Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M80.8804 78.83C58.8704 83.18 35.5804 113.06 32.7404 117.06C29.9004 121.06 35.5104 130.12 44.8304 123.48C54.1504 116.84 65.9504 105.76 81.6804 98.91C91.7504 94.52 92.1704 76.6 80.8804 78.83Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M59.9004 162.92C59.9004 162.92 48.3204 141.57 47.0604 119.94C46.6204 112.31 30.5504 109.95 31.7504 123.29C32.9504 136.63 50.9704 167.39 50.9704 167.39L59.9004 162.92Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M82.4804 82.57C81.8604 81.68 80.8604 79.92 80.4204 78.92C85.6304 78.09 91.1804 76.73 97.6104 76.56C103.75 76.74 110.42 77.72 114.93 78.36C114.67 79.39 113.16 81.56 112.69 82.28C111.19 84.52 109.41 85.63 107.35 85.63H87.2604C85.5804 85.64 83.9804 84.62 82.4804 82.57Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M98.9104 57.65C99.3904 60.28 101.92 62.02 104.55 61.54C107.18 61.06 108.92 58.53 108.44 55.9L98.9104 57.65Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M98.9104 57.65C98.9504 57.89 99.0204 58.14 99.1004 58.37C100.59 58.55 102.26 58.5 103.99 58.18C105.68 57.87 107.21 57.34 108.51 56.68C108.51 56.42 108.48 56.17 108.43 55.91L98.9104 57.65Z\" fill=\"#F3F2F1\"/>\r\n            <path d=\"M308.433 68.3983L305.932 70.6268L301.536 68.695C296.29 66.2123 292.953 61.5931 292.858 61.2959C292.736 60.7835 293.502 60.7982 293.912 60.2676C293.767 59.9478 293.564 59.5483 293.313 59.0717C293.183 58.7334 293.124 58.4227 293.125 58.1371C293.389 57.5723 293.775 57.4757 294.313 57.8547L300.674 61.8632L300.181 60.4943C299.79 59.49 299.516 58.6891 299.364 58.1149C299.268 57.5867 299.354 57.266 299.631 57.1659C299.954 57.0546 300.28 57.2082 300.622 57.629C303.611 61.3862 308.433 68.3983 308.433 68.3983Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M395.45 113.4C394.82 108.89 393.88 104.12 392.48 99.36C391.57 96.26 388.32 92.33 384.06 93.72C379.94 95.46 379.48 99.47 380.68 102.15C383.96 109.42 386.37 116.14 388.13 122.01C391.63 118.65 393.96 115.62 395.45 113.4Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M311.29 176.89C307.25 177.15 305.67 174.9 306.22 171.57L308.61 155.78C309.16 152.45 312.31 150.21 315.63 150.76C318.96 151.31 321.2 154.46 320.65 157.78L318.5 171.01C317.95 174.34 315.34 176.62 311.29 176.89Z\" fill=\"url(#paint7_radial)\"/>\r\n            <path d=\"M301.81 153.53L325.79 157.52L327.49 147.28C327.69 146.06 326.87 144.91 325.65 144.71L306.08 141.46C304.86 141.26 303.71 142.08 303.51 143.3L301.81 153.53Z\" fill=\"#594539\"/>\r\n            <path d=\"M323.73 161.13C325.73 161.13 327.35 159.509 327.35 157.51C327.35 155.511 325.73 153.89 323.73 153.89C321.731 153.89 320.11 155.511 320.11 157.51C320.11 159.509 321.731 161.13 323.73 161.13Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M302.97 157.79C304.97 157.79 306.59 156.169 306.59 154.17C306.59 152.171 304.97 150.55 302.97 150.55C300.971 150.55 299.35 152.171 299.35 154.17C299.35 156.169 300.971 157.79 302.97 157.79Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M365.45 56.44L365.55 46.46L356.03 46.42L355.99 56.24C355.91 58.46 355.7 59.26 353.39 60.36C350.52 61.73 356.17 65.28 360.57 65.3C364.97 65.32 370.88 61.4 368.56 60.53C366.57 59.77 365.24 59.15 365.45 56.44Z\" fill=\"url(#paint8_radial)\"/>\r\n            <path d=\"M377.25 37.61C374.91 46.46 366.37 51.86 358.17 49.66C349.97 47.47 345.22 38.51 347.56 29.66C349.9 20.81 355.13 14.73 366.64 17.61C378.15 20.49 379.59 28.77 377.25 37.61Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M353.5 43.55L349.05 42.44C347.16 41.97 346 40.05 346.48 38.15C346.95 36.26 348.87 35.1 350.77 35.58L355.22 36.69L353.5 43.55Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M365.72 46.61L370.17 47.72C372.06 48.19 373.98 47.04 374.46 45.15C374.93 43.26 373.78 41.34 371.89 40.86L367.44 39.75L365.72 46.61Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M369.11 54.71C368.81 54.71 368.51 54.67 368.21 54.6C366.23 54.1 365.01 52.09 365.51 50.1C365.75 49.14 366.35 48.33 367.2 47.82C368.05 47.31 369.05 47.16 370.01 47.4C371.99 47.9 373.21 49.91 372.71 51.9C372.29 53.59 370.77 54.71 369.11 54.71ZM369.11 48.26C368.62 48.26 368.13 48.39 367.7 48.65C367.07 49.03 366.63 49.63 366.45 50.34C366.08 51.81 366.98 53.3 368.45 53.67C369.92 54.04 371.41 53.14 371.78 51.67C372.15 50.2 371.25 48.71 369.78 48.34C369.55 48.28 369.33 48.26 369.11 48.26Z\" fill=\"#958FE7\"/>\r\n            <path d=\"M348.22 49.49C347.92 49.49 347.62 49.45 347.32 49.38C345.34 48.88 344.13 46.87 344.62 44.88C345.12 42.9 347.13 41.68 349.12 42.18C350.08 42.42 350.89 43.02 351.4 43.87C351.91 44.72 352.06 45.72 351.82 46.68C351.4 48.36 349.88 49.49 348.22 49.49ZM348.22 43.03C346.99 43.03 345.87 43.86 345.56 45.11C345.19 46.58 346.09 48.07 347.56 48.44C349.03 48.81 350.52 47.91 350.89 46.44C351.07 45.73 350.96 44.99 350.58 44.36C350.2 43.73 349.6 43.29 348.89 43.11C348.66 43.06 348.44 43.03 348.22 43.03Z\" fill=\"#958FE7\"/>\r\n            <path d=\"M372.82 41.01C370.64 49.73 363.66 55.51 357.24 53.9C350.82 52.29 347.38 43.92 349.56 35.2C351.74 26.48 358.51 21.51 364.94 23.11C371.36 24.71 375 32.28 372.82 41.01Z\" fill=\"#E0BB95\"/>\r\n            <path d=\"M365.244 39.986C365.463 39.0503 365.187 38.1856 364.628 38.0546C364.068 37.9237 363.437 38.5761 363.218 39.5118C362.999 40.4475 363.275 41.3122 363.834 41.4431C364.394 41.5741 365.025 40.9217 365.244 39.986Z\" fill=\"#594539\"/>\r\n            <path d=\"M362.14 30.73L360.7 35.33C360.04 37.74 358.24 39.54 357.05 40.51C356.47 40.98 356.36 41.82 356.77 42.45C357.44 43.47 358.23 44.98 357.98 46.15L357.14 48.9L350.01 47.76L354.2 28.85L362.14 30.73Z\" fill=\"url(#paint9_radial)\"/>\r\n            <path d=\"M356.34 47.29L357.64 47.47C358 47.5 358.31 47.52 358.62 47.52L359.62 47.51L360.93 47.43H361.01C361.29 47.41 361.53 47.62 361.54 47.9C361.54 47.96 361.54 48.03 361.52 48.08C361.14 49.29 359.86 50.01 358.57 49.98C357.27 49.96 356.02 49.11 355.72 47.93C355.65 47.66 355.82 47.38 356.09 47.31C356.16 47.29 356.22 47.29 356.28 47.3L356.34 47.29Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M355.468 37.5409C355.687 36.6052 355.411 35.7405 354.852 35.6095C354.293 35.4786 353.662 36.1309 353.443 37.0666C353.224 38.0024 353.499 38.867 354.059 38.998C354.618 39.129 355.249 38.4766 355.468 37.5409Z\" fill=\"#594539\"/>\r\n            <path d=\"M375.14 25.66C375.81 16.54 366.08 12.35 359.05 13.39C352.9 14.3 348.48 19.11 347.72 14.67C347.72 14.67 342.28 18.11 342.19 23.53C342.1 28.96 346.34 31.85 350.94 31.12C354 30.64 357.73 26.62 363.79 24.98C368.83 23.63 375.14 25.66 375.14 25.66Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M301.76 159.8C301.45 161.66 302.8 170.51 309.36 170.51C315.92 170.51 322.08 167.98 322.77 163.81L325.29 148.63C325.52 147.26 324.59 145.96 323.22 145.73L307.15 143.06C305.74 142.83 304.41 143.78 304.18 145.18L301.76 159.8Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M316.614 154.783C316.743 154.004 316.504 153.315 316.079 153.244C315.654 153.174 315.204 153.748 315.075 154.527C314.945 155.306 315.185 155.995 315.61 156.066C316.035 156.136 316.484 155.562 316.614 154.783Z\" fill=\"#594539\"/>\r\n            <path d=\"M303.42 166.7C303.66 166.8 303.91 166.89 304.17 166.93L309.53 167.81L310.74 160.33C310.8 159.94 310.66 159.54 310.37 159.27L308.87 157.89C308.54 157.59 308.52 157.08 308.81 156.75L310.64 154.71C311.08 154.22 311.36 153.62 311.47 152.98L312.79 144.96L304.27 143.55L301.76 161.14C301.88 162.62 302.36 164.8 303.42 166.7Z\" fill=\"url(#paint10_radial)\"/>\r\n            <path d=\"M326.5 146.82C326.5 146.82 324.07 145.1 323.27 149.34C322.79 151.86 323.44 153.28 324.14 153.75C324.77 154.17 325.29 154.24 325.29 154.24L326.5 146.82Z\" fill=\"#594539\"/>\r\n            <path d=\"M303.48 143.34C303.48 143.34 306.23 142.45 305.66 146.73C305.32 149.27 304.29 150.43 303.51 150.65C302.81 150.85 302.31 150.77 302.31 150.77L303.48 143.34Z\" fill=\"#594539\"/>\r\n            <path d=\"M310.55 146.44C313.67 146.37 313.97 145.77 317.02 146.15C321.79 146.74 325.55 148.13 325.55 148.13L325.73 146.71C326.14 143.49 324.64 140.2 320.64 140.14C314.5 140.04 316.08 138.5 313.52 137.94C311.09 137.4 310.17 139.74 309.15 139.6C306.65 139.26 307.63 136.09 303.76 136.38C300.48 136.62 296.86 146.75 310.55 146.44Z\" fill=\"#594539\"/>\r\n            <path d=\"M314.02 162.41C312.76 164.11 310.32 164.18 309.04 163.06L314.02 162.41Z\" fill=\"#594539\"/>\r\n            <path d=\"M308.34 153.416C308.47 152.637 308.23 151.948 307.805 151.878C307.38 151.807 306.931 152.381 306.801 153.16C306.672 153.939 306.911 154.628 307.336 154.699C307.761 154.77 308.211 154.195 308.34 153.416Z\" fill=\"#594539\"/>\r\n            <path d=\"M316.55 37.39C320.113 37.39 323 34.5022 323 30.94C323 27.3778 320.113 24.49 316.55 24.49C312.988 24.49 310.1 27.3778 310.1 30.94C310.1 34.5022 312.988 37.39 316.55 37.39Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M280.83 85.27C284.393 85.27 287.28 82.3822 287.28 78.82C287.28 75.2578 284.393 72.37 280.83 72.37C277.268 72.37 274.38 75.2578 274.38 78.82C274.38 82.3822 277.268 85.27 280.83 85.27Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M292.83 63.02C296.393 63.02 299.28 60.1322 299.28 56.57C299.28 53.0078 296.393 50.12 292.83 50.12C289.268 50.12 286.38 53.0078 286.38 56.57C286.38 60.1322 289.268 63.02 292.83 63.02Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M272.27 25.9C275.833 25.9 278.72 23.0122 278.72 19.45C278.72 15.8878 275.833 13 272.27 13C268.708 13 265.82 15.8878 265.82 19.45C265.82 23.0122 268.708 25.9 272.27 25.9Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M231.67 152.76H192.9C192.57 152.76 192.29 152.49 192.29 152.15V150.92C192.29 150.59 192.56 150.31 192.9 150.31H231.67C232 150.31 232.28 150.58 232.28 150.92V152.15C232.27 152.48 232 152.76 231.67 152.76Z\" fill=\"white\"/>\r\n            <path d=\"M231.67 158.76H192.9C192.57 158.76 192.29 158.49 192.29 158.15V156.92C192.29 156.59 192.56 156.31 192.9 156.31H231.67C232 156.31 232.28 156.58 232.28 156.92V158.15C232.27 158.48 232 158.76 231.67 158.76Z\" fill=\"white\"/>\r\n            <path d=\"M222.48 164.76H192.9C192.57 164.76 192.29 164.49 192.29 164.15V162.92C192.29 162.59 192.56 162.31 192.9 162.31H222.48C222.81 162.31 223.09 162.58 223.09 162.92V164.15C223.09 164.48 222.81 164.76 222.48 164.76Z\" fill=\"white\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(76.8785 201.661) scale(31.1938)\">\r\n                    <stop stopColor=\"#33312D\"/>\r\n                    <stop offset=\"1\" stopColor=\"#126BB7\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(311.673 181.758) scale(19.5018)\">\r\n                    <stop stopColor=\"#594539\"/>\r\n                    <stop offset=\"1\" stopColor=\"#9B643D\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(362.358 139.304) scale(14.5797)\">\r\n                    <stop offset=\"0.00859768\" stopColor=\"#33312D\"/>\r\n                    <stop offset=\"0.8671\" stopColor=\"#605D5A\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint3_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(123.023 103.044) rotate(-8.92824) scale(34.9964)\">\r\n                    <stop stopColor=\"#3E8EED\"/>\r\n                    <stop offset=\"0.5237\" stopColor=\"#72ACF1\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint4_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(61.0381 112.605) rotate(180) scale(38.7369)\">\r\n                    <stop stopColor=\"#3E8EED\"/>\r\n                    <stop offset=\"0.5237\" stopColor=\"#72ACF1\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint5_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(111.301 52.9982) rotate(180) scale(25.9989)\">\r\n                    <stop stopColor=\"#9B643D\"/>\r\n                    <stop offset=\"1\" stopColor=\"#BF8F68\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint6_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(103.423 48.2667) rotate(164.567) scale(5.84484 5.79691)\">\r\n                    <stop stopColor=\"#9B643D\"/>\r\n                    <stop offset=\"1\" stopColor=\"#BF8F68\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint7_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(313.241 166.459) scale(6.7882)\">\r\n                    <stop offset=\"0.3256\" stopColor=\"#594539\"/>\r\n                    <stop offset=\"1\" stopColor=\"#9B643D\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint8_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(361.144 48.7048) rotate(0.253693) scale(10.4768)\">\r\n                    <stop offset=\"0.1321\" stopColor=\"#BF8F68\"/>\r\n                    <stop offset=\"0.6289\" stopColor=\"#D4AB84\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E0BB95\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint9_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(361.73 41.4157) scale(8.3844)\">\r\n                    <stop offset=\"0.1321\" stopColor=\"#BF8F68\"/>\r\n                    <stop offset=\"0.6289\" stopColor=\"#D4AB84\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E0BB95\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint10_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(313.848 157.281) scale(9.1969)\">\r\n                    <stop stopColor=\"#594539\"/>\r\n                    <stop offset=\"1\" stopColor=\"#9B643D\"/>\r\n                </radialGradient>\r\n            </defs>\r\n        </svg>),\r\n    'illustration-1': (<svg width=\"220\" height=\"147\" viewBox=\"0 0 220 147\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M172.428 60.9168C172.59 60.1083 172.67 59.2998 172.751 58.4178C172.67 55.9996 172.025 53.7358 170.742 51.7219C169.451 49.708 167.684 48.091 165.506 47.04C163.416 45.9889 160.996 45.5038 158.664 45.6655C156.332 45.8272 153.992 46.7166 152.064 48.0837C150.296 45.0187 147.554 42.6741 144.334 41.307C141.115 39.9325 137.492 39.69 134.112 40.5793C130.731 41.4687 127.673 43.4017 125.495 46.1506C123.324 48.8922 122.034 52.2805 121.953 55.8306H121.792C120.662 55.8306 119.54 55.9114 118.411 56.2348C112.537 57.9327 108.988 63.0924 108.988 68.6637C108.988 74.1541 112.53 79.3138 118.33 81.0117C119.46 81.3351 120.582 81.4159 121.792 81.4159H172.113C174.848 81.4159 177.43 80.3649 179.358 78.5127C181.294 76.6531 182.416 74.0733 182.416 71.3317C182.416 68.5902 181.448 66.003 179.52 64.0699C177.657 62.1295 175.083 60.9976 172.428 60.9168Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M130.607 137.452H41.5066C40.4066 137.452 39.4532 137.085 38.6466 136.276C37.8399 135.468 37.3999 134.439 37.3999 133.336V24.3359C37.3999 23.7479 37.4732 23.3069 37.6932 22.7189C37.9132 22.2044 38.2066 21.7634 38.5732 21.3224C38.9399 20.9549 39.3799 20.5874 39.9666 20.4404C40.4799 20.2199 40.9932 20.1464 41.5799 20.1464H130.827C131.927 20.1464 132.953 20.5139 133.76 21.3224C134.567 22.1309 135.007 23.1599 135.007 24.2624V133.189C135.007 134.292 134.493 135.394 133.76 136.203C132.733 137.011 131.707 137.452 130.607 137.452Z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M95.9931 119.173H76.2665C73.7731 119.173 71.4265 118.217 69.6665 116.453C67.9065 114.689 66.9531 112.337 66.9531 109.838C66.9531 107.339 67.9065 104.987 69.6665 103.223C71.4265 101.459 73.7731 100.504 76.2665 100.504H96.1398C98.6331 100.504 100.98 101.533 102.74 103.297C104.5 105.061 105.453 107.486 105.453 109.912C105.453 112.411 104.426 114.763 102.666 116.527C100.906 118.144 98.4864 119.173 95.9931 119.173Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M63.0666 86.3919H109.34C111.027 86.3919 112.42 87.7884 112.42 89.4789C112.42 91.1694 111.027 92.5659 109.34 92.5659H63.0666C61.3799 92.5659 59.9866 91.1694 59.9866 89.4789C59.9866 87.7149 61.3799 86.3919 63.0666 86.3919Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M59.9866 78.4539C59.9866 80.1444 61.3799 81.5409 63.0666 81.5409H109.34C111.027 81.5409 112.42 80.1444 112.42 78.4539C112.42 76.7634 111.027 75.3669 109.34 75.3669H63.0666C61.3799 75.3669 59.9866 76.7634 59.9866 78.4539Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M70.1066 68.0904H99.7332C100.467 68.0904 101.2 67.7964 101.713 67.2819C102.3 66.6939 102.52 65.9589 102.52 65.2974V35.5299C102.52 34.7949 102.227 34.0599 101.713 33.5454C101.127 32.9574 100.54 32.7369 99.7332 32.7369H70.1066C69.3732 32.7369 68.6399 33.0309 68.0532 33.5454C67.4666 34.1334 67.2466 34.8684 67.2466 35.5299V65.2239C67.2466 65.9589 67.5399 66.6939 68.0532 67.2084C68.6399 67.7964 69.3732 68.0904 70.1066 68.0904Z\" fill=\"#2B88D8\"/>\r\n            <path d=\"M98.4133 58.5354H80.3733L91.3 56.6244C91.0067 56.2569 90.64 55.8159 90.3467 55.4484L85.8 49.9359C85.7267 49.8624 85.6533 49.7889 85.6533 49.7154C85.6533 49.6419 85.6533 49.5684 85.6533 49.4214C86.6067 46.7754 87.4867 44.2029 88.5133 41.4834C88.5133 41.4099 88.5133 41.4099 88.5867 41.2629L98.4133 58.5354ZM86.46 42.4389L87.6333 39.7929C87.4867 39.8664 87.4133 39.9399 87.4133 39.9399C85.36 41.6304 83.4533 43.3209 81.4733 45.0114C81.1067 45.3054 80.6667 45.7464 80.3733 46.1139C78.76 48.9069 77.1467 51.7734 75.6067 54.5664C75.3133 55.1544 74.9467 55.6689 74.6533 56.2569H75.02C76.56 56.2569 78.1 56.2569 79.64 56.2569C79.7867 56.2569 79.86 56.2569 80.08 56.1834C80.1533 56.1099 80.3 56.0364 80.3 55.8894C82.3533 51.4794 84.4067 46.9224 86.46 42.4389Z\" fill=\"white\"/>\r\n            <path d=\"M131.597 9.55499C131.083 9.55499 130.643 9.99599 130.643 10.5105V16.6845C130.643 17.199 131.083 17.64 131.597 17.64C132.11 17.64 132.55 17.199 132.55 16.6845V10.5105C132.55 9.99599 132.11 9.55499 131.597 9.55499Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M142.23 13.6416C141.871 13.2815 141.247 13.2815 140.881 13.6416L136.525 18.0075C136.165 18.3677 136.158 18.9924 136.525 19.3599C136.884 19.7201 137.507 19.7201 137.874 19.3599L142.23 14.994C142.589 14.6339 142.589 14.0091 142.23 13.6416Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M145.295 23.8948C145.222 23.4538 144.855 23.0128 144.342 23.0128H138.695C138.182 23.0128 137.742 23.4538 137.742 23.9683C137.742 24.4828 138.182 24.9238 138.695 24.9238H144.342C144.855 24.9238 145.295 24.4828 145.295 23.9683V23.8948Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M81.7666 111.014L84.7733 114.322C84.9933 114.542 85.3599 114.542 85.5799 114.322L91.8133 107.119C92.0333 106.898 91.9599 106.531 91.7399 106.31L91.0066 105.649C90.7866 105.428 90.4199 105.428 90.1999 105.722L85.5066 111.235C85.2866 111.455 84.9199 111.529 84.6999 111.235L83.2333 109.618C83.0133 109.397 82.6466 109.397 82.4266 109.544L81.6933 110.206C81.5466 110.426 81.5466 110.794 81.7666 111.014Z\" fill=\"white\"/>\r\n            <path d=\"M109.296 126.038L109.303 126.045C109.355 126.097 109.384 126.192 109.325 126.317C109.274 126.427 109.164 126.516 108.988 126.523L104.023 126.082L103.422 126.03L103.649 126.589L106.069 132.543C106.113 132.645 106.106 132.726 106.077 132.785C106.055 132.844 106.003 132.903 105.908 132.939L103.121 134.042L103.107 134.049L103.092 134.057C103.019 134.093 102.872 134.086 102.791 133.88L100.371 127.927L100.144 127.368L99.7552 127.824L96.4552 131.646L96.4479 131.653C96.3672 131.749 96.2499 131.771 96.1546 131.741C96.0592 131.712 95.9932 131.638 95.9932 131.521V131.514L95.5532 111.896C95.5532 111.764 95.6192 111.691 95.6999 111.661C95.7806 111.632 95.8832 111.639 95.9566 111.713L109.296 126.038Z\" fill=\"#605D5A\" stroke=\"#B3AFAB\"/>\r\n        </svg>),\r\n    'illustration-2': (<svg width=\"220\" height=\"147\" viewBox=\"0 0 220 147\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M176.513 136.636C182.233 136.636 187.88 134.946 192.647 131.786C197.413 128.625 201.08 124.068 203.353 118.702C205.48 113.41 206.14 107.53 205.04 101.871C203.94 96.2115 201.227 91.0665 197.047 87.024C193.013 82.9815 187.88 80.1885 182.233 79.0125C176.587 77.91 170.793 78.4245 165.44 80.703C160.16 82.8345 155.613 86.6565 152.387 91.434C149.233 96.2115 147.547 101.871 147.547 107.604C147.547 115.321 150.627 122.745 155.98 128.111C161.48 133.623 168.813 136.636 176.513 136.636Z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M38.8667 38.073V55.419H29.1867V38.073H13.9333V28.371H29.3333V11.025H39.0133V28.371H54.2667V38.073H38.8667Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M193.453 103.414V123.26C193.453 123.701 193.16 123.995 192.72 123.995H186.193C185.753 123.995 185.46 123.701 185.46 123.26V103.414C185.46 102.973 185.753 102.679 186.193 102.679H192.72C193.16 102.679 193.453 102.973 193.453 103.414ZM175.56 123.921H182.087C182.527 123.921 182.82 123.627 182.82 123.186V111.353C182.82 110.912 182.527 110.618 182.087 110.618H175.56C175.12 110.618 174.827 110.912 174.827 111.353V123.186C174.827 123.627 175.193 123.921 175.56 123.921ZM164.927 123.921H171.453C171.893 123.921 172.187 123.627 172.187 123.186V116.645C172.187 116.204 171.893 115.91 171.453 115.91H164.927C164.487 115.91 164.193 116.204 164.193 116.645V123.186C164.193 123.627 164.56 123.921 164.927 123.921ZM171.087 93.492L176.073 93.933L160.82 105.032C160.527 105.252 160.453 105.693 160.673 106.061L162.433 108.486C162.653 108.78 163.093 108.854 163.46 108.633L178.86 97.5345L177.76 102.679C177.687 103.047 177.907 103.488 178.347 103.562L181.28 104.149C181.647 104.223 182.087 104.003 182.16 103.562L184.727 91.2135C184.8 90.7725 184.507 90.405 184.067 90.3315L171.747 89.082C171.38 89.0085 171.013 89.3025 170.94 89.7435L170.5 92.6835C170.427 93.051 170.72 93.4185 171.087 93.492Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M114.693 120.025C143.733 120.025 167.347 96.3585 167.347 67.2525C167.347 38.1465 143.733 14.4795 114.693 14.4795C85.6534 14.4795 62.04 38.1465 62.04 67.2525C62.04 96.3585 85.58 120.025 114.693 120.025Z\" fill=\"#2B88D8\"/>\r\n            <path d=\"M139.113 96.579C138.673 97.314 138.087 97.902 137.427 98.2695C136.693 98.7105 135.887 98.8575 135.08 99.0045H92.4733C91.6667 99.0045 90.86 98.784 90.1267 98.4165C89.3933 97.9755 88.8067 97.3875 88.5133 96.726C88.22 96.2115 88 95.4765 88 94.8885C88 94.3005 88.0733 93.5655 88.44 93.051C90.4933 89.8905 107.287 62.475 107.507 62.328L107.8 61.887V35.0595H119.387V61.3725L119.68 61.8135C119.753 62.034 134.42 85.554 138.82 92.5365C139.187 93.1245 139.407 93.786 139.553 94.4475C139.48 95.256 139.407 95.991 139.113 96.579Z\" fill=\"white\"/>\r\n            <path d=\"M121.073 49.0245H106.627V61.593C106.627 61.593 89.54 89.229 87.8534 92.316C86.1667 95.4765 87.4134 100.695 94.0134 100.695H134.713C139.187 100.695 143.513 97.02 139.48 90.405C135.447 83.7165 121.147 60.7845 121.147 60.7845V49.0245H121.073Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M117.92 77.469C120.047 77.469 121.66 75.7785 121.66 73.7205C121.66 71.6625 119.973 69.972 117.92 69.972C115.867 69.972 114.18 71.6625 114.18 73.7205C114.18 75.705 115.793 77.469 117.92 77.469Z\" fill=\"white\"/>\r\n            <path d=\"M108.607 82.6875C110.293 82.6875 111.833 81.291 111.833 79.4535C111.833 77.616 110.44 76.2195 108.607 76.2195C106.92 76.2195 105.38 77.616 105.38 79.4535C105.38 81.291 106.92 82.6875 108.607 82.6875Z\" fill=\"white\"/>\r\n            <path d=\"M116.16 92.5365C117.26 92.5365 118.213 91.6545 118.213 90.4785C118.213 89.376 117.333 88.4205 116.16 88.4205C114.987 88.4205 114.107 89.3025 114.107 90.4785C114.18 91.581 115.06 92.5365 116.16 92.5365Z\" fill=\"white\"/>\r\n            <path d=\"M112.64 58.8C113.74 58.8 114.693 57.918 114.693 56.742C114.693 55.6395 113.813 54.684 112.64 54.684C111.54 54.684 110.587 55.566 110.587 56.742C110.66 57.918 111.54 58.8 112.64 58.8Z\" fill=\"white\"/>\r\n            <path d=\"M139.113 96.579C138.673 97.314 138.087 97.902 137.427 98.2695C136.693 98.7105 135.887 98.8575 135.08 99.0045H92.4733C91.6667 99.0045 90.86 98.784 90.1267 98.4165C89.3933 97.9755 88.8067 97.3875 88.5133 96.726C88.22 96.2115 88 95.4765 88 94.8885C88 94.3005 88.0733 93.5655 88.44 93.051C90.4933 89.8905 107.287 62.475 107.507 62.328L107.8 61.887V35.0595H119.387V61.3725L119.68 61.8135C119.753 62.034 134.42 85.554 138.82 92.5365C139.187 93.1245 139.407 93.786 139.553 94.4475C139.48 95.256 139.407 95.991 139.113 96.579Z\" fill=\"white\"/>\r\n            <path d=\"M122.173 63.2835H104.793L87.5601 92.022C85.3601 95.7705 88.0001 100.401 92.3267 100.401H134.42C139.187 100.695 142.193 95.55 139.773 91.5075L122.173 63.2835Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M141.753 90.7725C137.72 84.3045 124.813 63.651 122.76 60.417V35.133H104.207V60.858C102.08 64.386 87.2667 88.2735 85.4334 91.2135C84.8467 92.316 84.4067 93.5655 84.4067 94.8885C84.4067 96.2115 84.7001 97.3875 85.2867 98.5635C86.0201 99.813 86.9734 100.915 88.2201 101.577C89.4667 102.312 90.8601 102.68 92.2534 102.606H135.08C136.473 102.606 137.94 102.239 139.187 101.504C140.433 100.769 141.533 99.666 142.193 98.49C142.78 97.3875 143.073 96.0645 143 94.7415C142.927 93.1245 142.56 91.8015 141.753 90.7725Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M108.607 82.6875C110.293 82.6875 111.833 81.291 111.833 79.4535C111.833 77.616 110.44 76.2195 108.607 76.2195C106.92 76.2195 105.38 77.616 105.38 79.4535C105.38 81.291 106.92 82.6875 108.607 82.6875Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M117.92 77.469C120.047 77.469 121.66 75.7785 121.66 73.7205C121.66 71.6625 119.973 69.972 117.92 69.972C115.867 69.972 114.18 71.6625 114.18 73.7205C114.18 75.705 115.793 77.469 117.92 77.469Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M116.16 92.5365C117.26 92.5365 118.213 91.6545 118.213 90.4785C118.213 89.376 117.333 88.4205 116.16 88.4205C114.987 88.4205 114.107 89.3025 114.107 90.4785C114.18 91.581 115.06 92.5365 116.16 92.5365Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M103.913 34.986V61.3725L102.887 62.9895H120.047V34.986H103.913Z\" fill=\"white\"/>\r\n            <path d=\"M103.913 36.0885V40.425H117.7C118.433 40.425 118.947 41.013 118.947 41.6745L119.02 62.5485L119.313 62.9895H124.447L123.273 61.2255V36.162L103.913 36.0885Z\" fill=\"#FAF9F8\"/>\r\n            <path d=\"M126.28 31.8255H101.2C100.393 31.8255 99.66 32.5605 99.66 33.369V34.7655C99.66 35.574 100.247 36.162 101.053 36.162H126.353C127.16 36.162 127.747 35.574 127.747 34.7655V33.369C127.747 32.5605 127.087 31.8255 126.28 31.8255Z\" fill=\"white\"/>\r\n        </svg>),\r\n    'illustration-3': (<svg width=\"220\" height=\"147\" viewBox=\"0 0 220 147\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M159.845 23.6082H155.151C153.245 23.6082 151.653 25.2032 151.653 27.1215V120.856C151.653 122.767 153.245 124.369 155.151 124.369H159.845\" stroke=\"#C8C6C4\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n            <path d=\"M131.655 73.7058H159.845\" stroke=\"#C8C6C4\" strokeWidth=\"1.5123\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n            <path d=\"M124.197 41.8877V104.495C124.197 105.178 123.625 105.634 123.061 105.634H30.3306C29.6486 105.634 29.194 105.061 29.194 104.495V41.8877C29.194 41.2041 29.766 40.7484 30.3306 40.7484H123.061C123.633 40.7484 124.197 41.2041 124.197 41.8877Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M118.397 44.8497H36.0214C35.1121 44.8497 34.4301 45.5333 34.4301 46.4447V97.6448C34.4301 98.5562 35.1121 99.2397 36.0214 99.2397H118.397C119.306 99.2397 119.988 98.5562 119.988 97.6448V46.452C119.988 45.5406 119.196 44.8497 118.397 44.8497Z\" fill=\"#2B88D8\"/>\r\n            <path d=\"M16.676 106.663H136.143C138.189 106.663 139.898 105.406 139.898 103.929V102.444H12.4667V103.811C12.4667 105.406 14.1753 106.663 16.104 106.663\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M203.104 12.7964V33.6998C203.104 34.2584 202.627 34.7361 202.07 34.7361H173.499C172.942 34.7361 172.465 34.2584 172.465 33.6998V12.7964C172.465 12.2378 172.942 11.76 173.499 11.76H202.07C202.627 11.76 203.104 12.1569 203.104 12.7964Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M200.559 13.8327H175.325C175.01 13.8327 174.849 14.0753 174.849 14.3105V31.6197C174.849 31.9358 175.091 32.0975 175.325 32.0975H200.479C200.794 32.0975 200.955 31.8549 200.955 31.6197V14.3105C201.036 14.0753 200.794 13.8327 200.559 13.8327Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M168.403 35.4564H206.925C207.643 35.4564 208.12 34.9786 208.12 34.2583V33.6189H167.127V34.2583C167.127 34.9786 167.603 35.4564 168.322 35.4564\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M203.104 62.3795V83.2829C203.104 83.8415 202.627 84.3192 202.07 84.3192H173.499C172.942 84.3192 172.465 83.8415 172.465 83.2829V62.3795C172.465 61.8209 172.942 61.3431 173.499 61.3431H202.07C202.627 61.3431 203.104 61.7474 203.104 62.3795Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M200.559 63.4158H175.325C175.01 63.4158 174.849 63.6584 174.849 63.8936V81.2028C174.849 81.5189 175.091 81.6806 175.325 81.6806H200.479C200.794 81.6806 200.955 81.438 200.955 81.2028V63.9009C201.036 63.6584 200.794 63.4158 200.559 63.4158Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M168.403 85.0395H206.925C207.643 85.0395 208.12 84.5618 208.12 83.8415V83.202H167.127V83.8415C167.127 84.5618 167.603 85.0395 168.322 85.0395\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M203.104 112.154V133.057C203.104 133.616 202.627 134.093 202.07 134.093H173.499C172.942 134.093 172.465 133.616 172.465 133.057V112.154C172.465 111.595 172.942 111.117 173.499 111.117H202.07C202.627 111.117 203.104 111.522 203.104 112.154Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M200.559 113.197H175.325C175.01 113.197 174.849 113.44 174.849 113.675V130.984C174.849 131.3 175.091 131.462 175.325 131.462H200.479C200.794 131.462 200.955 131.22 200.955 130.984V113.675C201.036 113.433 200.794 113.197 200.559 113.197Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M168.403 134.814H206.925C207.643 134.814 208.12 134.336 208.12 133.616V132.976H167.127V133.616C167.127 134.336 167.603 134.814 168.322 134.814\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M90.2587 88.7954C90.0167 89.1996 89.6867 89.5304 89.3274 89.7288C88.924 89.9714 88.4767 90.0522 88.0294 90.1331H64.4234C63.976 90.1331 63.5287 90.0081 63.1254 89.8097C62.722 89.5671 62.392 89.2364 62.2307 88.8762C62.0694 88.5896 61.9447 88.1853 61.9447 87.8619C61.9447 87.5385 61.9887 87.1269 62.1867 86.8476C63.3234 85.091 72.6294 69.9059 72.7467 69.825L72.908 69.5825V54.7575H79.3247V69.3326L79.486 69.5751C79.53 69.7001 87.648 82.7243 90.09 86.5904C90.2954 86.9138 90.4127 87.2813 90.4934 87.6488C90.5007 88.0604 90.42 88.472 90.2587 88.7954Z\" fill=\"white\"/>\r\n            <path d=\"M80.2634 62.4529H72.2627V69.4134C72.2627 69.4134 62.7954 84.7234 61.8641 86.4286C60.9327 88.1779 61.6221 91.0665 65.2741 91.0665H87.7801C90.2587 91.0665 92.6567 89.0305 90.4201 85.3702C88.1834 81.6658 80.2634 68.965 80.2634 68.965V62.4529Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M78.518 78.2114C79.6986 78.2114 80.586 77.2779 80.586 76.1387C80.586 74.9994 79.6546 74.066 78.518 74.066C77.3813 74.066 76.45 74.9994 76.45 76.1387C76.45 77.2779 77.3373 78.2114 78.518 78.2114Z\" fill=\"white\"/>\r\n            <path d=\"M73.3554 81.144C74.2867 81.144 75.1447 80.3722 75.1447 79.3506C75.1447 78.3363 74.3747 77.5572 73.3554 77.5572C72.424 77.5572 71.566 78.3289 71.566 79.3506C71.5734 80.3649 72.424 81.144 73.3554 81.144Z\" fill=\"white\"/>\r\n            <path d=\"M77.5793 86.5536C78.188 86.5536 78.716 86.0685 78.716 85.4143C78.716 84.8043 78.232 84.2751 77.5793 84.2751C76.9266 84.2751 76.4426 84.7602 76.4426 85.4143C76.4426 86.0685 76.9706 86.5536 77.5793 86.5536Z\" fill=\"white\"/>\r\n            <path d=\"M75.592 67.9067C76.2007 67.9067 76.7287 67.4216 76.7287 66.7674C76.7287 66.1574 76.2447 65.6282 75.592 65.6282C74.9833 65.6282 74.4553 66.1133 74.4553 66.7674C74.492 67.4216 74.9833 67.9067 75.592 67.9067Z\" fill=\"white\"/>\r\n            <path d=\"M90.2587 88.7954C90.0167 89.1996 89.6867 89.5304 89.3274 89.7288C88.924 89.9714 88.4767 90.0522 88.0294 90.1331H64.4234C63.976 90.1331 63.5287 90.0081 63.1254 89.8097C62.722 89.5671 62.392 89.2364 62.2307 88.8762C62.0694 88.5896 61.9447 88.1853 61.9447 87.8619C61.9447 87.5385 61.9887 87.1269 62.1867 86.8476C63.3234 85.091 72.6294 69.9059 72.7467 69.825L72.908 69.5825V54.7575H79.3247V69.3326L79.486 69.5751C79.53 69.7001 87.648 82.7243 90.09 86.5904C90.2954 86.9138 90.4127 87.2813 90.4934 87.6488C90.5007 88.0604 90.42 88.472 90.2587 88.7954Z\" fill=\"white\"/>\r\n            <path d=\"M80.872 70.3909H71.2433L61.6953 86.311C60.478 88.3837 61.9373 90.9489 64.3353 90.9489H87.648C90.288 91.1106 91.9526 88.2588 90.6106 86.0244L80.872 70.3909Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M91.718 85.6202C89.4813 82.0407 82.3386 70.5968 81.1946 68.8034V54.8016H70.9206V69.0533C69.74 71.0084 61.5413 84.2384 60.522 85.8701C60.1993 86.4801 59.95 87.171 59.95 87.906C59.95 88.641 60.1113 89.2878 60.434 89.942C60.8373 90.6329 61.3653 91.2429 62.0619 91.6104C62.7513 92.0147 63.5213 92.2205 64.2986 92.1837H88.022C88.792 92.1837 89.606 91.9779 90.2953 91.5737C90.9846 91.1694 91.5933 90.5594 91.96 89.9052C92.2826 89.2952 92.444 88.5602 92.4073 87.8325C92.3706 86.9211 92.1653 86.1861 91.718 85.6202Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M73.3554 81.144C74.2867 81.144 75.1447 80.3722 75.1447 79.3506C75.1447 78.3363 74.3747 77.5572 73.3554 77.5572C72.424 77.5572 71.566 78.3289 71.566 79.3506C71.5734 80.3649 72.424 81.144 73.3554 81.144Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M78.518 78.2114C79.6986 78.2114 80.586 77.2779 80.586 76.1387C80.586 74.9994 79.6546 74.066 78.518 74.066C77.3813 74.066 76.45 74.9994 76.45 76.1387C76.45 77.2779 77.3373 78.2114 78.518 78.2114Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M77.5793 86.5536C78.188 86.5536 78.716 86.0685 78.716 85.4143C78.716 84.8043 78.232 84.2751 77.5793 84.2751C76.9266 84.2751 76.4426 84.7602 76.4426 85.4143C76.4426 86.0685 76.9706 86.5536 77.5793 86.5536Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M70.7594 54.6766V69.2884L70.1874 70.1851H79.6914V54.6766H70.7594Z\" fill=\"white\"/>\r\n            <path d=\"M70.7593 55.2867V57.6902H78.3933C78.7966 57.6902 79.0826 58.0136 79.0826 58.3811L79.1266 69.9426L79.2879 70.1852H82.1333L81.4806 69.2076V55.3676L70.7593 55.2867Z\" fill=\"#FAF9F8\"/>\r\n            <path d=\"M83.1454 52.9274H69.2561C68.8087 52.9274 68.4054 53.3316 68.4054 53.78V54.5517C68.4054 55.0001 68.7281 55.3235 69.1754 55.3235H83.1894C83.6367 55.3235 83.9594 55.0001 83.9594 54.5517V53.78C83.9594 53.3316 83.5927 52.9274 83.1454 52.9274Z\" fill=\"white\"/>\r\n        </svg>),\r\n    logo: (<svg width=\"586\" height=\"586\" viewBox=\"0 0 586 586\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M490.805 173.353H483.482C494.466 89.1678 435.885 15.9636 355.335 1.3228C271.124 -9.65782 197.897 48.9055 186.913 133.09C168.606 125.77 150.3 122.11 131.993 122.11C62.4274 114.789 3.84579 166.032 0.184447 235.576C-3.4769 305.12 47.782 363.683 117.348 367.344C117.348 367.344 150.3 367.344 197.897 367.344L293.092 220.935V129.43H274.785C263.801 129.43 256.479 122.11 256.479 111.129C256.479 100.148 263.801 92.828 274.785 92.828H329.706H384.626C395.61 92.828 402.933 103.809 402.933 111.129C402.933 122.11 395.61 129.43 384.626 129.43H366.319V220.935L461.514 367.344C479.821 367.344 487.144 367.344 487.144 367.344C542.064 367.344 586 323.421 586 268.518C586 217.275 542.064 173.353 490.805 173.353Z\" fill=\"white\"/>\r\n            <path d=\"M461.514 444.207L373.642 312.439H282.108L197.897 444.207C194.236 451.527 197.897 458.848 205.22 458.848H454.192C461.514 458.848 465.176 451.527 461.514 444.207Z\" fill=\"#0078D4\"/>\r\n        </svg>),\r\n    'empty-state': (<svg width=\"218\" height=\"146\" viewBox=\"0 0 218 146\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M171.131 73.9021H44.7637V80.6601H171.131V73.9021Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M173.311 74.6287H167.279V129.419H173.311V74.6287Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M50.6485 74.6287H44.6172V129.419H50.6485V74.6287Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M79.861 21.7273C84.1483 23.6893 85.093 26.9593 82.1137 30.0113C78.553 33.572 74.9196 32.5546 75.283 28.9213C75.6463 25.3606 78.8437 21.2913 79.861 21.7273Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M136.688 57.0435H124.625V69.1061H136.688V57.0435Z\" fill=\"#C2C2C2\"/>\r\n            <path d=\"M147.732 68.4519H113.869V71.6492H147.732V68.4519Z\" fill=\"#C2C2C2\"/>\r\n            <path d=\"M163.138 15.26H96.0664V61.4033H163.138V15.26Z\" fill=\"#E6E6E6\"/>\r\n            <path d=\"M159.287 19.1841H100.281V57.2614H159.287V19.1841Z\" stroke=\"white\" strokeWidth=\"1.5123\" strokeMiterlimit=\"10\" strokeDasharray=\"3.02 3.02\"/>\r\n            <path d=\"M181.74 71.2859H35.6074V75.1372H181.74V71.2859Z\" fill=\"#939393\"/>\r\n            <path d=\"M129.711 43.3093C129.929 43.4546 130.074 43.7453 130.219 43.9633C130.365 44.1813 130.365 44.4719 130.365 44.7626C130.365 45.0533 130.292 45.3439 130.219 45.5619C130.074 45.8526 129.929 46.0706 129.711 46.2159C129.275 46.5793 128.693 46.7973 128.039 46.7973C127.458 46.7973 126.877 46.5793 126.368 46.2159C126.15 45.9979 126.005 45.7799 125.859 45.5619C125.714 45.3439 125.714 45.0533 125.714 44.7626C125.714 44.4719 125.787 44.1813 125.859 43.9633C126.005 43.7453 126.15 43.4546 126.368 43.3093C126.804 42.9459 127.385 42.7279 128.039 42.7279C128.693 42.6553 129.275 42.8733 129.711 43.3093ZM133.271 30.8833C132.981 30.3019 132.617 29.8659 132.109 29.5026C131.6 29.1393 131.019 28.8486 130.365 28.7033C129.638 28.5579 128.911 28.4126 128.185 28.4126C127.385 28.4126 126.586 28.4853 125.859 28.7033C125.133 28.9213 124.406 29.1393 123.752 29.5753V33.2813C124.333 32.7726 124.987 32.3366 125.714 32.0459C126.368 31.7553 127.022 31.6826 127.749 31.6099C128.039 31.6099 128.33 31.6826 128.548 31.7553C128.766 31.8279 128.984 31.9733 129.202 32.1186C129.347 32.2639 129.493 32.4819 129.565 32.6999C129.638 32.9179 129.711 33.1359 129.711 33.4266C129.711 33.7173 129.638 34.0079 129.565 34.2259C129.493 34.4439 129.347 34.7346 129.202 34.9526C129.057 35.1706 128.839 35.4613 128.621 35.6066C128.403 35.8246 128.112 36.1153 127.821 36.3333C127.531 36.5513 127.313 36.8419 127.022 37.0599C126.804 37.2779 126.586 37.5686 126.441 37.8593C126.295 38.1499 126.15 38.4406 126.077 38.7313C126.005 39.0946 125.932 39.4579 125.932 39.7486C125.932 40.0393 125.932 40.2573 126.005 40.5479C126.077 40.7659 126.077 41.0566 126.223 41.2746H129.493C129.42 41.1293 129.347 40.9113 129.275 40.7659C129.202 40.5479 129.202 40.3299 129.202 40.1846C129.202 39.8939 129.202 39.6759 129.347 39.3853C129.42 39.1673 129.565 38.9493 129.711 38.7313C129.856 38.5133 130.074 38.2953 130.292 38.1499C130.51 37.9319 130.801 37.7139 131.019 37.4959C131.382 37.2053 131.818 36.8419 132.181 36.4786C132.472 36.1879 132.763 35.8246 132.981 35.4613C133.199 35.0979 133.344 34.7346 133.489 34.2986C133.635 33.8626 133.635 33.3539 133.635 32.9179C133.707 32.1913 133.562 31.5373 133.271 30.8833Z\" fill=\"#797673\"/>\r\n            <path d=\"M69.4692 129.274L72.2305 128.184C72.9572 127.893 72.8845 126.731 72.8845 126.731C72.9572 126.077 73.3205 125.568 74.2652 125.568C74.9192 125.568 75.4279 126.077 75.5732 126.658V129.201C75.5732 129.71 75.1372 130.146 74.6285 130.146H69.6872C69.1785 130.291 68.9605 129.565 69.4692 129.274Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M76.9557 95.3386C77.3917 83.4939 77.9004 66.8532 77.755 65.4726C77.6097 56.5346 67.945 59.9499 65.765 68.1612C64.3117 73.5386 65.1837 84.0752 66.9277 95.9926C67.291 98.4632 69.253 100.28 71.869 100.353C74.485 100.425 76.8104 98.1726 76.9557 95.3386Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M66.9985 96.4287C68.4518 105.803 70.5592 116.557 72.9572 127.821C73.1752 128.475 73.6112 128.983 74.2652 128.983C74.9918 128.983 75.5732 128.475 75.6458 127.748C75.6458 127.748 76.3725 111.18 77.0265 95.8474C77.0992 93.0861 74.9918 90.7607 72.2305 90.6154C68.9605 90.5427 66.5625 93.3767 66.9985 96.4287Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M77.7544 95.4113C77.2458 83.5666 76.6644 67.4346 76.8098 66.054C76.8824 57.116 87.1284 60.0226 88.7998 68.1613C89.9624 73.6113 89.4538 84.0753 87.7098 95.9926C87.3464 98.4633 85.4571 100.28 82.8411 100.425C80.2251 100.425 77.8271 98.2453 77.7544 95.4113Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M85.3833 129.274L82.622 128.257C81.8953 127.966 81.968 126.803 81.968 126.803C81.8953 126.149 81.532 125.641 80.5873 125.641C79.9333 125.641 79.4246 126.149 79.2793 126.731V129.274C79.2793 129.783 79.7153 130.219 80.224 130.219H85.1653C85.6013 130.291 85.8193 129.565 85.3833 129.274Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M87.7103 96.4287C86.2569 105.803 84.2223 116.557 81.8969 127.821C81.6789 128.475 81.3156 128.983 80.5889 128.983C79.8623 128.983 79.2809 128.475 79.2082 127.748C79.2082 127.748 78.4089 111.18 77.7549 95.8474C77.6096 93.0861 79.7896 90.7607 82.5509 90.6154C85.6756 90.5427 88.1463 93.3041 87.7103 96.4287Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M102.969 40.0394L103.332 41.6381L105.585 42.0741C106.093 42.1468 106.675 42.2194 107.256 42.2194C107.765 42.2194 108.201 42.2194 108.564 42.1468C108.782 42.0741 109.145 42.0014 109.727 41.9288C110.235 41.7834 110.526 41.7108 110.671 41.6381C110.889 41.4928 110.962 41.2021 110.962 40.9114C111.107 40.8388 111.325 40.6934 111.543 40.6208C111.689 40.5481 111.834 40.4028 111.907 40.3301C111.979 40.0394 111.834 39.8941 111.543 39.8941L107.91 39.6761L108.491 39.2401C108.927 38.9494 109.291 38.7314 109.509 38.5134C109.727 38.3681 109.727 38.1501 109.654 38.0774C109.581 37.9321 109.363 37.9321 109.145 38.0048C108.419 38.1501 107.765 38.3681 107.183 38.5861C106.82 38.7314 106.311 38.8768 105.657 39.0948L102.969 40.0394Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M79.498 37.1326V33.0632H75.5013V37.0599C75.5013 38.0046 75.356 38.2952 74.4113 38.7312C73.176 39.3126 75.574 40.7659 77.4633 40.7659C79.3527 40.7659 81.8233 39.1672 80.806 38.8039C80.0067 38.5132 79.4253 38.2952 79.498 37.1326Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M79.5713 33.572H75.502V39.7487H79.5713V33.572Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M88.4352 66.4901C88.0719 65.2548 87.2726 63.1474 85.5286 59.5868C83.9299 56.3168 85.5286 52.3928 86.2552 48.8321C86.9819 47.8148 87.4179 46.7248 87.4179 45.5621C87.4179 41.7108 82.9852 38.5134 77.5352 38.5134C72.0852 38.5134 67.6526 41.6381 67.6526 45.5621C67.6526 46.7974 68.0886 47.9601 68.8879 48.9774C69.6872 52.5381 70.9952 56.6801 69.1786 59.8774C67.3619 63.1474 66.6352 65.1094 66.1992 66.4901C66.1992 66.4174 88.4352 66.4901 88.4352 66.4901Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M77.3914 40.4026C79.3533 40.4026 81.0973 40.0393 82.6233 39.4579C81.17 38.8039 79.426 38.3679 77.5367 38.3679C75.6474 38.3679 73.8307 38.8039 72.3047 39.4579C73.8307 40.1119 75.5747 40.4026 77.3914 40.4026Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M102.969 40.0393C102.315 40.33 102.097 40.6206 100.935 41.638C99.7722 42.6553 95.0488 47.4513 95.0488 47.4513L97.3742 50.576L103.478 42.292C103.696 42.0013 103.987 41.9286 104.277 41.9286L105.585 42.074C105.658 42.074 103.551 39.7486 102.969 40.0393Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M96.7197 45.4894C96.7197 45.4894 94.3944 47.6694 93.4497 48.3961C93.0137 48.7594 92.6504 48.3961 91.5604 47.4514C90.4704 46.4341 85.6744 41.3474 84.3664 40.4754C83.0584 39.6034 78.9891 43.5274 82.9857 48.1781C86.0377 51.7388 90.4704 54.1368 92.3597 55.0814C92.8684 55.2994 93.5224 55.2994 93.9584 54.9361C95.8477 53.4828 98.7544 50.6488 100.135 48.7594C99.0451 47.6694 96.7197 45.4894 96.7197 45.4894Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M51.7397 40.0394L51.3764 41.6381L49.1237 42.0741C48.6151 42.1468 48.0337 42.2194 47.4524 42.2194C46.9437 42.2194 46.5077 42.2194 46.1444 42.1468C45.9264 42.0741 45.5631 42.0014 44.9817 41.9288C44.4731 41.7834 44.1824 41.7108 44.0371 41.6381C43.8191 41.4928 43.7464 41.2021 43.7464 40.9114C43.6011 40.8388 43.3831 40.6934 43.1651 40.6208C43.0197 40.5481 42.8744 40.4028 42.8017 40.3301C42.7291 40.0394 42.8744 39.8941 43.1651 39.8941L46.7984 39.6761L46.2897 39.2401C45.8537 38.9494 45.4904 38.7314 45.2724 38.5134C45.0544 38.3681 45.0544 38.1501 45.1271 38.0774C45.1997 37.9321 45.4177 37.9321 45.6357 38.0048C46.3624 38.1501 47.0164 38.3681 47.5977 38.5861C47.9611 38.7314 48.4697 38.8768 49.1237 39.0948L51.7397 40.0394Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M51.739 40.0393C52.393 40.33 52.611 40.6206 53.7737 41.638C54.9364 42.6553 59.6597 47.4513 59.6597 47.4513L57.3344 50.576L51.2304 42.292C51.0124 42.0013 50.7217 41.9286 50.431 41.9286L49.123 42.074C49.123 42.074 51.2304 39.7486 51.739 40.0393Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M58.0618 45.4894C58.0618 45.4894 60.3872 47.6694 61.3318 48.3961C61.7678 48.7594 62.1312 48.3961 63.2212 47.4514C64.3111 46.4341 69.1072 41.3474 70.4152 40.4754C71.7232 39.6034 75.7925 43.5274 71.7958 48.1781C68.7438 51.7388 64.3112 54.1368 62.4218 55.0814C61.9132 55.2994 61.2592 55.2994 60.8232 54.9361C58.9338 53.4828 56.0272 50.6488 54.6465 48.7594C55.7365 47.6694 58.0618 45.4894 58.0618 45.4894Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M82.3324 28.6306C82.5504 29.3573 83.0591 30.1566 83.1317 30.3746C83.3497 30.8106 83.2044 30.9559 82.6231 31.3193C81.7511 31.7553 82.3324 28.6306 82.3324 28.6306Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M78.1896 35.5341C79.8609 35.5341 81.6776 35.9701 82.4043 32.8454C83.2036 29.3574 81.9683 29.2847 82.4769 27.4681C82.9129 25.9421 81.3869 22.8174 80.0789 22.5994C78.7709 22.3814 74.4109 28.2674 74.8469 31.6101C75.3556 34.9527 78.1896 35.5341 78.1896 35.5341Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M81.6051 23.0353C83.4944 26.16 81.1691 27.9767 79.7884 28.994C78.3351 30.0113 76.5184 33.7173 78.1897 36.624C80.6604 40.9113 79.7157 46.5067 76.3731 49.8493C73.0304 53.192 64.0198 53.3373 64.6011 46.7247C64.9644 42.3647 67.2897 40.0393 68.5977 38.586C69.2517 37.8593 69.5424 36.9147 69.3244 35.8973C68.6704 33.136 67.7984 27.3953 71.2864 23.544C74.6291 19.7653 80.3697 21.146 81.6051 23.0353Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M80.2968 31.8281H79.3522C78.4802 31.8281 77.8262 31.1015 77.8262 30.3021C77.8262 29.4301 78.5528 28.7761 79.3522 28.7761H80.2968V31.8281Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M80.5604 32.1705C80.57 31.5285 80.0898 31.0007 79.4879 30.9917C78.8859 30.9827 78.3902 31.4959 78.3806 32.138C78.371 32.78 78.8512 33.3078 79.4532 33.3168C80.0551 33.3258 80.5508 32.8126 80.5604 32.1705Z\" fill=\"white\"/>\r\n            <path d=\"M81.4595 27.468C80.1515 28.7033 80.0788 30.084 80.0788 30.084C80.0788 30.084 79.4248 29.3573 79.8608 28.2673C80.2968 26.9593 81.4595 27.468 81.4595 27.468Z\" fill=\"#9B643D\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(77.2203 34.9612) rotate(180) scale(4.52681 4.44943)\">\r\n                    <stop stopColor=\"#9B643D\"/>\r\n                    <stop offset=\"0.8819\" stopColor=\"#BA8A63\" stopOpacity=\"0.1178\"/>\r\n                    <stop offset=\"0.9997\" stopColor=\"#BF8F68\" stopOpacity=\"0\"/>\r\n                </radialGradient>\r\n            </defs>\r\n        </svg>),\r\n    'error-access': (<svg width=\"322\" height=\"322\" viewBox=\"0 0 322 322\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M120.026 274.444C120.026 274.444 119.35 277.616 119.301 280.079C119.253 282.043 123.004 283.347 127.545 285.472C130.877 287.018 129.943 289.997 126.788 290.013C123.391 290.029 117.047 290.029 113.763 290.061C110.237 290.093 109.287 288.161 109.207 285.279C109.126 282.413 109.207 274.702 109.207 274.702L120.026 274.444Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M108.82 271.482L101.044 187.89L136.754 187.745C133.695 239.346 124.808 265.686 121.668 273.558V273.575C119.913 277.889 120.235 280.53 120.235 280.53C120.235 280.53 117.241 277.567 116.419 275.78C115.582 276.617 113.634 280.948 113.634 280.948C113.634 280.948 112.185 278.437 111.573 276.424C110.752 278.227 107.983 279.709 107.983 279.709C107.983 279.709 108.933 276.167 108.82 271.482Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M86.248 274.444C86.248 274.444 86.9242 277.616 86.9725 280.079C87.0208 282.043 83.2695 283.347 78.7293 285.472C75.3966 287.018 76.3304 289.997 79.486 290.013C82.8187 290.029 89.2265 290.093 92.5109 290.061C95.8758 290.029 96.9867 288.161 97.0672 285.279C97.1477 282.413 97.0672 274.702 97.0672 274.702L86.248 274.444Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M97.454 271.482L105.23 187.89L69.5205 187.745C72.5795 239.346 81.4667 265.686 84.6062 273.558V273.575C86.3611 277.889 86.0391 280.53 86.0391 280.53C86.0391 280.53 89.0337 277.567 89.8548 275.78C90.692 276.617 92.6401 280.948 92.6401 280.948C92.6401 280.948 94.0891 278.437 94.7009 276.424C95.522 278.227 98.2912 279.709 98.2912 279.709C98.2912 279.709 97.3413 276.167 97.454 271.482Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M103.105 208.804C122.631 208.804 138.46 195.887 138.46 179.953C138.46 164.019 122.631 151.102 103.105 151.102C83.5783 151.102 67.749 164.019 67.749 179.953C67.749 195.887 83.5783 208.804 103.105 208.804Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M102.976 83.015C134.854 83.015 149.312 93.319 149.312 115.215C149.312 124.907 148.861 134.535 147.219 148.107C144.337 170.068 136.657 189.839 135.337 191.835C133.485 194.652 72.6273 194.652 70.7758 191.835C69.4556 189.839 61.5022 169.971 58.4915 147.93C57.1069 139.478 55.513 125.052 57.5416 115.666C61.1319 99.0345 71.0978 83.015 102.976 83.015Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M102.847 83.015L103.7 83.0311V193.944C103.636 193.944 103.572 193.944 103.507 193.944C102.976 193.944 102.445 193.944 101.913 193.944C101.35 193.944 100.786 193.944 100.239 193.944C100.094 193.944 99.949 193.944 99.8041 193.944C85.2819 193.847 71.6291 193.155 70.7758 191.851C69.4556 189.855 61.5022 169.987 58.4915 147.946C57.1069 139.494 55.513 125.068 57.5416 115.682C61.0192 99.5819 70.4699 84.0293 100.03 83.0794C100.126 83.0794 100.223 83.0794 100.319 83.0794C101.157 83.0311 101.994 83.015 102.847 83.015Z\" fill=\"url(#paint1_radial)\"/>\r\n            <path d=\"M30.7512 62.0688C23.7477 63.8559 17.2111 70.2798 17.2111 70.2798L22.0411 69.668C22.0411 69.668 16.4061 73.4354 14.4902 75.8504C15.9875 75.4962 20.6404 75.0615 20.6404 75.0615L30.7512 62.0688Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M33.9388 110.095C33.9388 110.095 32.361 109.805 30.59 109.355C32.7152 112.945 38.2053 116.68 38.2053 116.68C38.2053 116.68 36.8207 116.761 34.6794 116.664C37.1105 119.932 43.4217 124.022 43.4217 124.022C43.4217 124.022 41.9083 124.424 39.5738 124.408C42.4074 127.081 50.9726 129.544 50.9726 129.544C50.9726 129.544 49.3626 130.429 46.1104 131.138C46.1104 131.138 65.1889 136.644 79.3569 133.633C84.4928 132.539 90.16 120.238 60.2623 95.7017C53.7418 90.8717 46.3036 83.2242 40.572 74.3531C36.6597 69.1689 31.6848 66.9954 26.887 68.7503C21.0749 70.8916 17.4846 77.235 19.964 84.1258C26.0337 100.934 33.9227 110.047 33.9388 110.095Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M67.9742 84.1098C67.9742 84.1098 65.833 90.7752 66.155 93.6088C66.2033 97.4567 68.425 100.966 70.9366 104.186C71.8382 104.444 73.239 104.396 74.4626 104.573C79.9205 104.476 97.228 104.879 102.686 104.621C115.952 104.75 128.929 104.782 131.714 104.83C132.938 104.653 134.065 104.428 134.966 104.17C137.478 100.966 139.442 97.6499 139.748 93.5927C140.07 90.7591 137.929 84.0937 137.929 84.0937C137.929 84.0937 139.925 85.1402 141.326 85.8969C140.617 81.9202 137.156 78.0401 137.156 78.0401C137.156 78.0401 138.75 78.3943 140.666 78.6036C137.575 74.7235 132.503 71.8255 132.503 71.8255C132.503 71.8255 135.465 72.1797 139.507 73.1779C137.88 71.0688 135.53 69.1851 133.727 67.9132C132.825 62.4553 130.539 58.5591 130.539 58.5591C130.539 58.5591 131.682 59.0582 133.26 59.6539C131.553 54.1316 126.691 49.7202 126.691 49.7202C126.691 49.7202 128.365 49.8168 130.635 50.3642C128.172 45.663 120.959 41.3804 120.959 41.3804C120.959 41.3804 123.407 41.477 126.321 41.8473C122.843 38.1121 115.662 35.9225 115.662 35.9225C115.662 35.9225 117.144 35.0531 120.138 34.6989C116.661 32.6542 109.029 32.9601 109.029 32.9601L112.298 30.8188C112.298 30.8188 106.373 29.8206 103.104 31.9941C103.104 31.9941 103.024 32.0424 102.943 32.0907C102.863 32.0424 102.782 31.9941 102.782 31.9941C99.5142 29.8206 93.5893 30.8188 93.5893 30.8188L96.8577 32.9601C96.8577 32.9601 89.2423 32.6381 85.7486 34.6989C88.7432 35.0692 90.2244 35.9225 90.2244 35.9225C90.2244 35.9225 83.0438 38.096 79.5662 41.8473C82.4803 41.477 84.9436 41.3965 84.9436 41.3965C84.9436 41.3965 77.7309 45.6791 75.2676 50.3803C77.5377 49.8329 79.212 49.7363 79.212 49.7363C79.212 49.7363 74.3498 54.1638 72.6432 59.67C74.2371 59.0743 75.3641 58.5752 75.3641 58.5752C75.3641 58.5752 73.0779 62.4714 72.1763 67.9293C70.3731 69.2173 68.0225 71.101 66.3964 73.194C70.4536 72.2119 73.4 71.8416 73.4 71.8416C73.4 71.8416 68.3284 74.7396 65.2372 78.6197C67.137 78.4265 68.747 78.0562 68.747 78.0562C68.747 78.0562 65.2855 81.9202 64.5771 85.913C65.9778 85.1563 67.9742 84.1098 67.9742 84.1098Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M103.523 60.6682H74.3497C74.9293 59.348 75.3801 58.5752 75.3801 58.5752C75.3801 58.5752 74.237 59.0743 72.6592 59.67C74.3658 54.1477 79.228 49.7363 79.228 49.7363C79.228 49.7363 77.5536 49.8329 75.2835 50.3803C77.7468 45.6791 84.9596 41.3965 84.9596 41.3965C84.9596 41.3965 82.4802 41.477 79.5661 41.8473C83.0437 38.1121 90.2243 35.9225 90.2243 35.9225C90.2243 35.9225 88.7431 35.0531 85.7485 34.6989C89.2261 32.6542 96.8575 32.9601 96.8575 32.9601L93.5892 30.8188C93.5892 30.8188 99.514 29.8206 102.782 31.9941C102.782 31.9941 102.863 32.0424 102.927 32.0907C102.927 32.0907 101.349 36.7114 102.879 45.0995C103.41 47.9653 103.555 54.0028 103.523 60.6682Z\" fill=\"url(#paint2_radial)\"/>\r\n            <path d=\"M67.5237 43.3768C67.5237 43.3768 74.5272 35.2302 75.0907 34.7472C76.5075 33.5075 82.6416 34.0066 84.0584 34.2803C87.0208 34.8599 84.3643 37.4842 84.3643 37.4842C84.3643 37.4842 85.5718 37.7579 86.2319 38.901C86.892 40.0441 84.6541 40.8813 84.6541 40.8813C84.6541 40.8813 86.7149 42.4269 85.9743 43.1514C85.2337 43.8759 83.2212 43.5861 83.2212 43.5861C83.2212 43.5861 85.3142 45.9045 83.8974 46.4197C82.4806 46.9349 80.5808 46.0977 80.5808 46.0977L78.0531 46.3553C78.0531 46.3553 74.5433 50.6057 71.6131 51.5234C68.6829 52.4411 62.4522 53.2944 62.4522 53.2944L61.8887 45.4859C61.8887 45.4859 66.3645 44.2462 67.5237 43.3768Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M23.5227 68.5411C18.6444 73.7253 17.6301 81.2762 21.639 85.7842C25.6479 90.2922 33.0539 89.938 38.0449 84.8665C42.4885 80.3424 49.9106 65.7236 63.8854 55.5967C67.7011 53.8418 72.1447 53.3105 72.1447 53.3105L67.7977 51.4268L69.5043 47.5628L65.1734 46.0011L66.3648 41.5414C66.3648 41.5414 61.5187 44.1174 59.0715 45.2283C55.5295 46.4519 51.8748 48.0458 48.1396 50.01C34.2775 56.5949 26.4046 65.4821 23.5227 68.5411Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M168.97 113.009C168.97 113.009 170.564 113.203 172.367 113.541C170.033 110.079 164.317 106.698 164.317 106.698C164.317 106.698 165.702 106.537 167.827 106.505C165.203 103.398 158.65 99.7107 158.65 99.7107C158.65 99.7107 160.131 99.2277 162.466 99.0989C159.471 96.6034 150.761 94.6714 150.761 94.6714C150.761 94.6714 152.323 93.6893 155.51 92.7877C155.51 92.7877 136.126 88.4568 122.167 92.353C117.112 93.7537 112.201 106.392 143.564 129.029C150.374 133.456 158.263 140.621 164.526 149.122C168.761 154.048 173.864 155.916 178.533 153.871C184.201 151.376 186.358 143.954 183.476 137.24C176.408 120.802 169.002 113.074 168.97 113.009Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M140.07 175.88C140.07 175.88 130.297 171.42 129.589 171.211C127.769 170.679 122.424 173.69 121.249 174.543C118.802 176.314 122.312 177.586 122.312 177.586C122.312 177.586 121.329 178.343 121.201 179.647C121.072 180.951 123.471 180.79 123.471 180.79C123.471 180.79 122.247 183.044 123.213 183.398C124.179 183.753 125.886 182.642 125.886 182.642C125.886 182.642 124.952 185.62 126.465 185.508C127.979 185.379 129.347 183.817 129.347 183.817L131.746 182.996C131.746 182.996 136.721 185.395 139.764 184.992C142.807 184.606 148.088 180.694 148.088 180.694L144.803 173.175C144.787 173.191 141.487 176.186 140.07 175.88Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M181.817 152.937C185.923 147.125 185.939 139.156 181.544 134.841C177.245 130.607 169.662 132.329 165.427 138.061C161.66 143.165 156.363 158.685 143.966 170.679C140.424 172.95 136.109 174.093 136.109 174.093L140.666 175.348L139.506 179.422L144.014 180.356L143.467 184.944C143.467 184.944 147.911 181.708 150.165 180.275C153.497 178.568 156.894 176.475 160.308 173.996C173.139 165.527 179.386 156.383 181.817 152.937Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M82.2073 66.11C81.4667 66.6413 80.9837 67.8166 81.1447 69.4588C81.3057 71.1171 82.0624 72.0831 82.803 72.0831C83.6402 72.0831 83.1572 72.9525 81.8048 73.0813C79.7762 73.2745 77.973 71.7611 77.7798 69.7003C77.5866 67.6395 79.0517 65.788 81.0642 65.5948C82.0624 65.4982 82.6581 65.788 82.2073 66.11Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M122.022 62.1494C122.859 62.5197 123.552 63.5823 123.713 65.2245C123.874 66.8828 123.326 67.9776 122.618 68.1225C121.797 68.2835 122.441 69.0402 123.793 68.9114C125.822 68.7182 127.287 66.8667 127.078 64.8059C126.868 62.7451 125.065 61.2317 123.053 61.4249C122.054 61.5215 121.523 61.924 122.022 62.1494Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M131.457 80.7288C131.457 80.7288 129.863 71.7289 120.38 70.3443C120.316 70.3121 120.268 70.2638 120.203 70.2316C119.431 65.0474 118.786 60.7648 116.5 55.0171C113.49 47.4662 107.839 46.0011 100.706 51.1531C93.6061 46.79 87.0534 50.493 86.1357 58.5752C85.8459 61.0546 85.5239 68.4123 85.4434 73.8863C85.4273 73.9024 85.4112 73.9185 85.3951 73.9346C75.558 76.6877 76.7494 86.1545 76.7494 86.1545L79.3415 83.82C79.3415 83.82 78.1823 89.0042 79.6957 92.6589C80.5651 91.5802 81.4828 90.2117 81.4828 90.2117C81.4828 90.2117 83.4631 94.0918 87.2466 95.7984C87.15 94.1562 87.2144 92.6589 87.2627 92.031C91.8351 96.3136 98.5166 99.3887 105.617 98.6803C112.733 97.9719 118.69 93.6249 122.329 88.5051C122.49 89.0847 122.86 90.5659 123.101 92.2242C126.482 89.8092 127.658 85.6071 127.658 85.6071C127.658 85.6071 128.833 86.7663 129.895 87.6518C130.652 83.7717 128.495 78.9095 128.495 78.9095L131.457 80.7288Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M98.3069 67.4494C99.5359 67.3182 100.415 66.1152 100.27 64.7625C100.126 63.4098 99.0126 62.4197 97.7837 62.5509C96.5548 62.6822 95.6757 63.8851 95.8202 65.2378C95.9647 66.5905 97.078 67.5807 98.3069 67.4494Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M110.509 66.2278C111.738 66.0965 112.617 64.8935 112.473 63.5408C112.328 62.1881 111.215 61.198 109.986 61.3292C108.757 61.4605 107.878 62.6635 108.022 64.0162C108.167 65.3688 109.28 66.359 110.509 66.2278Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M106.373 71.101C99.4021 71.8738 99.9978 75.5768 101.64 77.7664C102.735 79.2476 104.522 78.5392 103.218 76.8809C102.542 76.0276 103.443 75.0616 104.441 75.77C105.44 76.4784 106.035 77.1707 106.985 77.058C107.935 76.9936 108.386 76.1725 109.223 75.287C110.06 74.4015 111.123 75.1743 110.64 76.1403C109.674 78.0401 111.574 78.3621 112.363 76.7038C113.49 74.2405 113.345 70.4892 106.373 71.101Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M112.556 82.6286C108.933 82.8218 100.255 85.108 96.8744 87.5874C94.0891 89.6321 97.0193 93.7215 99.8046 91.9666C104.152 89.2296 109.593 86.3316 112.958 85.3173C114.761 84.7699 114.536 82.532 112.556 82.6286Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M112.057 85.6232L111.348 83.8361C111.139 83.2243 110.221 83.015 110.092 83.9005L109.577 86.6375C110.463 86.235 111.284 85.8969 112.057 85.6232Z\" fill=\"white\"/>\r\n            <path d=\"M104.313 89.3101L100.223 87.9255C99.225 87.5552 98.9191 88.6178 99.4182 89.1813L101.06 91.1938C102.123 90.5498 103.218 89.9219 104.313 89.3101Z\" fill=\"white\"/>\r\n            <path d=\"M71.3232 116.326C71.3232 116.326 71.3232 110.353 73.0942 104.283C74.189 106.521 74.994 109.886 74.994 109.886L77.5378 104.686L80.2104 111.528L82.4161 105.426L85.459 112.719L88.0833 105.796L90.8847 113.46L93.4285 106.07L96.4714 113.911L99.6431 106.618L101.865 113.653L104.473 106.618L107.645 113.911L110.688 106.07L113.232 113.46L116.033 105.796L118.657 112.719L121.7 105.426L123.906 111.528L126.578 104.686L129.122 109.886C129.122 109.886 129.927 106.505 131.022 104.283C132.793 110.353 132.793 116.326 132.793 116.326L131.022 115.279C131.022 115.279 131.312 118.934 131.28 124.859C130.394 124.038 128.398 122.669 128.398 122.669C128.398 122.669 128.575 128.594 127.883 132.796C126.53 130.22 125.081 128.594 125.081 128.594C125.081 128.594 124.936 134.535 124.405 138.801C123.6 137.03 121.523 134.342 121.523 134.342C121.523 134.342 120.621 141.023 119.156 143.921C118.287 141.764 117.289 139.912 117.289 139.912C117.289 139.912 114.616 146.352 113.232 149.395C112.716 146.964 111.203 144.791 111.203 144.791C111.203 144.791 109.786 149.347 107.516 153.002C107.065 150.748 106.792 149.588 106.244 148.494C104.344 152.503 102.01 154.918 102.01 154.918V154.869C102.01 154.869 99.7719 152.486 97.856 148.494C97.3086 149.588 97.0349 150.748 96.5841 153.002C94.3301 149.347 92.8972 144.791 92.8972 144.791C92.8972 144.791 91.3838 146.964 90.8686 149.395C89.484 146.352 86.8114 139.912 86.8114 139.912C86.8114 139.912 85.8132 141.764 84.9438 143.921C83.4787 141.039 82.5771 134.342 82.5771 134.342C82.5771 134.342 80.5002 137.047 79.6952 138.801C79.1639 134.519 79.019 128.594 79.019 128.594C79.019 128.594 77.57 130.204 76.2176 132.796C75.5253 128.61 75.7024 122.669 75.7024 122.669C75.7024 122.669 73.706 124.038 72.8205 124.859C72.7722 118.934 73.0781 115.279 73.0781 115.279L71.3232 116.326Z\" fill=\"url(#paint3_linear)\"/>\r\n            <path d=\"M243.835 286.793V154.934C243.835 142.537 253.817 132.394 266.375 132.394C278.772 132.394 288.915 142.376 288.915 154.934V286.632H243.996V286.793H243.835Z\" fill=\"#6BA8F1\"/>\r\n            <path d=\"M39.6542 167.636L303.469 175.091C306.254 175.171 308.54 172.933 308.54 170.148V152.615C308.54 149.83 306.238 147.608 303.469 147.673L39.6542 154.966C36.9816 155.046 34.8564 157.236 34.8564 159.909V162.694C34.8564 165.366 36.9816 167.556 39.6542 167.636Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M231.325 290.963H301.634C304.596 290.963 306.383 287.662 304.741 285.183L299.67 277.503C298.977 276.457 297.818 275.829 296.562 275.829H236.477C235.237 275.829 234.078 276.44 233.386 277.487L228.234 285.167C226.576 287.63 228.347 290.963 231.325 290.963Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M266.375 170.873C271.688 170.873 276.035 166.526 276.035 161.213C276.035 155.9 271.688 151.553 266.375 151.553C261.062 151.553 256.715 155.9 256.715 161.213C256.715 166.526 261.062 170.873 266.375 170.873Z\" fill=\"#E86E58\"/>\r\n            <path d=\"M186.358 150.909L162.369 151.553L172.351 171.517L197.145 172.161L186.358 150.909Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M127.915 170.068L152.548 170.873L143.049 152.197L119.06 152.841L127.915 170.068Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M52.4054 154.773L38.2213 155.03C36.3537 155.063 34.8564 156.592 34.8564 158.46V163.756C34.8564 165.833 36.5147 167.54 38.5916 167.62L59.4894 168.297L52.4054 154.773Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M205.355 150.426L216.786 172.644L241.419 173.288L229.344 149.782L205.355 150.426Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M81.3854 168.941L106.018 169.424L97.8074 153.324L73.8184 154.129L81.3854 168.941Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M180.948 198.001C201.533 198.001 218.22 181.314 218.22 160.73C218.22 140.145 201.533 123.458 180.948 123.458C160.364 123.458 143.677 140.145 143.677 160.73C143.677 181.314 160.364 198.001 180.948 198.001Z\" fill=\"#E86E58\"/>\r\n            <path d=\"M203.698 169.713H158.199C156.364 169.713 154.883 168.232 154.883 166.397V156.254C154.883 154.418 156.364 152.937 158.199 152.937H203.682C205.517 152.937 206.998 154.418 206.998 156.254V166.397C207.015 168.232 205.517 169.713 203.698 169.713Z\" fill=\"white\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(175.845 146.955) rotate(180) scale(44.8105 48.7639)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(27.1904 150.481) rotate(180) scale(49.2881)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8979\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(113.81 35.5095) rotate(180) scale(16.8019 17.3144)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <linearGradient id=\"paint3_linear\" x1=\"102.051\" y1=\"154.902\" x2=\"102.051\" y2=\"104.298\" gradientUnits=\"userSpaceOnUse\">\r\n                    <stop offset=\"0.0643\" stopColor=\"#D4D3D1\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E1DFDD\"/>\r\n                </linearGradient>\r\n            </defs>\r\n        </svg>),\r\n    'error-failed': (<svg width=\"344\" height=\"259\" viewBox=\"0 0 344 259\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M160.495 252.052C208.945 252.052 248.215 212.782 248.215 164.332C248.215 115.882 208.945 76.6124 160.495 76.6124C112.045 76.4849 72.7754 115.882 72.7754 164.332C72.7754 212.782 112.045 252.052 160.495 252.052Z\" fill=\"#3E8EED\"/>\r\n            <path d=\"M214.479 177.095C213.484 171.6 208.716 166.258 208.716 166.258C208.716 166.258 210.921 166.755 213.561 167.035C209.289 161.668 202.302 157.677 202.302 157.677C202.302 157.677 206.382 158.174 211.98 159.538C209.736 156.631 206.497 154.043 203.985 152.258C202.736 144.723 199.599 139.355 199.599 139.355C199.599 139.355 201.168 140.044 203.361 140.872C201.002 133.261 194.295 127.153 194.295 127.153C194.295 127.153 196.59 127.281 199.727 128.033C196.323 121.556 186.378 115.64 186.378 115.64C186.378 115.64 189.782 115.768 193.798 116.265C188.991 111.101 179.085 108.079 179.085 108.079C179.085 108.079 181.125 106.881 185.256 106.384C180.449 103.553 169.93 103.987 169.93 103.987L174.444 101.029C174.444 101.029 166.258 99.6388 161.757 102.648C161.757 102.648 161.643 102.724 161.528 102.788C161.413 102.712 161.311 102.648 161.311 102.648C156.798 99.6516 148.625 101.029 148.625 101.029L153.138 103.987C153.138 103.987 142.62 103.54 137.813 106.384C141.944 106.881 143.984 108.079 143.984 108.079C143.984 108.079 134.064 111.101 129.245 116.252C133.274 115.755 136.665 115.627 136.665 115.627C136.665 115.627 126.72 121.543 123.316 128.02C126.453 127.268 128.748 127.141 128.748 127.141C128.748 127.141 122.028 133.248 119.682 140.86C121.875 140.044 123.444 139.342 123.444 139.342C123.444 139.342 120.294 144.723 119.058 152.245C116.559 154.018 113.307 156.619 111.063 159.526C116.661 158.161 120.741 157.664 120.741 157.664C120.741 157.664 113.754 161.668 109.482 167.023C112.109 166.742 114.327 166.245 114.327 166.245C114.327 166.245 109.546 171.587 108.564 177.082C110.49 176.024 113.244 174.583 113.244 174.583C113.244 174.583 110.286 183.789 110.732 187.703C111.153 193.313 113.868 197.865 117.324 202.302C118.573 202.659 120.116 202.952 121.799 203.207C125.637 203.131 143.538 203.092 161.859 202.914C169.395 203.271 193.275 202.697 200.823 202.837C202.519 202.582 204.444 202.659 205.694 202.302C209.149 197.865 212.222 193.007 212.286 187.703C212.745 183.802 209.774 174.583 209.774 174.583C209.774 174.583 212.553 176.037 214.479 177.095Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M160.712 142.249H201.002C200.199 140.413 199.587 139.355 199.587 139.355C199.587 139.355 201.155 140.044 203.348 140.872C200.99 133.261 194.283 127.153 194.283 127.153C194.283 127.153 196.578 127.281 199.715 128.033C196.31 121.556 186.365 115.64 186.365 115.64C186.365 115.64 189.77 115.768 193.786 116.265C188.979 111.101 179.072 108.079 179.072 108.079C179.072 108.079 181.112 106.881 185.243 106.384C180.437 103.553 169.918 103.987 169.918 103.987L174.431 101.029C174.431 101.029 166.246 99.6388 161.745 102.648C161.745 102.648 161.643 102.724 161.541 102.775C161.541 102.775 163.721 109.15 161.605 120.727C160.865 124.718 160.661 133.044 160.712 142.249Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M160.495 252.052C197.011 252.052 228.312 229.727 241.508 197.992C239.711 196.858 238.41 196.131 238.41 196.131C238.41 196.131 239.978 195.608 242.541 195.366C242.63 195.124 242.732 194.894 242.822 194.652C238.104 191.515 227.522 189.182 227.522 189.182C227.522 189.182 229.676 187.831 234.075 186.581C234.075 186.581 222.842 184.082 209.684 183.776C199.191 176.598 183.305 173.104 161.54 173.104C161.489 173.104 161.438 173.104 161.375 173.104C160.189 173.104 159.029 173.13 157.894 173.155C157.881 173.155 157.868 173.155 157.843 173.155C157.728 173.155 157.601 173.155 157.486 173.168C156.198 173.206 154.936 173.27 153.699 173.359C153.24 173.385 152.794 173.436 152.335 173.474C151.57 173.538 150.805 173.589 150.065 173.665C149.555 173.716 149.071 173.78 148.561 173.844C147.898 173.92 147.222 173.997 146.585 174.086C146.075 174.163 145.577 174.239 145.08 174.328C144.468 174.43 143.856 174.52 143.27 174.622C142.772 174.711 142.288 174.813 141.791 174.915C141.217 175.03 140.643 175.132 140.095 175.259C139.61 175.361 139.139 175.489 138.667 175.603C138.131 175.731 137.596 175.858 137.073 175.999C136.601 176.126 136.155 176.266 135.696 176.394C135.199 176.534 134.689 176.687 134.192 176.84C133.745 176.98 133.312 177.133 132.878 177.286C132.407 177.452 131.922 177.605 131.463 177.784C131.042 177.937 130.622 178.102 130.214 178.268C129.767 178.447 129.308 178.625 128.875 178.804C128.467 178.982 128.072 179.161 127.676 179.339C127.256 179.53 126.822 179.722 126.414 179.926C126.032 180.117 125.649 180.308 125.279 180.499C124.871 180.703 124.476 180.92 124.081 181.124C123.711 181.328 123.354 181.532 123.01 181.736C122.627 181.953 122.258 182.182 121.888 182.412C121.544 182.629 121.199 182.845 120.868 183.062C120.511 183.292 120.154 183.534 119.81 183.776C119.746 183.814 119.695 183.853 119.631 183.891C103.553 183.075 87.7307 186.607 87.7307 186.607C92.1294 187.856 94.2842 189.208 94.2842 189.208C94.2842 189.208 82.6562 191.783 78.3467 195.149C78.3722 195.213 78.3977 195.277 78.4232 195.328C81.4704 195.532 83.4084 196.156 83.4084 196.156C83.4084 196.156 81.7892 197.074 79.6599 198.439C92.9454 229.931 124.132 252.052 160.495 252.052Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M132.905 149.759C131.885 150.499 131.222 152.105 131.451 154.387C131.681 156.67 132.726 158.008 133.733 158.021C134.881 158.021 134.231 159.207 132.356 159.398C129.564 159.679 127.078 157.588 126.785 154.732C126.504 151.876 128.531 149.338 131.324 149.058C132.701 148.918 133.517 149.313 132.905 149.759Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M187.857 144.289C189.004 144.812 189.973 146.253 190.203 148.535C190.432 150.817 189.668 152.335 188.686 152.539C187.564 152.768 188.431 153.801 190.318 153.622C193.11 153.342 195.137 150.805 194.857 147.949C194.576 145.093 192.077 143.002 189.285 143.282C187.895 143.422 187.168 143.971 187.857 144.289Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M200.875 169.942C200.875 169.942 198.669 157.524 185.588 155.611C185.498 155.56 185.435 155.509 185.345 155.458C184.287 148.318 183.395 142.402 180.22 134.459C176.063 124.03 168.273 122.015 158.417 129.13C148.625 123.099 139.586 128.224 138.298 139.381C137.903 142.798 137.456 152.972 137.342 160.52C137.316 160.546 137.291 160.571 137.265 160.597C123.686 164.396 125.331 177.465 125.331 177.465L128.914 174.226C128.914 174.226 127.307 181.392 129.398 186.428C130.584 184.936 131.872 183.062 131.872 183.062C131.872 183.062 134.6 188.417 139.828 190.776C139.7 188.506 139.79 186.441 139.841 185.574C146.152 191.477 155.383 195.723 165.175 194.754C174.992 193.772 183.229 187.767 188.24 180.703C188.456 181.507 188.966 183.547 189.298 185.842C193.964 182.501 195.584 176.713 195.584 176.713C195.584 176.713 197.203 178.306 198.669 179.53C199.715 174.175 196.731 167.469 196.731 167.469L200.875 169.942Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M155.112 151.612C156.806 151.431 158.017 149.763 157.817 147.886C157.617 146.01 156.081 144.636 154.386 144.817C152.692 144.998 151.481 146.665 151.681 148.542C151.882 150.418 153.418 151.793 155.112 151.612Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M171.98 149.942C173.675 149.761 174.886 148.093 174.685 146.217C174.485 144.34 172.949 142.966 171.254 143.147C169.56 143.328 168.349 144.995 168.549 146.872C168.75 148.748 170.286 150.123 171.98 149.942Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M166.259 156.657C156.645 157.715 157.461 162.828 159.718 165.875C161.235 167.915 163.709 166.946 161.885 164.651C160.955 163.478 162.191 162.139 163.568 163.121C164.933 164.09 165.774 165.059 167.075 164.906C168.375 164.804 169.013 163.695 170.16 162.471C171.32 161.234 172.787 162.305 172.111 163.644C170.785 166.258 173.399 166.704 174.482 164.422C176.089 160.966 175.885 155.803 166.259 156.657Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M174.801 172.569C169.803 172.837 157.818 175.999 153.164 179.416C149.314 182.233 153.368 187.869 157.206 185.459C163.211 181.672 170.721 177.669 175.362 176.279C177.836 175.514 177.53 172.429 174.801 172.569Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M174.1 176.7L173.131 174.226C172.85 173.385 171.575 173.092 171.397 174.316L170.695 178.09C171.894 177.541 173.041 177.07 174.1 176.7Z\" fill=\"white\"/>\r\n            <path d=\"M163.416 181.774L157.755 179.875C156.39 179.352 155.944 180.844 156.658 181.621L158.928 184.388C160.381 183.496 161.898 182.616 163.416 181.774Z\" fill=\"white\"/>\r\n            <path d=\"M200.263 202.468C198.745 205.553 197.636 210.207 197.636 210.207L194.13 203.029L190.445 212.464L187.411 204.036L183.203 214.108L179.582 204.546L175.732 215.116L172.225 204.916L168.018 215.74L163.632 205.668L160.036 215.383L156.976 205.668L152.59 215.74L148.383 204.916L144.877 215.116L141.026 204.546L137.405 214.108L133.198 204.036L130.163 212.464L126.478 203.029L122.972 210.207C122.972 210.207 121.863 205.553 120.346 202.468C117.885 210.832 117.885 219.081 117.885 219.081L120.346 217.627C120.346 217.627 119.938 222.664 119.989 230.849C121.213 229.714 123.967 227.827 123.967 227.827C123.967 227.827 123.724 236.013 124.668 241.801C126.529 238.244 128.518 236.013 128.518 236.013C128.518 236.013 128.646 241.151 129.054 246.226C129.781 246.506 130.495 246.774 131.234 247.029C132.331 245.371 133.427 243.943 133.427 243.943C133.427 243.943 133.657 245.69 134.09 247.998C142.429 250.624 151.303 252.052 160.508 252.052C169.561 252.052 178.282 250.675 186.493 248.138C186.939 245.767 187.194 243.943 187.194 243.943C187.194 243.943 188.341 245.435 189.463 247.144C190.165 246.901 190.866 246.646 191.554 246.391C191.988 241.266 192.103 236.013 192.103 236.013C192.103 236.013 194.092 238.244 195.953 241.801C196.897 236.013 196.654 227.827 196.654 227.827C196.654 227.827 199.396 229.714 200.632 230.849C200.696 222.664 200.288 217.627 200.288 217.627L202.736 219.081C202.711 219.081 202.711 210.844 200.263 202.468Z\" fill=\"url(#paint1_linear)\"/>\r\n            <path d=\"M271.408 15.0426L323.135 102.673C326.858 109.061 322.332 116.902 315.026 116.902L213.166 117.298C205.848 117.298 201.334 109.456 204.917 103.196L255.19 15.1573C258.645 8.93534 267.685 8.66759 271.408 15.0426Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M263.987 104.956C262.1 104.956 260.494 104.344 259.168 103.132C257.842 101.921 257.179 100.442 257.179 98.7209C257.179 96.9231 257.842 95.3931 259.168 94.1436C260.494 92.8814 262.1 92.2566 263.987 92.2566C265.81 92.2566 267.391 92.8814 268.73 94.1436C270.069 95.4059 270.732 96.9359 270.732 98.7209C270.732 100.455 270.056 101.921 268.73 103.132C267.391 104.344 265.81 104.956 263.987 104.956ZM269.227 36.2714L268.335 84.0839H259.359L258.135 36.2714H269.227Z\" fill=\"white\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(146.454 107.516) scale(23.1936 23.901)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <linearGradient id=\"paint1_linear\" x1=\"160.293\" y1=\"252.054\" x2=\"160.293\" y2=\"202.473\" gradientUnits=\"userSpaceOnUse\">\r\n                    <stop offset=\"0.0643\" stopColor=\"#D4D3D1\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E1DFDD\"/>\r\n                </linearGradient>\r\n            </defs>\r\n        </svg>),\r\n    'error-general': (<svg width=\"304\" height=\"304\" viewBox=\"0 0 304 304\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M140.752 286.778C207.632 286.778 261.744 270.058 261.744 249.386C261.744 228.714 207.632 211.994 140.752 211.994C74.0238 211.994 19.7598 228.714 19.7598 249.386C19.7598 270.058 73.8718 286.778 140.752 286.778Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M140.752 224.762C200.488 224.762 250.192 238.29 260.072 255.77C261.136 253.642 261.744 251.514 261.744 249.386C261.744 228.562 207.632 211.994 140.752 211.994C74.0238 211.994 19.7598 228.714 19.7598 249.386C19.7598 251.514 20.3678 253.642 21.4318 255.77C31.3118 238.29 81.0158 224.762 140.752 224.762Z\" fill=\"#908D89\"/>\r\n            <path d=\"M88.5852 283.145C104.378 285.47 122.071 286.793 140.752 286.793C159.569 286.793 177.384 285.47 193.252 283.099C194.605 277.05 196.125 269.267 196.946 263.278C208.574 216.341 182.901 189.756 142.667 189.756C102.432 189.756 81.0156 197.751 81.0156 225.385C81.0156 237.606 82.1404 249.416 84.9524 263.506C85.7428 269.434 87.2628 277.156 88.5852 283.145Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M193.313 283.084C194.666 277.065 196.095 269.48 196.946 263.279C208.148 218.074 183.007 183.965 145.205 181.503V286.747C162.411 286.55 178.691 285.258 193.313 283.084Z\" fill=\"url(#paint1_radial)\"/>\r\n            <path d=\"M189.225 180.788C187.826 175.878 182.993 171.455 182.993 171.455C182.993 171.455 185.045 171.714 187.462 171.714C183.084 167.23 176.366 164.22 176.366 164.22C176.366 164.22 180.12 164.296 185.334 165.041C183.023 162.609 179.846 160.526 177.414 159.143C175.606 152.41 172.246 147.804 172.246 147.804C172.246 147.804 173.736 148.29 175.803 148.838C172.976 142.119 166.303 137.179 166.303 137.179C166.303 137.179 168.401 137.088 171.334 137.483C167.656 131.89 158.065 127.421 158.065 127.421C158.065 127.421 161.166 127.223 164.874 127.315C160.026 123.059 150.738 121.204 150.738 121.204C150.738 121.204 152.486 119.927 156.195 119.106C151.559 116.963 142.029 118.316 142.029 118.316L145.874 115.215C145.874 115.215 138.305 114.698 134.474 117.83C134.474 117.83 134.368 117.921 134.277 117.982C134.17 117.921 134.064 117.875 134.064 117.875C129.686 115.55 122.375 117.556 122.375 117.556L126.753 119.836C126.753 119.836 117.146 120.383 113.027 123.393C116.827 123.484 118.788 124.381 118.788 124.381C118.788 124.381 110.048 128.029 106.142 133.151C109.759 132.33 112.845 131.905 112.845 131.905C112.845 131.905 104.333 138.182 101.825 144.399C104.606 143.426 106.689 143.107 106.689 143.107C106.689 143.107 101.126 149.263 99.6816 156.407C101.612 155.465 102.965 154.69 102.965 154.69C102.965 154.69 100.594 159.873 100.138 166.834C98.0248 168.674 95.304 171.334 93.5256 174.176C98.496 172.428 102.159 171.607 102.159 171.607C102.159 171.607 96.1552 175.878 92.7656 181.138C95.1368 180.651 97.0976 179.998 97.0976 179.998C97.0976 179.998 93.2368 185.287 92.8416 190.379C94.4984 189.239 96.8848 187.689 96.8848 187.689C96.8848 187.689 95.0152 196.338 95.7904 199.849C96.6872 204.91 99.56 208.817 103.117 212.541C104.287 212.754 105.716 212.875 107.282 212.966C110.762 212.556 127.042 210.899 143.701 209.06C150.586 208.71 172.262 206.02 179.132 205.473C180.652 205.093 182.415 204.986 183.51 204.546C186.261 200.198 188.602 195.502 188.191 190.668C188.252 187.066 184.726 178.964 184.726 178.964C184.726 178.964 187.386 179.998 189.225 180.788Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M137.15 153.96L173.797 150.312C172.9 148.716 172.246 147.804 172.246 147.804C172.246 147.804 173.736 148.29 175.803 148.838C172.976 142.119 166.303 137.179 166.303 137.179C166.303 137.179 168.401 137.088 171.334 137.483C167.656 131.89 158.065 127.421 158.065 127.421C158.065 127.421 161.166 127.223 164.874 127.315C160.026 123.059 150.738 121.204 150.738 121.204C150.738 121.204 152.486 119.927 156.195 119.106C151.559 116.963 142.029 118.316 142.029 118.316L145.874 115.215C145.874 115.215 138.305 114.698 134.474 117.83C134.474 117.83 134.383 117.906 134.292 117.966C134.292 117.966 136.846 123.56 135.979 134.291C135.706 137.985 136.283 145.585 137.15 153.96Z\" fill=\"url(#paint2_radial)\"/>\r\n            <path d=\"M113.026 160.481C112.084 161.165 111.461 162.654 111.674 164.752C111.886 166.865 112.859 168.111 113.786 168.111C114.85 168.111 114.242 169.221 112.51 169.388C109.926 169.646 107.63 167.716 107.357 165.071C107.098 162.426 108.968 160.086 111.552 159.827C112.829 159.706 113.604 160.071 113.026 160.481Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M163.841 155.419C164.905 155.906 165.801 157.243 166.014 159.341C166.227 161.454 165.513 162.852 164.601 163.05C163.552 163.262 164.373 164.22 166.105 164.053C168.689 163.794 170.559 161.454 170.301 158.809C170.042 156.164 167.732 154.234 165.148 154.492C163.886 154.614 163.202 155.13 163.841 155.419Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M175.894 179.162C175.894 179.162 173.857 167.686 161.758 165.907C161.682 165.862 161.606 165.816 161.53 165.77C160.557 159.158 159.721 153.686 156.788 146.36C152.942 136.723 145.737 134.854 136.617 141.435C127.558 135.857 119.198 140.599 118.012 150.92C117.648 154.082 117.237 163.49 117.131 170.467C117.1 170.498 117.085 170.513 117.055 170.543C104.5 174.054 106.02 186.138 106.02 186.138L109.333 183.144C109.333 183.144 107.844 189.771 109.774 194.438C110.884 193.054 112.054 191.322 112.054 191.322C112.054 191.322 114.577 196.277 119.411 198.45C119.289 196.353 119.38 194.438 119.426 193.647C125.263 199.104 133.805 203.041 142.864 202.144C151.939 201.247 159.554 195.684 164.19 189.148C164.388 189.893 164.874 191.778 165.163 193.906C169.48 190.82 170.969 185.47 170.969 185.47C170.969 185.47 172.474 186.944 173.827 188.069C174.8 183.114 172.033 176.912 172.033 176.912L175.894 179.162Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M133.569 162.209C135.138 162.041 136.259 160.498 136.074 158.762C135.889 157.026 134.466 155.754 132.897 155.922C131.328 156.089 130.206 157.633 130.391 159.369C130.577 161.105 131.999 162.377 133.569 162.209Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M149.162 160.644C150.731 160.477 151.853 158.933 151.668 157.197C151.482 155.461 150.06 154.189 148.491 154.357C146.922 154.525 145.8 156.068 145.985 157.804C146.171 159.54 147.593 160.812 149.162 160.644Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M143.868 166.865C134.976 167.838 135.736 172.58 137.818 175.377C139.217 177.262 141.512 176.38 139.825 174.252C138.974 173.173 140.114 171.926 141.375 172.838C142.637 173.735 143.412 174.632 144.613 174.48C145.814 174.389 146.406 173.355 147.47 172.23C148.534 171.09 149.902 172.078 149.279 173.31C148.048 175.726 150.465 176.152 151.468 174.024C152.973 170.847 152.775 166.074 143.868 166.865Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M151.772 181.578C147.151 181.822 136.055 184.755 131.754 187.902C128.197 190.516 131.936 195.73 135.493 193.48C141.041 189.984 147.987 186.275 152.289 184.983C154.584 184.314 154.295 181.442 151.772 181.578Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M151.118 185.394L150.221 183.098C149.962 182.323 148.777 182.05 148.61 183.19L147.956 186.686C149.081 186.184 150.145 185.743 151.118 185.394Z\" fill=\"white\"/>\r\n            <path d=\"M141.238 190.09L136.01 188.327C134.748 187.841 134.338 189.224 134.991 189.938L137.089 192.507C138.442 191.686 139.84 190.881 141.238 190.09Z\" fill=\"white\"/>\r\n            <path d=\"M61.9396 241.406C61.9396 241.482 57.0148 255.329 56.7412 276.305C64.4172 278.6 73.0508 280.576 82.4748 282.172C85.4236 270.088 93.054 256.682 99.438 247.014C124.184 204.941 112.1 192.827 105.548 193.769C87.4452 196.353 67.2292 211.188 67.2292 211.188C71.3788 210.611 73.674 210.96 73.674 210.96C73.674 210.96 64.5844 217.602 62.3956 222.01C65.162 220.977 67.1228 220.779 67.1228 220.779C67.1228 220.779 61.4228 228.379 59.9636 233.289C62.4412 232.255 64.1284 231.739 64.1284 231.739C64.1284 231.739 59.234 238.563 58.2916 243.731C60.1916 242.439 61.9396 241.406 61.9396 241.406Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M78.6139 282.506C78.6139 282.506 73.8715 280.424 72.8227 275.15C71.7587 269.875 58.8235 268.066 57.4099 269.571C57.4099 269.571 51.8619 272.687 51.0867 273.386C49.0955 275.195 49.0195 282.993 49.1715 285.045C49.5059 289.346 51.9227 288.647 51.9227 288.647C51.9227 288.647 52.4395 290.198 53.9291 291.338C55.4187 292.462 56.5891 289.711 56.5891 289.711C56.5891 289.711 57.8051 292.31 59.2339 292.037C61.2251 291.672 61.0579 287.842 61.0579 287.842C61.0579 287.842 62.7299 291.505 64.2195 290.988C65.7395 290.441 65.3443 289.62 65.2835 286.747C65.1771 281.974 67.7003 279.603 67.7003 279.603C67.7003 279.603 72.0475 284.285 75.4371 284.695C78.8267 285.106 78.6139 282.506 78.6139 282.506Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M172.702 137.103C172.702 135.188 172.58 133.242 172.292 131.297C169.328 110.822 151.164 96.5193 131.723 99.3313C112.297 102.143 98.9363 121.022 101.916 141.496C102.144 143.077 102.478 144.612 102.873 146.102C131.024 147.272 154.356 143.031 172.702 137.103Z\" fill=\"#3E8EED\"/>\r\n            <path d=\"M142.53 148.351C130.324 150.114 116.447 151.3 101.763 151.315C99.0882 151.315 96.9146 149.142 96.8994 146.466C96.8994 143.791 99.0578 141.618 101.748 141.602C131.859 141.572 158.368 136.48 173.143 131.722C175.696 130.886 178.432 132.3 179.253 134.854C180.074 137.407 178.675 140.143 176.122 140.964C167.914 143.624 156.286 146.36 142.53 148.351Z\" fill=\"#7AB1F2\"/>\r\n            <path d=\"M139.004 124.715L131.556 125.794C129.61 126.083 127.801 125.186 127.345 123.727L120.065 100.714C119.533 98.9817 120.992 96.3977 123.302 96.0481L138.472 93.8441C140.797 93.5097 142.925 95.5769 142.895 97.3857L142.454 121.508C142.439 123.058 140.949 124.426 139.004 124.715Z\" fill=\"#7AB1F2\"/>\r\n            <path d=\"M179.695 224.108C179.695 224.108 179.193 217.131 176.503 210.2C175.347 212.906 174.648 216.918 174.648 216.918L171.091 211.066L168.401 219.29L165.194 212.343L162.078 221.144L158.278 213.27L155.496 222.466L151.757 214.061L148.687 223.5L144.187 215.262L142.059 223.682L138.275 215.687L135.007 224.488L130.614 215.596L128.121 224.458L124.047 215.748L121.418 224.078L117.055 215.839L114.882 223.181L111.036 215.429L108.361 221.722C108.361 221.722 107.084 217.846 105.549 215.338C103.877 222.588 104.394 229.565 104.394 229.565L106.491 228.182C106.491 228.182 106.431 232.468 106.993 239.399C108.011 238.366 110.337 236.587 110.337 236.587C110.337 236.587 110.626 243.534 111.811 248.367C113.255 245.236 114.882 243.214 114.882 243.214C114.882 243.214 115.551 250.146 116.569 255.086C117.405 252.942 119.715 249.614 119.715 249.614C119.715 249.614 121.387 257.35 123.424 260.588C124.306 257.989 125.37 255.739 125.37 255.739C125.37 255.739 129.2 263.035 131.146 266.47C131.571 263.582 133.243 260.907 133.243 260.907C133.243 260.907 135.371 266.106 138.457 270.179C138.822 267.504 139.05 266.121 139.627 264.798C142.303 269.313 145.358 271.942 145.358 271.942V271.882C145.358 271.866 147.911 268.902 149.903 264.054C150.663 265.285 151.088 266.622 151.833 269.222C154.295 264.753 155.648 259.296 155.648 259.296C155.648 259.296 157.685 261.713 158.521 264.494C159.965 260.816 162.701 253.049 162.701 253.049C162.701 253.049 164.069 255.131 165.315 257.578C166.881 254.082 167.413 246.178 167.413 246.178C167.413 246.178 170.179 249.142 171.319 251.149C171.623 246.102 171.289 239.156 171.289 239.156C171.289 239.156 173.189 240.919 175.074 243.807C175.56 238.852 174.846 231.936 174.846 231.936C174.846 231.936 177.399 233.365 178.555 234.246C178.099 227.315 177.43 223.074 177.43 223.074L179.695 224.108Z\" fill=\"url(#paint3_linear)\"/>\r\n            <path d=\"M215.278 278.843C221.814 277.262 227.803 275.484 233.153 273.523C233.123 273.25 233.107 272.976 233.062 272.687C229.794 252.365 219.929 229.778 219.914 229.717C219.914 229.717 221.647 230.386 223.547 231.267C221.905 226.753 216.479 221.342 216.479 221.342C216.479 221.342 218.075 221.554 220.461 222.117C218.409 217.906 210.383 210.261 210.383 210.261C210.383 210.261 212.116 210.306 214.761 210.823C212.116 207.19 204.729 204.074 204.729 204.074C204.729 204.074 206.751 203.421 210.566 203.314C210.566 203.314 199.348 196.125 184.27 194.818C178.235 194.301 179.147 212.009 186.991 240.433C191.399 258.901 205.17 271.73 215.278 278.843Z\" fill=\"url(#paint4_radial)\"/>\r\n            <path d=\"M227.727 112.829H215.43V250.465C215.43 253.642 217.998 256.21 221.175 256.21H221.981C225.158 256.21 227.727 253.642 227.727 250.465V112.829Z\" fill=\"#E86E58\"/>\r\n            <path d=\"M233.745 224.123C234.125 221.205 232.392 218.834 230.432 215.596C229.033 213.301 228.851 205.853 228.851 205.853C228.851 205.853 226.54 204.394 225.264 207.57C223.972 210.747 224.777 216.979 224.777 216.979C224.777 216.979 219.655 217.8 215.46 215.52L215.414 213.24C208.832 212.875 212.07 217.754 212.07 217.754C212.07 217.754 210.292 217.785 209.608 219.229C208.65 221.25 211.097 223.105 211.097 223.105C211.097 223.105 209.395 223.47 209.228 224.853C209.076 226.236 211.188 227.771 211.188 227.771C211.188 227.771 210.033 228.668 211.584 230.568C214 233.502 217.192 234.474 217.74 234.657C220.004 235.721 222.862 237.514 224.96 240.539C228.775 246.057 238.396 241.102 238.396 241.102C238.396 241.102 233.973 229.793 233.745 224.123Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M225.188 244.278C228.03 253.353 230.432 263.628 231.937 273.979C240.677 270.878 247.79 267.352 252.867 263.476C249.189 253.246 242.44 241.618 239.643 237.879C237.941 235.052 236.573 231.191 236.573 231.191L233.259 236.906L229.079 234.094L227.605 238.913L221.251 237.423C221.251 237.423 224.382 241.01 225.142 244.142C225.127 244.187 225.157 244.233 225.188 244.278Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M228.942 17.0689L283.267 109.09C287.173 115.793 282.431 124.031 274.755 124.031L167.793 124.457C160.117 124.457 155.359 116.218 159.129 109.652L211.918 17.2057C215.536 10.6393 225.036 10.3657 228.942 17.0689Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M221.145 111.476C219.154 111.476 217.482 110.838 216.083 109.561C214.7 108.284 214.001 106.749 214.001 104.925C214.001 103.04 214.7 101.444 216.083 100.106C217.467 98.7841 219.154 98.1153 221.145 98.1153C223.06 98.1153 224.732 98.7841 226.131 100.106C227.529 101.429 228.243 103.04 228.243 104.925C228.243 106.749 227.544 108.284 226.131 109.561C224.732 110.838 223.06 111.476 221.145 111.476ZM226.647 39.3521L225.705 89.5577H216.281L214.989 39.3521H226.647Z\" fill=\"white\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(43.8021 259.311) scale(69.5882)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(220.778 268.454) scale(43.4246)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(126.638 125.932) rotate(-5.68298) scale(21.2073 21.8531)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <linearGradient id=\"paint3_linear\" x1=\"145.292\" y1=\"271.912\" x2=\"141.015\" y2=\"212.759\" gradientUnits=\"userSpaceOnUse\">\r\n                    <stop offset=\"0.0643\" stopColor=\"#D4D3D1\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E1DFDD\"/>\r\n                </linearGradient>\r\n                <radialGradient id=\"paint4_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(252.713 262.986) scale(35.0912)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n            </defs>\r\n        </svg>),\r\n    'error-not-found': (<svg width=\"322\" height=\"322\" viewBox=\"0 0 322 322\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M225.883 292.718C244.092 292.718 258.888 289.771 258.888 286.278C258.888 282.784 244.092 279.838 225.883 279.838C207.674 279.838 192.878 282.784 192.878 286.278C192.878 289.755 207.674 292.718 225.883 292.718Z\" fill=\"#FAF9F8\"/>\r\n            <path d=\"M157.056 272.834C157.056 272.834 156.379 276.006 156.331 278.469C156.283 280.433 160.034 281.737 164.574 283.863C167.907 285.408 166.973 288.387 163.818 288.403C160.421 288.419 154.077 288.419 150.793 288.451C147.267 288.483 146.317 286.551 146.236 283.669C146.156 280.803 146.236 273.092 146.236 273.092L157.056 272.834Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M145.85 269.872L138.074 186.28L173.784 186.135C170.725 237.736 161.837 264.076 158.698 271.949V271.965C156.943 276.279 157.265 278.92 157.265 278.92C157.265 278.92 154.27 275.957 153.449 274.17C152.612 275.008 150.664 279.338 150.664 279.338C150.664 279.338 149.215 276.827 148.603 274.814C147.782 276.618 145.013 278.099 145.013 278.099C145.013 278.099 145.963 274.557 145.85 269.872Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M123.278 272.834C123.278 272.834 123.954 276.006 124.002 278.469C124.051 280.433 120.299 281.737 115.759 283.862C112.426 285.408 113.36 288.387 116.516 288.403C119.848 288.419 126.256 288.483 129.541 288.451C132.906 288.419 134.016 286.551 134.097 283.669C134.177 280.803 134.097 273.092 134.097 273.092L123.278 272.834Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M134.483 269.872L142.26 186.28L106.55 186.135C109.609 237.736 118.496 264.076 121.636 271.949V271.965C123.39 276.279 123.068 278.92 123.068 278.92C123.068 278.92 126.063 275.957 126.884 274.17C127.721 275.008 129.669 279.338 129.669 279.338C129.669 279.338 131.118 276.827 131.73 274.814C132.551 276.618 135.321 278.099 135.321 278.099C135.321 278.099 134.371 274.557 134.483 269.872Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M140.134 207.194C159.661 207.194 175.49 194.277 175.49 178.343C175.49 162.409 159.661 149.492 140.134 149.492C120.608 149.492 104.779 162.409 104.779 178.343C104.779 194.277 120.608 207.194 140.134 207.194Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M140.006 81.405C171.884 81.405 186.341 91.709 186.341 113.605C186.341 123.297 185.891 132.925 184.248 146.497C181.367 168.458 173.687 188.229 172.367 190.225C170.515 193.042 109.657 193.042 107.806 190.225C106.485 188.229 98.532 168.361 95.5213 146.32C94.1367 137.868 92.5428 123.442 94.5714 114.056C98.1617 97.4245 108.128 81.405 140.006 81.405Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M139.877 81.405L140.73 81.4211V192.334C140.666 192.334 140.601 192.334 140.537 192.334C140.006 192.334 139.474 192.334 138.943 192.334C138.38 192.334 137.816 192.334 137.269 192.334C137.124 192.334 136.979 192.334 136.834 192.334C122.312 192.237 108.659 191.545 107.806 190.241C106.485 188.245 98.532 168.377 95.5213 146.336C94.1367 137.884 92.5428 123.458 94.5714 114.072C98.049 97.9719 107.5 82.4193 137.059 81.4694C137.156 81.4694 137.253 81.4694 137.349 81.4694C138.186 81.4211 139.024 81.405 139.877 81.405Z\" fill=\"url(#paint1_radial)\"/>\r\n            <path d=\"M67.781 60.4589C60.7775 62.246 54.2409 68.6699 54.2409 68.6699L59.0709 68.0581C59.0709 68.0581 53.4359 71.8255 51.52 74.2405C53.0173 73.8863 57.6702 73.4516 57.6702 73.4516L67.781 60.4589Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M70.9686 108.485C70.9686 108.485 69.3908 108.195 67.6198 107.745C69.745 111.335 75.2351 115.07 75.2351 115.07C75.2351 115.07 73.8505 115.151 71.7092 115.054C74.1403 118.322 80.4515 122.412 80.4515 122.412C80.4515 122.412 78.9381 122.814 76.6036 122.798C79.4372 125.471 88.0024 127.934 88.0024 127.934C88.0024 127.934 86.3924 128.819 83.1402 129.528C83.1402 129.528 102.219 135.034 116.387 132.023C121.523 130.929 127.19 118.628 97.2921 94.0918C90.7716 89.2618 83.3334 81.6143 77.6018 72.7432C73.6895 67.559 68.7146 65.3855 63.9168 67.1404C58.1047 69.2817 54.5144 75.6251 56.9938 82.5159C63.0635 99.3243 70.9525 108.437 70.9686 108.485Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M105.004 82.4998C105.004 82.4998 102.863 89.1652 103.185 91.9988C103.233 95.8467 105.455 99.3565 107.966 102.576C108.868 102.834 110.269 102.786 111.492 102.963C116.95 102.866 134.258 103.269 139.716 103.011C152.982 103.14 165.959 103.172 168.744 103.22C169.968 103.043 171.095 102.818 171.996 102.56C174.508 99.3565 176.472 96.0399 176.778 91.9827C177.1 89.1491 174.959 82.4837 174.959 82.4837C174.959 82.4837 176.955 83.5302 178.356 84.2869C177.647 80.3102 174.186 76.4301 174.186 76.4301C174.186 76.4301 175.78 76.7843 177.696 76.9936C174.604 73.1135 169.533 70.2155 169.533 70.2155C169.533 70.2155 172.495 70.5697 176.536 71.5679C174.91 69.4588 172.56 67.5751 170.756 66.3032C169.855 60.8453 167.569 56.9491 167.569 56.9491C167.569 56.9491 168.712 57.4482 170.29 58.0439C168.583 52.5216 163.721 48.1102 163.721 48.1102C163.721 48.1102 165.395 48.2068 167.665 48.7542C165.202 44.053 157.989 39.7704 157.989 39.7704C157.989 39.7704 160.436 39.867 163.35 40.2373C159.873 36.5021 152.692 34.3125 152.692 34.3125C152.692 34.3125 154.173 33.4431 157.168 33.0889C153.69 31.0442 146.059 31.3501 146.059 31.3501L149.327 29.2088C149.327 29.2088 143.403 28.2106 140.134 30.3841C140.134 30.3841 140.054 30.4324 139.973 30.4807C139.893 30.4324 139.812 30.3841 139.812 30.3841C136.544 28.2106 130.619 29.2088 130.619 29.2088L133.887 31.3501C133.887 31.3501 126.272 31.0281 122.778 33.0889C125.773 33.4592 127.254 34.3125 127.254 34.3125C127.254 34.3125 120.074 36.486 116.596 40.2373C119.51 39.867 121.973 39.7865 121.973 39.7865C121.973 39.7865 114.761 44.0691 112.297 48.7703C114.567 48.2229 116.242 48.1263 116.242 48.1263C116.242 48.1263 111.38 52.5538 109.673 58.06C111.267 57.4643 112.394 56.9652 112.394 56.9652C112.394 56.9652 110.108 60.8614 109.206 66.3193C107.403 67.6073 105.052 69.491 103.426 71.584C107.483 70.6019 110.43 70.2316 110.43 70.2316C110.43 70.2316 105.358 73.1296 102.267 77.0097C104.167 76.8165 105.777 76.4462 105.777 76.4462C105.777 76.4462 102.315 80.3102 101.607 84.303C103.008 83.5463 105.004 82.4998 105.004 82.4998Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M140.553 59.0582H111.38C111.96 57.738 112.41 56.9652 112.41 56.9652C112.41 56.9652 111.267 57.4643 109.689 58.06C111.396 52.5377 116.258 48.1263 116.258 48.1263C116.258 48.1263 114.584 48.2229 112.314 48.7703C114.777 44.0691 121.99 39.7865 121.99 39.7865C121.99 39.7865 119.51 39.867 116.596 40.2373C120.074 36.5021 127.255 34.3125 127.255 34.3125C127.255 34.3125 125.773 33.4431 122.779 33.0889C126.256 31.0442 133.888 31.3501 133.888 31.3501L130.619 29.2088C130.619 29.2088 136.544 28.2106 139.813 30.3841C139.813 30.3841 139.893 30.4324 139.957 30.4807C139.957 30.4807 138.38 35.1014 139.909 43.4895C140.44 46.3553 140.585 52.3928 140.553 59.0582Z\" fill=\"url(#paint2_radial)\"/>\r\n            <path d=\"M104.553 41.7668C104.553 41.7668 111.557 33.6202 112.12 33.1372C113.537 31.8975 119.671 32.3966 121.088 32.6703C124.051 33.2499 121.394 35.8742 121.394 35.8742C121.394 35.8742 122.602 36.1479 123.262 37.291C123.922 38.4341 121.684 39.2713 121.684 39.2713C121.684 39.2713 123.745 40.8169 123.004 41.5414C122.263 42.2659 120.251 41.9761 120.251 41.9761C120.251 41.9761 122.344 44.2945 120.927 44.8097C119.51 45.3249 117.611 44.4877 117.611 44.4877L115.083 44.7453C115.083 44.7453 111.573 48.9957 108.643 49.9134C105.713 50.8311 99.482 51.6844 99.482 51.6844L98.9185 43.8759C98.9185 43.8759 103.394 42.6362 104.553 41.7668Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M60.552 66.9311C55.6737 72.1153 54.6594 79.6662 58.6683 84.1742C62.6772 88.6822 70.0832 88.328 75.0742 83.2565C79.5178 78.7324 86.9399 64.1136 100.915 53.9867C104.73 52.2318 109.174 51.7005 109.174 51.7005L104.827 49.8168L106.534 45.9528L102.203 44.3911L103.394 39.9314C103.394 39.9314 98.548 42.5074 96.1008 43.6183C92.5588 44.8419 88.9041 46.4358 85.1689 48.4C71.3068 54.9849 63.4339 63.8721 60.552 66.9311Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M205.178 114.651C205.178 114.651 206.772 114.941 208.527 115.376C206.402 111.786 200.88 108.067 200.88 108.067C200.88 108.067 202.264 107.986 204.405 108.067C201.958 104.814 195.647 100.741 195.647 100.741C195.647 100.741 197.16 100.339 199.495 100.355C196.661 97.6821 188.08 95.251 188.08 95.251C188.08 95.251 189.69 94.3655 192.926 93.641C192.926 93.641 173.832 88.1831 159.664 91.2582C154.528 92.3691 148.893 104.686 178.871 129.125C185.407 133.939 192.878 141.555 198.626 150.41C202.554 155.578 207.545 157.735 212.327 155.964C218.123 153.807 220.731 146.513 218.219 139.639C212.133 122.862 205.194 114.7 205.178 114.651Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M119.237 64.5C118.496 65.0313 118.013 66.2066 118.174 67.8488C118.335 69.5071 119.092 70.4731 119.832 70.4731C120.669 70.4731 120.187 71.3425 118.834 71.4713C116.806 71.6645 115.002 70.1511 114.809 68.0903C114.616 66.0295 116.081 64.178 118.094 63.9848C119.092 63.8882 119.687 64.178 119.237 64.5Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M159.052 60.5395C159.889 60.9098 160.582 61.9724 160.743 63.6146C160.904 65.2729 160.356 66.3677 159.648 66.5126C158.827 66.6736 159.471 67.4303 160.823 67.3015C162.852 67.1083 164.317 65.2568 164.107 63.196C163.898 61.1352 162.095 59.6218 160.082 59.815C159.084 59.9116 158.553 60.3141 159.052 60.5395Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M168.486 79.1188C168.486 79.1188 166.893 70.1189 157.41 68.7343C157.345 68.7021 157.297 68.6538 157.233 68.6216C156.46 63.4374 155.816 59.1548 153.53 53.4071C150.519 45.8562 144.868 44.3911 137.735 49.5431C130.635 45.18 124.083 48.883 123.165 56.9652C122.875 59.4446 122.553 66.8023 122.473 72.2763C122.457 72.2924 122.44 72.3085 122.424 72.3246C112.587 75.0777 113.779 84.5445 113.779 84.5445L116.371 82.21C116.371 82.21 115.212 87.3942 116.725 91.0489C117.594 89.9702 118.512 88.6017 118.512 88.6017C118.512 88.6017 120.492 92.4818 124.276 94.1884C124.179 92.5462 124.244 91.0489 124.292 90.421C128.864 94.7036 135.546 97.7787 142.646 97.0703C149.762 96.3619 155.719 92.0149 159.358 86.8951C159.519 87.4747 159.889 88.9559 160.131 90.6142C163.512 88.1992 164.687 83.9971 164.687 83.9971C164.687 83.9971 165.862 85.1563 166.925 86.0418C167.681 82.1617 165.524 77.2995 165.524 77.2995L168.486 79.1188Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M135.336 65.8394C136.565 65.7082 137.444 64.5052 137.3 63.1525C137.155 61.7998 136.042 60.8097 134.813 60.9409C133.584 61.0722 132.705 62.2752 132.849 63.6278C132.994 64.9805 134.107 65.9707 135.336 65.8394Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M147.539 64.6178C148.768 64.4865 149.647 63.2835 149.502 61.9308C149.358 60.5782 148.245 59.588 147.016 59.7192C145.787 59.8505 144.908 61.0535 145.052 62.4062C145.197 63.7589 146.31 64.749 147.539 64.6178Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M143.403 69.491C136.431 70.2638 137.027 73.9668 138.669 76.1564C139.764 77.6376 141.551 76.9292 140.247 75.2709C139.571 74.4176 140.473 73.4516 141.471 74.16C142.469 74.8684 143.065 75.5607 144.015 75.448C144.964 75.3836 145.415 74.5625 146.252 73.677C147.09 72.7915 148.152 73.5643 147.669 74.5303C146.703 76.4301 148.603 76.7521 149.392 75.0938C150.519 72.6305 150.374 68.8792 143.403 69.491Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M149.585 81.0187C145.963 81.2119 137.285 83.4981 133.904 85.9775C131.118 88.0222 134.049 92.1116 136.834 90.3567C141.181 87.6197 146.623 84.7217 149.988 83.7074C151.791 83.16 151.565 80.9221 149.585 81.0187Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M149.086 84.0132L148.377 82.2262C148.168 81.6144 147.25 81.405 147.122 82.2905L146.606 85.0275C147.492 84.625 148.313 84.2869 149.086 84.0132Z\" fill=\"white\"/>\r\n            <path d=\"M141.342 87.7001L137.252 86.3155C136.254 85.9452 135.948 87.0078 136.447 87.5713L138.09 89.5838C139.152 88.9398 140.247 88.3119 141.342 87.7001Z\" fill=\"white\"/>\r\n            <path d=\"M108.353 114.716C108.353 114.716 108.353 108.743 110.124 102.673C111.219 104.911 112.024 108.276 112.024 108.276L114.568 103.076L117.24 109.918L119.446 103.816L122.489 111.109L125.113 104.186L127.915 111.85L130.458 104.46L133.501 112.301L136.673 105.008L138.895 112.043L141.503 105.008L144.675 112.301L147.718 104.46L150.261 111.85L153.063 104.186L155.687 111.109L158.73 103.816L160.936 109.918L163.608 103.076L166.152 108.276C166.152 108.276 166.957 104.895 168.052 102.673C169.823 108.743 169.823 114.716 169.823 114.716L168.052 113.669C168.052 113.669 168.342 117.324 168.309 123.249C167.424 122.428 165.428 121.059 165.428 121.059C165.428 121.059 165.605 126.984 164.912 131.186C163.56 128.61 162.111 126.984 162.111 126.984C162.111 126.984 161.966 132.925 161.435 137.191C160.63 135.42 158.553 132.732 158.553 132.732C158.553 132.732 157.651 139.413 156.186 142.311C155.317 140.154 154.319 138.302 154.319 138.302C154.319 138.302 151.646 144.742 150.261 147.785C149.746 145.354 148.233 143.181 148.233 143.181C148.233 143.181 146.816 147.737 144.546 151.392C144.095 149.138 143.821 147.978 143.274 146.884C141.374 150.893 139.04 153.308 139.04 153.308V153.259C139.04 153.259 136.802 150.876 134.886 146.884C134.338 147.978 134.065 149.138 133.614 151.392C131.36 147.737 129.927 143.181 129.927 143.181C129.927 143.181 128.414 145.354 127.898 147.785C126.514 144.742 123.841 138.302 123.841 138.302C123.841 138.302 122.843 140.154 121.974 142.311C120.509 139.429 119.607 132.732 119.607 132.732C119.607 132.732 117.53 135.437 116.725 137.191C116.194 132.909 116.049 126.984 116.049 126.984C116.049 126.984 114.6 128.594 113.247 131.186C112.555 127 112.732 121.059 112.732 121.059C112.732 121.059 110.736 122.428 109.85 123.249C109.802 117.324 110.108 113.669 110.108 113.669L108.353 114.716Z\" fill=\"url(#paint3_linear)\"/>\r\n            <path d=\"M182.204 248.507C186.84 272.27 209.879 287.791 233.643 283.138C257.407 278.501 272.911 255.462 268.274 231.698C263.637 207.935 240.598 192.431 216.835 197.067C193.071 201.704 177.567 224.743 182.204 248.507Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M176.907 199.193L186.341 209.094C170.74 227.625 171.384 255.543 188.531 273.542C206.965 292.879 237.716 293.619 257.052 275.185C276.389 256.75 277.129 225.999 258.695 206.663C241.548 188.454 213.904 186.683 194.423 201.382L184.989 191.481L176.907 199.193ZM197.257 212.201C212.552 197.631 236.927 198.211 251.514 213.506C266.085 228.801 265.505 253.176 250.21 267.763C234.915 282.333 210.54 281.753 195.953 266.458C181.366 251.163 181.962 226.788 197.257 212.201Z\" fill=\"#3E8EED\"/>\r\n            <path d=\"M210.073 268.181L251.804 227.577\" stroke=\"white\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeDasharray=\"3 3\"/>\r\n            <path d=\"M169.259 199.418L116.5 145.435C111.863 140.685 111.943 133.086 116.693 128.433C121.442 123.796 129.042 123.877 133.694 128.626L186.454 182.61C191.091 187.359 191.01 194.958 186.261 199.611C181.511 204.248 173.912 204.167 169.259 199.418Z\" fill=\"#7AB1F2\"/>\r\n            <path d=\"M116.355 128.803C111.943 133.472 111.959 140.814 116.483 145.451L169.259 199.434C173.783 204.071 181.125 204.248 185.89 199.949L116.355 128.803Z\" fill=\"#3E8EED\"/>\r\n            <path d=\"M152.773 165.898C150.551 165.592 143.693 163.95 143.693 163.95C143.693 163.95 141.905 165.35 144.031 167.25C146.156 169.15 151.276 170.261 151.276 170.261C151.276 170.261 150.487 174.511 147.524 177.152L145.979 175.606C143.66 181.032 148.313 180.436 148.313 180.436C148.313 180.436 147.83 181.837 148.78 182.771C150.1 184.091 152.226 182.69 152.226 182.69C152.226 182.69 152.032 184.123 153.063 184.638C154.093 185.153 155.896 183.914 155.896 183.914C155.896 183.914 156.315 185.153 158.199 184.381C164.703 181.708 168.326 176.798 171.175 174.56C175.554 171.098 173.977 166.316 173.977 166.316C174.202 166.413 160.098 166.896 152.773 165.898Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M212.246 158.186C217.575 153.469 219.411 145.708 216.126 140.508C212.906 135.404 205.13 135.34 199.704 139.945C194.858 144.05 185.874 155.111 171.062 163.95C167.102 165.35 162.626 165.479 162.626 165.479L166.748 168.941L164.655 173.368L169.195 175.397L167.601 180.549C167.601 180.549 172.672 178.424 175.184 177.538C178.823 176.636 182.606 175.381 186.502 173.755C200.928 168.458 209.107 160.971 212.246 158.186Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M218.38 149.685C217.607 156.882 212.182 164.256 212.182 164.256L212.101 159.377C212.101 159.377 209.171 165.479 207.062 167.717C207.207 166.188 206.981 161.519 206.981 161.519L218.38 149.685Z\" fill=\"#C8C6C4\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(212.922 145.345) rotate(180) scale(44.8105 48.7639)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(64.2202 148.871) rotate(180) scale(49.2881)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8979\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(150.779 33.8995) rotate(180) scale(16.8019 17.3144)\">\r\n                    <stop offset=\"0.186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\"0.8636\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <linearGradient id=\"paint3_linear\" x1=\"139.081\" y1=\"153.292\" x2=\"139.081\" y2=\"102.688\" gradientUnits=\"userSpaceOnUse\">\r\n                    <stop offset=\"0.0643\" stopColor=\"#D4D3D1\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E1DFDD\"/>\r\n                </linearGradient>\r\n            </defs>\r\n        </svg>),\r\n    'error-registration': (<svg width=\"293\" height=\"241\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M149.71 70.842c3.43 0 6.27-2.254 6.27-5 0-2.748-2.84-5.002-6.27-5.002-3.429 0-6.269 2.254-6.269 5.001 0 2.748 2.84 5 6.269 5zM137.219 70.914c1.962 0 3.526-1.277 3.526-2.844 0-1.566-1.564-2.843-3.526-2.843-1.961 0-3.526 1.277-3.526 2.843 0 1.567 1.565 2.844 3.526 2.844zM260.302 59.286c0 10.243-6.859 19.16-17.088 23.498-2.407 7.11-11.553 12.411-22.263 12.411-5.415 0-10.469-1.325-14.32-3.494-2.768.723-5.776 1.205-8.905 1.205-11.553 0-21.06-6.025-22.744-13.858-9.868-2.892-16.607-10.001-16.607-18.316 0-6.025 3.49-11.327 9.266-14.942-2.046-2.771-3.009-5.784-3.009-9.278 0-10.604 11.192-19.16 25.031-19.16.963 0 1.805 0 2.768.12 2.888-5.422 9.627-9.037 17.81-9.037 9.025 0 16.727 4.82 18.773 11.327 1.203-.12 2.407-.361 3.851-.361 11.552 0 20.698 7.35 20.698 16.388 0 2.048-.481 3.856-1.203 5.543 4.813 4.82 7.942 10.965 7.942 17.954z\" fill=\"#F7B548\"/>\r\n            <path d=\"M236.595 47.839h-25.512c-2.406-6.146-8.905-10.484-16.245-9.64-7.1.723-12.756 6.145-13.478 13.255-1.083 9.037 6.257 16.75 15.403 16.75 6.619 0 12.275-3.977 14.441-9.64h10.108l4.573-3.495 3.731 3.494 3.73-3.494 3.731 3.494h4.573v-5.422l-5.055-5.302zm-45.006 10.845c-2.768 0-5.055-2.29-5.055-5.061 0-2.772 2.287-5.061 5.055-5.061 2.767 0 5.054 2.29 5.054 5.06 0 2.772-2.166 5.062-5.054 5.062z\" fill=\"#fff\"/>\r\n            <path d=\"M234.55 50.37h-23.587v1.445h23.587V50.37zM112.574 220.611s-.506 2.386-.554 4.242c-.036 1.47 2.792 2.47 6.198 4.061 2.503 1.169 1.805 3.41-.578 3.422-2.551.012-7.329.012-9.808.036-2.659.024-3.369-1.434-3.429-3.603-.06-2.169 0-7.977 0-7.977l8.171-.181z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M104.138 218.37l-5.849-63.021 26.884-.109c-2.298 38.898-9.001 58.756-11.36 64.697v.012c-1.324 3.253-1.083 5.241-1.083 5.241s-2.262-2.229-2.864-3.578c-.626.626-2.094 3.892-2.094 3.892s-1.083-1.892-1.552-3.41c-.614 1.361-2.708 2.47-2.708 2.47s.71-2.663.626-6.194z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M87.146 220.611s.505 2.386.554 4.242c.036 1.47-2.792 2.47-6.198 4.061-2.503 1.169-1.805 3.41.578 3.422 2.503.012 7.328.06 9.807.036 2.528-.024 3.37-1.434 3.43-3.603.06-2.169 0-7.977 0-7.977l-8.17-.181z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M95.582 218.37l5.848-63.021-26.884-.109c2.299 38.898 9.002 58.756 11.36 64.697v.012c1.324 3.253 1.084 5.241 1.084 5.241s2.262-2.229 2.864-3.578c.625.626 2.093 3.892 2.093 3.892s1.084-1.892 1.553-3.41c.614 1.361 2.707 2.47 2.707 2.47s-.71-2.663-.625-6.194z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M99.842 171.134c14.701 0 26.619-9.738 26.619-21.75s-11.918-21.75-26.62-21.75c-14.7 0-26.618 9.738-26.618 21.75s11.917 21.75 26.619 21.75z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M99.733 76.289c23.996 0 34.887 7.772 34.887 24.28 0 7.303-.337 14.569-1.577 24.799-2.178 16.557-7.954 31.463-8.941 32.969-1.384 2.121-47.221 2.121-48.605 0-.987-1.506-6.98-16.484-9.254-33.101-1.047-6.363-2.238-17.244-.71-24.317 2.708-12.544 10.205-24.63 34.2-24.63z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M99.65 76.289l.649.012v83.615h-2.936c-10.939-.073-21.204-.591-21.854-1.579-.987-1.506-6.98-16.484-9.254-33.101-1.047-6.363-2.238-17.244-.71-24.317 2.624-12.135 9.736-23.86 31.986-24.582h.229c.614-.036 1.24-.048 1.89-.048z\" fill=\"url(#paint1_radial)\"/>\r\n            <path d=\"M37.554 121.633c-.662 5.41 2.07 11.761 2.07 11.761l.878-3.567s1.107 4.989 2.275 6.989c.156-1.145 1.119-4.531 1.119-4.531l-6.342-10.652z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M47.073 100.003s-1.215.048-2.575.193c1.961-2.458 6.462-4.651 6.462-4.651s-1.023-.205-2.623-.362c2.154-2.169 7.292-4.555 7.292-4.555s-1.083-.458-2.828-.699c2.395-1.699 9.05-2.615 9.05-2.615s-1.107-.831-3.454-1.699c0 0 14.814-2.072 25.055 1.687 3.706 1.362 6.63 11.147-18.268 26.269-5.38 2.916-11.733 7.821-16.944 13.834-3.465 3.446-7.413 4.543-10.794 2.723-4.104-2.217-5.283-7.929-2.696-12.797 6.282-11.93 12.299-17.292 12.323-17.328z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M73.391 77.12s-1.612 5.025-1.372 7.158c.036 2.892 1.71 5.555 3.599 7.977.674.193 1.732.156 2.66.289 4.115-.072 17.135.241 21.251.036 9.988.097 19.76.12 21.854.157.926-.133 1.769-.301 2.442-.494 1.89-2.422 3.37-4.917 3.599-7.977.252-2.133-1.372-7.158-1.372-7.158s1.504.783 2.551 1.362c-.542-3-3.141-5.917-3.141-5.917s1.203.277 2.636.422c-2.335-2.928-6.15-5.11-6.15-5.11s2.226.278 5.271 1.013c-1.227-1.59-2.996-3-4.356-3.977-.674-4.109-2.395-7.049-2.395-7.049s.854.374 2.058.82c-1.288-4.158-4.946-7.496-4.946-7.496s1.251.073 2.96.482c-1.853-3.542-7.28-6.772-7.28-6.772s1.853.072 4.055.35c-2.623-2.82-8.027-4.47-8.027-4.47s1.108-.652 3.37-.929c-2.623-1.542-8.364-1.301-8.364-1.301l2.467-1.615s-4.464-.759-6.92.88l-.12.072a82.24 82.24 0 01-.12-.072c-2.455-1.639-6.92-.88-6.92-.88l2.468 1.615s-5.74-.241-8.364 1.301c2.25.277 3.37.928 3.37.928s-5.404 1.651-8.027 4.47c2.19-.276 4.055-.349 4.055-.349s-5.427 3.23-7.28 6.772c1.709-.41 2.96-.482 2.96-.482s-3.658 3.338-4.946 7.495c1.204-.445 2.058-.819 2.058-.819s-1.72 2.94-2.395 7.05c-1.36.963-3.129 2.385-4.356 3.976 3.045-.747 5.27-1.012 5.27-1.012s-3.814 2.18-6.148 5.109c1.432-.145 2.635-.422 2.635-.422s-2.611 2.916-3.14 5.917c1.046-.567 2.55-1.35 2.55-1.35z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M100.155 59.455H78.181c.433-1 .77-1.579.77-1.579s-.854.374-2.058.82c1.288-4.157 4.946-7.495 4.946-7.495s-1.251.072-2.96.482c1.853-3.543 7.28-6.772 7.28-6.772s-1.853.072-4.055.35c2.623-2.82 8.026-4.472 8.026-4.472s-1.107-.65-3.37-.927c2.624-1.543 8.364-1.302 8.364-1.302l-2.466-1.614s4.464-.76 6.919.88c0 0 .06.035.108.072 0 0-1.191 3.482-.036 9.808.421 2.17.53 6.724.506 11.749z\" fill=\"url(#paint2_radial)\"/>\r\n            <path d=\"M34.004 126.827c-1.588-5.122.217-10.58 4.429-12.304 4.2-1.723 9.097.964 10.794 6.05 1.516 4.53 1.709 16.894 7.81 28.377 1.998 2.459 4.838 4.278 4.838 4.278l-3.562-.157-.12 3.194-3.442-.374-.843 2.229s-2.262-2.169-3.538-3.723c-1.985-2-3.935-4.29-5.812-6.857-7.233-9.061-9.615-17.689-10.554-20.713zM161.203 121.633c.662 5.41-2.07 11.761-2.07 11.761l-.879-3.567s-1.107 4.989-2.274 6.989c-.156-1.145-1.119-4.531-1.119-4.531l6.342-10.652z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M149.434 98.918s1.203.145 2.551.398c-1.757-2.603-6.065-5.157-6.065-5.157s1.047-.12 2.647-.145c-1.973-2.338-6.907-5.121-6.907-5.121s1.119-.374 2.876-.47c-2.25-1.88-8.809-3.338-8.809-3.338s1.179-.747 3.574-1.422c0 0-14.597-3.265-25.103-.325-3.814 1.048-7.509 10.568 16.102 27.642 5.126 3.338 11.071 8.737 15.788 15.147 3.177 3.712 7.028 5.122 10.542 3.579 4.272-1.88 5.897-7.483 3.718-12.544-5.331-12.375-10.902-18.207-10.914-18.244z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M127.761 147.106s-7.895-1.759-8.448-1.807c-1.42-.109-4.886 2.952-5.62 3.771-1.528 1.687 1.251 2.073 1.251 2.073s-.601.711-.493 1.687c.108.988 1.853.494 1.853.494s-.541 1.856.217 1.964c.758.109 1.853-.988 1.853-.988s-.217 2.35.867 2.025c1.095-.326 1.853-1.687 1.853-1.687l1.636-.989s4.032.989 6.222.217c2.178-.759 5.451-4.482 5.451-4.482l-3.598-5.025c0 .024-1.961 2.747-3.044 2.747z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M159.133 127.911c2.828-4.555 2.455-10.291-1.179-13.026-3.635-2.735-9.05-1.374-11.974 3.121-2.611 4-5.909 15.918-14.706 25.486-2.551 1.867-5.752 2.916-5.752 2.916l3.478.747-.686 3.109 3.43.506-.217 3.47s3.201-2.627 4.826-3.808a58.616 58.616 0 007.352-5.169c9.279-6.917 13.755-14.653 15.428-17.352z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M84.114 63.552c-.554.397-.915 1.277-.795 2.53.12 1.241.698 1.976 1.24 1.976.626 0 .265.651-.758.747-1.517.157-2.876-.988-3.033-2.542-.156-1.555.95-2.94 2.48-3.097.745-.072 1.19.145.866.386zM114.078 60.563c.626.29 1.155 1.073 1.276 2.314.12 1.241-.289 2.073-.831 2.193-.613.12-.132.687.891.59 1.516-.156 2.635-1.542 2.479-3.096-.157-1.555-1.516-2.7-3.033-2.543-.758.072-1.155.374-.782.542z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M121.178 74.578s-1.203-6.785-8.34-7.833c-.048-.024-.084-.06-.132-.084-.578-3.905-1.071-7.134-2.792-11.472-2.262-5.7-6.522-6.796-11.89-2.916-5.342-3.29-10.276-.494-10.974 5.603-.217 1.868-.457 7.423-.518 11.544a.166.166 0 01-.048.036c-7.413 2.073-6.51 9.218-6.51 9.218l1.95-1.77s-.88 3.915.264 6.663c.65-.82 1.348-1.844 1.348-1.844s1.492 2.928 4.344 4.206a23.19 23.19 0 01.012-2.844c3.442 3.23 8.472 5.543 13.815 5.013 5.355-.53 9.844-3.82 12.576-7.676.12.434.397 1.554.577 2.807 2.539-1.82 3.43-4.988 3.43-4.988s.878.867 1.685 1.542c.577-2.928-1.059-6.591-1.059-6.591l2.262 1.386z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M96.22 64.566c.925-.1 1.587-1.01 1.477-2.037-.11-1.025-.948-1.776-1.873-1.677-.925.099-1.586 1.01-1.477 2.036.11 1.026.948 1.777 1.873 1.678zM105.414 63.65c.925-.098 1.586-1.01 1.477-2.035-.109-1.026-.948-1.777-1.873-1.678-.925.099-1.587 1.01-1.477 2.036.109 1.026.948 1.777 1.873 1.678z\" fill=\"#605D5A\"/>\r\n            <path d=\"M102.297 67.323c-5.247.579-4.802 3.375-3.562 5.037.83 1.109 2.178.59 1.18-.662-.506-.639.168-1.374.914-.844.746.53 1.203 1.06 1.913.976.71-.06 1.059-.663 1.685-1.325.626-.675 1.432-.085 1.059.638-.722 1.422.698 1.675 1.287.422.891-1.892.783-4.712-4.476-4.242z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M106.954 76.011c-2.72.145-9.266 1.88-11.805 3.736-2.094 1.542.108 4.615 2.202 3.302 3.273-2.073 7.365-4.254 9.904-5.013 1.36-.422 1.191-2.109-.301-2.025z\" fill=\"#605D5A\"/>\r\n            <path d=\"M106.569 78.265l-.53-1.35c-.156-.458-.854-.614-.95.048l-.385 2.06a27.762 27.762 0 011.865-.758zM100.744 81.036L97.664 80c-.746-.29-.987.53-.602.952l1.24 1.518a54.313 54.313 0 012.442-1.434z\" fill=\"#fff\"/>\r\n            <path d=\"M75.906 101.413s0-4.507 1.336-9.074c.83 1.687 1.432 4.23 1.432 4.23l1.913-3.916 2.01 5.157 1.66-4.603 2.3 5.495 1.973-5.23 2.106 5.772 1.913-5.567 2.299 5.916 2.394-5.494 1.673 5.314 1.962-5.314 2.394 5.495 2.299-5.917 1.913 5.567 2.106-5.772 1.974 5.23 2.298-5.495 1.661 4.603 2.01-5.157 1.913 3.916s.602-2.543 1.432-4.23c1.336 4.567 1.336 9.074 1.336 9.074l-1.336-.795s.229 2.747.193 7.218c-.674-.615-2.167-1.651-2.167-1.651s.133 4.47-.385 7.627c-1.022-1.94-2.106-3.157-2.106-3.157s-.108 4.471-.505 7.7c-.602-1.337-2.166-3.374-2.166-3.374s-.674 5.037-1.781 7.218c-.65-1.626-1.408-3.024-1.408-3.024s-2.022 4.856-3.057 7.145c-.385-1.831-1.528-3.47-1.528-3.47s-1.071 3.434-2.768 6.182c-.349-1.699-.541-2.579-.95-3.398-1.433 3.024-3.19 4.844-3.19 4.844v-.037s-1.684-1.795-3.116-4.807c-.41.819-.614 1.699-.95 3.398-1.698-2.748-2.769-6.182-2.769-6.182s-1.143 1.639-1.528 3.47c-1.047-2.289-3.057-7.145-3.057-7.145s-.746 1.398-1.408 3.024c-1.107-2.181-1.78-7.218-1.78-7.218s-1.565 2.037-2.167 3.374c-.409-3.217-.505-7.7-.505-7.7s-1.083 1.217-2.106 3.157c-.518-3.157-.385-7.627-.385-7.627s-1.492 1.036-2.166 1.651c-.036-4.471.192-7.218.192-7.218l-1.408.795z\" fill=\"url(#paint3_linear)\"/>\r\n            <path d=\"M98.097 114.065c2.094 4.616 2.78 10.195 2.298 15.461 2.901-1.483 4.405-5.266 3.454-9.146-.782-3.254-3.093-5.652-5.752-6.315z\" fill=\"#A7A4A0\"/>\r\n            <path d=\"M64.029 147.516c2.178-21.352 29.555-20.171 35.26-9.411 1.022-2.723 3.26-7.29 3.26-10.363 0-13.652-11.059-24.726-24.693-24.726-13.635 0-25.416 13.375-25.416 27.028.012 7.109 6.775 12.954 11.589 17.472z\" fill=\"#605D5A\"/>\r\n            <path d=\"M64.101 92.34c-17.196 4.217-25.764 22.798-21.408 40.632 4.356 17.834 22.96 27.341 37.173 23.859 17.196-4.218 27.605-22.136 23.249-39.97-4.356-17.834-21.721-28.751-39.014-24.522zm19.495 54.634c-12.13 3.253-24.838-2.29-27.461-12.641-2.648-10.435 7.1-18.87 19.23-22.123 12.214-3.278 23.273-.302 25.271 10.194 2.046 10.953-4.813 21.304-17.04 24.57z\" fill=\"#908D89\"/>\r\n            <path d=\"M55.834 131.9c-.566-9.17 8.664-16.653 19.832-19.666 10.902-2.952 20.734-.795 24.2 7.29-.036-.554-.193-1.169-.3-1.602-2.323-9.484-13.467-14.762-25.621-11.605-12.13 3.254-21.733 13.051-18.93 23.353.181.808.53 1.458.819 2.23z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M44.967 125.898c-.962.241-2.72.663-2.72.663l.446 1.844c-.602 1.735-.614 4.338.036 6.977.662 2.723 1.877 5.036 3.381 6.241l.434 1.76s1.925-.47 2.635-.651c2.455-.602 3.394-4.748 2.238-9.483-1.155-4.736-4.163-7.905-6.45-7.351z\" fill=\"#605D5A\"/>\r\n            <path d=\"M46.351 143.347c2.455-.603 3.394-4.748 2.238-9.484-1.155-4.735-4.08-7.941-6.366-7.386-2.455.602-3.393 4.747-2.238 9.483.963 4.712 3.911 7.989 6.366 7.387z\" fill=\"#A7A4A0\"/>\r\n            <path d=\"M48.541 143.576s1.216 3.049-.638 5.904c-1.853 2.856 3.19 9.424 4.489 9.375 0 0 3.887 1.061 4.549 1.085 1.709.06 5.198-3.434 6.04-4.435 1.758-2.096.35-2.855.35-2.855s.457-.94.276-2.109c-.18-1.169-1.925-.446-1.925-.446s.602-1.723-.168-2.229c-1.06-.711-2.684 1.084-2.684 1.084s.867-2.398-.036-2.819c-.927-.434-1.12.12-2.359 1.446-2.07 2.205-4.26 2.169-4.26 2.169s.109-4.049-1.24-5.748c-1.335-1.699-2.394-.422-2.394-.422z\" fill=\"#E1DFDD\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"matrix(-33.7372 0 0 -36.7627 150.357 125.794)\">\r\n                    <stop offset=\".186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\".898\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"matrix(-37.1082 0 0 -37.1577 45.443 122.307)\">\r\n                    <stop offset=\".186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\".864\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"matrix(-12.6499 0 0 -13.0532 107.893 40.482)\">\r\n                    <stop offset=\".186\" stopColor=\"#797673\"/>\r\n                    <stop offset=\".864\" stopColor=\"#C8C6C4\"/>\r\n                </radialGradient>\r\n                <linearGradient id=\"paint3_linear\" x1=\"99.045\" y1=\"130.491\" x2=\"99.045\" y2=\"92.341\" gradientUnits=\"userSpaceOnUse\">\r\n                    <stop offset=\".064\" stopColor=\"#D4D3D1\"/>\r\n                    <stop offset=\"1\" stopColor=\"#E1DFDD\"/>\r\n                </linearGradient>\r\n            </defs>\r\n        </svg>),\r\n    users: (<svg width=\"156\" height=\"158\" viewBox=\"0 0 156 158\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M66.6689 103.932C67.5301 106.131 69.5969 107.598 72.0081 107.598C74.4193 107.598 76.3137 106.131 77.3471 103.932H66.6689Z\" fill=\"white\"/>\r\n            <path d=\"M104.043 131.79C102.493 126.658 100.943 125.009 96.6372 124.093C79.0699 120.61 60.297 120.977 47.2076 124.459C42.9019 125.559 41.1797 127.208 39.4574 132.523C37.9073 137.655 34.2905 157.999 34.2905 157.999H109.554C109.554 158.182 105.593 137.105 104.043 131.79Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M80.7924 81.3891C76.4867 84.5048 73.9033 88.1703 73.9033 88.1703C73.9033 88.1703 80.9647 88.3536 85.7871 97.3342C86.476 98.8004 86.6482 101.55 85.9593 105.765C85.6148 110.164 85.7871 112.729 86.1316 113.829C86.6483 115.845 88.8872 119.694 95.2597 119.877C102.838 120.06 105.593 114.562 105.421 114.745C100.771 115.845 100.599 109.247 100.599 109.247C101.46 93.8519 101.288 89.0867 100.943 87.254C99.3931 80.1062 94.5707 78.8233 92.504 78.2734C89.0594 77.5403 85.2704 78.64 80.7924 81.3891Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M71.6637 126.109C76.4861 126.109 81.1363 125.192 84.9253 123.543C81.1363 121.71 76.6583 120.61 72.0082 120.61C67.1858 120.61 62.5356 121.71 58.7466 123.543C62.5356 125.192 67.0135 126.109 71.6637 126.109Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M85.2695 77.5402C81.4805 73.1416 77.0025 71.1255 71.6634 70.9422C66.3243 70.759 61.6742 72.9583 57.8851 77.1736C54.0961 81.389 52.0293 86.5207 52.0293 92.3856C51.8571 98.4337 53.7517 103.565 57.3685 107.964C61.1575 112.363 65.6354 114.379 70.9745 114.562C76.3135 114.745 80.9637 112.546 84.7527 108.331C88.5417 104.115 90.6085 99.1668 90.6085 93.1187C90.7807 86.8873 88.8863 81.7556 85.2695 77.5402Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M84.9256 126.109C85.4423 125.376 86.3034 123.543 86.6479 122.626C81.9977 121.893 77.1753 120.794 71.664 120.794C66.3249 120.977 61.158 122.077 57.1968 122.81C57.369 123.726 58.0579 125.375 58.4024 125.925C63.2248 136.372 78.7254 137.472 84.9256 126.109Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M84.5812 122.443C84.2368 122.443 80.2756 121.71 79.7589 121.16C78.8977 120.427 78.5533 119.327 78.5533 117.861L78.7254 113.829H64.9472V117.678C64.775 119.144 64.6028 120.06 64.2583 120.61C63.9139 121.16 61.5026 122.26 59.2637 122.26C62.536 127.758 77.8643 129.591 84.5812 122.443Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M71.6638 116.761C79.4141 116.761 85.6143 107.598 85.6143 96.4178C85.6143 85.2379 79.4141 76.0741 71.6638 76.0741C63.9136 76.0741 57.7134 85.2379 57.7134 96.4178C57.7134 107.598 63.9136 116.761 71.6638 116.761Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M72.0084 90.553H62.708V108.331H72.0084V90.553Z\" fill=\"url(#paint1_radial)\"/>\r\n            <path d=\"M71.147 103.382C71.8359 103.749 72.1803 103.932 72.1803 104.115C74.2471 102.283 74.2471 98.9836 72.1803 95.3181L71.8359 96.601C71.4914 97.7007 70.8025 98.6171 69.9414 99.3502C69.5969 99.7167 69.2524 100.267 69.2524 100.816C69.2524 101.366 69.2525 101.916 69.5969 102.283C69.9414 102.649 70.4581 103.016 71.147 103.382Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M85.0973 77.9067C84.2361 76.807 79.9304 75.3408 79.5859 81.7555C80.6193 89.6364 85.9584 89.0866 85.6139 96.2343C85.6139 97.334 88.7141 99.7166 89.2308 100.633C91.9864 94.7681 88.8863 82.122 85.0973 77.9067Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M75.797 108.881C75.4526 109.43 74.9358 109.797 74.4191 110.163C73.9024 110.53 73.2136 110.713 72.5247 110.897C71.8357 111.08 71.1468 111.08 70.4579 110.897C69.769 110.713 69.0801 110.347 68.7356 109.797C68.5634 109.614 68.5634 109.064 68.7356 108.881C68.9078 108.697 69.0801 108.697 69.2523 108.697H69.4246C69.9413 108.697 70.4579 108.881 70.8024 108.881C71.3191 108.881 71.6635 108.881 72.1802 108.697C72.6969 108.697 73.0413 108.514 73.558 108.331C74.0747 108.147 74.5914 107.964 74.9359 107.781H75.1081C75.4525 107.598 75.797 107.781 75.9692 108.147C75.9692 108.514 75.797 108.697 75.797 108.881Z\" fill=\"#9A6541\"/>\r\n            <path d=\"M65.2909 99.1668C65.9798 99.1668 66.6687 98.2504 66.6687 96.9675C66.6687 95.6846 65.9798 94.7682 65.2909 94.7682C64.602 94.7682 63.9131 95.6846 63.9131 96.9675C63.9131 98.0672 64.4297 99.1668 65.2909 99.1668Z\" fill=\"#3A312E\"/>\r\n            <path d=\"M77.8641 99.1668C78.553 99.1668 79.242 98.2504 79.242 96.9675C79.242 95.6846 78.553 94.7682 77.8641 94.7682C77.1752 94.7682 76.4863 95.6846 76.4863 96.9675C76.4863 98.0672 77.003 99.1668 77.8641 99.1668Z\" fill=\"#3A312E\"/>\r\n            <path d=\"M58.7469 104.482C60.9858 104.482 62.7081 102.649 62.7081 100.267C62.7081 97.884 60.9858 96.0513 58.7469 96.0513C56.5079 96.0513 54.7856 97.884 54.7856 100.267C54.7856 102.649 56.5079 104.482 58.7469 104.482Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M84.0638 104.482C86.3027 104.482 88.025 102.649 88.025 100.267C88.025 97.884 86.3027 96.0513 84.0638 96.0513C81.8248 96.0513 80.1025 97.884 80.1025 100.267C80.1025 102.649 81.8248 104.482 84.0638 104.482Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M86.3034 80.4726C86.1311 80.4726 84.7533 83.5883 83.2033 84.8712C81.481 85.2378 75.7974 84.3214 68.2194 89.4532C64.0859 92.3856 51.341 95.6846 47.2075 83.405C49.9632 84.5047 50.3076 85.4211 54.0966 79.7395C58.7468 72.775 64.7748 69.8426 71.8361 70.5757C78.8975 71.492 82.8588 74.9743 86.3034 80.4726Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M155.539 68.9264C152.955 62.8783 152.094 50.4155 144.516 45.467C133.493 38.3192 114.893 39.9687 107.315 42.9012C98.7032 45.8336 94.9142 61.0456 93.8809 68.7432L155.539 68.9264Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M111.621 41.6181C112.998 44.5506 118.337 46.5666 124.193 46.5666C129.877 46.5666 134.699 44.7338 136.249 41.8014C132.632 40.5185 123.849 40.3352 123.849 40.3352C123.849 40.3352 115.582 40.7018 111.621 41.6181Z\" fill=\"#DCB38B\"/>\r\n            <path d=\"M137.972 20.7246L110.76 20.9079V10.8277C110.76 8.07851 112.827 5.8792 115.41 5.8792L133.322 5.69592C135.905 5.69592 137.972 7.89524 137.972 10.6444V20.7246Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M115.41 17.9755H133.666V38.6857C133.666 39.9687 134.528 41.2516 135.216 41.4349C128.844 46.7499 118.682 44.7338 113.516 41.0683C114.549 41.0683 115.238 39.4188 115.238 37.5861L115.41 17.9755Z\" fill=\"url(#paint2_radial)\"/>\r\n            <path d=\"M112.999 25.6729C115.238 25.6729 117.132 23.6568 117.132 21.2743C117.132 18.8917 115.238 16.8756 112.999 16.8756C110.76 16.8756 108.865 18.8917 108.865 21.2743C108.865 23.6568 110.76 25.6729 112.999 25.6729Z\" fill=\"#DCB38B\"/>\r\n            <path d=\"M136.594 25.6729C138.833 25.6729 140.727 23.6568 140.727 21.2743C140.727 18.8917 138.833 16.8756 136.594 16.8756C134.355 16.8756 132.46 18.8917 132.46 21.2743C132.46 23.6568 134.355 25.6729 136.594 25.6729Z\" fill=\"url(#paint3_radial)\"/>\r\n            <path d=\"M127.293 37.7692H122.815C117.304 37.7692 112.998 33.1873 112.998 27.3224V13.2101C112.998 10.0944 115.237 7.71184 118.165 7.52856H131.426C134.354 7.52856 136.766 10.0944 136.766 13.2101V27.3224C136.938 33.004 132.632 37.5859 127.293 37.7692Z\" fill=\"#DCB38B\"/>\r\n            <path d=\"M129.533 10.8276C126.088 10.0945 125.916 9.36143 122.471 9.17815C117.132 8.99487 112.654 9.91124 112.654 9.91124V8.26177C112.827 4.41296 115.066 0.747419 119.371 1.48053C126.088 2.58018 124.71 0.380872 127.638 0.197595C130.394 0.0143185 131.083 2.94674 132.116 2.94674C134.872 2.94674 134.355 -0.902064 138.661 0.197595C142.45 1.11398 144.689 13.7601 129.533 10.8276Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M120.405 20.9077C120.921 20.9077 121.266 20.1746 121.266 19.2583C121.266 18.3419 120.921 17.6088 120.405 17.6088C119.888 17.6088 119.543 18.3419 119.543 19.2583C119.543 20.1746 119.888 20.9077 120.405 20.9077Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M134.872 35.9364H125.227V26.9558C125.227 26.406 125.399 26.0394 125.744 25.8562L127.638 24.5732C127.983 24.2067 128.155 23.6569 127.983 23.2903L126.26 20.5412C125.916 19.808 125.572 19.0749 125.572 18.3418V8.62817H135.216L134.872 35.9364Z\" fill=\"url(#paint4_radial)\"/>\r\n            <path d=\"M111.793 8.26195C111.793 8.26195 114.721 6.61247 114.893 11.9275C114.893 15.0432 114.032 16.5094 113.171 16.8759C112.482 17.2425 111.793 17.2425 111.793 17.2425V8.26195Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M137.972 8.44506C137.972 8.44506 135.044 6.79557 134.872 12.1106C134.872 15.2263 135.733 16.6925 136.594 17.0591C137.283 17.4256 137.972 17.4256 137.972 17.4256V8.44506Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M129.877 20.9077C130.394 20.9077 130.738 20.1746 130.738 19.2583C130.738 18.3419 130.394 17.6088 129.877 17.6088C129.361 17.6088 129.016 18.3419 129.016 19.2583C129.016 20.1746 129.361 20.9077 129.877 20.9077Z\" fill=\"#605D5A\"/>\r\n            <path d=\"M121.438 27.506C122.299 28.2391 122.988 28.6056 123.849 28.7889C124.71 28.9722 125.399 29.1555 126.433 28.9722C126.605 28.9722 126.777 29.1555 126.777 29.3387V29.522C126.088 30.6217 124.538 30.8049 123.333 30.4384C122.127 30.0718 121.094 28.9722 120.921 27.6892C120.921 27.506 121.094 27.3227 121.438 27.506C121.266 27.506 121.266 27.506 121.438 27.506Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M24.646 25.673C25.3349 27.3225 26.8849 28.4221 28.6072 28.4221C30.3295 28.4221 31.8795 27.3225 32.5685 25.673H24.646Z\" fill=\"white\"/>\r\n            <path d=\"M52.8909 46.7499C51.6853 42.9011 50.6521 41.6181 47.3797 40.885C34.1181 38.3191 19.9954 38.5024 10.1784 41.2516C6.90602 42.168 5.52826 43.4509 4.32266 47.2997C3.11706 51.1485 0.361328 66.5437 0.361328 66.5437H57.0245C57.0245 66.5437 54.0965 50.5987 52.8909 46.7499Z\" fill=\"#72ACF1\"/>\r\n            <path d=\"M35.4955 8.81153C32.2231 11.1941 30.3286 13.76 30.3286 13.76C30.3286 13.76 35.8399 13.9433 39.2845 20.7245C39.8012 21.8242 39.8011 24.0235 39.4567 26.9559C39.1122 30.2549 39.2845 32.4542 39.629 33.1873C39.9734 34.6535 41.5235 37.586 46.5181 37.7692C52.3739 37.9525 54.4406 33.7371 54.2684 33.7371C50.6516 34.4702 50.6515 29.7051 50.6515 29.7051C51.1682 18.1586 51.3405 14.6764 50.996 13.0269C49.7904 7.71187 46.1737 6.61221 44.7958 6.06238C41.6957 5.8791 38.7678 6.42893 35.4955 8.81153Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M28.6071 42.3513C32.2239 42.3513 35.6684 41.6182 38.5963 40.5185C35.6684 39.2356 32.396 38.3192 28.7793 38.3192C25.1625 38.3192 21.7179 39.2356 18.79 40.5185C21.7179 41.6182 24.9903 42.3513 28.6071 42.3513Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M38.5959 5.69591C35.668 2.39693 32.3957 0.747437 28.2622 0.747437C24.3009 0.747437 20.8564 2.21365 17.7563 5.32935C14.8284 8.44505 13.2783 12.2939 13.2783 16.8758C13.2783 21.4577 14.484 25.3065 17.4118 28.6055C20.3397 31.9045 23.6121 33.5539 27.7455 33.5539C31.879 33.5539 35.1513 32.0877 38.2514 28.972C41.1793 25.8563 42.7294 22.0075 42.7294 17.4256C42.9016 12.8437 41.5238 8.99489 38.5959 5.69591Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M38.5959 42.3513C38.9404 41.8015 39.6293 40.5185 39.9737 39.7854C36.5292 39.2356 32.9124 38.5025 28.6067 38.3192C24.4732 38.5025 20.6842 39.4189 17.7563 39.7854C17.9286 40.5185 18.4453 41.6182 18.6175 42.168C22.2343 50.0489 33.9458 50.9653 38.5959 42.3513Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M38.2516 39.6019C38.0793 39.6019 34.9793 39.0521 34.6348 38.6855C33.9459 38.1357 33.6014 37.4026 33.7737 36.3029L33.9459 33.3705H23.44V36.3029C23.44 37.4026 23.2678 38.1357 22.9233 38.5022C22.5789 38.8688 20.8566 39.7852 19.1343 39.7852C21.7177 43.634 33.257 45.1002 38.2516 39.6019Z\" fill=\"url(#paint5_radial)\"/>\r\n            <path d=\"M28.6065 35.3866C34.4622 35.3866 39.1123 28.4221 39.1123 19.9914C39.1123 11.5607 34.4622 4.59619 28.6065 4.59619C22.7507 4.59619 18.1006 11.5607 18.1006 19.9914C18.1006 28.4221 22.7507 35.3866 28.6065 35.3866Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M28.7791 15.5929H21.7178V28.9721H28.7791V15.5929Z\" fill=\"url(#paint6_radial)\"/>\r\n            <path d=\"M28.0899 25.3066C28.6066 25.6732 28.951 25.6732 28.951 25.8564C30.5011 24.3902 30.5011 22.0076 28.951 19.0752L28.7787 20.1749C28.4343 20.908 28.0899 21.6411 27.4009 22.1909C27.0565 22.3742 26.8843 22.7407 26.8843 23.2906C26.8843 23.8404 26.8842 24.2069 27.0565 24.3902C27.2287 24.7568 27.5732 24.94 28.0899 25.3066Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M38.5953 6.06232C37.9064 5.32921 34.6341 4.22955 34.4619 8.99474C35.1508 15.0429 39.2842 14.6763 39.112 19.9913C39.112 20.7244 41.351 22.5572 41.8677 23.2903C43.7622 18.8917 41.351 9.36129 38.5953 6.06232Z\" fill=\"#9B643D\"/>\r\n            <path d=\"M31.7065 29.3385C31.0176 30.2549 30.1565 30.6215 29.2954 30.988C28.7787 31.1713 28.2619 30.988 27.7453 30.988C27.2286 30.8047 26.7119 30.6215 26.3675 30.2549C26.1952 30.0716 26.1952 29.7051 26.3675 29.5218C26.5397 29.3385 26.5397 29.3385 26.7119 29.3385H26.8841C27.2286 29.3385 27.573 29.5218 27.9174 29.5218C28.2619 29.5218 28.6064 29.5218 28.9509 29.5218C29.6398 29.3385 30.3287 29.1553 31.0176 28.7887C31.1899 28.6054 31.5343 28.7887 31.7065 29.3385C31.7065 28.972 31.7065 29.1553 31.7065 29.3385Z\" fill=\"#9A6541\"/>\r\n            <path d=\"M23.7844 22.0075C24.3011 22.0075 24.8177 21.2744 24.8177 20.358C24.8177 19.4416 24.3011 18.7085 23.7844 18.7085C23.2677 18.7085 22.751 19.4416 22.751 20.358C22.751 21.2744 23.0955 22.0075 23.7844 22.0075Z\" fill=\"#3A312E\"/>\r\n            <path d=\"M33.0846 22.0075C33.6013 22.0075 34.118 21.2744 34.118 20.358C34.118 19.4416 33.6013 18.7085 33.0846 18.7085C32.5679 18.7085 32.0513 19.4416 32.0513 20.358C32.0513 21.2744 32.3957 22.0075 33.0846 22.0075Z\" fill=\"#3A312E\"/>\r\n            <path d=\"M18.7897 26.0398C20.3398 26.0398 21.7176 24.5735 21.7176 22.9241C21.7176 21.2746 20.3398 19.8083 18.7897 19.8083C17.2397 19.8083 15.8618 21.2746 15.8618 22.9241C15.8618 24.5735 17.0674 26.0398 18.7897 26.0398Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M37.9074 26.0398C39.4574 26.0398 40.8352 24.5735 40.8352 22.9241C40.8352 21.2746 39.4574 19.8083 37.9074 19.8083C36.3573 19.8083 34.9795 21.2746 34.9795 22.9241C34.9795 24.5735 36.1851 26.0398 37.9074 26.0398Z\" fill=\"#BE906B\"/>\r\n            <path d=\"M39.6298 8.0785C39.4576 8.0785 38.5964 10.4611 37.3908 11.3775C36.0129 11.5608 31.8795 11.0109 26.0237 14.8597C22.9236 17.0591 13.2788 19.4417 10.1787 10.2778C12.2455 11.0109 12.4177 11.744 15.3456 7.52868C18.9624 2.39694 23.4403 0.197612 28.7793 0.564165C33.9462 1.29727 36.8742 3.86314 39.6298 8.0785Z\" fill=\"#9B643D\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(73.2727 110.51) scale(11.6649 12.4132)\">\r\n                    <stop stopColor=\"#9A6541\"/>\r\n                    <stop offset=\"1\" stopColor=\"#BE906B\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(71.5882 100.952) scale(5.88386 6.20996)\">\r\n                    <stop stopColor=\"#956D4E\" stopOpacity=\"0.8784\"/>\r\n                    <stop offset=\"0.9373\" stopColor=\"#A7754B\" stopOpacity=\"0\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(124.991 23.7252) rotate(180) scale(15.8307 20.6047)\">\r\n                    <stop stopColor=\"#915A37\"/>\r\n                    <stop offset=\"1\" stopColor=\"#DCB38B\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint3_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(134.047 21.5261) rotate(180) scale(4.52287 4.81303)\">\r\n                    <stop stopColor=\"#915A37\"/>\r\n                    <stop offset=\"0.1165\" stopColor=\"#9B6642\"/>\r\n                    <stop offset=\"0.7121\" stopColor=\"#CA9D77\"/>\r\n                    <stop offset=\"1\" stopColor=\"#DCB38B\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint4_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(123.926 23.5852) rotate(179.231) scale(7.92414 7.60027)\">\r\n                    <stop stopColor=\"#9B643D\"/>\r\n                    <stop offset=\"1\" stopColor=\"#BF8F68\" stopOpacity=\"0\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint5_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(29.7472 30.5947) scale(8.78999 9.35389)\">\r\n                    <stop stopColor=\"#9A6541\"/>\r\n                    <stop offset=\"1\" stopColor=\"#BE906B\"/>\r\n                </radialGradient>\r\n                <radialGradient id=\"paint6_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(28.4777 23.4241) scale(4.43382 4.6796)\">\r\n                    <stop stopColor=\"#956D4E\" stopOpacity=\"0.8784\"/>\r\n                    <stop offset=\"0.9373\" stopColor=\"#A7754B\" stopOpacity=\"0\"/>\r\n                </radialGradient>\r\n            </defs>\r\n        </svg>),\r\n    'creating-template': (<svg width=\"218\" height=\"146\" viewBox=\"0 0 218 146\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M109 130.8C141.086 130.8 167.133 104.753 167.133 72.6665C167.133 40.5804 141.086 14.5332 109 14.5332C76.9139 14.5332 50.8667 40.5804 50.8667 72.6665C50.8667 104.753 76.9139 130.8 109 130.8Z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M141.232 105.99H78.5145C76.9866 105.99 75.7498 107.227 75.7498 108.755C75.7498 110.282 76.9866 111.519 78.5145 111.519H141.232C142.76 111.519 143.996 110.282 143.996 108.755C143.996 107.227 142.76 105.99 141.232 105.99Z\" fill=\"#797673\"/>\r\n            <path d=\"M135.12 102.279C134.683 103.007 134.101 103.589 133.374 104.025C132.646 104.462 131.846 104.68 130.973 104.68H87.391C86.5906 104.68 85.7903 104.535 85.0627 104.098C84.3352 103.661 83.7531 103.079 83.3893 102.352C83.0255 101.77 82.88 101.115 82.88 100.46C82.88 99.8053 83.0255 99.1505 83.3165 98.5685C85.3538 95.2944 102.67 67.3554 102.816 67.0644L103.107 66.6279V39.4165H114.966V66.3368L115.257 66.7734C115.403 66.9916 130.391 91.0744 134.902 98.2047C135.338 98.7867 135.557 99.4416 135.629 100.169C135.629 100.897 135.484 101.624 135.12 102.279Z\" fill=\"white\"/>\r\n            <path d=\"M116.64 53.6768H101.87V66.4821C101.87 66.4821 84.4079 94.7121 82.6618 97.9134C80.9156 101.115 82.298 106.499 88.9917 106.499H130.682C135.265 106.499 139.631 102.861 135.484 95.9489C131.337 89.037 116.712 65.6818 116.712 65.6818L116.64 53.6768Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M113.438 82.7797C115.548 82.7797 117.294 81.0335 117.294 78.9235C117.294 76.8136 115.548 75.0674 113.438 75.0674C111.328 75.0674 109.582 76.8136 109.582 78.9235C109.582 81.0335 111.328 82.7797 113.438 82.7797Z\" fill=\"white\"/>\r\n            <path d=\"M103.98 88.0912C105.799 88.0912 107.254 86.636 107.254 84.8171C107.254 82.9981 105.799 81.543 103.98 81.543C102.161 81.543 100.706 82.9981 100.706 84.8171C100.706 86.636 102.161 88.0912 103.98 88.0912Z\" fill=\"white\"/>\r\n            <path d=\"M111.692 98.2043C112.856 98.2043 113.802 97.2585 113.802 96.0943C113.802 94.9302 112.856 93.9844 111.692 93.9844C110.528 93.9844 109.582 94.9302 109.582 96.0943C109.582 97.2585 110.528 98.2043 111.692 98.2043Z\" fill=\"white\"/>\r\n            <path d=\"M108.127 63.7902C109.291 63.7902 110.237 62.8444 110.237 61.6803C110.237 60.5162 109.291 59.5703 108.127 59.5703C106.963 59.5703 106.017 60.5162 106.017 61.6803C106.017 62.8444 106.963 63.7902 108.127 63.7902Z\" fill=\"white\"/>\r\n            <path d=\"M135.12 102.279C134.683 103.007 134.101 103.589 133.374 104.025C132.646 104.462 131.846 104.68 130.973 104.68H87.391C86.5906 104.68 85.7903 104.535 85.0627 104.098C84.3352 103.661 83.7531 103.079 83.3893 102.352C83.0255 101.77 82.88 101.115 82.88 100.46C82.88 99.8053 83.0255 99.1505 83.3165 98.5685C85.3538 95.2944 102.67 67.3554 102.816 67.0644L103.107 66.6279V39.4165H114.966V66.3368L115.257 66.7734C115.403 66.9916 130.391 91.0744 134.902 98.2047C135.338 98.7867 135.557 99.4416 135.629 100.169C135.629 100.897 135.484 101.624 135.12 102.279Z\" fill=\"white\"/>\r\n            <path d=\"M117.804 68.3013H100.051L82.298 97.6226C80.0425 101.406 82.7345 106.208 87.1727 106.208H130.318C135.193 106.499 138.321 101.188 135.775 97.1133L117.804 68.3013Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M137.885 96.313C133.738 89.692 120.568 68.5923 118.458 65.3182V39.4165H99.5415V65.682C97.3588 69.2471 82.2252 93.6937 80.2607 96.6768C79.6059 97.7681 79.2421 99.0778 79.2421 100.387C79.2421 101.697 79.6059 102.934 80.188 104.098C80.9156 105.408 81.9342 106.426 83.171 107.154C84.4079 107.881 85.8631 108.245 87.3182 108.245H130.973C132.428 108.245 133.883 107.809 135.193 107.081C136.502 106.354 137.521 105.262 138.249 103.953C138.903 102.788 139.194 101.406 139.122 100.096C139.049 98.7867 138.612 97.4771 137.885 96.313Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M103.98 88.0912C105.799 88.0912 107.254 86.636 107.254 84.8171C107.254 82.9981 105.799 81.543 103.98 81.543C102.161 81.543 100.706 82.9981 100.706 84.8171C100.706 86.636 102.161 88.0912 103.98 88.0912Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M113.438 82.7797C115.548 82.7797 117.294 81.0335 117.294 78.9235C117.294 76.8136 115.548 75.0674 113.438 75.0674C111.328 75.0674 109.582 76.8136 109.582 78.9235C109.582 81.0335 111.328 82.7797 113.438 82.7797Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M111.692 98.2043C112.856 98.2043 113.802 97.2585 113.802 96.0943C113.802 94.9302 112.856 93.9844 111.692 93.9844C110.528 93.9844 109.582 94.9302 109.582 96.0943C109.582 97.2585 110.528 98.2043 111.692 98.2043Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M137.885 96.313C134.32 90.7106 124.425 74.7767 120.205 68.0103H114.966L134.029 98.2047C135.629 100.751 133.81 104.171 130.755 104.171H80.2607C80.9883 105.408 82.0069 106.426 83.2438 107.154C84.4807 107.881 85.9358 108.245 87.391 108.245H131.046C132.501 108.245 133.956 107.809 135.265 107.081C136.575 106.354 137.594 105.262 138.321 103.953C138.976 102.788 139.267 101.406 139.194 100.096C139.049 98.7867 138.612 97.4771 137.885 96.313Z\" fill=\"#EAA239\"/>\r\n            <path d=\"M99.105 39.3438V66.3368L98.0136 67.9375H115.621V39.3438H99.105Z\" fill=\"white\"/>\r\n            <path d=\"M122.169 39.0524V37.1607C122.169 36.5786 121.66 36.0693 121.078 36.0693H115.621V39.3434H114.53V40.4348H99.105V44.8002H114.53V67.9372H117.804H118.895H119.986L118.895 66.2637V40.4348H120.787C121.587 40.4348 122.169 39.8527 122.169 39.0524Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M115.621 40.4348H96.1219C95.3216 40.4348 94.6667 39.78 94.6667 38.9796V37.5245C94.6667 36.7242 95.3216 35.9966 96.1947 35.9966H115.621V40.4348Z\" fill=\"white\"/>\r\n        </svg>),\r\n    'session-expired': (<svg width=\"304\" height=\"200\" viewBox=\"0 0 304 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M152 180C196.744 180 233.067 144.155 233.067 100C233.067 55.8448 196.744 20 152 20C107.256 20 70.9336 55.8448 70.9336 100C70.9336 144.155 107.256 180 152 180Z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M196.947 145.857H109.488C107.358 145.857 105.633 147.559 105.633 149.662C105.633 151.765 107.358 153.467 109.488 153.467H196.947C199.078 153.467 200.802 151.765 200.802 149.662C200.802 147.559 199.078 145.857 196.947 145.857Z\" fill=\"#797673\"/>\r\n            <path d=\"M188.425 140.751C187.816 141.752 187.004 142.553 185.99 143.154C184.975 143.755 183.859 144.055 182.641 144.055H121.867C120.751 144.055 119.635 143.855 118.62 143.254C117.605 142.653 116.794 141.852 116.286 140.851C115.779 140.05 115.576 139.149 115.576 138.248C115.576 137.347 115.779 136.446 116.185 135.645C119.026 131.139 143.173 92.6909 143.376 92.2904L143.782 91.6896V54.2428H160.32V91.2891L160.726 91.8899C160.929 92.1902 181.83 125.332 188.12 135.144C188.729 135.945 189.033 136.846 189.135 137.847C189.135 138.849 188.932 139.85 188.425 140.751Z\" fill=\"white\"/>\r\n            <path d=\"M162.654 73.8673H142.057V91.4893C142.057 91.4893 117.707 130.338 115.272 134.743C112.837 139.149 114.765 146.558 124.099 146.558H182.236C188.628 146.558 194.715 141.552 188.932 132.04C183.149 122.528 162.755 90.388 162.755 90.388L162.654 73.8673Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M158.189 113.917C161.131 113.917 163.566 111.514 163.566 108.611C163.566 105.707 161.131 103.304 158.189 103.304C155.247 103.304 152.812 105.707 152.812 108.611C152.812 111.514 155.247 113.917 158.189 113.917Z\" fill=\"white\"/>\r\n            <path d=\"M144.999 121.226C147.536 121.226 149.565 119.224 149.565 116.721C149.565 114.218 147.536 112.215 144.999 112.215C142.463 112.215 140.434 114.218 140.434 116.721C140.434 119.224 142.463 121.226 144.999 121.226Z\" fill=\"white\"/>\r\n            <path d=\"M155.754 135.144C157.377 135.144 158.696 133.842 158.696 132.24C158.696 130.638 157.377 129.337 155.754 129.337C154.131 129.337 152.812 130.638 152.812 132.24C152.812 133.842 154.131 135.144 155.754 135.144Z\" fill=\"white\"/>\r\n            <path d=\"M150.783 87.7848C152.407 87.7848 153.726 86.4832 153.726 84.8812C153.726 83.2792 152.407 81.9775 150.783 81.9775C149.16 81.9775 147.841 83.2792 147.841 84.8812C147.841 86.4832 149.16 87.7848 150.783 87.7848Z\" fill=\"white\"/>\r\n            <path d=\"M188.425 140.751C187.816 141.752 187.004 142.553 185.99 143.154C184.975 143.755 183.859 144.055 182.641 144.055H121.867C120.751 144.055 119.635 143.855 118.62 143.254C117.605 142.653 116.794 141.852 116.286 140.851C115.779 140.05 115.576 139.149 115.576 138.248C115.576 137.347 115.779 136.446 116.185 135.645C119.026 131.139 143.173 92.6909 143.376 92.2904L143.782 91.6896V54.2428H160.32V91.2891L160.726 91.8899C160.929 92.1902 181.83 125.332 188.12 135.144C188.729 135.945 189.033 136.846 189.135 137.847C189.135 138.849 188.932 139.85 188.425 140.751Z\" fill=\"white\"/>\r\n            <path d=\"M164.277 93.9924H139.52L114.764 134.343C111.619 139.549 115.373 146.158 121.562 146.158H181.728C188.526 146.558 192.888 139.249 189.337 133.642L164.277 93.9924Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M192.28 132.541C186.497 123.429 168.132 94.393 165.19 89.8874V54.2428H138.81V90.388C135.767 95.2941 114.663 128.936 111.923 133.041C111.01 134.543 110.503 136.345 110.503 138.148C110.503 139.95 111.01 141.652 111.822 143.254C112.837 145.056 114.257 146.458 115.982 147.459C117.707 148.461 119.736 148.961 121.765 148.961H182.641C184.67 148.961 186.7 148.36 188.526 147.359C190.352 146.358 191.773 144.856 192.787 143.054C193.7 141.452 194.106 139.549 194.005 137.747C193.903 135.945 193.294 134.143 192.28 132.541Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M144.999 121.226C147.536 121.226 149.565 119.224 149.565 116.721C149.565 114.218 147.536 112.215 144.999 112.215C142.463 112.215 140.434 114.218 140.434 116.721C140.434 119.224 142.463 121.226 144.999 121.226Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M158.189 113.917C161.131 113.917 163.566 111.514 163.566 108.611C163.566 105.707 161.131 103.304 158.189 103.304C155.247 103.304 152.812 105.707 152.812 108.611C152.812 111.514 155.247 113.917 158.189 113.917Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M155.754 135.144C157.377 135.144 158.696 133.842 158.696 132.24C158.696 130.638 157.377 129.337 155.754 129.337C154.131 129.337 152.812 130.638 152.812 132.24C152.812 133.842 154.131 135.144 155.754 135.144Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M192.28 132.541C187.309 124.831 173.51 102.904 167.625 93.592H160.32L186.903 135.144C189.135 138.648 186.599 143.354 182.337 143.354H111.924C112.938 145.056 114.359 146.458 116.084 147.459C117.809 148.461 119.838 148.961 121.867 148.961H182.743C184.772 148.961 186.801 148.36 188.628 147.359C190.454 146.358 191.874 144.856 192.889 143.054C193.802 141.452 194.208 139.549 194.107 137.747C193.904 135.945 193.295 134.143 192.28 132.541Z\" fill=\"#EAA239\"/>\r\n            <path d=\"M138.202 54.1427V91.2891L136.68 93.4919H161.233V54.1427H138.202Z\" fill=\"white\"/>\r\n            <path d=\"M170.365 53.7422V51.139C170.365 50.338 169.655 49.6371 168.843 49.6371H161.234V54.1427H159.712V55.6446H138.202V61.6521H159.712V93.4919H164.277H165.799H167.321L165.799 91.189V55.6446H168.437C169.553 55.6446 170.365 54.8436 170.365 53.7422Z\" fill=\"#B3AFAB\"/>\r\n            <path d=\"M161.233 55.6445H134.042C132.926 55.6445 132.013 54.7434 132.013 53.642V51.6395C132.013 50.5381 132.926 49.5369 134.143 49.5369H161.233V55.6445Z\" fill=\"white\"/>\r\n        </svg>),\r\n    'teams-choose-lab-account-content': (<svg width=\"536\" height=\"145\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <g clipPath=\"url(#clip0)\">\r\n                <path d=\"M536 0H0v144.344h536V0z\" fill=\"#C7E0F4\"/>\r\n                <path d=\"M166.02 97.04c-1.33 0-2.585.303-3.711.84-.211-8.673-7.301-15.636-16.015-15.636-7.491 0-13.779 5.141-15.54 12.082a11.046 11.046 0 00-6.659-2.215c-6.129 0-11.095 4.967-11.095 11.099 0 6.132 4.966 11.1 11.095 11.1h41.925a8.631 8.631 0 008.632-8.635 8.63 8.63 0 00-8.632-8.635zM447.387 63.56a7.638 7.638 0 01-2.691 2.193c-.506.25-1.527.597-2.297.597h-75.612a7.308 7.308 0 01-2.517-.476 9.042 9.042 0 01-5.631-8.362 9.041 9.041 0 015.631-8.363 9.118 9.118 0 013.477-.666c1.066 0 2.124.19 3.121.552a22.722 22.722 0 01-.279-9.224 22.726 22.726 0 0118.517-18.479 22.826 22.826 0 019.221.302 22.745 22.745 0 018.344 3.947 22.87 22.87 0 016.085 6.934 22.876 22.876 0 012.834 8.785 13.888 13.888 0 016.961-2.555 13.943 13.943 0 017.286 1.384 13.89 13.89 0 015.54 4.93 13.878 13.878 0 012.222 7.076 7.626 7.626 0 013.341-.945 7.565 7.565 0 013.416.62 7.695 7.695 0 014.399 5.142 7.578 7.578 0 01.083 3.47 7.732 7.732 0 01-1.451 3.138z\" fill=\"#fff\"/>\r\n                <g clipPath=\"url(#clip1)\">\r\n                    <g clipPath=\"url(#clip2)\">\r\n                        <path d=\"M303.497 62.474h-1.464c2.196-16.836-9.516-31.476-25.619-34.404-16.835-2.196-31.475 9.516-33.67 26.352-3.66-1.464-7.32-2.196-10.98-2.196-13.907-1.464-25.619 8.784-26.351 22.692-.732 13.909 9.516 25.621 23.423 26.353h16.103l19.032-29.28v-18.3h-3.66c-2.196 0-3.66-1.465-3.66-3.66 0-2.197 1.464-3.661 3.66-3.661h21.959c2.196 0 3.659 2.196 3.659 3.66 0 2.196-1.463 3.66-3.659 3.66h-3.66v18.3l19.031 29.281h5.124a19.682 19.682 0 0019.763-19.764c0-10.249-8.784-19.033-19.031-19.033z\" fill=\"#0078D4\"/>\r\n                        <path d=\"M297.641 116.643L280.074 90.29h-18.299l-16.836 26.353c-.732 1.464 0 2.928 1.464 2.928h49.774c1.464 0 2.196-1.464 1.464-2.928z\" fill=\"#00BCF2\"/>\r\n                    </g>\r\n                </g>\r\n            </g>\r\n            <defs>\r\n                <clipPath id=\"clip0\">\r\n                    <path fill=\"#fff\" d=\"M0 0h536v144.075H0z\"/>\r\n                </clipPath>\r\n                <clipPath id=\"clip1\">\r\n                    <path fill=\"#fff\" transform=\"translate(205.377 27.805)\" d=\"M0 0h117.151v117.195H0z\"/>\r\n                </clipPath>\r\n                <clipPath id=\"clip2\">\r\n                    <path fill=\"#fff\" transform=\"translate(205.377 27.805)\" d=\"M0 0h117.151v117.195H0z\"/>\r\n                </clipPath>\r\n            </defs>\r\n        </svg>),\r\n    'teams-illustration-1': (<svg width=\"91\" height=\"82\" viewBox=\"0 0 91 82\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M84.3761 33.1246C84.4766 32.6186 84.5268 32.1126 84.577 31.5606C84.5268 30.0472 84.1249 28.6304 83.3258 27.37C82.522 26.1096 81.4215 25.0976 80.0652 24.4398C78.7637 23.782 77.2567 23.4784 75.8045 23.5796C74.3523 23.6808 72.8955 24.2374 71.6945 25.093C70.5939 23.1748 68.886 21.7074 66.8812 20.8518C64.8764 19.9916 62.6205 19.8398 60.5153 20.3964C58.41 20.953 56.5057 22.1628 55.1494 23.8832C53.7977 25.599 52.994 27.7196 52.9437 29.9414H52.8433C52.14 29.9414 51.4413 29.992 50.738 30.1944C47.0801 31.257 44.8699 34.4862 44.8699 37.973C44.8699 41.4092 47.0756 44.6384 50.6878 45.701C51.3911 45.9034 52.0898 45.954 52.8433 45.954H84.1797C85.8831 45.954 87.4906 45.2962 88.6916 44.137C89.8972 42.9732 90.5959 41.3586 90.5959 39.6428C90.5959 37.927 89.9931 36.3078 88.7921 35.098C87.6321 33.8836 86.0292 33.1752 84.3761 33.1246Z\" fill=\"#E1DFDD\"/>\r\n            <path d=\"M58.3324 81.0244H2.84737C2.16237 81.0244 1.56871 80.7944 1.06637 80.2884C0.564039 79.7824 0.290039 79.1384 0.290039 78.4484V10.2304C0.290039 9.8624 0.335706 9.5864 0.472706 9.2184C0.609706 8.8964 0.792372 8.6204 1.02071 8.3444C1.24904 8.1144 1.52304 7.8844 1.88837 7.7924C2.20804 7.6544 2.52771 7.6084 2.89304 7.6084H58.4694C59.1544 7.6084 59.7937 7.8384 60.296 8.3444C60.7984 8.8504 61.0724 9.4944 61.0724 10.1844V78.3564C61.0724 79.0464 60.7527 79.7364 60.296 80.2424C59.6567 80.7484 59.0174 81.0244 58.3324 81.0244Z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M36.7777 69.5844H24.4934C22.9407 69.5844 21.4794 68.9864 20.3834 67.8824C19.2874 66.7784 18.6937 65.3064 18.6937 63.7424C18.6937 62.1784 19.2874 60.7064 20.3834 59.6024C21.4794 58.4984 22.9407 57.9004 24.4934 57.9004H36.869C38.4217 57.9004 39.883 58.5444 40.979 59.6484C42.075 60.7524 42.6687 62.2704 42.6687 63.7884C42.6687 65.3524 42.0294 66.8244 40.9334 67.9284C39.8374 68.9404 38.3304 69.5844 36.7777 69.5844Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M16.2733 49.0684H45.089C46.1393 49.0684 47.007 49.9424 47.007 51.0004C47.007 52.0584 46.1393 52.9324 45.089 52.9324H16.2733C15.223 52.9324 14.3553 52.0584 14.3553 51.0004C14.3553 49.8964 15.223 49.0684 16.2733 49.0684Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M14.3553 44.1005C14.3553 45.1585 15.223 46.0325 16.2733 46.0325H45.089C46.1393 46.0325 47.007 45.1585 47.007 44.1005C47.007 43.0425 46.1393 42.1685 45.089 42.1685H16.2733C15.223 42.1685 14.3553 43.0425 14.3553 44.1005Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M20.6573 37.6143H39.1067C39.5633 37.6143 40.02 37.4303 40.3397 37.1083C40.705 36.7403 40.842 36.2803 40.842 35.8663V17.2363C40.842 16.7763 40.6593 16.3163 40.3397 15.9943C39.9743 15.6263 39.609 15.4883 39.1067 15.4883H20.6573C20.2007 15.4883 19.744 15.6723 19.3787 15.9943C19.0133 16.3623 18.8763 16.8223 18.8763 17.2363V35.8203C18.8763 36.2803 19.059 36.7403 19.3787 37.0623C19.744 37.4303 20.2007 37.6143 20.6573 37.6143Z\" fill=\"#2B88D8\"/>\r\n            <path d=\"M38.2846 31.6343H27.0506L33.855 30.4383C33.6723 30.2083 33.444 29.9323 33.2613 29.7023L30.43 26.2523C30.3843 26.2063 30.3387 26.1603 30.3387 26.1143C30.3387 26.0683 30.3387 26.0223 30.3387 25.9303C30.9323 24.2743 31.4803 22.6643 32.1196 20.9623C32.1196 20.9163 32.1197 20.9163 32.1653 20.8243L38.2846 31.6343ZM30.841 21.5603L31.5716 19.9043C31.4803 19.9503 31.4346 19.9963 31.4346 19.9963C30.156 21.0543 28.9686 22.1123 27.7356 23.1703C27.5073 23.3543 27.2333 23.6303 27.0506 23.8603C26.046 25.6083 25.0413 27.4023 24.0823 29.1503C23.8996 29.5183 23.6713 29.8403 23.4886 30.2083H23.717C24.676 30.2083 25.635 30.2083 26.594 30.2083C26.6853 30.2083 26.731 30.2083 26.868 30.1623C26.9136 30.1163 27.005 30.0703 27.005 29.9783C28.2836 27.2183 29.5623 24.3663 30.841 21.5603Z\" fill=\"white\"/>\r\n            <path d=\"M58.9489 0.97998C58.6292 0.97998 58.3552 1.25598 58.3552 1.57798V5.44198C58.3552 5.76398 58.6292 6.03998 58.9489 6.03998C59.2686 6.03998 59.5426 5.76398 59.5426 5.44198V1.57798C59.5426 1.25598 59.2686 0.97998 58.9489 0.97998Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M65.5705 3.5377C65.3468 3.3123 64.9586 3.3123 64.7303 3.5377L62.0177 6.2701C61.7939 6.4955 61.7894 6.8865 62.0177 7.1165C62.2415 7.3419 62.6296 7.3419 62.858 7.1165L65.5705 4.3841C65.7943 4.1587 65.7943 3.7677 65.5705 3.5377Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M67.4794 9.95434C67.4338 9.67834 67.2054 9.40234 66.8858 9.40234H63.3694C63.0498 9.40234 62.7758 9.67834 62.7758 10.0003C62.7758 10.3223 63.0498 10.5983 63.3694 10.5983H66.8858C67.2054 10.5983 67.4794 10.3223 67.4794 10.0003V9.95434Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M27.9184 64.4783L29.7907 66.5483C29.9277 66.6863 30.1561 66.6863 30.2931 66.5483L34.1747 62.0403C34.3117 61.9023 34.2661 61.6723 34.1291 61.5343L33.6724 61.1203C33.5354 60.9823 33.3071 60.9823 33.1701 61.1663L30.2474 64.6163C30.1104 64.7543 29.8821 64.8003 29.7451 64.6163L28.8317 63.6043C28.6947 63.4663 28.4664 63.4663 28.3294 63.5583L27.8727 63.9723C27.7814 64.1103 27.7814 64.3403 27.9184 64.4783Z\" fill=\"white\"/>\r\n        </svg>),\r\n    'teams-illustration-2': (<svg width=\"106\" height=\"71\" viewBox=\"0 0 106 71\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M85.0474 65.9946C87.8034 65.9946 90.524 65.1781 92.8207 63.6516C95.1174 62.1251 96.884 59.9241 97.9794 57.3326C99.004 54.7766 99.322 51.9366 98.792 49.2031C98.262 46.4696 96.9547 43.9846 94.9407 42.0321C92.9974 40.0796 90.524 38.7306 87.8034 38.1626C85.0827 37.6301 82.2914 37.8786 79.712 38.9791C77.168 40.0086 74.9774 41.8546 73.4227 44.1621C71.9034 46.4696 71.0907 49.2031 71.0907 51.9721C71.0907 55.6996 72.5747 59.2851 75.154 61.8766C77.804 64.5391 81.3374 65.9946 85.0474 65.9946Z\" fill=\"#C7E0F4\"/>\r\n            <path d=\"M18.7267 18.3892V26.7672H14.0627V18.3892H6.71338V13.7032H14.1334V5.3252H18.7974V13.7032H26.1467V18.3892H18.7267Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M93.2094 49.9489V59.5339C93.2094 59.7469 93.0681 59.8889 92.8561 59.8889H89.7114C89.4994 59.8889 89.3581 59.7469 89.3581 59.5339V49.9489C89.3581 49.7359 89.4994 49.5939 89.7114 49.5939H92.8561C93.0681 49.5939 93.2094 49.7359 93.2094 49.9489ZM84.5881 59.8534H87.7327C87.9447 59.8534 88.0861 59.7114 88.0861 59.4984V53.7829C88.0861 53.5699 87.9447 53.4279 87.7327 53.4279H84.5881C84.3761 53.4279 84.2347 53.5699 84.2347 53.7829V59.4984C84.2347 59.7114 84.4114 59.8534 84.5881 59.8534ZM79.4647 59.8534H82.6094C82.8214 59.8534 82.9627 59.7114 82.9627 59.4984V56.3389C82.9627 56.1259 82.8214 55.9839 82.6094 55.9839H79.4647C79.2527 55.9839 79.1114 56.1259 79.1114 56.3389V59.4984C79.1114 59.7114 79.2881 59.8534 79.4647 59.8534ZM82.4327 45.1564L84.8354 45.3694L77.4861 50.7299C77.3447 50.8364 77.3094 51.0494 77.4154 51.2269L78.2634 52.3984C78.3694 52.5404 78.5814 52.5759 78.7581 52.4694L86.1781 47.1089L85.6481 49.5939C85.6127 49.7714 85.7187 49.9844 85.9307 50.0199L87.3441 50.3039C87.5207 50.3394 87.7327 50.2329 87.7681 50.0199L89.0047 44.0559C89.0401 43.8429 88.8987 43.6654 88.6867 43.6299L82.7507 43.0264C82.5741 42.9909 82.3974 43.1329 82.3621 43.3459L82.1501 44.7659C82.1147 44.9434 82.2561 45.1209 82.4327 45.1564Z\" fill=\"#A7CBF6\"/>\r\n            <path d=\"M55.2614 57.9717C69.2534 57.9717 80.6308 46.5407 80.6308 32.4827C80.6308 18.4247 69.2534 6.99365 55.2614 6.99365C41.2694 6.99365 29.8921 18.4247 29.8921 32.4827C29.8921 46.5407 41.2341 57.9717 55.2614 57.9717Z\" fill=\"#2B88D8\"/>\r\n            <path d=\"M67.0273 46.6471C66.8153 47.0021 66.5327 47.2861 66.2147 47.4636C65.8613 47.6766 65.4727 47.7476 65.084 47.8186H44.5554C44.1667 47.8186 43.778 47.7121 43.4247 47.5346C43.0714 47.3216 42.7887 47.0376 42.6474 46.7181C42.506 46.4696 42.4 46.1146 42.4 45.8306C42.4 45.5466 42.4354 45.1916 42.612 44.9431C43.6014 43.4166 51.6927 30.1751 51.7987 30.1041L51.94 29.8911V16.9336H57.5227V29.6426L57.664 29.8556C57.6993 29.9621 64.766 41.3221 66.886 44.6946C67.0627 44.9786 67.1687 45.2981 67.2393 45.6176C67.204 46.0081 67.1687 46.3631 67.0273 46.6471Z\" fill=\"white\"/>\r\n            <path d=\"M58.3353 23.6787H51.3747V29.7492C51.3747 29.7492 43.142 43.0972 42.3293 44.5882C41.5167 46.1147 42.1173 48.6352 45.2973 48.6352H64.9073C67.0627 48.6352 69.1473 46.8602 67.204 43.6652C65.2607 40.4347 58.3707 29.3587 58.3707 29.3587V23.6787H58.3353Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M56.816 37.4174C57.8407 37.4174 58.618 36.6009 58.618 35.6069C58.618 34.6129 57.8054 33.7964 56.816 33.7964C55.8267 33.7964 55.014 34.6129 55.014 35.6069C55.014 36.5654 55.7914 37.4174 56.816 37.4174Z\" fill=\"white\"/>\r\n            <path d=\"M52.3287 39.9375C53.1414 39.9375 53.8834 39.263 53.8834 38.3755C53.8834 37.488 53.212 36.8135 52.3287 36.8135C51.516 36.8135 50.774 37.488 50.774 38.3755C50.774 39.263 51.516 39.9375 52.3287 39.9375Z\" fill=\"white\"/>\r\n            <path d=\"M55.9681 44.6945C56.4981 44.6945 56.9574 44.2685 56.9574 43.7005C56.9574 43.168 56.5334 42.7065 55.9681 42.7065C55.4028 42.7065 54.9788 43.1325 54.9788 43.7005C55.0141 44.233 55.4381 44.6945 55.9681 44.6945Z\" fill=\"white\"/>\r\n            <path d=\"M54.2721 28.4001C54.8021 28.4001 55.2614 27.9741 55.2614 27.4061C55.2614 26.8736 54.8374 26.4121 54.2721 26.4121C53.7421 26.4121 53.2827 26.8381 53.2827 27.4061C53.318 27.9741 53.7421 28.4001 54.2721 28.4001Z\" fill=\"white\"/>\r\n            <path d=\"M67.0273 46.6471C66.8153 47.0021 66.5327 47.2861 66.2147 47.4636C65.8613 47.6766 65.4727 47.7476 65.084 47.8186H44.5554C44.1667 47.8186 43.778 47.7121 43.4247 47.5346C43.0714 47.3216 42.7887 47.0376 42.6474 46.7181C42.506 46.4696 42.4 46.1146 42.4 45.8306C42.4 45.5466 42.4354 45.1916 42.612 44.9431C43.6014 43.4166 51.6927 30.1751 51.7987 30.1041L51.94 29.8911V16.9336H57.5227V29.6426L57.664 29.8556C57.6993 29.9621 64.766 41.3221 66.886 44.6946C67.0627 44.9786 67.1687 45.2981 67.2393 45.6176C67.204 46.0081 67.1687 46.3631 67.0273 46.6471Z\" fill=\"white\"/>\r\n            <path d=\"M58.8654 30.5659H50.4914L42.1881 44.4464C41.1281 46.2569 42.4001 48.4934 44.4847 48.4934H64.766C67.0627 48.6354 68.5114 46.1504 67.3454 44.1979L58.8654 30.5659Z\" fill=\"#FFCB40\"/>\r\n            <path d=\"M68.2994 43.8427C66.356 40.7187 60.1374 30.7432 59.148 29.1812V16.9692H50.2087V29.3942C49.184 31.0982 42.0467 42.6357 41.1634 44.0557C40.8807 44.5882 40.6687 45.1917 40.6687 45.8307C40.6687 46.4697 40.81 47.0377 41.0927 47.6057C41.446 48.2092 41.9054 48.7417 42.506 49.0612C43.1067 49.4162 43.778 49.5937 44.4494 49.5582H65.084C65.7554 49.5582 66.462 49.3807 67.0627 49.0257C67.6634 48.6707 68.1934 48.1382 68.5114 47.5702C68.794 47.0377 68.9354 46.3987 68.9 45.7597C68.8647 44.9787 68.688 44.3397 68.2994 43.8427Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M52.3287 39.9375C53.1414 39.9375 53.8834 39.263 53.8834 38.3755C53.8834 37.488 53.212 36.8135 52.3287 36.8135C51.516 36.8135 50.774 37.488 50.774 38.3755C50.774 39.263 51.516 39.9375 52.3287 39.9375Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M56.816 37.4174C57.8407 37.4174 58.618 36.6009 58.618 35.6069C58.618 34.6129 57.8054 33.7964 56.816 33.7964C55.8267 33.7964 55.014 34.6129 55.014 35.6069C55.014 36.5654 55.7914 37.4174 56.816 37.4174Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M55.9681 44.6945C56.4981 44.6945 56.9574 44.2685 56.9574 43.7005C56.9574 43.168 56.5334 42.7065 55.9681 42.7065C55.4028 42.7065 54.9788 43.1325 54.9788 43.7005C55.0141 44.233 55.4381 44.6945 55.9681 44.6945Z\" fill=\"#FFD590\"/>\r\n            <path d=\"M50.0674 16.8984V29.6429L49.5728 30.4239H57.8407V16.8984H50.0674Z\" fill=\"white\"/>\r\n            <path d=\"M50.0674 17.4307V19.5252H56.7101C57.0634 19.5252 57.3107 19.8092 57.3107 20.1287L57.3461 30.2107L57.4874 30.4237H59.9607L59.3954 29.5717V17.4662L50.0674 17.4307Z\" fill=\"#FAF9F8\"/>\r\n            <path d=\"M60.8441 15.3716H48.7601C48.3714 15.3716 48.0181 15.7266 48.0181 16.1171V16.7916C48.0181 17.1821 48.3007 17.4661 48.6894 17.4661H60.8794C61.2681 17.4661 61.5507 17.1821 61.5507 16.7916V16.1171C61.5507 15.7266 61.2327 15.3716 60.8441 15.3716Z\" fill=\"white\"/>\r\n        </svg>),\r\n    'teams-student-empty-state': (<svg width=\"80\" height=\"80\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\">\r\n            <defs>\r\n                <circle id=\"a\" cx=\"44.557\" cy=\"44.557\" r=\"3.038\"/>\r\n            </defs>\r\n            <g transform=\"translate(-5.063 -5.063)\" fill=\"none\" fillRule=\"evenodd\">\r\n                <g transform=\"translate(6.076 7.089)\">\r\n                    <path d=\"M39.991 0C19.044 0 2.025 17.02 2.025 37.97c0 20.942 17.02 37.98 37.966 37.98 20.948 0 37.984-17.038 37.984-37.98C77.975 17.02 60.939 0 39.99 0m0 65.219c-17.019 0-30.824-13.79-30.824-30.821C9.167 17.36 22.972 3.57 39.991 3.57c17.037 0 30.825 13.79 30.825 30.827 0 17.032-13.788 30.82-30.825 30.82\" fill=\"#A6A6A6\"/>\r\n                    <circle fill=\"#FFF\" cx=\"37.468\" cy=\"36.456\" r=\"33.418\"/>\r\n                    <circle fill=\"#FFF\" cx=\"33.418\" cy=\"36.456\" r=\"33.418\"/>\r\n                    <path d=\"M15.19 13.706c5.807-5.356 13.658-8.643 22.3-8.643 17.885 0 32.383 14.076 32.383 31.44 0 8.682-3.624 16.542-9.484 22.231\" fill=\"#F8F8F8\"/>\r\n                </g>\r\n                <rect stroke=\"#979797\" transform=\"rotate(-21 40.873 34.135)\" x=\"40.367\" y=\"23.451\" width=\"1\" height=\"21.367\" rx=\".5\"/>\r\n                <rect stroke=\"#979797\" transform=\"rotate(90 52.466 44.106)\" x=\"51.959\" y=\"35.954\" width=\"1\" height=\"16.304\" rx=\".5\"/>\r\n                <g stroke=\"#979797\">\r\n                    <g transform=\"translate(12.152 12.152)\">\r\n                        <rect transform=\"matrix(-1 0 0 1 63.797 0)\" x=\"31.892\" y=\".5\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        <rect transform=\"matrix(-1 0 0 1 63.797 0)\" x=\"31.892\" y=\"57.209\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        <g transform=\"rotate(90 16.203 47.595)\">\r\n                            <rect transform=\"matrix(-1 0 0 1 1.013 0)\" x=\".5\" y=\".5\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                            <rect transform=\"matrix(-1 0 0 1 1.013 0)\" x=\".5\" y=\"57.209\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        </g>\r\n                    </g>\r\n                    <g transform=\"rotate(-30 60.65 15.299)\">\r\n                        <rect transform=\"matrix(-1 0 0 1 63.797 0)\" x=\"31.892\" y=\".5\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        <rect transform=\"matrix(-1 0 0 1 63.797 0)\" x=\"31.892\" y=\"57.209\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        <g transform=\"rotate(90 16.203 47.595)\">\r\n                            <rect transform=\"matrix(-1 0 0 1 1.013 0)\" x=\".5\" y=\".5\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                            <rect transform=\"matrix(-1 0 0 1 1.013 0)\" x=\".5\" y=\"57.209\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        </g>\r\n                    </g>\r\n                    <g transform=\"rotate(-60 48.499 27.45)\">\r\n                        <rect transform=\"matrix(-1 0 0 1 63.797 0)\" x=\"31.892\" y=\".5\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        <rect transform=\"matrix(-1 0 0 1 63.797 0)\" x=\"31.892\" y=\"57.209\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        <g transform=\"rotate(90 16.203 47.595)\">\r\n                            <rect transform=\"matrix(-1 0 0 1 1.013 0)\" x=\".5\" y=\".5\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                            <rect transform=\"matrix(-1 0 0 1 1.013 0)\" x=\".5\" y=\"57.209\" width=\"1\" height=\"6.089\" rx=\".5\"/>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n                <path d=\"M44.042 6.076c-20.947 0-37.966 17.034-37.966 37.978 0 20.938 17.019 37.971 37.966 37.971 20.947 0 37.983-17.033 37.983-37.971 0-20.944-17.036-37.978-37.983-37.978m0 68.792c-17.02 0-30.824-13.786-30.824-30.814 0-17.034 13.805-30.82 30.824-30.82 17.037 0 30.824 13.786 30.824 30.82 0 17.028-13.787 30.814-30.824 30.814\" fill=\"#C8C8C8\"/>\r\n                <use fill=\"#A6A6A6\" xlinkHref=\"#a\"/>\r\n                <circle stroke=\"#A6A6A6\" cx=\"44.557\" cy=\"44.557\" r=\"2.538\"/>\r\n                <rect stroke=\"#7F7F7F\" transform=\"rotate(-131 35.95 51.646)\" x=\"35.943\" y=\"35.943\" width=\"1\" height=\"31.405\" rx=\".5\"/>\r\n            </g>\r\n        </svg>),\r\n    'lms-logo': (<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M16.751 5.91647H16.5011C16.876 3.04327 14.8766 0.544834 12.1275 0.0451468C9.25338 -0.329618 6.75417 1.66913 6.37929 4.54233C5.75449 4.29249 5.12968 4.16756 4.50488 4.16756C2.13063 3.91772 0.131256 5.66663 0.0062951 8.04014C-0.118666 10.4137 1.63078 12.4124 4.00504 12.5373C4.00504 12.5373 5.12968 12.5373 6.75417 12.5373L10.0031 7.54045V4.41741H9.37834C9.00346 4.41741 8.75354 4.16756 8.75354 3.7928C8.75354 3.41803 9.00346 3.16819 9.37834 3.16819H11.2528H13.1272C13.502 3.16819 13.752 3.54296 13.752 3.7928C13.752 4.16756 13.502 4.41741 13.1272 4.41741H12.5024V7.54045L15.7513 12.5373C16.3761 12.5373 16.6261 12.5373 16.6261 12.5373C18.5005 12.5373 20 11.0383 20 9.16443C20 7.41553 18.5005 5.91647 16.751 5.91647Z\" fill=\"#0078D4\"/>\r\n            <path d=\"M15.7513 15.1606L12.7522 10.6634H9.6282L6.7541 15.1606C6.62914 15.4104 6.7541 15.6603 7.00402 15.6603H15.5013C15.7513 15.6603 15.8762 15.4104 15.7513 15.1606Z\" fill=\"#6CB8F6\"/>\r\n        </svg>),\r\n    unassigned: (<svg width=\"28\" height=\"43\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <circle cx=\"14\" cy=\"21\" r=\"13\" stroke=\"#A19F9D\" strokeWidth=\"2\" strokeDasharray=\"2 2\"/>\r\n        </svg>),\r\n    'empty-vm-list': (<svg width=\"201\" height=\"158\" viewBox=\"0 0 201 158\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n            <path d=\"M186.755 77.8979H182.96C181.762 77.8979 180.763 78.8966 180.763 80.0951V80.5944H20.6727V80.0951C20.6727 78.8966 19.674 77.8979 18.4755 77.8979H14.6805C13.4821 77.8979 12.4834 78.8966 12.4834 80.0951V154.597C12.4834 155.796 13.4821 156.795 14.6805 156.795H18.4755C19.674 156.795 20.6727 155.796 20.6727 154.597V92.6786C20.6727 91.0807 21.971 89.8822 23.469 89.8822H178.366C179.664 89.8822 180.663 90.8809 180.663 92.1792V154.697C180.663 155.896 181.662 156.894 182.86 156.894H186.655C187.854 156.894 188.852 155.896 188.852 154.697V80.1949C188.952 78.8966 187.953 77.8979 186.755 77.8979Z\" fill=\"#3E8EED\"/>\r\n            <path d=\"M60.8205 8.88842C66.7128 11.5849 68.0111 16.079 63.9164 20.2735C59.0228 25.1671 54.0294 23.7689 54.5287 18.7755C55.0281 13.8819 59.4223 8.28921 60.8205 8.88842Z\" fill=\"#797673\"/>\r\n            <path d=\"M138.918 72.1056V58.4235C138.918 57.8243 138.419 57.4248 137.919 57.4248H123.338C122.739 57.4248 122.34 57.9242 122.34 58.4235V72.1056C122.34 72.7048 121.84 73.1043 121.341 73.1043H108.558C107.959 73.1043 107.559 73.6036 107.559 74.103V76.4998C107.559 77.099 108.058 77.4985 108.558 77.4985H153.099C153.699 77.4985 154.098 76.9992 154.098 76.4998V74.103C154.098 73.5037 153.599 73.1043 153.099 73.1043H139.917C139.417 73.1043 138.918 72.6049 138.918 72.1056Z\" fill=\"#C8C6C4\"/>\r\n            <path d=\"M170.776 0H87.685C85.1883 0 83.1909 1.99738 83.1909 4.49411V58.9228C83.1909 61.4195 85.1883 63.4169 87.685 63.4169H170.776C173.273 63.4169 175.27 61.4195 175.27 58.9228V4.49411C175.37 1.99738 173.273 0 170.776 0Z\" fill=\"#DFECFC\"/>\r\n            <path d=\"M167.98 58.4235H166.982C166.582 58.4235 166.183 58.1239 166.183 57.6245C166.183 57.1252 166.482 56.8256 166.982 56.8256H167.98C168.38 56.8256 168.779 56.6258 169.079 56.2263C169.279 55.9267 169.778 55.8269 170.078 56.0266C170.377 56.2263 170.477 56.7257 170.277 57.0253C169.778 58.024 168.879 58.4235 167.98 58.4235ZM161.988 58.4235H158.992C158.593 58.4235 158.193 58.1239 158.193 57.6245C158.193 57.1252 158.493 56.8256 158.992 56.8256H161.988C162.388 56.8256 162.787 57.1252 162.787 57.6245C162.787 58.1239 162.388 58.4235 161.988 58.4235ZM153.999 58.4235H151.003C150.603 58.4235 150.204 58.1239 150.204 57.6245C150.204 57.1252 150.503 56.8256 151.003 56.8256H153.999C154.398 56.8256 154.798 57.1252 154.798 57.6245C154.798 58.1239 154.398 58.4235 153.999 58.4235ZM146.009 58.4235H143.013C142.613 58.4235 142.214 58.1239 142.214 57.6245C142.214 57.1252 142.514 56.8256 143.013 56.8256H146.009C146.409 56.8256 146.808 57.1252 146.808 57.6245C146.808 58.1239 146.409 58.4235 146.009 58.4235ZM138.02 58.4235H135.023C134.624 58.4235 134.224 58.1239 134.224 57.6245C134.224 57.1252 134.524 56.8256 135.023 56.8256H138.02C138.419 56.8256 138.818 57.1252 138.818 57.6245C138.818 58.1239 138.419 58.4235 138.02 58.4235ZM130.03 58.4235H127.034C126.634 58.4235 126.235 58.1239 126.235 57.6245C126.235 57.1252 126.535 56.8256 127.034 56.8256H130.03C130.429 56.8256 130.829 57.1252 130.829 57.6245C130.829 58.1239 130.429 58.4235 130.03 58.4235ZM122.04 58.4235H119.044C118.645 58.4235 118.245 58.1239 118.245 57.6245C118.245 57.1252 118.545 56.8256 119.044 56.8256H122.04C122.44 56.8256 122.839 57.1252 122.839 57.6245C122.839 58.1239 122.44 58.4235 122.04 58.4235ZM114.051 58.4235H111.055C110.655 58.4235 110.256 58.1239 110.256 57.6245C110.256 57.1252 110.556 56.8256 111.055 56.8256H114.051C114.45 56.8256 114.85 57.1252 114.85 57.6245C114.85 58.1239 114.45 58.4235 114.051 58.4235ZM106.061 58.4235H103.065C102.666 58.4235 102.266 58.1239 102.266 57.6245C102.266 57.1252 102.566 56.8256 103.065 56.8256H106.061C106.461 56.8256 106.86 57.1252 106.86 57.6245C106.86 58.1239 106.461 58.4235 106.061 58.4235ZM98.0719 58.4235H95.0758C94.6763 58.4235 94.2769 58.1239 94.2769 57.6245C94.2769 57.1252 94.5765 56.8256 95.0758 56.8256H98.0719C98.4713 56.8256 98.8708 57.1252 98.8708 57.6245C98.8708 58.1239 98.4713 58.4235 98.0719 58.4235ZM90.0823 58.2237C89.9825 58.2237 89.8826 58.2237 89.7827 58.1239C88.784 57.6245 88.1848 56.7257 88.1848 55.6271V54.928C88.1848 54.5286 88.4844 54.1291 88.9838 54.1291C89.4831 54.1291 89.7827 54.4287 89.7827 54.928V55.6271C89.7827 56.1265 90.0823 56.6258 90.4818 56.8256C90.8813 57.0253 90.9812 57.4248 90.8813 57.8242C90.5817 58.1239 90.382 58.2237 90.0823 58.2237ZM169.978 52.6311C169.578 52.6311 169.179 52.3314 169.179 51.8321V48.836C169.179 48.4366 169.478 48.0371 169.978 48.0371C170.477 48.0371 170.777 48.3367 170.777 48.836V51.8321C170.677 52.3314 170.377 52.6311 169.978 52.6311ZM88.8839 50.7335C88.4844 50.7335 88.085 50.4339 88.085 49.9346V46.9385C88.085 46.539 88.3846 46.1396 88.8839 46.1396C89.3833 46.1396 89.6829 46.4392 89.6829 46.9385V49.9346C89.583 50.4339 89.2834 50.7335 88.8839 50.7335ZM169.978 44.6415C169.578 44.6415 169.179 44.3419 169.179 43.8426V40.8465C169.179 40.447 169.478 40.0476 169.978 40.0476C170.477 40.0476 170.777 40.3472 170.777 40.8465V43.8426C170.677 44.3419 170.377 44.6415 169.978 44.6415ZM88.8839 42.744C88.4844 42.744 88.085 42.4444 88.085 41.9451V38.949C88.085 38.5495 88.3846 38.15 88.8839 38.15C89.3833 38.15 89.6829 38.4496 89.6829 38.949V41.9451C89.583 42.4444 89.2834 42.744 88.8839 42.744ZM169.978 36.652C169.578 36.652 169.179 36.3524 169.179 35.853V32.857C169.179 32.4575 169.478 32.058 169.978 32.058C170.477 32.058 170.777 32.3576 170.777 32.857V35.853C170.677 36.3524 170.377 36.652 169.978 36.652ZM88.8839 34.7545C88.4844 34.7545 88.085 34.4549 88.085 33.9555V30.9595C88.085 30.56 88.3846 30.1605 88.8839 30.1605C89.3833 30.1605 89.6829 30.4601 89.6829 30.9595V33.9555C89.583 34.4549 89.2834 34.7545 88.8839 34.7545ZM169.978 28.6625C169.578 28.6625 169.179 28.3629 169.179 27.8635V24.8674C169.179 24.468 169.478 24.0685 169.978 24.0685C170.477 24.0685 170.777 24.3681 170.777 24.8674V27.8635C170.677 28.3629 170.377 28.6625 169.978 28.6625ZM88.8839 26.765C88.4844 26.765 88.085 26.4653 88.085 25.966V22.9699C88.085 22.5704 88.3846 22.171 88.8839 22.171C89.3833 22.171 89.6829 22.4706 89.6829 22.9699V25.966C89.583 26.4653 89.2834 26.765 88.8839 26.765ZM169.978 20.6729C169.578 20.6729 169.179 20.3733 169.179 19.874V16.8779C169.179 16.4784 169.478 16.079 169.978 16.079C170.477 16.079 170.777 16.3786 170.777 16.8779V19.874C170.677 20.3733 170.377 20.6729 169.978 20.6729ZM88.8839 18.7754C88.4844 18.7754 88.085 18.4758 88.085 17.9765V14.9804C88.085 14.5809 88.3846 14.1814 88.8839 14.1814C89.3833 14.1814 89.6829 14.481 89.6829 14.9804V17.9765C89.583 18.4758 89.2834 18.7754 88.8839 18.7754ZM169.978 12.6834C169.578 12.6834 169.179 12.3838 169.179 11.8845V8.88838C169.179 8.4889 169.478 8.08943 169.978 8.08943C170.477 8.08943 170.777 8.38903 170.777 8.88838V11.8845C170.677 12.3838 170.377 12.6834 169.978 12.6834ZM88.8839 10.7859C88.4844 10.7859 88.085 10.4863 88.085 9.98694V7.29048C88.085 7.09074 88.085 6.99087 88.085 6.79113C88.1848 6.39165 88.5843 6.09205 88.9838 6.19192C89.3833 6.29179 89.6829 6.69126 89.583 7.09074C89.583 7.19061 89.583 7.19061 89.583 7.29048V9.98694C89.583 10.4863 89.2834 10.7859 88.8839 10.7859ZM167.98 6.09205H164.984C164.585 6.09205 164.185 5.79244 164.185 5.29309C164.185 4.79375 164.485 4.49414 164.984 4.49414H167.98C168.38 4.49414 168.779 4.79375 168.779 5.29309C168.779 5.79244 168.38 6.09205 167.98 6.09205ZM159.991 6.09205H156.995C156.595 6.09205 156.196 5.79244 156.196 5.29309C156.196 4.79375 156.495 4.49414 156.995 4.49414H159.991C160.39 4.49414 160.79 4.79375 160.79 5.29309C160.79 5.79244 160.39 6.09205 159.991 6.09205ZM152.001 6.09205H149.005C148.606 6.09205 148.206 5.79244 148.206 5.29309C148.206 4.79375 148.506 4.49414 149.005 4.49414H152.001C152.401 4.49414 152.8 4.79375 152.8 5.29309C152.8 5.79244 152.401 6.09205 152.001 6.09205ZM144.012 6.09205H141.016C140.616 6.09205 140.217 5.79244 140.217 5.29309C140.217 4.79375 140.516 4.49414 141.016 4.49414H144.012C144.411 4.49414 144.811 4.79375 144.811 5.29309C144.811 5.79244 144.411 6.09205 144.012 6.09205ZM136.022 6.09205H133.026C132.627 6.09205 132.227 5.79244 132.227 5.29309C132.227 4.79375 132.527 4.49414 133.026 4.49414H136.022C136.422 4.49414 136.821 4.79375 136.821 5.29309C136.821 5.79244 136.422 6.09205 136.022 6.09205ZM128.033 6.09205H125.037C124.637 6.09205 124.238 5.79244 124.238 5.29309C124.238 4.79375 124.537 4.49414 125.037 4.49414H128.033C128.432 4.49414 128.832 4.79375 128.832 5.29309C128.832 5.79244 128.432 6.09205 128.033 6.09205ZM120.043 6.09205H117.047C116.648 6.09205 116.248 5.79244 116.248 5.29309C116.248 4.79375 116.548 4.49414 117.047 4.49414H120.043C120.443 4.49414 120.842 4.79375 120.842 5.29309C120.842 5.79244 120.443 6.09205 120.043 6.09205ZM112.054 6.09205H109.057C108.658 6.09205 108.259 5.79244 108.259 5.29309C108.259 4.79375 108.558 4.49414 109.057 4.49414H112.054C112.453 4.49414 112.853 4.79375 112.853 5.29309C112.853 5.79244 112.453 6.09205 112.054 6.09205ZM104.064 6.09205H101.068C100.668 6.09205 100.269 5.79244 100.269 5.29309C100.269 4.79375 100.569 4.49414 101.068 4.49414H104.064C104.463 4.49414 104.863 4.79375 104.863 5.29309C104.863 5.79244 104.463 6.09205 104.064 6.09205ZM96.0745 6.09205H93.0784C92.6789 6.09205 92.2795 5.79244 92.2795 5.29309C92.2795 4.79375 92.5791 4.49414 93.0784 4.49414H96.0745C96.474 4.49414 96.8734 4.79375 96.8734 5.29309C96.8734 5.79244 96.474 6.09205 96.0745 6.09205Z\" fill=\"#939393\"/>\r\n            <path d=\"M198.24 76.9991H2.5966C1.09856 76.9991 0 78.1976 0 79.5957C0 81.0938 1.19843 82.1923 2.5966 82.1923H198.14C199.638 82.1923 200.737 80.9939 200.737 79.5957C200.837 78.1976 199.638 76.9991 198.24 76.9991Z\" fill=\"#7AB1F2\"/>\r\n            <path d=\"M134.224 21.472C133.824 20.673 133.325 20.0738 132.626 19.5745C131.927 19.0751 131.128 18.6756 130.229 18.4759C129.231 18.2761 128.232 18.0764 127.233 18.0764C126.135 18.0764 125.036 18.1763 124.037 18.4759C123.039 18.7755 122.04 19.0751 121.141 19.6743V24.7676C121.94 24.0686 122.839 23.4693 123.838 23.0699C124.736 22.6704 125.535 22.5705 126.434 22.4707C127.033 22.4707 127.433 22.5705 127.732 22.6704C128.032 22.7703 128.332 22.8701 128.631 23.1697C128.831 23.3695 129.031 23.6691 129.131 23.9687C129.231 24.2683 129.33 24.5679 129.33 24.9674C129.33 25.3669 129.231 25.7663 129.131 26.0659C129.031 26.3656 128.831 26.765 128.631 27.0646C128.432 27.3642 128.132 27.6638 127.832 27.9635C127.533 28.2631 127.033 28.6625 126.734 28.9621C126.334 29.2618 126.035 29.6612 125.635 29.9608C125.336 30.2604 125.036 30.6599 124.836 31.0594C124.637 31.4589 124.437 31.8584 124.337 32.2578C123.937 33.7559 124.437 35.4536 124.637 35.7532C124.637 35.7532 128.232 35.7532 128.731 35.7532C128.731 35.5535 128.332 34.1553 128.831 33.1567C128.931 32.857 129.131 32.5574 129.33 32.2578C129.53 31.9582 129.83 31.6586 130.129 31.4589C130.429 31.1593 130.828 30.8597 131.128 30.5601C131.627 30.1606 132.227 29.6612 132.726 29.1619C133.125 28.7624 133.525 28.2631 133.824 27.7637C134.124 27.2644 134.324 26.765 134.524 26.1658C134.723 25.5666 134.723 24.8675 134.823 24.2683C134.823 23.2696 134.623 22.3708 134.224 21.472Z\" fill=\"#797673\"/>\r\n            <path d=\"M73.104 72.7048C71.1066 63.1174 60.4206 58.823 57.4245 65.6141C54.9278 57.8243 44.1419 62.618 41.4454 72.7048C39.4481 80.0951 40.6465 94.5761 43.0434 110.955C43.0434 111.055 43.1432 111.154 43.1432 111.254C43.1432 111.354 43.1432 111.454 43.1432 111.554C45.1406 124.237 47.9369 138.718 51.1328 153.898C51.0329 154.398 50.8331 154.897 50.3338 155.197L46.5388 156.695C45.8397 157.094 46.1393 158.093 46.8384 157.893H53.6295C54.3286 157.893 54.9278 157.294 54.9278 156.595V154.997C54.9278 154.897 55.0276 154.697 55.0276 154.597C55.0276 154.597 56.0263 131.827 56.9252 110.755C56.9252 110.355 56.9252 109.956 56.8253 109.556C57.025 105.162 57.1249 100.269 57.3246 95.4749C57.5244 100.468 57.7241 105.562 57.9239 110.156C57.9239 110.355 57.9239 110.555 57.9239 110.755C58.8227 131.827 59.9212 154.597 59.9212 154.597C59.9212 154.797 60.0211 154.897 60.0211 154.997V156.695C60.0211 157.394 60.6203 157.993 61.3194 157.993H68.1105C68.7097 158.093 69.0093 157.094 68.4101 156.695L64.6151 155.297C64.0159 155.097 63.8161 154.498 63.7163 153.998C66.8122 138.818 69.6085 124.237 71.6059 111.554C71.6059 111.254 71.7058 110.855 71.7058 110.555C74.0028 94.2765 74.7019 80.0951 73.104 72.7048Z\" fill=\"#939393\"/>\r\n            <path d=\"M92.5791 34.0554L93.0784 36.2525L96.1744 36.8518C96.8735 36.9516 97.6724 37.0515 98.4714 37.0515C99.1705 37.0515 99.7697 37.0515 100.269 36.9516C100.569 36.8517 101.068 36.7519 101.867 36.652C102.566 36.4523 102.965 36.3524 103.165 36.2525C103.465 36.0528 103.565 35.6533 103.565 35.2538C103.764 35.154 104.064 34.9542 104.364 34.8544C104.563 34.7545 104.763 34.5548 104.863 34.4549C104.963 34.0554 104.763 33.8557 104.364 33.8557L99.3702 33.5561L100.169 32.9569C100.768 32.5574 101.268 32.2578 101.567 31.9582C101.867 31.7584 101.867 31.4588 101.767 31.3589C101.667 31.1592 101.368 31.1592 101.068 31.2591C100.069 31.4588 99.1705 31.7584 98.3715 32.058C97.8722 32.2578 97.1731 32.4575 96.2743 32.7571L92.5791 34.0554Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M60.3211 30.0606V24.4679H54.8283V29.9607C54.8283 31.259 54.6285 31.6585 53.3303 32.2577C51.6325 33.0566 54.9282 35.054 57.5247 35.054C60.1213 35.054 63.5169 32.8569 62.1187 32.3576C61.0202 31.9581 60.2212 31.6585 60.3211 30.0606Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M60.3207 25.1672H54.728V33.6561H60.3207V25.1672Z\" fill=\"url(#paint0_radial)\"/>\r\n            <path d=\"M72.6049 70.4077C72.1055 68.71 71.007 65.8138 68.6101 60.9202C66.413 56.4261 68.6101 51.0331 69.6088 46.1395C70.6075 44.7414 71.2067 43.2433 71.2067 41.6454C71.2067 36.3524 65.1147 31.9581 57.6245 31.9581C50.1343 31.9581 44.0423 36.2525 44.0423 41.6454C44.0423 43.3432 44.6415 44.9411 45.7401 46.3393C46.8386 51.2329 48.6363 56.9254 46.1396 61.3197C43.6428 65.8138 42.6441 68.5102 42.0449 70.4077C42.0449 70.3079 72.6049 70.4077 72.6049 70.4077Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M57.4249 34.5548C60.1214 34.5548 62.5182 34.0554 64.6155 33.2565C62.6181 32.3576 60.2213 31.7584 57.6247 31.7584C55.0281 31.7584 52.5313 32.3576 50.4341 33.2565C52.5313 34.1553 54.9282 34.5548 57.4249 34.5548Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M92.5786 34.0554C91.6798 34.4549 91.3802 34.8544 89.7823 36.2525C88.1844 37.6507 81.6929 44.2421 81.6929 44.2421L84.8887 48.5365L93.2777 37.1514C93.5773 36.7519 93.9768 36.652 94.3762 36.652L96.1739 36.8518C96.2738 36.8518 93.3776 33.656 92.5786 34.0554Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M84.789 42.2448C84.3895 41.8453 83.6904 41.8453 83.1911 42.2448C82.1924 43.2434 80.3947 44.8414 79.4959 45.5404C78.8967 46.0398 78.3973 45.5404 76.8993 44.2421C75.4013 42.844 68.8099 35.8531 67.0123 34.6547C65.2146 33.4563 59.6219 38.8492 65.1147 45.2408C69.3092 50.1344 75.4013 53.4301 77.9979 54.7284C78.6969 55.028 79.5958 55.028 80.195 54.5287C82.492 52.731 85.9874 49.4353 87.9848 46.9386C88.3843 46.4393 88.3843 45.7402 87.8849 45.3407C86.8862 44.2421 85.5879 43.0437 84.789 42.2448Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M22.1712 34.0554L21.6718 36.2525L18.5759 36.8518C17.8768 36.9516 17.0778 37.0515 16.2789 37.0515C15.5798 37.0515 14.9806 37.0515 14.4812 36.9516C14.1816 36.8517 13.6823 36.7519 12.8833 36.652C12.1843 36.4523 11.7848 36.3524 11.585 36.2525C11.2854 36.0528 11.1856 35.6533 11.1856 35.2538C10.9858 35.154 10.6862 34.9542 10.3866 34.8544C10.1869 34.7545 9.98714 34.5548 9.88727 34.4549C9.7874 34.0554 9.98714 33.8557 10.3866 33.8557L15.3801 33.5561L14.681 32.9569C14.0818 32.5574 13.5824 32.2578 13.2828 31.9582C12.9832 31.7584 12.9832 31.4588 13.0831 31.3589C13.1829 31.1592 13.4826 31.1592 13.7822 31.2591C14.7809 31.4588 15.6797 31.7584 16.4786 32.058C16.978 32.2578 17.6771 32.4575 18.5759 32.7571L22.1712 34.0554Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M22.171 34.0554C23.0698 34.4549 23.3694 34.8544 24.9673 36.2525C26.5652 37.6507 33.0567 44.2421 33.0567 44.2421L29.8609 48.5365L21.4719 37.1514C21.1723 36.7519 20.7728 36.652 20.3733 36.652L18.5757 36.8518C18.5757 36.8518 21.4719 33.656 22.171 34.0554Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M29.9608 42.4445C30.4602 41.9451 31.2591 41.9451 31.8583 42.4445C32.857 43.4432 34.5548 44.9412 35.4536 45.5404C36.0528 46.0398 36.5522 45.5404 38.0502 44.2421C39.5483 42.844 46.1396 35.8531 47.9373 34.6547C49.7349 33.4563 55.3276 38.8492 49.8348 45.2408C45.6403 50.1344 39.5483 53.4301 36.9517 54.7284C36.2526 55.028 35.3538 55.028 34.7545 54.5287C32.4576 52.731 29.1619 49.5352 27.0646 47.0385C26.5653 46.4393 26.6651 45.6403 27.1645 45.141C28.0633 44.2421 29.1619 43.1436 29.9608 42.4445Z\" fill=\"#F7B548\"/>\r\n            <path d=\"M64.2155 18.3761C64.5151 19.3748 65.2142 20.4734 65.314 20.773C65.6136 21.3722 65.4139 21.5719 64.6149 22.0713C63.4165 22.6705 64.2155 18.3761 64.2155 18.3761Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M58.5231 27.8637C60.8201 27.8637 63.3168 28.4629 64.3155 24.1685C65.4141 19.3748 63.7163 19.2749 64.4154 16.7782C65.0146 14.6809 62.9174 10.3866 61.1197 10.087C59.3221 9.78734 53.3299 17.8767 53.9291 22.4707C54.6282 27.0647 58.5231 27.8637 58.5231 27.8637Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M63.2168 10.6861C65.8134 14.9805 62.6176 17.4772 60.7201 18.8754C58.7227 20.2735 56.226 25.3669 58.523 29.3616C61.9185 35.2539 60.6202 42.9438 56.0263 47.5378C51.4323 52.1318 39.0485 52.3315 39.8475 43.2434C40.3468 37.2513 43.5426 34.0555 45.3403 32.0581C46.2391 31.0594 46.6386 29.7611 46.339 28.3629C45.4401 24.5679 44.2417 16.6782 49.0354 11.3852C53.6294 6.19199 61.5191 8.08951 63.2168 10.6861Z\" fill=\"#797673\"/>\r\n            <path d=\"M61.4195 22.7703H60.1212C58.9228 22.7703 58.0239 21.7716 58.0239 20.6731C58.0239 19.4746 59.0226 18.5758 60.1212 18.5758H61.4195V22.7703Z\" fill=\"#BF8F68\"/>\r\n            <path d=\"M61.8188 23.2697C61.8188 22.3708 61.2196 21.6718 60.3208 21.6718C59.5218 21.6718 58.8228 22.3708 58.8228 23.2697C58.8228 24.1685 59.422 24.8676 60.3208 24.8676C61.1197 24.7677 61.719 24.0686 61.8188 23.2697Z\" fill=\"white\"/>\r\n            <path d=\"M63.0174 16.778C61.2197 18.4757 61.1198 20.3733 61.1198 20.3733C61.1198 20.3733 60.221 19.3746 60.8202 17.8765C61.4195 16.0789 63.0174 16.778 63.0174 16.778Z\" fill=\"#797673\"/>\r\n            <path d=\"M126.934 42.9439C128.588 42.9439 129.93 41.6919 129.93 40.1475C129.93 38.6032 128.588 37.3512 126.934 37.3512C125.279 37.3512 123.938 38.6032 123.938 40.1475C123.938 41.6919 125.279 42.9439 126.934 42.9439Z\" fill=\"#797673\"/>\r\n            <defs>\r\n                <radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(57.1525 26.9854) rotate(180) scale(6.22145 6.11509)\">\r\n                    <stop stopColor=\"#9B643D\"/>\r\n                    <stop offset=\"0.8819\" stopColor=\"#BA8A63\" stopOpacity=\"0.1178\"/>\r\n                    <stop offset=\"0.9997\" stopColor=\"#BF8F68\" stopOpacity=\"0\"/>\r\n                </radialGradient>\r\n            </defs>\r\n        </svg>),\r\n};\r\nexport default svgIcons;\r\n","// Your use of the content in the files referenced here is subject to the terms of the license at https://aka.ms/fabric-assets-license\r\nimport { registerIcons } from '@uifabric/styling';\r\nimport { svgIcons } from '../svgs/svg-icons';\r\nimport '../css/fabric-icons.css';\r\n// NOTES: This file was generated and then modified. Modifications include a mechanism for resolving our fonts without pre-loading a CDN,\r\n// as well as the  ability to call registerIcons once while including our SVG icons.\r\nexport function initializeIcons(_baseUrl = '', options) {\r\n    const subset = {\r\n        style: {\r\n            MozOsxFontSmoothing: 'grayscale',\r\n            WebkitFontSmoothing: 'antialiased',\r\n            fontStyle: 'normal',\r\n            fontWeight: 'normal',\r\n            speak: 'none',\r\n        },\r\n        fontFace: {\r\n            fontFamily: `\"FabricMDL2Icons\"`,\r\n            src: `url('./static/media/fabric-icons.9ed0c2b7.woff') format('woff')`,\r\n        },\r\n        icons: {\r\n            Edit: '\\uE70F',\r\n            Add: '\\uE710',\r\n            More: '\\uE712',\r\n            Settings: '\\uE713',\r\n            Mail: '\\uE715',\r\n            People: '\\uE716',\r\n            Stop: '\\uE71A',\r\n            Link: '\\uE71B',\r\n            Filter: '\\uE71C',\r\n            Search: '\\uE721',\r\n            Refresh: '\\uE72C',\r\n            Delete: '\\uE74D',\r\n            Play: '\\uE768',\r\n            WindowsLogo: '\\uE782',\r\n            Warning: '\\uE7BA',\r\n            TVMonitor: '\\uE7F4',\r\n            View: '\\uE890',\r\n            Upload: '\\uE898',\r\n            GotoToday: '\\uE8D1',\r\n            Permissions: '\\uE8D7',\r\n            Clock: '\\uE917',\r\n            Timer: '\\uE91E',\r\n            Info: '\\uE946',\r\n            PeopleAdd: '\\uEA15',\r\n            Ringer: '\\uEA8F',\r\n            CirclePlus: '\\uEAEE',\r\n            Money: '\\uEAFD',\r\n            EditMirrored: '\\uEB7E',\r\n            ThisPC: '\\uEC4E',\r\n            DeveloperTools: '\\uEC7A',\r\n            DateTime: '\\uEC92',\r\n            Export: '\\uEDE1',\r\n            DateTimeMirrored: '\\uEE93',\r\n            ConnectVirtualMachine: '\\uEE9D',\r\n            ClipboardList: '\\uF0E3',\r\n            ClipboardListMirrored: '\\uF0E4',\r\n            StatusCircleQuestionMark: '\\uF142',\r\n            ViewDashboard: '\\uF246',\r\n            MoreVertical: '\\uF2BC',\r\n            EngineeringGroup: '\\uF362',\r\n            TestBeaker: '\\uF3A5',\r\n            TestBeakerSolid: '\\uF3A6',\r\n            LinuxLogo32: '\\uF5D3',\r\n            Warning12: '\\uF62F',\r\n            DisconnectVirtualMachine: '\\uF873',\r\n            ...svgIcons,\r\n        },\r\n    };\r\n    registerIcons(subset, options);\r\n}\r\n","import { registerIconAlias } from '@uifabric/styling';\r\nexport const registerIconAliases = () => {\r\n    registerIconAlias('trash', 'delete');\r\n    registerIconAlias('onedrive', 'onedrivelogo');\r\n    registerIconAlias('alertsolid12', 'eventdatemissed12');\r\n    registerIconAlias('sixpointstar', '6pointstar');\r\n    registerIconAlias('twelvepointstar', '12pointstar');\r\n    registerIconAlias('toggleon', 'toggleleft');\r\n    registerIconAlias('toggleoff', 'toggleright');\r\n};\r\nexport default registerIconAliases;\r\n","/**\r\n * @deprecated Const enum use is deprecated. See GitHub issue #7110: https://github.com/OfficeDev/office-ui-fabric-react/issues/7110\r\n */\r\nexport var IconNames;\r\n(function (IconNames) {\r\n    IconNames[\"GlobalNavButton\"] = \"GlobalNavButton\";\r\n    IconNames[\"InternetSharing\"] = \"InternetSharing\";\r\n    IconNames[\"Brightness\"] = \"Brightness\";\r\n    IconNames[\"MapPin\"] = \"MapPin\";\r\n    IconNames[\"Airplane\"] = \"Airplane\";\r\n    IconNames[\"Tablet\"] = \"Tablet\";\r\n    IconNames[\"QuickNote\"] = \"QuickNote\";\r\n    IconNames[\"ChevronDown\"] = \"ChevronDown\";\r\n    IconNames[\"ChevronUp\"] = \"ChevronUp\";\r\n    IconNames[\"Edit\"] = \"Edit\";\r\n    IconNames[\"Add\"] = \"Add\";\r\n    IconNames[\"Cancel\"] = \"Cancel\";\r\n    IconNames[\"More\"] = \"More\";\r\n    IconNames[\"Settings\"] = \"Settings\";\r\n    IconNames[\"Video\"] = \"Video\";\r\n    IconNames[\"Mail\"] = \"Mail\";\r\n    IconNames[\"People\"] = \"People\";\r\n    IconNames[\"Phone\"] = \"Phone\";\r\n    IconNames[\"Pin\"] = \"Pin\";\r\n    IconNames[\"Shop\"] = \"Shop\";\r\n    IconNames[\"Stop\"] = \"Stop\";\r\n    IconNames[\"Link\"] = \"Link\";\r\n    IconNames[\"Filter\"] = \"Filter\";\r\n    IconNames[\"AllApps\"] = \"AllApps\";\r\n    IconNames[\"Zoom\"] = \"Zoom\";\r\n    IconNames[\"ZoomOut\"] = \"ZoomOut\";\r\n    IconNames[\"Microphone\"] = \"Microphone\";\r\n    IconNames[\"Search\"] = \"Search\";\r\n    IconNames[\"Camera\"] = \"Camera\";\r\n    IconNames[\"Attach\"] = \"Attach\";\r\n    IconNames[\"Send\"] = \"Send\";\r\n    IconNames[\"FavoriteList\"] = \"FavoriteList\";\r\n    IconNames[\"PageSolid\"] = \"PageSolid\";\r\n    IconNames[\"Forward\"] = \"Forward\";\r\n    IconNames[\"Back\"] = \"Back\";\r\n    IconNames[\"Refresh\"] = \"Refresh\";\r\n    IconNames[\"Share\"] = \"Share\";\r\n    IconNames[\"Lock\"] = \"Lock\";\r\n    IconNames[\"BlockedSite\"] = \"BlockedSite\";\r\n    IconNames[\"ReportHacked\"] = \"ReportHacked\";\r\n    IconNames[\"EMI\"] = \"EMI\";\r\n    IconNames[\"MiniLink\"] = \"MiniLink\";\r\n    IconNames[\"Blocked\"] = \"Blocked\";\r\n    IconNames[\"FavoriteStar\"] = \"FavoriteStar\";\r\n    IconNames[\"FavoriteStarFill\"] = \"FavoriteStarFill\";\r\n    IconNames[\"ReadingMode\"] = \"ReadingMode\";\r\n    IconNames[\"Favicon\"] = \"Favicon\";\r\n    IconNames[\"Remove\"] = \"Remove\";\r\n    IconNames[\"Checkbox\"] = \"Checkbox\";\r\n    IconNames[\"CheckboxComposite\"] = \"CheckboxComposite\";\r\n    IconNames[\"CheckboxFill\"] = \"CheckboxFill\";\r\n    IconNames[\"CheckboxIndeterminate\"] = \"CheckboxIndeterminate\";\r\n    IconNames[\"CheckboxCompositeReversed\"] = \"CheckboxCompositeReversed\";\r\n    IconNames[\"CheckMark\"] = \"CheckMark\";\r\n    IconNames[\"BackToWindow\"] = \"BackToWindow\";\r\n    IconNames[\"FullScreen\"] = \"FullScreen\";\r\n    IconNames[\"Print\"] = \"Print\";\r\n    IconNames[\"Up\"] = \"Up\";\r\n    IconNames[\"Down\"] = \"Down\";\r\n    IconNames[\"OEM\"] = \"OEM\";\r\n    IconNames[\"Delete\"] = \"Delete\";\r\n    IconNames[\"Save\"] = \"Save\";\r\n    IconNames[\"ReturnKey\"] = \"ReturnKey\";\r\n    IconNames[\"Cloud\"] = \"Cloud\";\r\n    IconNames[\"Flashlight\"] = \"Flashlight\";\r\n    IconNames[\"CommandPrompt\"] = \"CommandPrompt\";\r\n    IconNames[\"Sad\"] = \"Sad\";\r\n    IconNames[\"RealEstate\"] = \"RealEstate\";\r\n    IconNames[\"SIPMove\"] = \"SIPMove\";\r\n    IconNames[\"EraseTool\"] = \"EraseTool\";\r\n    IconNames[\"GripperTool\"] = \"GripperTool\";\r\n    IconNames[\"Dialpad\"] = \"Dialpad\";\r\n    IconNames[\"PageLeft\"] = \"PageLeft\";\r\n    IconNames[\"PageRight\"] = \"PageRight\";\r\n    IconNames[\"MultiSelect\"] = \"MultiSelect\";\r\n    IconNames[\"KeyboardClassic\"] = \"KeyboardClassic\";\r\n    IconNames[\"Play\"] = \"Play\";\r\n    IconNames[\"Pause\"] = \"Pause\";\r\n    IconNames[\"ChevronLeft\"] = \"ChevronLeft\";\r\n    IconNames[\"ChevronRight\"] = \"ChevronRight\";\r\n    IconNames[\"InkingTool\"] = \"InkingTool\";\r\n    IconNames[\"Emoji2\"] = \"Emoji2\";\r\n    IconNames[\"GripperBarHorizontal\"] = \"GripperBarHorizontal\";\r\n    IconNames[\"System\"] = \"System\";\r\n    IconNames[\"Personalize\"] = \"Personalize\";\r\n    IconNames[\"SearchAndApps\"] = \"SearchAndApps\";\r\n    IconNames[\"Globe\"] = \"Globe\";\r\n    IconNames[\"EaseOfAccess\"] = \"EaseOfAccess\";\r\n    IconNames[\"ContactInfo\"] = \"ContactInfo\";\r\n    IconNames[\"Unpin\"] = \"Unpin\";\r\n    IconNames[\"Contact\"] = \"Contact\";\r\n    IconNames[\"Memo\"] = \"Memo\";\r\n    IconNames[\"IncomingCall\"] = \"IncomingCall\";\r\n    IconNames[\"Paste\"] = \"Paste\";\r\n    IconNames[\"WindowsLogo\"] = \"WindowsLogo\";\r\n    IconNames[\"Error\"] = \"Error\";\r\n    IconNames[\"GripperBarVertical\"] = \"GripperBarVertical\";\r\n    IconNames[\"Unlock\"] = \"Unlock\";\r\n    IconNames[\"Slideshow\"] = \"Slideshow\";\r\n    IconNames[\"Calendar\"] = \"Calendar\";\r\n    IconNames[\"Megaphone\"] = \"Megaphone\";\r\n    IconNames[\"AutoEnhanceOn\"] = \"AutoEnhanceOn\";\r\n    IconNames[\"AutoEnhanceOff\"] = \"AutoEnhanceOff\";\r\n    IconNames[\"Color\"] = \"Color\";\r\n    IconNames[\"SaveAs\"] = \"SaveAs\";\r\n    IconNames[\"Light\"] = \"Light\";\r\n    IconNames[\"Filters\"] = \"Filters\";\r\n    IconNames[\"AspectRatio\"] = \"AspectRatio\";\r\n    IconNames[\"Contrast\"] = \"Contrast\";\r\n    IconNames[\"Redo\"] = \"Redo\";\r\n    IconNames[\"Undo\"] = \"Undo\";\r\n    IconNames[\"Crop\"] = \"Crop\";\r\n    IconNames[\"PhotoCollection\"] = \"PhotoCollection\";\r\n    IconNames[\"Album\"] = \"Album\";\r\n    IconNames[\"Rotate\"] = \"Rotate\";\r\n    IconNames[\"PanoIndicator\"] = \"PanoIndicator\";\r\n    IconNames[\"Translate\"] = \"Translate\";\r\n    IconNames[\"RedEye\"] = \"RedEye\";\r\n    IconNames[\"ThumbnailView\"] = \"ThumbnailView\";\r\n    IconNames[\"Package\"] = \"Package\";\r\n    IconNames[\"Telemarketer\"] = \"Telemarketer\";\r\n    IconNames[\"Warning\"] = \"Warning\";\r\n    IconNames[\"Financial\"] = \"Financial\";\r\n    IconNames[\"Education\"] = \"Education\";\r\n    IconNames[\"ShoppingCart\"] = \"ShoppingCart\";\r\n    IconNames[\"Train\"] = \"Train\";\r\n    IconNames[\"Flag\"] = \"Flag\";\r\n    IconNames[\"Move\"] = \"Move\";\r\n    IconNames[\"Page\"] = \"Page\";\r\n    IconNames[\"TouchPointer\"] = \"TouchPointer\";\r\n    IconNames[\"Merge\"] = \"Merge\";\r\n    IconNames[\"TurnRight\"] = \"TurnRight\";\r\n    IconNames[\"Ferry\"] = \"Ferry\";\r\n    IconNames[\"Highlight\"] = \"Highlight\";\r\n    IconNames[\"PowerButton\"] = \"PowerButton\";\r\n    IconNames[\"Tab\"] = \"Tab\";\r\n    IconNames[\"Admin\"] = \"Admin\";\r\n    IconNames[\"TVMonitor\"] = \"TVMonitor\";\r\n    IconNames[\"Speakers\"] = \"Speakers\";\r\n    IconNames[\"Game\"] = \"Game\";\r\n    IconNames[\"UnstackSelected\"] = \"UnstackSelected\";\r\n    IconNames[\"StackIndicator\"] = \"StackIndicator\";\r\n    IconNames[\"Nav2DMapView\"] = \"Nav2DMapView\";\r\n    IconNames[\"StreetsideSplitMinimize\"] = \"StreetsideSplitMinimize\";\r\n    IconNames[\"Car\"] = \"Car\";\r\n    IconNames[\"Bus\"] = \"Bus\";\r\n    IconNames[\"EatDrink\"] = \"EatDrink\";\r\n    IconNames[\"SeeDo\"] = \"SeeDo\";\r\n    IconNames[\"LocationCircle\"] = \"LocationCircle\";\r\n    IconNames[\"Home\"] = \"Home\";\r\n    IconNames[\"SwitcherStartEnd\"] = \"SwitcherStartEnd\";\r\n    IconNames[\"ParkingLocation\"] = \"ParkingLocation\";\r\n    IconNames[\"IncidentTriangle\"] = \"IncidentTriangle\";\r\n    IconNames[\"Touch\"] = \"Touch\";\r\n    IconNames[\"MapDirections\"] = \"MapDirections\";\r\n    IconNames[\"CaretHollow\"] = \"CaretHollow\";\r\n    IconNames[\"CaretSolid\"] = \"CaretSolid\";\r\n    IconNames[\"History\"] = \"History\";\r\n    IconNames[\"Location\"] = \"Location\";\r\n    IconNames[\"MapLayers\"] = \"MapLayers\";\r\n    IconNames[\"SearchNearby\"] = \"SearchNearby\";\r\n    IconNames[\"Work\"] = \"Work\";\r\n    IconNames[\"Recent\"] = \"Recent\";\r\n    IconNames[\"Hotel\"] = \"Hotel\";\r\n    IconNames[\"Bank\"] = \"Bank\";\r\n    IconNames[\"LocationDot\"] = \"LocationDot\";\r\n    IconNames[\"Dictionary\"] = \"Dictionary\";\r\n    IconNames[\"ChromeBack\"] = \"ChromeBack\";\r\n    IconNames[\"FolderOpen\"] = \"FolderOpen\";\r\n    IconNames[\"Pinned\"] = \"Pinned\";\r\n    IconNames[\"PinnedFill\"] = \"PinnedFill\";\r\n    IconNames[\"RevToggleKey\"] = \"RevToggleKey\";\r\n    IconNames[\"USB\"] = \"USB\";\r\n    IconNames[\"View\"] = \"View\";\r\n    IconNames[\"Previous\"] = \"Previous\";\r\n    IconNames[\"Next\"] = \"Next\";\r\n    IconNames[\"Clear\"] = \"Clear\";\r\n    IconNames[\"Sync\"] = \"Sync\";\r\n    IconNames[\"Download\"] = \"Download\";\r\n    IconNames[\"Help\"] = \"Help\";\r\n    IconNames[\"Upload\"] = \"Upload\";\r\n    IconNames[\"Emoji\"] = \"Emoji\";\r\n    IconNames[\"MailForward\"] = \"MailForward\";\r\n    IconNames[\"ClosePane\"] = \"ClosePane\";\r\n    IconNames[\"OpenPane\"] = \"OpenPane\";\r\n    IconNames[\"PreviewLink\"] = \"PreviewLink\";\r\n    IconNames[\"ZoomIn\"] = \"ZoomIn\";\r\n    IconNames[\"Bookmarks\"] = \"Bookmarks\";\r\n    IconNames[\"Document\"] = \"Document\";\r\n    IconNames[\"ProtectedDocument\"] = \"ProtectedDocument\";\r\n    IconNames[\"OpenInNewWindow\"] = \"OpenInNewWindow\";\r\n    IconNames[\"MailFill\"] = \"MailFill\";\r\n    IconNames[\"ViewAll\"] = \"ViewAll\";\r\n    IconNames[\"Switch\"] = \"Switch\";\r\n    IconNames[\"Rename\"] = \"Rename\";\r\n    IconNames[\"Go\"] = \"Go\";\r\n    IconNames[\"Remote\"] = \"Remote\";\r\n    IconNames[\"SelectAll\"] = \"SelectAll\";\r\n    IconNames[\"Orientation\"] = \"Orientation\";\r\n    IconNames[\"Import\"] = \"Import\";\r\n    IconNames[\"Folder\"] = \"Folder\";\r\n    IconNames[\"Picture\"] = \"Picture\";\r\n    IconNames[\"ChromeClose\"] = \"ChromeClose\";\r\n    IconNames[\"ShowResults\"] = \"ShowResults\";\r\n    IconNames[\"Message\"] = \"Message\";\r\n    IconNames[\"CalendarDay\"] = \"CalendarDay\";\r\n    IconNames[\"CalendarWeek\"] = \"CalendarWeek\";\r\n    IconNames[\"MailReplyAll\"] = \"MailReplyAll\";\r\n    IconNames[\"Read\"] = \"Read\";\r\n    IconNames[\"Cut\"] = \"Cut\";\r\n    IconNames[\"PaymentCard\"] = \"PaymentCard\";\r\n    IconNames[\"Copy\"] = \"Copy\";\r\n    IconNames[\"Important\"] = \"Important\";\r\n    IconNames[\"MailReply\"] = \"MailReply\";\r\n    IconNames[\"Sort\"] = \"Sort\";\r\n    IconNames[\"GotoToday\"] = \"GotoToday\";\r\n    IconNames[\"Font\"] = \"Font\";\r\n    IconNames[\"FontColor\"] = \"FontColor\";\r\n    IconNames[\"FolderFill\"] = \"FolderFill\";\r\n    IconNames[\"Permissions\"] = \"Permissions\";\r\n    IconNames[\"DisableUpdates\"] = \"DisableUpdates\";\r\n    IconNames[\"Unfavorite\"] = \"Unfavorite\";\r\n    IconNames[\"Italic\"] = \"Italic\";\r\n    IconNames[\"Underline\"] = \"Underline\";\r\n    IconNames[\"Bold\"] = \"Bold\";\r\n    IconNames[\"MoveToFolder\"] = \"MoveToFolder\";\r\n    IconNames[\"Dislike\"] = \"Dislike\";\r\n    IconNames[\"Like\"] = \"Like\";\r\n    IconNames[\"AlignRight\"] = \"AlignRight\";\r\n    IconNames[\"AlignCenter\"] = \"AlignCenter\";\r\n    IconNames[\"AlignLeft\"] = \"AlignLeft\";\r\n    IconNames[\"OpenFile\"] = \"OpenFile\";\r\n    IconNames[\"ClearSelection\"] = \"ClearSelection\";\r\n    IconNames[\"FontDecrease\"] = \"FontDecrease\";\r\n    IconNames[\"FontIncrease\"] = \"FontIncrease\";\r\n    IconNames[\"FontSize\"] = \"FontSize\";\r\n    IconNames[\"CellPhone\"] = \"CellPhone\";\r\n    IconNames[\"Tag\"] = \"Tag\";\r\n    IconNames[\"RepeatOne\"] = \"RepeatOne\";\r\n    IconNames[\"RepeatAll\"] = \"RepeatAll\";\r\n    IconNames[\"Calculator\"] = \"Calculator\";\r\n    IconNames[\"Library\"] = \"Library\";\r\n    IconNames[\"PostUpdate\"] = \"PostUpdate\";\r\n    IconNames[\"NewFolder\"] = \"NewFolder\";\r\n    IconNames[\"CalendarReply\"] = \"CalendarReply\";\r\n    IconNames[\"UnsyncFolder\"] = \"UnsyncFolder\";\r\n    IconNames[\"SyncFolder\"] = \"SyncFolder\";\r\n    IconNames[\"BlockContact\"] = \"BlockContact\";\r\n    IconNames[\"AddFriend\"] = \"AddFriend\";\r\n    IconNames[\"Accept\"] = \"Accept\";\r\n    IconNames[\"BulletedList\"] = \"BulletedList\";\r\n    IconNames[\"Preview\"] = \"Preview\";\r\n    IconNames[\"News\"] = \"News\";\r\n    IconNames[\"Chat\"] = \"Chat\";\r\n    IconNames[\"Group\"] = \"Group\";\r\n    IconNames[\"World\"] = \"World\";\r\n    IconNames[\"Comment\"] = \"Comment\";\r\n    IconNames[\"DockLeft\"] = \"DockLeft\";\r\n    IconNames[\"DockRight\"] = \"DockRight\";\r\n    IconNames[\"Repair\"] = \"Repair\";\r\n    IconNames[\"Accounts\"] = \"Accounts\";\r\n    IconNames[\"Street\"] = \"Street\";\r\n    IconNames[\"RadioBullet\"] = \"RadioBullet\";\r\n    IconNames[\"Stopwatch\"] = \"Stopwatch\";\r\n    IconNames[\"Clock\"] = \"Clock\";\r\n    IconNames[\"WorldClock\"] = \"WorldClock\";\r\n    IconNames[\"AlarmClock\"] = \"AlarmClock\";\r\n    IconNames[\"Photo\"] = \"Photo\";\r\n    IconNames[\"ActionCenter\"] = \"ActionCenter\";\r\n    IconNames[\"Hospital\"] = \"Hospital\";\r\n    IconNames[\"Timer\"] = \"Timer\";\r\n    IconNames[\"FullCircleMask\"] = \"FullCircleMask\";\r\n    IconNames[\"LocationFill\"] = \"LocationFill\";\r\n    IconNames[\"ChromeMinimize\"] = \"ChromeMinimize\";\r\n    IconNames[\"ChromeRestore\"] = \"ChromeRestore\";\r\n    IconNames[\"Annotation\"] = \"Annotation\";\r\n    IconNames[\"Fingerprint\"] = \"Fingerprint\";\r\n    IconNames[\"Handwriting\"] = \"Handwriting\";\r\n    IconNames[\"ChromeFullScreen\"] = \"ChromeFullScreen\";\r\n    IconNames[\"Completed\"] = \"Completed\";\r\n    IconNames[\"Label\"] = \"Label\";\r\n    IconNames[\"FlickDown\"] = \"FlickDown\";\r\n    IconNames[\"FlickUp\"] = \"FlickUp\";\r\n    IconNames[\"FlickLeft\"] = \"FlickLeft\";\r\n    IconNames[\"FlickRight\"] = \"FlickRight\";\r\n    IconNames[\"MiniExpand\"] = \"MiniExpand\";\r\n    IconNames[\"MiniContract\"] = \"MiniContract\";\r\n    IconNames[\"Streaming\"] = \"Streaming\";\r\n    IconNames[\"MusicInCollection\"] = \"MusicInCollection\";\r\n    IconNames[\"OneDriveLogo\"] = \"OneDriveLogo\";\r\n    IconNames[\"CompassNW\"] = \"CompassNW\";\r\n    IconNames[\"Code\"] = \"Code\";\r\n    IconNames[\"LightningBolt\"] = \"LightningBolt\";\r\n    IconNames[\"Info\"] = \"Info\";\r\n    IconNames[\"CalculatorMultiply\"] = \"CalculatorMultiply\";\r\n    IconNames[\"CalculatorAddition\"] = \"CalculatorAddition\";\r\n    IconNames[\"CalculatorSubtract\"] = \"CalculatorSubtract\";\r\n    IconNames[\"CalculatorPercentage\"] = \"CalculatorPercentage\";\r\n    IconNames[\"CalculatorEqualTo\"] = \"CalculatorEqualTo\";\r\n    IconNames[\"PrintfaxPrinterFile\"] = \"PrintfaxPrinterFile\";\r\n    IconNames[\"StorageOptical\"] = \"StorageOptical\";\r\n    IconNames[\"Communications\"] = \"Communications\";\r\n    IconNames[\"Headset\"] = \"Headset\";\r\n    IconNames[\"Health\"] = \"Health\";\r\n    IconNames[\"FrontCamera\"] = \"FrontCamera\";\r\n    IconNames[\"ChevronUpSmall\"] = \"ChevronUpSmall\";\r\n    IconNames[\"ChevronDownSmall\"] = \"ChevronDownSmall\";\r\n    IconNames[\"ChevronLeftSmall\"] = \"ChevronLeftSmall\";\r\n    IconNames[\"ChevronRightSmall\"] = \"ChevronRightSmall\";\r\n    IconNames[\"ChevronUpMed\"] = \"ChevronUpMed\";\r\n    IconNames[\"ChevronDownMed\"] = \"ChevronDownMed\";\r\n    IconNames[\"ChevronLeftMed\"] = \"ChevronLeftMed\";\r\n    IconNames[\"ChevronRightMed\"] = \"ChevronRightMed\";\r\n    IconNames[\"Devices2\"] = \"Devices2\";\r\n    IconNames[\"PC1\"] = \"PC1\";\r\n    IconNames[\"PresenceChickletVideo\"] = \"PresenceChickletVideo\";\r\n    IconNames[\"Reply\"] = \"Reply\";\r\n    IconNames[\"HalfAlpha\"] = \"HalfAlpha\";\r\n    IconNames[\"ConstructionCone\"] = \"ConstructionCone\";\r\n    IconNames[\"DoubleChevronLeftMed\"] = \"DoubleChevronLeftMed\";\r\n    IconNames[\"Volume0\"] = \"Volume0\";\r\n    IconNames[\"Volume1\"] = \"Volume1\";\r\n    IconNames[\"Volume2\"] = \"Volume2\";\r\n    IconNames[\"Volume3\"] = \"Volume3\";\r\n    IconNames[\"Chart\"] = \"Chart\";\r\n    IconNames[\"Robot\"] = \"Robot\";\r\n    IconNames[\"Manufacturing\"] = \"Manufacturing\";\r\n    IconNames[\"LockSolid\"] = \"LockSolid\";\r\n    IconNames[\"FitPage\"] = \"FitPage\";\r\n    IconNames[\"FitWidth\"] = \"FitWidth\";\r\n    IconNames[\"BidiLtr\"] = \"BidiLtr\";\r\n    IconNames[\"BidiRtl\"] = \"BidiRtl\";\r\n    IconNames[\"RightDoubleQuote\"] = \"RightDoubleQuote\";\r\n    IconNames[\"Sunny\"] = \"Sunny\";\r\n    IconNames[\"CloudWeather\"] = \"CloudWeather\";\r\n    IconNames[\"Cloudy\"] = \"Cloudy\";\r\n    IconNames[\"PartlyCloudyDay\"] = \"PartlyCloudyDay\";\r\n    IconNames[\"PartlyCloudyNight\"] = \"PartlyCloudyNight\";\r\n    IconNames[\"ClearNight\"] = \"ClearNight\";\r\n    IconNames[\"RainShowersDay\"] = \"RainShowersDay\";\r\n    IconNames[\"Rain\"] = \"Rain\";\r\n    IconNames[\"Thunderstorms\"] = \"Thunderstorms\";\r\n    IconNames[\"RainSnow\"] = \"RainSnow\";\r\n    IconNames[\"Snow\"] = \"Snow\";\r\n    IconNames[\"BlowingSnow\"] = \"BlowingSnow\";\r\n    IconNames[\"Frigid\"] = \"Frigid\";\r\n    IconNames[\"Fog\"] = \"Fog\";\r\n    IconNames[\"Squalls\"] = \"Squalls\";\r\n    IconNames[\"Duststorm\"] = \"Duststorm\";\r\n    IconNames[\"Unknown\"] = \"Unknown\";\r\n    IconNames[\"Precipitation\"] = \"Precipitation\";\r\n    IconNames[\"SortLines\"] = \"SortLines\";\r\n    IconNames[\"Ribbon\"] = \"Ribbon\";\r\n    IconNames[\"AreaChart\"] = \"AreaChart\";\r\n    IconNames[\"Assign\"] = \"Assign\";\r\n    IconNames[\"FlowChart\"] = \"FlowChart\";\r\n    IconNames[\"CheckList\"] = \"CheckList\";\r\n    IconNames[\"Diagnostic\"] = \"Diagnostic\";\r\n    IconNames[\"Generate\"] = \"Generate\";\r\n    IconNames[\"LineChart\"] = \"LineChart\";\r\n    IconNames[\"Equalizer\"] = \"Equalizer\";\r\n    IconNames[\"BarChartHorizontal\"] = \"BarChartHorizontal\";\r\n    IconNames[\"BarChartVertical\"] = \"BarChartVertical\";\r\n    IconNames[\"Freezing\"] = \"Freezing\";\r\n    IconNames[\"FunnelChart\"] = \"FunnelChart\";\r\n    IconNames[\"Processing\"] = \"Processing\";\r\n    IconNames[\"Quantity\"] = \"Quantity\";\r\n    IconNames[\"ReportDocument\"] = \"ReportDocument\";\r\n    IconNames[\"StackColumnChart\"] = \"StackColumnChart\";\r\n    IconNames[\"SnowShowerDay\"] = \"SnowShowerDay\";\r\n    IconNames[\"HailDay\"] = \"HailDay\";\r\n    IconNames[\"WorkFlow\"] = \"WorkFlow\";\r\n    IconNames[\"HourGlass\"] = \"HourGlass\";\r\n    IconNames[\"StoreLogoMed20\"] = \"StoreLogoMed20\";\r\n    IconNames[\"TimeSheet\"] = \"TimeSheet\";\r\n    IconNames[\"TriangleSolid\"] = \"TriangleSolid\";\r\n    IconNames[\"UpgradeAnalysis\"] = \"UpgradeAnalysis\";\r\n    IconNames[\"VideoSolid\"] = \"VideoSolid\";\r\n    IconNames[\"RainShowersNight\"] = \"RainShowersNight\";\r\n    IconNames[\"SnowShowerNight\"] = \"SnowShowerNight\";\r\n    IconNames[\"Teamwork\"] = \"Teamwork\";\r\n    IconNames[\"HailNight\"] = \"HailNight\";\r\n    IconNames[\"PeopleAdd\"] = \"PeopleAdd\";\r\n    IconNames[\"Glasses\"] = \"Glasses\";\r\n    IconNames[\"DateTime2\"] = \"DateTime2\";\r\n    IconNames[\"Shield\"] = \"Shield\";\r\n    IconNames[\"Header1\"] = \"Header1\";\r\n    IconNames[\"PageAdd\"] = \"PageAdd\";\r\n    IconNames[\"NumberedList\"] = \"NumberedList\";\r\n    IconNames[\"PowerBILogo\"] = \"PowerBILogo\";\r\n    IconNames[\"Info2\"] = \"Info2\";\r\n    IconNames[\"MusicInCollectionFill\"] = \"MusicInCollectionFill\";\r\n    IconNames[\"List\"] = \"List\";\r\n    IconNames[\"Asterisk\"] = \"Asterisk\";\r\n    IconNames[\"ErrorBadge\"] = \"ErrorBadge\";\r\n    IconNames[\"CircleRing\"] = \"CircleRing\";\r\n    IconNames[\"CircleFill\"] = \"CircleFill\";\r\n    IconNames[\"Record2\"] = \"Record2\";\r\n    IconNames[\"AllAppsMirrored\"] = \"AllAppsMirrored\";\r\n    IconNames[\"BookmarksMirrored\"] = \"BookmarksMirrored\";\r\n    IconNames[\"BulletedListMirrored\"] = \"BulletedListMirrored\";\r\n    IconNames[\"CaretHollowMirrored\"] = \"CaretHollowMirrored\";\r\n    IconNames[\"CaretSolidMirrored\"] = \"CaretSolidMirrored\";\r\n    IconNames[\"ChromeBackMirrored\"] = \"ChromeBackMirrored\";\r\n    IconNames[\"ClearSelectionMirrored\"] = \"ClearSelectionMirrored\";\r\n    IconNames[\"ClosePaneMirrored\"] = \"ClosePaneMirrored\";\r\n    IconNames[\"DockLeftMirrored\"] = \"DockLeftMirrored\";\r\n    IconNames[\"DoubleChevronLeftMedMirrored\"] = \"DoubleChevronLeftMedMirrored\";\r\n    IconNames[\"GoMirrored\"] = \"GoMirrored\";\r\n    IconNames[\"HelpMirrored\"] = \"HelpMirrored\";\r\n    IconNames[\"ImportMirrored\"] = \"ImportMirrored\";\r\n    IconNames[\"ImportAllMirrored\"] = \"ImportAllMirrored\";\r\n    IconNames[\"ListMirrored\"] = \"ListMirrored\";\r\n    IconNames[\"MailForwardMirrored\"] = \"MailForwardMirrored\";\r\n    IconNames[\"MailReplyMirrored\"] = \"MailReplyMirrored\";\r\n    IconNames[\"MailReplyAllMirrored\"] = \"MailReplyAllMirrored\";\r\n    IconNames[\"MiniContractMirrored\"] = \"MiniContractMirrored\";\r\n    IconNames[\"MiniExpandMirrored\"] = \"MiniExpandMirrored\";\r\n    IconNames[\"OpenPaneMirrored\"] = \"OpenPaneMirrored\";\r\n    IconNames[\"ParkingLocationMirrored\"] = \"ParkingLocationMirrored\";\r\n    IconNames[\"SendMirrored\"] = \"SendMirrored\";\r\n    IconNames[\"ShowResultsMirrored\"] = \"ShowResultsMirrored\";\r\n    IconNames[\"ThumbnailViewMirrored\"] = \"ThumbnailViewMirrored\";\r\n    IconNames[\"Media\"] = \"Media\";\r\n    IconNames[\"Devices3\"] = \"Devices3\";\r\n    IconNames[\"Focus\"] = \"Focus\";\r\n    IconNames[\"VideoLightOff\"] = \"VideoLightOff\";\r\n    IconNames[\"Lightbulb\"] = \"Lightbulb\";\r\n    IconNames[\"StatusTriangle\"] = \"StatusTriangle\";\r\n    IconNames[\"VolumeDisabled\"] = \"VolumeDisabled\";\r\n    IconNames[\"Puzzle\"] = \"Puzzle\";\r\n    IconNames[\"EmojiNeutral\"] = \"EmojiNeutral\";\r\n    IconNames[\"EmojiDisappointed\"] = \"EmojiDisappointed\";\r\n    IconNames[\"HomeSolid\"] = \"HomeSolid\";\r\n    IconNames[\"Ringer\"] = \"Ringer\";\r\n    IconNames[\"PDF\"] = \"PDF\";\r\n    IconNames[\"HeartBroken\"] = \"HeartBroken\";\r\n    IconNames[\"StoreLogo16\"] = \"StoreLogo16\";\r\n    IconNames[\"MultiSelectMirrored\"] = \"MultiSelectMirrored\";\r\n    IconNames[\"Broom\"] = \"Broom\";\r\n    IconNames[\"Cocktails\"] = \"Cocktails\";\r\n    IconNames[\"Wines\"] = \"Wines\";\r\n    IconNames[\"Articles\"] = \"Articles\";\r\n    IconNames[\"Cycling\"] = \"Cycling\";\r\n    IconNames[\"DietPlanNotebook\"] = \"DietPlanNotebook\";\r\n    IconNames[\"Pill\"] = \"Pill\";\r\n    IconNames[\"ExerciseTracker\"] = \"ExerciseTracker\";\r\n    IconNames[\"HandsFree\"] = \"HandsFree\";\r\n    IconNames[\"Medical\"] = \"Medical\";\r\n    IconNames[\"Running\"] = \"Running\";\r\n    IconNames[\"Weights\"] = \"Weights\";\r\n    IconNames[\"Trackers\"] = \"Trackers\";\r\n    IconNames[\"AddNotes\"] = \"AddNotes\";\r\n    IconNames[\"AllCurrency\"] = \"AllCurrency\";\r\n    IconNames[\"BarChart4\"] = \"BarChart4\";\r\n    IconNames[\"CirclePlus\"] = \"CirclePlus\";\r\n    IconNames[\"Coffee\"] = \"Coffee\";\r\n    IconNames[\"Cotton\"] = \"Cotton\";\r\n    IconNames[\"Market\"] = \"Market\";\r\n    IconNames[\"Money\"] = \"Money\";\r\n    IconNames[\"PieDouble\"] = \"PieDouble\";\r\n    IconNames[\"PieSingle\"] = \"PieSingle\";\r\n    IconNames[\"RemoveFilter\"] = \"RemoveFilter\";\r\n    IconNames[\"Savings\"] = \"Savings\";\r\n    IconNames[\"Sell\"] = \"Sell\";\r\n    IconNames[\"StockDown\"] = \"StockDown\";\r\n    IconNames[\"StockUp\"] = \"StockUp\";\r\n    IconNames[\"Lamp\"] = \"Lamp\";\r\n    IconNames[\"Source\"] = \"Source\";\r\n    IconNames[\"MSNVideos\"] = \"MSNVideos\";\r\n    IconNames[\"Cricket\"] = \"Cricket\";\r\n    IconNames[\"Golf\"] = \"Golf\";\r\n    IconNames[\"Baseball\"] = \"Baseball\";\r\n    IconNames[\"Soccer\"] = \"Soccer\";\r\n    IconNames[\"MoreSports\"] = \"MoreSports\";\r\n    IconNames[\"AutoRacing\"] = \"AutoRacing\";\r\n    IconNames[\"CollegeHoops\"] = \"CollegeHoops\";\r\n    IconNames[\"CollegeFootball\"] = \"CollegeFootball\";\r\n    IconNames[\"ProFootball\"] = \"ProFootball\";\r\n    IconNames[\"ProHockey\"] = \"ProHockey\";\r\n    IconNames[\"Rugby\"] = \"Rugby\";\r\n    IconNames[\"SubstitutionsIn\"] = \"SubstitutionsIn\";\r\n    IconNames[\"Tennis\"] = \"Tennis\";\r\n    IconNames[\"Arrivals\"] = \"Arrivals\";\r\n    IconNames[\"Design\"] = \"Design\";\r\n    IconNames[\"Website\"] = \"Website\";\r\n    IconNames[\"Drop\"] = \"Drop\";\r\n    IconNames[\"HistoricalWeather\"] = \"HistoricalWeather\";\r\n    IconNames[\"SkiResorts\"] = \"SkiResorts\";\r\n    IconNames[\"Snowflake\"] = \"Snowflake\";\r\n    IconNames[\"BusSolid\"] = \"BusSolid\";\r\n    IconNames[\"FerrySolid\"] = \"FerrySolid\";\r\n    IconNames[\"AirplaneSolid\"] = \"AirplaneSolid\";\r\n    IconNames[\"TrainSolid\"] = \"TrainSolid\";\r\n    IconNames[\"Heart\"] = \"Heart\";\r\n    IconNames[\"HeartFill\"] = \"HeartFill\";\r\n    IconNames[\"Ticket\"] = \"Ticket\";\r\n    IconNames[\"WifiWarning4\"] = \"WifiWarning4\";\r\n    IconNames[\"Devices4\"] = \"Devices4\";\r\n    IconNames[\"AzureLogo\"] = \"AzureLogo\";\r\n    IconNames[\"BingLogo\"] = \"BingLogo\";\r\n    IconNames[\"MSNLogo\"] = \"MSNLogo\";\r\n    IconNames[\"OutlookLogoInverse\"] = \"OutlookLogoInverse\";\r\n    IconNames[\"OfficeLogo\"] = \"OfficeLogo\";\r\n    IconNames[\"SkypeLogo\"] = \"SkypeLogo\";\r\n    IconNames[\"Door\"] = \"Door\";\r\n    IconNames[\"EditMirrored\"] = \"EditMirrored\";\r\n    IconNames[\"GiftCard\"] = \"GiftCard\";\r\n    IconNames[\"DoubleBookmark\"] = \"DoubleBookmark\";\r\n    IconNames[\"StatusErrorFull\"] = \"StatusErrorFull\";\r\n    IconNames[\"Certificate\"] = \"Certificate\";\r\n    IconNames[\"FastForward\"] = \"FastForward\";\r\n    IconNames[\"Rewind\"] = \"Rewind\";\r\n    IconNames[\"Photo2\"] = \"Photo2\";\r\n    IconNames[\"OpenSource\"] = \"OpenSource\";\r\n    IconNames[\"Movers\"] = \"Movers\";\r\n    IconNames[\"CloudDownload\"] = \"CloudDownload\";\r\n    IconNames[\"Family\"] = \"Family\";\r\n    IconNames[\"WindDirection\"] = \"WindDirection\";\r\n    IconNames[\"Bug\"] = \"Bug\";\r\n    IconNames[\"SiteScan\"] = \"SiteScan\";\r\n    IconNames[\"BrowserScreenShot\"] = \"BrowserScreenShot\";\r\n    IconNames[\"F12DevTools\"] = \"F12DevTools\";\r\n    IconNames[\"CSS\"] = \"CSS\";\r\n    IconNames[\"JS\"] = \"JS\";\r\n    IconNames[\"DeliveryTruck\"] = \"DeliveryTruck\";\r\n    IconNames[\"ReminderPerson\"] = \"ReminderPerson\";\r\n    IconNames[\"ReminderGroup\"] = \"ReminderGroup\";\r\n    IconNames[\"TabletMode\"] = \"TabletMode\";\r\n    IconNames[\"Umbrella\"] = \"Umbrella\";\r\n    IconNames[\"NetworkTower\"] = \"NetworkTower\";\r\n    IconNames[\"CityNext\"] = \"CityNext\";\r\n    IconNames[\"CityNext2\"] = \"CityNext2\";\r\n    IconNames[\"Section\"] = \"Section\";\r\n    IconNames[\"OneNoteLogoInverse\"] = \"OneNoteLogoInverse\";\r\n    IconNames[\"ToggleFilled\"] = \"ToggleFilled\";\r\n    IconNames[\"ToggleBorder\"] = \"ToggleBorder\";\r\n    IconNames[\"SliderThumb\"] = \"SliderThumb\";\r\n    IconNames[\"ToggleThumb\"] = \"ToggleThumb\";\r\n    IconNames[\"MiracastLogoLarge\"] = \"MiracastLogoLarge\";\r\n    IconNames[\"Documentation\"] = \"Documentation\";\r\n    IconNames[\"Badge\"] = \"Badge\";\r\n    IconNames[\"Giftbox\"] = \"Giftbox\";\r\n    IconNames[\"VisualStudioLogo\"] = \"VisualStudioLogo\";\r\n    IconNames[\"HomeGroup\"] = \"HomeGroup\";\r\n    IconNames[\"ExcelLogoInverse\"] = \"ExcelLogoInverse\";\r\n    IconNames[\"WordLogoInverse\"] = \"WordLogoInverse\";\r\n    IconNames[\"PowerPointLogoInverse\"] = \"PowerPointLogoInverse\";\r\n    IconNames[\"Cafe\"] = \"Cafe\";\r\n    IconNames[\"SpeedHigh\"] = \"SpeedHigh\";\r\n    IconNames[\"Commitments\"] = \"Commitments\";\r\n    IconNames[\"ThisPC\"] = \"ThisPC\";\r\n    IconNames[\"MusicNote\"] = \"MusicNote\";\r\n    IconNames[\"MicOff\"] = \"MicOff\";\r\n    IconNames[\"PlaybackRate1x\"] = \"PlaybackRate1x\";\r\n    IconNames[\"EdgeLogo\"] = \"EdgeLogo\";\r\n    IconNames[\"CompletedSolid\"] = \"CompletedSolid\";\r\n    IconNames[\"AlbumRemove\"] = \"AlbumRemove\";\r\n    IconNames[\"MessageFill\"] = \"MessageFill\";\r\n    IconNames[\"TabletSelected\"] = \"TabletSelected\";\r\n    IconNames[\"MobileSelected\"] = \"MobileSelected\";\r\n    IconNames[\"LaptopSelected\"] = \"LaptopSelected\";\r\n    IconNames[\"TVMonitorSelected\"] = \"TVMonitorSelected\";\r\n    IconNames[\"DeveloperTools\"] = \"DeveloperTools\";\r\n    IconNames[\"Shapes\"] = \"Shapes\";\r\n    IconNames[\"InsertTextBox\"] = \"InsertTextBox\";\r\n    IconNames[\"LowerBrightness\"] = \"LowerBrightness\";\r\n    IconNames[\"WebComponents\"] = \"WebComponents\";\r\n    IconNames[\"OfflineStorage\"] = \"OfflineStorage\";\r\n    IconNames[\"DOM\"] = \"DOM\";\r\n    IconNames[\"CloudUpload\"] = \"CloudUpload\";\r\n    IconNames[\"ScrollUpDown\"] = \"ScrollUpDown\";\r\n    IconNames[\"DateTime\"] = \"DateTime\";\r\n    IconNames[\"Event\"] = \"Event\";\r\n    IconNames[\"Cake\"] = \"Cake\";\r\n    IconNames[\"Tiles\"] = \"Tiles\";\r\n    IconNames[\"Org\"] = \"Org\";\r\n    IconNames[\"PartyLeader\"] = \"PartyLeader\";\r\n    IconNames[\"DRM\"] = \"DRM\";\r\n    IconNames[\"CloudAdd\"] = \"CloudAdd\";\r\n    IconNames[\"AppIconDefault\"] = \"AppIconDefault\";\r\n    IconNames[\"Photo2Add\"] = \"Photo2Add\";\r\n    IconNames[\"Photo2Remove\"] = \"Photo2Remove\";\r\n    IconNames[\"Calories\"] = \"Calories\";\r\n    IconNames[\"POI\"] = \"POI\";\r\n    IconNames[\"FacebookLogo\"] = \"FacebookLogo\";\r\n    IconNames[\"TwitterLogo\"] = \"TwitterLogo\";\r\n    IconNames[\"AddTo\"] = \"AddTo\";\r\n    IconNames[\"RadioBtnOff\"] = \"RadioBtnOff\";\r\n    IconNames[\"RadioBtnOn\"] = \"RadioBtnOn\";\r\n    IconNames[\"ExploreContent\"] = \"ExploreContent\";\r\n    IconNames[\"Embed\"] = \"Embed\";\r\n    IconNames[\"Product\"] = \"Product\";\r\n    IconNames[\"ProgressLoopInner\"] = \"ProgressLoopInner\";\r\n    IconNames[\"ProgressLoopOuter\"] = \"ProgressLoopOuter\";\r\n    IconNames[\"Blocked2\"] = \"Blocked2\";\r\n    IconNames[\"FangBody\"] = \"FangBody\";\r\n    IconNames[\"PageHeader\"] = \"PageHeader\";\r\n    IconNames[\"Glimmer\"] = \"Glimmer\";\r\n    IconNames[\"ChatInviteFriend\"] = \"ChatInviteFriend\";\r\n    IconNames[\"Brush\"] = \"Brush\";\r\n    IconNames[\"Shirt\"] = \"Shirt\";\r\n    IconNames[\"Crown\"] = \"Crown\";\r\n    IconNames[\"Diamond\"] = \"Diamond\";\r\n    IconNames[\"ScaleUp\"] = \"ScaleUp\";\r\n    IconNames[\"QRCode\"] = \"QRCode\";\r\n    IconNames[\"Feedback\"] = \"Feedback\";\r\n    IconNames[\"SharepointLogoInverse\"] = \"SharepointLogoInverse\";\r\n    IconNames[\"YammerLogo\"] = \"YammerLogo\";\r\n    IconNames[\"Hide\"] = \"Hide\";\r\n    IconNames[\"Uneditable\"] = \"Uneditable\";\r\n    IconNames[\"ReturnToSession\"] = \"ReturnToSession\";\r\n    IconNames[\"OpenFolderHorizontal\"] = \"OpenFolderHorizontal\";\r\n    IconNames[\"CalendarMirrored\"] = \"CalendarMirrored\";\r\n    IconNames[\"SwayLogoInverse\"] = \"SwayLogoInverse\";\r\n    IconNames[\"OutOfOffice\"] = \"OutOfOffice\";\r\n    IconNames[\"Trophy\"] = \"Trophy\";\r\n    IconNames[\"ReopenPages\"] = \"ReopenPages\";\r\n    IconNames[\"EmojiTabSymbols\"] = \"EmojiTabSymbols\";\r\n    IconNames[\"AADLogo\"] = \"AADLogo\";\r\n    IconNames[\"AccessLogo\"] = \"AccessLogo\";\r\n    IconNames[\"AdminALogoInverse32\"] = \"AdminALogoInverse32\";\r\n    IconNames[\"AdminCLogoInverse32\"] = \"AdminCLogoInverse32\";\r\n    IconNames[\"AdminDLogoInverse32\"] = \"AdminDLogoInverse32\";\r\n    IconNames[\"AdminELogoInverse32\"] = \"AdminELogoInverse32\";\r\n    IconNames[\"AdminLLogoInverse32\"] = \"AdminLLogoInverse32\";\r\n    IconNames[\"AdminMLogoInverse32\"] = \"AdminMLogoInverse32\";\r\n    IconNames[\"AdminOLogoInverse32\"] = \"AdminOLogoInverse32\";\r\n    IconNames[\"AdminPLogoInverse32\"] = \"AdminPLogoInverse32\";\r\n    IconNames[\"AdminSLogoInverse32\"] = \"AdminSLogoInverse32\";\r\n    IconNames[\"AdminYLogoInverse32\"] = \"AdminYLogoInverse32\";\r\n    IconNames[\"BoxLogo\"] = \"BoxLogo\";\r\n    IconNames[\"DelveLogoInverse\"] = \"DelveLogoInverse\";\r\n    IconNames[\"DropboxLogo\"] = \"DropboxLogo\";\r\n    IconNames[\"ExchangeLogoInverse\"] = \"ExchangeLogoInverse\";\r\n    IconNames[\"LyncLogo\"] = \"LyncLogo\";\r\n    IconNames[\"OfficeVideoLogoInverse\"] = \"OfficeVideoLogoInverse\";\r\n    IconNames[\"ParatureLogo\"] = \"ParatureLogo\";\r\n    IconNames[\"SocialListeningLogo\"] = \"SocialListeningLogo\";\r\n    IconNames[\"VisioLogoInverse\"] = \"VisioLogoInverse\";\r\n    IconNames[\"Balloons\"] = \"Balloons\";\r\n    IconNames[\"Cat\"] = \"Cat\";\r\n    IconNames[\"MailAlert\"] = \"MailAlert\";\r\n    IconNames[\"MailCheck\"] = \"MailCheck\";\r\n    IconNames[\"MailLowImportance\"] = \"MailLowImportance\";\r\n    IconNames[\"MailPause\"] = \"MailPause\";\r\n    IconNames[\"MailRepeat\"] = \"MailRepeat\";\r\n    IconNames[\"SecurityGroup\"] = \"SecurityGroup\";\r\n    IconNames[\"Table\"] = \"Table\";\r\n    IconNames[\"VoicemailForward\"] = \"VoicemailForward\";\r\n    IconNames[\"VoicemailReply\"] = \"VoicemailReply\";\r\n    IconNames[\"Waffle\"] = \"Waffle\";\r\n    IconNames[\"RemoveEvent\"] = \"RemoveEvent\";\r\n    IconNames[\"EventInfo\"] = \"EventInfo\";\r\n    IconNames[\"ForwardEvent\"] = \"ForwardEvent\";\r\n    IconNames[\"WipePhone\"] = \"WipePhone\";\r\n    IconNames[\"AddOnlineMeeting\"] = \"AddOnlineMeeting\";\r\n    IconNames[\"JoinOnlineMeeting\"] = \"JoinOnlineMeeting\";\r\n    IconNames[\"RemoveLink\"] = \"RemoveLink\";\r\n    IconNames[\"PeopleBlock\"] = \"PeopleBlock\";\r\n    IconNames[\"PeopleRepeat\"] = \"PeopleRepeat\";\r\n    IconNames[\"PeopleAlert\"] = \"PeopleAlert\";\r\n    IconNames[\"PeoplePause\"] = \"PeoplePause\";\r\n    IconNames[\"TransferCall\"] = \"TransferCall\";\r\n    IconNames[\"AddPhone\"] = \"AddPhone\";\r\n    IconNames[\"UnknownCall\"] = \"UnknownCall\";\r\n    IconNames[\"NoteReply\"] = \"NoteReply\";\r\n    IconNames[\"NoteForward\"] = \"NoteForward\";\r\n    IconNames[\"NotePinned\"] = \"NotePinned\";\r\n    IconNames[\"RemoveOccurrence\"] = \"RemoveOccurrence\";\r\n    IconNames[\"Timeline\"] = \"Timeline\";\r\n    IconNames[\"EditNote\"] = \"EditNote\";\r\n    IconNames[\"CircleHalfFull\"] = \"CircleHalfFull\";\r\n    IconNames[\"Room\"] = \"Room\";\r\n    IconNames[\"Unsubscribe\"] = \"Unsubscribe\";\r\n    IconNames[\"Subscribe\"] = \"Subscribe\";\r\n    IconNames[\"HardDrive\"] = \"HardDrive\";\r\n    IconNames[\"RecurringTask\"] = \"RecurringTask\";\r\n    IconNames[\"TaskManager\"] = \"TaskManager\";\r\n    IconNames[\"TaskManagerMirrored\"] = \"TaskManagerMirrored\";\r\n    IconNames[\"Combine\"] = \"Combine\";\r\n    IconNames[\"Split\"] = \"Split\";\r\n    IconNames[\"DoubleChevronUp\"] = \"DoubleChevronUp\";\r\n    IconNames[\"DoubleChevronLeft\"] = \"DoubleChevronLeft\";\r\n    IconNames[\"DoubleChevronRight\"] = \"DoubleChevronRight\";\r\n    IconNames[\"Ascending\"] = \"Ascending\";\r\n    IconNames[\"Descending\"] = \"Descending\";\r\n    IconNames[\"TextBox\"] = \"TextBox\";\r\n    IconNames[\"TextField\"] = \"TextField\";\r\n    IconNames[\"NumberField\"] = \"NumberField\";\r\n    IconNames[\"Dropdown\"] = \"Dropdown\";\r\n    IconNames[\"PenWorkspace\"] = \"PenWorkspace\";\r\n    IconNames[\"BookingsLogo\"] = \"BookingsLogo\";\r\n    IconNames[\"ClassNotebookLogoInverse\"] = \"ClassNotebookLogoInverse\";\r\n    IconNames[\"DelveAnalyticsLogo\"] = \"DelveAnalyticsLogo\";\r\n    IconNames[\"DocsLogoInverse\"] = \"DocsLogoInverse\";\r\n    IconNames[\"Dynamics365Logo\"] = \"Dynamics365Logo\";\r\n    IconNames[\"DynamicSMBLogo\"] = \"DynamicSMBLogo\";\r\n    IconNames[\"OfficeAssistantLogo\"] = \"OfficeAssistantLogo\";\r\n    IconNames[\"OfficeStoreLogo\"] = \"OfficeStoreLogo\";\r\n    IconNames[\"OneNoteEduLogoInverse\"] = \"OneNoteEduLogoInverse\";\r\n    IconNames[\"PlannerLogo\"] = \"PlannerLogo\";\r\n    IconNames[\"PowerApps\"] = \"PowerApps\";\r\n    IconNames[\"Suitcase\"] = \"Suitcase\";\r\n    IconNames[\"ProjectLogoInverse\"] = \"ProjectLogoInverse\";\r\n    IconNames[\"CaretLeft8\"] = \"CaretLeft8\";\r\n    IconNames[\"CaretRight8\"] = \"CaretRight8\";\r\n    IconNames[\"CaretUp8\"] = \"CaretUp8\";\r\n    IconNames[\"CaretDown8\"] = \"CaretDown8\";\r\n    IconNames[\"CaretLeftSolid8\"] = \"CaretLeftSolid8\";\r\n    IconNames[\"CaretRightSolid8\"] = \"CaretRightSolid8\";\r\n    IconNames[\"CaretUpSolid8\"] = \"CaretUpSolid8\";\r\n    IconNames[\"CaretDownSolid8\"] = \"CaretDownSolid8\";\r\n    IconNames[\"ClearFormatting\"] = \"ClearFormatting\";\r\n    IconNames[\"Superscript\"] = \"Superscript\";\r\n    IconNames[\"Subscript\"] = \"Subscript\";\r\n    IconNames[\"Strikethrough\"] = \"Strikethrough\";\r\n    IconNames[\"Export\"] = \"Export\";\r\n    IconNames[\"ExportMirrored\"] = \"ExportMirrored\";\r\n    IconNames[\"SingleBookmark\"] = \"SingleBookmark\";\r\n    IconNames[\"SingleBookmarkSolid\"] = \"SingleBookmarkSolid\";\r\n    IconNames[\"DoubleChevronDown\"] = \"DoubleChevronDown\";\r\n    IconNames[\"FollowUser\"] = \"FollowUser\";\r\n    IconNames[\"ReplyAll\"] = \"ReplyAll\";\r\n    IconNames[\"GoogleDriveLogo\"] = \"GoogleDriveLogo\";\r\n    IconNames[\"WorkforceManagement\"] = \"WorkforceManagement\";\r\n    IconNames[\"RecruitmentManagement\"] = \"RecruitmentManagement\";\r\n    IconNames[\"Questionnaire\"] = \"Questionnaire\";\r\n    IconNames[\"ManagerSelfService\"] = \"ManagerSelfService\";\r\n    IconNames[\"ProductRelease\"] = \"ProductRelease\";\r\n    IconNames[\"ReplyMirrored\"] = \"ReplyMirrored\";\r\n    IconNames[\"ReplyAllMirrored\"] = \"ReplyAllMirrored\";\r\n    IconNames[\"Medal\"] = \"Medal\";\r\n    IconNames[\"AddGroup\"] = \"AddGroup\";\r\n    IconNames[\"QuestionnaireMirrored\"] = \"QuestionnaireMirrored\";\r\n    IconNames[\"TemporaryUser\"] = \"TemporaryUser\";\r\n    IconNames[\"CaretSolid16\"] = \"CaretSolid16\";\r\n    IconNames[\"GroupedDescending\"] = \"GroupedDescending\";\r\n    IconNames[\"GroupedAscending\"] = \"GroupedAscending\";\r\n    IconNames[\"SortUp\"] = \"SortUp\";\r\n    IconNames[\"SortDown\"] = \"SortDown\";\r\n    IconNames[\"AwayStatus\"] = \"AwayStatus\";\r\n    IconNames[\"MyMoviesTV\"] = \"MyMoviesTV\";\r\n    IconNames[\"SyncToPC\"] = \"SyncToPC\";\r\n    IconNames[\"GenericScan\"] = \"GenericScan\";\r\n    IconNames[\"AustralianRules\"] = \"AustralianRules\";\r\n    IconNames[\"WifiEthernet\"] = \"WifiEthernet\";\r\n    IconNames[\"TrackersMirrored\"] = \"TrackersMirrored\";\r\n    IconNames[\"DateTimeMirrored\"] = \"DateTimeMirrored\";\r\n    IconNames[\"StopSolid\"] = \"StopSolid\";\r\n    IconNames[\"DoubleChevronUp12\"] = \"DoubleChevronUp12\";\r\n    IconNames[\"DoubleChevronDown12\"] = \"DoubleChevronDown12\";\r\n    IconNames[\"DoubleChevronLeft12\"] = \"DoubleChevronLeft12\";\r\n    IconNames[\"DoubleChevronRight12\"] = \"DoubleChevronRight12\";\r\n    IconNames[\"CalendarAgenda\"] = \"CalendarAgenda\";\r\n    IconNames[\"ConnectVirtualMachine\"] = \"ConnectVirtualMachine\";\r\n    IconNames[\"AddEvent\"] = \"AddEvent\";\r\n    IconNames[\"AssetLibrary\"] = \"AssetLibrary\";\r\n    IconNames[\"DataConnectionLibrary\"] = \"DataConnectionLibrary\";\r\n    IconNames[\"DocLibrary\"] = \"DocLibrary\";\r\n    IconNames[\"FormLibrary\"] = \"FormLibrary\";\r\n    IconNames[\"FormLibraryMirrored\"] = \"FormLibraryMirrored\";\r\n    IconNames[\"ReportLibrary\"] = \"ReportLibrary\";\r\n    IconNames[\"ReportLibraryMirrored\"] = \"ReportLibraryMirrored\";\r\n    IconNames[\"ContactCard\"] = \"ContactCard\";\r\n    IconNames[\"CustomList\"] = \"CustomList\";\r\n    IconNames[\"CustomListMirrored\"] = \"CustomListMirrored\";\r\n    IconNames[\"IssueTracking\"] = \"IssueTracking\";\r\n    IconNames[\"IssueTrackingMirrored\"] = \"IssueTrackingMirrored\";\r\n    IconNames[\"PictureLibrary\"] = \"PictureLibrary\";\r\n    IconNames[\"OfficeAddinsLogo\"] = \"OfficeAddinsLogo\";\r\n    IconNames[\"OfflineOneDriveParachute\"] = \"OfflineOneDriveParachute\";\r\n    IconNames[\"OfflineOneDriveParachuteDisabled\"] = \"OfflineOneDriveParachuteDisabled\";\r\n    IconNames[\"LargeGrid\"] = \"LargeGrid\";\r\n    IconNames[\"TriangleSolidUp12\"] = \"TriangleSolidUp12\";\r\n    IconNames[\"TriangleSolidDown12\"] = \"TriangleSolidDown12\";\r\n    IconNames[\"TriangleSolidLeft12\"] = \"TriangleSolidLeft12\";\r\n    IconNames[\"TriangleSolidRight12\"] = \"TriangleSolidRight12\";\r\n    IconNames[\"TriangleUp12\"] = \"TriangleUp12\";\r\n    IconNames[\"TriangleDown12\"] = \"TriangleDown12\";\r\n    IconNames[\"TriangleLeft12\"] = \"TriangleLeft12\";\r\n    IconNames[\"TriangleRight12\"] = \"TriangleRight12\";\r\n    IconNames[\"ArrowUpRight8\"] = \"ArrowUpRight8\";\r\n    IconNames[\"ArrowDownRight8\"] = \"ArrowDownRight8\";\r\n    IconNames[\"DocumentSet\"] = \"DocumentSet\";\r\n    IconNames[\"DelveAnalytics\"] = \"DelveAnalytics\";\r\n    IconNames[\"ArrowUpRightMirrored8\"] = \"ArrowUpRightMirrored8\";\r\n    IconNames[\"ArrowDownRightMirrored8\"] = \"ArrowDownRightMirrored8\";\r\n    IconNames[\"CompanyDirectory\"] = \"CompanyDirectory\";\r\n    IconNames[\"OpenEnrollment\"] = \"OpenEnrollment\";\r\n    IconNames[\"CompanyDirectoryMirrored\"] = \"CompanyDirectoryMirrored\";\r\n    IconNames[\"OneDriveAdd\"] = \"OneDriveAdd\";\r\n    IconNames[\"ProfileSearch\"] = \"ProfileSearch\";\r\n    IconNames[\"Header2\"] = \"Header2\";\r\n    IconNames[\"Header3\"] = \"Header3\";\r\n    IconNames[\"Header4\"] = \"Header4\";\r\n    IconNames[\"RingerSolid\"] = \"RingerSolid\";\r\n    IconNames[\"Eyedropper\"] = \"Eyedropper\";\r\n    IconNames[\"MarketDown\"] = \"MarketDown\";\r\n    IconNames[\"CalendarWorkWeek\"] = \"CalendarWorkWeek\";\r\n    IconNames[\"SidePanel\"] = \"SidePanel\";\r\n    IconNames[\"GlobeFavorite\"] = \"GlobeFavorite\";\r\n    IconNames[\"CaretTopLeftSolid8\"] = \"CaretTopLeftSolid8\";\r\n    IconNames[\"CaretTopRightSolid8\"] = \"CaretTopRightSolid8\";\r\n    IconNames[\"ViewAll2\"] = \"ViewAll2\";\r\n    IconNames[\"DocumentReply\"] = \"DocumentReply\";\r\n    IconNames[\"PlayerSettings\"] = \"PlayerSettings\";\r\n    IconNames[\"ReceiptForward\"] = \"ReceiptForward\";\r\n    IconNames[\"ReceiptReply\"] = \"ReceiptReply\";\r\n    IconNames[\"ReceiptCheck\"] = \"ReceiptCheck\";\r\n    IconNames[\"Fax\"] = \"Fax\";\r\n    IconNames[\"RecurringEvent\"] = \"RecurringEvent\";\r\n    IconNames[\"ReplyAlt\"] = \"ReplyAlt\";\r\n    IconNames[\"ReplyAllAlt\"] = \"ReplyAllAlt\";\r\n    IconNames[\"EditStyle\"] = \"EditStyle\";\r\n    IconNames[\"EditMail\"] = \"EditMail\";\r\n    IconNames[\"Lifesaver\"] = \"Lifesaver\";\r\n    IconNames[\"LifesaverLock\"] = \"LifesaverLock\";\r\n    IconNames[\"InboxCheck\"] = \"InboxCheck\";\r\n    IconNames[\"FolderSearch\"] = \"FolderSearch\";\r\n    IconNames[\"CollapseMenu\"] = \"CollapseMenu\";\r\n    IconNames[\"ExpandMenu\"] = \"ExpandMenu\";\r\n    IconNames[\"Boards\"] = \"Boards\";\r\n    IconNames[\"SunAdd\"] = \"SunAdd\";\r\n    IconNames[\"SunQuestionMark\"] = \"SunQuestionMark\";\r\n    IconNames[\"LandscapeOrientation\"] = \"LandscapeOrientation\";\r\n    IconNames[\"DocumentSearch\"] = \"DocumentSearch\";\r\n    IconNames[\"PublicCalendar\"] = \"PublicCalendar\";\r\n    IconNames[\"PublicContactCard\"] = \"PublicContactCard\";\r\n    IconNames[\"PublicEmail\"] = \"PublicEmail\";\r\n    IconNames[\"PublicFolder\"] = \"PublicFolder\";\r\n    IconNames[\"WordDocument\"] = \"WordDocument\";\r\n    IconNames[\"PowerPointDocument\"] = \"PowerPointDocument\";\r\n    IconNames[\"ExcelDocument\"] = \"ExcelDocument\";\r\n    IconNames[\"GroupedList\"] = \"GroupedList\";\r\n    IconNames[\"ClassroomLogo\"] = \"ClassroomLogo\";\r\n    IconNames[\"Sections\"] = \"Sections\";\r\n    IconNames[\"EditPhoto\"] = \"EditPhoto\";\r\n    IconNames[\"Starburst\"] = \"Starburst\";\r\n    IconNames[\"ShareiOS\"] = \"ShareiOS\";\r\n    IconNames[\"AirTickets\"] = \"AirTickets\";\r\n    IconNames[\"PencilReply\"] = \"PencilReply\";\r\n    IconNames[\"Tiles2\"] = \"Tiles2\";\r\n    IconNames[\"SkypeCircleCheck\"] = \"SkypeCircleCheck\";\r\n    IconNames[\"SkypeCircleClock\"] = \"SkypeCircleClock\";\r\n    IconNames[\"SkypeCircleMinus\"] = \"SkypeCircleMinus\";\r\n    IconNames[\"SkypeCheck\"] = \"SkypeCheck\";\r\n    IconNames[\"SkypeClock\"] = \"SkypeClock\";\r\n    IconNames[\"SkypeMinus\"] = \"SkypeMinus\";\r\n    IconNames[\"SkypeMessage\"] = \"SkypeMessage\";\r\n    IconNames[\"ClosedCaption\"] = \"ClosedCaption\";\r\n    IconNames[\"ATPLogo\"] = \"ATPLogo\";\r\n    IconNames[\"OfficeFormsLogoInverse\"] = \"OfficeFormsLogoInverse\";\r\n    IconNames[\"RecycleBin\"] = \"RecycleBin\";\r\n    IconNames[\"EmptyRecycleBin\"] = \"EmptyRecycleBin\";\r\n    IconNames[\"Hide2\"] = \"Hide2\";\r\n    IconNames[\"iOSAppStoreLogo\"] = \"iOSAppStoreLogo\";\r\n    IconNames[\"AndroidLogo\"] = \"AndroidLogo\";\r\n    IconNames[\"Breadcrumb\"] = \"Breadcrumb\";\r\n    IconNames[\"BirthdayCake\"] = \"BirthdayCake\";\r\n    IconNames[\"ClearFilter\"] = \"ClearFilter\";\r\n    IconNames[\"Flow\"] = \"Flow\";\r\n    IconNames[\"TimeEntry\"] = \"TimeEntry\";\r\n    IconNames[\"CRMProcesses\"] = \"CRMProcesses\";\r\n    IconNames[\"PageEdit\"] = \"PageEdit\";\r\n    IconNames[\"PageArrowRight\"] = \"PageArrowRight\";\r\n    IconNames[\"PageRemove\"] = \"PageRemove\";\r\n    IconNames[\"Database\"] = \"Database\";\r\n    IconNames[\"DataManagementSettings\"] = \"DataManagementSettings\";\r\n    IconNames[\"CRMServices\"] = \"CRMServices\";\r\n    IconNames[\"EditContact\"] = \"EditContact\";\r\n    IconNames[\"ConnectContacts\"] = \"ConnectContacts\";\r\n    IconNames[\"AppIconDefaultAdd\"] = \"AppIconDefaultAdd\";\r\n    IconNames[\"AppIconDefaultList\"] = \"AppIconDefaultList\";\r\n    IconNames[\"ActivateOrders\"] = \"ActivateOrders\";\r\n    IconNames[\"DeactivateOrders\"] = \"DeactivateOrders\";\r\n    IconNames[\"ScatterChart\"] = \"ScatterChart\";\r\n    IconNames[\"DocumentManagement\"] = \"DocumentManagement\";\r\n    IconNames[\"CRMReport\"] = \"CRMReport\";\r\n    IconNames[\"KnowledgeArticle\"] = \"KnowledgeArticle\";\r\n    IconNames[\"Relationship\"] = \"Relationship\";\r\n    IconNames[\"HomeVerify\"] = \"HomeVerify\";\r\n    IconNames[\"ZipFolder\"] = \"ZipFolder\";\r\n    IconNames[\"SurveyQuestions\"] = \"SurveyQuestions\";\r\n    IconNames[\"TextDocument\"] = \"TextDocument\";\r\n    IconNames[\"TextDocumentShared\"] = \"TextDocumentShared\";\r\n    IconNames[\"PageCheckedOut\"] = \"PageCheckedOut\";\r\n    IconNames[\"SaveAndClose\"] = \"SaveAndClose\";\r\n    IconNames[\"Script\"] = \"Script\";\r\n    IconNames[\"Archive\"] = \"Archive\";\r\n    IconNames[\"ActivityFeed\"] = \"ActivityFeed\";\r\n    IconNames[\"Compare\"] = \"Compare\";\r\n    IconNames[\"EventDate\"] = \"EventDate\";\r\n    IconNames[\"ArrowUpRight\"] = \"ArrowUpRight\";\r\n    IconNames[\"CaretRight\"] = \"CaretRight\";\r\n    IconNames[\"SetAction\"] = \"SetAction\";\r\n    IconNames[\"CaretSolidLeft\"] = \"CaretSolidLeft\";\r\n    IconNames[\"CaretSolidDown\"] = \"CaretSolidDown\";\r\n    IconNames[\"CaretSolidRight\"] = \"CaretSolidRight\";\r\n    IconNames[\"CaretSolidUp\"] = \"CaretSolidUp\";\r\n    IconNames[\"PowerAppsLogo\"] = \"PowerAppsLogo\";\r\n    IconNames[\"PowerApps2Logo\"] = \"PowerApps2Logo\";\r\n    IconNames[\"SearchIssue\"] = \"SearchIssue\";\r\n    IconNames[\"SearchIssueMirrored\"] = \"SearchIssueMirrored\";\r\n    IconNames[\"FabricAssetLibrary\"] = \"FabricAssetLibrary\";\r\n    IconNames[\"FabricDataConnectionLibrary\"] = \"FabricDataConnectionLibrary\";\r\n    IconNames[\"FabricDocLibrary\"] = \"FabricDocLibrary\";\r\n    IconNames[\"FabricFormLibrary\"] = \"FabricFormLibrary\";\r\n    IconNames[\"FabricFormLibraryMirrored\"] = \"FabricFormLibraryMirrored\";\r\n    IconNames[\"FabricReportLibrary\"] = \"FabricReportLibrary\";\r\n    IconNames[\"FabricReportLibraryMirrored\"] = \"FabricReportLibraryMirrored\";\r\n    IconNames[\"FabricPublicFolder\"] = \"FabricPublicFolder\";\r\n    IconNames[\"FabricFolderSearch\"] = \"FabricFolderSearch\";\r\n    IconNames[\"FabricMovetoFolder\"] = \"FabricMovetoFolder\";\r\n    IconNames[\"FabricUnsyncFolder\"] = \"FabricUnsyncFolder\";\r\n    IconNames[\"FabricSyncFolder\"] = \"FabricSyncFolder\";\r\n    IconNames[\"FabricOpenFolderHorizontal\"] = \"FabricOpenFolderHorizontal\";\r\n    IconNames[\"FabricFolder\"] = \"FabricFolder\";\r\n    IconNames[\"FabricFolderFill\"] = \"FabricFolderFill\";\r\n    IconNames[\"FabricNewFolder\"] = \"FabricNewFolder\";\r\n    IconNames[\"FabricPictureLibrary\"] = \"FabricPictureLibrary\";\r\n    IconNames[\"AddFavorite\"] = \"AddFavorite\";\r\n    IconNames[\"AddFavoriteFill\"] = \"AddFavoriteFill\";\r\n    IconNames[\"BufferTimeBefore\"] = \"BufferTimeBefore\";\r\n    IconNames[\"BufferTimeAfter\"] = \"BufferTimeAfter\";\r\n    IconNames[\"BufferTimeBoth\"] = \"BufferTimeBoth\";\r\n    IconNames[\"PublishContent\"] = \"PublishContent\";\r\n    IconNames[\"ClipboardList\"] = \"ClipboardList\";\r\n    IconNames[\"ClipboardListMirrored\"] = \"ClipboardListMirrored\";\r\n    IconNames[\"CannedChat\"] = \"CannedChat\";\r\n    IconNames[\"SkypeForBusinessLogo\"] = \"SkypeForBusinessLogo\";\r\n    IconNames[\"TabCenter\"] = \"TabCenter\";\r\n    IconNames[\"PageCheckedin\"] = \"PageCheckedin\";\r\n    IconNames[\"PageList\"] = \"PageList\";\r\n    IconNames[\"ReadOutLoud\"] = \"ReadOutLoud\";\r\n    IconNames[\"CaretBottomLeftSolid8\"] = \"CaretBottomLeftSolid8\";\r\n    IconNames[\"CaretBottomRightSolid8\"] = \"CaretBottomRightSolid8\";\r\n    IconNames[\"FolderHorizontal\"] = \"FolderHorizontal\";\r\n    IconNames[\"MicrosoftStaffhubLogo\"] = \"MicrosoftStaffhubLogo\";\r\n    IconNames[\"GiftboxOpen\"] = \"GiftboxOpen\";\r\n    IconNames[\"StatusCircleOuter\"] = \"StatusCircleOuter\";\r\n    IconNames[\"StatusCircleInner\"] = \"StatusCircleInner\";\r\n    IconNames[\"StatusCircleRing\"] = \"StatusCircleRing\";\r\n    IconNames[\"StatusTriangleOuter\"] = \"StatusTriangleOuter\";\r\n    IconNames[\"StatusTriangleInner\"] = \"StatusTriangleInner\";\r\n    IconNames[\"StatusTriangleExclamation\"] = \"StatusTriangleExclamation\";\r\n    IconNames[\"StatusCircleExclamation\"] = \"StatusCircleExclamation\";\r\n    IconNames[\"StatusCircleErrorX\"] = \"StatusCircleErrorX\";\r\n    IconNames[\"StatusCircleCheckmark\"] = \"StatusCircleCheckmark\";\r\n    IconNames[\"StatusCircleInfo\"] = \"StatusCircleInfo\";\r\n    IconNames[\"StatusCircleBlock\"] = \"StatusCircleBlock\";\r\n    IconNames[\"StatusCircleBlock2\"] = \"StatusCircleBlock2\";\r\n    IconNames[\"StatusCircleQuestionMark\"] = \"StatusCircleQuestionMark\";\r\n    IconNames[\"StatusCircleSync\"] = \"StatusCircleSync\";\r\n    IconNames[\"Toll\"] = \"Toll\";\r\n    IconNames[\"ExploreContentSingle\"] = \"ExploreContentSingle\";\r\n    IconNames[\"CollapseContent\"] = \"CollapseContent\";\r\n    IconNames[\"CollapseContentSingle\"] = \"CollapseContentSingle\";\r\n    IconNames[\"InfoSolid\"] = \"InfoSolid\";\r\n    IconNames[\"GroupList\"] = \"GroupList\";\r\n    IconNames[\"ProgressRingDots\"] = \"ProgressRingDots\";\r\n    IconNames[\"CaloriesAdd\"] = \"CaloriesAdd\";\r\n    IconNames[\"BranchFork\"] = \"BranchFork\";\r\n    IconNames[\"AddHome\"] = \"AddHome\";\r\n    IconNames[\"AddWork\"] = \"AddWork\";\r\n    IconNames[\"MobileReport\"] = \"MobileReport\";\r\n    IconNames[\"ScaleVolume\"] = \"ScaleVolume\";\r\n    IconNames[\"HardDriveGroup\"] = \"HardDriveGroup\";\r\n    IconNames[\"FastMode\"] = \"FastMode\";\r\n    IconNames[\"ToggleLeft\"] = \"ToggleLeft\";\r\n    IconNames[\"ToggleRight\"] = \"ToggleRight\";\r\n    IconNames[\"TriangleShape\"] = \"TriangleShape\";\r\n    IconNames[\"RectangleShape\"] = \"RectangleShape\";\r\n    IconNames[\"CubeShape\"] = \"CubeShape\";\r\n    IconNames[\"Trophy2\"] = \"Trophy2\";\r\n    IconNames[\"BucketColor\"] = \"BucketColor\";\r\n    IconNames[\"BucketColorFill\"] = \"BucketColorFill\";\r\n    IconNames[\"Taskboard\"] = \"Taskboard\";\r\n    IconNames[\"SingleColumn\"] = \"SingleColumn\";\r\n    IconNames[\"DoubleColumn\"] = \"DoubleColumn\";\r\n    IconNames[\"TripleColumn\"] = \"TripleColumn\";\r\n    IconNames[\"ColumnLeftTwoThirds\"] = \"ColumnLeftTwoThirds\";\r\n    IconNames[\"ColumnRightTwoThirds\"] = \"ColumnRightTwoThirds\";\r\n    IconNames[\"AccessLogoFill\"] = \"AccessLogoFill\";\r\n    IconNames[\"AnalyticsLogo\"] = \"AnalyticsLogo\";\r\n    IconNames[\"AnalyticsQuery\"] = \"AnalyticsQuery\";\r\n    IconNames[\"NewAnalyticsQuery\"] = \"NewAnalyticsQuery\";\r\n    IconNames[\"AnalyticsReport\"] = \"AnalyticsReport\";\r\n    IconNames[\"WordLogo\"] = \"WordLogo\";\r\n    IconNames[\"WordLogoFill\"] = \"WordLogoFill\";\r\n    IconNames[\"ExcelLogo\"] = \"ExcelLogo\";\r\n    IconNames[\"ExcelLogoFill\"] = \"ExcelLogoFill\";\r\n    IconNames[\"OneNoteLogo\"] = \"OneNoteLogo\";\r\n    IconNames[\"OneNoteLogoFill\"] = \"OneNoteLogoFill\";\r\n    IconNames[\"OutlookLogo\"] = \"OutlookLogo\";\r\n    IconNames[\"OutlookLogoFill\"] = \"OutlookLogoFill\";\r\n    IconNames[\"PowerPointLogo\"] = \"PowerPointLogo\";\r\n    IconNames[\"PowerPointLogoFill\"] = \"PowerPointLogoFill\";\r\n    IconNames[\"PublisherLogo\"] = \"PublisherLogo\";\r\n    IconNames[\"PublisherLogoFill\"] = \"PublisherLogoFill\";\r\n    IconNames[\"ScheduleEventAction\"] = \"ScheduleEventAction\";\r\n    IconNames[\"FlameSolid\"] = \"FlameSolid\";\r\n    IconNames[\"ServerProcesses\"] = \"ServerProcesses\";\r\n    IconNames[\"Server\"] = \"Server\";\r\n    IconNames[\"SaveAll\"] = \"SaveAll\";\r\n    IconNames[\"LinkedInLogo\"] = \"LinkedInLogo\";\r\n    IconNames[\"Decimals\"] = \"Decimals\";\r\n    IconNames[\"SidePanelMirrored\"] = \"SidePanelMirrored\";\r\n    IconNames[\"ProtectRestrict\"] = \"ProtectRestrict\";\r\n    IconNames[\"Blog\"] = \"Blog\";\r\n    IconNames[\"UnknownMirrored\"] = \"UnknownMirrored\";\r\n    IconNames[\"PublicContactCardMirrored\"] = \"PublicContactCardMirrored\";\r\n    IconNames[\"GridViewSmall\"] = \"GridViewSmall\";\r\n    IconNames[\"GridViewMedium\"] = \"GridViewMedium\";\r\n    IconNames[\"GridViewLarge\"] = \"GridViewLarge\";\r\n    IconNames[\"Step\"] = \"Step\";\r\n    IconNames[\"StepInsert\"] = \"StepInsert\";\r\n    IconNames[\"StepShared\"] = \"StepShared\";\r\n    IconNames[\"StepSharedAdd\"] = \"StepSharedAdd\";\r\n    IconNames[\"StepSharedInsert\"] = \"StepSharedInsert\";\r\n    IconNames[\"ViewDashboard\"] = \"ViewDashboard\";\r\n    IconNames[\"ViewList\"] = \"ViewList\";\r\n    IconNames[\"ViewListGroup\"] = \"ViewListGroup\";\r\n    IconNames[\"ViewListTree\"] = \"ViewListTree\";\r\n    IconNames[\"TriggerAuto\"] = \"TriggerAuto\";\r\n    IconNames[\"TriggerUser\"] = \"TriggerUser\";\r\n    IconNames[\"PivotChart\"] = \"PivotChart\";\r\n    IconNames[\"StackedBarChart\"] = \"StackedBarChart\";\r\n    IconNames[\"StackedLineChart\"] = \"StackedLineChart\";\r\n    IconNames[\"BuildQueue\"] = \"BuildQueue\";\r\n    IconNames[\"BuildQueueNew\"] = \"BuildQueueNew\";\r\n    IconNames[\"UserFollowed\"] = \"UserFollowed\";\r\n    IconNames[\"ContactLink\"] = \"ContactLink\";\r\n    IconNames[\"Stack\"] = \"Stack\";\r\n    IconNames[\"Bullseye\"] = \"Bullseye\";\r\n    IconNames[\"VennDiagram\"] = \"VennDiagram\";\r\n    IconNames[\"FiveTileGrid\"] = \"FiveTileGrid\";\r\n    IconNames[\"FocalPoint\"] = \"FocalPoint\";\r\n    IconNames[\"RingerRemove\"] = \"RingerRemove\";\r\n    IconNames[\"TeamsLogoInverse\"] = \"TeamsLogoInverse\";\r\n    IconNames[\"TeamsLogo\"] = \"TeamsLogo\";\r\n    IconNames[\"TeamsLogoFill\"] = \"TeamsLogoFill\";\r\n    IconNames[\"SkypeForBusinessLogoFill\"] = \"SkypeForBusinessLogoFill\";\r\n    IconNames[\"SharepointLogo\"] = \"SharepointLogo\";\r\n    IconNames[\"SharepointLogoFill\"] = \"SharepointLogoFill\";\r\n    IconNames[\"DelveLogo\"] = \"DelveLogo\";\r\n    IconNames[\"DelveLogoFill\"] = \"DelveLogoFill\";\r\n    IconNames[\"OfficeVideoLogo\"] = \"OfficeVideoLogo\";\r\n    IconNames[\"OfficeVideoLogoFill\"] = \"OfficeVideoLogoFill\";\r\n    IconNames[\"ExchangeLogo\"] = \"ExchangeLogo\";\r\n    IconNames[\"ExchangeLogoFill\"] = \"ExchangeLogoFill\";\r\n    IconNames[\"Signin\"] = \"Signin\";\r\n    IconNames[\"DocumentApproval\"] = \"DocumentApproval\";\r\n    IconNames[\"CloneToDesktop\"] = \"CloneToDesktop\";\r\n    IconNames[\"InstallToDrive\"] = \"InstallToDrive\";\r\n    IconNames[\"Blur\"] = \"Blur\";\r\n    IconNames[\"Build\"] = \"Build\";\r\n    IconNames[\"ProcessMetaTask\"] = \"ProcessMetaTask\";\r\n    IconNames[\"BranchFork2\"] = \"BranchFork2\";\r\n    IconNames[\"BranchLocked\"] = \"BranchLocked\";\r\n    IconNames[\"BranchCommit\"] = \"BranchCommit\";\r\n    IconNames[\"BranchCompare\"] = \"BranchCompare\";\r\n    IconNames[\"BranchMerge\"] = \"BranchMerge\";\r\n    IconNames[\"BranchPullRequest\"] = \"BranchPullRequest\";\r\n    IconNames[\"BranchSearch\"] = \"BranchSearch\";\r\n    IconNames[\"BranchShelveset\"] = \"BranchShelveset\";\r\n    IconNames[\"RawSource\"] = \"RawSource\";\r\n    IconNames[\"MergeDuplicate\"] = \"MergeDuplicate\";\r\n    IconNames[\"RowsGroup\"] = \"RowsGroup\";\r\n    IconNames[\"RowsChild\"] = \"RowsChild\";\r\n    IconNames[\"Deploy\"] = \"Deploy\";\r\n    IconNames[\"Redeploy\"] = \"Redeploy\";\r\n    IconNames[\"ServerEnviroment\"] = \"ServerEnviroment\";\r\n    IconNames[\"VisioDiagram\"] = \"VisioDiagram\";\r\n    IconNames[\"HighlightMappedShapes\"] = \"HighlightMappedShapes\";\r\n    IconNames[\"TextCallout\"] = \"TextCallout\";\r\n    IconNames[\"IconSetsFlag\"] = \"IconSetsFlag\";\r\n    IconNames[\"VisioLogo\"] = \"VisioLogo\";\r\n    IconNames[\"VisioLogoFill\"] = \"VisioLogoFill\";\r\n    IconNames[\"VisioDocument\"] = \"VisioDocument\";\r\n    IconNames[\"TimelineProgress\"] = \"TimelineProgress\";\r\n    IconNames[\"TimelineDelivery\"] = \"TimelineDelivery\";\r\n    IconNames[\"Backlog\"] = \"Backlog\";\r\n    IconNames[\"TeamFavorite\"] = \"TeamFavorite\";\r\n    IconNames[\"TaskGroup\"] = \"TaskGroup\";\r\n    IconNames[\"TaskGroupMirrored\"] = \"TaskGroupMirrored\";\r\n    IconNames[\"ScopeTemplate\"] = \"ScopeTemplate\";\r\n    IconNames[\"AssessmentGroupTemplate\"] = \"AssessmentGroupTemplate\";\r\n    IconNames[\"NewTeamProject\"] = \"NewTeamProject\";\r\n    IconNames[\"CommentAdd\"] = \"CommentAdd\";\r\n    IconNames[\"CommentNext\"] = \"CommentNext\";\r\n    IconNames[\"CommentPrevious\"] = \"CommentPrevious\";\r\n    IconNames[\"ShopServer\"] = \"ShopServer\";\r\n    IconNames[\"LocaleLanguage\"] = \"LocaleLanguage\";\r\n    IconNames[\"QueryList\"] = \"QueryList\";\r\n    IconNames[\"UserSync\"] = \"UserSync\";\r\n    IconNames[\"UserPause\"] = \"UserPause\";\r\n    IconNames[\"StreamingOff\"] = \"StreamingOff\";\r\n    IconNames[\"MoreVertical\"] = \"MoreVertical\";\r\n    IconNames[\"ArrowTallUpLeft\"] = \"ArrowTallUpLeft\";\r\n    IconNames[\"ArrowTallUpRight\"] = \"ArrowTallUpRight\";\r\n    IconNames[\"ArrowTallDownLeft\"] = \"ArrowTallDownLeft\";\r\n    IconNames[\"ArrowTallDownRight\"] = \"ArrowTallDownRight\";\r\n    IconNames[\"FieldEmpty\"] = \"FieldEmpty\";\r\n    IconNames[\"FieldFilled\"] = \"FieldFilled\";\r\n    IconNames[\"FieldChanged\"] = \"FieldChanged\";\r\n    IconNames[\"FieldNotChanged\"] = \"FieldNotChanged\";\r\n    IconNames[\"RingerOff\"] = \"RingerOff\";\r\n    IconNames[\"PlayResume\"] = \"PlayResume\";\r\n    IconNames[\"BulletedList2\"] = \"BulletedList2\";\r\n    IconNames[\"BulletedList2Mirrored\"] = \"BulletedList2Mirrored\";\r\n    IconNames[\"ImageCrosshair\"] = \"ImageCrosshair\";\r\n    IconNames[\"GitGraph\"] = \"GitGraph\";\r\n    IconNames[\"Repo\"] = \"Repo\";\r\n    IconNames[\"RepoSolid\"] = \"RepoSolid\";\r\n    IconNames[\"FolderQuery\"] = \"FolderQuery\";\r\n    IconNames[\"FolderList\"] = \"FolderList\";\r\n    IconNames[\"FolderListMirrored\"] = \"FolderListMirrored\";\r\n    IconNames[\"LocationOutline\"] = \"LocationOutline\";\r\n    IconNames[\"POISolid\"] = \"POISolid\";\r\n    IconNames[\"CalculatorNotEqualTo\"] = \"CalculatorNotEqualTo\";\r\n    IconNames[\"BoxSubtractSolid\"] = \"BoxSubtractSolid\";\r\n    IconNames[\"BoxAdditionSolid\"] = \"BoxAdditionSolid\";\r\n    IconNames[\"BoxMultiplySolid\"] = \"BoxMultiplySolid\";\r\n    IconNames[\"BoxPlaySolid\"] = \"BoxPlaySolid\";\r\n    IconNames[\"BoxCheckmarkSolid\"] = \"BoxCheckmarkSolid\";\r\n    IconNames[\"CirclePauseSolid\"] = \"CirclePauseSolid\";\r\n    IconNames[\"CirclePause\"] = \"CirclePause\";\r\n    IconNames[\"MSNVideosSolid\"] = \"MSNVideosSolid\";\r\n    IconNames[\"CircleStopSolid\"] = \"CircleStopSolid\";\r\n    IconNames[\"CircleStop\"] = \"CircleStop\";\r\n    IconNames[\"NavigateBack\"] = \"NavigateBack\";\r\n    IconNames[\"NavigateBackMirrored\"] = \"NavigateBackMirrored\";\r\n    IconNames[\"NavigateForward\"] = \"NavigateForward\";\r\n    IconNames[\"NavigateForwardMirrored\"] = \"NavigateForwardMirrored\";\r\n    IconNames[\"UnknownSolid\"] = \"UnknownSolid\";\r\n    IconNames[\"UnknownMirroredSolid\"] = \"UnknownMirroredSolid\";\r\n    IconNames[\"CircleAddition\"] = \"CircleAddition\";\r\n    IconNames[\"CircleAdditionSolid\"] = \"CircleAdditionSolid\";\r\n    IconNames[\"FilePDB\"] = \"FilePDB\";\r\n    IconNames[\"FileTemplate\"] = \"FileTemplate\";\r\n    IconNames[\"FileSQL\"] = \"FileSQL\";\r\n    IconNames[\"FileJAVA\"] = \"FileJAVA\";\r\n    IconNames[\"FileASPX\"] = \"FileASPX\";\r\n    IconNames[\"FileCSS\"] = \"FileCSS\";\r\n    IconNames[\"FileSass\"] = \"FileSass\";\r\n    IconNames[\"FileLess\"] = \"FileLess\";\r\n    IconNames[\"FileHTML\"] = \"FileHTML\";\r\n    IconNames[\"JavaScriptLanguage\"] = \"JavaScriptLanguage\";\r\n    IconNames[\"CSharpLanguage\"] = \"CSharpLanguage\";\r\n    IconNames[\"CSharp\"] = \"CSharp\";\r\n    IconNames[\"VisualBasicLanguage\"] = \"VisualBasicLanguage\";\r\n    IconNames[\"VB\"] = \"VB\";\r\n    IconNames[\"CPlusPlusLanguage\"] = \"CPlusPlusLanguage\";\r\n    IconNames[\"CPlusPlus\"] = \"CPlusPlus\";\r\n    IconNames[\"FSharpLanguage\"] = \"FSharpLanguage\";\r\n    IconNames[\"FSharp\"] = \"FSharp\";\r\n    IconNames[\"TypeScriptLanguage\"] = \"TypeScriptLanguage\";\r\n    IconNames[\"PythonLanguage\"] = \"PythonLanguage\";\r\n    IconNames[\"PY\"] = \"PY\";\r\n    IconNames[\"CoffeeScript\"] = \"CoffeeScript\";\r\n    IconNames[\"MarkDownLanguage\"] = \"MarkDownLanguage\";\r\n    IconNames[\"FullWidth\"] = \"FullWidth\";\r\n    IconNames[\"FullWidthEdit\"] = \"FullWidthEdit\";\r\n    IconNames[\"Plug\"] = \"Plug\";\r\n    IconNames[\"PlugSolid\"] = \"PlugSolid\";\r\n    IconNames[\"PlugConnected\"] = \"PlugConnected\";\r\n    IconNames[\"PlugDisconnected\"] = \"PlugDisconnected\";\r\n    IconNames[\"UnlockSolid\"] = \"UnlockSolid\";\r\n    IconNames[\"Variable\"] = \"Variable\";\r\n    IconNames[\"Parameter\"] = \"Parameter\";\r\n    IconNames[\"CommentUrgent\"] = \"CommentUrgent\";\r\n    IconNames[\"Storyboard\"] = \"Storyboard\";\r\n    IconNames[\"DiffInline\"] = \"DiffInline\";\r\n    IconNames[\"DiffSideBySide\"] = \"DiffSideBySide\";\r\n    IconNames[\"ImageDiff\"] = \"ImageDiff\";\r\n    IconNames[\"ImagePixel\"] = \"ImagePixel\";\r\n    IconNames[\"FileBug\"] = \"FileBug\";\r\n    IconNames[\"FileCode\"] = \"FileCode\";\r\n    IconNames[\"FileComment\"] = \"FileComment\";\r\n    IconNames[\"BusinessHoursSign\"] = \"BusinessHoursSign\";\r\n    IconNames[\"FileImage\"] = \"FileImage\";\r\n    IconNames[\"FileSymlink\"] = \"FileSymlink\";\r\n    IconNames[\"AutoFillTemplate\"] = \"AutoFillTemplate\";\r\n    IconNames[\"WorkItem\"] = \"WorkItem\";\r\n    IconNames[\"WorkItemBug\"] = \"WorkItemBug\";\r\n    IconNames[\"LogRemove\"] = \"LogRemove\";\r\n    IconNames[\"ColumnOptions\"] = \"ColumnOptions\";\r\n    IconNames[\"Packages\"] = \"Packages\";\r\n    IconNames[\"BuildIssue\"] = \"BuildIssue\";\r\n    IconNames[\"AssessmentGroup\"] = \"AssessmentGroup\";\r\n    IconNames[\"VariableGroup\"] = \"VariableGroup\";\r\n    IconNames[\"FullHistory\"] = \"FullHistory\";\r\n    IconNames[\"Wheelchair\"] = \"Wheelchair\";\r\n    IconNames[\"SingleColumnEdit\"] = \"SingleColumnEdit\";\r\n    IconNames[\"DoubleColumnEdit\"] = \"DoubleColumnEdit\";\r\n    IconNames[\"TripleColumnEdit\"] = \"TripleColumnEdit\";\r\n    IconNames[\"ColumnLeftTwoThirdsEdit\"] = \"ColumnLeftTwoThirdsEdit\";\r\n    IconNames[\"ColumnRightTwoThirdsEdit\"] = \"ColumnRightTwoThirdsEdit\";\r\n    IconNames[\"StreamLogo\"] = \"StreamLogo\";\r\n    IconNames[\"PassiveAuthentication\"] = \"PassiveAuthentication\";\r\n    IconNames[\"AlertSolid\"] = \"AlertSolid\";\r\n    IconNames[\"MegaphoneSolid\"] = \"MegaphoneSolid\";\r\n    IconNames[\"TaskSolid\"] = \"TaskSolid\";\r\n    IconNames[\"ConfigurationSolid\"] = \"ConfigurationSolid\";\r\n    IconNames[\"BugSolid\"] = \"BugSolid\";\r\n    IconNames[\"CrownSolid\"] = \"CrownSolid\";\r\n    IconNames[\"Trophy2Solid\"] = \"Trophy2Solid\";\r\n    IconNames[\"QuickNoteSolid\"] = \"QuickNoteSolid\";\r\n    IconNames[\"ConstructionConeSolid\"] = \"ConstructionConeSolid\";\r\n    IconNames[\"PageListSolid\"] = \"PageListSolid\";\r\n    IconNames[\"PageListMirroredSolid\"] = \"PageListMirroredSolid\";\r\n    IconNames[\"StarburstSolid\"] = \"StarburstSolid\";\r\n    IconNames[\"ReadingModeSolid\"] = \"ReadingModeSolid\";\r\n    IconNames[\"SadSolid\"] = \"SadSolid\";\r\n    IconNames[\"HealthSolid\"] = \"HealthSolid\";\r\n    IconNames[\"ShieldSolid\"] = \"ShieldSolid\";\r\n    IconNames[\"GiftBoxSolid\"] = \"GiftBoxSolid\";\r\n    IconNames[\"ShoppingCartSolid\"] = \"ShoppingCartSolid\";\r\n    IconNames[\"MailSolid\"] = \"MailSolid\";\r\n    IconNames[\"ChatSolid\"] = \"ChatSolid\";\r\n    IconNames[\"RibbonSolid\"] = \"RibbonSolid\";\r\n    IconNames[\"FinancialSolid\"] = \"FinancialSolid\";\r\n    IconNames[\"FinancialMirroredSolid\"] = \"FinancialMirroredSolid\";\r\n    IconNames[\"HeadsetSolid\"] = \"HeadsetSolid\";\r\n    IconNames[\"PermissionsSolid\"] = \"PermissionsSolid\";\r\n    IconNames[\"ParkingSolid\"] = \"ParkingSolid\";\r\n    IconNames[\"ParkingMirroredSolid\"] = \"ParkingMirroredSolid\";\r\n    IconNames[\"DiamondSolid\"] = \"DiamondSolid\";\r\n    IconNames[\"AsteriskSolid\"] = \"AsteriskSolid\";\r\n    IconNames[\"OfflineStorageSolid\"] = \"OfflineStorageSolid\";\r\n    IconNames[\"BankSolid\"] = \"BankSolid\";\r\n    IconNames[\"DecisionSolid\"] = \"DecisionSolid\";\r\n    IconNames[\"Parachute\"] = \"Parachute\";\r\n    IconNames[\"ParachuteSolid\"] = \"ParachuteSolid\";\r\n    IconNames[\"FiltersSolid\"] = \"FiltersSolid\";\r\n    IconNames[\"ColorSolid\"] = \"ColorSolid\";\r\n    IconNames[\"ReviewSolid\"] = \"ReviewSolid\";\r\n    IconNames[\"ReviewRequestSolid\"] = \"ReviewRequestSolid\";\r\n    IconNames[\"ReviewRequestMirroredSolid\"] = \"ReviewRequestMirroredSolid\";\r\n    IconNames[\"ReviewResponseSolid\"] = \"ReviewResponseSolid\";\r\n    IconNames[\"FeedbackRequestSolid\"] = \"FeedbackRequestSolid\";\r\n    IconNames[\"FeedbackRequestMirroredSolid\"] = \"FeedbackRequestMirroredSolid\";\r\n    IconNames[\"FeedbackResponseSolid\"] = \"FeedbackResponseSolid\";\r\n    IconNames[\"WorkItemBar\"] = \"WorkItemBar\";\r\n    IconNames[\"WorkItemBarSolid\"] = \"WorkItemBarSolid\";\r\n    IconNames[\"Separator\"] = \"Separator\";\r\n    IconNames[\"NavigateExternalInline\"] = \"NavigateExternalInline\";\r\n    IconNames[\"PlanView\"] = \"PlanView\";\r\n    IconNames[\"TimelineMatrixView\"] = \"TimelineMatrixView\";\r\n    IconNames[\"EngineeringGroup\"] = \"EngineeringGroup\";\r\n    IconNames[\"ProjectCollection\"] = \"ProjectCollection\";\r\n    IconNames[\"CaretBottomRightCenter8\"] = \"CaretBottomRightCenter8\";\r\n    IconNames[\"CaretBottomLeftCenter8\"] = \"CaretBottomLeftCenter8\";\r\n    IconNames[\"CaretTopRightCenter8\"] = \"CaretTopRightCenter8\";\r\n    IconNames[\"CaretTopLeftCenter8\"] = \"CaretTopLeftCenter8\";\r\n    IconNames[\"DonutChart\"] = \"DonutChart\";\r\n    IconNames[\"ChevronUnfold10\"] = \"ChevronUnfold10\";\r\n    IconNames[\"ChevronFold10\"] = \"ChevronFold10\";\r\n    IconNames[\"DoubleChevronDown8\"] = \"DoubleChevronDown8\";\r\n    IconNames[\"DoubleChevronUp8\"] = \"DoubleChevronUp8\";\r\n    IconNames[\"DoubleChevronLeft8\"] = \"DoubleChevronLeft8\";\r\n    IconNames[\"DoubleChevronRight8\"] = \"DoubleChevronRight8\";\r\n    IconNames[\"ChevronDownEnd6\"] = \"ChevronDownEnd6\";\r\n    IconNames[\"ChevronUpEnd6\"] = \"ChevronUpEnd6\";\r\n    IconNames[\"ChevronLeftEnd6\"] = \"ChevronLeftEnd6\";\r\n    IconNames[\"ChevronRightEnd6\"] = \"ChevronRightEnd6\";\r\n    IconNames[\"EgnyteLogo\"] = \"EgnyteLogo\";\r\n    IconNames[\"GoogleDriveLogoLeftGreen\"] = \"GoogleDriveLogoLeftGreen\";\r\n    IconNames[\"GoogleDriveLogoBottomBlue\"] = \"GoogleDriveLogoBottomBlue\";\r\n    IconNames[\"GoogleDriveLogoRightYellow\"] = \"GoogleDriveLogoRightYellow\";\r\n    IconNames[\"ContextMenu\"] = \"ContextMenu\";\r\n    IconNames[\"AzureAPIManagement\"] = \"AzureAPIManagement\";\r\n    IconNames[\"AzureServiceEndpoint\"] = \"AzureServiceEndpoint\";\r\n    IconNames[\"VSTSLogo\"] = \"VSTSLogo\";\r\n    IconNames[\"VSTSAltLogo1\"] = \"VSTSAltLogo1\";\r\n    IconNames[\"VSTSAltLogo2\"] = \"VSTSAltLogo2\";\r\n    IconNames[\"FileTypeSolution\"] = \"FileTypeSolution\";\r\n    IconNames[\"WordLogoInverse16\"] = \"WordLogoInverse16\";\r\n    IconNames[\"WordLogo16\"] = \"WordLogo16\";\r\n    IconNames[\"WordLogoFill16\"] = \"WordLogoFill16\";\r\n    IconNames[\"PowerPointLogoInverse16\"] = \"PowerPointLogoInverse16\";\r\n    IconNames[\"PowerPointLogo16\"] = \"PowerPointLogo16\";\r\n    IconNames[\"PowerPointLogoFill16\"] = \"PowerPointLogoFill16\";\r\n    IconNames[\"ExcelLogoInverse16\"] = \"ExcelLogoInverse16\";\r\n    IconNames[\"ExcelLogo16\"] = \"ExcelLogo16\";\r\n    IconNames[\"ExcelLogoFill16\"] = \"ExcelLogoFill16\";\r\n    IconNames[\"OneNoteLogoInverse16\"] = \"OneNoteLogoInverse16\";\r\n    IconNames[\"OneNoteLogo16\"] = \"OneNoteLogo16\";\r\n    IconNames[\"OneNoteLogoFill16\"] = \"OneNoteLogoFill16\";\r\n    IconNames[\"OutlookLogoInverse16\"] = \"OutlookLogoInverse16\";\r\n    IconNames[\"OutlookLogo16\"] = \"OutlookLogo16\";\r\n    IconNames[\"OutlookLogoFill16\"] = \"OutlookLogoFill16\";\r\n    IconNames[\"PublisherLogoInverse16\"] = \"PublisherLogoInverse16\";\r\n    IconNames[\"PublisherLogo16\"] = \"PublisherLogo16\";\r\n    IconNames[\"PublisherLogoFill16\"] = \"PublisherLogoFill16\";\r\n    IconNames[\"VisioLogoInverse16\"] = \"VisioLogoInverse16\";\r\n    IconNames[\"VisioLogo16\"] = \"VisioLogo16\";\r\n    IconNames[\"VisioLogoFill16\"] = \"VisioLogoFill16\";\r\n    IconNames[\"TestBeaker\"] = \"TestBeaker\";\r\n    IconNames[\"TestBeakerSolid\"] = \"TestBeakerSolid\";\r\n    IconNames[\"TestExploreSolid\"] = \"TestExploreSolid\";\r\n    IconNames[\"TestAutoSolid\"] = \"TestAutoSolid\";\r\n    IconNames[\"TestUserSolid\"] = \"TestUserSolid\";\r\n    IconNames[\"TestImpactSolid\"] = \"TestImpactSolid\";\r\n    IconNames[\"TestPlan\"] = \"TestPlan\";\r\n    IconNames[\"TestStep\"] = \"TestStep\";\r\n    IconNames[\"TestParameter\"] = \"TestParameter\";\r\n    IconNames[\"TestSuite\"] = \"TestSuite\";\r\n    IconNames[\"TestCase\"] = \"TestCase\";\r\n    IconNames[\"Sprint\"] = \"Sprint\";\r\n    IconNames[\"SignOut\"] = \"SignOut\";\r\n    IconNames[\"TriggerApproval\"] = \"TriggerApproval\";\r\n    IconNames[\"Rocket\"] = \"Rocket\";\r\n    IconNames[\"AzureKeyVault\"] = \"AzureKeyVault\";\r\n    IconNames[\"Onboarding\"] = \"Onboarding\";\r\n    IconNames[\"Transition\"] = \"Transition\";\r\n    IconNames[\"LikeSolid\"] = \"LikeSolid\";\r\n    IconNames[\"DislikeSolid\"] = \"DislikeSolid\";\r\n    IconNames[\"CRMCustomerInsightsApp\"] = \"CRMCustomerInsightsApp\";\r\n    IconNames[\"EditCreate\"] = \"EditCreate\";\r\n    IconNames[\"SearchData\"] = \"SearchData\";\r\n    IconNames[\"UnSetColor\"] = \"UnSetColor\";\r\n    IconNames[\"DeclineCall\"] = \"DeclineCall\";\r\n    IconNames[\"RectangularClipping\"] = \"RectangularClipping\";\r\n    IconNames[\"TeamsLogo16\"] = \"TeamsLogo16\";\r\n    IconNames[\"TeamsLogoFill16\"] = \"TeamsLogoFill16\";\r\n    IconNames[\"Spacer\"] = \"Spacer\";\r\n    IconNames[\"SkypeLogo16\"] = \"SkypeLogo16\";\r\n    IconNames[\"SkypeForBusinessLogo16\"] = \"SkypeForBusinessLogo16\";\r\n    IconNames[\"SkypeForBusinessLogoFill16\"] = \"SkypeForBusinessLogoFill16\";\r\n    IconNames[\"FilterSolid\"] = \"FilterSolid\";\r\n    IconNames[\"MailUndelivered\"] = \"MailUndelivered\";\r\n    IconNames[\"MailTentative\"] = \"MailTentative\";\r\n    IconNames[\"MailTentativeMirrored\"] = \"MailTentativeMirrored\";\r\n    IconNames[\"MailReminder\"] = \"MailReminder\";\r\n    IconNames[\"ReceiptUndelivered\"] = \"ReceiptUndelivered\";\r\n    IconNames[\"ReceiptTentative\"] = \"ReceiptTentative\";\r\n    IconNames[\"ReceiptTentativeMirrored\"] = \"ReceiptTentativeMirrored\";\r\n    IconNames[\"Inbox\"] = \"Inbox\";\r\n    IconNames[\"IRMReply\"] = \"IRMReply\";\r\n    IconNames[\"IRMReplyMirrored\"] = \"IRMReplyMirrored\";\r\n    IconNames[\"IRMForward\"] = \"IRMForward\";\r\n    IconNames[\"IRMForwardMirrored\"] = \"IRMForwardMirrored\";\r\n    IconNames[\"VoicemailIRM\"] = \"VoicemailIRM\";\r\n    IconNames[\"EventAccepted\"] = \"EventAccepted\";\r\n    IconNames[\"EventTentative\"] = \"EventTentative\";\r\n    IconNames[\"EventTentativeMirrored\"] = \"EventTentativeMirrored\";\r\n    IconNames[\"EventDeclined\"] = \"EventDeclined\";\r\n    IconNames[\"IDBadge\"] = \"IDBadge\";\r\n    IconNames[\"BackgroundColor\"] = \"BackgroundColor\";\r\n    IconNames[\"OfficeFormsLogoInverse16\"] = \"OfficeFormsLogoInverse16\";\r\n    IconNames[\"OfficeFormsLogo\"] = \"OfficeFormsLogo\";\r\n    IconNames[\"OfficeFormsLogoFill\"] = \"OfficeFormsLogoFill\";\r\n    IconNames[\"OfficeFormsLogo16\"] = \"OfficeFormsLogo16\";\r\n    IconNames[\"OfficeFormsLogoFill16\"] = \"OfficeFormsLogoFill16\";\r\n    IconNames[\"OfficeFormsLogoInverse24\"] = \"OfficeFormsLogoInverse24\";\r\n    IconNames[\"OfficeFormsLogo24\"] = \"OfficeFormsLogo24\";\r\n    IconNames[\"OfficeFormsLogoFill24\"] = \"OfficeFormsLogoFill24\";\r\n    IconNames[\"PageLock\"] = \"PageLock\";\r\n    IconNames[\"NotExecuted\"] = \"NotExecuted\";\r\n    IconNames[\"NotImpactedSolid\"] = \"NotImpactedSolid\";\r\n    IconNames[\"FieldReadOnly\"] = \"FieldReadOnly\";\r\n    IconNames[\"FieldRequired\"] = \"FieldRequired\";\r\n    IconNames[\"BacklogBoard\"] = \"BacklogBoard\";\r\n    IconNames[\"ExternalBuild\"] = \"ExternalBuild\";\r\n    IconNames[\"ExternalTFVC\"] = \"ExternalTFVC\";\r\n    IconNames[\"ExternalXAML\"] = \"ExternalXAML\";\r\n    IconNames[\"IssueSolid\"] = \"IssueSolid\";\r\n    IconNames[\"DefectSolid\"] = \"DefectSolid\";\r\n    IconNames[\"LadybugSolid\"] = \"LadybugSolid\";\r\n    IconNames[\"MTMLogo\"] = \"MTMLogo\";\r\n    IconNames[\"NugetLogo\"] = \"NugetLogo\";\r\n    IconNames[\"TFVCLogo\"] = \"TFVCLogo\";\r\n    IconNames[\"ProjectLogo32\"] = \"ProjectLogo32\";\r\n    IconNames[\"ProjectLogoFill32\"] = \"ProjectLogoFill32\";\r\n    IconNames[\"ProjectLogo16\"] = \"ProjectLogo16\";\r\n    IconNames[\"ProjectLogoFill16\"] = \"ProjectLogoFill16\";\r\n    IconNames[\"SwayLogo32\"] = \"SwayLogo32\";\r\n    IconNames[\"SwayLogoFill32\"] = \"SwayLogoFill32\";\r\n    IconNames[\"SwayLogo16\"] = \"SwayLogo16\";\r\n    IconNames[\"SwayLogoFill16\"] = \"SwayLogoFill16\";\r\n    IconNames[\"ClassNotebookLogo32\"] = \"ClassNotebookLogo32\";\r\n    IconNames[\"ClassNotebookLogoFill32\"] = \"ClassNotebookLogoFill32\";\r\n    IconNames[\"ClassNotebookLogo16\"] = \"ClassNotebookLogo16\";\r\n    IconNames[\"ClassNotebookLogoFill16\"] = \"ClassNotebookLogoFill16\";\r\n    IconNames[\"ClassNotebookLogoInverse32\"] = \"ClassNotebookLogoInverse32\";\r\n    IconNames[\"ClassNotebookLogoInverse16\"] = \"ClassNotebookLogoInverse16\";\r\n    IconNames[\"StaffNotebookLogo32\"] = \"StaffNotebookLogo32\";\r\n    IconNames[\"StaffNotebookLogoFill32\"] = \"StaffNotebookLogoFill32\";\r\n    IconNames[\"StaffNotebookLogo16\"] = \"StaffNotebookLogo16\";\r\n    IconNames[\"StaffNotebookLogoFill16\"] = \"StaffNotebookLogoFill16\";\r\n    IconNames[\"StaffNotebookLogoInverted32\"] = \"StaffNotebookLogoInverted32\";\r\n    IconNames[\"StaffNotebookLogoInverted16\"] = \"StaffNotebookLogoInverted16\";\r\n    IconNames[\"KaizalaLogo\"] = \"KaizalaLogo\";\r\n    IconNames[\"TaskLogo\"] = \"TaskLogo\";\r\n    IconNames[\"ProtectionCenterLogo32\"] = \"ProtectionCenterLogo32\";\r\n    IconNames[\"NonprofitLogo32\"] = \"NonprofitLogo32\";\r\n    IconNames[\"GallatinLogo\"] = \"GallatinLogo\";\r\n    IconNames[\"Globe2\"] = \"Globe2\";\r\n    IconNames[\"Guitar\"] = \"Guitar\";\r\n    IconNames[\"Breakfast\"] = \"Breakfast\";\r\n    IconNames[\"Brunch\"] = \"Brunch\";\r\n    IconNames[\"BeerMug\"] = \"BeerMug\";\r\n    IconNames[\"Vacation\"] = \"Vacation\";\r\n    IconNames[\"Teeth\"] = \"Teeth\";\r\n    IconNames[\"Taxi\"] = \"Taxi\";\r\n    IconNames[\"Chopsticks\"] = \"Chopsticks\";\r\n    IconNames[\"SyncOccurence\"] = \"SyncOccurence\";\r\n    IconNames[\"UnsyncOccurence\"] = \"UnsyncOccurence\";\r\n    IconNames[\"GIF\"] = \"GIF\";\r\n    IconNames[\"PrimaryCalendar\"] = \"PrimaryCalendar\";\r\n    IconNames[\"SearchCalendar\"] = \"SearchCalendar\";\r\n    IconNames[\"VideoOff\"] = \"VideoOff\";\r\n    IconNames[\"MicrosoftFlowLogo\"] = \"MicrosoftFlowLogo\";\r\n    IconNames[\"BusinessCenterLogo\"] = \"BusinessCenterLogo\";\r\n    IconNames[\"ToDoLogoBottom\"] = \"ToDoLogoBottom\";\r\n    IconNames[\"ToDoLogoTop\"] = \"ToDoLogoTop\";\r\n    IconNames[\"EditSolid12\"] = \"EditSolid12\";\r\n    IconNames[\"EditSolidMirrored12\"] = \"EditSolidMirrored12\";\r\n    IconNames[\"UneditableSolid12\"] = \"UneditableSolid12\";\r\n    IconNames[\"UneditableSolidMirrored12\"] = \"UneditableSolidMirrored12\";\r\n    IconNames[\"UneditableMirrored\"] = \"UneditableMirrored\";\r\n    IconNames[\"AdminALogo32\"] = \"AdminALogo32\";\r\n    IconNames[\"AdminALogoFill32\"] = \"AdminALogoFill32\";\r\n    IconNames[\"ToDoLogoInverse\"] = \"ToDoLogoInverse\";\r\n    IconNames[\"Snooze\"] = \"Snooze\";\r\n    IconNames[\"WaffleOffice365\"] = \"WaffleOffice365\";\r\n    IconNames[\"ImageSearch\"] = \"ImageSearch\";\r\n    IconNames[\"NewsSearch\"] = \"NewsSearch\";\r\n    IconNames[\"VideoSearch\"] = \"VideoSearch\";\r\n    IconNames[\"R\"] = \"R\";\r\n    IconNames[\"FontColorA\"] = \"FontColorA\";\r\n    IconNames[\"FontColorSwatch\"] = \"FontColorSwatch\";\r\n    IconNames[\"LightWeight\"] = \"LightWeight\";\r\n    IconNames[\"NormalWeight\"] = \"NormalWeight\";\r\n    IconNames[\"SemiboldWeight\"] = \"SemiboldWeight\";\r\n    IconNames[\"GroupObject\"] = \"GroupObject\";\r\n    IconNames[\"UngroupObject\"] = \"UngroupObject\";\r\n    IconNames[\"AlignHorizontalLeft\"] = \"AlignHorizontalLeft\";\r\n    IconNames[\"AlignHorizontalCenter\"] = \"AlignHorizontalCenter\";\r\n    IconNames[\"AlignHorizontalRight\"] = \"AlignHorizontalRight\";\r\n    IconNames[\"AlignVerticalTop\"] = \"AlignVerticalTop\";\r\n    IconNames[\"AlignVerticalCenter\"] = \"AlignVerticalCenter\";\r\n    IconNames[\"AlignVerticalBottom\"] = \"AlignVerticalBottom\";\r\n    IconNames[\"HorizontalDistributeCenter\"] = \"HorizontalDistributeCenter\";\r\n    IconNames[\"VerticalDistributeCenter\"] = \"VerticalDistributeCenter\";\r\n    IconNames[\"Ellipse\"] = \"Ellipse\";\r\n    IconNames[\"Line\"] = \"Line\";\r\n    IconNames[\"Octagon\"] = \"Octagon\";\r\n    IconNames[\"Hexagon\"] = \"Hexagon\";\r\n    IconNames[\"Pentagon\"] = \"Pentagon\";\r\n    IconNames[\"RightTriangle\"] = \"RightTriangle\";\r\n    IconNames[\"HalfCircle\"] = \"HalfCircle\";\r\n    IconNames[\"QuarterCircle\"] = \"QuarterCircle\";\r\n    IconNames[\"ThreeQuarterCircle\"] = \"ThreeQuarterCircle\";\r\n    IconNames[\"SixPointStar\"] = \"SixPointStar\";\r\n    IconNames[\"TwelvePointStar\"] = \"TwelvePointStar\";\r\n    IconNames[\"ArrangeBringToFront\"] = \"ArrangeBringToFront\";\r\n    IconNames[\"ArrangeSendToBack\"] = \"ArrangeSendToBack\";\r\n    IconNames[\"ArrangeSendBackward\"] = \"ArrangeSendBackward\";\r\n    IconNames[\"ArrangeBringForward\"] = \"ArrangeBringForward\";\r\n    IconNames[\"BorderDash\"] = \"BorderDash\";\r\n    IconNames[\"BorderDot\"] = \"BorderDot\";\r\n    IconNames[\"LineStyle\"] = \"LineStyle\";\r\n    IconNames[\"LineThickness\"] = \"LineThickness\";\r\n    IconNames[\"WindowEdit\"] = \"WindowEdit\";\r\n    IconNames[\"HintText\"] = \"HintText\";\r\n    IconNames[\"MediaAdd\"] = \"MediaAdd\";\r\n    IconNames[\"AnchorLock\"] = \"AnchorLock\";\r\n    IconNames[\"AutoHeight\"] = \"AutoHeight\";\r\n    IconNames[\"ChartSeries\"] = \"ChartSeries\";\r\n    IconNames[\"ChartXAngle\"] = \"ChartXAngle\";\r\n    IconNames[\"ChartYAngle\"] = \"ChartYAngle\";\r\n    IconNames[\"Combobox\"] = \"Combobox\";\r\n    IconNames[\"LineSpacing\"] = \"LineSpacing\";\r\n    IconNames[\"Padding\"] = \"Padding\";\r\n    IconNames[\"PaddingTop\"] = \"PaddingTop\";\r\n    IconNames[\"PaddingBottom\"] = \"PaddingBottom\";\r\n    IconNames[\"PaddingLeft\"] = \"PaddingLeft\";\r\n    IconNames[\"PaddingRight\"] = \"PaddingRight\";\r\n    IconNames[\"NavigationFlipper\"] = \"NavigationFlipper\";\r\n    IconNames[\"AlignJustify\"] = \"AlignJustify\";\r\n    IconNames[\"TextOverflow\"] = \"TextOverflow\";\r\n    IconNames[\"VisualsFolder\"] = \"VisualsFolder\";\r\n    IconNames[\"VisualsStore\"] = \"VisualsStore\";\r\n    IconNames[\"PictureCenter\"] = \"PictureCenter\";\r\n    IconNames[\"PictureFill\"] = \"PictureFill\";\r\n    IconNames[\"PicturePosition\"] = \"PicturePosition\";\r\n    IconNames[\"PictureStretch\"] = \"PictureStretch\";\r\n    IconNames[\"PictureTile\"] = \"PictureTile\";\r\n    IconNames[\"Slider\"] = \"Slider\";\r\n    IconNames[\"SliderHandleSize\"] = \"SliderHandleSize\";\r\n    IconNames[\"DefaultRatio\"] = \"DefaultRatio\";\r\n    IconNames[\"NumberSequence\"] = \"NumberSequence\";\r\n    IconNames[\"GUID\"] = \"GUID\";\r\n    IconNames[\"ReportAdd\"] = \"ReportAdd\";\r\n    IconNames[\"DashboardAdd\"] = \"DashboardAdd\";\r\n    IconNames[\"MapPinSolid\"] = \"MapPinSolid\";\r\n    IconNames[\"WebPublish\"] = \"WebPublish\";\r\n    IconNames[\"PieSingleSolid\"] = \"PieSingleSolid\";\r\n    IconNames[\"BlockedSolid\"] = \"BlockedSolid\";\r\n    IconNames[\"DrillDown\"] = \"DrillDown\";\r\n    IconNames[\"DrillDownSolid\"] = \"DrillDownSolid\";\r\n    IconNames[\"DrillExpand\"] = \"DrillExpand\";\r\n    IconNames[\"DrillShow\"] = \"DrillShow\";\r\n    IconNames[\"SpecialEvent\"] = \"SpecialEvent\";\r\n    IconNames[\"OneDriveFolder16\"] = \"OneDriveFolder16\";\r\n    IconNames[\"ChronosLogo\"] = \"ChronosLogo\";\r\n    IconNames[\"FunctionalManagerDashboard\"] = \"FunctionalManagerDashboard\";\r\n    IconNames[\"BIDashboard\"] = \"BIDashboard\";\r\n    IconNames[\"CodeEdit\"] = \"CodeEdit\";\r\n    IconNames[\"RenewalCurrent\"] = \"RenewalCurrent\";\r\n    IconNames[\"RenewalFuture\"] = \"RenewalFuture\";\r\n    IconNames[\"SplitObject\"] = \"SplitObject\";\r\n    IconNames[\"BulkUpload\"] = \"BulkUpload\";\r\n    IconNames[\"DownloadDocument\"] = \"DownloadDocument\";\r\n    IconNames[\"Flower\"] = \"Flower\";\r\n    IconNames[\"WaitlistConfirm\"] = \"WaitlistConfirm\";\r\n    IconNames[\"WaitlistConfirmMirrored\"] = \"WaitlistConfirmMirrored\";\r\n    IconNames[\"LaptopSecure\"] = \"LaptopSecure\";\r\n    IconNames[\"DragObject\"] = \"DragObject\";\r\n    IconNames[\"EntryView\"] = \"EntryView\";\r\n    IconNames[\"EntryDecline\"] = \"EntryDecline\";\r\n    IconNames[\"ContactCardSettings\"] = \"ContactCardSettings\";\r\n    IconNames[\"ContactCardSettingsMirrored\"] = \"ContactCardSettingsMirrored\";\r\n    IconNames[\"CalendarSettings\"] = \"CalendarSettings\";\r\n    IconNames[\"CalendarSettingsMirrored\"] = \"CalendarSettingsMirrored\";\r\n    IconNames[\"HardDriveLock\"] = \"HardDriveLock\";\r\n    IconNames[\"HardDriveUnlock\"] = \"HardDriveUnlock\";\r\n    IconNames[\"AccountManagement\"] = \"AccountManagement\";\r\n    IconNames[\"TransitionPop\"] = \"TransitionPop\";\r\n    IconNames[\"TransitionPush\"] = \"TransitionPush\";\r\n    IconNames[\"TransitionEffect\"] = \"TransitionEffect\";\r\n    IconNames[\"LookupEntities\"] = \"LookupEntities\";\r\n    IconNames[\"ExploreData\"] = \"ExploreData\";\r\n    IconNames[\"AddBookmark\"] = \"AddBookmark\";\r\n    IconNames[\"SearchBookmark\"] = \"SearchBookmark\";\r\n    IconNames[\"DrillThrough\"] = \"DrillThrough\";\r\n    IconNames[\"MasterDatabase\"] = \"MasterDatabase\";\r\n    IconNames[\"CertifiedDatabase\"] = \"CertifiedDatabase\";\r\n    IconNames[\"MaximumValue\"] = \"MaximumValue\";\r\n    IconNames[\"MinimumValue\"] = \"MinimumValue\";\r\n    IconNames[\"VisualStudioIDELogo32\"] = \"VisualStudioIDELogo32\";\r\n    IconNames[\"ApacheIvyLogo32\"] = \"ApacheIvyLogo32\";\r\n    IconNames[\"BitbucketLogo32\"] = \"BitbucketLogo32\";\r\n    IconNames[\"LinuxLogo32\"] = \"LinuxLogo32\";\r\n    IconNames[\"GradleLogo32\"] = \"GradleLogo32\";\r\n    IconNames[\"PasteAsText\"] = \"PasteAsText\";\r\n    IconNames[\"PasteAsCode\"] = \"PasteAsCode\";\r\n    IconNames[\"BrowserTab\"] = \"BrowserTab\";\r\n    IconNames[\"BrowserTabScreenshot\"] = \"BrowserTabScreenshot\";\r\n    IconNames[\"DesktopScreenshot\"] = \"DesktopScreenshot\";\r\n    IconNames[\"FileYML\"] = \"FileYML\";\r\n    IconNames[\"ClipboardSolid\"] = \"ClipboardSolid\";\r\n    IconNames[\"FabricUserFolder\"] = \"FabricUserFolder\";\r\n    IconNames[\"FabricNetworkFolder\"] = \"FabricNetworkFolder\";\r\n    IconNames[\"AnalyticsView\"] = \"AnalyticsView\";\r\n    IconNames[\"Video360Generic\"] = \"Video360Generic\";\r\n    IconNames[\"Leave\"] = \"Leave\";\r\n    IconNames[\"Trending12\"] = \"Trending12\";\r\n    IconNames[\"Blocked12\"] = \"Blocked12\";\r\n    IconNames[\"Warning12\"] = \"Warning12\";\r\n    IconNames[\"CheckedOutByOther12\"] = \"CheckedOutByOther12\";\r\n    IconNames[\"CheckedOutByYou12\"] = \"CheckedOutByYou12\";\r\n    IconNames[\"CircleShapeSolid\"] = \"CircleShapeSolid\";\r\n    IconNames[\"SquareShapeSolid\"] = \"SquareShapeSolid\";\r\n    IconNames[\"TriangleShapeSolid\"] = \"TriangleShapeSolid\";\r\n    IconNames[\"DropShapeSolid\"] = \"DropShapeSolid\";\r\n    IconNames[\"RectangleShapeSolid\"] = \"RectangleShapeSolid\";\r\n    IconNames[\"ZoomToFit\"] = \"ZoomToFit\";\r\n    IconNames[\"InsertColumnsLeft\"] = \"InsertColumnsLeft\";\r\n    IconNames[\"InsertColumnsRight\"] = \"InsertColumnsRight\";\r\n    IconNames[\"InsertRowsAbove\"] = \"InsertRowsAbove\";\r\n    IconNames[\"InsertRowsBelow\"] = \"InsertRowsBelow\";\r\n    IconNames[\"DeleteColumns\"] = \"DeleteColumns\";\r\n    IconNames[\"DeleteRows\"] = \"DeleteRows\";\r\n    IconNames[\"DeleteRowsMirrored\"] = \"DeleteRowsMirrored\";\r\n    IconNames[\"DeleteTable\"] = \"DeleteTable\";\r\n    IconNames[\"AccountBrowser\"] = \"AccountBrowser\";\r\n    IconNames[\"GitLogo\"] = \"GitLogo\";\r\n    IconNames[\"GitHubLogo\"] = \"GitHubLogo\";\r\n    IconNames[\"ApacheMavenLogo\"] = \"ApacheMavenLogo\";\r\n    IconNames[\"NPMLogo\"] = \"NPMLogo\";\r\n    IconNames[\"GitFork\"] = \"GitFork\";\r\n    IconNames[\"SVNLogo\"] = \"SVNLogo\";\r\n    IconNames[\"JenkinsLogo\"] = \"JenkinsLogo\";\r\n    IconNames[\"VersionControlPush\"] = \"VersionControlPush\";\r\n    IconNames[\"ExternalGit\"] = \"ExternalGit\";\r\n    IconNames[\"StackedColumnChart2\"] = \"StackedColumnChart2\";\r\n    IconNames[\"TripleColumnWide\"] = \"TripleColumnWide\";\r\n    IconNames[\"QuadColumn\"] = \"QuadColumn\";\r\n    IconNames[\"WhiteBoardApp16\"] = \"WhiteBoardApp16\";\r\n    IconNames[\"WhiteBoardApp32\"] = \"WhiteBoardApp32\";\r\n    IconNames[\"PinnedSolid\"] = \"PinnedSolid\";\r\n    IconNames[\"InsertSignatureLine\"] = \"InsertSignatureLine\";\r\n    IconNames[\"ArrangeByFrom\"] = \"ArrangeByFrom\";\r\n    IconNames[\"Phishing\"] = \"Phishing\";\r\n    IconNames[\"CreateMailRule\"] = \"CreateMailRule\";\r\n    IconNames[\"PublishCourse\"] = \"PublishCourse\";\r\n    IconNames[\"DictionaryRemove\"] = \"DictionaryRemove\";\r\n    IconNames[\"UserRemove\"] = \"UserRemove\";\r\n    IconNames[\"UserEvent\"] = \"UserEvent\";\r\n    IconNames[\"Encryption\"] = \"Encryption\";\r\n    IconNames[\"PasswordField\"] = \"PasswordField\";\r\n    IconNames[\"OpenInNewTab\"] = \"OpenInNewTab\";\r\n    IconNames[\"Hide3\"] = \"Hide3\";\r\n    IconNames[\"VerifiedBrandSolid\"] = \"VerifiedBrandSolid\";\r\n    IconNames[\"MarkAsProtected\"] = \"MarkAsProtected\";\r\n    IconNames[\"AuthenticatorApp\"] = \"AuthenticatorApp\";\r\n    IconNames[\"WebTemplate\"] = \"WebTemplate\";\r\n    IconNames[\"DefenderTVM\"] = \"DefenderTVM\";\r\n    IconNames[\"MedalSolid\"] = \"MedalSolid\";\r\n    IconNames[\"D365TalentLearn\"] = \"D365TalentLearn\";\r\n    IconNames[\"D365TalentInsight\"] = \"D365TalentInsight\";\r\n    IconNames[\"D365TalentHRCore\"] = \"D365TalentHRCore\";\r\n    IconNames[\"BacklogList\"] = \"BacklogList\";\r\n    IconNames[\"ButtonControl\"] = \"ButtonControl\";\r\n    IconNames[\"TableGroup\"] = \"TableGroup\";\r\n    IconNames[\"MountainClimbing\"] = \"MountainClimbing\";\r\n    IconNames[\"TagUnknown\"] = \"TagUnknown\";\r\n    IconNames[\"TagUnknownMirror\"] = \"TagUnknownMirror\";\r\n    IconNames[\"TagUnknown12\"] = \"TagUnknown12\";\r\n    IconNames[\"TagUnknown12Mirror\"] = \"TagUnknown12Mirror\";\r\n    IconNames[\"Link12\"] = \"Link12\";\r\n    IconNames[\"Presentation\"] = \"Presentation\";\r\n    IconNames[\"Presentation12\"] = \"Presentation12\";\r\n    IconNames[\"Lock12\"] = \"Lock12\";\r\n    IconNames[\"BuildDefinition\"] = \"BuildDefinition\";\r\n    IconNames[\"ReleaseDefinition\"] = \"ReleaseDefinition\";\r\n    IconNames[\"SaveTemplate\"] = \"SaveTemplate\";\r\n    IconNames[\"UserGauge\"] = \"UserGauge\";\r\n    IconNames[\"BlockedSiteSolid12\"] = \"BlockedSiteSolid12\";\r\n    IconNames[\"TagSolid\"] = \"TagSolid\";\r\n    IconNames[\"OfficeChat\"] = \"OfficeChat\";\r\n    IconNames[\"OfficeChatSolid\"] = \"OfficeChatSolid\";\r\n    IconNames[\"MailSchedule\"] = \"MailSchedule\";\r\n    IconNames[\"WarningSolid\"] = \"WarningSolid\";\r\n    IconNames[\"Blocked2Solid\"] = \"Blocked2Solid\";\r\n    IconNames[\"SkypeCircleArrow\"] = \"SkypeCircleArrow\";\r\n    IconNames[\"SkypeArrow\"] = \"SkypeArrow\";\r\n    IconNames[\"SyncStatus\"] = \"SyncStatus\";\r\n    IconNames[\"SyncStatusSolid\"] = \"SyncStatusSolid\";\r\n    IconNames[\"ProjectDocument\"] = \"ProjectDocument\";\r\n    IconNames[\"ToDoLogoOutline\"] = \"ToDoLogoOutline\";\r\n    IconNames[\"VisioOnlineLogoFill32\"] = \"VisioOnlineLogoFill32\";\r\n    IconNames[\"VisioOnlineLogo32\"] = \"VisioOnlineLogo32\";\r\n    IconNames[\"VisioOnlineLogoCloud32\"] = \"VisioOnlineLogoCloud32\";\r\n    IconNames[\"VisioDiagramSync\"] = \"VisioDiagramSync\";\r\n    IconNames[\"Event12\"] = \"Event12\";\r\n    IconNames[\"EventDateMissed12\"] = \"EventDateMissed12\";\r\n    IconNames[\"UserOptional\"] = \"UserOptional\";\r\n    IconNames[\"ResponsesMenu\"] = \"ResponsesMenu\";\r\n    IconNames[\"DoubleDownArrow\"] = \"DoubleDownArrow\";\r\n    IconNames[\"DistributeDown\"] = \"DistributeDown\";\r\n    IconNames[\"BookmarkReport\"] = \"BookmarkReport\";\r\n    IconNames[\"FilterSettings\"] = \"FilterSettings\";\r\n    IconNames[\"GripperDotsVertical\"] = \"GripperDotsVertical\";\r\n    IconNames[\"MailAttached\"] = \"MailAttached\";\r\n    IconNames[\"AddIn\"] = \"AddIn\";\r\n    IconNames[\"LinkedDatabase\"] = \"LinkedDatabase\";\r\n    IconNames[\"PromotedDatabase\"] = \"PromotedDatabase\";\r\n    IconNames[\"BarChartVerticalFilter\"] = \"BarChartVerticalFilter\";\r\n    IconNames[\"BarChartVerticalFilterSolid\"] = \"BarChartVerticalFilterSolid\";\r\n    IconNames[\"MicrosoftTranslatorLogo\"] = \"MicrosoftTranslatorLogo\";\r\n    IconNames[\"ShowTimeAs\"] = \"ShowTimeAs\";\r\n    IconNames[\"FileRequest\"] = \"FileRequest\";\r\n    IconNames[\"WorkItemAlert\"] = \"WorkItemAlert\";\r\n    IconNames[\"PowerBILogo16\"] = \"PowerBILogo16\";\r\n    IconNames[\"PowerBILogoBackplate16\"] = \"PowerBILogoBackplate16\";\r\n    IconNames[\"BulletedListText\"] = \"BulletedListText\";\r\n    IconNames[\"BulletedListBullet\"] = \"BulletedListBullet\";\r\n    IconNames[\"BulletedListTextMirrored\"] = \"BulletedListTextMirrored\";\r\n    IconNames[\"BulletedListBulletMirrored\"] = \"BulletedListBulletMirrored\";\r\n    IconNames[\"NumberedListText\"] = \"NumberedListText\";\r\n    IconNames[\"NumberedListNumber\"] = \"NumberedListNumber\";\r\n    IconNames[\"NumberedListTextMirrored\"] = \"NumberedListTextMirrored\";\r\n    IconNames[\"NumberedListNumberMirrored\"] = \"NumberedListNumberMirrored\";\r\n    IconNames[\"RemoveLinkChain\"] = \"RemoveLinkChain\";\r\n    IconNames[\"RemoveLinkX\"] = \"RemoveLinkX\";\r\n    IconNames[\"FabricTextHighlight\"] = \"FabricTextHighlight\";\r\n    IconNames[\"ClearFormattingA\"] = \"ClearFormattingA\";\r\n    IconNames[\"ClearFormattingEraser\"] = \"ClearFormattingEraser\";\r\n    IconNames[\"Photo2Fill\"] = \"Photo2Fill\";\r\n    IconNames[\"IncreaseIndentText\"] = \"IncreaseIndentText\";\r\n    IconNames[\"IncreaseIndentArrow\"] = \"IncreaseIndentArrow\";\r\n    IconNames[\"DecreaseIndentText\"] = \"DecreaseIndentText\";\r\n    IconNames[\"DecreaseIndentArrow\"] = \"DecreaseIndentArrow\";\r\n    IconNames[\"IncreaseIndentTextMirrored\"] = \"IncreaseIndentTextMirrored\";\r\n    IconNames[\"IncreaseIndentArrowMirrored\"] = \"IncreaseIndentArrowMirrored\";\r\n    IconNames[\"DecreaseIndentTextMirrored\"] = \"DecreaseIndentTextMirrored\";\r\n    IconNames[\"DecreaseIndentArrowMirrored\"] = \"DecreaseIndentArrowMirrored\";\r\n    IconNames[\"CheckListText\"] = \"CheckListText\";\r\n    IconNames[\"CheckListCheck\"] = \"CheckListCheck\";\r\n    IconNames[\"CheckListTextMirrored\"] = \"CheckListTextMirrored\";\r\n    IconNames[\"CheckListCheckMirrored\"] = \"CheckListCheckMirrored\";\r\n    IconNames[\"NumberSymbol\"] = \"NumberSymbol\";\r\n    IconNames[\"Coupon\"] = \"Coupon\";\r\n    IconNames[\"VerifiedBrand\"] = \"VerifiedBrand\";\r\n    IconNames[\"ReleaseGate\"] = \"ReleaseGate\";\r\n    IconNames[\"ReleaseGateCheck\"] = \"ReleaseGateCheck\";\r\n    IconNames[\"ReleaseGateError\"] = \"ReleaseGateError\";\r\n    IconNames[\"M365InvoicingLogo\"] = \"M365InvoicingLogo\";\r\n    IconNames[\"ShieldAlert\"] = \"ShieldAlert\";\r\n    IconNames[\"FabricTextHighlightComposite\"] = \"FabricTextHighlightComposite\";\r\n    IconNames[\"Dataflows\"] = \"Dataflows\";\r\n    IconNames[\"GenericScanFilled\"] = \"GenericScanFilled\";\r\n    IconNames[\"DiagnosticDataBarTooltip\"] = \"DiagnosticDataBarTooltip\";\r\n    IconNames[\"SaveToMobile\"] = \"SaveToMobile\";\r\n    IconNames[\"Orientation2\"] = \"Orientation2\";\r\n    IconNames[\"ScreenCast\"] = \"ScreenCast\";\r\n    IconNames[\"ShowGrid\"] = \"ShowGrid\";\r\n    IconNames[\"SnapToGrid\"] = \"SnapToGrid\";\r\n    IconNames[\"ContactList\"] = \"ContactList\";\r\n    IconNames[\"NewMail\"] = \"NewMail\";\r\n    IconNames[\"EyeShadow\"] = \"EyeShadow\";\r\n    IconNames[\"DockerLogo\"] = \"DockerLogo\";\r\n    IconNames[\"JavaLogo\"] = \"JavaLogo\";\r\n    IconNames[\"KeubernetesLogo\"] = \"KeubernetesLogo\";\r\n    IconNames[\"ReactLogo\"] = \"ReactLogo\";\r\n    IconNames[\"SwiftLogo\"] = \"SwiftLogo\";\r\n    IconNames[\"XamarinLogo\"] = \"XamarinLogo\";\r\n    IconNames[\"AmazonWebServicesLogo\"] = \"AmazonWebServicesLogo\";\r\n    IconNames[\"FabricFolderConfirm\"] = \"FabricFolderConfirm\";\r\n    IconNames[\"InformationBarriers\"] = \"InformationBarriers\";\r\n    IconNames[\"CommentActive\"] = \"CommentActive\";\r\n    IconNames[\"ColumnVerticalSectionEdit\"] = \"ColumnVerticalSectionEdit\";\r\n    IconNames[\"WavingHand\"] = \"WavingHand\";\r\n    IconNames[\"ShakeDevice\"] = \"ShakeDevice\";\r\n    IconNames[\"SmartGlassRemote\"] = \"SmartGlassRemote\";\r\n    IconNames[\"Rotate90Clockwise\"] = \"Rotate90Clockwise\";\r\n    IconNames[\"Rotate90CounterClockwise\"] = \"Rotate90CounterClockwise\";\r\n    IconNames[\"CampaignTemplate\"] = \"CampaignTemplate\";\r\n    IconNames[\"ChartTemplate\"] = \"ChartTemplate\";\r\n    IconNames[\"PageListFilter\"] = \"PageListFilter\";\r\n    IconNames[\"SecondaryNav\"] = \"SecondaryNav\";\r\n    IconNames[\"ColumnVerticalSection\"] = \"ColumnVerticalSection\";\r\n    IconNames[\"SkypeCircleSlash\"] = \"SkypeCircleSlash\";\r\n    IconNames[\"SkypeSlash\"] = \"SkypeSlash\";\r\n    IconNames[\"CustomizeToolbar\"] = \"CustomizeToolbar\";\r\n    IconNames[\"DuplicateRow\"] = \"DuplicateRow\";\r\n    IconNames[\"RemoveFromTrash\"] = \"RemoveFromTrash\";\r\n    IconNames[\"MailOptions\"] = \"MailOptions\";\r\n    IconNames[\"Childof\"] = \"Childof\";\r\n    IconNames[\"Footer\"] = \"Footer\";\r\n    IconNames[\"Header\"] = \"Header\";\r\n    IconNames[\"BarChartVerticalFill\"] = \"BarChartVerticalFill\";\r\n    IconNames[\"StackedColumnChart2Fill\"] = \"StackedColumnChart2Fill\";\r\n    IconNames[\"PlainText\"] = \"PlainText\";\r\n    IconNames[\"AccessibiltyChecker\"] = \"AccessibiltyChecker\";\r\n    IconNames[\"OneDriveFileVault\"] = \"OneDriveFileVault\";\r\n    IconNames[\"DatabaseSync\"] = \"DatabaseSync\";\r\n    IconNames[\"ReservationOrders\"] = \"ReservationOrders\";\r\n    IconNames[\"TabOneColumn\"] = \"TabOneColumn\";\r\n    IconNames[\"TabTwoColumn\"] = \"TabTwoColumn\";\r\n    IconNames[\"TabThreeColumn\"] = \"TabThreeColumn\";\r\n    IconNames[\"PythonLogoBlue\"] = \"PythonLogoBlue\";\r\n    IconNames[\"PythonLogoYellow\"] = \"PythonLogoYellow\";\r\n    IconNames[\"RustLanguageLogo\"] = \"RustLanguageLogo\";\r\n    IconNames[\"RubyGemsLogo\"] = \"RubyGemsLogo\";\r\n    IconNames[\"MicrosoftTranslatorLogoGreen\"] = \"MicrosoftTranslatorLogoGreen\";\r\n    IconNames[\"MicrosoftTranslatorLogoBlue\"] = \"MicrosoftTranslatorLogoBlue\";\r\n    IconNames[\"InternalInvestigation\"] = \"InternalInvestigation\";\r\n    IconNames[\"AddReaction\"] = \"AddReaction\";\r\n    IconNames[\"ContactHeart\"] = \"ContactHeart\";\r\n    IconNames[\"VisuallyImpaired\"] = \"VisuallyImpaired\";\r\n    IconNames[\"EventToDoLogo\"] = \"EventToDoLogo\";\r\n    IconNames[\"Variable2\"] = \"Variable2\";\r\n    IconNames[\"ModelingView\"] = \"ModelingView\";\r\n    IconNames[\"DisconnectVirtualMachine\"] = \"DisconnectVirtualMachine\";\r\n    IconNames[\"ReportLock\"] = \"ReportLock\";\r\n    IconNames[\"Uneditable2\"] = \"Uneditable2\";\r\n    IconNames[\"Uneditable2Mirrored\"] = \"Uneditable2Mirrored\";\r\n    IconNames[\"BarChartVerticalEdit\"] = \"BarChartVerticalEdit\";\r\n    IconNames[\"GlobalNavButtonActive\"] = \"GlobalNavButtonActive\";\r\n    IconNames[\"PollResults\"] = \"PollResults\";\r\n    IconNames[\"Rerun\"] = \"Rerun\";\r\n    IconNames[\"QandA\"] = \"QandA\";\r\n    IconNames[\"QandAMirror\"] = \"QandAMirror\";\r\n    IconNames[\"BookAnswers\"] = \"BookAnswers\";\r\n    IconNames[\"ExcelLogo16Mono\"] = \"ExcelLogo16Mono\";\r\n    IconNames[\"ExcelLogo16L01\"] = \"ExcelLogo16L01\";\r\n    IconNames[\"ExcelLogo16L02\"] = \"ExcelLogo16L02\";\r\n    IconNames[\"ExcelLogo16L03\"] = \"ExcelLogo16L03\";\r\n    IconNames[\"ExcelLogo16L04\"] = \"ExcelLogo16L04\";\r\n    IconNames[\"ExcelLogo16L05\"] = \"ExcelLogo16L05\";\r\n    IconNames[\"ExcelLogo16L06\"] = \"ExcelLogo16L06\";\r\n    IconNames[\"ExcelLogo16L07\"] = \"ExcelLogo16L07\";\r\n    IconNames[\"ExcelLogo16L08\"] = \"ExcelLogo16L08\";\r\n    IconNames[\"ExcelLogo32Mono\"] = \"ExcelLogo32Mono\";\r\n    IconNames[\"ExcelLogo32L01\"] = \"ExcelLogo32L01\";\r\n    IconNames[\"ExcelLogo32L02\"] = \"ExcelLogo32L02\";\r\n    IconNames[\"ExcelLogo32L03\"] = \"ExcelLogo32L03\";\r\n    IconNames[\"ExcelLogo32L04\"] = \"ExcelLogo32L04\";\r\n    IconNames[\"ExcelLogo32L05\"] = \"ExcelLogo32L05\";\r\n    IconNames[\"ExcelLogo32L06\"] = \"ExcelLogo32L06\";\r\n    IconNames[\"ExcelLogo32L07\"] = \"ExcelLogo32L07\";\r\n    IconNames[\"ExcelLogo32L08\"] = \"ExcelLogo32L08\";\r\n    IconNames[\"ExcelLogo32L09\"] = \"ExcelLogo32L09\";\r\n    IconNames[\"ExcelLogo32L10\"] = \"ExcelLogo32L10\";\r\n    IconNames[\"ExcelLogo32L11\"] = \"ExcelLogo32L11\";\r\n    IconNames[\"ExcelLogo32L12\"] = \"ExcelLogo32L12\";\r\n    IconNames[\"WordLogo16Mono\"] = \"WordLogo16Mono\";\r\n    IconNames[\"WordLogo16L01\"] = \"WordLogo16L01\";\r\n    IconNames[\"WordLogo16L02\"] = \"WordLogo16L02\";\r\n    IconNames[\"WordLogo16L03\"] = \"WordLogo16L03\";\r\n    IconNames[\"WordLogo16L04\"] = \"WordLogo16L04\";\r\n    IconNames[\"WordLogo16L05\"] = \"WordLogo16L05\";\r\n    IconNames[\"WordLogo16L06\"] = \"WordLogo16L06\";\r\n    IconNames[\"WordLogo16L07\"] = \"WordLogo16L07\";\r\n    IconNames[\"WordLogo32Mono\"] = \"WordLogo32Mono\";\r\n    IconNames[\"WordLogo32L01\"] = \"WordLogo32L01\";\r\n    IconNames[\"WordLogo32L02\"] = \"WordLogo32L02\";\r\n    IconNames[\"WordLogo32L03\"] = \"WordLogo32L03\";\r\n    IconNames[\"WordLogo32L04\"] = \"WordLogo32L04\";\r\n    IconNames[\"WordLogo32L05\"] = \"WordLogo32L05\";\r\n    IconNames[\"WordLogo32L06\"] = \"WordLogo32L06\";\r\n    IconNames[\"WordLogo32L07\"] = \"WordLogo32L07\";\r\n    IconNames[\"WordLogo32L08\"] = \"WordLogo32L08\";\r\n    IconNames[\"WordLogo32L09\"] = \"WordLogo32L09\";\r\n    IconNames[\"WordLogo32L10\"] = \"WordLogo32L10\";\r\n    IconNames[\"PowerPointLogo16Mono\"] = \"PowerPointLogo16Mono\";\r\n    IconNames[\"PowerPointLogo16L01\"] = \"PowerPointLogo16L01\";\r\n    IconNames[\"PowerPointLogo16L02\"] = \"PowerPointLogo16L02\";\r\n    IconNames[\"PowerPointLogo16L03\"] = \"PowerPointLogo16L03\";\r\n    IconNames[\"PowerPointLogo16L04\"] = \"PowerPointLogo16L04\";\r\n    IconNames[\"PowerPointLogo16L05\"] = \"PowerPointLogo16L05\";\r\n    IconNames[\"PowerPointLogo16L06\"] = \"PowerPointLogo16L06\";\r\n    IconNames[\"PowerPointLogo32Mono\"] = \"PowerPointLogo32Mono\";\r\n    IconNames[\"PowerPointLogo32L01\"] = \"PowerPointLogo32L01\";\r\n    IconNames[\"PowerPointLogo32L02\"] = \"PowerPointLogo32L02\";\r\n    IconNames[\"PowerPointLogo32L03\"] = \"PowerPointLogo32L03\";\r\n    IconNames[\"PowerPointLogo32L04\"] = \"PowerPointLogo32L04\";\r\n    IconNames[\"PowerPointLogo32L05\"] = \"PowerPointLogo32L05\";\r\n    IconNames[\"PowerPointLogo32L06\"] = \"PowerPointLogo32L06\";\r\n    IconNames[\"PowerPointLogo32L07\"] = \"PowerPointLogo32L07\";\r\n    IconNames[\"PowerPointLogo32L08\"] = \"PowerPointLogo32L08\";\r\n    IconNames[\"PowerPointLogo32L09\"] = \"PowerPointLogo32L09\";\r\n    IconNames[\"OneNoteLogo16Mono\"] = \"OneNoteLogo16Mono\";\r\n    IconNames[\"OneNoteLogo16L01\"] = \"OneNoteLogo16L01\";\r\n    IconNames[\"OneNoteLogo16L02\"] = \"OneNoteLogo16L02\";\r\n    IconNames[\"OneNoteLogo16L03\"] = \"OneNoteLogo16L03\";\r\n    IconNames[\"OneNoteLogo16L04\"] = \"OneNoteLogo16L04\";\r\n    IconNames[\"OneNoteLogo16L05\"] = \"OneNoteLogo16L05\";\r\n    IconNames[\"OneNoteLogo16L06\"] = \"OneNoteLogo16L06\";\r\n    IconNames[\"OneNoteLogo16L07\"] = \"OneNoteLogo16L07\";\r\n    IconNames[\"OneNoteLogo32Mono\"] = \"OneNoteLogo32Mono\";\r\n    IconNames[\"OneNoteLogo32L01\"] = \"OneNoteLogo32L01\";\r\n    IconNames[\"OneNoteLogo32L02\"] = \"OneNoteLogo32L02\";\r\n    IconNames[\"OneNoteLogo32L03\"] = \"OneNoteLogo32L03\";\r\n    IconNames[\"OneNoteLogo32L04\"] = \"OneNoteLogo32L04\";\r\n    IconNames[\"OneNoteLogo32L05\"] = \"OneNoteLogo32L05\";\r\n    IconNames[\"OneNoteLogo32L06\"] = \"OneNoteLogo32L06\";\r\n    IconNames[\"OneNoteLogo32L07\"] = \"OneNoteLogo32L07\";\r\n    IconNames[\"OneNoteLogo32L08\"] = \"OneNoteLogo32L08\";\r\n    IconNames[\"OneNoteLogo32L09\"] = \"OneNoteLogo32L09\";\r\n    IconNames[\"OneNoteLogo32L10\"] = \"OneNoteLogo32L10\";\r\n    IconNames[\"OutlookLogo16Mono\"] = \"OutlookLogo16Mono\";\r\n    IconNames[\"OutlookLogo16L01\"] = \"OutlookLogo16L01\";\r\n    IconNames[\"OutlookLogo16L02\"] = \"OutlookLogo16L02\";\r\n    IconNames[\"OutlookLogo16L03\"] = \"OutlookLogo16L03\";\r\n    IconNames[\"OutlookLogo16L04\"] = \"OutlookLogo16L04\";\r\n    IconNames[\"OutlookLogo16L05\"] = \"OutlookLogo16L05\";\r\n    IconNames[\"OutlookLogo16L06\"] = \"OutlookLogo16L06\";\r\n    IconNames[\"OutlookLogo16L07\"] = \"OutlookLogo16L07\";\r\n    IconNames[\"OutlookLogo16L08\"] = \"OutlookLogo16L08\";\r\n    IconNames[\"OutlookLogo16L09\"] = \"OutlookLogo16L09\";\r\n    IconNames[\"OutlookLogo16L10\"] = \"OutlookLogo16L10\";\r\n    IconNames[\"OutlookLogo16L11\"] = \"OutlookLogo16L11\";\r\n    IconNames[\"OutlookLogo16L12\"] = \"OutlookLogo16L12\";\r\n    IconNames[\"OutlookLogo32Mono\"] = \"OutlookLogo32Mono\";\r\n    IconNames[\"OutlookLogo32L01\"] = \"OutlookLogo32L01\";\r\n    IconNames[\"OutlookLogo32L02\"] = \"OutlookLogo32L02\";\r\n    IconNames[\"OutlookLogo32L03\"] = \"OutlookLogo32L03\";\r\n    IconNames[\"OutlookLogo32L04\"] = \"OutlookLogo32L04\";\r\n    IconNames[\"OutlookLogo32L05\"] = \"OutlookLogo32L05\";\r\n    IconNames[\"OutlookLogo32L06\"] = \"OutlookLogo32L06\";\r\n    IconNames[\"OutlookLogo32L07\"] = \"OutlookLogo32L07\";\r\n    IconNames[\"OutlookLogo32L08\"] = \"OutlookLogo32L08\";\r\n    IconNames[\"OutlookLogo32L09\"] = \"OutlookLogo32L09\";\r\n    IconNames[\"OutlookLogo32L10\"] = \"OutlookLogo32L10\";\r\n    IconNames[\"OutlookLogo32L11\"] = \"OutlookLogo32L11\";\r\n    IconNames[\"OutlookLogo32L12\"] = \"OutlookLogo32L12\";\r\n    IconNames[\"OutlookLogo32L13\"] = \"OutlookLogo32L13\";\r\n    IconNames[\"OutlookLogo32L14\"] = \"OutlookLogo32L14\";\r\n    IconNames[\"OutlookLogo32L15\"] = \"OutlookLogo32L15\";\r\n    IconNames[\"OutlookLogo32L16\"] = \"OutlookLogo32L16\";\r\n    IconNames[\"OutlookLogo32L17\"] = \"OutlookLogo32L17\";\r\n    IconNames[\"OutlookLogo32L18\"] = \"OutlookLogo32L18\";\r\n    IconNames[\"OutlookLogo32L19\"] = \"OutlookLogo32L19\";\r\n    IconNames[\"OutlookLogo32L20\"] = \"OutlookLogo32L20\";\r\n    IconNames[\"OutlookLogo32L21\"] = \"OutlookLogo32L21\";\r\n    IconNames[\"SharePointLogo16Mono\"] = \"SharePointLogo16Mono\";\r\n    IconNames[\"SharePointLogo16L01\"] = \"SharePointLogo16L01\";\r\n    IconNames[\"SharePointLogo16L02\"] = \"SharePointLogo16L02\";\r\n    IconNames[\"SharePointLogo16L03\"] = \"SharePointLogo16L03\";\r\n    IconNames[\"SharePointLogo16L04\"] = \"SharePointLogo16L04\";\r\n    IconNames[\"SharePointLogo16L05\"] = \"SharePointLogo16L05\";\r\n    IconNames[\"SharePointLogo16L06\"] = \"SharePointLogo16L06\";\r\n    IconNames[\"SharePointLogo32Mono\"] = \"SharePointLogo32Mono\";\r\n    IconNames[\"SharePointLogo32L01\"] = \"SharePointLogo32L01\";\r\n    IconNames[\"SharePointLogo32L02\"] = \"SharePointLogo32L02\";\r\n    IconNames[\"SharePointLogo32L03\"] = \"SharePointLogo32L03\";\r\n    IconNames[\"SharePointLogo32L04\"] = \"SharePointLogo32L04\";\r\n    IconNames[\"SharePointLogo32L05\"] = \"SharePointLogo32L05\";\r\n    IconNames[\"SharePointLogo32L06\"] = \"SharePointLogo32L06\";\r\n    IconNames[\"SharePointLogo32L07\"] = \"SharePointLogo32L07\";\r\n    IconNames[\"SharePointLogo32L08\"] = \"SharePointLogo32L08\";\r\n    IconNames[\"SharePointLogo32L09\"] = \"SharePointLogo32L09\";\r\n    IconNames[\"YammerLogo16Mono\"] = \"YammerLogo16Mono\";\r\n    IconNames[\"YammerLogo16L01\"] = \"YammerLogo16L01\";\r\n    IconNames[\"YammerLogo16L02\"] = \"YammerLogo16L02\";\r\n    IconNames[\"YammerLogo16L03\"] = \"YammerLogo16L03\";\r\n    IconNames[\"YammerLogo16L04\"] = \"YammerLogo16L04\";\r\n    IconNames[\"YammerLogo16L05\"] = \"YammerLogo16L05\";\r\n    IconNames[\"YammerLogo16L06\"] = \"YammerLogo16L06\";\r\n    IconNames[\"YammerLogo32Mono\"] = \"YammerLogo32Mono\";\r\n    IconNames[\"YammerLogo32L01\"] = \"YammerLogo32L01\";\r\n    IconNames[\"YammerLogo32L02\"] = \"YammerLogo32L02\";\r\n    IconNames[\"YammerLogo32L03\"] = \"YammerLogo32L03\";\r\n    IconNames[\"YammerLogo32L04\"] = \"YammerLogo32L04\";\r\n    IconNames[\"YammerLogo32L05\"] = \"YammerLogo32L05\";\r\n    IconNames[\"YammerLogo32L06\"] = \"YammerLogo32L06\";\r\n    IconNames[\"YammerLogo32L07\"] = \"YammerLogo32L07\";\r\n    IconNames[\"YammerLogo32L08\"] = \"YammerLogo32L08\";\r\n    IconNames[\"YammerLogo32L09\"] = \"YammerLogo32L09\";\r\n    IconNames[\"TeamsLogo16Mono\"] = \"TeamsLogo16Mono\";\r\n    IconNames[\"TeamsLogo16L01\"] = \"TeamsLogo16L01\";\r\n    IconNames[\"TeamsLogo16L02\"] = \"TeamsLogo16L02\";\r\n    IconNames[\"TeamsLogo16L03\"] = \"TeamsLogo16L03\";\r\n    IconNames[\"TeamsLogo16L04\"] = \"TeamsLogo16L04\";\r\n    IconNames[\"TeamsLogo16L05\"] = \"TeamsLogo16L05\";\r\n    IconNames[\"TeamsLogo32Mono\"] = \"TeamsLogo32Mono\";\r\n    IconNames[\"TeamsLogo32L01\"] = \"TeamsLogo32L01\";\r\n    IconNames[\"TeamsLogo32L02\"] = \"TeamsLogo32L02\";\r\n    IconNames[\"TeamsLogo32L03\"] = \"TeamsLogo32L03\";\r\n    IconNames[\"TeamsLogo32L04\"] = \"TeamsLogo32L04\";\r\n    IconNames[\"TeamsLogo32L05\"] = \"TeamsLogo32L05\";\r\n    IconNames[\"TeamsLogo32L06\"] = \"TeamsLogo32L06\";\r\n    IconNames[\"TeamsLogo32L07\"] = \"TeamsLogo32L07\";\r\n    IconNames[\"TeamsLogo32L08\"] = \"TeamsLogo32L08\";\r\n    IconNames[\"OneDriveLogo16Mono\"] = \"OneDriveLogo16Mono\";\r\n    IconNames[\"OneDriveLogo16L01\"] = \"OneDriveLogo16L01\";\r\n    IconNames[\"OneDriveLogo16L02\"] = \"OneDriveLogo16L02\";\r\n    IconNames[\"OneDriveLogo16L03\"] = \"OneDriveLogo16L03\";\r\n    IconNames[\"OneDriveLogo16L04\"] = \"OneDriveLogo16L04\";\r\n    IconNames[\"OneDriveLogo32Mono\"] = \"OneDriveLogo32Mono\";\r\n    IconNames[\"OneDriveLogo32L01\"] = \"OneDriveLogo32L01\";\r\n    IconNames[\"OneDriveLogo32L02\"] = \"OneDriveLogo32L02\";\r\n    IconNames[\"OneDriveLogo32L03\"] = \"OneDriveLogo32L03\";\r\n    IconNames[\"OneDriveLogo32L04\"] = \"OneDriveLogo32L04\";\r\n    IconNames[\"SkypeLogo16Mono\"] = \"SkypeLogo16Mono\";\r\n    IconNames[\"SkypeLogo16L01\"] = \"SkypeLogo16L01\";\r\n    IconNames[\"SkypeLogo16L02\"] = \"SkypeLogo16L02\";\r\n    IconNames[\"SkypeLogo32Mono\"] = \"SkypeLogo32Mono\";\r\n    IconNames[\"SkypeLogo32L01\"] = \"SkypeLogo32L01\";\r\n    IconNames[\"SkypeLogo32L02\"] = \"SkypeLogo32L02\";\r\n    IconNames[\"SkypeLogo32L03\"] = \"SkypeLogo32L03\";\r\n    IconNames[\"SkypeLogo32L04\"] = \"SkypeLogo32L04\";\r\n    IconNames[\"DecreaseIndentLegacy\"] = \"DecreaseIndentLegacy\";\r\n    IconNames[\"IncreaseIndentLegacy\"] = \"IncreaseIndentLegacy\";\r\n    IconNames[\"SizeLegacy\"] = \"SizeLegacy\";\r\n})(IconNames || (IconNames = {}));\r\n","import { initializeIcons as i } from './fabric-icons';\r\nimport { registerIconAliases } from './iconAliases';\r\nconst DEFAULT_BASE_URL = 'https://res.cdn.office.net/files/fabric/assets/icons/';\r\nexport function initializeIcons(baseUrl = DEFAULT_BASE_URL, options) {\r\n    [i].forEach((initialize) => initialize(baseUrl, options));\r\n    registerIconAliases();\r\n}\r\nexport { IconNames } from './IconNames';\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport * as History from 'history';\r\nimport './data/providers/msal-shim';\r\nimport Root from './root';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { init as initMocks } from './mocks/mocks';\r\nimport { configureStore } from './redux/configureStore';\r\nimport { init as initMsal, isMsalIframe, isMsalPopup } from './data/providers/msal-provider';\r\nimport { setStore, trackTrace } from './utils/telemetry/telemetry-channel';\r\nimport { init as initStorage } from './utils/storage';\r\nimport { initializeIcons } from '@fluentui/react/lib/Icons';\r\nimport { initializeIcons as initializeExtraIcons } from './images/icons/src';\r\nimport { initLocaleData } from './language/languages';\r\nimport './polyfills';\r\nimport './index.css';\r\nasync function init() {\r\n    await initStorage();\r\n    // we don't want to do anything when in an MSAL iframe or pop up, just let MSAL do it's thing\r\n    if (isMsalIframe() || isMsalPopup()) {\r\n        initMsal();\r\n        trackTrace('init: isMsalIframeOrPopup = true');\r\n        return;\r\n    }\r\n    initMocks();\r\n    // loads all Office UI Fabric icons for use throughout the app\r\n    initializeIcons(\"https://res.cdn.office.net/files/fabric/assets/icons/\"); // use the CDN version of the icons\r\n    initializeExtraIcons();\r\n    // initializes our language data\r\n    initLocaleData();\r\n    const rootElement = document.getElementById('root');\r\n    const history = History.createBrowserHistory();\r\n    const store = configureStore(history);\r\n    setStore(store);\r\n    ReactDOM.render(<Root store={store} history={history}/>, rootElement);\r\n    // If you want your app to work offline and load faster, you can change\r\n    // unregister() to register() below. Note this comes with some pitfalls.\r\n    // Learn more about service workers: https://bit.ly/CRA-PWA\r\n    serviceWorker.unregister();\r\n}\r\ninit();\r\n"],"sourceRoot":""}