{"ast":null,"code":"import * as i8 from '@angular/cdk/overlay';\nimport { Overlay, CdkConnectedOverlay, CdkOverlayOrigin, OverlayModule } from '@angular/cdk/overlay';\nimport * as i7 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, Directive, Optional, Inject, Self, Attribute, Input, ViewChild, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport * as i2 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, mixinDisabled, mixinErrorState, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport * as i6 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/cdk/a11y';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE, hasModifierKey, A } from '@angular/cdk/keycodes';\nimport * as i4 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport { Subject, defer, merge } from 'rxjs';\nimport { startWith, switchMap, take, filter, map, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, query, animateChild, state, style, animate } from '@angular/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nconst _c0 = [\"trigger\"];\nconst _c1 = [\"panel\"];\nconst _c2 = [[[\"mat-select-trigger\"]], \"*\"];\nconst _c3 = [\"mat-select-trigger\", \"*\"];\nfunction MatSelect_span_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 11);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate(ctx_r1.placeholder);\n  }\n}\nfunction MatSelect_span_5_span_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 15);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate(ctx_r1.triggerValue);\n  }\n}\nfunction MatSelect_span_5_ng_content_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵprojection(0, 0, [\"*ngSwitchCase\", \"true\"]);\n  }\n}\nfunction MatSelect_span_5_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 12);\n    i0.ɵɵtemplate(1, MatSelect_span_5_span_1_Template, 2, 1, \"span\", 13)(2, MatSelect_span_5_ng_content_2_Template, 1, 0, \"ng-content\", 14);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"ngSwitch\", !!ctx_r1.customTrigger);\n    i0.ɵɵadvance(2);\n    i0.ɵɵproperty(\"ngSwitchCase\", true);\n  }\n}\nfunction MatSelect_ng_template_10_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r3 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 16, 1);\n    i0.ɵɵlistener(\"@transformPanel.done\", function MatSelect_ng_template_10_Template_div_animation_transformPanel_done_0_listener($event) {\n      i0.ɵɵrestoreView(_r3);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1._panelDoneAnimatingStream.next($event.toState));\n    })(\"keydown\", function MatSelect_ng_template_10_Template_div_keydown_0_listener($event) {\n      i0.ɵɵrestoreView(_r3);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1._handleKeydown($event));\n    });\n    i0.ɵɵprojection(2, 1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵclassMapInterpolate1(\"mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open \", ctx_r1._getPanelTheme(), \"\");\n    i0.ɵɵproperty(\"ngClass\", ctx_r1.panelClass)(\"@transformPanel\", \"showing\");\n    i0.ɵɵattribute(\"id\", ctx_r1.id + \"-panel\")(\"aria-multiselectable\", ctx_r1.multiple)(\"aria-label\", ctx_r1.ariaLabel || null)(\"aria-labelledby\", ctx_r1._getPanelAriaLabelledby());\n  }\n}\nconst matSelectAnimations = {\n  /**\n   * This animation ensures the select's overlay panel animation (transformPanel) is called when\n   * closing the select.\n   * This is needed due to https://github.com/angular/angular/issues/23302\n   */\n  transformPanelWrap: trigger('transformPanelWrap', [transition('* => void', query('@transformPanel', [animateChild()], {\n    optional: true\n  }))]),\n  /** This animation transforms the select's overlay panel on and off the page. */\n  transformPanel: trigger('transformPanel', [state('void', style({\n    opacity: 0,\n    transform: 'scale(1, 0.8)'\n  })), transition('void => showing', animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n    opacity: 1,\n    transform: 'scale(1, 1)'\n  }))), transition('* => void', animate('100ms linear', style({\n    opacity: 0\n  })))])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Note that these have been copied over verbatim from\n// `material/select` so that we don't have to expose them publicly.\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nfunction getMatSelectDynamicMultipleError() {\n  return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nfunction getMatSelectNonArrayValueError() {\n  return Error('Value must be an array in multiple-selection mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nfunction getMatSelectNonFunctionValueError() {\n  return Error('`compareWith` must be a function.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId = 0;\n/** Injection token that determines the scroll handling while a select is open. */\nconst MAT_SELECT_SCROLL_STRATEGY = new InjectionToken('mat-select-scroll-strategy');\n/** @docs-private */\nfunction MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n  return () => overlay.scrollStrategies.reposition();\n}\n/** Injection token that can be used to provide the default options the select module. */\nconst MAT_SELECT_CONFIG = new InjectionToken('MAT_SELECT_CONFIG');\n/** @docs-private */\nconst MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n  provide: MAT_SELECT_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SELECT_TRIGGER = new InjectionToken('MatSelectTrigger');\n/** Change event object that is emitted when the select value has changed. */\nclass MatSelectChange {\n  constructor( /** Reference to the select that emitted the change event. */\n  source, /** Current value of the select that emitted the event. */\n  value) {\n    this.source = source;\n    this.value = value;\n  }\n}\n// Boilerplate for applying mixins to MatSelect.\n/** @docs-private */\nconst _MatSelectMixinBase = mixinDisableRipple(mixinTabIndex(mixinDisabled(mixinErrorState(class {\n  constructor(_elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup,\n  /**\n   * Form control bound to the component.\n   * Implemented as part of `MatFormFieldControl`.\n   * @docs-private\n   */\n  ngControl) {\n    this._elementRef = _elementRef;\n    this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n    this._parentForm = _parentForm;\n    this._parentFormGroup = _parentFormGroup;\n    this.ngControl = ngControl;\n    /**\n     * Emits whenever the component state changes and should cause the parent\n     * form-field to update. Implemented as part of `MatFormFieldControl`.\n     * @docs-private\n     */\n    this.stateChanges = new Subject();\n  }\n}))));\n/** Base class with all of the `MatSelect` functionality. */\nclass _MatSelectBase extends _MatSelectMixinBase {\n  /** Whether the select is focused. */\n  get focused() {\n    return this._focused || this._panelOpen;\n  }\n  /** Placeholder to be shown if no value has been selected. */\n  get placeholder() {\n    return this._placeholder;\n  }\n  set placeholder(value) {\n    this._placeholder = value;\n    this.stateChanges.next();\n  }\n  /** Whether the component is required. */\n  get required() {\n    return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n  }\n  set required(value) {\n    this._required = coerceBooleanProperty(value);\n    this.stateChanges.next();\n  }\n  /** Whether the user should be allowed to select multiple options. */\n  get multiple() {\n    return this._multiple;\n  }\n  set multiple(value) {\n    if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatSelectDynamicMultipleError();\n    }\n    this._multiple = coerceBooleanProperty(value);\n  }\n  /** Whether to center the active option over the trigger. */\n  get disableOptionCentering() {\n    return this._disableOptionCentering;\n  }\n  set disableOptionCentering(value) {\n    this._disableOptionCentering = coerceBooleanProperty(value);\n  }\n  /**\n   * Function to compare the option values with the selected values. The first argument\n   * is a value from an option. The second is a value from the selection. A boolean\n   * should be returned.\n   */\n  get compareWith() {\n    return this._compareWith;\n  }\n  set compareWith(fn) {\n    if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatSelectNonFunctionValueError();\n    }\n    this._compareWith = fn;\n    if (this._selectionModel) {\n      // A different comparator means the selection could change.\n      this._initializeSelection();\n    }\n  }\n  /** Value of the select control. */\n  get value() {\n    return this._value;\n  }\n  set value(newValue) {\n    const hasAssigned = this._assignValue(newValue);\n    if (hasAssigned) {\n      this._onChange(newValue);\n    }\n  }\n  /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n  get typeaheadDebounceInterval() {\n    return this._typeaheadDebounceInterval;\n  }\n  set typeaheadDebounceInterval(value) {\n    this._typeaheadDebounceInterval = coerceNumberProperty(value);\n  }\n  /** Unique id of the element. */\n  get id() {\n    return this._id;\n  }\n  set id(value) {\n    this._id = value || this._uid;\n    this.stateChanges.next();\n  }\n  constructor(_viewportRuler, _changeDetectorRef, _ngZone, _defaultErrorStateMatcher, elementRef, _dir, _parentForm, _parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {\n    super(elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n    this._viewportRuler = _viewportRuler;\n    this._changeDetectorRef = _changeDetectorRef;\n    this._ngZone = _ngZone;\n    this._dir = _dir;\n    this._parentFormField = _parentFormField;\n    this._liveAnnouncer = _liveAnnouncer;\n    this._defaultOptions = _defaultOptions;\n    /** Whether or not the overlay panel is open. */\n    this._panelOpen = false;\n    /** Comparison function to specify which option is displayed. Defaults to object equality. */\n    this._compareWith = (o1, o2) => o1 === o2;\n    /** Unique id for this input. */\n    this._uid = `mat-select-${nextUniqueId++}`;\n    /** Current `aria-labelledby` value for the select trigger. */\n    this._triggerAriaLabelledBy = null;\n    /** Emits whenever the component is destroyed. */\n    this._destroy = new Subject();\n    /** `View -> model callback called when value changes` */\n    this._onChange = () => {};\n    /** `View -> model callback called when select has been touched` */\n    this._onTouched = () => {};\n    /** ID for the DOM node containing the select's value. */\n    this._valueId = `mat-select-value-${nextUniqueId++}`;\n    /** Emits when the panel element is finished transforming in. */\n    this._panelDoneAnimatingStream = new Subject();\n    this._overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';\n    this._focused = false;\n    /** A name for this control that can be used by `mat-form-field`. */\n    this.controlType = 'mat-select';\n    this._multiple = false;\n    this._disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;\n    /** Aria label of the select. */\n    this.ariaLabel = '';\n    /** Combined stream of all of the child options' change events. */\n    this.optionSelectionChanges = defer(() => {\n      const options = this.options;\n      if (options) {\n        return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n      }\n      return this._ngZone.onStable.pipe(take(1), switchMap(() => this.optionSelectionChanges));\n    });\n    /** Event emitted when the select panel has been toggled. */\n    this.openedChange = new EventEmitter();\n    /** Event emitted when the select has been opened. */\n    this._openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n    /** Event emitted when the select has been closed. */\n    this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n    /** Event emitted when the selected value has been changed by the user. */\n    this.selectionChange = new EventEmitter();\n    /**\n     * Event that emits whenever the raw value of the select changes. This is here primarily\n     * to facilitate the two-way binding for the `value` input.\n     * @docs-private\n     */\n    this.valueChange = new EventEmitter();\n    if (this.ngControl) {\n      // Note: we provide the value accessor through here, instead of\n      // the `providers` to avoid running into a circular import.\n      this.ngControl.valueAccessor = this;\n    }\n    // Note that we only want to set this when the defaults pass it in, otherwise it should\n    // stay as `undefined` so that it falls back to the default in the key manager.\n    if (_defaultOptions?.typeaheadDebounceInterval != null) {\n      this._typeaheadDebounceInterval = _defaultOptions.typeaheadDebounceInterval;\n    }\n    this._scrollStrategyFactory = scrollStrategyFactory;\n    this._scrollStrategy = this._scrollStrategyFactory();\n    this.tabIndex = parseInt(tabIndex) || 0;\n    // Force setter to be called in case id was not specified.\n    this.id = this.id;\n  }\n  ngOnInit() {\n    this._selectionModel = new SelectionModel(this.multiple);\n    this.stateChanges.next();\n    // We need `distinctUntilChanged` here, because some browsers will\n    // fire the animation end event twice for the same animation. See:\n    // https://github.com/angular/angular/issues/24084\n    this._panelDoneAnimatingStream.pipe(distinctUntilChanged(), takeUntil(this._destroy)).subscribe(() => this._panelDoneAnimating(this.panelOpen));\n  }\n  ngAfterContentInit() {\n    this._initKeyManager();\n    this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n      event.added.forEach(option => option.select());\n      event.removed.forEach(option => option.deselect());\n    });\n    this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n      this._resetOptions();\n      this._initializeSelection();\n    });\n  }\n  ngDoCheck() {\n    const newAriaLabelledby = this._getTriggerAriaLabelledby();\n    const ngControl = this.ngControl;\n    // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n    // is computed as a result of a content query which can cause this binding to trigger a\n    // \"changed after checked\" error.\n    if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n      const element = this._elementRef.nativeElement;\n      this._triggerAriaLabelledBy = newAriaLabelledby;\n      if (newAriaLabelledby) {\n        element.setAttribute('aria-labelledby', newAriaLabelledby);\n      } else {\n        element.removeAttribute('aria-labelledby');\n      }\n    }\n    if (ngControl) {\n      // The disabled state might go out of sync if the form group is swapped out. See #17860.\n      if (this._previousControl !== ngControl.control) {\n        if (this._previousControl !== undefined && ngControl.disabled !== null && ngControl.disabled !== this.disabled) {\n          this.disabled = ngControl.disabled;\n        }\n        this._previousControl = ngControl.control;\n      }\n      this.updateErrorState();\n    }\n  }\n  ngOnChanges(changes) {\n    // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n    // the parent form field know to run change detection when the disabled state changes.\n    if (changes['disabled'] || changes['userAriaDescribedBy']) {\n      this.stateChanges.next();\n    }\n    if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n      this._keyManager.withTypeAhead(this._typeaheadDebounceInterval);\n    }\n  }\n  ngOnDestroy() {\n    this._keyManager?.destroy();\n    this._destroy.next();\n    this._destroy.complete();\n    this.stateChanges.complete();\n  }\n  /** Toggles the overlay panel open or closed. */\n  toggle() {\n    this.panelOpen ? this.close() : this.open();\n  }\n  /** Opens the overlay panel. */\n  open() {\n    if (this._canOpen()) {\n      this._panelOpen = true;\n      this._keyManager.withHorizontalOrientation(null);\n      this._highlightCorrectOption();\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n  /** Closes the overlay panel and focuses the host element. */\n  close() {\n    if (this._panelOpen) {\n      this._panelOpen = false;\n      this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n      this._changeDetectorRef.markForCheck();\n      this._onTouched();\n    }\n  }\n  /**\n   * Sets the select's value. Part of the ControlValueAccessor interface\n   * required to integrate with Angular's core forms API.\n   *\n   * @param value New value to be written to the model.\n   */\n  writeValue(value) {\n    this._assignValue(value);\n  }\n  /**\n   * Saves a callback function to be invoked when the select's value\n   * changes from user input. Part of the ControlValueAccessor interface\n   * required to integrate with Angular's core forms API.\n   *\n   * @param fn Callback to be triggered when the value changes.\n   */\n  registerOnChange(fn) {\n    this._onChange = fn;\n  }\n  /**\n   * Saves a callback function to be invoked when the select is blurred\n   * by the user. Part of the ControlValueAccessor interface required\n   * to integrate with Angular's core forms API.\n   *\n   * @param fn Callback to be triggered when the component has been touched.\n   */\n  registerOnTouched(fn) {\n    this._onTouched = fn;\n  }\n  /**\n   * Disables the select. Part of the ControlValueAccessor interface required\n   * to integrate with Angular's core forms API.\n   *\n   * @param isDisabled Sets whether the component is disabled.\n   */\n  setDisabledState(isDisabled) {\n    this.disabled = isDisabled;\n    this._changeDetectorRef.markForCheck();\n    this.stateChanges.next();\n  }\n  /** Whether or not the overlay panel is open. */\n  get panelOpen() {\n    return this._panelOpen;\n  }\n  /** The currently selected option. */\n  get selected() {\n    return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n  }\n  /** The value displayed in the trigger. */\n  get triggerValue() {\n    if (this.empty) {\n      return '';\n    }\n    if (this._multiple) {\n      const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n      if (this._isRtl()) {\n        selectedOptions.reverse();\n      }\n      // TODO(crisbeto): delimiter should be configurable for proper localization.\n      return selectedOptions.join(', ');\n    }\n    return this._selectionModel.selected[0].viewValue;\n  }\n  /** Whether the element is in RTL mode. */\n  _isRtl() {\n    return this._dir ? this._dir.value === 'rtl' : false;\n  }\n  /** Handles all keydown events on the select. */\n  _handleKeydown(event) {\n    if (!this.disabled) {\n      this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n    }\n  }\n  /** Handles keyboard events while the select is closed. */\n  _handleClosedKeydown(event) {\n    const keyCode = event.keyCode;\n    const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n    const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n    const manager = this._keyManager;\n    // Open the select on ALT + arrow key to match the native <select>\n    if (!manager.isTyping() && isOpenKey && !hasModifierKey(event) || (this.multiple || event.altKey) && isArrowKey) {\n      event.preventDefault(); // prevents the page from scrolling down when pressing space\n      this.open();\n    } else if (!this.multiple) {\n      const previouslySelectedOption = this.selected;\n      manager.onKeydown(event);\n      const selectedOption = this.selected;\n      // Since the value has changed, we need to announce it ourselves.\n      if (selectedOption && previouslySelectedOption !== selectedOption) {\n        // We set a duration on the live announcement, because we want the live element to be\n        // cleared after a while so that users can't navigate to it using the arrow keys.\n        this._liveAnnouncer.announce(selectedOption.viewValue, 10000);\n      }\n    }\n  }\n  /** Handles keyboard events when the selected is open. */\n  _handleOpenKeydown(event) {\n    const manager = this._keyManager;\n    const keyCode = event.keyCode;\n    const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n    const isTyping = manager.isTyping();\n    if (isArrowKey && event.altKey) {\n      // Close the select on ALT + arrow key to match the native <select>\n      event.preventDefault();\n      this.close();\n      // Don't do anything in this case if the user is typing,\n      // because the typing sequence can include the space key.\n    } else if (!isTyping && (keyCode === ENTER || keyCode === SPACE) && manager.activeItem && !hasModifierKey(event)) {\n      event.preventDefault();\n      manager.activeItem._selectViaInteraction();\n    } else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n      event.preventDefault();\n      const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n      this.options.forEach(option => {\n        if (!option.disabled) {\n          hasDeselectedOptions ? option.select() : option.deselect();\n        }\n      });\n    } else {\n      const previouslyFocusedIndex = manager.activeItemIndex;\n      manager.onKeydown(event);\n      if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {\n        manager.activeItem._selectViaInteraction();\n      }\n    }\n  }\n  _onFocus() {\n    if (!this.disabled) {\n      this._focused = true;\n      this.stateChanges.next();\n    }\n  }\n  /**\n   * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n   * \"blur\" to the panel when it opens, causing a false positive.\n   */\n  _onBlur() {\n    this._focused = false;\n    this._keyManager?.cancelTypeahead();\n    if (!this.disabled && !this.panelOpen) {\n      this._onTouched();\n      this._changeDetectorRef.markForCheck();\n      this.stateChanges.next();\n    }\n  }\n  /**\n   * Callback that is invoked when the overlay panel has been attached.\n   */\n  _onAttached() {\n    this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n      this._changeDetectorRef.detectChanges();\n      this._positioningSettled();\n    });\n  }\n  /** Returns the theme to be used on the panel. */\n  _getPanelTheme() {\n    return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n  }\n  /** Whether the select has a value. */\n  get empty() {\n    return !this._selectionModel || this._selectionModel.isEmpty();\n  }\n  _initializeSelection() {\n    // Defer setting the value in order to avoid the \"Expression\n    // has changed after it was checked\" errors from Angular.\n    Promise.resolve().then(() => {\n      if (this.ngControl) {\n        this._value = this.ngControl.value;\n      }\n      this._setSelectionByValue(this._value);\n      this.stateChanges.next();\n    });\n  }\n  /**\n   * Sets the selected option based on a value. If no option can be\n   * found with the designated value, the select trigger is cleared.\n   */\n  _setSelectionByValue(value) {\n    this.options.forEach(option => option.setInactiveStyles());\n    this._selectionModel.clear();\n    if (this.multiple && value) {\n      if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw getMatSelectNonArrayValueError();\n      }\n      value.forEach(currentValue => this._selectOptionByValue(currentValue));\n      this._sortValues();\n    } else {\n      const correspondingOption = this._selectOptionByValue(value);\n      // Shift focus to the active item. Note that we shouldn't do this in multiple\n      // mode, because we don't know what option the user interacted with last.\n      if (correspondingOption) {\n        this._keyManager.updateActiveItem(correspondingOption);\n      } else if (!this.panelOpen) {\n        // Otherwise reset the highlighted option. Note that we only want to do this while\n        // closed, because doing it while open can shift the user's focus unnecessarily.\n        this._keyManager.updateActiveItem(-1);\n      }\n    }\n    this._changeDetectorRef.markForCheck();\n  }\n  /**\n   * Finds and selects and option based on its value.\n   * @returns Option that has the corresponding value.\n   */\n  _selectOptionByValue(value) {\n    const correspondingOption = this.options.find(option => {\n      // Skip options that are already in the model. This allows us to handle cases\n      // where the same primitive value is selected multiple times.\n      if (this._selectionModel.isSelected(option)) {\n        return false;\n      }\n      try {\n        // Treat null as a special reset value.\n        return option.value != null && this._compareWith(option.value, value);\n      } catch (error) {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          // Notify developers of errors in their comparator.\n          console.warn(error);\n        }\n        return false;\n      }\n    });\n    if (correspondingOption) {\n      this._selectionModel.select(correspondingOption);\n    }\n    return correspondingOption;\n  }\n  /** Assigns a specific value to the select. Returns whether the value has changed. */\n  _assignValue(newValue) {\n    // Always re-assign an array, because it might have been mutated.\n    if (newValue !== this._value || this._multiple && Array.isArray(newValue)) {\n      if (this.options) {\n        this._setSelectionByValue(newValue);\n      }\n      this._value = newValue;\n      return true;\n    }\n    return false;\n  }\n  /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n  _initKeyManager() {\n    this._keyManager = new ActiveDescendantKeyManager(this.options).withTypeAhead(this._typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr').withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(['shiftKey']);\n    this._keyManager.tabOut.subscribe(() => {\n      if (this.panelOpen) {\n        // Select the active item when tabbing away. This is consistent with how the native\n        // select behaves. Note that we only want to do this in single selection mode.\n        if (!this.multiple && this._keyManager.activeItem) {\n          this._keyManager.activeItem._selectViaInteraction();\n        }\n        // Restore focus to the trigger before closing. Ensures that the focus\n        // position won't be lost if the user got focus into the overlay.\n        this.focus();\n        this.close();\n      }\n    });\n    this._keyManager.change.subscribe(() => {\n      if (this._panelOpen && this.panel) {\n        this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n      } else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n        this._keyManager.activeItem._selectViaInteraction();\n      }\n    });\n  }\n  /** Drops current option subscriptions and IDs and resets from scratch. */\n  _resetOptions() {\n    const changedOrDestroyed = merge(this.options.changes, this._destroy);\n    this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n      this._onSelect(event.source, event.isUserInput);\n      if (event.isUserInput && !this.multiple && this._panelOpen) {\n        this.close();\n        this.focus();\n      }\n    });\n    // Listen to changes in the internal state of the options and react accordingly.\n    // Handles cases like the labels of the selected options changing.\n    merge(...this.options.map(option => option._stateChanges)).pipe(takeUntil(changedOrDestroyed)).subscribe(() => {\n      // `_stateChanges` can fire as a result of a change in the label's DOM value which may\n      // be the result of an expression changing. We have to use `detectChanges` in order\n      // to avoid \"changed after checked\" errors (see #14793).\n      this._changeDetectorRef.detectChanges();\n      this.stateChanges.next();\n    });\n  }\n  /** Invoked when an option is clicked. */\n  _onSelect(option, isUserInput) {\n    const wasSelected = this._selectionModel.isSelected(option);\n    if (option.value == null && !this._multiple) {\n      option.deselect();\n      this._selectionModel.clear();\n      if (this.value != null) {\n        this._propagateChanges(option.value);\n      }\n    } else {\n      if (wasSelected !== option.selected) {\n        option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n      }\n      if (isUserInput) {\n        this._keyManager.setActiveItem(option);\n      }\n      if (this.multiple) {\n        this._sortValues();\n        if (isUserInput) {\n          // In case the user selected the option with their mouse, we\n          // want to restore focus back to the trigger, in order to\n          // prevent the select keyboard controls from clashing with\n          // the ones from `mat-option`.\n          this.focus();\n        }\n      }\n    }\n    if (wasSelected !== this._selectionModel.isSelected(option)) {\n      this._propagateChanges();\n    }\n    this.stateChanges.next();\n  }\n  /** Sorts the selected values in the selected based on their order in the panel. */\n  _sortValues() {\n    if (this.multiple) {\n      const options = this.options.toArray();\n      this._selectionModel.sort((a, b) => {\n        return this.sortComparator ? this.sortComparator(a, b, options) : options.indexOf(a) - options.indexOf(b);\n      });\n      this.stateChanges.next();\n    }\n  }\n  /** Emits change event to set the model value. */\n  _propagateChanges(fallbackValue) {\n    let valueToEmit = null;\n    if (this.multiple) {\n      valueToEmit = this.selected.map(option => option.value);\n    } else {\n      valueToEmit = this.selected ? this.selected.value : fallbackValue;\n    }\n    this._value = valueToEmit;\n    this.valueChange.emit(valueToEmit);\n    this._onChange(valueToEmit);\n    this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n    this._changeDetectorRef.markForCheck();\n  }\n  /**\n   * Highlights the selected item. If no option is selected, it will highlight\n   * the first item instead.\n   */\n  _highlightCorrectOption() {\n    if (this._keyManager) {\n      if (this.empty) {\n        this._keyManager.setFirstItemActive();\n      } else {\n        this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n      }\n    }\n  }\n  /** Whether the panel is allowed to open. */\n  _canOpen() {\n    return !this._panelOpen && !this.disabled && this.options?.length > 0;\n  }\n  /** Focuses the select element. */\n  focus(options) {\n    this._elementRef.nativeElement.focus(options);\n  }\n  /** Gets the aria-labelledby for the select panel. */\n  _getPanelAriaLabelledby() {\n    if (this.ariaLabel) {\n      return null;\n    }\n    const labelId = this._parentFormField?.getLabelId();\n    const labelExpression = labelId ? labelId + ' ' : '';\n    return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n  }\n  /** Determines the `aria-activedescendant` to be set on the host. */\n  _getAriaActiveDescendant() {\n    if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n      return this._keyManager.activeItem.id;\n    }\n    return null;\n  }\n  /** Gets the aria-labelledby of the select component trigger. */\n  _getTriggerAriaLabelledby() {\n    if (this.ariaLabel) {\n      return null;\n    }\n    const labelId = this._parentFormField?.getLabelId();\n    let value = (labelId ? labelId + ' ' : '') + this._valueId;\n    if (this.ariaLabelledby) {\n      value += ' ' + this.ariaLabelledby;\n    }\n    return value;\n  }\n  /** Called when the overlay panel is done animating. */\n  _panelDoneAnimating(isOpen) {\n    this.openedChange.emit(isOpen);\n  }\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  setDescribedByIds(ids) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  onContainerClick() {\n    this.focus();\n    this.open();\n  }\n  /**\n   * Implemented as part of MatFormFieldControl.\n   * @docs-private\n   */\n  get shouldLabelFloat() {\n    return this._panelOpen || !this.empty || this._focused && !!this._placeholder;\n  }\n}\n_MatSelectBase.ɵfac = function _MatSelectBase_Factory(t) {\n  return new (t || _MatSelectBase)(i0.ɵɵdirectiveInject(i1.ViewportRuler), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.ErrorStateMatcher), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i3.Directionality, 8), i0.ɵɵdirectiveInject(i4.NgForm, 8), i0.ɵɵdirectiveInject(i4.FormGroupDirective, 8), i0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8), i0.ɵɵdirectiveInject(i4.NgControl, 10), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(MAT_SELECT_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(i5.LiveAnnouncer), i0.ɵɵdirectiveInject(MAT_SELECT_CONFIG, 8));\n};\n_MatSelectBase.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: _MatSelectBase,\n  viewQuery: function _MatSelectBase_Query(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵviewQuery(_c0, 5);\n      i0.ɵɵviewQuery(_c1, 5);\n      i0.ɵɵviewQuery(CdkConnectedOverlay, 5);\n    }\n    if (rf & 2) {\n      let _t;\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.trigger = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panel = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._overlayDir = _t.first);\n    }\n  },\n  inputs: {\n    userAriaDescribedBy: [i0.ɵɵInputFlags.None, \"aria-describedby\", \"userAriaDescribedBy\"],\n    panelClass: \"panelClass\",\n    placeholder: \"placeholder\",\n    required: \"required\",\n    multiple: \"multiple\",\n    disableOptionCentering: \"disableOptionCentering\",\n    compareWith: \"compareWith\",\n    value: \"value\",\n    ariaLabel: [i0.ɵɵInputFlags.None, \"aria-label\", \"ariaLabel\"],\n    ariaLabelledby: [i0.ɵɵInputFlags.None, \"aria-labelledby\", \"ariaLabelledby\"],\n    errorStateMatcher: \"errorStateMatcher\",\n    typeaheadDebounceInterval: \"typeaheadDebounceInterval\",\n    sortComparator: \"sortComparator\",\n    id: \"id\"\n  },\n  outputs: {\n    openedChange: \"openedChange\",\n    _openedStream: \"opened\",\n    _closedStream: \"closed\",\n    selectionChange: \"selectionChange\",\n    valueChange: \"valueChange\"\n  },\n  features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n});\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(_MatSelectBase, [{\n    type: Directive\n  }], function () {\n    return [{\n      type: i1.ViewportRuler\n    }, {\n      type: i0.ChangeDetectorRef\n    }, {\n      type: i0.NgZone\n    }, {\n      type: i2.ErrorStateMatcher\n    }, {\n      type: i0.ElementRef\n    }, {\n      type: i3.Directionality,\n      decorators: [{\n        type: Optional\n      }]\n    }, {\n      type: i4.NgForm,\n      decorators: [{\n        type: Optional\n      }]\n    }, {\n      type: i4.FormGroupDirective,\n      decorators: [{\n        type: Optional\n      }]\n    }, {\n      type: i6.MatFormField,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [MAT_FORM_FIELD]\n      }]\n    }, {\n      type: i4.NgControl,\n      decorators: [{\n        type: Self\n      }, {\n        type: Optional\n      }]\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Attribute,\n        args: ['tabindex']\n      }]\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [MAT_SELECT_SCROLL_STRATEGY]\n      }]\n    }, {\n      type: i5.LiveAnnouncer\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Optional\n      }, {\n        type: Inject,\n        args: [MAT_SELECT_CONFIG]\n      }]\n    }];\n  }, {\n    userAriaDescribedBy: [{\n      type: Input,\n      args: ['aria-describedby']\n    }],\n    trigger: [{\n      type: ViewChild,\n      args: ['trigger']\n    }],\n    panel: [{\n      type: ViewChild,\n      args: ['panel']\n    }],\n    _overlayDir: [{\n      type: ViewChild,\n      args: [CdkConnectedOverlay]\n    }],\n    panelClass: [{\n      type: Input\n    }],\n    placeholder: [{\n      type: Input\n    }],\n    required: [{\n      type: Input\n    }],\n    multiple: [{\n      type: Input\n    }],\n    disableOptionCentering: [{\n      type: Input\n    }],\n    compareWith: [{\n      type: Input\n    }],\n    value: [{\n      type: Input\n    }],\n    ariaLabel: [{\n      type: Input,\n      args: ['aria-label']\n    }],\n    ariaLabelledby: [{\n      type: Input,\n      args: ['aria-labelledby']\n    }],\n    errorStateMatcher: [{\n      type: Input\n    }],\n    typeaheadDebounceInterval: [{\n      type: Input\n    }],\n    sortComparator: [{\n      type: Input\n    }],\n    id: [{\n      type: Input\n    }],\n    openedChange: [{\n      type: Output\n    }],\n    _openedStream: [{\n      type: Output,\n      args: ['opened']\n    }],\n    _closedStream: [{\n      type: Output,\n      args: ['closed']\n    }],\n    selectionChange: [{\n      type: Output\n    }],\n    valueChange: [{\n      type: Output\n    }]\n  });\n})();\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nclass MatSelectTrigger {}\nMatSelectTrigger.ɵfac = function MatSelectTrigger_Factory(t) {\n  return new (t || MatSelectTrigger)();\n};\nMatSelectTrigger.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n  type: MatSelectTrigger,\n  selectors: [[\"mat-select-trigger\"]],\n  features: [i0.ɵɵProvidersFeature([{\n    provide: MAT_SELECT_TRIGGER,\n    useExisting: MatSelectTrigger\n  }])]\n});\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSelectTrigger, [{\n    type: Directive,\n    args: [{\n      selector: 'mat-select-trigger',\n      providers: [{\n        provide: MAT_SELECT_TRIGGER,\n        useExisting: MatSelectTrigger\n      }]\n    }]\n  }], null, null);\n})();\nclass MatSelect extends _MatSelectBase {\n  constructor() {\n    super(...arguments);\n    this._positions = [{\n      originX: 'start',\n      originY: 'bottom',\n      overlayX: 'start',\n      overlayY: 'top'\n    }, {\n      originX: 'start',\n      originY: 'top',\n      overlayX: 'start',\n      overlayY: 'bottom',\n      panelClass: 'mat-mdc-select-panel-above'\n    }];\n    this._hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n  }\n  get shouldLabelFloat() {\n    // Since the panel doesn't overlap the trigger, we\n    // want the label to only float when there's a value.\n    return this.panelOpen || !this.empty || this.focused && !!this.placeholder;\n  }\n  ngOnInit() {\n    super.ngOnInit();\n    this._viewportRuler.change().pipe(takeUntil(this._destroy)).subscribe(() => {\n      if (this.panelOpen) {\n        this._overlayWidth = this._getOverlayWidth();\n        this._changeDetectorRef.detectChanges();\n      }\n    });\n  }\n  ngAfterViewInit() {\n    // Note that it's important that we read this in `ngAfterViewInit`, because\n    // reading it earlier will cause the form field to return a different element.\n    if (this._parentFormField) {\n      this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n    }\n  }\n  open() {\n    this._overlayWidth = this._getOverlayWidth();\n    super.open();\n    // Required for the MDC form field to pick up when the overlay has been opened.\n    this.stateChanges.next();\n  }\n  close() {\n    super.close();\n    // Required for the MDC form field to pick up when the overlay has been closed.\n    this.stateChanges.next();\n  }\n  /** Scrolls the active option into view. */\n  _scrollOptionIntoView(index) {\n    const option = this.options.toArray()[index];\n    if (option) {\n      const panel = this.panel.nativeElement;\n      const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n      const element = option._getHostElement();\n      if (index === 0 && labelCount === 1) {\n        // If we've got one group label before the option and we're at the top option,\n        // scroll the list to the top. This is better UX than scrolling the list to the\n        // top of the option, because it allows the user to read the top group's label.\n        panel.scrollTop = 0;\n      } else {\n        panel.scrollTop = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, panel.scrollTop, panel.offsetHeight);\n      }\n    }\n  }\n  _positioningSettled() {\n    this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n  }\n  _getChangeEvent(value) {\n    return new MatSelectChange(this, value);\n  }\n  /** Gets how wide the overlay panel should be. */\n  _getOverlayWidth() {\n    const refToMeasure = this._preferredOverlayOrigin instanceof CdkOverlayOrigin ? this._preferredOverlayOrigin.elementRef : this._preferredOverlayOrigin || this._elementRef;\n    return refToMeasure.nativeElement.getBoundingClientRect().width;\n  }\n  /** Whether checkmark indicator for single-selection options is hidden. */\n  get hideSingleSelectionIndicator() {\n    return this._hideSingleSelectionIndicator;\n  }\n  set hideSingleSelectionIndicator(value) {\n    this._hideSingleSelectionIndicator = coerceBooleanProperty(value);\n    this._syncParentProperties();\n  }\n  /** Syncs the parent state with the individual options. */\n  _syncParentProperties() {\n    if (this.options) {\n      for (const option of this.options) {\n        option._changeDetectorRef.markForCheck();\n      }\n    }\n  }\n}\nMatSelect.ɵfac = /* @__PURE__ */(() => {\n  let ɵMatSelect_BaseFactory;\n  return function MatSelect_Factory(t) {\n    return (ɵMatSelect_BaseFactory || (ɵMatSelect_BaseFactory = i0.ɵɵgetInheritedFactory(MatSelect)))(t || MatSelect);\n  };\n})();\nMatSelect.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: MatSelect,\n  selectors: [[\"mat-select\"]],\n  contentQueries: function MatSelect_ContentQueries(rf, ctx, dirIndex) {\n    if (rf & 1) {\n      i0.ɵɵcontentQuery(dirIndex, MAT_SELECT_TRIGGER, 5);\n      i0.ɵɵcontentQuery(dirIndex, MatOption, 5);\n      i0.ɵɵcontentQuery(dirIndex, MAT_OPTGROUP, 5);\n    }\n    if (rf & 2) {\n      let _t;\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customTrigger = _t.first);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.options = _t);\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.optionGroups = _t);\n    }\n  },\n  hostAttrs: [\"role\", \"combobox\", \"aria-autocomplete\", \"none\", \"aria-haspopup\", \"listbox\", 1, \"mat-mdc-select\"],\n  hostVars: 19,\n  hostBindings: function MatSelect_HostBindings(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵlistener(\"keydown\", function MatSelect_keydown_HostBindingHandler($event) {\n        return ctx._handleKeydown($event);\n      })(\"focus\", function MatSelect_focus_HostBindingHandler() {\n        return ctx._onFocus();\n      })(\"blur\", function MatSelect_blur_HostBindingHandler() {\n        return ctx._onBlur();\n      });\n    }\n    if (rf & 2) {\n      i0.ɵɵattribute(\"id\", ctx.id)(\"tabindex\", ctx.tabIndex)(\"aria-controls\", ctx.panelOpen ? ctx.id + \"-panel\" : null)(\"aria-expanded\", ctx.panelOpen)(\"aria-label\", ctx.ariaLabel || null)(\"aria-required\", ctx.required.toString())(\"aria-disabled\", ctx.disabled.toString())(\"aria-invalid\", ctx.errorState)(\"aria-activedescendant\", ctx._getAriaActiveDescendant());\n      i0.ɵɵclassProp(\"mat-mdc-select-disabled\", ctx.disabled)(\"mat-mdc-select-invalid\", ctx.errorState)(\"mat-mdc-select-required\", ctx.required)(\"mat-mdc-select-empty\", ctx.empty)(\"mat-mdc-select-multiple\", ctx.multiple);\n    }\n  },\n  inputs: {\n    disabled: \"disabled\",\n    disableRipple: \"disableRipple\",\n    tabIndex: \"tabIndex\",\n    hideSingleSelectionIndicator: \"hideSingleSelectionIndicator\"\n  },\n  exportAs: [\"matSelect\"],\n  features: [i0.ɵɵProvidersFeature([{\n    provide: MatFormFieldControl,\n    useExisting: MatSelect\n  }, {\n    provide: MAT_OPTION_PARENT_COMPONENT,\n    useExisting: MatSelect\n  }]), i0.ɵɵInheritDefinitionFeature],\n  ngContentSelectors: _c3,\n  decls: 11,\n  vars: 11,\n  consts: [[\"fallbackOverlayOrigin\", \"cdkOverlayOrigin\", \"trigger\", \"\"], [\"panel\", \"\"], [\"cdk-overlay-origin\", \"\", 1, \"mat-mdc-select-trigger\", 3, \"click\"], [1, \"mat-mdc-select-value\", 3, \"ngSwitch\"], [\"class\", \"mat-mdc-select-placeholder mat-mdc-select-min-line\", 4, \"ngSwitchCase\"], [\"class\", \"mat-mdc-select-value-text\", 3, \"ngSwitch\", 4, \"ngSwitchCase\"], [1, \"mat-mdc-select-arrow-wrapper\"], [1, \"mat-mdc-select-arrow\"], [\"viewBox\", \"0 0 24 24\", \"width\", \"24px\", \"height\", \"24px\", \"focusable\", \"false\"], [\"d\", \"M7 10l5 5 5-5z\"], [\"cdk-connected-overlay\", \"\", \"cdkConnectedOverlayLockPosition\", \"\", \"cdkConnectedOverlayHasBackdrop\", \"\", \"cdkConnectedOverlayBackdropClass\", \"cdk-overlay-transparent-backdrop\", 3, \"backdropClick\", \"attach\", \"detach\", \"cdkConnectedOverlayPanelClass\", \"cdkConnectedOverlayScrollStrategy\", \"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayPositions\", \"cdkConnectedOverlayWidth\"], [1, \"mat-mdc-select-placeholder\", \"mat-mdc-select-min-line\"], [1, \"mat-mdc-select-value-text\", 3, \"ngSwitch\"], [\"class\", \"mat-mdc-select-min-line\", 4, \"ngSwitchDefault\"], [4, \"ngSwitchCase\"], [1, \"mat-mdc-select-min-line\"], [\"role\", \"listbox\", \"tabindex\", \"-1\", 3, \"keydown\", \"ngClass\"]],\n  template: function MatSelect_Template(rf, ctx) {\n    if (rf & 1) {\n      const _r1 = i0.ɵɵgetCurrentView();\n      i0.ɵɵprojectionDef(_c2);\n      i0.ɵɵelementStart(0, \"div\", 2, 0);\n      i0.ɵɵlistener(\"click\", function MatSelect_Template_div_click_0_listener() {\n        i0.ɵɵrestoreView(_r1);\n        return i0.ɵɵresetView(ctx.toggle());\n      });\n      i0.ɵɵelementStart(3, \"div\", 3);\n      i0.ɵɵtemplate(4, MatSelect_span_4_Template, 2, 1, \"span\", 4)(5, MatSelect_span_5_Template, 3, 2, \"span\", 5);\n      i0.ɵɵelementEnd();\n      i0.ɵɵelementStart(6, \"div\", 6)(7, \"div\", 7);\n      i0.ɵɵnamespaceSVG();\n      i0.ɵɵelementStart(8, \"svg\", 8);\n      i0.ɵɵelement(9, \"path\", 9);\n      i0.ɵɵelementEnd()()()();\n      i0.ɵɵtemplate(10, MatSelect_ng_template_10_Template, 3, 9, \"ng-template\", 10);\n      i0.ɵɵlistener(\"backdropClick\", function MatSelect_Template_ng_template_backdropClick_10_listener() {\n        i0.ɵɵrestoreView(_r1);\n        return i0.ɵɵresetView(ctx.close());\n      })(\"attach\", function MatSelect_Template_ng_template_attach_10_listener() {\n        i0.ɵɵrestoreView(_r1);\n        return i0.ɵɵresetView(ctx._onAttached());\n      })(\"detach\", function MatSelect_Template_ng_template_detach_10_listener() {\n        i0.ɵɵrestoreView(_r1);\n        return i0.ɵɵresetView(ctx.close());\n      });\n    }\n    if (rf & 2) {\n      const fallbackOverlayOrigin_r4 = i0.ɵɵreference(1);\n      i0.ɵɵattribute(\"aria-owns\", ctx.panelOpen ? ctx.id + \"-panel\" : null);\n      i0.ɵɵadvance(3);\n      i0.ɵɵproperty(\"ngSwitch\", ctx.empty);\n      i0.ɵɵattribute(\"id\", ctx._valueId);\n      i0.ɵɵadvance();\n      i0.ɵɵproperty(\"ngSwitchCase\", true);\n      i0.ɵɵadvance();\n      i0.ɵɵproperty(\"ngSwitchCase\", false);\n      i0.ɵɵadvance(5);\n      i0.ɵɵproperty(\"cdkConnectedOverlayPanelClass\", ctx._overlayPanelClass)(\"cdkConnectedOverlayScrollStrategy\", ctx._scrollStrategy)(\"cdkConnectedOverlayOrigin\", ctx._preferredOverlayOrigin || fallbackOverlayOrigin_r4)(\"cdkConnectedOverlayOpen\", ctx.panelOpen)(\"cdkConnectedOverlayPositions\", ctx._positions)(\"cdkConnectedOverlayWidth\", ctx._overlayWidth);\n    }\n  },\n  dependencies: [i7.NgClass, i7.NgSwitch, i7.NgSwitchCase, i7.NgSwitchDefault, i8.CdkConnectedOverlay, i8.CdkOverlayOrigin],\n  styles: [\".mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}.mat-mdc-select{display:inline-block;width:100%;outline:none}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:translateY(-8px)}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-select-arrow{width:10px;height:5px;position:relative}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}.mdc-menu-surface.mat-mdc-select-panel{width:100%;max-height:275px;position:static;outline:0;margin:0;padding:8px 0;list-style-type:none}.mdc-menu-surface.mat-mdc-select-panel:focus{outline:none}.cdk-high-contrast-active .mdc-menu-surface.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) .mdc-menu-surface.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above .mdc-menu-surface.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"],\n  encapsulation: 2,\n  data: {\n    animation: [matSelectAnimations.transformPanel]\n  },\n  changeDetection: 0\n});\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSelect, [{\n    type: Component,\n    args: [{\n      selector: 'mat-select',\n      exportAs: 'matSelect',\n      inputs: ['disabled', 'disableRipple', 'tabIndex'],\n      encapsulation: ViewEncapsulation.None,\n      changeDetection: ChangeDetectionStrategy.OnPush,\n      host: {\n        'role': 'combobox',\n        'aria-autocomplete': 'none',\n        'aria-haspopup': 'listbox',\n        'class': 'mat-mdc-select',\n        '[attr.id]': 'id',\n        '[attr.tabindex]': 'tabIndex',\n        '[attr.aria-controls]': 'panelOpen ? id + \"-panel\" : null',\n        '[attr.aria-expanded]': 'panelOpen',\n        '[attr.aria-label]': 'ariaLabel || null',\n        '[attr.aria-required]': 'required.toString()',\n        '[attr.aria-disabled]': 'disabled.toString()',\n        '[attr.aria-invalid]': 'errorState',\n        '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n        '[class.mat-mdc-select-disabled]': 'disabled',\n        '[class.mat-mdc-select-invalid]': 'errorState',\n        '[class.mat-mdc-select-required]': 'required',\n        '[class.mat-mdc-select-empty]': 'empty',\n        '[class.mat-mdc-select-multiple]': 'multiple',\n        '(keydown)': '_handleKeydown($event)',\n        '(focus)': '_onFocus()',\n        '(blur)': '_onBlur()'\n      },\n      animations: [matSelectAnimations.transformPanel],\n      providers: [{\n        provide: MatFormFieldControl,\n        useExisting: MatSelect\n      }, {\n        provide: MAT_OPTION_PARENT_COMPONENT,\n        useExisting: MatSelect\n      }],\n      template: \"<!--\\n Note that the select trigger element specifies `aria-owns` pointing to the listbox overlay.\\n While aria-owns is not required for the ARIA 1.2 `role=\\\"combobox\\\"` interaction pattern,\\n it fixes an issue with VoiceOver when the select appears inside of an `aria-model=\\\"true\\\"`\\n element (e.g. a dialog). Without this `aria-owns`, the `aria-modal` on a dialog prevents\\n VoiceOver from \\\"seeing\\\" the select's listbox overlay for aria-activedescendant.\\n Using `aria-owns` re-parents the select overlay so that it works again.\\n See https://github.com/angular/components/issues/20694\\n-->\\n<div cdk-overlay-origin\\n     [attr.aria-owns]=\\\"panelOpen ? id + '-panel' : null\\\"\\n     class=\\\"mat-mdc-select-trigger\\\"\\n     (click)=\\\"toggle()\\\"\\n     #fallbackOverlayOrigin=\\\"cdkOverlayOrigin\\\"\\n     #trigger>\\n  <div class=\\\"mat-mdc-select-value\\\" [ngSwitch]=\\\"empty\\\" [attr.id]=\\\"_valueId\\\">\\n    <span class=\\\"mat-mdc-select-placeholder mat-mdc-select-min-line\\\" *ngSwitchCase=\\\"true\\\">{{placeholder}}</span>\\n    <span class=\\\"mat-mdc-select-value-text\\\" *ngSwitchCase=\\\"false\\\" [ngSwitch]=\\\"!!customTrigger\\\">\\n      <span class=\\\"mat-mdc-select-min-line\\\" *ngSwitchDefault>{{triggerValue}}</span>\\n      <ng-content select=\\\"mat-select-trigger\\\" *ngSwitchCase=\\\"true\\\"></ng-content>\\n    </span>\\n  </div>\\n\\n  <div class=\\\"mat-mdc-select-arrow-wrapper\\\">\\n    <div class=\\\"mat-mdc-select-arrow\\\">\\n      <!-- Use an inline SVG, because it works better than a CSS triangle in high contrast mode. -->\\n      <svg viewBox=\\\"0 0 24 24\\\" width=\\\"24px\\\" height=\\\"24px\\\" focusable=\\\"false\\\">\\n        <path d=\\\"M7 10l5 5 5-5z\\\"/>\\n      </svg>\\n    </div>\\n  </div>\\n</div>\\n\\n<ng-template\\n  cdk-connected-overlay\\n  cdkConnectedOverlayLockPosition\\n  cdkConnectedOverlayHasBackdrop\\n  cdkConnectedOverlayBackdropClass=\\\"cdk-overlay-transparent-backdrop\\\"\\n  [cdkConnectedOverlayPanelClass]=\\\"_overlayPanelClass\\\"\\n  [cdkConnectedOverlayScrollStrategy]=\\\"_scrollStrategy\\\"\\n  [cdkConnectedOverlayOrigin]=\\\"_preferredOverlayOrigin || fallbackOverlayOrigin\\\"\\n  [cdkConnectedOverlayOpen]=\\\"panelOpen\\\"\\n  [cdkConnectedOverlayPositions]=\\\"_positions\\\"\\n  [cdkConnectedOverlayWidth]=\\\"_overlayWidth\\\"\\n  (backdropClick)=\\\"close()\\\"\\n  (attach)=\\\"_onAttached()\\\"\\n  (detach)=\\\"close()\\\">\\n  <div\\n    #panel\\n    role=\\\"listbox\\\"\\n    tabindex=\\\"-1\\\"\\n    class=\\\"mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open {{ _getPanelTheme() }}\\\"\\n    [attr.id]=\\\"id + '-panel'\\\"\\n    [attr.aria-multiselectable]=\\\"multiple\\\"\\n    [attr.aria-label]=\\\"ariaLabel || null\\\"\\n    [attr.aria-labelledby]=\\\"_getPanelAriaLabelledby()\\\"\\n    [ngClass]=\\\"panelClass\\\"\\n    [@transformPanel]=\\\"'showing'\\\"\\n    (@transformPanel.done)=\\\"_panelDoneAnimatingStream.next($event.toState)\\\"\\n    (keydown)=\\\"_handleKeydown($event)\\\">\\n    <ng-content></ng-content>\\n  </div>\\n</ng-template>\\n\",\n      styles: [\".mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}.mat-mdc-select{display:inline-block;width:100%;outline:none}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:translateY(-8px)}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-select-arrow{width:10px;height:5px;position:relative}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}.mdc-menu-surface.mat-mdc-select-panel{width:100%;max-height:275px;position:static;outline:0;margin:0;padding:8px 0;list-style-type:none}.mdc-menu-surface.mat-mdc-select-panel:focus{outline:none}.cdk-high-contrast-active .mdc-menu-surface.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) .mdc-menu-surface.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above .mdc-menu-surface.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"]\n    }]\n  }], null, {\n    options: [{\n      type: ContentChildren,\n      args: [MatOption, {\n        descendants: true\n      }]\n    }],\n    optionGroups: [{\n      type: ContentChildren,\n      args: [MAT_OPTGROUP, {\n        descendants: true\n      }]\n    }],\n    customTrigger: [{\n      type: ContentChild,\n      args: [MAT_SELECT_TRIGGER]\n    }],\n    hideSingleSelectionIndicator: [{\n      type: Input\n    }]\n  });\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSelectModule {}\nMatSelectModule.ɵfac = function MatSelectModule_Factory(t) {\n  return new (t || MatSelectModule)();\n};\nMatSelectModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n  type: MatSelectModule\n});\nMatSelectModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n  providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],\n  imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule, MatFormFieldModule, MatOptionModule, MatCommonModule]\n});\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSelectModule, [{\n    type: NgModule,\n    args: [{\n      imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule],\n      exports: [CdkScrollableModule, MatFormFieldModule, MatSelect, MatSelectTrigger, MatOptionModule, MatCommonModule],\n      declarations: [MatSelect, MatSelectTrigger],\n      providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER]\n    }]\n  }], null, null);\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, _MatSelectBase, matSelectAnimations };","map":{"version":3,"names":["i8","Overlay","CdkConnectedOverlay","CdkOverlayOrigin","OverlayModule","i7","CommonModule","i0","InjectionToken","EventEmitter","Directive","Optional","Inject","Self","Attribute","Input","ViewChild","Output","Component","ViewEncapsulation","ChangeDetectionStrategy","ContentChildren","ContentChild","NgModule","i2","mixinDisableRipple","mixinTabIndex","mixinDisabled","mixinErrorState","_countGroupLabelsBeforeOption","_getOptionScrollPosition","MAT_OPTION_PARENT_COMPONENT","MatOption","MAT_OPTGROUP","MatOptionModule","MatCommonModule","i6","MAT_FORM_FIELD","MatFormFieldControl","MatFormFieldModule","i1","CdkScrollableModule","i5","ActiveDescendantKeyManager","i3","coerceBooleanProperty","coerceNumberProperty","SelectionModel","DOWN_ARROW","UP_ARROW","LEFT_ARROW","RIGHT_ARROW","ENTER","SPACE","hasModifierKey","A","i4","Validators","Subject","defer","merge","startWith","switchMap","take","filter","map","distinctUntilChanged","takeUntil","trigger","transition","query","animateChild","state","style","animate","_c0","_c1","_c2","_c3","MatSelect_span_4_Template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ctx_r1","ɵɵnextContext","ɵɵadvance","ɵɵtextInterpolate","placeholder","MatSelect_span_5_span_1_Template","triggerValue","MatSelect_span_5_ng_content_2_Template","ɵɵprojection","MatSelect_span_5_Template","ɵɵtemplate","ɵɵproperty","customTrigger","MatSelect_ng_template_10_Template","_r3","ɵɵgetCurrentView","ɵɵlistener","MatSelect_ng_template_10_Template_div_animation_transformPanel_done_0_listener","$event","ɵɵrestoreView","ɵɵresetView","_panelDoneAnimatingStream","next","toState","MatSelect_ng_template_10_Template_div_keydown_0_listener","_handleKeydown","ɵɵclassMapInterpolate1","_getPanelTheme","panelClass","ɵɵattribute","id","multiple","ariaLabel","_getPanelAriaLabelledby","matSelectAnimations","transformPanelWrap","optional","transformPanel","opacity","transform","getMatSelectDynamicMultipleError","Error","getMatSelectNonArrayValueError","getMatSelectNonFunctionValueError","nextUniqueId","MAT_SELECT_SCROLL_STRATEGY","MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY","overlay","scrollStrategies","reposition","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","provide","deps","useFactory","MAT_SELECT_TRIGGER","MatSelectChange","constructor","source","value","_MatSelectMixinBase","_elementRef","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","ngControl","stateChanges","_MatSelectBase","focused","_focused","_panelOpen","_placeholder","required","_required","control","hasValidator","_multiple","_selectionModel","ngDevMode","disableOptionCentering","_disableOptionCentering","compareWith","_compareWith","fn","_initializeSelection","_value","newValue","hasAssigned","_assignValue","_onChange","typeaheadDebounceInterval","_typeaheadDebounceInterval","_id","_uid","_viewportRuler","_changeDetectorRef","_ngZone","elementRef","_dir","_parentFormField","tabIndex","scrollStrategyFactory","_liveAnnouncer","_defaultOptions","o1","o2","_triggerAriaLabelledBy","_destroy","_onTouched","_valueId","_overlayPanelClass","overlayPanelClass","controlType","optionSelectionChanges","options","changes","pipe","option","onSelectionChange","onStable","openedChange","_openedStream","o","_closedStream","selectionChange","valueChange","valueAccessor","_scrollStrategyFactory","_scrollStrategy","parseInt","ngOnInit","subscribe","_panelDoneAnimating","panelOpen","ngAfterContentInit","_initKeyManager","changed","event","added","forEach","select","removed","deselect","_resetOptions","ngDoCheck","newAriaLabelledby","_getTriggerAriaLabelledby","element","nativeElement","setAttribute","removeAttribute","_previousControl","undefined","disabled","updateErrorState","ngOnChanges","_keyManager","withTypeAhead","ngOnDestroy","destroy","complete","toggle","close","open","_canOpen","withHorizontalOrientation","_highlightCorrectOption","markForCheck","_isRtl","writeValue","registerOnChange","registerOnTouched","setDisabledState","isDisabled","selected","empty","selectedOptions","viewValue","reverse","join","_handleOpenKeydown","_handleClosedKeydown","keyCode","isArrowKey","isOpenKey","manager","isTyping","altKey","preventDefault","previouslySelectedOption","onKeydown","selectedOption","announce","activeItem","_selectViaInteraction","ctrlKey","hasDeselectedOptions","some","opt","previouslyFocusedIndex","activeItemIndex","shiftKey","_onFocus","_onBlur","cancelTypeahead","_onAttached","_overlayDir","positionChange","detectChanges","_positioningSettled","color","isEmpty","Promise","resolve","then","_setSelectionByValue","setInactiveStyles","clear","Array","isArray","currentValue","_selectOptionByValue","_sortValues","correspondingOption","updateActiveItem","find","isSelected","error","console","warn","withVerticalOrientation","withHomeAndEnd","withPageUpDown","withAllowedModifierKeys","tabOut","focus","change","panel","_scrollOptionIntoView","changedOrDestroyed","_onSelect","isUserInput","_stateChanges","wasSelected","_propagateChanges","setActiveItem","toArray","sort","a","b","sortComparator","indexOf","fallbackValue","valueToEmit","emit","_getChangeEvent","setFirstItemActive","length","labelId","getLabelId","labelExpression","ariaLabelledby","_getAriaActiveDescendant","isOpen","setDescribedByIds","ids","onContainerClick","shouldLabelFloat","ɵfac","_MatSelectBase_Factory","t","ɵɵdirectiveInject","ViewportRuler","ChangeDetectorRef","NgZone","ErrorStateMatcher","ElementRef","Directionality","NgForm","FormGroupDirective","NgControl","ɵɵinjectAttribute","LiveAnnouncer","ɵdir","ɵɵdefineDirective","type","viewQuery","_MatSelectBase_Query","ɵɵviewQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","first","inputs","userAriaDescribedBy","ɵɵInputFlags","None","errorStateMatcher","outputs","features","ɵɵInheritDefinitionFeature","ɵɵNgOnChangesFeature","ɵsetClassMetadata","decorators","MatFormField","args","MatSelectTrigger","MatSelectTrigger_Factory","selectors","ɵɵProvidersFeature","useExisting","selector","providers","MatSelect","arguments","_positions","originX","originY","overlayX","overlayY","_hideSingleSelectionIndicator","hideSingleSelectionIndicator","_overlayWidth","_getOverlayWidth","ngAfterViewInit","_preferredOverlayOrigin","getConnectedOverlayOrigin","index","labelCount","optionGroups","_getHostElement","scrollTop","offsetTop","offsetHeight","refToMeasure","getBoundingClientRect","width","_syncParentProperties","ɵMatSelect_BaseFactory","MatSelect_Factory","ɵɵgetInheritedFactory","ɵcmp","ɵɵdefineComponent","contentQueries","MatSelect_ContentQueries","dirIndex","ɵɵcontentQuery","hostAttrs","hostVars","hostBindings","MatSelect_HostBindings","MatSelect_keydown_HostBindingHandler","MatSelect_focus_HostBindingHandler","MatSelect_blur_HostBindingHandler","toString","errorState","ɵɵclassProp","disableRipple","exportAs","ngContentSelectors","decls","vars","consts","template","MatSelect_Template","_r1","ɵɵprojectionDef","MatSelect_Template_div_click_0_listener","ɵɵnamespaceSVG","ɵɵelement","MatSelect_Template_ng_template_backdropClick_10_listener","MatSelect_Template_ng_template_attach_10_listener","MatSelect_Template_ng_template_detach_10_listener","fallbackOverlayOrigin_r4","ɵɵreference","dependencies","NgClass","NgSwitch","NgSwitchCase","NgSwitchDefault","styles","encapsulation","data","animation","changeDetection","OnPush","host","animations","descendants","MatSelectModule","MatSelectModule_Factory","ɵmod","ɵɵdefineNgModule","ɵinj","ɵɵdefineInjector","imports","exports","declarations"],"sources":["C:/Users/Cem/Desktop/InventryUI-Client/node_modules/@angular/material/fesm2020/select.mjs"],"sourcesContent":["import * as i8 from '@angular/cdk/overlay';\nimport { Overlay, CdkConnectedOverlay, CdkOverlayOrigin, OverlayModule } from '@angular/cdk/overlay';\nimport * as i7 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, Directive, Optional, Inject, Self, Attribute, Input, ViewChild, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport * as i2 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, mixinDisabled, mixinErrorState, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport * as i6 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/cdk/a11y';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE, hasModifierKey, A } from '@angular/cdk/keycodes';\nimport * as i4 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport { Subject, defer, merge } from 'rxjs';\nimport { startWith, switchMap, take, filter, map, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, query, animateChild, state, style, animate } from '@angular/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nconst matSelectAnimations = {\n    /**\n     * This animation ensures the select's overlay panel animation (transformPanel) is called when\n     * closing the select.\n     * This is needed due to https://github.com/angular/angular/issues/23302\n     */\n    transformPanelWrap: trigger('transformPanelWrap', [\n        transition('* => void', query('@transformPanel', [animateChild()], { optional: true })),\n    ]),\n    /** This animation transforms the select's overlay panel on and off the page. */\n    transformPanel: trigger('transformPanel', [\n        state('void', style({\n            opacity: 0,\n            transform: 'scale(1, 0.8)',\n        })),\n        transition('void => showing', animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n            opacity: 1,\n            transform: 'scale(1, 1)',\n        }))),\n        transition('* => void', animate('100ms linear', style({ opacity: 0 }))),\n    ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Note that these have been copied over verbatim from\n// `material/select` so that we don't have to expose them publicly.\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nfunction getMatSelectDynamicMultipleError() {\n    return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nfunction getMatSelectNonArrayValueError() {\n    return Error('Value must be an array in multiple-selection mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nfunction getMatSelectNonFunctionValueError() {\n    return Error('`compareWith` must be a function.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId = 0;\n/** Injection token that determines the scroll handling while a select is open. */\nconst MAT_SELECT_SCROLL_STRATEGY = new InjectionToken('mat-select-scroll-strategy');\n/** @docs-private */\nfunction MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n    return () => overlay.scrollStrategies.reposition();\n}\n/** Injection token that can be used to provide the default options the select module. */\nconst MAT_SELECT_CONFIG = new InjectionToken('MAT_SELECT_CONFIG');\n/** @docs-private */\nconst MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n    provide: MAT_SELECT_SCROLL_STRATEGY,\n    deps: [Overlay],\n    useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SELECT_TRIGGER = new InjectionToken('MatSelectTrigger');\n/** Change event object that is emitted when the select value has changed. */\nclass MatSelectChange {\n    constructor(\n    /** Reference to the select that emitted the change event. */\n    source, \n    /** Current value of the select that emitted the event. */\n    value) {\n        this.source = source;\n        this.value = value;\n    }\n}\n// Boilerplate for applying mixins to MatSelect.\n/** @docs-private */\nconst _MatSelectMixinBase = mixinDisableRipple(mixinTabIndex(mixinDisabled(mixinErrorState(class {\n    constructor(_elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n    /**\n     * Form control bound to the component.\n     * Implemented as part of `MatFormFieldControl`.\n     * @docs-private\n     */\n    ngControl) {\n        this._elementRef = _elementRef;\n        this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n        this._parentForm = _parentForm;\n        this._parentFormGroup = _parentFormGroup;\n        this.ngControl = ngControl;\n        /**\n         * Emits whenever the component state changes and should cause the parent\n         * form-field to update. Implemented as part of `MatFormFieldControl`.\n         * @docs-private\n         */\n        this.stateChanges = new Subject();\n    }\n}))));\n/** Base class with all of the `MatSelect` functionality. */\nclass _MatSelectBase extends _MatSelectMixinBase {\n    /** Whether the select is focused. */\n    get focused() {\n        return this._focused || this._panelOpen;\n    }\n    /** Placeholder to be shown if no value has been selected. */\n    get placeholder() {\n        return this._placeholder;\n    }\n    set placeholder(value) {\n        this._placeholder = value;\n        this.stateChanges.next();\n    }\n    /** Whether the component is required. */\n    get required() {\n        return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n    }\n    set required(value) {\n        this._required = coerceBooleanProperty(value);\n        this.stateChanges.next();\n    }\n    /** Whether the user should be allowed to select multiple options. */\n    get multiple() {\n        return this._multiple;\n    }\n    set multiple(value) {\n        if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getMatSelectDynamicMultipleError();\n        }\n        this._multiple = coerceBooleanProperty(value);\n    }\n    /** Whether to center the active option over the trigger. */\n    get disableOptionCentering() {\n        return this._disableOptionCentering;\n    }\n    set disableOptionCentering(value) {\n        this._disableOptionCentering = coerceBooleanProperty(value);\n    }\n    /**\n     * Function to compare the option values with the selected values. The first argument\n     * is a value from an option. The second is a value from the selection. A boolean\n     * should be returned.\n     */\n    get compareWith() {\n        return this._compareWith;\n    }\n    set compareWith(fn) {\n        if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw getMatSelectNonFunctionValueError();\n        }\n        this._compareWith = fn;\n        if (this._selectionModel) {\n            // A different comparator means the selection could change.\n            this._initializeSelection();\n        }\n    }\n    /** Value of the select control. */\n    get value() {\n        return this._value;\n    }\n    set value(newValue) {\n        const hasAssigned = this._assignValue(newValue);\n        if (hasAssigned) {\n            this._onChange(newValue);\n        }\n    }\n    /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n    get typeaheadDebounceInterval() {\n        return this._typeaheadDebounceInterval;\n    }\n    set typeaheadDebounceInterval(value) {\n        this._typeaheadDebounceInterval = coerceNumberProperty(value);\n    }\n    /** Unique id of the element. */\n    get id() {\n        return this._id;\n    }\n    set id(value) {\n        this._id = value || this._uid;\n        this.stateChanges.next();\n    }\n    constructor(_viewportRuler, _changeDetectorRef, _ngZone, _defaultErrorStateMatcher, elementRef, _dir, _parentForm, _parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {\n        super(elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n        this._viewportRuler = _viewportRuler;\n        this._changeDetectorRef = _changeDetectorRef;\n        this._ngZone = _ngZone;\n        this._dir = _dir;\n        this._parentFormField = _parentFormField;\n        this._liveAnnouncer = _liveAnnouncer;\n        this._defaultOptions = _defaultOptions;\n        /** Whether or not the overlay panel is open. */\n        this._panelOpen = false;\n        /** Comparison function to specify which option is displayed. Defaults to object equality. */\n        this._compareWith = (o1, o2) => o1 === o2;\n        /** Unique id for this input. */\n        this._uid = `mat-select-${nextUniqueId++}`;\n        /** Current `aria-labelledby` value for the select trigger. */\n        this._triggerAriaLabelledBy = null;\n        /** Emits whenever the component is destroyed. */\n        this._destroy = new Subject();\n        /** `View -> model callback called when value changes` */\n        this._onChange = () => { };\n        /** `View -> model callback called when select has been touched` */\n        this._onTouched = () => { };\n        /** ID for the DOM node containing the select's value. */\n        this._valueId = `mat-select-value-${nextUniqueId++}`;\n        /** Emits when the panel element is finished transforming in. */\n        this._panelDoneAnimatingStream = new Subject();\n        this._overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';\n        this._focused = false;\n        /** A name for this control that can be used by `mat-form-field`. */\n        this.controlType = 'mat-select';\n        this._multiple = false;\n        this._disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;\n        /** Aria label of the select. */\n        this.ariaLabel = '';\n        /** Combined stream of all of the child options' change events. */\n        this.optionSelectionChanges = defer(() => {\n            const options = this.options;\n            if (options) {\n                return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n            }\n            return this._ngZone.onStable.pipe(take(1), switchMap(() => this.optionSelectionChanges));\n        });\n        /** Event emitted when the select panel has been toggled. */\n        this.openedChange = new EventEmitter();\n        /** Event emitted when the select has been opened. */\n        this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n        /** Event emitted when the select has been closed. */\n        this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n        /** Event emitted when the selected value has been changed by the user. */\n        this.selectionChange = new EventEmitter();\n        /**\n         * Event that emits whenever the raw value of the select changes. This is here primarily\n         * to facilitate the two-way binding for the `value` input.\n         * @docs-private\n         */\n        this.valueChange = new EventEmitter();\n        if (this.ngControl) {\n            // Note: we provide the value accessor through here, instead of\n            // the `providers` to avoid running into a circular import.\n            this.ngControl.valueAccessor = this;\n        }\n        // Note that we only want to set this when the defaults pass it in, otherwise it should\n        // stay as `undefined` so that it falls back to the default in the key manager.\n        if (_defaultOptions?.typeaheadDebounceInterval != null) {\n            this._typeaheadDebounceInterval = _defaultOptions.typeaheadDebounceInterval;\n        }\n        this._scrollStrategyFactory = scrollStrategyFactory;\n        this._scrollStrategy = this._scrollStrategyFactory();\n        this.tabIndex = parseInt(tabIndex) || 0;\n        // Force setter to be called in case id was not specified.\n        this.id = this.id;\n    }\n    ngOnInit() {\n        this._selectionModel = new SelectionModel(this.multiple);\n        this.stateChanges.next();\n        // We need `distinctUntilChanged` here, because some browsers will\n        // fire the animation end event twice for the same animation. See:\n        // https://github.com/angular/angular/issues/24084\n        this._panelDoneAnimatingStream\n            .pipe(distinctUntilChanged(), takeUntil(this._destroy))\n            .subscribe(() => this._panelDoneAnimating(this.panelOpen));\n    }\n    ngAfterContentInit() {\n        this._initKeyManager();\n        this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n            event.added.forEach(option => option.select());\n            event.removed.forEach(option => option.deselect());\n        });\n        this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n            this._resetOptions();\n            this._initializeSelection();\n        });\n    }\n    ngDoCheck() {\n        const newAriaLabelledby = this._getTriggerAriaLabelledby();\n        const ngControl = this.ngControl;\n        // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n        // is computed as a result of a content query which can cause this binding to trigger a\n        // \"changed after checked\" error.\n        if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n            const element = this._elementRef.nativeElement;\n            this._triggerAriaLabelledBy = newAriaLabelledby;\n            if (newAriaLabelledby) {\n                element.setAttribute('aria-labelledby', newAriaLabelledby);\n            }\n            else {\n                element.removeAttribute('aria-labelledby');\n            }\n        }\n        if (ngControl) {\n            // The disabled state might go out of sync if the form group is swapped out. See #17860.\n            if (this._previousControl !== ngControl.control) {\n                if (this._previousControl !== undefined &&\n                    ngControl.disabled !== null &&\n                    ngControl.disabled !== this.disabled) {\n                    this.disabled = ngControl.disabled;\n                }\n                this._previousControl = ngControl.control;\n            }\n            this.updateErrorState();\n        }\n    }\n    ngOnChanges(changes) {\n        // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n        // the parent form field know to run change detection when the disabled state changes.\n        if (changes['disabled'] || changes['userAriaDescribedBy']) {\n            this.stateChanges.next();\n        }\n        if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n            this._keyManager.withTypeAhead(this._typeaheadDebounceInterval);\n        }\n    }\n    ngOnDestroy() {\n        this._keyManager?.destroy();\n        this._destroy.next();\n        this._destroy.complete();\n        this.stateChanges.complete();\n    }\n    /** Toggles the overlay panel open or closed. */\n    toggle() {\n        this.panelOpen ? this.close() : this.open();\n    }\n    /** Opens the overlay panel. */\n    open() {\n        if (this._canOpen()) {\n            this._panelOpen = true;\n            this._keyManager.withHorizontalOrientation(null);\n            this._highlightCorrectOption();\n            this._changeDetectorRef.markForCheck();\n        }\n    }\n    /** Closes the overlay panel and focuses the host element. */\n    close() {\n        if (this._panelOpen) {\n            this._panelOpen = false;\n            this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n            this._changeDetectorRef.markForCheck();\n            this._onTouched();\n        }\n    }\n    /**\n     * Sets the select's value. Part of the ControlValueAccessor interface\n     * required to integrate with Angular's core forms API.\n     *\n     * @param value New value to be written to the model.\n     */\n    writeValue(value) {\n        this._assignValue(value);\n    }\n    /**\n     * Saves a callback function to be invoked when the select's value\n     * changes from user input. Part of the ControlValueAccessor interface\n     * required to integrate with Angular's core forms API.\n     *\n     * @param fn Callback to be triggered when the value changes.\n     */\n    registerOnChange(fn) {\n        this._onChange = fn;\n    }\n    /**\n     * Saves a callback function to be invoked when the select is blurred\n     * by the user. Part of the ControlValueAccessor interface required\n     * to integrate with Angular's core forms API.\n     *\n     * @param fn Callback to be triggered when the component has been touched.\n     */\n    registerOnTouched(fn) {\n        this._onTouched = fn;\n    }\n    /**\n     * Disables the select. Part of the ControlValueAccessor interface required\n     * to integrate with Angular's core forms API.\n     *\n     * @param isDisabled Sets whether the component is disabled.\n     */\n    setDisabledState(isDisabled) {\n        this.disabled = isDisabled;\n        this._changeDetectorRef.markForCheck();\n        this.stateChanges.next();\n    }\n    /** Whether or not the overlay panel is open. */\n    get panelOpen() {\n        return this._panelOpen;\n    }\n    /** The currently selected option. */\n    get selected() {\n        return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n    }\n    /** The value displayed in the trigger. */\n    get triggerValue() {\n        if (this.empty) {\n            return '';\n        }\n        if (this._multiple) {\n            const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n            if (this._isRtl()) {\n                selectedOptions.reverse();\n            }\n            // TODO(crisbeto): delimiter should be configurable for proper localization.\n            return selectedOptions.join(', ');\n        }\n        return this._selectionModel.selected[0].viewValue;\n    }\n    /** Whether the element is in RTL mode. */\n    _isRtl() {\n        return this._dir ? this._dir.value === 'rtl' : false;\n    }\n    /** Handles all keydown events on the select. */\n    _handleKeydown(event) {\n        if (!this.disabled) {\n            this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n        }\n    }\n    /** Handles keyboard events while the select is closed. */\n    _handleClosedKeydown(event) {\n        const keyCode = event.keyCode;\n        const isArrowKey = keyCode === DOWN_ARROW ||\n            keyCode === UP_ARROW ||\n            keyCode === LEFT_ARROW ||\n            keyCode === RIGHT_ARROW;\n        const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n        const manager = this._keyManager;\n        // Open the select on ALT + arrow key to match the native <select>\n        if ((!manager.isTyping() && isOpenKey && !hasModifierKey(event)) ||\n            ((this.multiple || event.altKey) && isArrowKey)) {\n            event.preventDefault(); // prevents the page from scrolling down when pressing space\n            this.open();\n        }\n        else if (!this.multiple) {\n            const previouslySelectedOption = this.selected;\n            manager.onKeydown(event);\n            const selectedOption = this.selected;\n            // Since the value has changed, we need to announce it ourselves.\n            if (selectedOption && previouslySelectedOption !== selectedOption) {\n                // We set a duration on the live announcement, because we want the live element to be\n                // cleared after a while so that users can't navigate to it using the arrow keys.\n                this._liveAnnouncer.announce(selectedOption.viewValue, 10000);\n            }\n        }\n    }\n    /** Handles keyboard events when the selected is open. */\n    _handleOpenKeydown(event) {\n        const manager = this._keyManager;\n        const keyCode = event.keyCode;\n        const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n        const isTyping = manager.isTyping();\n        if (isArrowKey && event.altKey) {\n            // Close the select on ALT + arrow key to match the native <select>\n            event.preventDefault();\n            this.close();\n            // Don't do anything in this case if the user is typing,\n            // because the typing sequence can include the space key.\n        }\n        else if (!isTyping &&\n            (keyCode === ENTER || keyCode === SPACE) &&\n            manager.activeItem &&\n            !hasModifierKey(event)) {\n            event.preventDefault();\n            manager.activeItem._selectViaInteraction();\n        }\n        else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n            event.preventDefault();\n            const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n            this.options.forEach(option => {\n                if (!option.disabled) {\n                    hasDeselectedOptions ? option.select() : option.deselect();\n                }\n            });\n        }\n        else {\n            const previouslyFocusedIndex = manager.activeItemIndex;\n            manager.onKeydown(event);\n            if (this._multiple &&\n                isArrowKey &&\n                event.shiftKey &&\n                manager.activeItem &&\n                manager.activeItemIndex !== previouslyFocusedIndex) {\n                manager.activeItem._selectViaInteraction();\n            }\n        }\n    }\n    _onFocus() {\n        if (!this.disabled) {\n            this._focused = true;\n            this.stateChanges.next();\n        }\n    }\n    /**\n     * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n     * \"blur\" to the panel when it opens, causing a false positive.\n     */\n    _onBlur() {\n        this._focused = false;\n        this._keyManager?.cancelTypeahead();\n        if (!this.disabled && !this.panelOpen) {\n            this._onTouched();\n            this._changeDetectorRef.markForCheck();\n            this.stateChanges.next();\n        }\n    }\n    /**\n     * Callback that is invoked when the overlay panel has been attached.\n     */\n    _onAttached() {\n        this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n            this._changeDetectorRef.detectChanges();\n            this._positioningSettled();\n        });\n    }\n    /** Returns the theme to be used on the panel. */\n    _getPanelTheme() {\n        return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n    }\n    /** Whether the select has a value. */\n    get empty() {\n        return !this._selectionModel || this._selectionModel.isEmpty();\n    }\n    _initializeSelection() {\n        // Defer setting the value in order to avoid the \"Expression\n        // has changed after it was checked\" errors from Angular.\n        Promise.resolve().then(() => {\n            if (this.ngControl) {\n                this._value = this.ngControl.value;\n            }\n            this._setSelectionByValue(this._value);\n            this.stateChanges.next();\n        });\n    }\n    /**\n     * Sets the selected option based on a value. If no option can be\n     * found with the designated value, the select trigger is cleared.\n     */\n    _setSelectionByValue(value) {\n        this.options.forEach(option => option.setInactiveStyles());\n        this._selectionModel.clear();\n        if (this.multiple && value) {\n            if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n                throw getMatSelectNonArrayValueError();\n            }\n            value.forEach((currentValue) => this._selectOptionByValue(currentValue));\n            this._sortValues();\n        }\n        else {\n            const correspondingOption = this._selectOptionByValue(value);\n            // Shift focus to the active item. Note that we shouldn't do this in multiple\n            // mode, because we don't know what option the user interacted with last.\n            if (correspondingOption) {\n                this._keyManager.updateActiveItem(correspondingOption);\n            }\n            else if (!this.panelOpen) {\n                // Otherwise reset the highlighted option. Note that we only want to do this while\n                // closed, because doing it while open can shift the user's focus unnecessarily.\n                this._keyManager.updateActiveItem(-1);\n            }\n        }\n        this._changeDetectorRef.markForCheck();\n    }\n    /**\n     * Finds and selects and option based on its value.\n     * @returns Option that has the corresponding value.\n     */\n    _selectOptionByValue(value) {\n        const correspondingOption = this.options.find((option) => {\n            // Skip options that are already in the model. This allows us to handle cases\n            // where the same primitive value is selected multiple times.\n            if (this._selectionModel.isSelected(option)) {\n                return false;\n            }\n            try {\n                // Treat null as a special reset value.\n                return option.value != null && this._compareWith(option.value, value);\n            }\n            catch (error) {\n                if (typeof ngDevMode === 'undefined' || ngDevMode) {\n                    // Notify developers of errors in their comparator.\n                    console.warn(error);\n                }\n                return false;\n            }\n        });\n        if (correspondingOption) {\n            this._selectionModel.select(correspondingOption);\n        }\n        return correspondingOption;\n    }\n    /** Assigns a specific value to the select. Returns whether the value has changed. */\n    _assignValue(newValue) {\n        // Always re-assign an array, because it might have been mutated.\n        if (newValue !== this._value || (this._multiple && Array.isArray(newValue))) {\n            if (this.options) {\n                this._setSelectionByValue(newValue);\n            }\n            this._value = newValue;\n            return true;\n        }\n        return false;\n    }\n    /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n    _initKeyManager() {\n        this._keyManager = new ActiveDescendantKeyManager(this.options)\n            .withTypeAhead(this._typeaheadDebounceInterval)\n            .withVerticalOrientation()\n            .withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr')\n            .withHomeAndEnd()\n            .withPageUpDown()\n            .withAllowedModifierKeys(['shiftKey']);\n        this._keyManager.tabOut.subscribe(() => {\n            if (this.panelOpen) {\n                // Select the active item when tabbing away. This is consistent with how the native\n                // select behaves. Note that we only want to do this in single selection mode.\n                if (!this.multiple && this._keyManager.activeItem) {\n                    this._keyManager.activeItem._selectViaInteraction();\n                }\n                // Restore focus to the trigger before closing. Ensures that the focus\n                // position won't be lost if the user got focus into the overlay.\n                this.focus();\n                this.close();\n            }\n        });\n        this._keyManager.change.subscribe(() => {\n            if (this._panelOpen && this.panel) {\n                this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n            }\n            else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n                this._keyManager.activeItem._selectViaInteraction();\n            }\n        });\n    }\n    /** Drops current option subscriptions and IDs and resets from scratch. */\n    _resetOptions() {\n        const changedOrDestroyed = merge(this.options.changes, this._destroy);\n        this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n            this._onSelect(event.source, event.isUserInput);\n            if (event.isUserInput && !this.multiple && this._panelOpen) {\n                this.close();\n                this.focus();\n            }\n        });\n        // Listen to changes in the internal state of the options and react accordingly.\n        // Handles cases like the labels of the selected options changing.\n        merge(...this.options.map(option => option._stateChanges))\n            .pipe(takeUntil(changedOrDestroyed))\n            .subscribe(() => {\n            // `_stateChanges` can fire as a result of a change in the label's DOM value which may\n            // be the result of an expression changing. We have to use `detectChanges` in order\n            // to avoid \"changed after checked\" errors (see #14793).\n            this._changeDetectorRef.detectChanges();\n            this.stateChanges.next();\n        });\n    }\n    /** Invoked when an option is clicked. */\n    _onSelect(option, isUserInput) {\n        const wasSelected = this._selectionModel.isSelected(option);\n        if (option.value == null && !this._multiple) {\n            option.deselect();\n            this._selectionModel.clear();\n            if (this.value != null) {\n                this._propagateChanges(option.value);\n            }\n        }\n        else {\n            if (wasSelected !== option.selected) {\n                option.selected\n                    ? this._selectionModel.select(option)\n                    : this._selectionModel.deselect(option);\n            }\n            if (isUserInput) {\n                this._keyManager.setActiveItem(option);\n            }\n            if (this.multiple) {\n                this._sortValues();\n                if (isUserInput) {\n                    // In case the user selected the option with their mouse, we\n                    // want to restore focus back to the trigger, in order to\n                    // prevent the select keyboard controls from clashing with\n                    // the ones from `mat-option`.\n                    this.focus();\n                }\n            }\n        }\n        if (wasSelected !== this._selectionModel.isSelected(option)) {\n            this._propagateChanges();\n        }\n        this.stateChanges.next();\n    }\n    /** Sorts the selected values in the selected based on their order in the panel. */\n    _sortValues() {\n        if (this.multiple) {\n            const options = this.options.toArray();\n            this._selectionModel.sort((a, b) => {\n                return this.sortComparator\n                    ? this.sortComparator(a, b, options)\n                    : options.indexOf(a) - options.indexOf(b);\n            });\n            this.stateChanges.next();\n        }\n    }\n    /** Emits change event to set the model value. */\n    _propagateChanges(fallbackValue) {\n        let valueToEmit = null;\n        if (this.multiple) {\n            valueToEmit = this.selected.map(option => option.value);\n        }\n        else {\n            valueToEmit = this.selected ? this.selected.value : fallbackValue;\n        }\n        this._value = valueToEmit;\n        this.valueChange.emit(valueToEmit);\n        this._onChange(valueToEmit);\n        this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n        this._changeDetectorRef.markForCheck();\n    }\n    /**\n     * Highlights the selected item. If no option is selected, it will highlight\n     * the first item instead.\n     */\n    _highlightCorrectOption() {\n        if (this._keyManager) {\n            if (this.empty) {\n                this._keyManager.setFirstItemActive();\n            }\n            else {\n                this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n            }\n        }\n    }\n    /** Whether the panel is allowed to open. */\n    _canOpen() {\n        return !this._panelOpen && !this.disabled && this.options?.length > 0;\n    }\n    /** Focuses the select element. */\n    focus(options) {\n        this._elementRef.nativeElement.focus(options);\n    }\n    /** Gets the aria-labelledby for the select panel. */\n    _getPanelAriaLabelledby() {\n        if (this.ariaLabel) {\n            return null;\n        }\n        const labelId = this._parentFormField?.getLabelId();\n        const labelExpression = labelId ? labelId + ' ' : '';\n        return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n    }\n    /** Determines the `aria-activedescendant` to be set on the host. */\n    _getAriaActiveDescendant() {\n        if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n            return this._keyManager.activeItem.id;\n        }\n        return null;\n    }\n    /** Gets the aria-labelledby of the select component trigger. */\n    _getTriggerAriaLabelledby() {\n        if (this.ariaLabel) {\n            return null;\n        }\n        const labelId = this._parentFormField?.getLabelId();\n        let value = (labelId ? labelId + ' ' : '') + this._valueId;\n        if (this.ariaLabelledby) {\n            value += ' ' + this.ariaLabelledby;\n        }\n        return value;\n    }\n    /** Called when the overlay panel is done animating. */\n    _panelDoneAnimating(isOpen) {\n        this.openedChange.emit(isOpen);\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    setDescribedByIds(ids) {\n        if (ids.length) {\n            this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n        }\n        else {\n            this._elementRef.nativeElement.removeAttribute('aria-describedby');\n        }\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    onContainerClick() {\n        this.focus();\n        this.open();\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get shouldLabelFloat() {\n        return this._panelOpen || !this.empty || (this._focused && !!this._placeholder);\n    }\n}\n_MatSelectBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: _MatSelectBase, deps: [{ token: i1.ViewportRuler }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i2.ErrorStateMatcher }, { token: i0.ElementRef }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: MAT_FORM_FIELD, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: 'tabindex', attribute: true }, { token: MAT_SELECT_SCROLL_STRATEGY }, { token: i5.LiveAnnouncer }, { token: MAT_SELECT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\n_MatSelectBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: _MatSelectBase, inputs: { userAriaDescribedBy: [\"aria-describedby\", \"userAriaDescribedBy\"], panelClass: \"panelClass\", placeholder: \"placeholder\", required: \"required\", multiple: \"multiple\", disableOptionCentering: \"disableOptionCentering\", compareWith: \"compareWith\", value: \"value\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], errorStateMatcher: \"errorStateMatcher\", typeaheadDebounceInterval: \"typeaheadDebounceInterval\", sortComparator: \"sortComparator\", id: \"id\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", _closedStream: \"closed\", selectionChange: \"selectionChange\", valueChange: \"valueChange\" }, viewQueries: [{ propertyName: \"trigger\", first: true, predicate: [\"trigger\"], descendants: true }, { propertyName: \"panel\", first: true, predicate: [\"panel\"], descendants: true }, { propertyName: \"_overlayDir\", first: true, predicate: CdkConnectedOverlay, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: _MatSelectBase, decorators: [{\n            type: Directive\n        }], ctorParameters: function () { return [{ type: i1.ViewportRuler }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i2.ErrorStateMatcher }, { type: i0.ElementRef }, { type: i3.Directionality, decorators: [{\n                    type: Optional\n                }] }, { type: i4.NgForm, decorators: [{\n                    type: Optional\n                }] }, { type: i4.FormGroupDirective, decorators: [{\n                    type: Optional\n                }] }, { type: i6.MatFormField, decorators: [{\n                    type: Optional\n                }, {\n                    type: Inject,\n                    args: [MAT_FORM_FIELD]\n                }] }, { type: i4.NgControl, decorators: [{\n                    type: Self\n                }, {\n                    type: Optional\n                }] }, { type: undefined, decorators: [{\n                    type: Attribute,\n                    args: ['tabindex']\n                }] }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [MAT_SELECT_SCROLL_STRATEGY]\n                }] }, { type: i5.LiveAnnouncer }, { type: undefined, decorators: [{\n                    type: Optional\n                }, {\n                    type: Inject,\n                    args: [MAT_SELECT_CONFIG]\n                }] }]; }, propDecorators: { userAriaDescribedBy: [{\n                type: Input,\n                args: ['aria-describedby']\n            }], trigger: [{\n                type: ViewChild,\n                args: ['trigger']\n            }], panel: [{\n                type: ViewChild,\n                args: ['panel']\n            }], _overlayDir: [{\n                type: ViewChild,\n                args: [CdkConnectedOverlay]\n            }], panelClass: [{\n                type: Input\n            }], placeholder: [{\n                type: Input\n            }], required: [{\n                type: Input\n            }], multiple: [{\n                type: Input\n            }], disableOptionCentering: [{\n                type: Input\n            }], compareWith: [{\n                type: Input\n            }], value: [{\n                type: Input\n            }], ariaLabel: [{\n                type: Input,\n                args: ['aria-label']\n            }], ariaLabelledby: [{\n                type: Input,\n                args: ['aria-labelledby']\n            }], errorStateMatcher: [{\n                type: Input\n            }], typeaheadDebounceInterval: [{\n                type: Input\n            }], sortComparator: [{\n                type: Input\n            }], id: [{\n                type: Input\n            }], openedChange: [{\n                type: Output\n            }], _openedStream: [{\n                type: Output,\n                args: ['opened']\n            }], _closedStream: [{\n                type: Output,\n                args: ['closed']\n            }], selectionChange: [{\n                type: Output\n            }], valueChange: [{\n                type: Output\n            }] } });\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nclass MatSelectTrigger {\n}\nMatSelectTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatSelectTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatSelectTrigger, selector: \"mat-select-trigger\", providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelectTrigger, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'mat-select-trigger',\n                    providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }],\n                }]\n        }] });\nclass MatSelect extends _MatSelectBase {\n    constructor() {\n        super(...arguments);\n        this._positions = [\n            {\n                originX: 'start',\n                originY: 'bottom',\n                overlayX: 'start',\n                overlayY: 'top',\n            },\n            {\n                originX: 'start',\n                originY: 'top',\n                overlayX: 'start',\n                overlayY: 'bottom',\n                panelClass: 'mat-mdc-select-panel-above',\n            },\n        ];\n        this._hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n    }\n    get shouldLabelFloat() {\n        // Since the panel doesn't overlap the trigger, we\n        // want the label to only float when there's a value.\n        return this.panelOpen || !this.empty || (this.focused && !!this.placeholder);\n    }\n    ngOnInit() {\n        super.ngOnInit();\n        this._viewportRuler\n            .change()\n            .pipe(takeUntil(this._destroy))\n            .subscribe(() => {\n            if (this.panelOpen) {\n                this._overlayWidth = this._getOverlayWidth();\n                this._changeDetectorRef.detectChanges();\n            }\n        });\n    }\n    ngAfterViewInit() {\n        // Note that it's important that we read this in `ngAfterViewInit`, because\n        // reading it earlier will cause the form field to return a different element.\n        if (this._parentFormField) {\n            this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n        }\n    }\n    open() {\n        this._overlayWidth = this._getOverlayWidth();\n        super.open();\n        // Required for the MDC form field to pick up when the overlay has been opened.\n        this.stateChanges.next();\n    }\n    close() {\n        super.close();\n        // Required for the MDC form field to pick up when the overlay has been closed.\n        this.stateChanges.next();\n    }\n    /** Scrolls the active option into view. */\n    _scrollOptionIntoView(index) {\n        const option = this.options.toArray()[index];\n        if (option) {\n            const panel = this.panel.nativeElement;\n            const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n            const element = option._getHostElement();\n            if (index === 0 && labelCount === 1) {\n                // If we've got one group label before the option and we're at the top option,\n                // scroll the list to the top. This is better UX than scrolling the list to the\n                // top of the option, because it allows the user to read the top group's label.\n                panel.scrollTop = 0;\n            }\n            else {\n                panel.scrollTop = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, panel.scrollTop, panel.offsetHeight);\n            }\n        }\n    }\n    _positioningSettled() {\n        this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n    }\n    _getChangeEvent(value) {\n        return new MatSelectChange(this, value);\n    }\n    /** Gets how wide the overlay panel should be. */\n    _getOverlayWidth() {\n        const refToMeasure = this._preferredOverlayOrigin instanceof CdkOverlayOrigin\n            ? this._preferredOverlayOrigin.elementRef\n            : this._preferredOverlayOrigin || this._elementRef;\n        return refToMeasure.nativeElement.getBoundingClientRect().width;\n    }\n    /** Whether checkmark indicator for single-selection options is hidden. */\n    get hideSingleSelectionIndicator() {\n        return this._hideSingleSelectionIndicator;\n    }\n    set hideSingleSelectionIndicator(value) {\n        this._hideSingleSelectionIndicator = coerceBooleanProperty(value);\n        this._syncParentProperties();\n    }\n    /** Syncs the parent state with the individual options. */\n    _syncParentProperties() {\n        if (this.options) {\n            for (const option of this.options) {\n                option._changeDetectorRef.markForCheck();\n            }\n        }\n    }\n}\nMatSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelect, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", type: MatSelect, selector: \"mat-select\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\", hideSingleSelectionIndicator: \"hideSingleSelectionIndicator\" }, host: { attributes: { \"role\": \"combobox\", \"aria-autocomplete\": \"none\", \"aria-haspopup\": \"listbox\" }, listeners: { \"keydown\": \"_handleKeydown($event)\", \"focus\": \"_onFocus()\", \"blur\": \"_onBlur()\" }, properties: { \"attr.id\": \"id\", \"attr.tabindex\": \"tabIndex\", \"attr.aria-controls\": \"panelOpen ? id + \\\"-panel\\\" : null\", \"attr.aria-expanded\": \"panelOpen\", \"attr.aria-label\": \"ariaLabel || null\", \"attr.aria-required\": \"required.toString()\", \"attr.aria-disabled\": \"disabled.toString()\", \"attr.aria-invalid\": \"errorState\", \"attr.aria-activedescendant\": \"_getAriaActiveDescendant()\", \"class.mat-mdc-select-disabled\": \"disabled\", \"class.mat-mdc-select-invalid\": \"errorState\", \"class.mat-mdc-select-required\": \"required\", \"class.mat-mdc-select-empty\": \"empty\", \"class.mat-mdc-select-multiple\": \"multiple\" }, classAttribute: \"mat-mdc-select\" }, providers: [\n        { provide: MatFormFieldControl, useExisting: MatSelect },\n        { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect },\n    ], queries: [{ propertyName: \"customTrigger\", first: true, predicate: MAT_SELECT_TRIGGER, descendants: true }, { propertyName: \"options\", predicate: MatOption, descendants: true }, { propertyName: \"optionGroups\", predicate: MAT_OPTGROUP, descendants: true }], exportAs: [\"matSelect\"], usesInheritance: true, ngImport: i0, template: \"<!--\\n Note that the select trigger element specifies `aria-owns` pointing to the listbox overlay.\\n While aria-owns is not required for the ARIA 1.2 `role=\\\"combobox\\\"` interaction pattern,\\n it fixes an issue with VoiceOver when the select appears inside of an `aria-model=\\\"true\\\"`\\n element (e.g. a dialog). Without this `aria-owns`, the `aria-modal` on a dialog prevents\\n VoiceOver from \\\"seeing\\\" the select's listbox overlay for aria-activedescendant.\\n Using `aria-owns` re-parents the select overlay so that it works again.\\n See https://github.com/angular/components/issues/20694\\n-->\\n<div cdk-overlay-origin\\n     [attr.aria-owns]=\\\"panelOpen ? id + '-panel' : null\\\"\\n     class=\\\"mat-mdc-select-trigger\\\"\\n     (click)=\\\"toggle()\\\"\\n     #fallbackOverlayOrigin=\\\"cdkOverlayOrigin\\\"\\n     #trigger>\\n  <div class=\\\"mat-mdc-select-value\\\" [ngSwitch]=\\\"empty\\\" [attr.id]=\\\"_valueId\\\">\\n    <span class=\\\"mat-mdc-select-placeholder mat-mdc-select-min-line\\\" *ngSwitchCase=\\\"true\\\">{{placeholder}}</span>\\n    <span class=\\\"mat-mdc-select-value-text\\\" *ngSwitchCase=\\\"false\\\" [ngSwitch]=\\\"!!customTrigger\\\">\\n      <span class=\\\"mat-mdc-select-min-line\\\" *ngSwitchDefault>{{triggerValue}}</span>\\n      <ng-content select=\\\"mat-select-trigger\\\" *ngSwitchCase=\\\"true\\\"></ng-content>\\n    </span>\\n  </div>\\n\\n  <div class=\\\"mat-mdc-select-arrow-wrapper\\\">\\n    <div class=\\\"mat-mdc-select-arrow\\\">\\n      <!-- Use an inline SVG, because it works better than a CSS triangle in high contrast mode. -->\\n      <svg viewBox=\\\"0 0 24 24\\\" width=\\\"24px\\\" height=\\\"24px\\\" focusable=\\\"false\\\">\\n        <path d=\\\"M7 10l5 5 5-5z\\\"/>\\n      </svg>\\n    </div>\\n  </div>\\n</div>\\n\\n<ng-template\\n  cdk-connected-overlay\\n  cdkConnectedOverlayLockPosition\\n  cdkConnectedOverlayHasBackdrop\\n  cdkConnectedOverlayBackdropClass=\\\"cdk-overlay-transparent-backdrop\\\"\\n  [cdkConnectedOverlayPanelClass]=\\\"_overlayPanelClass\\\"\\n  [cdkConnectedOverlayScrollStrategy]=\\\"_scrollStrategy\\\"\\n  [cdkConnectedOverlayOrigin]=\\\"_preferredOverlayOrigin || fallbackOverlayOrigin\\\"\\n  [cdkConnectedOverlayOpen]=\\\"panelOpen\\\"\\n  [cdkConnectedOverlayPositions]=\\\"_positions\\\"\\n  [cdkConnectedOverlayWidth]=\\\"_overlayWidth\\\"\\n  (backdropClick)=\\\"close()\\\"\\n  (attach)=\\\"_onAttached()\\\"\\n  (detach)=\\\"close()\\\">\\n  <div\\n    #panel\\n    role=\\\"listbox\\\"\\n    tabindex=\\\"-1\\\"\\n    class=\\\"mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open {{ _getPanelTheme() }}\\\"\\n    [attr.id]=\\\"id + '-panel'\\\"\\n    [attr.aria-multiselectable]=\\\"multiple\\\"\\n    [attr.aria-label]=\\\"ariaLabel || null\\\"\\n    [attr.aria-labelledby]=\\\"_getPanelAriaLabelledby()\\\"\\n    [ngClass]=\\\"panelClass\\\"\\n    [@transformPanel]=\\\"'showing'\\\"\\n    (@transformPanel.done)=\\\"_panelDoneAnimatingStream.next($event.toState)\\\"\\n    (keydown)=\\\"_handleKeydown($event)\\\">\\n    <ng-content></ng-content>\\n  </div>\\n</ng-template>\\n\", styles: [\".mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}.mat-mdc-select{display:inline-block;width:100%;outline:none}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:translateY(-8px)}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-select-arrow{width:10px;height:5px;position:relative}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}.mdc-menu-surface.mat-mdc-select-panel{width:100%;max-height:275px;position:static;outline:0;margin:0;padding:8px 0;list-style-type:none}.mdc-menu-surface.mat-mdc-select-panel:focus{outline:none}.cdk-high-contrast-active .mdc-menu-surface.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) .mdc-menu-surface.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above .mdc-menu-surface.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"], dependencies: [{ kind: \"directive\", type: i7.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i7.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i7.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i7.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"directive\", type: i8.CdkConnectedOverlay, selector: \"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\", inputs: [\"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayPositions\", \"cdkConnectedOverlayPositionStrategy\", \"cdkConnectedOverlayOffsetX\", \"cdkConnectedOverlayOffsetY\", \"cdkConnectedOverlayWidth\", \"cdkConnectedOverlayHeight\", \"cdkConnectedOverlayMinWidth\", \"cdkConnectedOverlayMinHeight\", \"cdkConnectedOverlayBackdropClass\", \"cdkConnectedOverlayPanelClass\", \"cdkConnectedOverlayViewportMargin\", \"cdkConnectedOverlayScrollStrategy\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayDisableClose\", \"cdkConnectedOverlayTransformOriginOn\", \"cdkConnectedOverlayHasBackdrop\", \"cdkConnectedOverlayLockPosition\", \"cdkConnectedOverlayFlexibleDimensions\", \"cdkConnectedOverlayGrowAfterOpen\", \"cdkConnectedOverlayPush\"], outputs: [\"backdropClick\", \"positionChange\", \"attach\", \"detach\", \"overlayKeydown\", \"overlayOutsideClick\"], exportAs: [\"cdkConnectedOverlay\"] }, { kind: \"directive\", type: i8.CdkOverlayOrigin, selector: \"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\", exportAs: [\"cdkOverlayOrigin\"] }], animations: [matSelectAnimations.transformPanel], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelect, decorators: [{\n            type: Component,\n            args: [{ selector: 'mat-select', exportAs: 'matSelect', inputs: ['disabled', 'disableRipple', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n                        'role': 'combobox',\n                        'aria-autocomplete': 'none',\n                        'aria-haspopup': 'listbox',\n                        'class': 'mat-mdc-select',\n                        '[attr.id]': 'id',\n                        '[attr.tabindex]': 'tabIndex',\n                        '[attr.aria-controls]': 'panelOpen ? id + \"-panel\" : null',\n                        '[attr.aria-expanded]': 'panelOpen',\n                        '[attr.aria-label]': 'ariaLabel || null',\n                        '[attr.aria-required]': 'required.toString()',\n                        '[attr.aria-disabled]': 'disabled.toString()',\n                        '[attr.aria-invalid]': 'errorState',\n                        '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n                        '[class.mat-mdc-select-disabled]': 'disabled',\n                        '[class.mat-mdc-select-invalid]': 'errorState',\n                        '[class.mat-mdc-select-required]': 'required',\n                        '[class.mat-mdc-select-empty]': 'empty',\n                        '[class.mat-mdc-select-multiple]': 'multiple',\n                        '(keydown)': '_handleKeydown($event)',\n                        '(focus)': '_onFocus()',\n                        '(blur)': '_onBlur()',\n                    }, animations: [matSelectAnimations.transformPanel], providers: [\n                        { provide: MatFormFieldControl, useExisting: MatSelect },\n                        { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect },\n                    ], template: \"<!--\\n Note that the select trigger element specifies `aria-owns` pointing to the listbox overlay.\\n While aria-owns is not required for the ARIA 1.2 `role=\\\"combobox\\\"` interaction pattern,\\n it fixes an issue with VoiceOver when the select appears inside of an `aria-model=\\\"true\\\"`\\n element (e.g. a dialog). Without this `aria-owns`, the `aria-modal` on a dialog prevents\\n VoiceOver from \\\"seeing\\\" the select's listbox overlay for aria-activedescendant.\\n Using `aria-owns` re-parents the select overlay so that it works again.\\n See https://github.com/angular/components/issues/20694\\n-->\\n<div cdk-overlay-origin\\n     [attr.aria-owns]=\\\"panelOpen ? id + '-panel' : null\\\"\\n     class=\\\"mat-mdc-select-trigger\\\"\\n     (click)=\\\"toggle()\\\"\\n     #fallbackOverlayOrigin=\\\"cdkOverlayOrigin\\\"\\n     #trigger>\\n  <div class=\\\"mat-mdc-select-value\\\" [ngSwitch]=\\\"empty\\\" [attr.id]=\\\"_valueId\\\">\\n    <span class=\\\"mat-mdc-select-placeholder mat-mdc-select-min-line\\\" *ngSwitchCase=\\\"true\\\">{{placeholder}}</span>\\n    <span class=\\\"mat-mdc-select-value-text\\\" *ngSwitchCase=\\\"false\\\" [ngSwitch]=\\\"!!customTrigger\\\">\\n      <span class=\\\"mat-mdc-select-min-line\\\" *ngSwitchDefault>{{triggerValue}}</span>\\n      <ng-content select=\\\"mat-select-trigger\\\" *ngSwitchCase=\\\"true\\\"></ng-content>\\n    </span>\\n  </div>\\n\\n  <div class=\\\"mat-mdc-select-arrow-wrapper\\\">\\n    <div class=\\\"mat-mdc-select-arrow\\\">\\n      <!-- Use an inline SVG, because it works better than a CSS triangle in high contrast mode. -->\\n      <svg viewBox=\\\"0 0 24 24\\\" width=\\\"24px\\\" height=\\\"24px\\\" focusable=\\\"false\\\">\\n        <path d=\\\"M7 10l5 5 5-5z\\\"/>\\n      </svg>\\n    </div>\\n  </div>\\n</div>\\n\\n<ng-template\\n  cdk-connected-overlay\\n  cdkConnectedOverlayLockPosition\\n  cdkConnectedOverlayHasBackdrop\\n  cdkConnectedOverlayBackdropClass=\\\"cdk-overlay-transparent-backdrop\\\"\\n  [cdkConnectedOverlayPanelClass]=\\\"_overlayPanelClass\\\"\\n  [cdkConnectedOverlayScrollStrategy]=\\\"_scrollStrategy\\\"\\n  [cdkConnectedOverlayOrigin]=\\\"_preferredOverlayOrigin || fallbackOverlayOrigin\\\"\\n  [cdkConnectedOverlayOpen]=\\\"panelOpen\\\"\\n  [cdkConnectedOverlayPositions]=\\\"_positions\\\"\\n  [cdkConnectedOverlayWidth]=\\\"_overlayWidth\\\"\\n  (backdropClick)=\\\"close()\\\"\\n  (attach)=\\\"_onAttached()\\\"\\n  (detach)=\\\"close()\\\">\\n  <div\\n    #panel\\n    role=\\\"listbox\\\"\\n    tabindex=\\\"-1\\\"\\n    class=\\\"mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open {{ _getPanelTheme() }}\\\"\\n    [attr.id]=\\\"id + '-panel'\\\"\\n    [attr.aria-multiselectable]=\\\"multiple\\\"\\n    [attr.aria-label]=\\\"ariaLabel || null\\\"\\n    [attr.aria-labelledby]=\\\"_getPanelAriaLabelledby()\\\"\\n    [ngClass]=\\\"panelClass\\\"\\n    [@transformPanel]=\\\"'showing'\\\"\\n    (@transformPanel.done)=\\\"_panelDoneAnimatingStream.next($event.toState)\\\"\\n    (keydown)=\\\"_handleKeydown($event)\\\">\\n    <ng-content></ng-content>\\n  </div>\\n</ng-template>\\n\", styles: [\".mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}.mat-mdc-select{display:inline-block;width:100%;outline:none}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:translateY(-8px)}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-select-arrow{width:10px;height:5px;position:relative}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}.mdc-menu-surface.mat-mdc-select-panel{width:100%;max-height:275px;position:static;outline:0;margin:0;padding:8px 0;list-style-type:none}.mdc-menu-surface.mat-mdc-select-panel:focus{outline:none}.cdk-high-contrast-active .mdc-menu-surface.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) .mdc-menu-surface.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above .mdc-menu-surface.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"] }]\n        }], propDecorators: { options: [{\n                type: ContentChildren,\n                args: [MatOption, { descendants: true }]\n            }], optionGroups: [{\n                type: ContentChildren,\n                args: [MAT_OPTGROUP, { descendants: true }]\n            }], customTrigger: [{\n                type: ContentChild,\n                args: [MAT_SELECT_TRIGGER]\n            }], hideSingleSelectionIndicator: [{\n                type: Input\n            }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSelectModule {\n}\nMatSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelectModule, declarations: [MatSelect, MatSelectTrigger], imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule], exports: [CdkScrollableModule,\n        MatFormFieldModule,\n        MatSelect,\n        MatSelectTrigger,\n        MatOptionModule,\n        MatCommonModule] });\nMatSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelectModule, providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule,\n        MatFormFieldModule,\n        MatOptionModule,\n        MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.0-rc.0\", ngImport: i0, type: MatSelectModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule],\n                    exports: [\n                        CdkScrollableModule,\n                        MatFormFieldModule,\n                        MatSelect,\n                        MatSelectTrigger,\n                        MatOptionModule,\n                        MatCommonModule,\n                    ],\n                    declarations: [MatSelect, MatSelectTrigger],\n                    providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],\n                }]\n        }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, _MatSelectBase, matSelectAnimations };\n"],"mappings":"AAAA,OAAO,KAAKA,EAAE,MAAM,sBAAsB;AAC1C,SAASC,OAAO,EAAEC,mBAAmB,EAAEC,gBAAgB,EAAEC,aAAa,QAAQ,sBAAsB;AACpG,OAAO,KAAKC,EAAE,MAAM,iBAAiB;AACrC,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,OAAO,KAAKC,EAAE,MAAM,eAAe;AACnC,SAASC,cAAc,EAAEC,YAAY,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,KAAK,EAAEC,SAAS,EAAEC,MAAM,EAAEC,SAAS,EAAEC,iBAAiB,EAAEC,uBAAuB,EAAEC,eAAe,EAAEC,YAAY,EAAEC,QAAQ,QAAQ,eAAe;AACpO,OAAO,KAAKC,EAAE,MAAM,wBAAwB;AAC5C,SAASC,kBAAkB,EAAEC,aAAa,EAAEC,aAAa,EAAEC,eAAe,EAAEC,6BAA6B,EAAEC,wBAAwB,EAAEC,2BAA2B,EAAEC,SAAS,EAAEC,YAAY,EAAEC,eAAe,EAAEC,eAAe,QAAQ,wBAAwB;AAC3P,OAAO,KAAKC,EAAE,MAAM,8BAA8B;AAClD,SAASC,cAAc,EAAEC,mBAAmB,EAAEC,kBAAkB,QAAQ,8BAA8B;AACtG,OAAO,KAAKC,EAAE,MAAM,wBAAwB;AAC5C,SAASC,mBAAmB,QAAQ,wBAAwB;AAC5D,OAAO,KAAKC,EAAE,MAAM,mBAAmB;AACvC,SAASC,0BAA0B,QAAQ,mBAAmB;AAC9D,OAAO,KAAKC,EAAE,MAAM,mBAAmB;AACvC,SAASC,qBAAqB,EAAEC,oBAAoB,QAAQ,uBAAuB;AACnF,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,EAAEC,KAAK,EAAEC,KAAK,EAAEC,cAAc,EAAEC,CAAC,QAAQ,uBAAuB;AACtH,OAAO,KAAKC,EAAE,MAAM,gBAAgB;AACpC,SAASC,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,OAAO,EAAEC,KAAK,EAAEC,KAAK,QAAQ,MAAM;AAC5C,SAASC,SAAS,EAAEC,SAAS,EAAEC,IAAI,EAAEC,MAAM,EAAEC,GAAG,EAAEC,oBAAoB,EAAEC,SAAS,QAAQ,gBAAgB;AACzG,SAASC,OAAO,EAAEC,UAAU,EAAEC,KAAK,EAAEC,YAAY,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,QAAQ,qBAAqB;;AAErG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA,MAAAC,GAAA;AAAA,MAAAC,GAAA;AAAA,MAAAC,GAAA;AAAA,MAAAC,GAAA;AAAA,SAAAC,0BAAAC,EAAA,EAAAC,GAAA;EAAA,IAAAD,EAAA;IAwzBsGzE,EAAE,CAAA2E,cAAA,cA4MwsC,CAAC;IA5M3sC3E,EAAE,CAAA4E,MAAA,EA4MutC,CAAC;IA5M1tC5E,EAAE,CAAA6E,YAAA,CA4M8tC,CAAC;EAAA;EAAA,IAAAJ,EAAA;IAAA,MAAAK,MAAA,GA5MjuC9E,EAAE,CAAA+E,aAAA;IAAF/E,EAAE,CAAAgF,SAAA,CA4MutC,CAAC;IA5M1tChF,EAAE,CAAAiF,iBAAA,CAAAH,MAAA,CAAAI,WA4MutC,CAAC;EAAA;AAAA;AAAA,SAAAC,iCAAAV,EAAA,EAAAC,GAAA;EAAA,IAAAD,EAAA;IA5M1tCzE,EAAE,CAAA2E,cAAA,cA4Ms4C,CAAC;IA5Mz4C3E,EAAE,CAAA4E,MAAA,EA4Ms5C,CAAC;IA5Mz5C5E,EAAE,CAAA6E,YAAA,CA4M65C,CAAC;EAAA;EAAA,IAAAJ,EAAA;IAAA,MAAAK,MAAA,GA5Mh6C9E,EAAE,CAAA+E,aAAA;IAAF/E,EAAE,CAAAgF,SAAA,CA4Ms5C,CAAC;IA5Mz5ChF,EAAE,CAAAiF,iBAAA,CAAAH,MAAA,CAAAM,YA4Ms5C,CAAC;EAAA;AAAA;AAAA,SAAAC,uCAAAZ,EAAA,EAAAC,GAAA;EAAA,IAAAD,EAAA;IA5Mz5CzE,EAAE,CAAAsF,YAAA,gCA4Mm/C,CAAC;EAAA;AAAA;AAAA,SAAAC,0BAAAd,EAAA,EAAAC,GAAA;EAAA,IAAAD,EAAA;IA5Mt/CzE,EAAE,CAAA2E,cAAA,cA4Mq0C,CAAC;IA5Mx0C3E,EAAE,CAAAwF,UAAA,IAAAL,gCAAA,kBA4Ms4C,CAAC,IAAAE,sCAAA,wBAA+F,CAAC;IA5Mz+CrF,EAAE,CAAA6E,YAAA,CA4MggD,CAAC;EAAA;EAAA,IAAAJ,EAAA;IAAA,MAAAK,MAAA,GA5MngD9E,EAAE,CAAA+E,aAAA;IAAF/E,EAAE,CAAAyF,UAAA,eAAAX,MAAA,CAAAY,aA4Mo0C,CAAC;IA5Mv0C1F,EAAE,CAAAgF,SAAA,EA4Mm+C,CAAC;IA5Mt+ChF,EAAE,CAAAyF,UAAA,qBA4Mm+C,CAAC;EAAA;AAAA;AAAA,SAAAE,kCAAAlB,EAAA,EAAAC,GAAA;EAAA,IAAAD,EAAA;IAAA,MAAAmB,GAAA,GA5Mt+C5F,EAAE,CAAA6F,gBAAA;IAAF7F,EAAE,CAAA2E,cAAA,gBA4M2+F,CAAC;IA5M9+F3E,EAAE,CAAA8F,UAAA,kCAAAC,+EAAAC,MAAA;MAAFhG,EAAE,CAAAiG,aAAA,CAAAL,GAAA;MAAA,MAAAd,MAAA,GAAF9E,EAAE,CAAA+E,aAAA;MAAA,OAAF/E,EAAE,CAAAkG,WAAA,CA4Mi5FpB,MAAA,CAAAqB,yBAAA,CAAAC,IAAA,CAAAJ,MAAA,CAAAK,OAA6C,CAAC;IAAA,CAAC,CAAC,qBAAAC,yDAAAN,MAAA;MA5Mn8FhG,EAAE,CAAAiG,aAAA,CAAAL,GAAA;MAAA,MAAAd,MAAA,GAAF9E,EAAE,CAAA+E,aAAA;MAAA,OAAF/E,EAAE,CAAAkG,WAAA,CA4Mm9FpB,MAAA,CAAAyB,cAAA,CAAAP,MAAqB,CAAC;IAAA,CAAC,CAAC;IA5M7+FhG,EAAE,CAAAsF,YAAA,KA4M0gG,CAAC;IA5M7gGtF,EAAE,CAAA6E,YAAA,CA4MohG,CAAC;EAAA;EAAA,IAAAJ,EAAA;IAAA,MAAAK,MAAA,GA5MvhG9E,EAAE,CAAA+E,aAAA;IAAF/E,EAAE,CAAAwG,sBAAA,kEAAA1B,MAAA,CAAA2B,cAAA,MA4MwnF,CAAC;IA5M3nFzG,EAAE,CAAAyF,UAAA,YAAAX,MAAA,CAAA4B,UA4M40F,CAAC,6BAAoC,CAAC;IA5Mp3F1G,EAAE,CAAA2G,WAAA,OAAA7B,MAAA,CAAA8B,EAAA,qCAAA9B,MAAA,CAAA+B,QAAA,gBAAA/B,MAAA,CAAAgC,SAAA,6BAAAhC,MAAA,CAAAiC,uBAAA;EAAA;AAAA;AAjzBxG,MAAMC,mBAAmB,GAAG;EACxB;AACJ;AACA;AACA;AACA;EACIC,kBAAkB,EAAEpD,OAAO,CAAC,oBAAoB,EAAE,CAC9CC,UAAU,CAAC,WAAW,EAAEC,KAAK,CAAC,iBAAiB,EAAE,CAACC,YAAY,CAAC,CAAC,CAAC,EAAE;IAAEkD,QAAQ,EAAE;EAAK,CAAC,CAAC,CAAC,CAC1F,CAAC;EACF;EACAC,cAAc,EAAEtD,OAAO,CAAC,gBAAgB,EAAE,CACtCI,KAAK,CAAC,MAAM,EAAEC,KAAK,CAAC;IAChBkD,OAAO,EAAE,CAAC;IACVC,SAAS,EAAE;EACf,CAAC,CAAC,CAAC,EACHvD,UAAU,CAAC,iBAAiB,EAAEK,OAAO,CAAC,kCAAkC,EAAED,KAAK,CAAC;IAC5EkD,OAAO,EAAE,CAAC;IACVC,SAAS,EAAE;EACf,CAAC,CAAC,CAAC,CAAC,EACJvD,UAAU,CAAC,WAAW,EAAEK,OAAO,CAAC,cAAc,EAAED,KAAK,CAAC;IAAEkD,OAAO,EAAE;EAAE,CAAC,CAAC,CAAC,CAAC,CAC1E;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,gCAAgCA,CAAA,EAAG;EACxC,OAAOC,KAAK,CAAC,+DAA+D,CAAC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,8BAA8BA,CAAA,EAAG;EACtC,OAAOD,KAAK,CAAC,oDAAoD,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,iCAAiCA,CAAA,EAAG;EACzC,OAAOF,KAAK,CAAC,mCAAmC,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIG,YAAY,GAAG,CAAC;AACpB;AACA,MAAMC,0BAA0B,GAAG,IAAI1H,cAAc,CAAC,4BAA4B,CAAC;AACnF;AACA,SAAS2H,2CAA2CA,CAACC,OAAO,EAAE;EAC1D,OAAO,MAAMA,OAAO,CAACC,gBAAgB,CAACC,UAAU,CAAC,CAAC;AACtD;AACA;AACA,MAAMC,iBAAiB,GAAG,IAAI/H,cAAc,CAAC,mBAAmB,CAAC;AACjE;AACA,MAAMgI,mCAAmC,GAAG;EACxCC,OAAO,EAAEP,0BAA0B;EACnCQ,IAAI,EAAE,CAACzI,OAAO,CAAC;EACf0I,UAAU,EAAER;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,MAAMS,kBAAkB,GAAG,IAAIpI,cAAc,CAAC,kBAAkB,CAAC;AACjE;AACA,MAAMqI,eAAe,CAAC;EAClBC,WAAWA,CAAA,CACX;EACAC,MAAM,EACN;EACAC,KAAK,EAAE;IACH,IAAI,CAACD,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,KAAK,GAAGA,KAAK;EACtB;AACJ;AACA;AACA;AACA,MAAMC,mBAAmB,GAAGxH,kBAAkB,CAACC,aAAa,CAACC,aAAa,CAACC,eAAe,CAAC,MAAM;EAC7FkH,WAAWA,CAACI,WAAW,EAAEC,yBAAyB,EAAEC,WAAW,EAAEC,gBAAgB;EACjF;AACJ;AACA;AACA;AACA;EACIC,SAAS,EAAE;IACP,IAAI,CAACJ,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,yBAAyB,GAAGA,yBAAyB;IAC1D,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACC,SAAS,GAAGA,SAAS;IAC1B;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,IAAI7F,OAAO,CAAC,CAAC;EACrC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC;AACL;AACA,MAAM8F,cAAc,SAASP,mBAAmB,CAAC;EAC7C;EACA,IAAIQ,OAAOA,CAAA,EAAG;IACV,OAAO,IAAI,CAACC,QAAQ,IAAI,IAAI,CAACC,UAAU;EAC3C;EACA;EACA,IAAIlE,WAAWA,CAAA,EAAG;IACd,OAAO,IAAI,CAACmE,YAAY;EAC5B;EACA,IAAInE,WAAWA,CAACuD,KAAK,EAAE;IACnB,IAAI,CAACY,YAAY,GAAGZ,KAAK;IACzB,IAAI,CAACO,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACA;EACA,IAAIkD,QAAQA,CAAA,EAAG;IACX,OAAO,IAAI,CAACC,SAAS,IAAI,IAAI,CAACR,SAAS,EAAES,OAAO,EAAEC,YAAY,CAACvG,UAAU,CAACoG,QAAQ,CAAC,IAAI,KAAK;EAChG;EACA,IAAIA,QAAQA,CAACb,KAAK,EAAE;IAChB,IAAI,CAACc,SAAS,GAAGjH,qBAAqB,CAACmG,KAAK,CAAC;IAC7C,IAAI,CAACO,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACA;EACA,IAAIS,QAAQA,CAAA,EAAG;IACX,OAAO,IAAI,CAAC6C,SAAS;EACzB;EACA,IAAI7C,QAAQA,CAAC4B,KAAK,EAAE;IAChB,IAAI,IAAI,CAACkB,eAAe,KAAK,OAAOC,SAAS,KAAK,WAAW,IAAIA,SAAS,CAAC,EAAE;MACzE,MAAMtC,gCAAgC,CAAC,CAAC;IAC5C;IACA,IAAI,CAACoC,SAAS,GAAGpH,qBAAqB,CAACmG,KAAK,CAAC;EACjD;EACA;EACA,IAAIoB,sBAAsBA,CAAA,EAAG;IACzB,OAAO,IAAI,CAACC,uBAAuB;EACvC;EACA,IAAID,sBAAsBA,CAACpB,KAAK,EAAE;IAC9B,IAAI,CAACqB,uBAAuB,GAAGxH,qBAAqB,CAACmG,KAAK,CAAC;EAC/D;EACA;AACJ;AACA;AACA;AACA;EACI,IAAIsB,WAAWA,CAAA,EAAG;IACd,OAAO,IAAI,CAACC,YAAY;EAC5B;EACA,IAAID,WAAWA,CAACE,EAAE,EAAE;IAChB,IAAI,OAAOA,EAAE,KAAK,UAAU,KAAK,OAAOL,SAAS,KAAK,WAAW,IAAIA,SAAS,CAAC,EAAE;MAC7E,MAAMnC,iCAAiC,CAAC,CAAC;IAC7C;IACA,IAAI,CAACuC,YAAY,GAAGC,EAAE;IACtB,IAAI,IAAI,CAACN,eAAe,EAAE;MACtB;MACA,IAAI,CAACO,oBAAoB,CAAC,CAAC;IAC/B;EACJ;EACA;EACA,IAAIzB,KAAKA,CAAA,EAAG;IACR,OAAO,IAAI,CAAC0B,MAAM;EACtB;EACA,IAAI1B,KAAKA,CAAC2B,QAAQ,EAAE;IAChB,MAAMC,WAAW,GAAG,IAAI,CAACC,YAAY,CAACF,QAAQ,CAAC;IAC/C,IAAIC,WAAW,EAAE;MACb,IAAI,CAACE,SAAS,CAACH,QAAQ,CAAC;IAC5B;EACJ;EACA;EACA,IAAII,yBAAyBA,CAAA,EAAG;IAC5B,OAAO,IAAI,CAACC,0BAA0B;EAC1C;EACA,IAAID,yBAAyBA,CAAC/B,KAAK,EAAE;IACjC,IAAI,CAACgC,0BAA0B,GAAGlI,oBAAoB,CAACkG,KAAK,CAAC;EACjE;EACA;EACA,IAAI7B,EAAEA,CAAA,EAAG;IACL,OAAO,IAAI,CAAC8D,GAAG;EACnB;EACA,IAAI9D,EAAEA,CAAC6B,KAAK,EAAE;IACV,IAAI,CAACiC,GAAG,GAAGjC,KAAK,IAAI,IAAI,CAACkC,IAAI;IAC7B,IAAI,CAAC3B,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACAmC,WAAWA,CAACqC,cAAc,EAAEC,kBAAkB,EAAEC,OAAO,EAAElC,yBAAyB,EAAEmC,UAAU,EAAEC,IAAI,EAAEnC,WAAW,EAAEC,gBAAgB,EAAEmC,gBAAgB,EAAElC,SAAS,EAAEmC,QAAQ,EAAEC,qBAAqB,EAAEC,cAAc,EAAEC,eAAe,EAAE;IAChO,KAAK,CAACN,UAAU,EAAEnC,yBAAyB,EAAEC,WAAW,EAAEC,gBAAgB,EAAEC,SAAS,CAAC;IACtF,IAAI,CAAC6B,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,kBAAkB,GAAGA,kBAAkB;IAC5C,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACE,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACG,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,eAAe,GAAGA,eAAe;IACtC;IACA,IAAI,CAACjC,UAAU,GAAG,KAAK;IACvB;IACA,IAAI,CAACY,YAAY,GAAG,CAACsB,EAAE,EAAEC,EAAE,KAAKD,EAAE,KAAKC,EAAE;IACzC;IACA,IAAI,CAACZ,IAAI,GAAI,cAAajD,YAAY,EAAG,EAAC;IAC1C;IACA,IAAI,CAAC8D,sBAAsB,GAAG,IAAI;IAClC;IACA,IAAI,CAACC,QAAQ,GAAG,IAAItI,OAAO,CAAC,CAAC;IAC7B;IACA,IAAI,CAACoH,SAAS,GAAG,MAAM,CAAE,CAAC;IAC1B;IACA,IAAI,CAACmB,UAAU,GAAG,MAAM,CAAE,CAAC;IAC3B;IACA,IAAI,CAACC,QAAQ,GAAI,oBAAmBjE,YAAY,EAAG,EAAC;IACpD;IACA,IAAI,CAACvB,yBAAyB,GAAG,IAAIhD,OAAO,CAAC,CAAC;IAC9C,IAAI,CAACyI,kBAAkB,GAAG,IAAI,CAACP,eAAe,EAAEQ,iBAAiB,IAAI,EAAE;IACvE,IAAI,CAAC1C,QAAQ,GAAG,KAAK;IACrB;IACA,IAAI,CAAC2C,WAAW,GAAG,YAAY;IAC/B,IAAI,CAACpC,SAAS,GAAG,KAAK;IACtB,IAAI,CAACI,uBAAuB,GAAG,IAAI,CAACuB,eAAe,EAAExB,sBAAsB,IAAI,KAAK;IACpF;IACA,IAAI,CAAC/C,SAAS,GAAG,EAAE;IACnB;IACA,IAAI,CAACiF,sBAAsB,GAAG3I,KAAK,CAAC,MAAM;MACtC,MAAM4I,OAAO,GAAG,IAAI,CAACA,OAAO;MAC5B,IAAIA,OAAO,EAAE;QACT,OAAOA,OAAO,CAACC,OAAO,CAACC,IAAI,CAAC5I,SAAS,CAAC0I,OAAO,CAAC,EAAEzI,SAAS,CAAC,MAAMF,KAAK,CAAC,GAAG2I,OAAO,CAACtI,GAAG,CAACyI,MAAM,IAAIA,MAAM,CAACC,iBAAiB,CAAC,CAAC,CAAC,CAAC;MAC/H;MACA,OAAO,IAAI,CAACtB,OAAO,CAACuB,QAAQ,CAACH,IAAI,CAAC1I,IAAI,CAAC,CAAC,CAAC,EAAED,SAAS,CAAC,MAAM,IAAI,CAACwI,sBAAsB,CAAC,CAAC;IAC5F,CAAC,CAAC;IACF;IACA,IAAI,CAACO,YAAY,GAAG,IAAIpM,YAAY,CAAC,CAAC;IACtC;IACA,IAAI,CAACqM,aAAa,GAAG,IAAI,CAACD,YAAY,CAACJ,IAAI,CAACzI,MAAM,CAAC+I,CAAC,IAAIA,CAAC,CAAC,EAAE9I,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC3E;IACA,IAAI,CAAC+I,aAAa,GAAG,IAAI,CAACH,YAAY,CAACJ,IAAI,CAACzI,MAAM,CAAC+I,CAAC,IAAI,CAACA,CAAC,CAAC,EAAE9I,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC5E;IACA,IAAI,CAACgJ,eAAe,GAAG,IAAIxM,YAAY,CAAC,CAAC;IACzC;AACR;AACA;AACA;AACA;IACQ,IAAI,CAACyM,WAAW,GAAG,IAAIzM,YAAY,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC6I,SAAS,EAAE;MAChB;MACA;MACA,IAAI,CAACA,SAAS,CAAC6D,aAAa,GAAG,IAAI;IACvC;IACA;IACA;IACA,IAAIvB,eAAe,EAAEb,yBAAyB,IAAI,IAAI,EAAE;MACpD,IAAI,CAACC,0BAA0B,GAAGY,eAAe,CAACb,yBAAyB;IAC/E;IACA,IAAI,CAACqC,sBAAsB,GAAG1B,qBAAqB;IACnD,IAAI,CAAC2B,eAAe,GAAG,IAAI,CAACD,sBAAsB,CAAC,CAAC;IACpD,IAAI,CAAC3B,QAAQ,GAAG6B,QAAQ,CAAC7B,QAAQ,CAAC,IAAI,CAAC;IACvC;IACA,IAAI,CAACtE,EAAE,GAAG,IAAI,CAACA,EAAE;EACrB;EACAoG,QAAQA,CAAA,EAAG;IACP,IAAI,CAACrD,eAAe,GAAG,IAAInH,cAAc,CAAC,IAAI,CAACqE,QAAQ,CAAC;IACxD,IAAI,CAACmC,YAAY,CAAC5C,IAAI,CAAC,CAAC;IACxB;IACA;IACA;IACA,IAAI,CAACD,yBAAyB,CACzB+F,IAAI,CAACvI,oBAAoB,CAAC,CAAC,EAAEC,SAAS,CAAC,IAAI,CAAC6H,QAAQ,CAAC,CAAC,CACtDwB,SAAS,CAAC,MAAM,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAACC,SAAS,CAAC,CAAC;EAClE;EACAC,kBAAkBA,CAAA,EAAG;IACjB,IAAI,CAACC,eAAe,CAAC,CAAC;IACtB,IAAI,CAAC1D,eAAe,CAAC2D,OAAO,CAACpB,IAAI,CAACtI,SAAS,CAAC,IAAI,CAAC6H,QAAQ,CAAC,CAAC,CAACwB,SAAS,CAACM,KAAK,IAAI;MAC3EA,KAAK,CAACC,KAAK,CAACC,OAAO,CAACtB,MAAM,IAAIA,MAAM,CAACuB,MAAM,CAAC,CAAC,CAAC;MAC9CH,KAAK,CAACI,OAAO,CAACF,OAAO,CAACtB,MAAM,IAAIA,MAAM,CAACyB,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC;IACF,IAAI,CAAC5B,OAAO,CAACC,OAAO,CAACC,IAAI,CAAC5I,SAAS,CAAC,IAAI,CAAC,EAAEM,SAAS,CAAC,IAAI,CAAC6H,QAAQ,CAAC,CAAC,CAACwB,SAAS,CAAC,MAAM;MACjF,IAAI,CAACY,aAAa,CAAC,CAAC;MACpB,IAAI,CAAC3D,oBAAoB,CAAC,CAAC;IAC/B,CAAC,CAAC;EACN;EACA4D,SAASA,CAAA,EAAG;IACR,MAAMC,iBAAiB,GAAG,IAAI,CAACC,yBAAyB,CAAC,CAAC;IAC1D,MAAMjF,SAAS,GAAG,IAAI,CAACA,SAAS;IAChC;IACA;IACA;IACA,IAAIgF,iBAAiB,KAAK,IAAI,CAACvC,sBAAsB,EAAE;MACnD,MAAMyC,OAAO,GAAG,IAAI,CAACtF,WAAW,CAACuF,aAAa;MAC9C,IAAI,CAAC1C,sBAAsB,GAAGuC,iBAAiB;MAC/C,IAAIA,iBAAiB,EAAE;QACnBE,OAAO,CAACE,YAAY,CAAC,iBAAiB,EAAEJ,iBAAiB,CAAC;MAC9D,CAAC,MACI;QACDE,OAAO,CAACG,eAAe,CAAC,iBAAiB,CAAC;MAC9C;IACJ;IACA,IAAIrF,SAAS,EAAE;MACX;MACA,IAAI,IAAI,CAACsF,gBAAgB,KAAKtF,SAAS,CAACS,OAAO,EAAE;QAC7C,IAAI,IAAI,CAAC6E,gBAAgB,KAAKC,SAAS,IACnCvF,SAAS,CAACwF,QAAQ,KAAK,IAAI,IAC3BxF,SAAS,CAACwF,QAAQ,KAAK,IAAI,CAACA,QAAQ,EAAE;UACtC,IAAI,CAACA,QAAQ,GAAGxF,SAAS,CAACwF,QAAQ;QACtC;QACA,IAAI,CAACF,gBAAgB,GAAGtF,SAAS,CAACS,OAAO;MAC7C;MACA,IAAI,CAACgF,gBAAgB,CAAC,CAAC;IAC3B;EACJ;EACAC,WAAWA,CAACxC,OAAO,EAAE;IACjB;IACA;IACA,IAAIA,OAAO,CAAC,UAAU,CAAC,IAAIA,OAAO,CAAC,qBAAqB,CAAC,EAAE;MACvD,IAAI,CAACjD,YAAY,CAAC5C,IAAI,CAAC,CAAC;IAC5B;IACA,IAAI6F,OAAO,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAACyC,WAAW,EAAE;MAC1D,IAAI,CAACA,WAAW,CAACC,aAAa,CAAC,IAAI,CAAClE,0BAA0B,CAAC;IACnE;EACJ;EACAmE,WAAWA,CAAA,EAAG;IACV,IAAI,CAACF,WAAW,EAAEG,OAAO,CAAC,CAAC;IAC3B,IAAI,CAACpD,QAAQ,CAACrF,IAAI,CAAC,CAAC;IACpB,IAAI,CAACqF,QAAQ,CAACqD,QAAQ,CAAC,CAAC;IACxB,IAAI,CAAC9F,YAAY,CAAC8F,QAAQ,CAAC,CAAC;EAChC;EACA;EACAC,MAAMA,CAAA,EAAG;IACL,IAAI,CAAC5B,SAAS,GAAG,IAAI,CAAC6B,KAAK,CAAC,CAAC,GAAG,IAAI,CAACC,IAAI,CAAC,CAAC;EAC/C;EACA;EACAA,IAAIA,CAAA,EAAG;IACH,IAAI,IAAI,CAACC,QAAQ,CAAC,CAAC,EAAE;MACjB,IAAI,CAAC9F,UAAU,GAAG,IAAI;MACtB,IAAI,CAACsF,WAAW,CAACS,yBAAyB,CAAC,IAAI,CAAC;MAChD,IAAI,CAACC,uBAAuB,CAAC,CAAC;MAC9B,IAAI,CAACvE,kBAAkB,CAACwE,YAAY,CAAC,CAAC;IAC1C;EACJ;EACA;EACAL,KAAKA,CAAA,EAAG;IACJ,IAAI,IAAI,CAAC5F,UAAU,EAAE;MACjB,IAAI,CAACA,UAAU,GAAG,KAAK;MACvB,IAAI,CAACsF,WAAW,CAACS,yBAAyB,CAAC,IAAI,CAACG,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;MACzE,IAAI,CAACzE,kBAAkB,CAACwE,YAAY,CAAC,CAAC;MACtC,IAAI,CAAC3D,UAAU,CAAC,CAAC;IACrB;EACJ;EACA;AACJ;AACA;AACA;AACA;AACA;EACI6D,UAAUA,CAAC9G,KAAK,EAAE;IACd,IAAI,CAAC6B,YAAY,CAAC7B,KAAK,CAAC;EAC5B;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI+G,gBAAgBA,CAACvF,EAAE,EAAE;IACjB,IAAI,CAACM,SAAS,GAAGN,EAAE;EACvB;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIwF,iBAAiBA,CAACxF,EAAE,EAAE;IAClB,IAAI,CAACyB,UAAU,GAAGzB,EAAE;EACxB;EACA;AACJ;AACA;AACA;AACA;AACA;EACIyF,gBAAgBA,CAACC,UAAU,EAAE;IACzB,IAAI,CAACpB,QAAQ,GAAGoB,UAAU;IAC1B,IAAI,CAAC9E,kBAAkB,CAACwE,YAAY,CAAC,CAAC;IACtC,IAAI,CAACrG,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACA;EACA,IAAI+G,SAASA,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC/D,UAAU;EAC1B;EACA;EACA,IAAIwG,QAAQA,CAAA,EAAG;IACX,OAAO,IAAI,CAAC/I,QAAQ,GAAG,IAAI,CAAC8C,eAAe,EAAEiG,QAAQ,IAAI,EAAE,GAAG,IAAI,CAACjG,eAAe,EAAEiG,QAAQ,CAAC,CAAC,CAAC;EACnG;EACA;EACA,IAAIxK,YAAYA,CAAA,EAAG;IACf,IAAI,IAAI,CAACyK,KAAK,EAAE;MACZ,OAAO,EAAE;IACb;IACA,IAAI,IAAI,CAACnG,SAAS,EAAE;MAChB,MAAMoG,eAAe,GAAG,IAAI,CAACnG,eAAe,CAACiG,QAAQ,CAAClM,GAAG,CAACyI,MAAM,IAAIA,MAAM,CAAC4D,SAAS,CAAC;MACrF,IAAI,IAAI,CAACT,MAAM,CAAC,CAAC,EAAE;QACfQ,eAAe,CAACE,OAAO,CAAC,CAAC;MAC7B;MACA;MACA,OAAOF,eAAe,CAACG,IAAI,CAAC,IAAI,CAAC;IACrC;IACA,OAAO,IAAI,CAACtG,eAAe,CAACiG,QAAQ,CAAC,CAAC,CAAC,CAACG,SAAS;EACrD;EACA;EACAT,MAAMA,CAAA,EAAG;IACL,OAAO,IAAI,CAACtE,IAAI,GAAG,IAAI,CAACA,IAAI,CAACvC,KAAK,KAAK,KAAK,GAAG,KAAK;EACxD;EACA;EACAlC,cAAcA,CAACgH,KAAK,EAAE;IAClB,IAAI,CAAC,IAAI,CAACgB,QAAQ,EAAE;MAChB,IAAI,CAACpB,SAAS,GAAG,IAAI,CAAC+C,kBAAkB,CAAC3C,KAAK,CAAC,GAAG,IAAI,CAAC4C,oBAAoB,CAAC5C,KAAK,CAAC;IACtF;EACJ;EACA;EACA4C,oBAAoBA,CAAC5C,KAAK,EAAE;IACxB,MAAM6C,OAAO,GAAG7C,KAAK,CAAC6C,OAAO;IAC7B,MAAMC,UAAU,GAAGD,OAAO,KAAK3N,UAAU,IACrC2N,OAAO,KAAK1N,QAAQ,IACpB0N,OAAO,KAAKzN,UAAU,IACtByN,OAAO,KAAKxN,WAAW;IAC3B,MAAM0N,SAAS,GAAGF,OAAO,KAAKvN,KAAK,IAAIuN,OAAO,KAAKtN,KAAK;IACxD,MAAMyN,OAAO,GAAG,IAAI,CAAC7B,WAAW;IAChC;IACA,IAAK,CAAC6B,OAAO,CAACC,QAAQ,CAAC,CAAC,IAAIF,SAAS,IAAI,CAACvN,cAAc,CAACwK,KAAK,CAAC,IAC1D,CAAC,IAAI,CAAC1G,QAAQ,IAAI0G,KAAK,CAACkD,MAAM,KAAKJ,UAAW,EAAE;MACjD9C,KAAK,CAACmD,cAAc,CAAC,CAAC,CAAC,CAAC;MACxB,IAAI,CAACzB,IAAI,CAAC,CAAC;IACf,CAAC,MACI,IAAI,CAAC,IAAI,CAACpI,QAAQ,EAAE;MACrB,MAAM8J,wBAAwB,GAAG,IAAI,CAACf,QAAQ;MAC9CW,OAAO,CAACK,SAAS,CAACrD,KAAK,CAAC;MACxB,MAAMsD,cAAc,GAAG,IAAI,CAACjB,QAAQ;MACpC;MACA,IAAIiB,cAAc,IAAIF,wBAAwB,KAAKE,cAAc,EAAE;QAC/D;QACA;QACA,IAAI,CAACzF,cAAc,CAAC0F,QAAQ,CAACD,cAAc,CAACd,SAAS,EAAE,KAAK,CAAC;MACjE;IACJ;EACJ;EACA;EACAG,kBAAkBA,CAAC3C,KAAK,EAAE;IACtB,MAAMgD,OAAO,GAAG,IAAI,CAAC7B,WAAW;IAChC,MAAM0B,OAAO,GAAG7C,KAAK,CAAC6C,OAAO;IAC7B,MAAMC,UAAU,GAAGD,OAAO,KAAK3N,UAAU,IAAI2N,OAAO,KAAK1N,QAAQ;IACjE,MAAM8N,QAAQ,GAAGD,OAAO,CAACC,QAAQ,CAAC,CAAC;IACnC,IAAIH,UAAU,IAAI9C,KAAK,CAACkD,MAAM,EAAE;MAC5B;MACAlD,KAAK,CAACmD,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC1B,KAAK,CAAC,CAAC;MACZ;MACA;IACJ,CAAC,MACI,IAAI,CAACwB,QAAQ,KACbJ,OAAO,KAAKvN,KAAK,IAAIuN,OAAO,KAAKtN,KAAK,CAAC,IACxCyN,OAAO,CAACQ,UAAU,IAClB,CAAChO,cAAc,CAACwK,KAAK,CAAC,EAAE;MACxBA,KAAK,CAACmD,cAAc,CAAC,CAAC;MACtBH,OAAO,CAACQ,UAAU,CAACC,qBAAqB,CAAC,CAAC;IAC9C,CAAC,MACI,IAAI,CAACR,QAAQ,IAAI,IAAI,CAAC9G,SAAS,IAAI0G,OAAO,KAAKpN,CAAC,IAAIuK,KAAK,CAAC0D,OAAO,EAAE;MACpE1D,KAAK,CAACmD,cAAc,CAAC,CAAC;MACtB,MAAMQ,oBAAoB,GAAG,IAAI,CAAClF,OAAO,CAACmF,IAAI,CAACC,GAAG,IAAI,CAACA,GAAG,CAAC7C,QAAQ,IAAI,CAAC6C,GAAG,CAACxB,QAAQ,CAAC;MACrF,IAAI,CAAC5D,OAAO,CAACyB,OAAO,CAACtB,MAAM,IAAI;QAC3B,IAAI,CAACA,MAAM,CAACoC,QAAQ,EAAE;UAClB2C,oBAAoB,GAAG/E,MAAM,CAACuB,MAAM,CAAC,CAAC,GAAGvB,MAAM,CAACyB,QAAQ,CAAC,CAAC;QAC9D;MACJ,CAAC,CAAC;IACN,CAAC,MACI;MACD,MAAMyD,sBAAsB,GAAGd,OAAO,CAACe,eAAe;MACtDf,OAAO,CAACK,SAAS,CAACrD,KAAK,CAAC;MACxB,IAAI,IAAI,CAAC7D,SAAS,IACd2G,UAAU,IACV9C,KAAK,CAACgE,QAAQ,IACdhB,OAAO,CAACQ,UAAU,IAClBR,OAAO,CAACe,eAAe,KAAKD,sBAAsB,EAAE;QACpDd,OAAO,CAACQ,UAAU,CAACC,qBAAqB,CAAC,CAAC;MAC9C;IACJ;EACJ;EACAQ,QAAQA,CAAA,EAAG;IACP,IAAI,CAAC,IAAI,CAACjD,QAAQ,EAAE;MAChB,IAAI,CAACpF,QAAQ,GAAG,IAAI;MACpB,IAAI,CAACH,YAAY,CAAC5C,IAAI,CAAC,CAAC;IAC5B;EACJ;EACA;AACJ;AACA;AACA;EACIqL,OAAOA,CAAA,EAAG;IACN,IAAI,CAACtI,QAAQ,GAAG,KAAK;IACrB,IAAI,CAACuF,WAAW,EAAEgD,eAAe,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,CAACnD,QAAQ,IAAI,CAAC,IAAI,CAACpB,SAAS,EAAE;MACnC,IAAI,CAACzB,UAAU,CAAC,CAAC;MACjB,IAAI,CAACb,kBAAkB,CAACwE,YAAY,CAAC,CAAC;MACtC,IAAI,CAACrG,YAAY,CAAC5C,IAAI,CAAC,CAAC;IAC5B;EACJ;EACA;AACJ;AACA;EACIuL,WAAWA,CAAA,EAAG;IACV,IAAI,CAACC,WAAW,CAACC,cAAc,CAAC3F,IAAI,CAAC1I,IAAI,CAAC,CAAC,CAAC,CAAC,CAACyJ,SAAS,CAAC,MAAM;MAC1D,IAAI,CAACpC,kBAAkB,CAACiH,aAAa,CAAC,CAAC;MACvC,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAC9B,CAAC,CAAC;EACN;EACA;EACAtL,cAAcA,CAAA,EAAG;IACb,OAAO,IAAI,CAACwE,gBAAgB,GAAI,OAAM,IAAI,CAACA,gBAAgB,CAAC+G,KAAM,EAAC,GAAG,EAAE;EAC5E;EACA;EACA,IAAInC,KAAKA,CAAA,EAAG;IACR,OAAO,CAAC,IAAI,CAAClG,eAAe,IAAI,IAAI,CAACA,eAAe,CAACsI,OAAO,CAAC,CAAC;EAClE;EACA/H,oBAAoBA,CAAA,EAAG;IACnB;IACA;IACAgI,OAAO,CAACC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,MAAM;MACzB,IAAI,IAAI,CAACrJ,SAAS,EAAE;QAChB,IAAI,CAACoB,MAAM,GAAG,IAAI,CAACpB,SAAS,CAACN,KAAK;MACtC;MACA,IAAI,CAAC4J,oBAAoB,CAAC,IAAI,CAAClI,MAAM,CAAC;MACtC,IAAI,CAACnB,YAAY,CAAC5C,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;EACN;EACA;AACJ;AACA;AACA;EACIiM,oBAAoBA,CAAC5J,KAAK,EAAE;IACxB,IAAI,CAACuD,OAAO,CAACyB,OAAO,CAACtB,MAAM,IAAIA,MAAM,CAACmG,iBAAiB,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC3I,eAAe,CAAC4I,KAAK,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC1L,QAAQ,IAAI4B,KAAK,EAAE;MACxB,IAAI,CAAC+J,KAAK,CAACC,OAAO,CAAChK,KAAK,CAAC,KAAK,OAAOmB,SAAS,KAAK,WAAW,IAAIA,SAAS,CAAC,EAAE;QAC1E,MAAMpC,8BAA8B,CAAC,CAAC;MAC1C;MACAiB,KAAK,CAACgF,OAAO,CAAEiF,YAAY,IAAK,IAAI,CAACC,oBAAoB,CAACD,YAAY,CAAC,CAAC;MACxE,IAAI,CAACE,WAAW,CAAC,CAAC;IACtB,CAAC,MACI;MACD,MAAMC,mBAAmB,GAAG,IAAI,CAACF,oBAAoB,CAAClK,KAAK,CAAC;MAC5D;MACA;MACA,IAAIoK,mBAAmB,EAAE;QACrB,IAAI,CAACnE,WAAW,CAACoE,gBAAgB,CAACD,mBAAmB,CAAC;MAC1D,CAAC,MACI,IAAI,CAAC,IAAI,CAAC1F,SAAS,EAAE;QACtB;QACA;QACA,IAAI,CAACuB,WAAW,CAACoE,gBAAgB,CAAC,CAAC,CAAC,CAAC;MACzC;IACJ;IACA,IAAI,CAACjI,kBAAkB,CAACwE,YAAY,CAAC,CAAC;EAC1C;EACA;AACJ;AACA;AACA;EACIsD,oBAAoBA,CAAClK,KAAK,EAAE;IACxB,MAAMoK,mBAAmB,GAAG,IAAI,CAAC7G,OAAO,CAAC+G,IAAI,CAAE5G,MAAM,IAAK;MACtD;MACA;MACA,IAAI,IAAI,CAACxC,eAAe,CAACqJ,UAAU,CAAC7G,MAAM,CAAC,EAAE;QACzC,OAAO,KAAK;MAChB;MACA,IAAI;QACA;QACA,OAAOA,MAAM,CAAC1D,KAAK,IAAI,IAAI,IAAI,IAAI,CAACuB,YAAY,CAACmC,MAAM,CAAC1D,KAAK,EAAEA,KAAK,CAAC;MACzE,CAAC,CACD,OAAOwK,KAAK,EAAE;QACV,IAAI,OAAOrJ,SAAS,KAAK,WAAW,IAAIA,SAAS,EAAE;UAC/C;UACAsJ,OAAO,CAACC,IAAI,CAACF,KAAK,CAAC;QACvB;QACA,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IACF,IAAIJ,mBAAmB,EAAE;MACrB,IAAI,CAAClJ,eAAe,CAAC+D,MAAM,CAACmF,mBAAmB,CAAC;IACpD;IACA,OAAOA,mBAAmB;EAC9B;EACA;EACAvI,YAAYA,CAACF,QAAQ,EAAE;IACnB;IACA,IAAIA,QAAQ,KAAK,IAAI,CAACD,MAAM,IAAK,IAAI,CAACT,SAAS,IAAI8I,KAAK,CAACC,OAAO,CAACrI,QAAQ,CAAE,EAAE;MACzE,IAAI,IAAI,CAAC4B,OAAO,EAAE;QACd,IAAI,CAACqG,oBAAoB,CAACjI,QAAQ,CAAC;MACvC;MACA,IAAI,CAACD,MAAM,GAAGC,QAAQ;MACtB,OAAO,IAAI;IACf;IACA,OAAO,KAAK;EAChB;EACA;EACAiD,eAAeA,CAAA,EAAG;IACd,IAAI,CAACqB,WAAW,GAAG,IAAItM,0BAA0B,CAAC,IAAI,CAAC4J,OAAO,CAAC,CAC1D2C,aAAa,CAAC,IAAI,CAAClE,0BAA0B,CAAC,CAC9C2I,uBAAuB,CAAC,CAAC,CACzBjE,yBAAyB,CAAC,IAAI,CAACG,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CACxD+D,cAAc,CAAC,CAAC,CAChBC,cAAc,CAAC,CAAC,CAChBC,uBAAuB,CAAC,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC7E,WAAW,CAAC8E,MAAM,CAACvG,SAAS,CAAC,MAAM;MACpC,IAAI,IAAI,CAACE,SAAS,EAAE;QAChB;QACA;QACA,IAAI,CAAC,IAAI,CAACtG,QAAQ,IAAI,IAAI,CAAC6H,WAAW,CAACqC,UAAU,EAAE;UAC/C,IAAI,CAACrC,WAAW,CAACqC,UAAU,CAACC,qBAAqB,CAAC,CAAC;QACvD;QACA;QACA;QACA,IAAI,CAACyC,KAAK,CAAC,CAAC;QACZ,IAAI,CAACzE,KAAK,CAAC,CAAC;MAChB;IACJ,CAAC,CAAC;IACF,IAAI,CAACN,WAAW,CAACgF,MAAM,CAACzG,SAAS,CAAC,MAAM;MACpC,IAAI,IAAI,CAAC7D,UAAU,IAAI,IAAI,CAACuK,KAAK,EAAE;QAC/B,IAAI,CAACC,qBAAqB,CAAC,IAAI,CAAClF,WAAW,CAAC4C,eAAe,IAAI,CAAC,CAAC;MACrE,CAAC,MACI,IAAI,CAAC,IAAI,CAAClI,UAAU,IAAI,CAAC,IAAI,CAACvC,QAAQ,IAAI,IAAI,CAAC6H,WAAW,CAACqC,UAAU,EAAE;QACxE,IAAI,CAACrC,WAAW,CAACqC,UAAU,CAACC,qBAAqB,CAAC,CAAC;MACvD;IACJ,CAAC,CAAC;EACN;EACA;EACAnD,aAAaA,CAAA,EAAG;IACZ,MAAMgG,kBAAkB,GAAGxQ,KAAK,CAAC,IAAI,CAAC2I,OAAO,CAACC,OAAO,EAAE,IAAI,CAACR,QAAQ,CAAC;IACrE,IAAI,CAACM,sBAAsB,CAACG,IAAI,CAACtI,SAAS,CAACiQ,kBAAkB,CAAC,CAAC,CAAC5G,SAAS,CAACM,KAAK,IAAI;MAC/E,IAAI,CAACuG,SAAS,CAACvG,KAAK,CAAC/E,MAAM,EAAE+E,KAAK,CAACwG,WAAW,CAAC;MAC/C,IAAIxG,KAAK,CAACwG,WAAW,IAAI,CAAC,IAAI,CAAClN,QAAQ,IAAI,IAAI,CAACuC,UAAU,EAAE;QACxD,IAAI,CAAC4F,KAAK,CAAC,CAAC;QACZ,IAAI,CAACyE,KAAK,CAAC,CAAC;MAChB;IACJ,CAAC,CAAC;IACF;IACA;IACApQ,KAAK,CAAC,GAAG,IAAI,CAAC2I,OAAO,CAACtI,GAAG,CAACyI,MAAM,IAAIA,MAAM,CAAC6H,aAAa,CAAC,CAAC,CACrD9H,IAAI,CAACtI,SAAS,CAACiQ,kBAAkB,CAAC,CAAC,CACnC5G,SAAS,CAAC,MAAM;MACjB;MACA;MACA;MACA,IAAI,CAACpC,kBAAkB,CAACiH,aAAa,CAAC,CAAC;MACvC,IAAI,CAAC9I,YAAY,CAAC5C,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;EACN;EACA;EACA0N,SAASA,CAAC3H,MAAM,EAAE4H,WAAW,EAAE;IAC3B,MAAME,WAAW,GAAG,IAAI,CAACtK,eAAe,CAACqJ,UAAU,CAAC7G,MAAM,CAAC;IAC3D,IAAIA,MAAM,CAAC1D,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAACiB,SAAS,EAAE;MACzCyC,MAAM,CAACyB,QAAQ,CAAC,CAAC;MACjB,IAAI,CAACjE,eAAe,CAAC4I,KAAK,CAAC,CAAC;MAC5B,IAAI,IAAI,CAAC9J,KAAK,IAAI,IAAI,EAAE;QACpB,IAAI,CAACyL,iBAAiB,CAAC/H,MAAM,CAAC1D,KAAK,CAAC;MACxC;IACJ,CAAC,MACI;MACD,IAAIwL,WAAW,KAAK9H,MAAM,CAACyD,QAAQ,EAAE;QACjCzD,MAAM,CAACyD,QAAQ,GACT,IAAI,CAACjG,eAAe,CAAC+D,MAAM,CAACvB,MAAM,CAAC,GACnC,IAAI,CAACxC,eAAe,CAACiE,QAAQ,CAACzB,MAAM,CAAC;MAC/C;MACA,IAAI4H,WAAW,EAAE;QACb,IAAI,CAACrF,WAAW,CAACyF,aAAa,CAAChI,MAAM,CAAC;MAC1C;MACA,IAAI,IAAI,CAACtF,QAAQ,EAAE;QACf,IAAI,CAAC+L,WAAW,CAAC,CAAC;QAClB,IAAImB,WAAW,EAAE;UACb;UACA;UACA;UACA;UACA,IAAI,CAACN,KAAK,CAAC,CAAC;QAChB;MACJ;IACJ;IACA,IAAIQ,WAAW,KAAK,IAAI,CAACtK,eAAe,CAACqJ,UAAU,CAAC7G,MAAM,CAAC,EAAE;MACzD,IAAI,CAAC+H,iBAAiB,CAAC,CAAC;IAC5B;IACA,IAAI,CAAClL,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACA;EACAwM,WAAWA,CAAA,EAAG;IACV,IAAI,IAAI,CAAC/L,QAAQ,EAAE;MACf,MAAMmF,OAAO,GAAG,IAAI,CAACA,OAAO,CAACoI,OAAO,CAAC,CAAC;MACtC,IAAI,CAACzK,eAAe,CAAC0K,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;QAChC,OAAO,IAAI,CAACC,cAAc,GACpB,IAAI,CAACA,cAAc,CAACF,CAAC,EAAEC,CAAC,EAAEvI,OAAO,CAAC,GAClCA,OAAO,CAACyI,OAAO,CAACH,CAAC,CAAC,GAAGtI,OAAO,CAACyI,OAAO,CAACF,CAAC,CAAC;MACjD,CAAC,CAAC;MACF,IAAI,CAACvL,YAAY,CAAC5C,IAAI,CAAC,CAAC;IAC5B;EACJ;EACA;EACA8N,iBAAiBA,CAACQ,aAAa,EAAE;IAC7B,IAAIC,WAAW,GAAG,IAAI;IACtB,IAAI,IAAI,CAAC9N,QAAQ,EAAE;MACf8N,WAAW,GAAG,IAAI,CAAC/E,QAAQ,CAAClM,GAAG,CAACyI,MAAM,IAAIA,MAAM,CAAC1D,KAAK,CAAC;IAC3D,CAAC,MACI;MACDkM,WAAW,GAAG,IAAI,CAAC/E,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACnH,KAAK,GAAGiM,aAAa;IACrE;IACA,IAAI,CAACvK,MAAM,GAAGwK,WAAW;IACzB,IAAI,CAAChI,WAAW,CAACiI,IAAI,CAACD,WAAW,CAAC;IAClC,IAAI,CAACpK,SAAS,CAACoK,WAAW,CAAC;IAC3B,IAAI,CAACjI,eAAe,CAACkI,IAAI,CAAC,IAAI,CAACC,eAAe,CAACF,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC9J,kBAAkB,CAACwE,YAAY,CAAC,CAAC;EAC1C;EACA;AACJ;AACA;AACA;EACID,uBAAuBA,CAAA,EAAG;IACtB,IAAI,IAAI,CAACV,WAAW,EAAE;MAClB,IAAI,IAAI,CAACmB,KAAK,EAAE;QACZ,IAAI,CAACnB,WAAW,CAACoG,kBAAkB,CAAC,CAAC;MACzC,CAAC,MACI;QACD,IAAI,CAACpG,WAAW,CAACyF,aAAa,CAAC,IAAI,CAACxK,eAAe,CAACiG,QAAQ,CAAC,CAAC,CAAC,CAAC;MACpE;IACJ;EACJ;EACA;EACAV,QAAQA,CAAA,EAAG;IACP,OAAO,CAAC,IAAI,CAAC9F,UAAU,IAAI,CAAC,IAAI,CAACmF,QAAQ,IAAI,IAAI,CAACvC,OAAO,EAAE+I,MAAM,GAAG,CAAC;EACzE;EACA;EACAtB,KAAKA,CAACzH,OAAO,EAAE;IACX,IAAI,CAACrD,WAAW,CAACuF,aAAa,CAACuF,KAAK,CAACzH,OAAO,CAAC;EACjD;EACA;EACAjF,uBAAuBA,CAAA,EAAG;IACtB,IAAI,IAAI,CAACD,SAAS,EAAE;MAChB,OAAO,IAAI;IACf;IACA,MAAMkO,OAAO,GAAG,IAAI,CAAC/J,gBAAgB,EAAEgK,UAAU,CAAC,CAAC;IACnD,MAAMC,eAAe,GAAGF,OAAO,GAAGA,OAAO,GAAG,GAAG,GAAG,EAAE;IACpD,OAAO,IAAI,CAACG,cAAc,GAAGD,eAAe,GAAG,IAAI,CAACC,cAAc,GAAGH,OAAO;EAChF;EACA;EACAI,wBAAwBA,CAAA,EAAG;IACvB,IAAI,IAAI,CAACjI,SAAS,IAAI,IAAI,CAACuB,WAAW,IAAI,IAAI,CAACA,WAAW,CAACqC,UAAU,EAAE;MACnE,OAAO,IAAI,CAACrC,WAAW,CAACqC,UAAU,CAACnK,EAAE;IACzC;IACA,OAAO,IAAI;EACf;EACA;EACAoH,yBAAyBA,CAAA,EAAG;IACxB,IAAI,IAAI,CAAClH,SAAS,EAAE;MAChB,OAAO,IAAI;IACf;IACA,MAAMkO,OAAO,GAAG,IAAI,CAAC/J,gBAAgB,EAAEgK,UAAU,CAAC,CAAC;IACnD,IAAIxM,KAAK,GAAG,CAACuM,OAAO,GAAGA,OAAO,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,CAACrJ,QAAQ;IAC1D,IAAI,IAAI,CAACwJ,cAAc,EAAE;MACrB1M,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC0M,cAAc;IACtC;IACA,OAAO1M,KAAK;EAChB;EACA;EACAyE,mBAAmBA,CAACmI,MAAM,EAAE;IACxB,IAAI,CAAC/I,YAAY,CAACsI,IAAI,CAACS,MAAM,CAAC;EAClC;EACA;AACJ;AACA;AACA;EACIC,iBAAiBA,CAACC,GAAG,EAAE;IACnB,IAAIA,GAAG,CAACR,MAAM,EAAE;MACZ,IAAI,CAACpM,WAAW,CAACuF,aAAa,CAACC,YAAY,CAAC,kBAAkB,EAAEoH,GAAG,CAACtF,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC,MACI;MACD,IAAI,CAACtH,WAAW,CAACuF,aAAa,CAACE,eAAe,CAAC,kBAAkB,CAAC;IACtE;EACJ;EACA;AACJ;AACA;AACA;EACIoH,gBAAgBA,CAAA,EAAG;IACf,IAAI,CAAC/B,KAAK,CAAC,CAAC;IACZ,IAAI,CAACxE,IAAI,CAAC,CAAC;EACf;EACA;AACJ;AACA;AACA;EACI,IAAIwG,gBAAgBA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACrM,UAAU,IAAI,CAAC,IAAI,CAACyG,KAAK,IAAK,IAAI,CAAC1G,QAAQ,IAAI,CAAC,CAAC,IAAI,CAACE,YAAa;EACnF;AACJ;AACAJ,cAAc,CAACyM,IAAI,YAAAC,uBAAAC,CAAA;EAAA,YAAAA,CAAA,IAA6F3M,cAAc,EAAxBjJ,EAAE,CAAA6V,iBAAA,CAAwC5T,EAAE,CAAC6T,aAAa,GAA1D9V,EAAE,CAAA6V,iBAAA,CAAqE7V,EAAE,CAAC+V,iBAAiB,GAA3F/V,EAAE,CAAA6V,iBAAA,CAAsG7V,EAAE,CAACgW,MAAM,GAAjHhW,EAAE,CAAA6V,iBAAA,CAA4H5U,EAAE,CAACgV,iBAAiB,GAAlJjW,EAAE,CAAA6V,iBAAA,CAA6J7V,EAAE,CAACkW,UAAU,GAA5KlW,EAAE,CAAA6V,iBAAA,CAAuLxT,EAAE,CAAC8T,cAAc,MAA1MnW,EAAE,CAAA6V,iBAAA,CAAqO5S,EAAE,CAACmT,MAAM,MAAhPpW,EAAE,CAAA6V,iBAAA,CAA2Q5S,EAAE,CAACoT,kBAAkB,MAAlSrW,EAAE,CAAA6V,iBAAA,CAA6T/T,cAAc,MAA7U9B,EAAE,CAAA6V,iBAAA,CAAwW5S,EAAE,CAACqT,SAAS,OAAtXtW,EAAE,CAAAuW,iBAAA,CAA6Z,UAAU,GAAzavW,EAAE,CAAA6V,iBAAA,CAAqclO,0BAA0B,GAAje3H,EAAE,CAAA6V,iBAAA,CAA4e1T,EAAE,CAACqU,aAAa,GAA9fxW,EAAE,CAAA6V,iBAAA,CAAygB7N,iBAAiB;AAAA,CAA4D;AAC9rBiB,cAAc,CAACwN,IAAI,kBADmFzW,EAAE,CAAA0W,iBAAA;EAAAC,IAAA,EACJ1N,cAAc;EAAA2N,SAAA,WAAAC,qBAAApS,EAAA,EAAAC,GAAA;IAAA,IAAAD,EAAA;MADZzE,EAAE,CAAA8W,WAAA,CAAA1S,GAAA;MAAFpE,EAAE,CAAA8W,WAAA,CAAAzS,GAAA;MAAFrE,EAAE,CAAA8W,WAAA,CAC64BnX,mBAAmB;IAAA;IAAA,IAAA8E,EAAA;MAAA,IAAAsS,EAAA;MADl6B/W,EAAE,CAAAgX,cAAA,CAAAD,EAAA,GAAF/W,EAAE,CAAAiX,WAAA,QAAAvS,GAAA,CAAAb,OAAA,GAAAkT,EAAA,CAAAG,KAAA;MAAFlX,EAAE,CAAAgX,cAAA,CAAAD,EAAA,GAAF/W,EAAE,CAAAiX,WAAA,QAAAvS,GAAA,CAAAiP,KAAA,GAAAoD,EAAA,CAAAG,KAAA;MAAFlX,EAAE,CAAAgX,cAAA,CAAAD,EAAA,GAAF/W,EAAE,CAAAiX,WAAA,QAAAvS,GAAA,CAAAkN,WAAA,GAAAmF,EAAA,CAAAG,KAAA;IAAA;EAAA;EAAAC,MAAA;IAAAC,mBAAA,GAAFpX,EAAE,CAAAqX,YAAA,CAAAC,IAAA;IAAA5Q,UAAA;IAAAxB,WAAA;IAAAoE,QAAA;IAAAzC,QAAA;IAAAgD,sBAAA;IAAAE,WAAA;IAAAtB,KAAA;IAAA3B,SAAA,GAAF9G,EAAE,CAAAqX,YAAA,CAAAC,IAAA;IAAAnC,cAAA,GAAFnV,EAAE,CAAAqX,YAAA,CAAAC,IAAA;IAAAC,iBAAA;IAAA/M,yBAAA;IAAAgK,cAAA;IAAA5N,EAAA;EAAA;EAAA4Q,OAAA;IAAAlL,YAAA;IAAAC,aAAA;IAAAE,aAAA;IAAAC,eAAA;IAAAC,WAAA;EAAA;EAAA8K,QAAA,GAAFzX,EAAE,CAAA0X,0BAAA,EAAF1X,EAAE,CAAA2X,oBAAA;AAAA,EACm/B;AAC3lC;EAAA,QAAA/N,SAAA,oBAAAA,SAAA,KAFsG5J,EAAE,CAAA4X,iBAAA,CAER3O,cAAc,EAAc,CAAC;IACjH0N,IAAI,EAAExW;EACV,CAAC,CAAC,EAAkB,YAAY;IAAE,OAAO,CAAC;MAAEwW,IAAI,EAAE1U,EAAE,CAAC6T;IAAc,CAAC,EAAE;MAAEa,IAAI,EAAE3W,EAAE,CAAC+V;IAAkB,CAAC,EAAE;MAAEY,IAAI,EAAE3W,EAAE,CAACgW;IAAO,CAAC,EAAE;MAAEW,IAAI,EAAE1V,EAAE,CAACgV;IAAkB,CAAC,EAAE;MAAEU,IAAI,EAAE3W,EAAE,CAACkW;IAAW,CAAC,EAAE;MAAES,IAAI,EAAEtU,EAAE,CAAC8T,cAAc;MAAE0B,UAAU,EAAE,CAAC;QAChNlB,IAAI,EAAEvW;MACV,CAAC;IAAE,CAAC,EAAE;MAAEuW,IAAI,EAAE1T,EAAE,CAACmT,MAAM;MAAEyB,UAAU,EAAE,CAAC;QAClClB,IAAI,EAAEvW;MACV,CAAC;IAAE,CAAC,EAAE;MAAEuW,IAAI,EAAE1T,EAAE,CAACoT,kBAAkB;MAAEwB,UAAU,EAAE,CAAC;QAC9ClB,IAAI,EAAEvW;MACV,CAAC;IAAE,CAAC,EAAE;MAAEuW,IAAI,EAAE9U,EAAE,CAACiW,YAAY;MAAED,UAAU,EAAE,CAAC;QACxClB,IAAI,EAAEvW;MACV,CAAC,EAAE;QACCuW,IAAI,EAAEtW,MAAM;QACZ0X,IAAI,EAAE,CAACjW,cAAc;MACzB,CAAC;IAAE,CAAC,EAAE;MAAE6U,IAAI,EAAE1T,EAAE,CAACqT,SAAS;MAAEuB,UAAU,EAAE,CAAC;QACrClB,IAAI,EAAErW;MACV,CAAC,EAAE;QACCqW,IAAI,EAAEvW;MACV,CAAC;IAAE,CAAC,EAAE;MAAEuW,IAAI,EAAErI,SAAS;MAAEuJ,UAAU,EAAE,CAAC;QAClClB,IAAI,EAAEpW,SAAS;QACfwX,IAAI,EAAE,CAAC,UAAU;MACrB,CAAC;IAAE,CAAC,EAAE;MAAEpB,IAAI,EAAErI,SAAS;MAAEuJ,UAAU,EAAE,CAAC;QAClClB,IAAI,EAAEtW,MAAM;QACZ0X,IAAI,EAAE,CAACpQ,0BAA0B;MACrC,CAAC;IAAE,CAAC,EAAE;MAAEgP,IAAI,EAAExU,EAAE,CAACqU;IAAc,CAAC,EAAE;MAAEG,IAAI,EAAErI,SAAS;MAAEuJ,UAAU,EAAE,CAAC;QAC9DlB,IAAI,EAAEvW;MACV,CAAC,EAAE;QACCuW,IAAI,EAAEtW,MAAM;QACZ0X,IAAI,EAAE,CAAC/P,iBAAiB;MAC5B,CAAC;IAAE,CAAC,CAAC;EAAE,CAAC,EAAkB;IAAEoP,mBAAmB,EAAE,CAAC;MAClDT,IAAI,EAAEnW,KAAK;MACXuX,IAAI,EAAE,CAAC,kBAAkB;IAC7B,CAAC,CAAC;IAAElU,OAAO,EAAE,CAAC;MACV8S,IAAI,EAAElW,SAAS;MACfsX,IAAI,EAAE,CAAC,SAAS;IACpB,CAAC,CAAC;IAAEpE,KAAK,EAAE,CAAC;MACRgD,IAAI,EAAElW,SAAS;MACfsX,IAAI,EAAE,CAAC,OAAO;IAClB,CAAC,CAAC;IAAEnG,WAAW,EAAE,CAAC;MACd+E,IAAI,EAAElW,SAAS;MACfsX,IAAI,EAAE,CAACpY,mBAAmB;IAC9B,CAAC,CAAC;IAAE+G,UAAU,EAAE,CAAC;MACbiQ,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAE0E,WAAW,EAAE,CAAC;MACdyR,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAE8I,QAAQ,EAAE,CAAC;MACXqN,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEqG,QAAQ,EAAE,CAAC;MACX8P,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEqJ,sBAAsB,EAAE,CAAC;MACzB8M,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEuJ,WAAW,EAAE,CAAC;MACd4M,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEiI,KAAK,EAAE,CAAC;MACRkO,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEsG,SAAS,EAAE,CAAC;MACZ6P,IAAI,EAAEnW,KAAK;MACXuX,IAAI,EAAE,CAAC,YAAY;IACvB,CAAC,CAAC;IAAE5C,cAAc,EAAE,CAAC;MACjBwB,IAAI,EAAEnW,KAAK;MACXuX,IAAI,EAAE,CAAC,iBAAiB;IAC5B,CAAC,CAAC;IAAER,iBAAiB,EAAE,CAAC;MACpBZ,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEgK,yBAAyB,EAAE,CAAC;MAC5BmM,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEgU,cAAc,EAAE,CAAC;MACjBmC,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAEoG,EAAE,EAAE,CAAC;MACL+P,IAAI,EAAEnW;IACV,CAAC,CAAC;IAAE8L,YAAY,EAAE,CAAC;MACfqK,IAAI,EAAEjW;IACV,CAAC,CAAC;IAAE6L,aAAa,EAAE,CAAC;MAChBoK,IAAI,EAAEjW,MAAM;MACZqX,IAAI,EAAE,CAAC,QAAQ;IACnB,CAAC,CAAC;IAAEtL,aAAa,EAAE,CAAC;MAChBkK,IAAI,EAAEjW,MAAM;MACZqX,IAAI,EAAE,CAAC,QAAQ;IACnB,CAAC,CAAC;IAAErL,eAAe,EAAE,CAAC;MAClBiK,IAAI,EAAEjW;IACV,CAAC,CAAC;IAAEiM,WAAW,EAAE,CAAC;MACdgK,IAAI,EAAEjW;IACV,CAAC;EAAE,CAAC;AAAA;AAChB;AACA;AACA;AACA,MAAMsX,gBAAgB,CAAC;AAEvBA,gBAAgB,CAACtC,IAAI,YAAAuC,yBAAArC,CAAA;EAAA,YAAAA,CAAA,IAA6FoC,gBAAgB;AAAA,CAAmD;AACrLA,gBAAgB,CAACvB,IAAI,kBAzFiFzW,EAAE,CAAA0W,iBAAA;EAAAC,IAAA,EAyFFqB,gBAAgB;EAAAE,SAAA;EAAAT,QAAA,GAzFhBzX,EAAE,CAAAmY,kBAAA,CAyF2D,CAAC;IAAEjQ,OAAO,EAAEG,kBAAkB;IAAE+P,WAAW,EAAEJ;EAAiB,CAAC,CAAC;AAAA,EAAiB;AACpP;EAAA,QAAApO,SAAA,oBAAAA,SAAA,KA1FsG5J,EAAE,CAAA4X,iBAAA,CA0FRI,gBAAgB,EAAc,CAAC;IACnHrB,IAAI,EAAExW,SAAS;IACf4X,IAAI,EAAE,CAAC;MACCM,QAAQ,EAAE,oBAAoB;MAC9BC,SAAS,EAAE,CAAC;QAAEpQ,OAAO,EAAEG,kBAAkB;QAAE+P,WAAW,EAAEJ;MAAiB,CAAC;IAC9E,CAAC;EACT,CAAC,CAAC;AAAA;AACV,MAAMO,SAAS,SAAStP,cAAc,CAAC;EACnCV,WAAWA,CAAA,EAAG;IACV,KAAK,CAAC,GAAGiQ,SAAS,CAAC;IACnB,IAAI,CAACC,UAAU,GAAG,CACd;MACIC,OAAO,EAAE,OAAO;MAChBC,OAAO,EAAE,QAAQ;MACjBC,QAAQ,EAAE,OAAO;MACjBC,QAAQ,EAAE;IACd,CAAC,EACD;MACIH,OAAO,EAAE,OAAO;MAChBC,OAAO,EAAE,KAAK;MACdC,QAAQ,EAAE,OAAO;MACjBC,QAAQ,EAAE,QAAQ;MAClBnS,UAAU,EAAE;IAChB,CAAC,CACJ;IACD,IAAI,CAACoS,6BAA6B,GAAG,IAAI,CAACzN,eAAe,EAAE0N,4BAA4B,IAAI,KAAK;EACpG;EACA,IAAItD,gBAAgBA,CAAA,EAAG;IACnB;IACA;IACA,OAAO,IAAI,CAACtI,SAAS,IAAI,CAAC,IAAI,CAAC0C,KAAK,IAAK,IAAI,CAAC3G,OAAO,IAAI,CAAC,CAAC,IAAI,CAAChE,WAAY;EAChF;EACA8H,QAAQA,CAAA,EAAG;IACP,KAAK,CAACA,QAAQ,CAAC,CAAC;IAChB,IAAI,CAACpC,cAAc,CACd8I,MAAM,CAAC,CAAC,CACRxH,IAAI,CAACtI,SAAS,CAAC,IAAI,CAAC6H,QAAQ,CAAC,CAAC,CAC9BwB,SAAS,CAAC,MAAM;MACjB,IAAI,IAAI,CAACE,SAAS,EAAE;QAChB,IAAI,CAAC6L,aAAa,GAAG,IAAI,CAACC,gBAAgB,CAAC,CAAC;QAC5C,IAAI,CAACpO,kBAAkB,CAACiH,aAAa,CAAC,CAAC;MAC3C;IACJ,CAAC,CAAC;EACN;EACAoH,eAAeA,CAAA,EAAG;IACd;IACA;IACA,IAAI,IAAI,CAACjO,gBAAgB,EAAE;MACvB,IAAI,CAACkO,uBAAuB,GAAG,IAAI,CAAClO,gBAAgB,CAACmO,yBAAyB,CAAC,CAAC;IACpF;EACJ;EACAnK,IAAIA,CAAA,EAAG;IACH,IAAI,CAAC+J,aAAa,GAAG,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAC5C,KAAK,CAAChK,IAAI,CAAC,CAAC;IACZ;IACA,IAAI,CAACjG,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACA4I,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;IACb;IACA,IAAI,CAAChG,YAAY,CAAC5C,IAAI,CAAC,CAAC;EAC5B;EACA;EACAwN,qBAAqBA,CAACyF,KAAK,EAAE;IACzB,MAAMlN,MAAM,GAAG,IAAI,CAACH,OAAO,CAACoI,OAAO,CAAC,CAAC,CAACiF,KAAK,CAAC;IAC5C,IAAIlN,MAAM,EAAE;MACR,MAAMwH,KAAK,GAAG,IAAI,CAACA,KAAK,CAACzF,aAAa;MACtC,MAAMoL,UAAU,GAAGhY,6BAA6B,CAAC+X,KAAK,EAAE,IAAI,CAACrN,OAAO,EAAE,IAAI,CAACuN,YAAY,CAAC;MACxF,MAAMtL,OAAO,GAAG9B,MAAM,CAACqN,eAAe,CAAC,CAAC;MACxC,IAAIH,KAAK,KAAK,CAAC,IAAIC,UAAU,KAAK,CAAC,EAAE;QACjC;QACA;QACA;QACA3F,KAAK,CAAC8F,SAAS,GAAG,CAAC;MACvB,CAAC,MACI;QACD9F,KAAK,CAAC8F,SAAS,GAAGlY,wBAAwB,CAAC0M,OAAO,CAACyL,SAAS,EAAEzL,OAAO,CAAC0L,YAAY,EAAEhG,KAAK,CAAC8F,SAAS,EAAE9F,KAAK,CAACgG,YAAY,CAAC;MAC5H;IACJ;EACJ;EACA5H,mBAAmBA,CAAA,EAAG;IAClB,IAAI,CAAC6B,qBAAqB,CAAC,IAAI,CAAClF,WAAW,CAAC4C,eAAe,IAAI,CAAC,CAAC;EACrE;EACAuD,eAAeA,CAACpM,KAAK,EAAE;IACnB,OAAO,IAAIH,eAAe,CAAC,IAAI,EAAEG,KAAK,CAAC;EAC3C;EACA;EACAwQ,gBAAgBA,CAAA,EAAG;IACf,MAAMW,YAAY,GAAG,IAAI,CAACT,uBAAuB,YAAYvZ,gBAAgB,GACvE,IAAI,CAACuZ,uBAAuB,CAACpO,UAAU,GACvC,IAAI,CAACoO,uBAAuB,IAAI,IAAI,CAACxQ,WAAW;IACtD,OAAOiR,YAAY,CAAC1L,aAAa,CAAC2L,qBAAqB,CAAC,CAAC,CAACC,KAAK;EACnE;EACA;EACA,IAAIf,4BAA4BA,CAAA,EAAG;IAC/B,OAAO,IAAI,CAACD,6BAA6B;EAC7C;EACA,IAAIC,4BAA4BA,CAACtQ,KAAK,EAAE;IACpC,IAAI,CAACqQ,6BAA6B,GAAGxW,qBAAqB,CAACmG,KAAK,CAAC;IACjE,IAAI,CAACsR,qBAAqB,CAAC,CAAC;EAChC;EACA;EACAA,qBAAqBA,CAAA,EAAG;IACpB,IAAI,IAAI,CAAC/N,OAAO,EAAE;MACd,KAAK,MAAMG,MAAM,IAAI,IAAI,CAACH,OAAO,EAAE;QAC/BG,MAAM,CAACtB,kBAAkB,CAACwE,YAAY,CAAC,CAAC;MAC5C;IACJ;EACJ;AACJ;AACAkJ,SAAS,CAAC7C,IAAI;EAAA,IAAAsE,sBAAA;EAAA,gBAAAC,kBAAArE,CAAA;IAAA,QAAAoE,sBAAA,KAAAA,sBAAA,GAxMwFha,EAAE,CAAAka,qBAAA,CAwMG3B,SAAS,IAAA3C,CAAA,IAAT2C,SAAS;EAAA;AAAA,IAAqD;AACzKA,SAAS,CAAC4B,IAAI,kBAzMwFna,EAAE,CAAAoa,iBAAA;EAAAzD,IAAA,EAyMT4B,SAAS;EAAAL,SAAA;EAAAmC,cAAA,WAAAC,yBAAA7V,EAAA,EAAAC,GAAA,EAAA6V,QAAA;IAAA,IAAA9V,EAAA;MAzMFzE,EAAE,CAAAwa,cAAA,CAAAD,QAAA,EA4M9BlS,kBAAkB;MA5MUrI,EAAE,CAAAwa,cAAA,CAAAD,QAAA,EA4MiD9Y,SAAS;MA5M5DzB,EAAE,CAAAwa,cAAA,CAAAD,QAAA,EA4M4H7Y,YAAY;IAAA;IAAA,IAAA+C,EAAA;MAAA,IAAAsS,EAAA;MA5M1I/W,EAAE,CAAAgX,cAAA,CAAAD,EAAA,GAAF/W,EAAE,CAAAiX,WAAA,QAAAvS,GAAA,CAAAgB,aAAA,GAAAqR,EAAA,CAAAG,KAAA;MAAFlX,EAAE,CAAAgX,cAAA,CAAAD,EAAA,GAAF/W,EAAE,CAAAiX,WAAA,QAAAvS,GAAA,CAAAsH,OAAA,GAAA+K,EAAA;MAAF/W,EAAE,CAAAgX,cAAA,CAAAD,EAAA,GAAF/W,EAAE,CAAAiX,WAAA,QAAAvS,GAAA,CAAA6U,YAAA,GAAAxC,EAAA;IAAA;EAAA;EAAA0D,SAAA,WAyM8M,UAAU,uBAAuB,MAAM,mBAAmB,SAAS;EAAAC,QAAA;EAAAC,YAAA,WAAAC,uBAAAnW,EAAA,EAAAC,GAAA;IAAA,IAAAD,EAAA;MAzMnRzE,EAAE,CAAA8F,UAAA,qBAAA+U,qCAAA7U,MAAA;QAAA,OAyMTtB,GAAA,CAAA6B,cAAA,CAAAP,MAAqB,CAAC;MAAA,CAAd,CAAC,mBAAA8U,mCAAA;QAAA,OAATpW,GAAA,CAAA8M,QAAA,CAAS,CAAC;MAAA,CAAF,CAAC,kBAAAuJ,kCAAA;QAAA,OAATrW,GAAA,CAAA+M,OAAA,CAAQ,CAAC;MAAA,CAAD,CAAC;IAAA;IAAA,IAAAhN,EAAA;MAzMFzE,EAAE,CAAA2G,WAAA,OAAAjC,GAAA,CAAAkC,EAAA,cAAAlC,GAAA,CAAAwG,QAAA,mBAAAxG,GAAA,CAAAyI,SAAA,GAAAzI,GAAA,CAAAkC,EAAA,GAyMQ,QAAQ,GAAG,IAAI,mBAAAlC,GAAA,CAAAyI,SAAA,gBAAAzI,GAAA,CAAAoC,SAAA,IAAnB,IAAI,mBAAjBpC,GAAA,CAAA4E,QAAA,CAAA0R,QAAA,CAAkB,CAAC,mBAAnBtW,GAAA,CAAA6J,QAAA,CAAAyM,QAAA,CAAkB,CAAC,kBAAAtW,GAAA,CAAAuW,UAAA,2BAAnBvW,GAAA,CAAA0Q,wBAAA,CAAyB,CAAC;MAzMnBpV,EAAE,CAAAkb,WAAA,4BAAAxW,GAAA,CAAA6J,QAyMD,CAAC,2BAAA7J,GAAA,CAAAuW,UAAD,CAAC,4BAAAvW,GAAA,CAAA4E,QAAD,CAAC,yBAAA5E,GAAA,CAAAmL,KAAD,CAAC,4BAAAnL,GAAA,CAAAmC,QAAD,CAAC;IAAA;EAAA;EAAAsQ,MAAA;IAAA5I,QAAA;IAAA4M,aAAA;IAAAjQ,QAAA;IAAA6N,4BAAA;EAAA;EAAAqC,QAAA;EAAA3D,QAAA,GAzMFzX,EAAE,CAAAmY,kBAAA,CAyM8/B,CAC9lC;IAAEjQ,OAAO,EAAEnG,mBAAmB;IAAEqW,WAAW,EAAEG;EAAU,CAAC,EACxD;IAAErQ,OAAO,EAAE1G,2BAA2B;IAAE4W,WAAW,EAAEG;EAAU,CAAC,CACnE,GA5MiGvY,EAAE,CAAA0X,0BAAA;EAAA2D,kBAAA,EAAA9W,GAAA;EAAA+W,KAAA;EAAAC,IAAA;EAAAC,MAAA;EAAAC,QAAA,WAAAC,mBAAAjX,EAAA,EAAAC,GAAA;IAAA,IAAAD,EAAA;MAAA,MAAAkX,GAAA,GAAF3b,EAAE,CAAA6F,gBAAA;MAAF7F,EAAE,CAAA4b,eAAA,CAAAtX,GAAA;MAAFtE,EAAE,CAAA2E,cAAA,eA4MohC,CAAC;MA5MvhC3E,EAAE,CAAA8F,UAAA,mBAAA+V,wCAAA;QAAF7b,EAAE,CAAAiG,aAAA,CAAA0V,GAAA;QAAA,OAAF3b,EAAE,CAAAkG,WAAA,CA4My8BxB,GAAA,CAAAqK,MAAA,CAAO,CAAC;MAAA,CAAC,CAAC;MA5Mr9B/O,EAAE,CAAA2E,cAAA,YA4MwmC,CAAC;MA5M3mC3E,EAAE,CAAAwF,UAAA,IAAAhB,yBAAA,iBA4MwsC,CAAC,IAAAe,yBAAA,iBAA4H,CAAC;MA5Mx0CvF,EAAE,CAAA6E,YAAA,CA4M0gD,CAAC;MA5M7gD7E,EAAE,CAAA2E,cAAA,YA4M4jD,CAAC,YAAyC,CAAC;MA5MzmD3E,EAAE,CAAA8b,cAAA;MAAF9b,EAAE,CAAA2E,cAAA,YA4MkyD,CAAC;MA5MryD3E,EAAE,CAAA+b,SAAA,aA4Mw0D,CAAC;MA5M30D/b,EAAE,CAAA6E,YAAA,CA4Ms1D,CAAC,CAAW,CAAC,CAAS,CAAC,CAAO,CAAC;MA5Mv3D7E,EAAE,CAAAwF,UAAA,KAAAG,iCAAA,yBA4Ms9E,CAAC;MA5Mz9E3F,EAAE,CAAA8F,UAAA,2BAAAkW,yDAAA;QAAFhc,EAAE,CAAAiG,aAAA,CAAA0V,GAAA;QAAA,OAAF3b,EAAE,CAAAkG,WAAA,CA4Mu5ExB,GAAA,CAAAsK,KAAA,CAAM,CAAC;MAAA,CAAC,CAAC,oBAAAiN,kDAAA;QA5Ml6Ejc,EAAE,CAAAiG,aAAA,CAAA0V,GAAA;QAAA,OAAF3b,EAAE,CAAAkG,WAAA,CA4M+6ExB,GAAA,CAAAiN,WAAA,CAAY,CAAC;MAAA,CAAC,CAAC,oBAAAuK,kDAAA;QA5Mh8Elc,EAAE,CAAAiG,aAAA,CAAA0V,GAAA;QAAA,OAAF3b,EAAE,CAAAkG,WAAA,CA4M68ExB,GAAA,CAAAsK,KAAA,CAAM,CAAC;MAAA,CAAC,CAAC;IAAA;IAAA,IAAAvK,EAAA;MAAA,MAAA0X,wBAAA,GA5Mx9Enc,EAAE,CAAAoc,WAAA;MAAFpc,EAAE,CAAA2G,WAAA,cAAAjC,GAAA,CAAAyI,SAAA,GAAAzI,GAAA,CAAAkC,EAAA;MAAF5G,EAAE,CAAAgF,SAAA,EA4MglC,CAAC;MA5MnlChF,EAAE,CAAAyF,UAAA,aAAAf,GAAA,CAAAmL,KA4MglC,CAAC;MA5MnlC7P,EAAE,CAAA2G,WAAA,OAAAjC,GAAA,CAAAiH,QAAA;MAAF3L,EAAE,CAAAgF,SAAA,CA4MqsC,CAAC;MA5MxsChF,EAAE,CAAAyF,UAAA,qBA4MqsC,CAAC;MA5MxsCzF,EAAE,CAAAgF,SAAA,CA4MmyC,CAAC;MA5MtyChF,EAAE,CAAAyF,UAAA,sBA4MmyC,CAAC;MA5MtyCzF,EAAE,CAAAgF,SAAA,EA4MqmE,CAAC;MA5MxmEhF,EAAE,CAAAyF,UAAA,kCAAAf,GAAA,CAAAkH,kBA4MqmE,CAAC,sCAAAlH,GAAA,CAAAoI,eAA0D,CAAC,8BAAApI,GAAA,CAAAyU,uBAAA,IAAAgD,wBAAmF,CAAC,4BAAAzX,GAAA,CAAAyI,SAA0C,CAAC,iCAAAzI,GAAA,CAAA+T,UAAgD,CAAC,6BAAA/T,GAAA,CAAAsU,aAA+C,CAAC;IAAA;EAAA;EAAAqD,YAAA,GAA00Ivc,EAAE,CAACwc,OAAO,EAAoFxc,EAAE,CAACyc,QAAQ,EAA6Ezc,EAAE,CAAC0c,YAAY,EAAqF1c,EAAE,CAAC2c,eAAe,EAA8Dhd,EAAE,CAACE,mBAAmB,EAAk8BF,EAAE,CAACG,gBAAgB;EAAA8c,MAAA;EAAAC,aAAA;EAAAC,IAAA;IAAAC,SAAA,EAAyH,CAAC7V,mBAAmB,CAACG,cAAc;EAAC;EAAA2V,eAAA;AAAA,EAAiG;AACt4Q;EAAA,QAAAlT,SAAA,oBAAAA,SAAA,KA7MsG5J,EAAE,CAAA4X,iBAAA,CA6MRW,SAAS,EAAc,CAAC;IAC5G5B,IAAI,EAAEhW,SAAS;IACfoX,IAAI,EAAE,CAAC;MAAEM,QAAQ,EAAE,YAAY;MAAE+C,QAAQ,EAAE,WAAW;MAAEjE,MAAM,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC;MAAEwF,aAAa,EAAE/b,iBAAiB,CAAC0W,IAAI;MAAEwF,eAAe,EAAEjc,uBAAuB,CAACkc,MAAM;MAAEC,IAAI,EAAE;QAC7L,MAAM,EAAE,UAAU;QAClB,mBAAmB,EAAE,MAAM;QAC3B,eAAe,EAAE,SAAS;QAC1B,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,UAAU;QAC7B,sBAAsB,EAAE,kCAAkC;QAC1D,sBAAsB,EAAE,WAAW;QACnC,mBAAmB,EAAE,mBAAmB;QACxC,sBAAsB,EAAE,qBAAqB;QAC7C,sBAAsB,EAAE,qBAAqB;QAC7C,qBAAqB,EAAE,YAAY;QACnC,8BAA8B,EAAE,4BAA4B;QAC5D,iCAAiC,EAAE,UAAU;QAC7C,gCAAgC,EAAE,YAAY;QAC9C,iCAAiC,EAAE,UAAU;QAC7C,8BAA8B,EAAE,OAAO;QACvC,iCAAiC,EAAE,UAAU;QAC7C,WAAW,EAAE,wBAAwB;QACrC,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE;MACd,CAAC;MAAEC,UAAU,EAAE,CAACjW,mBAAmB,CAACG,cAAc,CAAC;MAAEmR,SAAS,EAAE,CAC5D;QAAEpQ,OAAO,EAAEnG,mBAAmB;QAAEqW,WAAW,EAAEG;MAAU,CAAC,EACxD;QAAErQ,OAAO,EAAE1G,2BAA2B;QAAE4W,WAAW,EAAEG;MAAU,CAAC,CACnE;MAAEkD,QAAQ,EAAE,g0FAAg0F;MAAEiB,MAAM,EAAE,CAAC,2mHAA2mH;IAAE,CAAC;EACl9M,CAAC,CAAC,QAAkB;IAAE1Q,OAAO,EAAE,CAAC;MACxB2K,IAAI,EAAE7V,eAAe;MACrBiX,IAAI,EAAE,CAACtW,SAAS,EAAE;QAAEyb,WAAW,EAAE;MAAK,CAAC;IAC3C,CAAC,CAAC;IAAE3D,YAAY,EAAE,CAAC;MACf5C,IAAI,EAAE7V,eAAe;MACrBiX,IAAI,EAAE,CAACrW,YAAY,EAAE;QAAEwb,WAAW,EAAE;MAAK,CAAC;IAC9C,CAAC,CAAC;IAAExX,aAAa,EAAE,CAAC;MAChBiR,IAAI,EAAE5V,YAAY;MAClBgX,IAAI,EAAE,CAAC1P,kBAAkB;IAC7B,CAAC,CAAC;IAAE0Q,4BAA4B,EAAE,CAAC;MAC/BpC,IAAI,EAAEnW;IACV,CAAC;EAAE,CAAC;AAAA;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM2c,eAAe,CAAC;AAEtBA,eAAe,CAACzH,IAAI,YAAA0H,wBAAAxH,CAAA;EAAA,YAAAA,CAAA,IAA6FuH,eAAe;AAAA,CAAkD;AAClLA,eAAe,CAACE,IAAI,kBAhQkFrd,EAAE,CAAAsd,gBAAA;EAAA3G,IAAA,EAgQUwG;AAAe,EAKtG;AAC3BA,eAAe,CAACI,IAAI,kBAtQkFvd,EAAE,CAAAwd,gBAAA;EAAAlF,SAAA,EAsQsC,CAACrQ,mCAAmC,CAAC;EAAAwV,OAAA,GAAY1d,YAAY,EAAEF,aAAa,EAAE8B,eAAe,EAAEC,eAAe,EAAEM,mBAAmB,EACzQF,kBAAkB,EAClBL,eAAe,EACfC,eAAe;AAAA,EAAI;AAC3B;EAAA,QAAAgI,SAAA,oBAAAA,SAAA,KA1QsG5J,EAAE,CAAA4X,iBAAA,CA0QRuF,eAAe,EAAc,CAAC;IAClHxG,IAAI,EAAE3V,QAAQ;IACd+W,IAAI,EAAE,CAAC;MACC0F,OAAO,EAAE,CAAC1d,YAAY,EAAEF,aAAa,EAAE8B,eAAe,EAAEC,eAAe,CAAC;MACxE8b,OAAO,EAAE,CACLxb,mBAAmB,EACnBF,kBAAkB,EAClBuW,SAAS,EACTP,gBAAgB,EAChBrW,eAAe,EACfC,eAAe,CAClB;MACD+b,YAAY,EAAE,CAACpF,SAAS,EAAEP,gBAAgB,CAAC;MAC3CM,SAAS,EAAE,CAACrQ,mCAAmC;IACnD,CAAC;EACT,CAAC,CAAC;AAAA;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAASD,iBAAiB,EAAEL,0BAA0B,EAAEM,mCAAmC,EAAEL,2CAA2C,EAAES,kBAAkB,EAAEkQ,SAAS,EAAEjQ,eAAe,EAAE6U,eAAe,EAAEnF,gBAAgB,EAAE/O,cAAc,EAAEjC,mBAAmB","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}