{"version":3,"file":"bootstrap-vue-next.mjs","sources":["../src/composables/useAlignment.ts","../src/composables/useAriaInvalid.ts","../src/utils/classes/BvEvent.ts","../src/utils/classes/BvTriggerableEvent.ts","../src/utils/classes/BvCarouselEvent.ts","../src/utils/dom.ts","../src/utils/event.ts","../src/utils/filterEvent.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.6.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.6.3/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+vue@1.0.6_vue@3.4.25/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../src/utils/sanitizer.ts","../../../node_modules/.pnpm/@vueuse+shared@10.9.0_vue@3.4.25/node_modules/@vueuse/shared/index.mjs","../../../node_modules/.pnpm/@vueuse+core@10.9.0_vue@3.4.25/node_modules/@vueuse/core/index.mjs","../src/components/BPopover.vue","../src/utils/floatingUi.ts","../src/utils/formatItem.ts","../src/utils/getBreakpointProps.ts","../src/utils/getClasses.ts","../src/utils/getElement.ts","../src/utils/getSlotElements.ts","../src/constants/regex.ts","../src/utils/stringUtils.ts","../src/utils/getTableFieldHeadLabel.ts","../src/utils/isLink.ts","../src/utils/keys.ts","../src/utils/normalizeSlot.ts","../src/utils/object.ts","../src/utils/parseActiveImports.ts","../src/utils/props.ts","../src/composables/useBLinkHelper.ts","../src/composables/useBreadcrumb.ts","../src/composables/useColorMode.ts","../src/composables/useColorVariantClasses.ts","../src/composables/useContainerClasses.ts","../src/composables/useCountdown.ts","../src/composables/useStateClass.ts","../src/composables/useFormCheck.ts","../src/composables/useId.ts","../src/composables/useFormInput.ts","../src/composables/useFormSelect.ts","../src/composables/useModalManager.ts","../src/composables/useModal.ts","../src/composables/useModalController.ts","../src/composables/useNumberishToStyle.ts","../src/composables/useRadiusElementClasses.ts","../src/composables/useRtl.ts","../src/composables/useSafeScrollLock.ts","../src/composables/useScrollspy.ts","../src/composables/useToast.ts","../src/components/BTransition/BTransition.vue","../src/components/BButton/BCloseButton.vue","../src/components/BLink/BLink.vue","../src/components/BProgress/BProgressBar.vue","../src/components/BProgress/BProgress.vue","../src/components/BToast/BToast.vue","../src/plugins/toastPlugin.ts","../src/plugins/breadcrumbPlugin.ts","../src/plugins/idPlugin.ts","../src/components/BSpinner.vue","../src/components/BButton/BButton.vue","../src/components/BOverlay/BOverlay.vue","../src/components/BModal/BModal.vue","../src/plugins/modalControllerPlugin.ts","../src/plugins/modalManagerPlugin.ts","../src/plugins/rtlPlugin.ts","../src/components/BAccordion/BAccordion.vue","../src/components/BCollapse.vue","../src/components/BAccordion/BAccordionItem.vue","../src/components/BAlert/BAlert.vue","../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatarGroup.vue","../src/components/BBadge/BBadge.vue","../src/components/BBreadcrumb/BBreadcrumbItem.vue","../src/components/BBreadcrumb/BBreadcrumb.vue","../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonToolbar.vue","../src/components/BImg.vue","../src/components/BCard/BCardImg.vue","../src/components/BCard/BCardHeadFoot.vue","../src/components/BCard/BCardHeader.vue","../src/components/BCard/BCardSubtitle.vue","../src/components/BCard/BCardBody.vue","../src/components/BCard/BCardFooter.vue","../src/components/BCard/BCard.vue","../src/components/BCard/BCardGroup.vue","../src/components/BCarousel/BCarousel.vue","../src/components/BCarousel/BCarouselSlide.vue","../src/components/BCol.vue","../src/components/BContainer.vue","../src/components/BDropdown/BDropdown.vue","../src/components/BDropdown/BDropdownGroup.vue","../src/components/BDropdown/BDropdownItem.vue","../src/components/BDropdown/BDropdownItemButton.vue","../src/components/BForm/BForm.vue","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormValidFeedback.vue","../src/components/RenderComponentOrSkip.vue","../src/components/BFormCheckbox/BFormCheckbox.vue","../src/components/BFormCheckbox/BFormCheckboxGroup.vue","../src/components/BFormFile/BFormFile.vue","../src/components/BFormGroup/BFormGroup.vue","../src/components/BFormInput/BFormInput.vue","../src/components/BFormRadio/BFormRadio.vue","../src/components/BFormRadio/BFormRadioGroup.vue","../src/components/BFormSelect/BFormSelectOption.vue","../src/components/BFormSelect/BFormSelectOptionGroup.vue","../src/components/BFormSelect/BFormSelect.vue","../src/constants/codes.ts","../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BInputGroup/BInputGroup.vue","../src/components/BInputGroup/BInputGroupAddon.vue","../src/components/BListGroup/BListGroup.vue","../src/components/BListGroup/BListGroupItem.vue","../src/components/BModal/BModalOrchestrator.vue","../src/components/BNav/BNav.vue","../src/components/BNav/BNavForm.vue","../src/components/BNav/BNavItem.vue","../src/components/BNav/BNavItemDropdown.vue","../src/components/BNavbar/BNavbar.vue","../src/components/BNavbar/BNavbarBrand.vue","../src/components/BNavbar/BNavbarNav.vue","../src/directives/BColorMode.ts","../src/directives/BToggle.ts","../src/directives/BPopover.ts","../src/directives/BScrollspy.ts","../src/directives/BTooltip.ts","../src/components/BNavbar/BNavbarToggle.vue","../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BPagination/BPagination.vue","../src/components/BPlaceholder/BPlaceholder.vue","../src/components/BPlaceholder/BPlaceholderButton.vue","../src/components/BPlaceholder/BPlaceholderCard.vue","../src/components/BTable/BTableSimple.vue","../src/components/BPlaceholder/BPlaceholderTable.vue","../src/components/BPlaceholder/BPlaceholderWrapper.vue","../src/components/BRow.vue","../src/types/TableTypes.ts","../src/components/BTable/BTbody.vue","../src/components/BTable/BTd.vue","../src/components/BTable/BTfoot.vue","../src/components/BTable/BTh.vue","../src/components/BTable/BThead.vue","../src/components/BTable/BTr.vue","../src/components/BTable/BTableLite.vue","../src/components/BTable/BTable.vue","../src/components/BTabs/BTab.vue","../src/components/BTabs/BTabs.vue","../src/components/BToast/BToastOrchestrator.vue","../src/components/BTooltip.vue","../src/BootstrapVue.ts"],"sourcesContent":["import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {AlignmentJustifyContent} from '../types'\n\nexport default (align: MaybeRefOrGetter<AlignmentJustifyContent | undefined>) =>\n  computed(() => {\n    const value = toValue(align)\n    return !value ? '' : `justify-content-${value}`\n  })\n","import type {AriaInvalid} from '../types'\nimport {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (\n  ariaInvalid: MaybeRefOrGetter<AriaInvalid | undefined>,\n  state: MaybeRefOrGetter<boolean | null | undefined>\n) =>\n  computed(() => {\n    const resolvedAriaInvalid = toValue(ariaInvalid)\n    const resolvedState = toValue(state)\n\n    const resolvedAriaInvalidValue =\n      resolvedAriaInvalid === true\n        ? 'true'\n        : typeof resolvedAriaInvalid === 'string'\n          ? resolvedAriaInvalid\n          : resolvedState === false\n            ? 'true'\n            : resolvedAriaInvalid === false\n              ? 'false'\n              : undefined\n\n    return resolvedAriaInvalidValue\n  })\n","/**\n * Items that are omitted from the BvEventInit constructor arg\n */\nexport type BvEventConstructorOmittables = 'eventType' | 'defaultPrevented'\n\nexport default class BvEvent {\n  readonly cancelable: boolean = true\n  readonly componentId: string | null = null\n  private _defaultPrevented = false\n  readonly eventType: string = ''\n  readonly nativeEvent: string | null = null\n  private _preventDefault: () => void\n  readonly relatedTarget: EventTarget | null = null\n  readonly target: EventTarget | null = null\n  // Readable by everyone,\n  // But only overwritten by inherrited constructors\n  public get defaultPrevented() {\n    return this._defaultPrevented\n  }\n  protected set defaultPrevented(prop) {\n    this._defaultPrevented = prop\n  }\n  // I think this is right\n  // We want to be able to have it callable to everyone,\n  // But only overwritten by inherrited constructors\n  public get preventDefault() {\n    return this._preventDefault\n  }\n  // This may not be correct, because it doesn't get correct type inferences in children\n  // Ex overwrite this.preventDefault = () => true is valid. Could be a TS issue\n  protected set preventDefault(setter: () => void) {\n    this._preventDefault = setter\n  }\n\n  constructor(\n    eventType: string,\n    eventInit: Partial<Omit<BvEvent, BvEventConstructorOmittables>> = {}\n  ) {\n    if (!eventType) {\n      throw new TypeError(\n        `Failed to construct '${this.constructor.name}'. 1 argument required, ${arguments.length} given.`\n      )\n    }\n\n    // Merge defaults first, the eventInit, and the type last\n    // so, it can't be overwritten\n    Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n\n    this._preventDefault = function _preventDefault() {\n      if (this.cancelable) {\n        this.defaultPrevented = true\n      }\n    }\n  }\n\n  static get Defaults() {\n    return {\n      cancelable: true,\n      componentId: null,\n      eventType: '',\n      nativeEvent: null,\n      relatedTarget: null,\n      target: null,\n    }\n  }\n}\n","import BvEvent, {type BvEventConstructorOmittables} from './BvEvent'\n\nexport default class BvTriggerableEvent extends BvEvent {\n  readonly trigger: string | null = null\n\n  constructor(\n    eventType: string,\n    eventInit: Partial<Omit<BvTriggerableEvent, BvEventConstructorOmittables>> = {}\n  ) {\n    super(eventType, eventInit)\n\n    // Merge defaults first, the eventInit, and the type last\n    // so, it can't be overwritten\n    Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n  }\n\n  static get Defaults() {\n    return {\n      ...super.Defaults,\n      trigger: null,\n    }\n  }\n}\n","import BvEvent, {type BvEventConstructorOmittables} from './BvEvent'\n\nexport default class BvCarouselEvent extends BvEvent {\n  readonly from: number\n  readonly to: number\n  readonly direction: 'left' | 'right'\n\n  constructor(\n    eventType: string,\n    eventInit: Partial<Omit<BvEvent, BvEventConstructorOmittables>> & {\n      from: number\n      to: number\n      direction: 'left' | 'right'\n    }\n  ) {\n    super(eventType, eventInit)\n    Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n    const {from, direction, to} = eventInit\n    this.from = from\n    this.to = to\n    this.direction = direction\n  }\n\n  static get Defaults() {\n    return {\n      ...super.Defaults,\n    }\n  }\n}\n","import type {Slot} from 'vue'\n\n/**\n * @deprecated only used in BFormGroup, which is not an SFC... Function could probably be replaced with pure Vue\n */\nexport const attemptFocus = (\n  el: Readonly<HTMLElement>,\n  options: Readonly<FocusOptions> = {}\n): boolean => {\n  const getActiveElement = (excludes: readonly HTMLElement[] = []): Element | null => {\n    const {activeElement} = document\n    return activeElement && !excludes.some((el) => el === activeElement) ? activeElement : null\n  }\n\n  const isActiveElement = (el: Readonly<HTMLElement>): boolean => el === getActiveElement()\n\n  try {\n    el.focus(options)\n  } catch (e) {\n    // eslint-disable-next-line no-console\n    console.error(e)\n  }\n  return isActiveElement(el)\n}\n\nexport const isEmptySlot = (el: Slot | undefined): boolean => (el?.() ?? []).length === 0\n\n/**\n * @deprecated only used in BFormGroup, which is not an SFC... Function could probably be replaced with pure Vue\n */\nexport const isVisible = (el: Readonly<Element>): boolean => {\n  //if (!isElement(el) || !el.parentNode || !contains(DOCUMENT.body, el)) {\n  // Note this can fail for shadow dom elements since they\n  // are not a direct descendant of document.body\n  //return false\n  //}\n  if (el.getAttribute('display') === 'none') {\n    // We do this check to help with vue-test-utils when using v-show\n    return false\n  }\n  // All browsers support getBoundingClientRect(), except JSDOM as it returns all 0's for values :(\n  // So any tests that need isVisible will fail in JSDOM\n  // Except when we override the getBCR prototype in some tests\n  const bcr = el.getBoundingClientRect()\n  return !!(bcr && bcr.height > 0 && bcr.width > 0)\n}\n\nexport const getTransitionDelay = (element: Readonly<HTMLElement>) => {\n  const style = window.getComputedStyle(element)\n  // if multiple durations are defined, we take the first\n  const transitionDelay = style.transitionDelay.split(',')[0] || ''\n  const transitionDuration = style.transitionDuration.split(',')[0] || ''\n  const transitionDelayMs = Number(transitionDelay.slice(0, -1)) * 1000\n  const transitionDurationMs = Number(transitionDuration.slice(0, -1)) * 1000\n  return transitionDelayMs + transitionDurationMs\n}\n","/**\n * @deprecated remove with parseEventOptions\n */\nexport const IS_BROWSER =\n  typeof window !== 'undefined' &&\n  typeof document !== 'undefined' &&\n  typeof navigator !== 'undefined'\n\n// Normalize event options based on support of passive option\n// Exported only for testing purposes\n/**\n * @deprecated\n */\nexport const parseEventOptions = (\n  options: boolean | Readonly<EventListenerOptions> | undefined\n): boolean | EventListenerOptions | undefined => {\n  const HAS_PASSIVE_EVENT_SUPPORT = (() => {\n    let passiveEventSupported = false\n    if (IS_BROWSER) {\n      try {\n        const options = {\n          // This function will be called when the browser\n          // attempts to access the passive property\n          get passive() {\n            passiveEventSupported = true\n            // eslint-disable-next-line no-useless-return\n            return\n          },\n        }\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        WINDOW.addEventListener('test', options, options)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        WINDOW.removeEventListener('test', options, options)\n      } catch {\n        passiveEventSupported = false\n      }\n    }\n    return passiveEventSupported\n  })()\n\n  if (HAS_PASSIVE_EVENT_SUPPORT) {\n    return typeof options === 'object' ? options : {capture: !!options || false}\n  }\n  // Need to translate to actual Boolean value\n  return typeof options === 'object' ? options.capture : options\n}\n\n// Attach an event listener to an element\n/**\n * @deprecated\n */\nexport const eventOn = (\n  el: Readonly<Element>,\n  eventName: string,\n  handler: EventListener,\n  options: boolean | Readonly<EventListenerOptions> | undefined\n) => {\n  if (el && el.addEventListener) {\n    el.addEventListener(eventName, handler, parseEventOptions(options))\n  }\n}\n\n// Remove an event listener from an element\n/**\n * @deprecated\n */\nexport const eventOff = (\n  el: Readonly<Element>,\n  eventName: string,\n  handler: EventListener,\n  options: boolean | Readonly<EventListenerOptions> | undefined\n) => {\n  if (el && el.removeEventListener) {\n    el.removeEventListener(eventName, handler, options)\n  }\n}\n\n// Utility method to add/remove a event listener based on first argument (boolean)\n// It passes all other arguments to the `eventOn()` or `eventOff` method\n/**\n * @deprecated\n */\nexport const eventOnOff = (on: boolean, eventParams: Parameters<typeof eventOff>) => {\n  const method = on ? eventOn : eventOff\n  method(...eventParams)\n}\n","const TABLE_TAG_NAMES = ['TD', 'TH', 'TR']\n\n// Filter CSS selector for click/dblclick/etc. events\n// If any of these selectors match the clicked element, we ignore the event\nconst eventFilter = [\n  'a',\n  'a *', // Include content inside links\n  'button',\n  'button *', // Include content inside buttons\n  'input:not(.disabled):not([disabled])',\n  'select:not(.disabled):not([disabled])',\n  'textarea:not(.disabled):not([disabled])',\n  '[role=\"link\"]',\n  '[role=\"link\"] *',\n  '[role=\"button\"]',\n  '[role=\"button\"] *',\n  '[tabindex]:not(.disabled):not([disabled])',\n].join(',')\n\n// Returns `true` if we should ignore the click/double-click/keypress event\n// Avoids having the user need to use `@click.stop` on the form control\nexport default (event: Readonly<Event>) => {\n  // Exit early when we don't have a target element\n  if (!event || !event.target) {\n    return false\n  }\n  const el = event.target as HTMLElement\n  // Exit early when element is disabled or a table element\n  if (('disabled' in el && el.disabled) || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n    return false\n  }\n  // Ignore the click when it was inside a dropdown menu\n  if (el.closest('.dropdown-menu')) return true\n\n  const label = el.tagName === 'LABEL' ? el : el.closest('label')\n  // If the label's form control is not disabled then we don't propagate event\n  // Modern browsers have `label.control` that references the associated input, but IE 11\n  // does not have this property on the label element, so we resort to DOM lookups\n  if (label) {\n    const labelFor = label.getAttribute('for')\n    const input = labelFor\n      ? document.getElementById(labelFor)\n      : label.querySelector('input, select, textarea')\n    if (input && !(input as HTMLInputElement).disabled) {\n      return true\n    }\n  }\n  // Otherwise check if the event target matches one of the selectors in the\n  // event filter (i.e. anchors, non disabled inputs, etc.)\n  // Return `true` if we should ignore the event\n  return el.matches(eventFilter)\n}\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    ...rects.floating,\n    x,\n    y\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const overflowAvailableHeight = height - overflow[heightSide];\n      const overflowAvailableWidth = width - overflow[widthSide];\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (isYAxis) {\n        const maximumClippingWidth = width - overflow.left - overflow.right;\n        availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n      } else {\n        const maximumClippingHeight = height - overflow.top - overflow.bottom;\n        availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const webkit = isWebKit();\n  const css = getComputedStyle(element);\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","import { rectToClientRect, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { detectOverflow, offset } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = currentWin.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = currentWin.frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(floating) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return floating.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  const x = rect.left + scroll.scrollLeft - offsets.x;\n  const y = rect.top + scroll.scrollTop - offsets.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const window = getWindow(element);\n  if (!isHTMLElement(element) || isTopLayer(element)) {\n    return window;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      ...(await getDimensionsFn(data.floating))\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 100);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, flip, hide, inline, limitShift, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\n\nfunction isComponentPublicInstance(target) {\n  return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n  if (isComponentPublicInstance(target)) {\n    const element = target.$el;\n    return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n  }\n  return target;\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n  return {\n    name: 'arrow',\n    options,\n    fn(args) {\n      const element = unwrapElement(unref(options.element));\n      if (element == null) {\n        return {};\n      }\n      return arrow$1({\n        element,\n        padding: options.padding\n      }).fn(args);\n    }\n  };\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const whileElementsMountedOption = options.whileElementsMounted;\n  const openOption = computed(() => {\n    var _unref;\n    return (_unref = unref(options.open)) != null ? _unref : true;\n  });\n  const middlewareOption = computed(() => unref(options.middleware));\n  const placementOption = computed(() => {\n    var _unref2;\n    return (_unref2 = unref(options.placement)) != null ? _unref2 : 'bottom';\n  });\n  const strategyOption = computed(() => {\n    var _unref3;\n    return (_unref3 = unref(options.strategy)) != null ? _unref3 : 'absolute';\n  });\n  const transformOption = computed(() => {\n    var _unref4;\n    return (_unref4 = unref(options.transform)) != null ? _unref4 : true;\n  });\n  const referenceElement = computed(() => unwrapElement(reference.value));\n  const floatingElement = computed(() => unwrapElement(floating.value));\n  const x = ref(0);\n  const y = ref(0);\n  const strategy = ref(strategyOption.value);\n  const placement = ref(placementOption.value);\n  const middlewareData = shallowRef({});\n  const isPositioned = ref(false);\n  const floatingStyles = computed(() => {\n    const initialStyles = {\n      position: strategy.value,\n      left: '0',\n      top: '0'\n    };\n    if (!floatingElement.value) {\n      return initialStyles;\n    }\n    const xVal = roundByDPR(floatingElement.value, x.value);\n    const yVal = roundByDPR(floatingElement.value, y.value);\n    if (transformOption.value) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n        ...(getDPR(floatingElement.value) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy.value,\n      left: xVal + \"px\",\n      top: yVal + \"px\"\n    };\n  });\n  let whileElementsMountedCleanup;\n  function update() {\n    if (referenceElement.value == null || floatingElement.value == null) {\n      return;\n    }\n    computePosition(referenceElement.value, floatingElement.value, {\n      middleware: middlewareOption.value,\n      placement: placementOption.value,\n      strategy: strategyOption.value\n    }).then(position => {\n      x.value = position.x;\n      y.value = position.y;\n      strategy.value = position.strategy;\n      placement.value = position.placement;\n      middlewareData.value = position.middlewareData;\n      isPositioned.value = true;\n    });\n  }\n  function cleanup() {\n    if (typeof whileElementsMountedCleanup === 'function') {\n      whileElementsMountedCleanup();\n      whileElementsMountedCleanup = undefined;\n    }\n  }\n  function attach() {\n    cleanup();\n    if (whileElementsMountedOption === undefined) {\n      update();\n      return;\n    }\n    if (referenceElement.value != null && floatingElement.value != null) {\n      whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n      return;\n    }\n  }\n  function reset() {\n    if (!openOption.value) {\n      isPositioned.value = false;\n    }\n  }\n  watch([middlewareOption, placementOption, strategyOption], update, {\n    flush: 'sync'\n  });\n  watch([referenceElement, floatingElement], attach, {\n    flush: 'sync'\n  });\n  watch(openOption, reset, {\n    flush: 'sync'\n  });\n  if (getCurrentScope()) {\n    onScopeDispose(cleanup);\n  }\n  return {\n    x: shallowReadonly(x),\n    y: shallowReadonly(y),\n    strategy: shallowReadonly(strategy),\n    placement: shallowReadonly(placement),\n    middlewareData: shallowReadonly(middlewareData),\n    isPositioned: shallowReadonly(isPositioned),\n    floatingStyles,\n    update\n  };\n}\n\nexport { arrow, useFloating };\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n  /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (\n  attribute: Readonly<Attr>,\n  allowedAttributeList: readonly (string | RegExp)[]\n) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(\n        SAFE_URL_PATTERN.test(attribute.nodeValue || '') ||\n          DATA_URL_PATTERN.test(attribute.nodeValue || '')\n      )\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList\n    .filter((attributeRegex): attributeRegex is RegExp => attributeRegex instanceof RegExp)\n    .some((regex) => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  'a': ['target', 'href', 'title', 'rel'],\n  'area': [],\n  'b': [],\n  'br': [],\n  'col': [],\n  'code': [],\n  'div': [],\n  'em': [],\n  'hr': [],\n  'h1': [],\n  'h2': [],\n  'h3': [],\n  'h4': [],\n  'h5': [],\n  'h6': [],\n  'i': [],\n  'img': ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  'li': [],\n  'ol': [],\n  'p': [],\n  'pre': [],\n  's': [],\n  'small': [],\n  'span': [],\n  'sub': [],\n  'sup': [],\n  'strong': [],\n  'u': [],\n  'ul': [],\n}\n\nexport const sanitizeHtml = (\n  unsafeHtml: string,\n  allowList: Readonly<Record<string, (string | RegExp)[]>>,\n  sanitizeFunction?: (unsafeHtml: string) => string\n) => {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements: NodeListOf<Element> = createdDocument.body.querySelectorAll('*')\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n\n      continue\n    }\n\n    const attributeList = element.attributes\n    const allowedAttributes = [...(allowList['*'] || []), ...(allowList[elementName] || [])]\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, {\n    ...options,\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  });\n  return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = typeof fn === \"function\" ? fn : fn.get;\n  const set = typeof fn === \"function\" ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = /* @__PURE__ */ new Set();\n  const off = (fn) => {\n    fns.delete(fn);\n  };\n  const on = (fn) => {\n    fns.add(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (...args) => {\n    return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return (...args) => {\n    if (!initialized) {\n      state = scope.run(() => stateFactory(...args));\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n  var _a;\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"provideLocal must be called in setup\");\n  if (!localProvidedStateMap.has(instance))\n    localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n  const localProvidedState = localProvidedStateMap.get(instance);\n  localProvidedState[key] = value;\n  provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n  var _a;\n  const key = args[0];\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"injectLocal must be called in setup\");\n  if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n    return localProvidedStateMap.get(instance)[key];\n  return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n  const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provideLocal(key, state);\n    return state;\n  };\n  const useInjectedState = () => injectLocal(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n    return;\n  }\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = { ...obj };\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction toValue(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(\n    keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    })\n  );\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n  var _a, _b;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = toValue(ms);\n    const maxDuration = toValue(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(...args) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  let ms;\n  let trailing;\n  let leading;\n  let rejectOnCancel;\n  if (!isRef(args[0]) && typeof args[0] === \"object\")\n    ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n  else\n    [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = toValue(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = Number.parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n  return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n    return (!omitUndefined || value !== void 0) && !keys.includes(key);\n  }));\n}\nfunction objectEntries(obj) {\n  return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n  return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n  if (args.length !== 1)\n    return toRef$1(...args);\n  const r = args[0];\n  return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = toValue(defaultValue);\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = toValue(defaultValue);\n      trigger();\n    }, toValue(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(\n    debounceFilter(ms, options),\n    fn\n  );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(\n    throttleFilter(ms, trailing, leading, rejectOnCancel),\n    fn\n  );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(\n    ref,\n    {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    },\n    { enumerable: true }\n  );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n  const {\n    eventFilter: filter,\n    ...watchOptions\n  } = options;\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter\n    }\n  );\n  return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options || {};\n  const watchers = [];\n  const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n  const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchers.push(watchPausable(\n      left,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        right.value = transformLTR(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchers.push(watchPausable(\n      right,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        left.value = transformRTL(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  const stop = () => {\n    watchers.forEach((w) => w.stop());\n  };\n  return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(\n    source,\n    (newValue) => targets.forEach((target) => target.value = newValue),\n    { flush, deep, immediate }\n  );\n}\n\nfunction toRefs(objectRef, options = {}) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        var _a;\n        const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n        if (replaceRef) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = { ...objectRef.value, [key]: v };\n            Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n            objectRef.value = newObject;\n          }\n        } else {\n          objectRef.value[key] = v;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeMount(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n  const instance = getLifeCycleTarget();\n  if (instance)\n    onMounted(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        r,\n        (v) => {\n          if (condition(v) !== isNot) {\n            stop == null ? void 0 : stop();\n            resolve(v);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        [r, value],\n        ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            stop == null ? void 0 : stop();\n            resolve(v1);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return toValue(r);\n        })\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(toValue(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(toValue(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n  return value === othVal;\n}\nfunction useArrayDifference(...args) {\n  var _a;\n  const list = args[0];\n  const values = args[1];\n  let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n  if (typeof compareFn === \"string\") {\n    const key = compareFn;\n    compareFn = (value, othVal) => value[key] === othVal[key];\n  }\n  return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => toValue(\n    toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => toValue(\n    !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n  return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n  var _a;\n  const list = args[0];\n  const value = args[1];\n  let comparator = args[2];\n  let formIndex = 0;\n  if (isArrayIncludesOptions(comparator)) {\n    formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n    comparator = comparator.comparator;\n  }\n  if (typeof comparator === \"string\") {\n    const key = comparator;\n    comparator = (element, value2) => element[key] === toValue(value2);\n  }\n  comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n  return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n    toValue(element),\n    toValue(value),\n    index,\n    toValue(array)\n  )));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n  return computed(() => {\n    const resolved = toValue(list);\n    return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n  return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n  return array.reduce((acc, v) => {\n    if (!acc.some((x) => fn(v, x, array)))\n      acc.push(v);\n    return acc;\n  }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n  return computed(() => {\n    const resolvedList = toValue(list).map((element) => toValue(element));\n    return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n  });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  let _initialValue = unref(initialValue);\n  const count = ref(initialValue);\n  const {\n    max = Number.POSITIVE_INFINITY,\n    min = Number.NEGATIVE_INFINITY\n  } = options;\n  const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n  const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = _initialValue) => {\n    _initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n  const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n  const v = num % 100;\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    Yo: () => formatOrdinal(years),\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    Mo: () => formatOrdinal(month + 1),\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    Do: () => formatOrdinal(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    Ho: () => formatOrdinal(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    ho: () => formatOrdinal(hours % 12 || 12),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mo: () => formatOrdinal(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    so: () => formatOrdinal(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n    var _a2, _b;\n    return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return new Date(Number.NaN);\n  if (date === void 0)\n    return /* @__PURE__ */ new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = toValue(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || typeof interval === \"function\") {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(\n    callback ? () => {\n      update();\n      callback(counter.value);\n    } : update,\n    interval,\n    { immediate }\n  );\n  if (exposeControls) {\n    return {\n      counter,\n      reset,\n      ...controls\n    };\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(\n    source,\n    () => ms.value = timestamp(),\n    options\n  );\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, toValue(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(\n    callback != null ? callback : noop,\n    interval,\n    options\n  );\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return {\n      ready,\n      ...controls\n    };\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = toValue(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && Number.isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = toValue(truthyValue);\n      _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = Array.from({ length: oldList.length });\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n  const {\n    count,\n    ...watchOptions\n  } = options;\n  const current = ref(0);\n  const stop = watchWithFilter(\n    source,\n    (...args) => {\n      current.value += 1;\n      if (current.value >= toValue(count))\n        nextTick(() => stop());\n      cb(...args);\n    },\n    watchOptions\n  );\n  return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n  const {\n    debounce = 0,\n    maxWait = void 0,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }\n  );\n}\n\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      deep: true\n    }\n  );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  const filteredCb = createFilterWrapper(\n    eventFilter,\n    cb\n  );\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(\n      source,\n      (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      },\n      watchOptions\n    );\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(\n      watch(\n        source,\n        () => {\n          syncCounter.value++;\n        },\n        { ...watchOptions, flush: \"sync\" }\n      )\n    );\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(\n      watch(\n        source,\n        (...args) => {\n          const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n          ignoreCounter.value = 0;\n          syncCounter.value = 0;\n          if (ignore)\n            return;\n          filteredCb(...args);\n        },\n        watchOptions\n      )\n    );\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      immediate: true\n    }\n  );\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n  return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n  const {\n    throttle = 0,\n    trailing = true,\n    leading = true,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }\n  );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return {\n    ...res,\n    trigger\n  };\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => toValue(item));\n  return toValue(sources);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  const stop = watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v) {\n        if (options == null ? void 0 : options.once)\n          nextTick(() => stop());\n        cb(v, ov, onInvalidate);\n      }\n    },\n    {\n      ...options,\n      once: false\n    }\n  );\n  return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, notNullish, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, tryOnBeforeUnmount, identity, isDef, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, isVue2, readonly, nextTick, reactive, markRaw, unref, getCurrentScope, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = true,\n    onError = noop\n  } = options;\n  const started = ref(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nfunction createReusableTemplate(options = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n    return;\n  }\n  const {\n    inheritAttrs = true\n  } = options;\n  const render = shallowRef();\n  const define = /* #__PURE__ */ defineComponent({\n    setup(_, { slots }) {\n      return () => {\n        render.value = slots.default;\n      };\n    }\n  });\n  const reuse = /* #__PURE__ */ defineComponent({\n    inheritAttrs,\n    setup(_, { attrs, slots }) {\n      return () => {\n        var _a;\n        if (!render.value && process.env.NODE_ENV !== \"production\")\n          throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n        const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n        return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n      };\n    }\n  });\n  return makeDestructurable(\n    { define, reuse },\n    [define, reuse]\n  );\n}\nfunction keysToCamelKebabCase(obj) {\n  const newObj = {};\n  for (const key in obj)\n    newObj[camelize(key)] = obj[key];\n  return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n  if (!isVue3) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n    return;\n  }\n  let index = 0;\n  const instances = ref([]);\n  function create(...args) {\n    const props = shallowReactive({\n      key: index++,\n      args,\n      promise: void 0,\n      resolve: () => {\n      },\n      reject: () => {\n      },\n      isResolving: false,\n      options\n    });\n    instances.value.push(props);\n    props.promise = new Promise((_resolve, _reject) => {\n      props.resolve = (v) => {\n        props.isResolving = true;\n        return _resolve(v);\n      };\n      props.reject = _reject;\n    }).finally(() => {\n      props.promise = void 0;\n      const index2 = instances.value.indexOf(props);\n      if (index2 !== -1)\n        instances.value.splice(index2, 1);\n    });\n    return props.promise;\n  }\n  function start(...args) {\n    if (options.singleton && instances.value.length > 0)\n      return instances.value[0].promise;\n    return create(...args);\n  }\n  const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n    const renderList = () => instances.value.map((props) => {\n      var _a;\n      return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n    });\n    if (options.transition)\n      return () => h(TransitionGroup, options.transition, renderList);\n    return renderList;\n  });\n  component.start = start;\n  return component;\n}\n\nfunction createUnrefFn(fn) {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => toValue(i)));\n  };\n}\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(\n    () => [unrefElement(target), toValue(options)],\n    ([el, options2]) => {\n      cleanup();\n      if (!el)\n        return;\n      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\n        })\n      );\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return noop;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.addEventListener(\"click\", noop);\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\n        var _a;\n        const el = unrefElement(target);\n        if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n          handler(event);\n      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    timeout = setTimeout(\n      () => handler(ev),\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], clear, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction isFocusedElementEditable() {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  if (keyCode >= 97 && keyCode <= 122)\n    return true;\n  return false;\n}\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const {\n    window = defaultWindow,\n    deep = true\n  } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const getDeepActiveElement = () => {\n    var _a2;\n    let element = document == null ? void 0 : document.activeElement;\n    if (deep) {\n      while (element == null ? void 0 : element.shadowRoot)\n        element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n    }\n    return element;\n  };\n  const activeElement = ref();\n  const trigger = () => {\n    activeElement.value = getDeepActiveElement();\n  };\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      trigger();\n    }, true);\n    useEventListener(window, \"focus\", trigger, true);\n  }\n  trigger();\n  return activeElement;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, isVue2 ? null : instance);\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    fpsLimit = void 0,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    if (!previousFrameTimestamp)\n      previousFrameTimestamp = timestamp;\n    const delta = timestamp - previousFrameTimestamp;\n    if (intervalLimit && delta < intervalLimit) {\n      rafId = window.requestAnimationFrame(loop);\n      return;\n    }\n    previousFrameTimestamp = timestamp;\n    fn({ delta, timestamp });\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      previousFrameTimestamp = 0;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nfunction useAnimate(target, keyframes, options) {\n  let config;\n  let animateOptions;\n  if (isObject(options)) {\n    config = options;\n    animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n  } else {\n    config = { duration: options };\n    animateOptions = options;\n  }\n  const {\n    window = defaultWindow,\n    immediate = true,\n    commitStyles,\n    persist,\n    playbackRate: _playbackRate = 1,\n    onReady,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = config;\n  const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n  const animate = shallowRef(void 0);\n  const store = shallowReactive({\n    startTime: null,\n    currentTime: null,\n    timeline: null,\n    playbackRate: _playbackRate,\n    pending: false,\n    playState: immediate ? \"idle\" : \"paused\",\n    replaceState: \"active\"\n  });\n  const pending = computed(() => store.pending);\n  const playState = computed(() => store.playState);\n  const replaceState = computed(() => store.replaceState);\n  const startTime = computed({\n    get() {\n      return store.startTime;\n    },\n    set(value) {\n      store.startTime = value;\n      if (animate.value)\n        animate.value.startTime = value;\n    }\n  });\n  const currentTime = computed({\n    get() {\n      return store.currentTime;\n    },\n    set(value) {\n      store.currentTime = value;\n      if (animate.value) {\n        animate.value.currentTime = value;\n        syncResume();\n      }\n    }\n  });\n  const timeline = computed({\n    get() {\n      return store.timeline;\n    },\n    set(value) {\n      store.timeline = value;\n      if (animate.value)\n        animate.value.timeline = value;\n    }\n  });\n  const playbackRate = computed({\n    get() {\n      return store.playbackRate;\n    },\n    set(value) {\n      store.playbackRate = value;\n      if (animate.value)\n        animate.value.playbackRate = value;\n    }\n  });\n  const play = () => {\n    if (animate.value) {\n      try {\n        animate.value.play();\n        syncResume();\n      } catch (e) {\n        syncPause();\n        onError(e);\n      }\n    } else {\n      update();\n    }\n  };\n  const pause = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.pause();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const reverse = () => {\n    var _a;\n    !animate.value && update();\n    try {\n      (_a = animate.value) == null ? void 0 : _a.reverse();\n      syncResume();\n    } catch (e) {\n      syncPause();\n      onError(e);\n    }\n  };\n  const finish = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.finish();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const cancel = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.cancel();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  watch(() => unrefElement(target), (el) => {\n    el && update();\n  });\n  watch(() => keyframes, (value) => {\n    !animate.value && update();\n    if (!unrefElement(target) && animate.value) {\n      animate.value.effect = new KeyframeEffect(\n        unrefElement(target),\n        toValue(value),\n        animateOptions\n      );\n    }\n  }, { deep: true });\n  tryOnMounted(() => {\n    nextTick(() => update(true));\n  });\n  tryOnScopeDispose(cancel);\n  function update(init) {\n    const el = unrefElement(target);\n    if (!isSupported.value || !el)\n      return;\n    if (!animate.value)\n      animate.value = el.animate(toValue(keyframes), animateOptions);\n    if (commitStyles)\n      animate.value.commitStyles();\n    if (persist)\n      animate.value.persist();\n    if (_playbackRate !== 1)\n      animate.value.playbackRate = _playbackRate;\n    if (init && !immediate)\n      animate.value.pause();\n    else\n      syncResume();\n    onReady == null ? void 0 : onReady(animate.value);\n  }\n  useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n  const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n    if (!animate.value)\n      return;\n    store.pending = animate.value.pending;\n    store.playState = animate.value.playState;\n    store.replaceState = animate.value.replaceState;\n    store.startTime = animate.value.startTime;\n    store.currentTime = animate.value.currentTime;\n    store.timeline = animate.value.timeline;\n    store.playbackRate = animate.value.playbackRate;\n  }, { immediate: false });\n  function syncResume() {\n    if (isSupported.value)\n      resumeRef();\n  }\n  function syncPause() {\n    if (isSupported.value && window)\n      window.requestAnimationFrame(pauseRef);\n  }\n  return {\n    isSupported,\n    animate,\n    // actions\n    play,\n    pause,\n    reverse,\n    finish,\n    cancel,\n    // state\n    pending,\n    playState,\n    replaceState,\n    startTime,\n    currentTime,\n    timeline,\n    playbackRate\n  };\n}\n\nfunction useAsyncQueue(tasks, options) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop,\n    signal\n  } = options || {};\n  const promiseState = {\n    aborted: \"aborted\",\n    fulfilled: \"fulfilled\",\n    pending: \"pending\",\n    rejected: \"rejected\"\n  };\n  const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = ref(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, new Error(\"aborted\"));\n        return;\n      }\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      const done = curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n      if (!signal)\n        return done;\n      return Promise.race([done, whenAborted(signal)]);\n    }).catch((e) => {\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, e);\n        return e;\n      }\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\nfunction whenAborted(signal) {\n  return new Promise((resolve, reject) => {\n    const error = new Error(\"aborted\");\n    if (signal.aborted)\n      reject(error);\n    else\n      signal.addEventListener(\"abort\", () => reject(error), { once: true });\n  });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = ref(\"\");\n  const promise = ref();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = toValue(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => base64.value = res);\n    return promise.value;\n  }\n  if (isRef(target) || typeof target === \"function\")\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useBattery(options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n  const charging = ref(false);\n  const chargingTime = ref(0);\n  const dischargingTime = ref(0);\n  const level = ref(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      useEventListener(battery, events, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef(void 0);\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = ref();\n  const isConnected = computed(() => {\n    var _a;\n    return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n  });\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      device.value.addEventListener(\"gattserverdisconnected\", () => {\n      });\n      try {\n        server.value = await device.value.gatt.connect();\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected,\n    // Device:\n    device,\n    requestDevice,\n    // Server:\n    server,\n    // Errors:\n    error\n  };\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\n  return matches;\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  xs: 0,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1264,\n  xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920,\n  xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 0,\n  sm: 600,\n  md: 1024,\n  lg: 1440,\n  xl: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = toValue(breakpoints[toValue(k)]);\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow, strategy = \"min-width\" } = options;\n  function match(query) {\n    if (!window)\n      return false;\n    return window.matchMedia(query).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n  };\n  const smallerOrEqual = (k) => {\n    return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  function current() {\n    const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n    return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n  }\n  return Object.assign(shortcutMethods, {\n    greaterOrEqual,\n    smallerOrEqual,\n    greater(k) {\n      return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    smaller(k) {\n      return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(`(min-width: ${getValue(k, 0.1)})`);\n    },\n    isGreaterOrEqual(k) {\n      return match(`(min-width: ${getValue(k)})`);\n    },\n    isSmaller(k) {\n      return match(`(max-width: ${getValue(k, -0.1)})`);\n    },\n    isSmallerOrEqual(k) {\n      return match(`(max-width: ${getValue(k)})`);\n    },\n    isInBetween(a, b) {\n      return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n    },\n    current,\n    active() {\n      const bps = current();\n      return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\n    }\n  });\n}\n\nfunction useBroadcastChannel(options) {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = ref(false);\n  const channel = ref();\n  const data = ref();\n  const error = shallowRef(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      channel.value.addEventListener(\"message\", (e) => {\n        data.value = e.data;\n      }, { passive: true });\n      channel.value.addEventListener(\"messageerror\", (e) => {\n        error.value = e;\n      }, { passive: true });\n      channel.value.addEventListener(\"close\", () => {\n        isClosed.value = true;\n      });\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n}\n\nconst WRITABLE_PROPERTIES = [\n  \"hash\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n  const { window = defaultWindow } = options;\n  const refs = Object.fromEntries(\n    WRITABLE_PROPERTIES.map((key) => [key, ref()])\n  );\n  for (const [key, ref2] of objectEntries(refs)) {\n    watch(ref2, (value) => {\n      if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n        return;\n      window.location[key] = value;\n    });\n  }\n  const buildState = (trigger) => {\n    var _a;\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { origin } = (window == null ? void 0 : window.location) || {};\n    for (const key of WRITABLE_PROPERTIES)\n      refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n    return reactive({\n      trigger,\n      state: state2,\n      length,\n      origin,\n      ...refs\n    });\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n  const cachedValue = ref(refValue.value);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  let permissionStatus;\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = ref();\n  const onChange = () => {\n    if (permissionStatus)\n      state.value = permissionStatus.state;\n  };\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus) {\n      try {\n        permissionStatus = await navigator.permissions.query(desc);\n        useEventListener(permissionStatus, \"change\", onChange);\n        onChange();\n      } catch (e) {\n        state.value = \"prompt\";\n      }\n    }\n    return permissionStatus;\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const permissionRead = usePermission(\"clipboard-read\");\n  const permissionWrite = usePermission(\"clipboard-write\");\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = ref(\"\");\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateText() {\n    if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n      navigator.clipboard.readText().then((value) => {\n        text.value = value;\n      });\n    } else {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateText);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n        await navigator.clipboard.writeText(value);\n      else\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  function isAllowed(status) {\n    return status === \"granted\" || status === \"prompt\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nfunction useClipboardItems(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500\n  } = options;\n  const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const content = ref([]);\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateContent() {\n    if (isSupported.value) {\n      navigator.clipboard.read().then((items) => {\n        content.value = items;\n      });\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateContent);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      await navigator.clipboard.write(value);\n      content.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  return {\n    isSupported,\n    content,\n    copied,\n    copy\n  };\n}\n\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const {\n    manual,\n    clone = cloneFnJSON,\n    // watch options\n    deep = true,\n    immediate = true\n  } = options;\n  function sync() {\n    cloned.value = clone(toValue(source));\n  }\n  if (!manual && (isRef(source) || typeof source === \"function\")) {\n    watch(source, sync, {\n      ...options,\n      deep,\n      immediate\n    });\n  } else {\n    sync();\n  }\n  return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    },\n    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  if (window && listenToStorageChanges) {\n    tryOnMounted(() => {\n      useEventListener(window, \"storage\", update);\n      useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      window.dispatchEvent(new CustomEvent(customStorageEventName, {\n        detail: {\n          key,\n          oldValue,\n          newValue,\n          storageArea: storage\n        }\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(key);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          dispatchWriteEvent(oldValue, serialized);\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit != null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return { ...rawInit, ...value };\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n        data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n        style.appendChild(document.createTextNode(styleString));\n        window.document.head.appendChild(style);\n      }\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            el.classList.add(v);\n          else\n            el.classList.remove(v);\n        });\n      } else {\n        el.setAttribute(attribute2, value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  try {\n    return Object.assign(auto, { store, system, state });\n  } catch (e) {\n    return auto;\n  }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const value = toValue(target);\n    const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && window && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributeFilter: [\"style\", \"class\"],\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    updateCssVar,\n    { immediate: true }\n  );\n  watch(\n    variable,\n    (val) => {\n      var _a;\n      if ((_a = elRef.value) == null ? void 0 : _a.style)\n        elRef.value.style.setProperty(toValue(prop), val);\n    }\n  );\n  return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(\n    () => null,\n    () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n  );\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  const state = shallowRef(getInitialValue());\n  const listRef = toRef(list);\n  const index = computed({\n    get() {\n      var _a;\n      const targetList = listRef.value;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const targetList = listRef.value;\n    const length = targetList.length;\n    const index2 = (i % length + length) % length;\n    const value = targetList[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  function getInitialValue() {\n    var _a, _b;\n    return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n  }\n  watch(listRef, () => set(index.value));\n  return {\n    state,\n    index,\n    next,\n    prev,\n    go: set\n  };\n}\n\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\",\n    window = defaultWindow\n  } = options;\n  const mode = useColorMode({\n    ...options,\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  });\n  const system = computed(() => {\n    if (mode.system) {\n      return mode.system.value;\n    } else {\n      const preferredDark = usePreferredDark({ window });\n      return preferredDark.value ? \"dark\" : \"light\";\n    }\n  });\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      const modeVal = v ? \"dark\" : \"light\";\n      if (system.value === modeVal)\n        mode.value = \"auto\";\n      else\n        mode.value = modeVal;\n    }\n  });\n  return isDark;\n}\n\nfunction fnBypass(v) {\n  return v;\n}\nfunction fnSetSource(source, value) {\n  return source.value = value;\n}\nfunction defaultDump(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(\n    source,\n    commit,\n    { deep, flush, eventFilter: composedFilter }\n  );\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return {\n    ...manualHistory,\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    eventFilter = bypassFilter\n  } = options;\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = ref(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  if (window) {\n    const onDeviceMotion = createFilterWrapper(\n      eventFilter,\n      (event) => {\n        acceleration.value = event.acceleration;\n        accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n        rotationRate.value = event.rotationRate;\n        interval.value = event.interval;\n      }\n    );\n    useEventListener(window, \"devicemotion\", onDeviceMotion);\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = ref(false);\n  const alpha = ref(null);\n  const beta = ref(null);\n  const gamma = ref(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const pixelRatio = ref(1);\n  if (window) {\n    let observe2 = function() {\n      pixelRatio.value = window.devicePixelRatio;\n      cleanup2();\n      media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n      media.addEventListener(\"change\", observe2, { once: true });\n    }, cleanup2 = function() {\n      media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n    };\n    let media;\n    observe2();\n    tryOnScopeDispose(cleanup2);\n  }\n  return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = ref(false);\n  let stream;\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n    if (stream) {\n      stream.getTracks().forEach((t) => t.stop());\n      stream = null;\n    }\n  }\n  async function ensurePermissions() {\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(\"camera\", { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      stream = await navigator.mediaDevices.getUserMedia(constraints);\n      update();\n      permissionGranted.value = true;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update);\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility(options = {}) {\n  const { document = defaultDocument } = options;\n  if (!document)\n    return ref(\"visible\");\n  const visibility = ref(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  });\n  return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n  var _a, _b;\n  const {\n    pointerTypes,\n    preventDefault,\n    stopPropagation,\n    exact,\n    onMove,\n    onEnd,\n    onStart,\n    initialValue,\n    axis = \"both\",\n    draggingElement = defaultWindow,\n    containerElement,\n    handle: draggingHandle = target\n  } = options;\n  const position = ref(\n    (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n  );\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (pointerTypes)\n      return pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (toValue(preventDefault))\n      e.preventDefault();\n    if (toValue(stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    var _a2;\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (toValue(exact) && e.target !== toValue(target))\n      return;\n    const container = toValue(containerElement);\n    const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n    const targetRect = toValue(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n      y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n    };\n    if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    const container = toValue(containerElement);\n    const targetRect = toValue(target).getBoundingClientRect();\n    let { x, y } = position.value;\n    if (axis === \"x\" || axis === \"both\") {\n      x = e.clientX - pressedDelta.value.x;\n      if (container)\n        x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n    }\n    if (axis === \"y\" || axis === \"both\") {\n      y = e.clientY - pressedDelta.value.y;\n      if (container)\n        y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n    }\n    position.value = {\n      x,\n      y\n    };\n    onMove == null ? void 0 : onMove(position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    onEnd == null ? void 0 : onEnd(position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    const config = { capture: (_b = options.capture) != null ? _b : true };\n    useEventListener(draggingHandle, \"pointerdown\", start, config);\n    useEventListener(draggingElement, \"pointermove\", move, config);\n    useEventListener(draggingElement, \"pointerup\", end, config);\n  }\n  return {\n    ...toRefs(position),\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(\n      () => `left:${position.value.x}px;top:${position.value.y}px;`\n    )\n  };\n}\n\nfunction useDropZone(target, options = {}) {\n  const isOverDropZone = ref(false);\n  const files = shallowRef(null);\n  let counter = 0;\n  let isDataTypeIncluded = true;\n  if (isClient) {\n    const _options = typeof options === \"function\" ? { onDrop: options } : options;\n    const getFiles = (event) => {\n      var _a, _b;\n      const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      return files.value = list.length === 0 ? null : list;\n    };\n    useEventListener(target, \"dragenter\", (event) => {\n      var _a, _b;\n      const types = Array.from(((_a = event == null ? void 0 : event.dataTransfer) == null ? void 0 : _a.items) || []).map((i) => i.kind === \"file\" ? i.type : null).filter(notNullish);\n      if (_options.dataTypes && event.dataTransfer) {\n        const dataTypes = unref(_options.dataTypes);\n        isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n        if (!isDataTypeIncluded)\n          return;\n      }\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n      (_b = _options.onEnter) == null ? void 0 : _b.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"dragover\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"dragleave\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n      (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"drop\", (event) => {\n      var _a;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n  }\n  return {\n    files,\n    isOverDropZone\n  };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els)\n          _el && observer.observe(_el, observerOptions);\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true\n  } = options;\n  const height = ref(0);\n  const bottom = ref(0);\n  const left = ref(0);\n  const right = ref(0);\n  const top = ref(0);\n  const width = ref(0);\n  const x = ref(0);\n  const y = ref(0);\n  function update() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  useMutationObserver(target, update, {\n    attributeFilter: [\"style\", \"class\"]\n  });\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nfunction useElementByPoint(options) {\n  const {\n    x,\n    y,\n    document = defaultDocument,\n    multiple,\n    interval = \"requestAnimationFrame\",\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => {\n    if (toValue(multiple))\n      return document && \"elementsFromPoint\" in document;\n    return document && \"elementFromPoint\" in document;\n  });\n  const element = ref(null);\n  const cb = () => {\n    var _a, _b;\n    element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n  };\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  return {\n    isSupported,\n    element,\n    ...controls\n  };\n}\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    window = defaultWindow\n  } = options;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  const { stop: stop1 } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const styles = window.getComputedStyle($elem);\n          width.value = Number.parseFloat(styles.width);\n          height.value = Number.parseFloat(styles.height);\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = ref(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, options = {}) {\n  const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold\n    }\n  );\n  return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || /* @__PURE__ */ new Set();\n    listeners.add(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    listeners.delete(listener);\n    if (!listeners.size)\n      reset();\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n  const event = ref(null);\n  const data = ref(null);\n  const status = ref(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = shallowRef(null);\n  const urlRef = toRef(url);\n  let explicitlyClosed = false;\n  let retried = 0;\n  const {\n    withCredentials = false,\n    immediate = true\n  } = options;\n  const close = () => {\n    if (isClient && eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n      explicitlyClosed = true;\n    }\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const es = new EventSource(urlRef.value, { withCredentials });\n    status.value = \"CONNECTING\";\n    eventSource.value = es;\n    es.onopen = () => {\n      status.value = \"OPEN\";\n      error.value = null;\n    };\n    es.onerror = (e) => {\n      status.value = \"CLOSED\";\n      error.value = e;\n      if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n        es.close();\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions$1(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    es.onmessage = (e) => {\n      event.value = null;\n      data.value = e.data;\n    };\n    for (const event_name of events) {\n      useEventListener(es, event_name, (e) => {\n        event.value = event_name;\n        data.value = e.data || null;\n      });\n    }\n  };\n  const open = () => {\n    if (!isClient)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  tryOnScopeDispose(close);\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    open,\n    close\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = ref(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = toRef(newIcon);\n  const applyIcon = (icon) => {\n    const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n    if (!elements || elements.length === 0) {\n      const link = document == null ? void 0 : document.createElement(\"link\");\n      if (link) {\n        link.rel = rel;\n        link.href = `${baseUrl}${icon}`;\n        link.type = `image/${icon.split(\".\").pop()}`;\n        document == null ? void 0 : document.head.append(link);\n      }\n      return;\n    }\n    elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(\n    favicon,\n    (i, o) => {\n      if (typeof i === \"string\" && i !== o)\n        applyIcon(i);\n    },\n    { immediate: true }\n  );\n  return favicon;\n}\n\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nfunction isAbsoluteURL(url) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries(headers.entries());\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      const callback = callbacks[callbacks.length - 1];\n      if (callback)\n        return { ...ctx, ...await callback(ctx) };\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      for (const callback of callbacks) {\n        if (callback)\n          ctx = { ...ctx, ...await callback(ctx) };\n      }\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = toValue(config.baseUrl);\n      const targetUrl = toValue(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = {\n          ...options,\n          ...args[0],\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        };\n      } else {\n        fetchOptions = {\n          ...fetchOptions,\n          ...args[0],\n          headers: {\n            ...headersToObject(fetchOptions.headers) || {},\n            ...headersToObject(args[0].headers) || {}\n          }\n        };\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = {\n        ...options,\n        ...args[1],\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      };\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = {\n    immediate: true,\n    refetch: false,\n    timeout: 0,\n    updateDataOnError: false\n  };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = { ...options, ...args[0] };\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = { ...options, ...args[1] };\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = ref(false);\n  const isFetching = ref(false);\n  const aborted = ref(false);\n  const statusCode = ref(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData || null);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort) {\n      controller == null ? void 0 : controller.abort();\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = {\n        ...fetchOptions,\n        signal: controller.signal\n      };\n    }\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  let executeCounter = 0;\n  const execute = async (throwOnFailed = false) => {\n    var _a2, _b;\n    abort();\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    executeCounter += 1;\n    const currentExecuteCounter = executeCounter;\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      const payload = toValue(config.payload);\n      if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n        config.payloadType = \"json\";\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: toValue(url),\n      options: {\n        ...defaultFetchOptions,\n        ...fetchOptions\n      },\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return fetch(\n      context.url,\n      {\n        ...defaultFetchOptions,\n        ...context.options,\n        headers: {\n          ...headersToObject(defaultFetchOptions.headers),\n          ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n        }\n      }\n    ).then(async (fetchResponse) => {\n      response.value = fetchResponse;\n      statusCode.value = fetchResponse.status;\n      responseData = await fetchResponse.clone()[config.type]();\n      if (!fetchResponse.ok) {\n        data.value = initialData || null;\n        throw new Error(fetchResponse.statusText);\n      }\n      if (options.afterFetch) {\n        ({ data: responseData } = await options.afterFetch({\n          data: responseData,\n          response: fetchResponse\n        }));\n      }\n      data.value = responseData;\n      responseEvent.trigger(fetchResponse);\n      return fetchResponse;\n    }).catch(async (fetchError) => {\n      let errorData = fetchError.message || fetchError.name;\n      if (options.onFetchError) {\n        ({ error: errorData, data: responseData } = await options.onFetchError({\n          data: responseData,\n          error: fetchError,\n          response: response.value\n        }));\n      }\n      error.value = errorData;\n      if (options.updateDataOnError)\n        data.value = responseData;\n      errorEvent.trigger(fetchError);\n      if (throwOnFailed)\n        throw fetchError;\n      return null;\n    }).finally(() => {\n      if (currentExecuteCounter === executeCounter)\n        loading(false);\n      if (timer)\n        timer.stop();\n      finallyEvent.trigger(null);\n    });\n  };\n  const refetch = toRef(options.refetch);\n  watch(\n    [\n      refetch,\n      toRef(url)\n    ],\n    ([refetch2]) => refetch2 && execute(),\n    { deep: true }\n  );\n  const shell = {\n    isFinished: readonly(isFinished),\n    isFetching: readonly(isFetching),\n    statusCode,\n    response,\n    error,\n    data,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    // method\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    // type\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch(\n            [\n              refetch,\n              toRef(config.payload)\n            ],\n            ([refetch2]) => refetch2 && execute(),\n            { deep: true }\n          );\n        }\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    Promise.resolve().then(() => execute());\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  };\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n    return `${start}/${end}`;\n  return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\",\n  reset: false,\n  directory: false\n};\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(null);\n  const { on: onChange, trigger } = createEventHook();\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n      trigger(files.value);\n    };\n  }\n  const reset = () => {\n    files.value = null;\n    if (input) {\n      input.value = \"\";\n      trigger(null);\n    }\n  };\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      ...localOptions\n    };\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    input.webkitdirectory = _options.directory;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    if (_options.reset)\n      reset();\n    input.click();\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset,\n    onChange\n  };\n}\n\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = options;\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = ref();\n  const data = ref();\n  const file = ref();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n    fileHandle.value = handle;\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    data.value = void 0;\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    await updateFile();\n    const type = toValue(dataType);\n    if (type === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    else if (type === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    else if (type === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => toValue(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false, focusVisible = false } = options;\n  const innerFocused = ref(false);\n  const targetElement = computed(() => unrefElement(target));\n  useEventListener(targetElement, \"focus\", (event) => {\n    var _a, _b;\n    if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n      innerFocused.value = true;\n  });\n  useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n  const focused = computed({\n    get: () => innerFocused.value,\n    set(value) {\n      var _a, _b;\n      if (!value && innerFocused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      else if (value && !innerFocused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus();\n    }\n  });\n  watch(\n    targetElement,\n    () => {\n      focused.value = initialValue;\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = ref(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst eventHandlers = [\n  \"fullscreenchange\",\n  \"webkitfullscreenchange\",\n  \"webkitendfullscreen\",\n  \"mozfullscreenchange\",\n  \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n  const {\n    document = defaultDocument,\n    autoExit = false\n  } = options;\n  const targetRef = computed(() => {\n    var _a;\n    return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n  });\n  const isFullscreen = ref(false);\n  const requestMethod = computed(() => {\n    return [\n      \"requestFullscreen\",\n      \"webkitRequestFullscreen\",\n      \"webkitEnterFullscreen\",\n      \"webkitEnterFullScreen\",\n      \"webkitRequestFullScreen\",\n      \"mozRequestFullScreen\",\n      \"msRequestFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const exitMethod = computed(() => {\n    return [\n      \"exitFullscreen\",\n      \"webkitExitFullscreen\",\n      \"webkitExitFullScreen\",\n      \"webkitCancelFullScreen\",\n      \"mozCancelFullScreen\",\n      \"msExitFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenEnabled = computed(() => {\n    return [\n      \"fullScreen\",\n      \"webkitIsFullScreen\",\n      \"webkitDisplayingFullscreen\",\n      \"mozFullScreen\",\n      \"msFullscreenElement\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenElementMethod = [\n    \"fullscreenElement\",\n    \"webkitFullscreenElement\",\n    \"mozFullScreenElement\",\n    \"msFullscreenElement\"\n  ].find((m) => document && m in document);\n  const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n  const isCurrentElementFullScreen = () => {\n    if (fullscreenElementMethod)\n      return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n    return false;\n  };\n  const isElementFullScreen = () => {\n    if (fullscreenEnabled.value) {\n      if (document && document[fullscreenEnabled.value] != null) {\n        return document[fullscreenEnabled.value];\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n          return Boolean(target2[fullscreenEnabled.value]);\n        }\n      }\n    }\n    return false;\n  };\n  async function exit() {\n    if (!isSupported.value || !isFullscreen.value)\n      return;\n    if (exitMethod.value) {\n      if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n        await document[exitMethod.value]();\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n          await target2[exitMethod.value]();\n      }\n    }\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value || isFullscreen.value)\n      return;\n    if (isElementFullScreen())\n      await exit();\n    const target2 = targetRef.value;\n    if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n      await target2[requestMethod.value]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    await (isFullscreen.value ? exit() : enter());\n  }\n  const handlerCallback = () => {\n    const isElementFullScreenValue = isElementFullScreen();\n    if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n      isFullscreen.value = isElementFullScreenValue;\n  };\n  useEventListener(document, eventHandlers, handlerCallback, false);\n  useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      ...gamepad,\n      id: gamepad.id,\n      hapticActuators,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value })),\n      index: gamepad.index\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        onGamepadConnected(gamepad);\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = ref(null);\n  const error = shallowRef(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Number.POSITIVE_INFINITY,\n    longitude: Number.POSITIVE_INFINITY,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(\n        updatePosition,\n        (err) => error.value = err,\n        {\n          enableHighAccuracy,\n          maximumAge,\n          timeout\n        }\n      );\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = ref(initialState);\n  const lastActive = ref(timestamp());\n  let timer;\n  const reset = () => {\n    idle.value = false;\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  };\n  const onEvent = createFilterWrapper(\n    eventFilter,\n    () => {\n      lastActive.value = timestamp();\n      reset();\n    }\n  );\n  if (window) {\n    const document = window.document;\n    for (const event of events)\n      useEventListener(window, event, onEvent, { passive: true });\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      });\n    }\n    reset();\n  }\n  return {\n    idle,\n    lastActive,\n    reset\n  };\n}\n\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    if (clazz)\n      img.className = clazz;\n    if (loading)\n      img.loading = loading;\n    if (crossorigin)\n      img.crossOrigin = crossorigin;\n    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\",\n    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n    const { display, flexDirection } = getComputedStyle(el);\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft) <= (offset.left || 0);\n    const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\n  });\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  watch(\n    () => [state.arrivedState[direction], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  return {\n    isLoading\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = ref(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(/* @__PURE__ */ new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = /* @__PURE__ */ new Set();\n  const usedKeys = /* @__PURE__ */ new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive: true });\n  useEventListener(\"focus\", reset, { passive: true });\n  const proxy = new Proxy(\n    refs,\n    {\n      get(target2, prop, rec) {\n        if (typeof prop !== \"string\")\n          return Reflect.get(target2, prop, rec);\n        prop = prop.toLowerCase();\n        if (prop in aliasMap)\n          prop = aliasMap[prop];\n        if (!(prop in refs)) {\n          if (/[+_-]/.test(prop)) {\n            const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n            refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n          } else {\n            refs[prop] = ref(false);\n          }\n        }\n        const r = Reflect.get(target2, prop, rec);\n        return useReactive ? toValue(r) : r;\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction usingElRef(source, cb) {\n  if (toValue(source))\n    cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  options = {\n    ...defaultOptions,\n    ...options\n  };\n  const {\n    document = defaultDocument\n  } = options;\n  const currentTime = ref(0);\n  const duration = ref(0);\n  const seeking = ref(false);\n  const volume = ref(1);\n  const waiting = ref(false);\n  const ended = ref(false);\n  const playing = ref(false);\n  const rate = ref(1);\n  const stalled = ref(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = ref(-1);\n  const isPictureInPicture = ref(false);\n  const muted = ref(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = typeof track === \"number\" ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = typeof track === \"number\" ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = toValue(target);\n    if (!el)\n      return;\n    const src = toValue(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (typeof src === \"string\")\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.addEventListener(\"error\", sourceErrorEvent.trigger);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  tryOnScopeDispose(() => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n  });\n  watch([target, volume], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.volume = volume.value;\n  });\n  watch([target, muted], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.muted = muted.value;\n  });\n  watch([target, rate], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.playbackRate = rate.value;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = toValue(options.tracks);\n    const el = toValue(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    isPlaying ? el.play() : el.pause();\n  });\n  useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n  useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n  useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n  useEventListener(target, \"seeking\", () => seeking.value = true);\n  useEventListener(target, \"seeked\", () => seeking.value = false);\n  useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n    waiting.value = true;\n    ignorePlayingUpdates(() => playing.value = false);\n  });\n  useEventListener(target, \"loadeddata\", () => waiting.value = false);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n    ignorePlayingUpdates(() => playing.value = true);\n  });\n  useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n  useEventListener(target, \"stalled\", () => stalled.value = true);\n  useEventListener(target, \"ended\", () => ended.value = true);\n  useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n  useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n  useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n  useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n  useEventListener(target, \"volumechange\", () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    volume.value = el.volume;\n    muted.value = el.muted;\n  });\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    // Volume\n    volume,\n    muted,\n    // Tracks\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    // Picture in Picture\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    // Events\n    onSourceError: sourceErrorEvent.on\n  };\n}\n\nfunction getMapVue2Compat() {\n  const data = shallowReactive({});\n  return {\n    get: (key) => data[key],\n    set: (key, value) => set(data, key, value),\n    has: (key) => hasOwn(data, key),\n    delete: (key) => del(data, key),\n    clear: () => {\n      Object.keys(data).forEach((key) => {\n        del(data, key);\n      });\n    }\n  };\n}\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return shallowReactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return shallowReactive(/* @__PURE__ */ new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n  page: (event) => [event.pageX, event.pageY],\n  client: (event) => [event.clientX, event.clientY],\n  screen: (event) => [event.screenX, event.screenY],\n  movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    target = window,\n    scroll = true,\n    eventFilter\n  } = options;\n  let _prevMouseEvent = null;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n  const mouseHandler = (event) => {\n    const result = extractor(event);\n    _prevMouseEvent = event;\n    if (result) {\n      [x.value, y.value] = result;\n      sourceType.value = \"mouse\";\n    }\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const result = extractor(event.touches[0]);\n      if (result) {\n        [x.value, y.value] = result;\n        sourceType.value = \"touch\";\n      }\n    }\n  };\n  const scrollHandler = () => {\n    if (!_prevMouseEvent || !window)\n      return;\n    const pos = extractor(_prevMouseEvent);\n    if (_prevMouseEvent instanceof MouseEvent && pos) {\n      x.value = pos[0] + window.scrollX;\n      y.value = pos[1] + window.scrollY;\n    }\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n  const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n  const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n    if (touch && type !== \"movement\") {\n      useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n      if (resetOnTouchEnds)\n        useEventListener(target, \"touchend\", reset, listenerOptions);\n    }\n    if (scroll && type === \"page\")\n      useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const type = options.type || \"page\";\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = ref(0);\n  const elementY = ref(0);\n  const elementPositionX = ref(0);\n  const elementPositionY = ref(0);\n  const elementHeight = ref(0);\n  const elementWidth = ref(0);\n  const isOutside = ref(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch(\n      [targetRef, x, y],\n      () => {\n        const el = unrefElement(targetRef);\n        if (!el)\n          return;\n        const {\n          left,\n          top,\n          width,\n          height\n        } = el.getBoundingClientRect();\n        elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n        elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n        elementHeight.value = height;\n        elementWidth.value = width;\n        const elX = x.value - elementPositionX.value;\n        const elY = y.value - elementPositionY.value;\n        isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n        if (handleOutside || !isOutside.value) {\n          elementX.value = elX;\n          elementY.value = elY;\n        }\n      },\n      { immediate: true }\n    );\n    useEventListener(document, \"mouseleave\", () => {\n      isOutside.value = true;\n    });\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    capture = false,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = ref(initialValue);\n  const sourceType = ref(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => () => {\n    pressed.value = true;\n    sourceType.value = srcType;\n  };\n  const onReleased = () => {\n    pressed.value = false;\n    sourceType.value = null;\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n    useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n    useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n    useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = ref(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  });\n  return {\n    isSupported,\n    language\n  };\n}\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = ref(true);\n  const saveData = ref(false);\n  const offlineAt = ref(void 0);\n  const onlineAt = ref(void 0);\n  const downlink = ref(void 0);\n  const downlinkMax = ref(void 0);\n  const rtt = ref(void 0);\n  const effectiveType = ref(void 0);\n  const type = ref(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    });\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    });\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, false);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline,\n    saveData,\n    offlineAt,\n    onlineAt,\n    downlink,\n    downlinkMax,\n    effectiveType,\n    rtt,\n    type\n  };\n}\n\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(/* @__PURE__ */ new Date());\n  const update = () => now.value = /* @__PURE__ */ new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return {\n      now,\n      ...controls\n    };\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = ref();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(\n    () => toValue(object),\n    (newObject) => {\n      release();\n      if (newObject)\n        url.value = URL.createObjectURL(newObject);\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  if (typeof value === \"function\" || isReadonly(value))\n    return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, toValue(min), toValue(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, toValue(min), toValue(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Number.POSITIVE_INFINITY,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n  const pageCount = computed(() => Math.max(\n    1,\n    Math.ceil(toValue(total) / toValue(currentPageSize))\n  ));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page)) {\n    syncRef(page, currentPage, {\n      direction: isReadonly(page) ? \"ltr\" : \"both\"\n    });\n  }\n  if (isRef(pageSize)) {\n    syncRef(pageSize, currentPageSize, {\n      direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n    });\n  }\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = ref(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    useEventListener(window, \"mouseout\", handler, { passive: true });\n    useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n    useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n  }\n  return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = ref(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    });\n  }\n  const lockOrientation = (type) => {\n    if (isSupported.value && typeof screenOrientation.lock === \"function\")\n      return screenOrientation.lock(type);\n    return Promise.reject(new Error(\"Not supported\"));\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const screenOrientation = reactive(useScreenOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n      return \"deviceOrientation\";\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        case \"portrait-primary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-secondary\":\n          value = orientation.beta / 90;\n          break;\n        default:\n          value = -orientation.beta / 90;\n      }\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.beta / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"portrait-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        default:\n          value = orientation.gamma / 90;\n      }\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n  const parentElement = shallowRef();\n  const update = () => {\n    const el = unrefElement(element);\n    if (el)\n      parentElement.value = el.parentElement;\n  };\n  tryOnMounted(update);\n  watch(() => toValue(element), update);\n  return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n  const {\n    window = defaultWindow,\n    immediate = true,\n    ...performanceOptions\n  } = options;\n  const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n  let observer;\n  const stop = () => {\n    observer == null ? void 0 : observer.disconnect();\n  };\n  const start = () => {\n    if (isSupported.value) {\n      stop();\n      observer = new PerformanceObserver(callback);\n      observer.observe(performanceOptions);\n    }\n  };\n  tryOnScopeDispose(stop);\n  if (immediate)\n    start();\n  return {\n    isSupported,\n    start,\n    stop\n  };\n}\n\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = ref(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n  }\n  return {\n    ...toRefs(state),\n    isInside\n  };\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = ref();\n  const triggerElement = ref();\n  let targetElement;\n  if (isSupported.value) {\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    });\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    });\n  }\n  async function lock(e) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock();\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = toRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    disableTextSelect = false\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const isPointerDown = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return distanceY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }),\n    useEventListener(target, \"pointerup\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n    })\n  ];\n  tryOnMounted(() => {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n    if (disableTextSelect) {\n      (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n      (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n      (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n    }\n  });\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(\n    toRef(value),\n    (_, oldValue) => {\n      previous.value = oldValue;\n    },\n    { flush: \"sync\" }\n  );\n  return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = ref(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = toValue(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    el.addEventListener(\"error\", (event) => reject(event));\n    el.addEventListener(\"abort\", (event) => reject(event));\n    el.addEventListener(\"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    });\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    var _a;\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    el.style.overflow = (_a = elInitialOverflow.get(el)) != null ? _a : \"\";\n    elInitialOverflow.delete(el);\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = {\n        ...toValue(shareOptions),\n        ...toValue(overrideOptions)\n      };\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...toValue(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(toValue(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    window = defaultWindow\n  } = options;\n  const lang = toRef(options.lang || \"en-US\");\n  const isListening = ref(false);\n  const isFinal = ref(false);\n  const result = ref(\"\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isListening.value) => {\n    isListening.value = value;\n  };\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  let recognition;\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = toValue(lang);\n    recognition.onstart = () => {\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const transcript = Array.from(event.results).map((result2) => {\n        isFinal.value = result2.isFinal;\n        return result2[0];\n      }).map((result2) => result2.transcript).join(\"\");\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = toValue(lang);\n    };\n    watch(isListening, () => {\n      if (isListening.value)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isListening.value = false;\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = ref(false);\n  const status = ref(\"init\");\n  const spokenText = toRef(text || \"\");\n  const lang = toRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = toValue(lang);\n    utterance2.voice = toValue(options.voice) || null;\n    utterance2.pitch = toValue(pitch);\n    utterance2.rate = toValue(rate);\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    utterance && synth.speak(utterance.value);\n  };\n  const stop = () => {\n    synth.cancel();\n    isPlaying.value = false;\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    stop,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = toValue(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(initialValue);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else if (mergeDefaults) {\n        const value = await serializer.read(rawValue);\n        if (typeof mergeDefaults === \"function\")\n          data.value = mergeDefaults(value, rawInit);\n        else if (type === \"object\" && !Array.isArray(value))\n          data.value = { ...rawInit, ...value };\n        else\n          data.value = value;\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n  if (storage) {\n    watchWithFilter(\n      data,\n      async () => {\n        try {\n          if (data.value == null)\n            await storage.removeItem(key);\n          else\n            await storage.setItem(key, await serializer.write(data.value));\n        } catch (e) {\n          onError(e);\n        }\n      },\n      {\n        flush,\n        deep,\n        eventFilter\n      }\n    );\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = ref(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = ref(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(\n      cssRef,\n      (value) => {\n        el.textContent = value;\n      },\n      { immediate: true }\n    );\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true,\n    window = defaultWindow\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return diffY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  let listenerOptions;\n  const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n  if (!passive)\n    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n  else\n    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      if (listenerOptions.capture && !listenerOptions.passive)\n        e.preventDefault();\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isPassiveEventSupported,\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop\n  };\n}\nfunction checkPassiveEventSupport(document) {\n  if (!document)\n    return false;\n  let supportsPassive = false;\n  const optionsBlock = {\n    get passive() {\n      supportsPassive = true;\n      return false;\n    }\n  };\n  document.addEventListener(\"x\", noop, optionsBlock);\n  document.removeEventListener(\"x\", noop);\n  return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(\n      document.querySelector(selector),\n      () => dir.value = getValue(),\n      { attributes: true }\n    );\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange);\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction useTextareaAutosize(options) {\n  var _a;\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n  const textareaScrollHeight = ref(1);\n  function triggerResize() {\n    var _a2, _b;\n    if (!textarea.value)\n      return;\n    let height = \"\";\n    textarea.value.style[styleProp] = \"1px\";\n    textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n    if (options == null ? void 0 : options.styleTarget)\n      toValue(options.styleTarget).style[styleProp] = `${textareaScrollHeight.value}px`;\n    else\n      height = `${textareaScrollHeight.value}px`;\n    textarea.value.style[styleProp] = height;\n    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n  }\n  watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n  useResizeObserver(textarea, () => triggerResize());\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n  return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n  const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n  if (exposeControls) {\n    return {\n      timeAgo,\n      ...controls\n    };\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n  const { start } = useTimeoutFn(loop, interval, { immediate: false });\n  const isActive = ref(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      loop();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = ref(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return {\n      timestamp: ts,\n      ...controls\n    };\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b, _c;\n  const {\n    document = defaultDocument,\n    restoreOnUnmount = (t) => t\n  } = options;\n  const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n  const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n  const isReadonly = newTitle && typeof newTitle === \"function\";\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n  }\n  watch(\n    title,\n    (t, o) => {\n      if (t !== o && document)\n        document.title = format(typeof t === \"string\" ? t : \"\");\n    },\n    { immediate: true }\n  );\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver(\n      (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n      () => {\n        if (document && document.title !== title.value)\n          title.value = format(document.title);\n      },\n      { childList: true }\n    );\n  }\n  tryOnBeforeUnmount(() => {\n    if (restoreOnUnmount) {\n      const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n      if (restoredTitle != null && document)\n        document.title = restoredTitle;\n    }\n  });\n  return title;\n}\n\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n  return a + alpha * (b - a);\n}\nfunction toVec(t) {\n  return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n  var _a, _b;\n  const fromVal = toValue(from);\n  const toVal = toValue(to);\n  const v1 = toVec(fromVal);\n  const v2 = toVec(toVal);\n  const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n  const startedAt = Date.now();\n  const endAt = Date.now() + duration;\n  const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n  const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n  return new Promise((resolve) => {\n    source.value = fromVal;\n    const tick = () => {\n      var _a2;\n      if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n        resolve();\n        return;\n      }\n      const now = Date.now();\n      const alpha = ease((now - startedAt) / duration);\n      const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n      if (Array.isArray(source.value))\n        source.value = arr.map((n, i) => {\n          var _a3, _b2;\n          return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n        });\n      else if (typeof source.value === \"number\")\n        source.value = arr[0];\n      if (now < endAt) {\n        requestAnimationFrame(tick);\n      } else {\n        source.value = toVal;\n        resolve();\n      }\n    };\n    tick();\n  });\n}\nfunction useTransition(source, options = {}) {\n  let currentId = 0;\n  const sourceVal = () => {\n    const v = toValue(source);\n    return typeof v === \"number\" ? v : v.map(toValue);\n  };\n  const outputRef = ref(sourceVal());\n  watch(sourceVal, async (to) => {\n    var _a, _b;\n    if (toValue(options.disabled))\n      return;\n    const id = ++currentId;\n    if (options.delay)\n      await promiseTimeout(toValue(options.delay));\n    if (id !== currentId)\n      return;\n    const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n    (_a = options.onStarted) == null ? void 0 : _a.call(options);\n    await executeTransition(outputRef, outputRef.value, toVal, {\n      ...options,\n      abort: () => {\n        var _a2;\n        return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n      }\n    });\n    (_b = options.onFinished) == null ? void 0 : _b.call(options);\n  }, { deep: true });\n  watch(() => toValue(options.disabled), (disabled) => {\n    if (disabled) {\n      currentId++;\n      outputRef.value = sourceVal();\n    }\n  });\n  tryOnScopeDispose(() => {\n    currentId++;\n  });\n  return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(\n    state,\n    () => {\n      const params = new URLSearchParams(\"\");\n      Object.keys(state).forEach((key) => {\n        const mapEntry = state[key];\n        if (Array.isArray(mapEntry))\n          mapEntry.forEach((value) => params.append(key, value));\n        else if (removeNullishValues && mapEntry == null)\n          params.delete(key);\n        else if (removeFalsyValues && !mapEntry)\n          params.delete(key);\n        else\n          params.set(key, mapEntry);\n      });\n      write(params);\n    },\n    { deep: true }\n  );\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    window.history.replaceState(\n      window.history.state,\n      window.document.title,\n      window.location.pathname + constructQuery(params)\n    );\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  useEventListener(window, \"popstate\", onChanged, false);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, false);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n  const constraints = ref(options.constraints);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(type) {\n    switch (type) {\n      case \"video\": {\n        if (constraints.value)\n          return constraints.value.video || false;\n        break;\n      }\n      case \"audio\": {\n        if (constraints.value)\n          return constraints.value.audio || false;\n        break;\n      }\n    }\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(\"video\"),\n      audio: getDeviceOptions(\"audio\")\n    });\n    return stream.value;\n  }\n  function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  watch(\n    constraints,\n    () => {\n      if (autoSwitch.value && stream.value)\n        restart();\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(() => {\n    stop();\n  });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    constraints,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c, _d, _e;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue,\n    shouldEmit\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    if (isVue2) {\n      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n      key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n      if (!eventName)\n        event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n    } else {\n      key = \"modelValue\";\n    }\n  }\n  event = event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  const triggerEmit = (value) => {\n    if (shouldEmit) {\n      if (shouldEmit(value))\n        _emit(event, value);\n    } else {\n      _emit(event, value);\n    }\n  };\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    let isUpdating = false;\n    watch(\n      () => props[key],\n      (v) => {\n        if (!isUpdating) {\n          isUpdating = true;\n          proxy.value = cloneFn(v);\n          nextTick(() => isUpdating = false);\n        }\n      }\n    );\n    watch(\n      proxy,\n      (v) => {\n        if (!isUpdating && (v !== props[key] || deep))\n          triggerEmit(v);\n      },\n      { deep }\n    );\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        triggerEmit(value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props) {\n    ret[key] = useVModel(\n      props,\n      key,\n      emit,\n      options\n    );\n  }\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = toRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(\n      vibrate,\n      interval,\n      {\n        immediate: false,\n        immediateCallback: false\n      }\n    );\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = ref(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n  watch([size.width, size.height, list], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nfunction useWakeLock(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  let wakeLock;\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = ref(false);\n  async function onVisibilityChange() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    if (document && document.visibilityState === \"visible\")\n      wakeLock = await navigator.wakeLock.request(\"screen\");\n    isActive.value = !wakeLock.released;\n  }\n  if (document)\n    useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n  async function request(type) {\n    if (!isSupported.value)\n      return;\n    wakeLock = await navigator.wakeLock.request(type);\n    isActive.value = !wakeLock.released;\n  }\n  async function release() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    await wakeLock.release();\n    isActive.value = !wakeLock.released;\n    wakeLock = null;\n  }\n  return {\n    isSupported,\n    isActive,\n    request,\n    release\n  };\n}\n\nfunction useWebNotification(options = {}) {\n  const {\n    window = defaultWindow,\n    requestPermissions: _requestForPermissions = true\n  } = options;\n  const defaultWebNotificationOptions = options;\n  const isSupported = useSupported(() => !!window && \"Notification\" in window);\n  const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n  const notification = ref(null);\n  const ensurePermissions = async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionGranted.value && Notification.permission !== \"denied\") {\n      const result = await Notification.requestPermission();\n      if (result === \"granted\")\n        permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  };\n  const { on: onClick, trigger: clickTrigger } = createEventHook();\n  const { on: onShow, trigger: showTrigger } = createEventHook();\n  const { on: onError, trigger: errorTrigger } = createEventHook();\n  const { on: onClose, trigger: closeTrigger } = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value || !permissionGranted.value)\n      return;\n    const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n    notification.value = new Notification(options2.title || \"\", options2);\n    notification.value.onclick = clickTrigger;\n    notification.value.onshow = showTrigger;\n    notification.value.onerror = errorTrigger;\n    notification.value.onclose = closeTrigger;\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  if (_requestForPermissions)\n    tryOnMounted(ensurePermissions);\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    ensurePermissions,\n    permissionGranted,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = ref(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = toRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let pongTimeoutWait;\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const close = (code = 1e3, reason) => {\n    if (!isClient || !wsRef.value)\n      return;\n    explicitlyClosed = true;\n    resetHeartbeat();\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n    wsRef.value = void 0;\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === message)\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(\n      () => {\n        send(message, false);\n        if (pongTimeoutWait != null)\n          return;\n        pongTimeoutWait = setTimeout(() => {\n          close();\n          explicitlyClosed = false;\n        }, pongTimeout);\n      },\n      interval,\n      { immediate: false }\n    );\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    if (isClient)\n      useEventListener(\"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    if (!isClient && !isWorker)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    open();\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = (...args) => {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(...args);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (typeof arg0 === \"string\")\n      worker.value = new Worker(arg0, workerOptions);\n    else if (typeof arg0 === \"function\")\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nfunction jobRunner(userFunc) {\n  return (e) => {\n    const userFuncArgs = e.data[0];\n    return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n      postMessage([\"SUCCESS\", result]);\n    }).catch((error) => {\n      postMessage([\"ERROR\", error]);\n    });\n  };\n}\n\nfunction depsParser(deps) {\n  if (deps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  return `importScripts(${depsString})`;\n}\n\nfunction createWorkerBlobUrl(fn, deps) {\n  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n  const {\n    dependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = ref(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = ref();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      e.preventDefault();\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(\n        () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n        timeout\n      );\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    promise.value = {\n      resolve,\n      reject\n    };\n    worker.value && worker.value.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\n        \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n      );\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n}\n\nfunction useWindowFocus(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref(false);\n  const focused = ref(window.document.hasFocus());\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  });\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  });\n  return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n  const { window = defaultWindow, behavior = \"auto\" } = options;\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const internalX = ref(window.scrollX);\n  const internalY = ref(window.scrollY);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo({ left: x2, behavior });\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo({ top: y2, behavior });\n    }\n  });\n  useEventListener(\n    window,\n    \"scroll\",\n    () => {\n      internalX.value = window.scrollX;\n      internalY.value = window.scrollY;\n    },\n    {\n      capture: false,\n      passive: true\n    }\n  );\n  return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Number.POSITIVE_INFINITY,\n    initialHeight = Number.POSITIVE_INFINITY,\n    listenOrientation = true,\n    includeScrollbar = true\n  } = options;\n  const width = ref(initialWidth);\n  const height = ref(initialHeight);\n  const update = () => {\n    if (window) {\n      if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  useEventListener(\"resize\", update, { passive: true });\n  if (listenOrientation) {\n    const matches = useMediaQuery(\"(orientation: portrait)\");\n    watch(matches, () => update());\n  }\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","<template>\n  <span :id=\"computedId + '_placeholder'\" ref=\"placeholder\" />\n  <slot name=\"target\" :show=\"show\" :hide=\"hide\" :toggle=\"toggle\" :show-state=\"showState\" />\n  <Teleport :to=\"teleportTo\" :disabled=\"!teleportTo || teleportDisabled\">\n    <div\n      v-if=\"showStateInternal || props.persistent\"\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"element\"\n      :class=\"computedClasses\"\n      role=\"tooltip\"\n      tabindex=\"-1\"\n      :style=\"floatingStyles\"\n    >\n      <div\n        ref=\"arrow\"\n        :class=\"`${props.tooltip ? 'tooltip' : 'popover'}-arrow`\"\n        :style=\"arrowStyle\"\n        data-popper-arrow\n      />\n      <div class=\"overflow-auto\" :style=\"sizeStyles\">\n        <template v-if=\"title || $slots.title\">\n          <div\n            v-if=\"!props.html\"\n            class=\"position-sticky top-0\"\n            :class=\"props.tooltip ? 'tooltip-inner' : 'popover-header'\"\n          >\n            <slot name=\"title\">\n              {{ title }}\n            </slot>\n          </div>\n          <!-- eslint-disable vue/no-v-html -->\n          <div\n            v-else\n            class=\"position-sticky top-0\"\n            :class=\"props.tooltip ? 'tooltip-inner' : 'popover-header'\"\n            v-html=\"sanitizedTitle\"\n          />\n          <!-- eslint-enable vue/no-v-html -->\n        </template>\n        <template v-if=\"(props.tooltip && !$slots.title && !title) || !props.tooltip\">\n          <div v-if=\"!props.html\" :class=\"props.tooltip ? 'tooltip-inner' : 'popover-body'\">\n            <slot>\n              {{ content }}\n            </slot>\n          </div>\n          <!-- eslint-disable vue/no-v-html -->\n          <div\n            v-else\n            :class=\"props.tooltip ? 'tooltip-inner' : 'popover-body'\"\n            v-html=\"sanitizedContent\"\n          />\n          <!-- eslint-enable vue/no-v-html -->\n        </template>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  type Alignment,\n  arrow as arrowMiddleware,\n  autoPlacement,\n  autoUpdate,\n  type Boundary,\n  flip,\n  hide as hideMiddleware,\n  inline as inlineMiddleware,\n  type Middleware,\n  offset as offsetMiddleware,\n  type Placement as OriginalPlacement,\n  type RootBoundary,\n  shift,\n  size as sizeMiddleware,\n  useFloating,\n} from '@floating-ui/vue'\nimport {onClickOutside, useMouseInElement, useToNumber} from '@vueuse/core'\nimport {\n  computed,\n  type CSSProperties,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\nimport {useId} from '../composables'\nimport type {BPopoverProps} from '../types'\nimport {\n  BvTriggerableEvent,\n  getElement,\n  getTransitionDelay,\n  IS_BROWSER,\n  resolveBootstrapPlacement,\n} from '../utils'\nimport {DefaultAllowlist, sanitizeHtml} from '../utils/sanitizer'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BPopoverProps>(), {\n  boundary: 'clippingAncestors',\n  boundaryPadding: undefined,\n  click: false,\n  teleportTo: undefined,\n  teleportDisabled: false,\n  content: undefined,\n  customClass: '',\n  delay: () => ({show: 100, hide: 300}),\n  floatingMiddleware: undefined,\n  hide: undefined,\n  html: false,\n  id: undefined,\n  inline: false,\n  manual: false,\n  noAutoClose: false,\n  noFade: false,\n  noFlip: false,\n  noHide: false,\n  noShift: false,\n  noSize: false,\n  noninteractive: false,\n  offset: null,\n  persistent: false,\n  placement: 'top',\n  realtime: false,\n  reference: null,\n  strategy: 'absolute',\n  target: null,\n  title: undefined,\n  tooltip: false,\n  variant: null,\n})\n\nconst emit = defineEmits<{\n  'hidden': [value: BvTriggerableEvent]\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': [value: BvTriggerableEvent]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  target?: (props: {\n    show: () => void\n    hide: (e: Event) => void\n    toggle: (e: Event) => void\n    showState: boolean\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<boolean>({\n  default: false,\n})\n\nconst showState = ref(modelValue.value)\nconst showStateInternal = ref(modelValue.value)\nwatchEffect(() => {\n  modelValue.value = showState.value\n})\n\nwatch(modelValue, (newValue) => {\n  if (newValue === showState.value) return\n  newValue ? show() : hide(new Event('update:modelValue'))\n})\n\nconst computedId = useId(() => props.id, 'popover')\n\nconst hidden = ref(false)\n\nconst element = ref<HTMLElement | null>(null)\nconst targetTrigger = ref<HTMLElement | null>(null)\nconst arrow = ref<HTMLElement | null>(null)\nconst trigger = ref<HTMLElement | null>(null)\nconst placeholder = ref<HTMLElement | null>(null)\n\nconst sanitizedTitle = computed(() =>\n  props.title ? sanitizeHtml(props.title, DefaultAllowlist) : ''\n)\n\nconst sanitizedContent = computed(() =>\n  props.content ? sanitizeHtml(props.content, DefaultAllowlist) : ''\n)\nconst isAutoPlacement = toRef(() => props.placement.startsWith('auto'))\nconst offsetNumber = useToNumber(() => props.offset ?? NaN)\n\nconst boundary = computed<Boundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? undefined : props.boundary\n)\nconst rootBoundary = computed<RootBoundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? props.boundary : undefined\n)\n\nconst sizeStyles = ref<CSSProperties>({})\nconst floatingMiddleware = computed<Middleware[]>(() => {\n  if (props.floatingMiddleware !== undefined) {\n    return props.floatingMiddleware\n  }\n  const off = props.offset !== null ? offsetNumber.value : props.tooltip ? 6 : 8\n  const arr: Middleware[] = [offsetMiddleware(off)]\n  if (props.noFlip === false && !isAutoPlacement.value) {\n    arr.push(\n      flip({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (isAutoPlacement.value) {\n    arr.push(\n      autoPlacement({\n        alignment: (props.placement.split('-')[1] as Alignment) || undefined,\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (props.noShift === false) {\n    arr.push(\n      shift({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (props.noHide === false) {\n    arr.push(\n      hideMiddleware({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (props.inline === true) {\n    arr.push(inlineMiddleware())\n  }\n  arr.push(arrowMiddleware({element: arrow, padding: 10}))\n  if (props.noSize === false) {\n    arr.push(\n      sizeMiddleware({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n        apply({availableWidth, availableHeight}) {\n          sizeStyles.value = {\n            maxHeight: availableHeight ? `${availableHeight}px` : undefined,\n            maxWidth: availableWidth ? `${availableWidth}px` : undefined,\n          }\n        },\n      })\n    )\n  }\n  return arr\n})\n\nconst placementRef = toRef(() =>\n  isAutoPlacement.value ? undefined : (props.placement as OriginalPlacement)\n)\n\nconst {floatingStyles, middlewareData, placement, update} = useFloating(targetTrigger, element, {\n  placement: placementRef,\n  middleware: floatingMiddleware,\n  strategy: toRef(() => props.strategy),\n  whileElementsMounted: (...args) => {\n    const cleanup = autoUpdate(...args, {animationFrame: props.realtime})\n    // Important! Always return the cleanup function.\n    return cleanup\n  },\n})\n\nconst arrowStyle = ref<CSSProperties>({position: 'absolute'})\n\nwatch(middlewareData, () => {\n  if (props.noHide === false) {\n    if (middlewareData.value.hide?.referenceHidden) {\n      hidden.value = true\n    } else {\n      hidden.value = false\n    }\n  }\n  if (middlewareData.value.arrow) {\n    const {x, y} = middlewareData.value.arrow\n    arrowStyle.value = {\n      position: 'absolute',\n      top: y ? `${y}px` : '',\n      left: x ? `${x}px` : '',\n    }\n  }\n})\n\nconst computedClasses = computed(() => {\n  const type = props.tooltip ? 'tooltip' : 'popover'\n  return [\n    type,\n    `b-${type}`,\n    {\n      [`b-${type}-${props.variant}`]: props.variant !== null,\n      show: showState.value && !hidden.value,\n      ['pe-none']: !showState.value,\n      fade: !props.noFade,\n      ['d-none']: !showState.value && props.noFade,\n      [`${props.customClass}`]: props.customClass !== undefined,\n      [`bs-${type}-${resolveBootstrapPlacement(placement.value)}`]: placement.value !== undefined,\n    },\n  ]\n})\n\nconst {isOutside} = useMouseInElement(element)\nconst {isOutside: triggerIsOutside} = useMouseInElement(trigger)\n\nconst toggle = (e?: Event) => {\n  const event = e ?? new Event('click')\n  showState.value ? hide(event) : show()\n}\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nlet showTimeout: ReturnType<typeof setTimeout> | undefined\nconst show = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    emit('show-prevented')\n    return\n  }\n  showStateInternal.value = true\n  nextTick(() => {\n    update()\n    showTimeout = setTimeout(\n      () => {\n        update()\n        showState.value = true\n        nextTick(() => {\n          emit('shown', buildTriggerableEvent('shown'))\n        })\n      },\n      typeof props.delay === 'number' ? props.delay : props.delay?.show || 0\n    )\n  })\n}\n\nconst hide = (e: Readonly<Event>) => {\n  const event = buildTriggerableEvent('hide', {cancelable: true})\n  emit('hide', event)\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    return\n  }\n  if (showTimeout) {\n    clearTimeout(showTimeout)\n    showTimeout = undefined\n  }\n  const delay = typeof props.delay === 'number' ? props.delay : props.delay?.hide || 0\n  setTimeout(() => {\n    if (\n      e?.type === 'click' ||\n      e?.type === 'forceHide' ||\n      (e?.type === 'update:modelValue' && props.manual) ||\n      (!props.noninteractive &&\n        isOutside.value &&\n        triggerIsOutside.value &&\n        !element.value?.contains(document?.activeElement) &&\n        !trigger.value?.contains(document?.activeElement)) ||\n      (props.noninteractive && triggerIsOutside.value)\n    ) {\n      showState.value = false\n      nextTick(() => {\n        setTimeout(\n          () => {\n            showStateInternal.value = false\n          },\n          element.value ? getTransitionDelay(element.value) : 150\n        )\n        emit('hidden', buildTriggerableEvent('hidden'))\n      })\n    } else {\n      setTimeout(\n        () => {\n          hide(e)\n        },\n        delay < 50 ? 50 : delay\n      )\n    }\n  }, delay)\n}\n\ndefineExpose({\n  hide,\n  show,\n  toggle,\n})\n\nconst bind = () => {\n  // TODO: is this the best way to bind the events?\n  // we place a span and get the next element sibling fo rthe listeners\n  if (props.target) {\n    const elem = getElement(props.target)\n    if (elem) {\n      trigger.value = elem\n    } else {\n      // eslint-disable-next-line no-console\n      console.warn('Target element not found', props.target)\n    }\n  } else {\n    trigger.value = placeholder.value?.nextElementSibling as HTMLElement\n  }\n  if (props.reference) {\n    const elem = getElement(props.reference)\n    if (elem) {\n      targetTrigger.value = elem\n    } else {\n      // eslint-disable-next-line no-console\n      console.warn('Reference element not found', props.reference)\n    }\n  } else {\n    targetTrigger.value = trigger.value\n  }\n  if (!trigger.value || props.manual) {\n    return\n  }\n  if (!IS_BROWSER) return\n  trigger.value.addEventListener('forceHide', hide)\n  if (props.click) {\n    trigger.value.addEventListener('click', toggle)\n    return\n  }\n  trigger.value.addEventListener('pointerenter', show)\n  trigger.value.addEventListener('pointerleave', hide)\n  trigger.value.addEventListener('focus', show)\n  trigger.value.addEventListener('blur', hide)\n}\n\nconst unbind = () => {\n  if (trigger.value) {\n    trigger.value.removeEventListener('forceHide', hide)\n    trigger.value.removeEventListener('click', toggle)\n    trigger.value.removeEventListener('pointerenter', show)\n    trigger.value.removeEventListener('pointerleave', hide)\n    trigger.value.removeEventListener('focus', show)\n    trigger.value.removeEventListener('blur', hide)\n  }\n}\n\nonClickOutside(\n  element,\n  () => {\n    if (showState.value && props.click && !props.noAutoClose && !props.manual)\n      hide(new Event('clickOutside'))\n  },\n  {ignore: [trigger]}\n)\n\nwatch([() => props.click, () => props.target, () => props.reference], () => {\n  unbind()\n  bind()\n  // update()\n})\n\nonMounted(bind)\n\nonBeforeUnmount(unbind)\n</script>\n","import type {Placement} from '@floating-ui/vue'\nexport {autoUpdate} from '@floating-ui/vue'\n\nimport {type DirectiveBinding, h, render} from 'vue'\nimport {DefaultAllowlist, sanitizeHtml} from './sanitizer'\nimport BPopover from '../components/BPopover.vue'\nimport type {BPopoverProps} from '../types'\n\n// TODO this function doesn't currently resolve with RTL in mind. Once Bootstrap finalizes their RTL, we should make this change here\n/**\n * Configures Bootstrap-like placement props to floating-ui Placement strings.\n * Top drops up, bottom drops down, end drops right, start drops left, dropend will _align_ the drop to the 'end',\n * dropstart will _align_ the drop to the 'start'. Bottom is default, so it is the last in the order. Bottom should essentially be the opposite of top\n * @param {top: boolean; bottom: boolean; start: boolean; end: boolean; dropstart: boolean; dropend: boolean}\n * @returns {Placement} Placement\n */\nexport const resolveFloatingPlacement = ({\n  top,\n  end,\n  start,\n  alignCenter,\n  alignEnd,\n}: Readonly<{\n  top: boolean\n  start: boolean\n  end: boolean\n  alignCenter: boolean\n  alignEnd: boolean\n}>): Placement => {\n  const direction = top ? 'top' : start ? 'left' : end ? 'right' : 'bottom'\n  const align = alignEnd ? 'end' : alignCenter ? null : 'start'\n  return `${direction}${align ? `-${align}` : ''}` as Placement\n}\n\nexport const resolveBootstrapPlacement = (placement: Placement): string => {\n  const [_placement] = placement.split('-')\n  switch (_placement) {\n    case 'left':\n      return 'start'\n    case 'right':\n      return 'end'\n    default:\n      return _placement\n  }\n}\n\nexport const resolveActiveStatus = (values: DirectiveBinding['value']): boolean =>\n  typeof values !== 'object' || values.active !== false\n\nexport const resolveContent = (\n  values: DirectiveBinding['value'],\n  el: HTMLElement\n): {title?: string; content?: string} => {\n  const isActive = resolveActiveStatus(values)\n  if (!isActive) return {}\n\n  const missingBindingValue =\n    typeof values === 'undefined' ||\n    (typeof values === 'object' && !values.title && !values.content)\n  const title = el.getAttribute('title') || el.getAttribute('data-original-title')\n  if (missingBindingValue) {\n    if (title) {\n      el.removeAttribute('title')\n      el.setAttribute('data-original-title', title)\n\n      return {\n        content: sanitizeHtml(title, DefaultAllowlist),\n      }\n    }\n    return {}\n  }\n  if (typeof values === 'string') {\n    return {\n      content: sanitizeHtml(values, DefaultAllowlist),\n    }\n  }\n  return {\n    title: values?.title ? sanitizeHtml(values?.title, DefaultAllowlist) : undefined,\n    content: values?.content ? sanitizeHtml(values?.content, DefaultAllowlist) : undefined,\n  }\n}\n\nexport const resolveDirectiveProps = (\n  binding: Readonly<DirectiveBinding>,\n  el: Readonly<HTMLElement>\n) => ({\n  target: el,\n  modelValue: binding.modifiers.show,\n  inline: binding.modifiers.inline,\n  click: binding.modifiers.click,\n  realtime: binding.modifiers.realtime,\n  persistent: binding.modifiers.persistent,\n  placement: binding.modifiers.left\n    ? 'left'\n    : binding.modifiers.right\n      ? 'right'\n      : binding.modifiers.bottom\n        ? 'bottom'\n        : binding.modifiers.top\n          ? 'top'\n          : undefined,\n  html: true,\n  ...(typeof binding.value === 'object' ? binding.value : {}),\n  ...(binding.modifiers.interactive ? {noninteractive: false} : {}),\n  title: null,\n  content: null,\n})\n\nexport interface ElementWithPopper extends HTMLElement {\n  $__element?: HTMLElement\n}\n\nexport const bind = (\n  el: ElementWithPopper,\n  binding: Readonly<DirectiveBinding>,\n  props: BPopoverProps\n) => {\n  const div = document.createElement('span')\n  if (binding.modifiers.body) document.body.appendChild(div)\n  else if (binding.modifiers.child) el.appendChild(div)\n  else el.parentNode?.insertBefore(div, el.nextSibling)\n  render(h(BPopover, props), div)\n  el.$__element = div\n}\n\nexport const unbind = (el: ElementWithPopper) => {\n  const div = el.$__element\n  if (div) render(null, div)\n  setTimeout(() => {\n    div?.remove()\n  }, 0)\n  delete el.$__element\n}\n","import type {TableFieldFormatter} from '../types'\nimport {get} from '.'\n\nexport default (\n  item: unknown,\n  // Weakly type fieldKey because it can be a nested string, such as 'foo.bar.baz'\n  fieldKey: string,\n  formatter?: TableFieldFormatter<unknown>\n) => {\n  const val = get(item, fieldKey)\n  return formatter && typeof formatter === 'function' ? formatter(val, fieldKey, item) : val\n}\n","import type {ComponentProps, PropDefinition} from '../types'\n\nexport default (\n  prefix: string,\n  breakpoints: readonly string[],\n  definition: Readonly<PropDefinition>\n): ComponentProps =>\n  breakpoints.concat(['sm', 'md', 'lg', 'xl', 'xxl']).reduce((props, breakpoint) => {\n    props[\n      !prefix ? breakpoint : `${prefix}${breakpoint.charAt(0).toUpperCase() + breakpoint.slice(1)}`\n    ] = definition\n    return props\n  }, {} as ComponentProps)\n","import type {ComponentProps} from '../types'\n\nexport default (\n  props: Readonly<Record<PropertyKey, unknown>>,\n  els: Readonly<ComponentProps>,\n  propPrefix: string,\n  classPrefix = propPrefix\n): string[] =>\n  Object.keys(els).reduce((arr: string[], prop) => {\n    if (!props[prop]) return arr\n\n    arr.push(\n      [classPrefix, prop.replace(propPrefix, ''), props[prop]]\n        .filter((e) => e && typeof e !== 'boolean')\n        .join('-')\n        .toLowerCase()\n    )\n\n    return arr\n  }, [] as string[])\n","import type {ComponentPublicInstance} from 'vue'\n\nexport default (\n  element: string | Readonly<ComponentPublicInstance> | Readonly<HTMLElement> | null\n): HTMLElement | undefined => {\n  if (!element) return undefined\n  if (typeof element === 'string') {\n    if (typeof document === 'undefined') return undefined\n    const idElement = document.getElementById(element)\n    return idElement ?? (document.querySelector(element) as HTMLElement) ?? undefined\n  }\n  return (element as ComponentPublicInstance).$el ?? element\n}\n","import type {Slot, VNode} from 'vue'\n\nexport default (slot: Slot | undefined, filterBy: string): VNode[] =>\n  (slot?.() ?? [])\n    .reduce((arr: VNode[], slot: VNode) => {\n      if (typeof slot.type === 'symbol') {\n        arr = arr.concat(slot.children as unknown as VNode)\n      } else {\n        arr.push(slot)\n      }\n      return arr\n    }, [])\n    .filter((child) => (child.type as {__name: string} | undefined)?.__name === filterBy)\n","export const RX_UNDERSCORE = /_/g\nexport const RX_LOWER_UPPER = /([a-z])([A-Z])/g\nexport const RX_NUMBER = /^[0-9]*\\.?[0-9]+$/\nexport const RX_START_SPACE_WORD = /(\\s|^)(\\w)/g\nexport const RX_FIRST_START_SPACE_WORD = /(\\s|^)(\\w)/\nexport const RX_SPACE_SPLIT = /\\s+/\nexport const RX_HASH = /^#/\nexport const RX_HASH_ID = /^#[A-Za-z]+[\\w\\-:.]*$/\n\nexport const RX_STRIP_LOCALE_MODS = /-u-.+/\nexport const RX_REGEXP_REPLACE = /[-/\\\\^$*+?.()|[\\]{}]/g\nexport const RX_SPACES = /[\\s\\uFEFF\\xA0]+/g\n","import {\n  RX_FIRST_START_SPACE_WORD,\n  RX_LOWER_UPPER,\n  RX_REGEXP_REPLACE,\n  RX_SPACES,\n  RX_START_SPACE_WORD,\n  RX_UNDERSCORE,\n} from '../constants/regex'\n\n/**\n * @param str\n * @returns\n */\nexport const startCase = (str: string): string =>\n  str\n    .replace(RX_UNDERSCORE, ' ')\n    .replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`)\n    .replace(RX_FIRST_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase())\n\n/**\n * @param str\n * @returns\n */\nexport const titleCase = (str: string): string =>\n  str\n    .replace(RX_UNDERSCORE, ' ')\n    .replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`)\n    .replace(RX_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase())\n\n/**\n * Uppercases the first letter of a string and returns a new string\n *\n * @param str\n * @returns\n */\nexport const upperFirst = (str: string): string => {\n  const trim = str.trim()\n  return trim.charAt(0).toUpperCase() + trim.slice(1)\n}\n\n/**\n * Escapes a string for RegExp usage.\n *\n * @param str\n * @returns\n */\nexport const escapeRegExp = (str: string): string => str.replace(RX_REGEXP_REPLACE, '\\\\$&')\n\n/**\n * Escapes special chars in string and replaces\n * contiguous spaces with a whitespace match\n *\n * @param str\n * @returns\n */\nexport const escapeRegExpChars = (str: string): string =>\n  escapeRegExp(str).replace(RX_SPACES, '\\\\s')\n","import {titleCase} from './stringUtils'\nimport type {TableFieldRaw} from '../types'\n\nexport default (field: Readonly<TableFieldRaw<unknown>>) =>\n  typeof field === 'string'\n    ? titleCase(field)\n    : field.label !== undefined\n      ? field.label\n      : typeof field.key === 'string'\n        ? titleCase(field.key)\n        : field.key\n","import type {RouteLocationRaw} from 'vue-router'\n\nexport default (props: Readonly<{href?: string; to?: RouteLocationRaw}>): boolean =>\n  !!(props.href || props.to)\n","import type {\n  Component,\n  ComponentInternalInstance,\n  ComputedRef,\n  InjectionKey,\n  MaybeRefOrGetter,\n  Ref,\n  ShallowRef,\n} from 'vue'\nimport type {\n  BModalProps,\n  BreadcrumbItemRaw,\n  ButtonVariant,\n  CheckboxValue,\n  ClassValue,\n  ColorVariant,\n  LiteralUnion,\n  Numberish,\n  OrchestratedModal,\n  OrchestratedToast,\n  RadioValue,\n  RadiusElement,\n  Size,\n  TabType,\n  TextColorVariant,\n} from '../types'\n\n// BCarousel\nexport const carouselInjectionKey: InjectionKey<{\n  background: Readonly<Ref<string | undefined>>\n  width: Readonly<Ref<string | undefined>>\n  height: Readonly<Ref<string | undefined>>\n}> = Symbol('carousel')\n\n// BTabs\nexport const tabsInjectionKey: InjectionKey<{\n  lazy: Readonly<Ref<boolean>>\n  card: Readonly<Ref<boolean>>\n  noFade: Readonly<Ref<boolean>>\n  registerTab: (tab: Readonly<Ref<TabType>>) => void\n  unregisterTab: (id: string) => void\n  activateTab: (id: string | undefined) => void\n  activeTabClass: Readonly<Ref<ClassValue>>\n  inactiveTabClass: Readonly<Ref<ClassValue>>\n  tabClass: Readonly<Ref<ClassValue>>\n  activeId: Readonly<Ref<string | undefined>>\n}> = Symbol('tabs')\n\n// BProgress\nexport const progressInjectionKey: InjectionKey<{\n  animated: Readonly<Ref<boolean | undefined>>\n  max: Readonly<Ref<Numberish>>\n  showProgress: Readonly<Ref<boolean | undefined>>\n  showValue: Readonly<Ref<boolean | undefined>>\n  striped: Readonly<Ref<boolean | undefined>>\n}> = Symbol('progress')\n\n// BListGroup\nexport const listGroupInjectionKey: InjectionKey<{\n  numbered: Readonly<Ref<boolean>>\n}> = Symbol('listGroup')\n\n// BAvatarGroup\nexport const avatarGroupInjectionKey: InjectionKey<{\n  overlapScale: Readonly<Ref<number>>\n  size: Readonly<Ref<LiteralUnion<Size, Numberish> | undefined>>\n  square: Readonly<Ref<boolean>>\n  rounded: Readonly<Ref<RadiusElement | boolean>>\n  roundedTop: Readonly<Ref<RadiusElement | boolean | undefined>>\n  roundedBottom: Readonly<Ref<RadiusElement | boolean | undefined>>\n  roundedStart: Readonly<Ref<RadiusElement | boolean | undefined>>\n  roundedEnd: Readonly<Ref<RadiusElement | boolean | undefined>>\n  variant: Readonly<Ref<ColorVariant | null>>\n  bgVariant: Readonly<Ref<ColorVariant | null>>\n  textVariant: Readonly<Ref<TextColorVariant | null>>\n}> = Symbol('avatarGroup')\n\n// BAccordion\nexport const accordionInjectionKey: InjectionKey<{\n  openItem: Readonly<Ref<string | undefined>>\n  free: Readonly<Ref<boolean>>\n  setOpenItem: (id: string) => void\n}> = Symbol('accordion')\n\n// BFormCheckboxGroup\nexport const checkboxGroupKey: InjectionKey<{\n  modelValue: Ref<readonly CheckboxValue[]>\n  switch: Readonly<Ref<boolean>>\n  buttonVariant: Readonly<Ref<ButtonVariant | null>>\n  form: Readonly<Ref<string | undefined>>\n  name: Readonly<Ref<string>>\n  state: Readonly<Ref<boolean | undefined | null>>\n  plain: Readonly<Ref<boolean>>\n  size: Readonly<Ref<Size>>\n  inline: Readonly<Ref<boolean>>\n  reverse: Readonly<Ref<boolean>>\n  required: Readonly<Ref<boolean>>\n  buttons: Readonly<Ref<boolean>>\n  disabled: Readonly<Ref<boolean>>\n}> = Symbol('checkboxGroup')\n\nexport const radioGroupKey: InjectionKey<{\n  modelValue: Ref<RadioValue>\n  buttonVariant: Readonly<Ref<ButtonVariant | null>>\n  form: Readonly<Ref<string | undefined>>\n  name: Readonly<Ref<string>>\n  buttons: Readonly<Ref<boolean>>\n  state: Readonly<Ref<boolean | undefined | null>>\n  plain: Readonly<Ref<boolean>>\n  size: Readonly<Ref<Size>>\n  inline: Readonly<Ref<boolean>>\n  reverse: Readonly<Ref<boolean>>\n  required: Readonly<Ref<boolean>>\n  disabled: Readonly<Ref<boolean>>\n}> = Symbol('radioGroup')\n\n// Collapse\nexport const collapseInjectionKey: InjectionKey<{\n  id?: Readonly<Ref<string>>\n  readonly hide?: () => void\n  readonly show?: () => void\n  readonly toggle?: () => void\n  visible?: Readonly<Ref<boolean>>\n  isNav?: Readonly<Ref<boolean>>\n}> = Symbol('collapse')\n\nexport const dropdownInjectionKey: InjectionKey<{\n  id?: Readonly<Ref<string>>\n  readonly hide?: () => void\n  readonly show?: () => void\n  readonly toggle?: () => void\n  visible?: Readonly<Ref<boolean>>\n  isNav?: Readonly<Ref<boolean>>\n}> = Symbol('collapse')\n\nexport const navbarInjectionKey: InjectionKey<{\n  tag?: Readonly<Ref<string>>\n  autoClose?: Readonly<Ref<boolean>>\n}> = Symbol('navbar')\n\nexport const toastPluginKey: InjectionKey<{\n  toasts: ShallowRef<\n    ComputedRef<{\n      component: unknown\n      props: Omit<OrchestratedToast, 'value'> & {\n        _self: symbol\n        _modelValue: OrchestratedToast['value'] // Convert it to be the same name as useModalController.\n        // The difference between the two is that unlike that one, this value can be defined (there's cannot be).\n      }\n    }>[]\n  >\n  _setIsAppend: (value: boolean) => void\n  show: (obj: {\n    component?: Readonly<Component>\n    props?: MaybeRefOrGetter<Readonly<OrchestratedToast>>\n  }) => symbol\n  remove: (self: symbol) => void\n}> = Symbol('toastPlugin')\n\nexport const rtlPluginKey: InjectionKey<{\n  isRtl: Ref<boolean>\n  locale: Ref<string | undefined>\n}> = Symbol('rtlPlugin')\n\nexport const breadcrumbPluginKey: InjectionKey<{\n  items: Ref<BreadcrumbItemRaw[]>\n  reset: () => void\n}> = Symbol('breadcrumbPlugin')\n\nexport const modalControllerPluginKey: InjectionKey<{\n  modals: ShallowRef<\n    ComputedRef<{\n      component: unknown // TS being weird here, just use unknown\n      props: OrchestratedModal & {\n        _self: symbol\n        _modelValue: BModalProps['modelValue']\n        _promise: {\n          value: Promise<boolean | null>\n          resolve: (value: boolean | null) => void\n        }\n        _isConfirm: boolean\n      }\n    }>[]\n  >\n  show: (obj: {\n    component?: Readonly<Component>\n    props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n  }) => Promise<boolean | null>\n  confirm: (obj: {\n    component?: Readonly<Component>\n    props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n  }) => Promise<boolean | null>\n  remove: (self: symbol) => void\n}> = Symbol('modalControllerPlugin')\n\nexport const modalManagerPluginKey: InjectionKey<{\n  stack: ShallowRef<Readonly<ComponentInternalInstance>[]>\n  countStack: Readonly<Ref<number>>\n  lastStack: Readonly<Ref<ComponentInternalInstance | undefined>>\n  pushStack: (modal: Readonly<ComponentInternalInstance>) => void\n  removeStack: (modal: Readonly<ComponentInternalInstance>) => void\n  registry: ShallowRef<Readonly<ComponentInternalInstance>[]>\n  pushRegistry: (modal: Readonly<ComponentInternalInstance>) => void\n  removeRegistry: (modal: Readonly<ComponentInternalInstance>) => void\n}> = Symbol('modalManagerPlugin')\n\nexport const idPluginKey: InjectionKey<() => string> = Symbol('idPluginKey')\n","import type {Slots, VNode} from 'vue'\n\nexport default (name: string, scope = {}, $slots: Slots = {}): VNode => {\n  // Ensure names is an array\n  const names = [name]\n  let slot\n  for (let i = 0; i < names.length && !slot; i++) {\n    const name = names[i]\n    slot = $slots[name]\n  }\n  // Note: in Vue 3.x, slots have been unified. No more scoped slots and all slots are exposed as functions\n  return (slot && typeof slot === 'function' ? slot(scope) : slot) as unknown as VNode\n}\n","/**\n * Removes properties from an object, based on the values in an array, and returns the new object.\n * Equivalent to an object version of TS Omit<>\n */\nexport const omit = <\n  A extends Record<PropertyKey, unknown>,\n  const B extends ReadonlyArray<PropertyKey>,\n>(\n  objToPluck: Readonly<A>,\n  keysToPluck: Readonly<B> | readonly (keyof A)[]\n): Omit<A, B[number]> =>\n  Object.keys(objToPluck)\n    .filter((key) => !keysToPluck.map((el) => el.toString()).includes(key))\n    .reduce((result, key) => ({...result, [key]: objToPluck[key]}), {} as Omit<A, B[number]>)\n\n/**\n * Picks properties from an object, base on the values in an array, and returns the new object.\n * Equivalent to an object version of TS Pick<>\n */\nexport const pick = <\n  A extends Record<PropertyKey, unknown>,\n  const B extends ReadonlyArray<PropertyKey>,\n>(\n  objToPluck: Readonly<A>,\n  keysToPluck: Readonly<B> | readonly (keyof A)[]\n): Pick<A, B[number]> =>\n  [...keysToPluck].reduce(\n    (memo, prop) => {\n      memo[prop] = objToPluck[prop]\n      return memo\n    },\n    {} as Record<PropertyKey, unknown>\n  ) as Pick<A, B[number]>\n\n/**\n * Dynamically get a nested value from an array or\n * object with a string.\n *\n * @example get(person, 'friends[0].name')\n *\n * Thanks to\n * @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n */\nexport const get = <TDefault = unknown>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  value: any,\n  path: string,\n  defaultValue?: Readonly<TDefault>\n): TDefault => {\n  const segments = path.split(/[.[\\]]/g)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let current: any = value\n  for (const key of segments) {\n    if (current === null) return defaultValue as TDefault\n    if (current === undefined) return defaultValue as TDefault\n    if (key.trim() === '') continue\n    current = current[key]\n  }\n  if (current === undefined) return defaultValue as TDefault\n  return current\n}\n\n/**\n * Opposite of get, dynamically set a nested value into\n * an object using a key path. Does not modify the given\n * initial object.\n *\n * @example\n * set({}, 'name', 'ra') // => { name: 'ra' }\n * set({}, 'cards[0].value', 2) // => { cards: [{ value: 2 }] }\n *\n * Thanks to\n * @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n */\nexport const set = <T extends object, K>(initial: T, path: string, value: K): T => {\n  const clone = <T>(obj: T): T => {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const isPrimitive = (value: any): boolean =>\n      value === undefined ||\n      value === null ||\n      (typeof value !== 'object' && typeof value !== 'function')\n    // Primitive values do not need cloning.\n    if (isPrimitive(obj)) {\n      return obj\n    }\n\n    if (typeof obj === 'function') {\n      return obj.bind({})\n    }\n\n    const newObj = new ((obj as object).constructor as {new (): T})()\n\n    // Assign the props.\n    Object.getOwnPropertyNames(obj).forEach((prop) => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      ;(newObj as any)[prop] = (obj as any)[prop]\n    })\n\n    return newObj\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const toInt = <T extends number | null = number>(value: any, defaultValue?: T): number | T => {\n    const def = defaultValue === undefined ? 0 : defaultValue\n    if (value === null || value === undefined) {\n      return def\n    }\n    const result = Number.parseInt(value)\n    return Number.isNaN(result) ? def : result\n  }\n\n  if (!initial) return {} as T\n  if (!path || value === undefined) return initial\n  const segments = path.split(/[.[\\]]/g).filter((x) => !!x.trim())\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const _set = (node: any) => {\n    if (segments.length > 1) {\n      const key = segments.shift() as string\n      const nextIsNum = toInt(segments[0], null) === null ? false : true\n      node[key] = node[key] === undefined ? (nextIsNum ? [] : {}) : node[key]\n      _set(node[key])\n    } else {\n      node[segments[0]] = value\n    }\n  }\n  const cloned = clone(initial)\n  _set(cloned)\n  return cloned\n}\n","import type {ConfigurationOption} from '../types'\n\nexport default <Type extends string, Base extends ConfigurationOption<Type>>(\n  options: Readonly<Base>,\n  values: readonly Type[]\n): Type[] => {\n  const {all, ...others} = options\n  const valuesCopy: Partial<Record<keyof Base, boolean>> = {}\n  if (all) {\n    values.forEach((el) => {\n      valuesCopy[el] = all\n    })\n  }\n  const merge: Record<string, boolean> = {...valuesCopy, ...others}\n  return (\n    Object.entries(merge)\n      // filtering possible invalid keys\n      .filter(([name, value]) => !!value && values.includes(name as Type))\n      .map(([name]) => name as Type)\n  )\n}\n","// Suffix can be a falsey value so nothing is appended to string\n// (helps when looping over props & some shouldn't change)\n\nimport {upperFirst} from './stringUtils'\n\n/**\n * Use data last parameters to allow for currying\n *\n * @param suffix\n * @param value\n * @returns\n */\nexport const suffixPropName = (suffix: string, value: string): string =>\n  value + (suffix ? upperFirst(suffix) : '')\n","import {computed, type MaybeRefOrGetter, toRef} from 'vue'\nimport {isLink, pick} from '../utils'\n\nexport default <T extends Record<string, unknown>, const B extends ReadonlyArray<PropertyKey>>(\n  props: MaybeRefOrGetter<T>,\n  pickProps?: MaybeRefOrGetter<B | (keyof T)[]>\n) => {\n  const pickPropsResolved = toRef(pickProps)\n  const resolvedProps = toRef(props)\n\n  const computedLink = toRef(() => isLink(resolvedProps.value))\n  const computedLinkProps = computed(() =>\n    computedLink.value\n      ? pick(\n          resolvedProps.value,\n          pickPropsResolved.value ?? [\n            'active',\n            'activeClass',\n            'append',\n            'href',\n            'rel',\n            'replace',\n            'routerComponentName',\n            'target',\n            'to',\n            'variant',\n            'opacity',\n            'opacityHover',\n            'underlineVariant',\n            'underlineOffset',\n            'underlineOffsetHover',\n            'underlineOpacity',\n            'underlineOpacityHover',\n          ]\n        )\n      : {}\n  )\n\n  return {computedLink, computedLinkProps}\n}\n","import {inject} from 'vue'\nimport {breadcrumbPluginKey} from '../utils'\n\nexport default () => ({...inject(breadcrumbPluginKey)})\n","import {useColorMode, type UseColorModeOptions} from '@vueuse/core'\n\nexport interface ColorModeOptions extends UseColorModeOptions {\n  /**\n   * When set to true, useColorMode will automatically store itself and persist (default localstorage).\n   * @default false\n   */\n  persist?: boolean\n}\n\nexport default (opts: Readonly<ColorModeOptions> = {}) => {\n  const persist = opts.persist ?? false\n  const attribute = 'data-bs-theme'\n  const selector = 'body'\n  return useColorMode({\n    attribute,\n    selector,\n    storageKey:\n      persist === true\n        ? `bv-color-${opts.attribute ?? attribute}-${opts.selector ?? selector}`\n        : null,\n    ...opts,\n  })\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {ColorExtendables} from '../types'\n\nexport default (obj: MaybeRefOrGetter<ColorExtendables>) =>\n  computed(() => {\n    let props = toValue(obj)\n    props = {\n      ...props,\n      variant: props.variant ?? null,\n      bgVariant: props.bgVariant ?? null,\n      textVariant: props.textVariant ?? null,\n    }\n    return {\n      [`text-bg-${props.variant}`]: props.variant !== null,\n      [`text-${props.textVariant}`]: props.textVariant !== null && props.variant === null,\n      [`bg-${props.bgVariant}`]: props.bgVariant !== null && props.variant === null,\n    }\n  })\n","import type {Breakpoint} from '../types'\nimport {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (value: MaybeRefOrGetter<boolean | Breakpoint | 'fluid'>) =>\n  computed(() => {\n    const resolvedValue = toValue(value)\n    return {\n      container: resolvedValue === true,\n      [`container-${resolvedValue}`]: typeof resolvedValue === 'string',\n    }\n  })\n","import {useIntervalFn, type UseIntervalFnOptions} from '@vueuse/core'\nimport {type MaybeRefOrGetter, readonly, ref, type Ref, toRef, watch, watchEffect} from 'vue'\n\ntype VoidFn = () => void\n\ninterface CountdownReturn {\n  isActive: Readonly<Ref<boolean>>\n  isPaused: Readonly<Ref<boolean>>\n  restart: VoidFn\n  stop: VoidFn\n  resume: VoidFn\n  pause: VoidFn\n  value: Readonly<Ref<number>>\n}\n\n/**\n * A simple interval timer that counts down the remaining seconds\n *\n * @param {MaybeRefOrGetter<number>} length the total amount of time to loop through in ms\n * @param {MaybeRefOrGetter<number>} interval how often the interval should refresh. Default 1000\n * @param {Readonly<UseIntervalFnOptions>} intervalOpts opts to pass to the interval fn. Default {}\n * @important ensure that you call `stop()` before unmount in the component\n */\nexport default (\n  length: MaybeRefOrGetter<number>,\n  interval: MaybeRefOrGetter<number> = ref(1000),\n  intervalOpts: Readonly<UseIntervalFnOptions> = {}\n): CountdownReturn => {\n  const resolvedLength = readonly(toRef(length))\n\n  const resolvedInterval = readonly(toRef(interval))\n\n  const isPaused = ref(false)\n\n  const intervalsPassed = ref(0)\n\n  const amountOfIntervals = toRef(() => Math.ceil(resolvedLength.value / resolvedInterval.value))\n\n  const value = toRef(() =>\n    isActive.value || isPaused.value\n      ? Math.round(resolvedLength.value - intervalsPassed.value * resolvedInterval.value)\n      : 0\n  )\n\n  const {pause, resume, isActive} = useIntervalFn(\n    () => {\n      intervalsPassed.value = intervalsPassed.value + 1\n    },\n    interval,\n    intervalOpts\n  )\n\n  const restart = () => {\n    isPaused.value = false\n    intervalsPassed.value = 0\n    resume()\n  }\n\n  const stop = () => {\n    isPaused.value = false\n    intervalsPassed.value = amountOfIntervals.value\n    // pause() // Only here for the sake of demonstrating the flow. It will be called in the watchEffect\n  }\n  watchEffect(() => {\n    if (intervalsPassed.value > amountOfIntervals.value) {\n      intervalsPassed.value = amountOfIntervals.value\n    }\n    if (intervalsPassed.value === amountOfIntervals.value) {\n      pause()\n    }\n  })\n\n  watch([resolvedInterval, resolvedLength], () => {\n    stop()\n    restart()\n  })\n\n  const myPause = () => {\n    if (isActive.value === false) return\n    isPaused.value = true\n    pause()\n  }\n\n  const myResume = () => {\n    if (intervalsPassed.value === amountOfIntervals.value) return\n    isPaused.value = false\n    resume()\n  }\n\n  return {\n    isActive: readonly(isActive),\n    isPaused: readonly(isPaused),\n    restart,\n    stop,\n    pause: myPause,\n    resume: myResume,\n    value,\n  }\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (value: MaybeRefOrGetter<boolean | null>) =>\n  computed(() => {\n    const resolvedValue = toValue(value)\n\n    return resolvedValue === true ? 'is-valid' : resolvedValue === false ? 'is-invalid' : null\n  })\n","import type {AriaInvalid, ButtonVariant, Size} from '../types'\nimport {computed, type MaybeRefOrGetter, toRef, toValue} from 'vue'\nimport useAriaInvalid from './useAriaInvalid'\nimport useStateClass from './useStateClass'\n\ninterface ClassesItemsInput {\n  plain?: boolean\n  button?: boolean\n  inline?: boolean\n  reverse?: boolean\n  switch?: boolean\n  size?: Size\n  hasDefaultSlot?: boolean\n}\n\nconst getClasses = (items: MaybeRefOrGetter<ClassesItemsInput>) =>\n  computed(() => {\n    const resolvedItems = toValue(items)\n    return {\n      'form-check':\n        resolvedItems.plain === false &&\n        resolvedItems.button === false &&\n        resolvedItems.hasDefaultSlot,\n      'form-check-reverse': resolvedItems.reverse === true,\n      'form-check-inline': resolvedItems.inline === true,\n      'form-switch': resolvedItems.switch === true,\n      [`form-control-${resolvedItems.size}`]:\n        resolvedItems.size !== undefined &&\n        resolvedItems.size !== 'md' &&\n        resolvedItems.button === false,\n    }\n  })\n\ninterface InputClassesItemsInput {\n  plain?: boolean\n  button?: boolean\n  state?: boolean | null\n}\n\nconst getInputClasses = (items: MaybeRefOrGetter<InputClassesItemsInput>) => {\n  const resolvedItems = toRef(items)\n\n  const stateClass = useStateClass(() => resolvedItems.value.state ?? null)\n\n  return computed(() => [\n    stateClass.value,\n    {\n      'form-check-input':\n        resolvedItems.value.plain === false && resolvedItems.value.button === false,\n      'btn-check': resolvedItems.value.button === true,\n    },\n  ])\n}\n\ninterface LabelClasesItemsInput {\n  plain?: boolean\n  button?: boolean\n  buttonVariant?: ButtonVariant | null\n  size?: Size\n}\n\nconst getLabelClasses = (items: MaybeRefOrGetter<LabelClasesItemsInput>) =>\n  computed(() => {\n    const resolvedItems = toValue(items)\n    return {\n      'form-check-label': resolvedItems.plain === false && resolvedItems.button === false,\n      'btn': resolvedItems.button === true,\n      [`btn-${resolvedItems.buttonVariant}`]:\n        resolvedItems.button === true &&\n        resolvedItems.buttonVariant !== undefined &&\n        resolvedItems.buttonVariant !== null,\n      [`btn-${resolvedItems.size}`]:\n        resolvedItems.button && resolvedItems.size && resolvedItems.size !== 'md',\n    }\n  })\n\ninterface GroupAttrItemsInput {\n  required?: boolean\n  ariaInvalid?: AriaInvalid\n  state?: boolean | null\n}\n\nconst getGroupAttr = (items: MaybeRefOrGetter<GroupAttrItemsInput>) => {\n  const resolvedItems = toRef(items)\n  const computedAriaInvalid = useAriaInvalid(\n    () => resolvedItems.value.ariaInvalid,\n    () => resolvedItems.value.state\n  )\n  return computed(() => ({\n    'aria-invalid': computedAriaInvalid.value as Exclude<AriaInvalid, ''> | undefined,\n    'aria-required': resolvedItems.value.required === true ? true : undefined,\n  }))\n}\n\ninterface GroupClassesItemsInput {\n  validated?: boolean\n  buttons?: boolean\n  stacked?: boolean\n  size?: Size\n}\n\nconst getGroupClasses = (items: MaybeRefOrGetter<GroupClassesItemsInput>) =>\n  computed(() => {\n    const resolvedItems = toValue(items)\n    return {\n      'was-validated': resolvedItems.validated === true,\n      'btn-group': resolvedItems.buttons === true && resolvedItems.stacked === false,\n      'btn-group-vertical': resolvedItems.stacked === true && resolvedItems.buttons === true,\n      [`btn-group-${resolvedItems.size}`]: resolvedItems.size !== undefined,\n    }\n  })\n\nexport {getClasses, getInputClasses, getLabelClasses, getGroupAttr, getGroupClasses}\n","import {idPluginKey} from '../utils'\nimport {computed, type ComputedRef, inject, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (id?: MaybeRefOrGetter<string | undefined>, suffix?: string): ComputedRef<string> =>\n  computed(() => toValue(id) || getId(suffix))\n\nexport const getId = (suffix = '') => {\n  const getId = inject(idPluginKey, () => Math.random().toString().slice(2, 8))\n  return `__BVID__${getId()}___BV_${suffix}__`\n}\n","import type {Numberish} from '../types'\nimport {nextTick, onActivated, onMounted, ref} from 'vue'\nimport useAriaInvalid from './useAriaInvalid'\nimport useId from './useId'\nimport {useDebounceFn, useFocus, useToNumber, useVModel} from '@vueuse/core'\nimport type {CommonInputProps} from '../types/FormCommonInputProps'\n\nexport default (\n  props: Readonly<CommonInputProps>,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  emit: (evt: 'update:modelValue', val: any) => void\n) => {\n  const input = ref<HTMLInputElement | null>(null)\n\n  const modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\n  const computedId = useId(() => props.id, 'input')\n  const debounceNumber = useToNumber(() => props.debounce ?? 0)\n  const debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? NaN)\n\n  const internalUpdateModelValue = useDebounceFn(\n    (value: Numberish | undefined) => {\n      modelValue.value = value\n    },\n    () => (props.lazy === true ? 0 : debounceNumber.value),\n    {maxWait: () => (props.lazy === true ? NaN : debounceMaxWaitNumber.value)}\n  )\n\n  const updateModelValue = (value: Numberish | undefined, force = false) => {\n    if (props.lazy === true && force === false) return\n    internalUpdateModelValue(value)\n  }\n\n  const {focused} = useFocus(input, {\n    initialValue: props.autofocus,\n  })\n\n  const _formatValue = (value: string, evt: Readonly<Event>, force = false) => {\n    if (props.formatter !== undefined && (!props.lazyFormatter || force)) {\n      return props.formatter(value, evt)\n    }\n    return value\n  }\n\n  const _getModelValue = (value: string) => {\n    if (props.trim) return value.trim()\n    if (props.number) return Number.parseFloat(value)\n\n    return value\n  }\n\n  onMounted(() => {\n    if (input.value) {\n      input.value.value = modelValue.value?.toString() ?? ''\n    }\n  })\n\n  onActivated(() => {\n    nextTick(() => {\n      if (props.autofocus) {\n        focused.value = true\n      }\n    })\n  })\n\n  const computedAriaInvalid = useAriaInvalid(\n    () => props.ariaInvalid,\n    () => props.state\n  )\n\n  const onInput = (evt: Readonly<Event>) => {\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt)\n    if (evt.defaultPrevented) {\n      evt.preventDefault()\n      return\n    }\n\n    const nextModel = _getModelValue(formattedValue)\n\n    updateModelValue(nextModel)\n  }\n\n  const onChange = (evt: Readonly<Event>) => {\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt)\n    if (evt.defaultPrevented) {\n      evt.preventDefault()\n      return\n    }\n\n    const nextModel = _getModelValue(formattedValue)\n    if (modelValue.value !== nextModel) {\n      updateModelValue(formattedValue, true)\n    }\n  }\n\n  const onBlur = (evt: Readonly<FocusEvent>) => {\n    if (!props.lazy && !props.lazyFormatter) return\n\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt, true)\n\n    const nextModel = _getModelValue(formattedValue)\n    if (modelValue.value !== nextModel) {\n      updateModelValue(formattedValue, true)\n    }\n  }\n\n  const focus = () => {\n    if (!props.disabled) {\n      focused.value = true\n    }\n  }\n\n  const blur = () => {\n    if (!props.disabled) {\n      focused.value = false\n    }\n  }\n\n  return {\n    input,\n    computedId,\n    computedAriaInvalid,\n    onInput,\n    onChange,\n    onBlur,\n    focus,\n    blur,\n  }\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport {get} from '../utils'\nimport type {ComplexSelectOptionRaw, SelectOption} from '../types'\n\nexport default (options: MaybeRefOrGetter, props: Record<string, unknown>) => {\n  const isComplex = (option: unknown): option is ComplexSelectOptionRaw =>\n    typeof option === 'object' && option !== null && 'label' in option\n\n  const normalizeOption = (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    option: any\n  ): ComplexSelectOptionRaw | SelectOption => {\n    if (typeof option === 'string') {\n      return {value: option, text: option}\n    }\n    if (typeof option === 'number') {\n      return {value: option, text: `${option}`}\n    }\n    if (option instanceof Date) {\n      return {value: option, text: option.toLocaleString()}\n    }\n\n    const value: unknown = get(option, props.valueField as string)\n    const text: string = get(option, props.textField as string)\n    const html: string = get(option, props.htmlField as string)\n    const disabled: boolean = get(option, props.disabledField as string)\n\n    const opts: undefined | (unknown | Record<string, unknown>)[] = props.optionsField\n      ? get(option, props.optionsField as string)\n      : undefined\n\n    if (opts !== undefined) {\n      return {\n        label: get(option, props.labelField as string) || text,\n        options: opts,\n      } as ComplexSelectOptionRaw\n    }\n\n    return {\n      value,\n      text,\n      html,\n      disabled,\n    } as SelectOption\n  }\n\n  const normalizeOptions = (\n    options: (unknown | Record<string, unknown>)[]\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): (ComplexSelectOptionRaw | SelectOption)[] => options.map((option) => normalizeOption(option))\n\n  const normalizedOptions = computed(() => normalizeOptions(toValue(options)))\n\n  return {normalizedOptions, isComplex}\n}\n","import {getSSRHandler, tryOnScopeDispose, unrefElement} from '@vueuse/core'\nimport {\n  type ComponentInternalInstance,\n  computed,\n  getCurrentInstance,\n  inject,\n  type Ref,\n  watch,\n} from 'vue'\nimport {modalManagerPluginKey} from '../utils'\n\nconst modalOpenClassName = 'modal-open'\n\nexport const useSharedModalStack = () => {\n  const modalManagerPlugin = inject(modalManagerPluginKey)\n\n  /**\n   * Removes an item from both the stack and registry\n   */\n  const dispose = (modal: Readonly<ComponentInternalInstance>): void => {\n    modalManagerPlugin?.removeStack(modal)\n    modalManagerPlugin?.removeRegistry(modal)\n  }\n\n  const updateHTMLAttrs = getSSRHandler('updateHTMLAttrs', (selector, attribute, value) => {\n    const el =\n      typeof selector === 'string'\n        ? window?.document.querySelector(selector)\n        : unrefElement(selector)\n    if (!el) return\n\n    if (attribute === 'class') {\n      el.classList.toggle(modalOpenClassName, value === modalOpenClassName)\n    } else {\n      el.setAttribute(attribute, value)\n    }\n  })\n\n  tryOnScopeDispose(() => {\n    updateHTMLAttrs('body', 'class', '')\n  })\n\n  watch(\n    () => modalManagerPlugin?.countStack.value,\n    (newValue) => {\n      if (newValue === undefined) return\n      updateHTMLAttrs('body', 'class', newValue > 0 ? modalOpenClassName : '')\n    }\n  )\n\n  return {\n    ...modalManagerPlugin,\n    dispose,\n  }\n}\n\nexport default (modalOpen: Readonly<Ref<boolean>>) => {\n  const {pushRegistry, pushStack, removeStack, stack, dispose, countStack} = useSharedModalStack()\n\n  const currentModal = getCurrentInstance()\n\n  if (!currentModal || currentModal.type.__name !== 'BModal') {\n    throw new Error('useModalManager must only use in BModal component')\n  }\n\n  pushRegistry?.(currentModal)\n\n  tryOnScopeDispose(() => {\n    dispose(currentModal)\n  })\n\n  watch(\n    modalOpen,\n    (newValue, oldValue) => {\n      if (newValue) {\n        pushStack?.(currentModal)\n      } else if (oldValue && !newValue) {\n        removeStack?.(currentModal)\n      }\n    },\n    {immediate: true}\n  )\n\n  return {\n    activePosition: computed(() =>\n      stack?.value.findIndex((el) => el.exposed?.id === currentModal.exposed?.id)\n    ),\n    activeModalCount: countStack,\n  }\n}\n","import {\n  type ComponentInternalInstance,\n  computed,\n  getCurrentInstance,\n  type MaybeRefOrGetter,\n  toRef,\n  toValue,\n} from 'vue'\nimport {useSharedModalStack} from './useModalManager'\n\nexport default (id: MaybeRefOrGetter<string | undefined> = undefined) => {\n  const {registry} = useSharedModalStack()\n  const instance = getCurrentInstance()\n\n  const findBModal = (component: ComponentInternalInstance): ComponentInternalInstance | null => {\n    if (!component.parent) {\n      return null\n    }\n\n    if (component.parent.type.__name === 'BModal') {\n      return component.parent\n    }\n\n    return findBModal(component.parent)\n  }\n\n  const modalComponent = computed(() => {\n    const resolvedId = toValue(id)\n    if (resolvedId) {\n      return registry?.value.find((modal) => modal.exposed?.id.value === resolvedId) || null\n    }\n\n    if (!instance) {\n      return null\n    }\n\n    return findBModal(instance)\n  })\n\n  const modal = toRef(() => modalComponent.value?.proxy)\n\n  return {\n    show() {\n      modalComponent.value?.exposed?.show()\n    },\n    hide(trigger = '') {\n      modalComponent.value?.exposed?.hide(trigger)\n    },\n    modal,\n  }\n}\n","import {inject} from 'vue'\nimport {useSharedModalStack} from './useModalManager'\nimport {modalControllerPluginKey} from '../utils'\n\nexport default () => {\n  const {lastStack, stack} = useSharedModalStack()\n\n  const modalControllerPlugin = inject(modalControllerPluginKey)\n\n  const hide = (trigger = '') => {\n    if (lastStack?.value) {\n      lastStack?.value.exposed?.hide(trigger)\n    }\n  }\n\n  const hideAll = (trigger = '') => {\n    stack?.value.forEach((modal) => {\n      modal.exposed?.hide(trigger)\n    })\n  }\n\n  return {\n    ...modalControllerPlugin,\n    hide,\n    hideAll,\n    // Todo: Supports listening events globally in the future\n  }\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {Numberish} from '../types'\nimport {RX_NUMBER} from '../constants/regex'\n\nexport default (\n  el: MaybeRefOrGetter<Numberish | undefined>,\n  /**\n   * The unit to use when converting a numeric value to a string\n   *\n   * @default 'px'\n   */\n  unit: MaybeRefOrGetter<string> = 'px'\n) =>\n  computed(() => {\n    const value = toValue(el)\n    const resolvedUnit = toValue(unit)\n    // If num is non-numeric, return val as-is (sm, md, lg, undefined or any other custom value), otherwise return num as a px value\n    return RX_NUMBER.test(String(value))\n      ? `${Number(value)}${resolvedUnit}`\n      : (value as string | undefined)\n  })\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {RadiusElement, RadiusElementExtendables} from '../types'\n\nexport default (obj: MaybeRefOrGetter<RadiusElementExtendables>) => {\n  const resolveRadiusElement = (\n    value: boolean | RadiusElement,\n    str: 'top' | 'bottom' | 'start' | 'end' | null\n  ): string => {\n    const strValue = str === null ? '' : `${str}-`\n\n    return value === 'circle'\n      ? `${strValue}rounded-circle`\n      : value === 'pill'\n        ? `${strValue}rounded-pill`\n        : typeof value === 'number' ||\n            value === '0' ||\n            value === '1' ||\n            value === '2' ||\n            value === '3' ||\n            value === '4' ||\n            value === '5'\n          ? `${strValue}rounded-${value}`\n          : value === 'none'\n            ? `${strValue}rounded-0`\n            : value === 'sm'\n              ? `${strValue}rounded-1`\n              : value === 'lg'\n                ? `${strValue}rounded-5`\n                : `${strValue}rounded` // true is last\n  }\n\n  return computed(() => {\n    const props = toValue(obj)\n\n    return {\n      [`${resolveRadiusElement(props.rounded as boolean | RadiusElement, null)}`]: !!props.rounded,\n      [`${resolveRadiusElement(props.roundedTop as boolean | RadiusElement, 'top')}`]:\n        !!props.roundedTop,\n      [`${resolveRadiusElement(props.roundedBottom as boolean | RadiusElement, 'bottom')}`]:\n        !!props.roundedBottom,\n      [`${resolveRadiusElement(props.roundedStart as boolean | RadiusElement, 'start')}`]:\n        !!props.roundedStart,\n      [`${resolveRadiusElement(props.roundedEnd as boolean | RadiusElement, 'end')}`]:\n        !!props.roundedEnd,\n    }\n  })\n}\n","import {inject, onMounted, watch} from 'vue'\nimport {rtlPluginKey} from '../utils'\n\nexport default () => {\n  const rtlPlugin = inject(rtlPluginKey)\n\n  onMounted(() => {\n    watch(\n      [() => rtlPlugin?.isRtl.value, () => rtlPlugin?.locale.value],\n      ([rtlNew, localeNew]) => {\n        const html = document.documentElement\n\n        // I can't think of a reason why one might want to destroy these if unmounted...\n        html.setAttribute('dir', rtlNew ?? false ? 'rtl' : 'ltr')\n        html.setAttribute('lang', localeNew ?? '')\n      },\n      {immediate: true}\n    )\n  })\n\n  return {...rtlPlugin}\n}\n","import {type MaybeRefOrGetter, onMounted, readonly, toRef, watch} from 'vue'\nimport {useScrollLock} from '@vueuse/core'\n\nexport default (isOpen: MaybeRefOrGetter<boolean>, bodyScroll: MaybeRefOrGetter<boolean>) => {\n  const resolvedIsOpen = readonly(toRef(isOpen))\n  const resolvedBodyScrolling = readonly(toRef(bodyScroll))\n\n  /**\n   * We use the inverse because bodyScrolling === true means we allow scrolling, while bodyScrolling === false means we disallow\n   */\n  const inverseBodyScrollingValue = toRef(() => !resolvedBodyScrolling.value)\n\n  onMounted(() => {\n    const isLocked = useScrollLock(\n      document.body,\n      resolvedIsOpen.value && inverseBodyScrollingValue.value\n    )\n\n    watch([resolvedIsOpen, inverseBodyScrollingValue], ([modelVal, bodyVal]) => {\n      isLocked.value = modelVal && bodyVal\n    })\n  })\n}\n","import {syncRef, useIntersectionObserver, useMutationObserver} from '@vueuse/core'\nimport {\n  type ComponentPublicInstance,\n  computed,\n  getCurrentInstance,\n  type MaybeRefOrGetter,\n  nextTick,\n  onMounted,\n  readonly,\n  type Ref,\n  ref,\n  toRef,\n  watch,\n} from 'vue'\nimport {getElement} from '../utils'\n\ntype ScrollspyList = {\n  id: string | null\n  el: HTMLElement | null\n  visible: boolean\n  text: string | null\n}[]\n\ninterface ScrollspyReturn {\n  current: Readonly<Ref<string | null>>\n  list: Readonly<Ref<ScrollspyList>>\n  content: Ref<HTMLElement | undefined>\n  target: Ref<HTMLElement | undefined>\n  scrollIntoView: (event: MouseEvent) => void\n  updateList: () => void\n  cleanup: () => void\n}\n\ninterface ScrollspyOptions {\n  contentQuery: string\n  targetQuery: string\n  manual: boolean\n  root: string | ComponentPublicInstance | HTMLElement | null\n  rootMargin: string\n  threshold: number | number[]\n  watchChanges: boolean\n}\n\nexport default (\n  content: MaybeRefOrGetter<string | ComponentPublicInstance | HTMLElement | null>,\n  target: MaybeRefOrGetter<string | ComponentPublicInstance | HTMLElement | null>,\n  options: Readonly<Partial<ScrollspyOptions>> = {}\n): ScrollspyReturn => {\n  const cont = toRef(content)\n  const tar = toRef(target)\n\n  const resolvedContent = ref(getElement(cont.value))\n  const resolvedTarget = ref(getElement(tar.value))\n\n  watch([cont, tar], () => {\n    updateList()\n  })\n  const {\n    contentQuery = ':scope > [id]',\n    targetQuery = '[href]',\n    manual = false,\n    root,\n    rootMargin = '0px 0px -25%',\n    threshold = [0.1, 0.5, 1],\n    watchChanges = true,\n  } = options\n  const current = ref<string | null>(null)\n  const list = ref<ScrollspyList>([])\n  const nodeList = ref<HTMLElement[]>([])\n\n  // are we called in directive?\n  const ctx = getCurrentInstance()\n  if (!ctx) {\n    nextTick(() => {\n      updateList()\n    })\n  } else {\n    onMounted(() => {\n      syncRef(cont, resolvedContent, {\n        transform: {\n          ltr: (v) => getElement(v),\n        },\n        direction: 'ltr',\n        immediate: true,\n      })\n      syncRef(tar, resolvedTarget, {\n        transform: {\n          ltr: (v) => getElement(v),\n        },\n        direction: 'ltr',\n        immediate: true,\n      })\n      updateList()\n    })\n  }\n\n  const updateList = () => {\n    nodeList.value = resolvedContent.value\n      ? (Array.from(resolvedContent.value.querySelectorAll(contentQuery)) as HTMLElement[])\n      : []\n    list.value = nodeList.value.map((el) => ({\n      id: el.id,\n      el,\n      visible: false,\n      text: el.textContent,\n    }))\n  }\n\n  let isScrollingDown = true\n  let previousScrollTop = 0\n  const scrollRoot = computed(() =>\n    resolvedContent.value && getComputedStyle(resolvedContent.value).overflowY === 'visible'\n      ? null\n      : resolvedContent.value\n  )\n\n  const iobs = useIntersectionObserver(\n    nodeList,\n    (entries) => {\n      const scrollTop = (scrollRoot.value || document?.documentElement)?.scrollTop\n      isScrollingDown = scrollTop > previousScrollTop\n      previousScrollTop = scrollTop\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          list.value.forEach((node) => {\n            if (node.el === entry.target) {\n              node.visible = true\n            }\n          })\n          return\n        }\n        list.value.forEach((node) => {\n          if (node.el === entry.target) {\n            node.visible = false\n          }\n        })\n      })\n      let newId: string | null = null\n      if (isScrollingDown) {\n        newId = [...list.value].reverse().find((node) => node.visible)?.id || null\n      } else {\n        newId = list.value.find((node) => node.visible)?.id || null\n      }\n      if (newId !== null) {\n        current.value = newId\n      }\n      if (!current.value) {\n        current.value = list.value[0]?.id || null\n      }\n    },\n    {\n      root: root ? getElement(root) : scrollRoot,\n      rootMargin,\n      threshold,\n    }\n  )\n  watch(current, (newId) => {\n    if (manual) return\n    const nodes = resolvedTarget.value?.querySelectorAll(targetQuery)\n    if (nodes === undefined) return\n    let foundParent = false\n    let activeElement: HTMLElement | null = null\n    nodes.forEach((node) => {\n      const parentDropdown = node.closest('.dropdown')\n\n      if (node.getAttribute('href')?.includes(`#${newId}`)) {\n        activeElement = node as HTMLElement\n        node.classList.add('active')\n        if (parentDropdown) {\n          parentDropdown?.querySelector('.dropdown-toggle')?.classList.add('active')\n          foundParent = true\n        }\n        let parentNav = node.closest('.nav')?.previousSibling as HTMLElement\n        while (parentNav?.classList?.contains('nav-item')) {\n          foundParent = true\n          parentNav.querySelector('.nav-link')?.classList.add('active')\n          parentNav = parentNav.closest('.nav')?.previousSibling as HTMLElement\n        }\n      } else {\n        node.classList.remove('active')\n        if (parentDropdown && !foundParent) {\n          parentDropdown?.querySelector('.dropdown-toggle')?.classList.remove('active')\n        }\n\n        if (!foundParent) {\n          let parentNav = node.closest('.nav')?.previousSibling as HTMLElement\n          while (parentNav?.classList?.contains('nav-item')) {\n            foundParent = true\n            parentNav.querySelector('.nav-link') !== activeElement &&\n              parentNav.querySelector('.nav-link')?.classList.remove('active')\n            parentNav = parentNav.closest('.nav')?.previousSibling as HTMLElement\n          }\n        }\n      }\n    })\n  })\n\n  const mobs = !watchChanges\n    ? {stop: () => {}}\n    : useMutationObserver(\n        resolvedContent,\n        () => {\n          updateList()\n        },\n        {\n          childList: true,\n        }\n      )\n  const scrollIntoView = (event: Readonly<MouseEvent>, smooth: boolean = false) => {\n    event.preventDefault()\n    const href = (event.target as HTMLElement)?.getAttribute?.('href')\n    const el: HTMLElement | null = href ? document?.querySelector(href) : null\n    // console.log('scrollIntoView', event, el, content.value.$el)\n    if (el && resolvedContent.value) {\n      resolvedContent.value.scrollTo\n        ? resolvedContent.value.scrollTo({top: el.offsetTop, behavior: smooth ? 'smooth' : 'auto'})\n        : (resolvedContent.value.scrollTop = el.offsetTop)\n    }\n  }\n  const cleanup = () => {\n    iobs.stop()\n    mobs.stop()\n  }\n  return {\n    current: readonly(current),\n    list,\n    content: resolvedContent,\n    target: resolvedTarget,\n    scrollIntoView,\n    updateList,\n    cleanup,\n  }\n}\n","import {inject} from 'vue'\nimport {toastPluginKey} from '../utils'\n\nexport default () => ({...inject(toastPluginKey)})\n","<template>\n  <Transition\n    v-bind=\"{...baseProperties, ...transProps}\"\n    :appear=\"props.appear\"\n    @after-appear=\"emit('after-appear', $event)\"\n    @after-enter=\"emit('after-enter', $event)\"\n    @after-leave=\"emit('after-leave', $event)\"\n    @appear=\"emit('appear', $event)\"\n    @before-appear=\"emit('before-appear', $event)\"\n    @before-enter=\"emit('before-enter', $event)\"\n    @before-leave=\"emit('before-leave', $event)\"\n    @enter=\"emit('enter', $event)\"\n    @appear-cancelled=\"emit('appear-cancelled', $event)\"\n    @enter-cancelled=\"emit('enter-cancelled', $event)\"\n    @leave=\"emit('leave', $event)\"\n    @leave-cancelled=\"emit('leave-cancelled', $event)\"\n  >\n    <slot />\n  </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTransitionProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BTransitionProps>(), {\n  appear: false,\n  mode: undefined,\n  noFade: false,\n  transProps: undefined,\n})\n\nconst emit = defineEmits<{\n  'after-appear': [value: Element]\n  'after-enter': [value: Element]\n  'after-leave': [value: Element]\n  'appear': [value: Element]\n  'before-appear': [value: Element]\n  'before-enter': [value: Element]\n  'before-leave': [value: Element]\n  'enter': [value: Element]\n  'appear-cancelled': [value: Element]\n  'enter-cancelled': [value: Element]\n  'leave': [value: Element]\n  'leave-cancelled': [value: Element]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst fadeProperties = computed(() => {\n  const NO_FADE_PROPS = {\n    name: '',\n    enterActiveClass: '',\n    enterToClass: '',\n    leaveActiveClass: '',\n    leaveToClass: 'showing',\n    enterFromClass: 'showing',\n    leaveFromClass: '',\n  }\n  const FADE_PROPS = {\n    ...NO_FADE_PROPS,\n    enterActiveClass: 'fade showing',\n    leaveActiveClass: 'fade showing',\n  }\n  return props.noFade ? NO_FADE_PROPS : FADE_PROPS\n})\n\nconst baseProperties = computed(() => ({mode: props.mode, css: true, ...fadeProperties.value}))\n</script>\n\n<style lang=\"scss\">\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.25s linear;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<template>\n  <button\n    :type=\"type\"\n    class=\"btn-close\"\n    :disabled=\"props.disabled\"\n    :aria-label=\"ariaLabel\"\n    @click=\"emit('click', $event)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCloseButtonProps} from '../../types'\n\nconst props = withDefaults(defineProps<BCloseButtonProps>(), {\n  ariaLabel: 'Close',\n  disabled: false,\n  type: 'button',\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    v-if=\"tag === 'router-link'\"\n    v-slot=\"//@ts-ignore \n    {href: localHref, navigate, isActive, isExactActive}\"\n    v-bind=\"routerAttr\"\n    custom\n  >\n    <component\n      :is=\"routerTag\"\n      :href=\"localHref\"\n      :class=\"{\n        [defaultActiveClass]: props.active,\n        [activeClass]: isActive,\n        [exactActiveClass]: isExactActive,\n      }\"\n      v-bind=\"$attrs\"\n      @click=\";[navigate($event), clicked($event)]\"\n    >\n      <slot />\n    </component>\n  </component>\n  <component :is=\"tag\" v-else :class=\"computedLinkClasses\" v-bind=\"routerAttr\" @click=\"clicked\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BLinkProps} from '../../types'\nimport {collapseInjectionKey, navbarInjectionKey} from '../../utils'\nimport {computed, getCurrentInstance, inject, useAttrs} from 'vue'\n\n// TODO this component will likely have an issue with inheritAttrs\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BLinkProps>(), {\n  active: undefined,\n  activeClass: 'router-link-active',\n  append: false,\n  disabled: false,\n  exactActiveClass: 'router-link-exact-active',\n  href: undefined,\n  icon: false,\n  opacity: undefined,\n  opacityHover: undefined,\n  // noPrefetch: {type: Boolean, default: false},\n  // prefetch: {type: Boolean, default: null},\n  rel: undefined,\n  replace: false,\n  routerComponentName: 'router-link',\n  routerTag: 'a',\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: null,\n  variant: null,\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst attrs = useAttrs()\n\n// TODO append not yet implemented\n\n// TODO replace not yet implemented\nconst collapseData = inject(collapseInjectionKey, null)\nconst navbarData = inject(navbarInjectionKey, null)\n\nconst instance = getCurrentInstance()\n\nconst defaultActiveClass = 'active' as const\n\nconst tag = computed(() => {\n  const routerName = props.routerComponentName\n    .split('-')\n    .map((e) => e.charAt(0).toUpperCase() + e.slice(1))\n    .join('')\n  const hasRouter = instance?.appContext.app.component(routerName) !== undefined\n  if (!hasRouter || props.disabled || !props.to) {\n    return 'a'\n  }\n  return props.routerComponentName\n})\n\nconst computedHref = computed(() => {\n  const toFallback = '#'\n  if (props.href) return props.href\n\n  if (typeof props.to === 'string') return props.to || toFallback\n\n  const {to} = props\n\n  if (to !== undefined && 'path' in to) {\n    const path = to.path || ''\n    const query = to.query\n      ? `?${Object.keys(to.query)\n          .map((e) => `${e}=${to.query?.[e]}`)\n          .join('=')}`\n      : ''\n    const hash = !to.hash || to.hash.charAt(0) === '#' ? to.hash || '' : `#${to.hash}`\n    return `${path}${query}${hash}` || toFallback\n  }\n  // There is no resolver for `RouteLocationNamedRaw`. Which, I'm not sure there can be one in this context.\n\n  return toFallback\n})\n\nconst computedClasses = computed(() => ({\n  [`link-${props.variant}`]: props.variant !== null,\n  [`link-opacity-${props.opacity}`]: props.opacity !== undefined,\n  [`link-opacity-${props.opacityHover}-hover`]: props.opacityHover !== undefined,\n  [`link-underline-${props.underlineVariant}`]: props.underlineVariant !== null,\n  [`link-offset-${props.underlineOffset}`]: props.underlineOffset !== undefined,\n  [`link-offset-${props.underlineOffsetHover}-hover`]: props.underlineOffsetHover !== undefined,\n  [`link-underline-opacity-${props.underlineOpacity}`]: props.underlineOpacity !== undefined,\n  [`link-underline-opacity-${props.underlineOpacityHover}-hover`]:\n    props.underlineOpacityHover !== undefined,\n  'icon-link': props.icon === true,\n}))\n\nconst routerAttr = computed(() => ({\n  'class': computedClasses.value,\n  'to': props.to,\n  'href': computedHref.value,\n  'target': props.target,\n  'rel': props.target === '_blank' ? props.rel ?? 'noopener' : undefined,\n  'tabindex': props.disabled ? '-1' : typeof attrs.tabindex === 'undefined' ? null : attrs.tabindex,\n  'aria-disabled': props.disabled ? true : null,\n}))\n\nconst computedLinkClasses = computed(() => ({\n  [defaultActiveClass]: props.active,\n  disabled: props.disabled,\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n  if (props.disabled) {\n    e.preventDefault()\n    e.stopImmediatePropagation()\n    return\n  }\n\n  if (\n    (collapseData?.isNav?.value === true && navbarData === null) ||\n    (navbarData !== null && navbarData.autoClose?.value === true)\n  ) {\n    collapseData?.hide?.()\n  }\n\n  emit('click', e)\n}\n</script>\n","<template>\n  <div\n    class=\"progress-bar\"\n    :class=\"computedClasses\"\n    role=\"progressbar\"\n    :aria-valuenow=\"value\"\n    aria-valuemin=\"0\"\n    :aria-valuemax=\"max\"\n    :style=\"{width: computedWidth}\"\n  >\n    <slot>\n      {{ computedLabel }}\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BProgressBarProps} from '../../types'\nimport {useColorVariantClasses} from '../../composables'\nimport {computed, inject} from 'vue'\nimport {progressInjectionKey} from '../../utils'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BProgressBarProps>(), {\n  animated: false,\n  bgVariant: null,\n  label: undefined,\n  labelHtml: undefined,\n  max: undefined,\n  precision: 0,\n  showProgress: false,\n  showValue: false,\n  striped: false,\n  textVariant: null,\n  value: 0,\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst parentData = inject(progressInjectionKey, null)\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    'progress-bar-animated': props.animated || parentData?.animated.value,\n    'progress-bar-striped':\n      props.striped || parentData?.striped.value || props.animated || parentData?.animated.value,\n  },\n])\n\nconst numberPrecision = useToNumber(() => props.precision)\nconst numberValue = useToNumber(() => props.value)\nconst numberMax = useToNumber(() => props.max ?? NaN)\nconst parentMaxNumber = useToNumber(() => parentData?.max.value ?? NaN)\n\nconst computedLabel = computed(() =>\n  props.labelHtml !== undefined\n    ? props.labelHtml\n    : props.showValue || parentData?.showValue.value\n      ? numberValue.value.toFixed(numberPrecision.value)\n      : props.showProgress || parentData?.showProgress.value\n        ? ((numberValue.value * 100) / (numberMax.value || 100)).toFixed(numberPrecision.value)\n        : props.label !== undefined\n          ? props.label\n          : ''\n)\n\nconst computedWidth = computed(() =>\n  parentMaxNumber.value\n    ? `${(numberValue.value * 100) / parentMaxNumber.value}%`\n    : numberMax.value\n      ? `${(numberValue.value * 100) / numberMax.value}%`\n      : typeof props.value === 'string'\n        ? props.value\n        : `${props.value}%`\n)\n</script>\n","<template>\n  <div class=\"progress\" :style=\"{height}\">\n    <slot>\n      <BProgressBar\n        :animated=\"animated\"\n        :max=\"max\"\n        :precision=\"precision\"\n        :show-progress=\"showProgress\"\n        :show-value=\"showValue\"\n        :striped=\"striped\"\n        :value=\"value\"\n        :variant=\"variant\"\n        :text-variant=\"textVariant\"\n        :bg-variant=\"bgVariant\"\n      />\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport BProgressBar from './BProgressBar.vue'\nimport type {BProgressProps} from '../../types'\nimport {provide, toRef} from 'vue'\nimport {progressInjectionKey} from '../../utils'\n\nconst props = withDefaults(defineProps<BProgressProps>(), {\n  height: undefined,\n  // BProgressBar props\n  animated: undefined,\n  bgVariant: undefined,\n  max: 100,\n  precision: undefined,\n  showProgress: undefined,\n  showValue: undefined,\n  striped: undefined,\n  textVariant: undefined,\n  value: undefined,\n  variant: undefined,\n  // End BProgressBar props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nprovide(progressInjectionKey, {\n  animated: toRef(() => props.animated),\n  max: toRef(() => props.max),\n  showProgress: toRef(() => props.showProgress),\n  showValue: toRef(() => props.showValue),\n  striped: toRef(() => props.striped),\n})\n</script>\n","<template>\n  <BTransition\n    :no-fade=\"props.noFade\"\n    v-bind=\"transProps\"\n    @before-enter=\"onBeforeEnter\"\n    @after-enter=\"onAfterEnter\"\n    @after-leave=\"onAfterLeave\"\n  >\n    <div\n      v-if=\"isToastVisible\"\n      :id=\"id\"\n      ref=\"element\"\n      class=\"toast\"\n      :class=\"[toastClass, computedClasses]\"\n      tabindex=\"0\"\n      :role=\"!isToastVisible ? undefined : props.isStatus ? 'status' : 'alert'\"\n      :aria-live=\"!isToastVisible ? undefined : props.isStatus ? 'polite' : 'assertive'\"\n      :aria-atomic=\"!isToastVisible ? undefined : true\"\n    >\n      <component :is=\"headerTag\" v-if=\"$slots.title || title\" class=\"toast-header\">\n        <slot name=\"title\" :hide=\"hideFn\">\n          <strong class=\"me-auto\">\n            {{ title }}\n          </strong>\n        </slot>\n        <BCloseButton v-if=\"!props.noCloseButton\" @click=\"hideFn('close')\" />\n      </component>\n      <template v-if=\"$slots.default || body\">\n        <component\n          :is=\"computedTag\"\n          class=\"toast-body\"\n          style=\"display: block\"\n          :class=\"bodyClass\"\n          v-bind=\"computedLinkProps\"\n          @click=\"computedLink ? hideFn() : () => {}\"\n        >\n          <slot :hide=\"hideFn\">\n            {{ body }}\n          </slot>\n        </component>\n      </template>\n      <BProgress\n        v-if=\"typeof modelValue === 'number' && progressProps !== undefined\"\n        :animated=\"progressProps.animated\"\n        :precision=\"progressProps.precision\"\n        :show-progress=\"progressProps.showProgress\"\n        :show-value=\"progressProps.showValue\"\n        :striped=\"progressProps.striped\"\n        :variant=\"progressProps.variant\"\n        :max=\"modelValue\"\n        :value=\"remainingMs\"\n        height=\"4px\"\n      />\n    </div>\n  </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onBeforeUnmount, ref, toRef, watch, watchEffect} from 'vue'\nimport {useBLinkHelper, useColorVariantClasses, useCountdown} from '../../composables'\nimport type {BToastProps} from '../../types'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BLink from '../BLink/BLink.vue'\nimport {useElementHover, useToNumber} from '@vueuse/core'\nimport BProgress from '../BProgress/BProgress.vue'\nimport {BvTriggerableEvent} from '../../utils'\n\nconst props = withDefaults(defineProps<BToastProps>(), {\n  bgVariant: null,\n  body: undefined,\n  bodyClass: undefined,\n  headerClass: undefined,\n  headerTag: 'div',\n  id: undefined,\n  interval: 1000,\n  isStatus: false,\n  noCloseButton: false,\n  noFade: false,\n  noHoverPause: false,\n  progressProps: undefined,\n  showOnPause: true,\n  solid: false,\n  textVariant: null,\n  title: undefined,\n  toastClass: undefined,\n  transProps: undefined,\n  // Link props\n  // All others use defaults\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  variant: undefined,\n  // End link props\n})\n\nconst emit = defineEmits<{\n  'close': [value: BvTriggerableEvent]\n  'close-countdown': [value: number]\n  'hide': [value: BvTriggerableEvent]\n  'hidden': [value: BvTriggerableEvent]\n  'show': [value: BvTriggerableEvent]\n  'shown': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'hide-prevented': []\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst isHovering = useElementHover(element)\n// Note: passive: true will sync an internal ref... This is required for useToast to exit,\n// Since the modelValue that's passed from that composable is not reactive, this internal ref _is_ and thus it will trigger closing the toast\nconst modelValue = defineModel<boolean | number>({default: false})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst intervalNumber = useToNumber(() => props.interval)\n// TODO solid is never used\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\nconst countdownLength = toRef(() => (typeof modelValue.value === 'boolean' ? 0 : modelValue.value))\n\nconst {\n  isActive,\n  pause,\n  restart,\n  resume,\n  stop,\n  isPaused,\n  value: remainingMs,\n} = useCountdown(countdownLength, intervalNumber, {\n  immediate: typeof modelValue.value === 'number',\n})\n\nwatchEffect(() => {\n  emit('close-countdown', remainingMs.value)\n})\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : 'div'))\n\nconst isToastVisible = toRef(() =>\n  typeof modelValue.value === 'boolean'\n    ? modelValue.value\n    : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    show: isToastVisible.value,\n  },\n])\n\nconst onMouseEnter = () => {\n  if (props.noHoverPause) return\n  pause()\n}\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  resume()\n})\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Readonly<Partial<BvTriggerableEvent>> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: props.id,\n  })\n\nconst showFn = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    if (modelValue.value) modelValue.value = false\n    emit('show-prevented')\n    return\n  }\n  if (!modelValue.value) modelValue.value = true\n}\nconst hideFn = (trigger = '') => {\n  const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n  emit('hide', event)\n\n  if (trigger === 'close') {\n    emit('close', event)\n  }\n\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    if (!modelValue.value) modelValue.value = true\n    return\n  }\n\n  if (typeof modelValue.value === 'boolean') {\n    modelValue.value = false\n  } else {\n    modelValue.value = 0\n    stop()\n  }\n}\n\nconst onBeforeEnter = () => {\n  showFn()\n}\nconst onAfterEnter = () => {\n  emit('shown', buildTriggerableEvent('shown'))\n}\nconst onAfterLeave = () => {\n  emit('hidden', buildTriggerableEvent('hidden'))\n}\n\n// isActive in the composable will cause the toast to hide when the countdown is done\nwatch(isActive, (newValue) => {\n  if (newValue === false && isPaused.value === false && !!modelValue.value) {\n    hideFn()\n  }\n})\n\nonBeforeUnmount(stop)\n\ndefineExpose({\n  pause,\n  restart,\n  resume,\n  stop,\n})\n</script>\n","import {\n  type Component,\n  computed,\n  type ComputedRef,\n  type MaybeRefOrGetter,\n  type Plugin,\n  ref,\n  shallowRef,\n  toValue,\n} from 'vue'\nimport BToast from '../components/BToast/BToast.vue'\nimport type {OrchestratedToast} from '../types'\nimport {toastPluginKey} from '../utils'\n\nconst posDefault = 'top-right'\n\nexport default {\n  install(app) {\n    const toasts = shallowRef<\n      ComputedRef<{\n        component: unknown\n        props: Omit<OrchestratedToast, 'value'> & {\n          _self: symbol\n          _modelValue: OrchestratedToast['value'] // Convert it to be the same name as useModalController.\n          // The difference between the two is that unlike that one, this value can be defined (there's cannot be).\n        }\n      }>[]\n    >([])\n\n    const _isAppend = ref(false)\n\n    const _setIsAppend = (value: boolean) => {\n      _isAppend.value = value\n    }\n\n    /**\n     * @returns {symbol} A symbol that corresponds to its unique id. You can pass this id to the hide function to force a Toast to hide\n     */\n    const show = (obj: {\n      component?: MaybeRefOrGetter<Readonly<Component>>\n      props?: MaybeRefOrGetter<Readonly<OrchestratedToast>>\n    }): symbol => {\n      const _self = Symbol()\n\n      const toastToAdd = computed(() => {\n        const unwrappedProps = toValue(obj.props)\n        return {\n          component: toValue(obj.component) ?? BToast,\n          props: {\n            ...unwrappedProps,\n            pos: unwrappedProps?.pos || posDefault,\n            _modelValue: unwrappedProps?.value || 5000,\n            _self,\n          },\n        }\n      })\n\n      if (\n        toastToAdd.value.props.appendToast !== undefined\n          ? toastToAdd.value.props.appendToast\n          : _isAppend.value\n      ) {\n        toasts.value = [...toasts.value, toastToAdd]\n      } else {\n        toasts.value = [toastToAdd, ...toasts.value]\n      }\n\n      return _self\n    }\n\n    /**\n     * You can get the symbol param from the return value from the show method\n     */\n    const remove = (self: symbol) => {\n      toasts.value = toasts.value.filter((el) => el.value.props._self !== self)\n    }\n\n    app.provide(toastPluginKey, {\n      _setIsAppend,\n      toasts,\n      show,\n      remove,\n    })\n  },\n} satisfies Plugin\n","import {type Plugin, ref} from 'vue'\nimport type {BreadcrumbItemRaw} from '../types'\nimport {breadcrumbPluginKey} from '../utils'\n\nexport default {\n  install(app) {\n    const items = ref<BreadcrumbItemRaw[]>([])\n    const reset = () => {\n      items.value.splice(0, items.value.length)\n    }\n\n    app.provide(breadcrumbPluginKey, {items, reset})\n  },\n} satisfies Plugin\n","import {type Plugin} from 'vue'\nimport type {BootstrapVueOptions} from '../types'\nimport {idPluginKey} from '../utils'\n\nexport default {\n  install(app, options: BootstrapVueOptions['plugins']) {\n    if (options?.id instanceof Object && typeof options.id.getId === 'function') {\n      app.provide(idPluginKey, options.id.getId)\n    }\n  },\n} satisfies Plugin\n","<template>\n  <component\n    :is=\"tag\"\n    :class=\"computedClasses\"\n    :role=\"label || hasLabelSlot ? role : null\"\n    :aria-hidden=\"label || hasLabelSlot ? null : true\"\n  >\n    <span v-if=\"label || hasLabelSlot\" class=\"visually-hidden\">\n      <slot name=\"label\">{{ label }}</slot>\n    </span>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BSpinnerProps} from '../types'\nimport {isEmptySlot} from '../utils'\n\nconst props = withDefaults(defineProps<BSpinnerProps>(), {\n  label: undefined,\n  role: 'status',\n  small: false,\n  tag: 'span',\n  type: 'border',\n  variant: null,\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  label?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n  `spinner-${props.type}`,\n  {\n    [`spinner-${props.type}-sm`]: props.small,\n    [`text-${props.variant}`]: props.variant !== null,\n  },\n])\n\nconst hasLabelSlot = toRef(() => !isEmptySlot(slots.label))\n</script>\n","<template>\n  <component\n    :is=\"computedTag\"\n    class=\"btn\"\n    v-bind=\"linkProps\"\n    :class=\"computedClasses\"\n    :aria-disabled=\"nonStandardTag ? props.disabled : null\"\n    :aria-pressed=\"isToggle ? props.pressed : null\"\n    :autocomplete=\"isToggle ? 'off' : null\"\n    :disabled=\"isButton ? props.disabled : null\"\n    :href=\"href\"\n    :rel=\"computedLink ? rel : null\"\n    :role=\"nonStandardTag || computedLink ? 'button' : null\"\n    :target=\"computedLink ? target : null\"\n    :type=\"isButton ? type : null\"\n    :to=\"!isButton ? to : null\"\n    :append=\"computedLink ? append : null\"\n    @click=\"clicked\"\n  >\n    <template v-if=\"props.loading\">\n      <slot name=\"loading\">\n        <template v-if=\"!props.loadingFill\">\n          {{ loadingText }}\n        </template>\n        <slot name=\"loading-spinner\">\n          <BSpinner :small=\"size !== 'lg'\" :label=\"props.loadingFill ? loadingText : undefined\" />\n        </slot>\n      </slot>\n    </template>\n    <template v-else>\n      <slot />\n    </template>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport BSpinner from '../BSpinner.vue'\nimport {useBLinkHelper} from '../../composables'\nimport type {BButtonProps} from '../../types'\nimport BLink from '../BLink/BLink.vue'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'loading'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'loading-spinner'?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BButtonProps>(), {\n  loading: false,\n  loadingFill: false,\n  loadingText: 'Loading...',\n  pill: false,\n  size: 'md',\n  squared: false,\n  tag: 'button',\n  type: 'button',\n  // Link props\n  active: false, // Why is this active: false?\n  variant: 'secondary',\n  // All others use defaults\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  routerTag: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  // End link props\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst pressedValue = defineModel<boolean | undefined>('pressed', {default: undefined})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n  'active-class',\n  'exact-active-class',\n  'replace',\n  'routerComponentName',\n  'routerTag',\n])\n\nconst isToggle = toRef(() => typeof props.pressed === 'boolean')\nconst isButton = toRef(\n  () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = toRef(() => props.to !== undefined)\nconst nonStandardTag = toRef(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\n\nconst computedClasses = computed(() => [\n  [`btn-${props.size}`],\n  {\n    [`btn-${props.variant}`]: props.variant !== null,\n    'active': props.active || props.pressed,\n    'rounded-pill': props.pill,\n    'rounded-0': props.squared,\n    'disabled': props.disabled,\n  },\n])\n\nconst computedTag = toRef(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n  if (props.disabled) {\n    e.preventDefault()\n    e.stopPropagation()\n    return\n  }\n  emit('click', e)\n  if (isToggle.value) {\n    pressedValue.value = !props.pressed\n  }\n}\n</script>\n","<template>\n  <component :is=\"wrapTag\" class=\"b-overlay-wrap position-relative\" :aria-busy=\"computedAriaBusy\">\n    <slot />\n    <BTransition\n      :no-fade=\"noFade\"\n      :trans-props=\"{enterToClass: 'show'}\"\n      name=\"fade\"\n      @after-enter=\"emit('shown')\"\n      @after-leave=\"emit('hidden')\"\n    >\n      <component\n        :is=\"overlayTag\"\n        v-if=\"props.show\"\n        class=\"b-overlay\"\n        :class=\"overlayClasses\"\n        :style=\"overlayStyles\"\n        @click=\"emit('click', $event)\"\n      >\n        <div class=\"position-absolute\" :class=\"blurClasses\" :style=\"blurStyles\" />\n\n        <div class=\"position-absolute\" :style=\"spinWrapperStyles\">\n          <slot name=\"overlay\" v-bind=\"spinnerAttrs\">\n            <BSpinner v-if=\"!props.noSpinner\" v-bind=\"spinnerAttrs\" />\n          </slot>\n        </div>\n      </component>\n    </BTransition>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BOverlayProps} from '../../types'\nimport {useRadiusElementClasses} from '../../composables'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BSpinner from '../BSpinner.vue'\n\nconst props = withDefaults(defineProps<BOverlayProps>(), {\n  blur: '2px',\n  bgColor: undefined,\n  fixed: false,\n  noCenter: false,\n  noFade: false,\n  noSpinner: false,\n  noWrap: false,\n  opacity: 0.85,\n  overlayTag: 'div',\n  show: false,\n  spinnerSmall: false,\n  spinnerType: 'border',\n  spinnerVariant: undefined,\n  variant: 'light',\n  wrapTag: 'div',\n  zIndex: 10,\n  // RadiusElementExtendables props\n  rounded: false,\n  roundedBottom: undefined,\n  roundedEnd: undefined,\n  roundedStart: undefined,\n  roundedTop: undefined,\n  // End RadiusElementExtendables props\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n  hidden: []\n  shown: []\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  overlay?: (props: typeof spinnerAttrs.value) => any\n}>()\n\nconst positionStyles = {top: 0, left: 0, bottom: 0, right: 0} as const\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n  rounded: props.rounded,\n  roundedTop: props.roundedTop,\n  roundedBottom: props.roundedBottom,\n  roundedStart: props.roundedStart,\n  roundedEnd: props.roundedEnd,\n}))\n\nconst computedVariant = toRef(() =>\n  props.variant !== null && !props.bgColor ? `bg-${props.variant}` : ''\n)\n\nconst computedAriaBusy = toRef(() => (props.show ? true : null))\n\nconst spinnerAttrs = computed(() => ({\n  type: props.spinnerType,\n  variant: props.spinnerVariant,\n  small: props.spinnerSmall,\n}))\n\nconst overlayStyles = computed(() => ({\n  ...positionStyles,\n  zIndex: props.zIndex || 10,\n}))\n\nconst overlayClasses = computed(() => ({\n  'position-absolute': !props.noWrap || !props.fixed,\n  'position-fixed': props.noWrap && props.fixed,\n}))\n\nconst blurClasses = computed(() => [computedVariant.value, radiusElementClasses.value])\n\nconst blurStyles = computed(() => ({\n  ...positionStyles,\n  opacity: props.opacity,\n  backgroundColor: props.bgColor || undefined,\n  backdropFilter: props.blur ? `blur(${props.blur})` : undefined,\n}))\n\nconst spinWrapperStyles = computed(() =>\n  props.noCenter\n    ? positionStyles\n    : {\n        top: '50%',\n        left: '50%',\n        transform: 'translateX(-50%) translateY(-50%)',\n      }\n)\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"props.teleportDisabled\">\n    <BTransition\n      :no-fade=\"true\"\n      v-bind=\"transProps\"\n      :trans-props=\"{enterToClass: 'show', ...transProps?.transProps}\"\n      @before-enter=\"onBeforeEnter\"\n      @after-enter=\"onAfterEnter\"\n      @leave=\"onLeave\"\n      @after-leave=\"onAfterLeave\"\n    >\n      <div\n        v-show=\"modelValue\"\n        :id=\"computedId\"\n        ref=\"element\"\n        class=\"modal\"\n        :class=\"modalClasses\"\n        role=\"dialog\"\n        :aria-labelledby=\"!props.hideHeader ? `${computedId}-label` : undefined\"\n        :aria-describedby=\"`${computedId}-body`\"\n        tabindex=\"-1\"\n        v-bind=\"$attrs\"\n        :style=\"computedZIndex\"\n      >\n        <div class=\"modal-dialog\" :class=\"modalDialogClasses\">\n          <div v-if=\"lazyShowing\" class=\"modal-content\" :class=\"contentClass\">\n            <div v-if=\"!props.hideHeader\" class=\"modal-header\" :class=\"headerClasses\">\n              <slot name=\"header\" v-bind=\"sharedSlots\">\n                <component\n                  :is=\"titleTag\"\n                  :id=\"`${computedId}-label`\"\n                  class=\"modal-title\"\n                  :class=\"titleClasses\"\n                >\n                  <slot name=\"title\" v-bind=\"sharedSlots\">\n                    {{ title }}\n                  </slot>\n                </component>\n                <template v-if=\"!props.hideHeaderClose\">\n                  <BButton\n                    v-if=\"hasHeaderCloseSlot\"\n                    v-bind=\"headerCloseAttrs\"\n                    @click=\"hideFn('close')\"\n                  >\n                    <slot name=\"header-close\" />\n                  </BButton>\n                  <BCloseButton\n                    v-else\n                    :aria-label=\"headerCloseLabel\"\n                    v-bind=\"headerCloseAttrs\"\n                    @click=\"hideFn('close')\"\n                  />\n                </template>\n              </slot>\n            </div>\n            <div\n              :id=\"`${computedId}-body`\"\n              class=\"modal-body\"\n              :class=\"bodyClasses\"\n              v-bind=\"bodyAttrs\"\n            >\n              <slot v-bind=\"sharedSlots\">\n                {{ body }}\n              </slot>\n            </div>\n            <div v-if=\"!props.hideFooter\" class=\"modal-footer\" :class=\"footerClasses\">\n              <slot name=\"footer\" v-bind=\"sharedSlots\">\n                <slot name=\"cancel\" v-bind=\"sharedSlots\">\n                  <BButton\n                    v-if=\"!props.okOnly\"\n                    ref=\"cancelButton\"\n                    :disabled=\"disableCancel\"\n                    :size=\"buttonSize\"\n                    :variant=\"cancelVariant\"\n                    @click=\"hideFn('cancel')\"\n                  >\n                    {{ cancelTitle }}\n                  </BButton>\n                </slot>\n                <slot name=\"ok\" v-bind=\"sharedSlots\">\n                  <BButton\n                    ref=\"okButton\"\n                    :disabled=\"disableOk\"\n                    :size=\"buttonSize\"\n                    :variant=\"okVariant\"\n                    @click=\"hideFn('ok')\"\n                  >\n                    {{ okTitle }}\n                  </BButton>\n                </slot>\n              </slot>\n            </div>\n          </div>\n        </div>\n        <slot name=\"backdrop\">\n          <BOverlay\n            :variant=\"computedBackdropVariant\"\n            :show=\"modelValue\"\n            no-spinner\n            fixed\n            no-wrap\n            :blur=\"null\"\n            @click=\"hideFn('backdrop')\"\n          />\n        </slot>\n      </div>\n    </BTransition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, useEventListener, useFocus} from '@vueuse/core'\nimport {computed, type CSSProperties, ref, toRef, watch} from 'vue'\nimport {useColorVariantClasses, useId, useModalManager, useSafeScrollLock} from '../../composables'\nimport type {BModalProps} from '../../types'\nimport {BvTriggerableEvent, isEmptySlot} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BOverlay from '../BOverlay/BOverlay.vue'\nimport BTransition from '../BTransition/BTransition.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\n// aria\n// autofocus\n// close on escape when autofocus\n\n// Note, attempt to return focus to item that openned the modal after close\n// Implement auto focus props like autoFocusButton\n\nconst props = withDefaults(defineProps<BModalProps>(), {\n  autoFocus: true,\n  autoFocusButton: undefined,\n  backdropVariant: undefined,\n  body: undefined,\n  bodyBgVariant: null,\n  bodyAttrs: undefined,\n  bodyClass: null,\n  bodyScrolling: false,\n  bodyTextVariant: null,\n  bodyVariant: null,\n  busy: false,\n  buttonSize: 'md',\n  cancelDisabled: false,\n  cancelTitle: 'Cancel',\n  cancelVariant: 'secondary',\n  centered: false,\n  contentClass: undefined,\n  dialogClass: undefined,\n  footerBgVariant: null,\n  footerBorderVariant: null,\n  footerClass: undefined,\n  footerTextVariant: null,\n  footerVariant: null,\n  fullscreen: false,\n  headerBgVariant: null,\n  headerBorderVariant: null,\n  headerClass: undefined,\n  headerCloseClass: undefined,\n  headerCloseLabel: 'Close',\n  headerCloseVariant: 'secondary',\n  headerTextVariant: null,\n  headerVariant: null,\n  hideBackdrop: false,\n  hideFooter: false,\n  hideHeader: false,\n  hideHeaderClose: false,\n  id: undefined,\n  lazy: false,\n  modalClass: undefined,\n  noCloseOnBackdrop: false,\n  noCloseOnEsc: false,\n  noFade: false,\n  okDisabled: false,\n  okOnly: false,\n  okTitle: 'Ok',\n  okVariant: 'primary',\n  scrollable: false,\n  size: 'md',\n  teleportDisabled: false,\n  teleportTo: 'body',\n  title: undefined,\n  titleClass: undefined,\n  titleSrOnly: false,\n  titleTag: 'h5',\n  transProps: undefined,\n})\n\nconst emit = defineEmits<{\n  'cancel': [value: BvTriggerableEvent]\n  'close': [value: BvTriggerableEvent]\n  'hidden': [value: BvTriggerableEvent]\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'ok': [value: BvTriggerableEvent]\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': [value: BvTriggerableEvent]\n}>()\n\ntype SharedSlotsData = {\n  cancel: () => void\n  close: () => void\n  hide: (trigger?: string) => void\n  ok: () => void\n  visible: boolean\n}\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'backdrop'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'cancel'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'footer'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header-close'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'ok'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'title'?: (props: SharedSlotsData) => any\n}>()\n\nconst computedId = useId(() => props.id, 'modal')\n// Note: passive: true will sync an internal ref... This is required for useModalManager to exit,\n// Since the modelValue that's passed from that composable is not reactive, this internal ref _is_ and thus it will trigger closing the modal\nconst modelValue = defineModel<boolean>({default: false})\n\nconst element = ref<HTMLElement | null>(null)\nconst okButton = ref<HTMLElement | null>(null)\nconst cancelButton = ref<HTMLElement | null>(null)\nconst closeButton = ref<HTMLElement | null>(null)\nconst isActive = ref(modelValue.value)\nconst lazyLoadCompleted = ref(false)\n\nonKeyStroke(\n  'Escape',\n  () => {\n    hideFn('esc')\n  },\n  {target: element}\n)\nuseSafeScrollLock(modelValue, () => props.bodyScrolling)\nconst {focused: modalFocus} = useFocus(element, {\n  initialValue: modelValue.value && props.autoFocusButton === undefined,\n})\nconst {focused: okButtonFocus} = useFocus(okButton, {\n  initialValue: modelValue.value && props.autoFocusButton === 'ok',\n})\nconst {focused: cancelButtonFocus} = useFocus(cancelButton, {\n  initialValue: modelValue.value && props.autoFocusButton === 'cancel',\n})\nconst {focused: closeButtonFocus} = useFocus(closeButton, {\n  initialValue: modelValue.value && props.autoFocusButton === 'close',\n})\n\nconst modalClasses = computed(() => [\n  props.modalClass,\n  {\n    fade: !props.noFade,\n    show: isActive.value,\n  },\n])\n\nconst lazyShowing = toRef(\n  () =>\n    props.lazy === false ||\n    (props.lazy === true && lazyLoadCompleted.value === true) ||\n    (props.lazy === true && modelValue.value === true)\n)\n\nconst computedBackdropVariant = toRef(() =>\n  props.backdropVariant !== undefined\n    ? props.backdropVariant\n    : props.hideBackdrop\n      ? 'transparent'\n      : 'dark'\n)\n\nconst hasHeaderCloseSlot = toRef(() => !isEmptySlot(slots['header-close']))\n\nconst modalDialogClasses = computed(() => [\n  props.dialogClass,\n  {\n    'modal-fullscreen': props.fullscreen === true,\n    [`modal-fullscreen-${props.fullscreen}-down`]: typeof props.fullscreen === 'string',\n    [`modal-${props.size}`]: props.size !== 'md',\n    'modal-dialog-centered': props.centered,\n    'modal-dialog-scrollable': props.scrollable,\n  },\n])\n\nconst resolvedBodyBgClasses = useColorVariantClasses(() => ({\n  bgVariant: props.bodyBgVariant,\n  textVariant: props.bodyTextVariant,\n  variant: props.bodyVariant,\n}))\n\nconst bodyClasses = computed(() => [props.bodyClass, resolvedBodyBgClasses.value])\n\nconst resolvedHeaderBgClasses = useColorVariantClasses(() => ({\n  bgVariant: props.headerBgVariant,\n  textVariant: props.headerTextVariant,\n  variant: props.headerVariant,\n}))\n\nconst headerClasses = computed(() => [\n  props.headerClass,\n  resolvedHeaderBgClasses.value,\n  {\n    [`border-${props.headerBorderVariant}`]: props.headerBorderVariant !== null,\n  },\n])\n\nconst headerCloseAttrs = computed(() => ({\n  variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n  class: props.headerCloseClass,\n}))\n\nconst resolvedFooterBgClasses = useColorVariantClasses(() => ({\n  bgVariant: props.footerBgVariant,\n  textVariant: props.footerTextVariant,\n  variant: props.footerVariant,\n}))\n\nconst footerClasses = computed(() => [\n  props.footerClass,\n  resolvedFooterBgClasses.value,\n  {\n    [`border-${props.footerBorderVariant}`]: props.footerBorderVariant !== null,\n  },\n])\n\nconst titleClasses = computed(() => [\n  props.titleClass,\n  {\n    ['visually-hidden']: props.titleSrOnly,\n  },\n])\nconst disableCancel = toRef(() => props.cancelDisabled || props.busy)\nconst disableOk = toRef(() => props.okDisabled || props.busy)\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Readonly<Partial<BvTriggerableEvent>> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nwatch(modelValue, (newValue, oldValue) => {\n  if (newValue === oldValue) return\n  if (newValue === true) {\n    showFn()\n  } else {\n    hideFn()\n  }\n})\n\nconst hideFn = (trigger = '') => {\n  if (\n    (trigger === 'backdrop' && props.noCloseOnBackdrop) ||\n    (trigger === 'esc' && props.noCloseOnEsc)\n  ) {\n    emit('hide-prevented')\n    return\n  }\n\n  const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n  if (trigger === 'ok') {\n    emit(trigger, event)\n  }\n  if (trigger === 'cancel') {\n    emit(trigger, event)\n  }\n  if (trigger === 'close') {\n    emit(trigger, event)\n  }\n  emit('hide', event)\n\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    if (!modelValue.value) modelValue.value = true\n    return\n  }\n  if (modelValue.value) modelValue.value = false\n}\n\n// TODO: If a show is prevented, it will briefly show the animation. This is a bug\n// I'm not sure how to wait for the event to be determined. Before showing\nconst showFn = () => {\n  if (isActive.value) return\n\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    if (modelValue.value) modelValue.value = false\n    emit('show-prevented')\n    return\n  }\n  if (!modelValue.value) modelValue.value = true\n}\n\nconst pickFocusItem = () => {\n  if (props.autoFocus === false) return\n  props.autoFocusButton === 'ok'\n    ? (okButtonFocus.value = true)\n    : props.autoFocusButton === 'close'\n      ? (closeButtonFocus.value = true)\n      : props.autoFocusButton === 'cancel'\n        ? (cancelButtonFocus.value = true)\n        : (modalFocus.value = true)\n}\n\nconst onBeforeEnter = () => {\n  showFn()\n}\nconst onAfterEnter = () => {\n  isActive.value = true\n  pickFocusItem()\n  emit('shown', buildTriggerableEvent('shown'))\n  if (props.lazy === true) lazyLoadCompleted.value = true\n}\nconst onLeave = () => {\n  isActive.value = false\n}\nconst onAfterLeave = () => {\n  emit('hidden', buildTriggerableEvent('hidden'))\n  if (props.lazy === true) lazyLoadCompleted.value = false\n}\n\nconst {activePosition, activeModalCount} = useModalManager(isActive)\nconst defaultModalDialogZIndex = 1056\nconst computedZIndex = computed<CSSProperties>(() => ({\n  // Make sure that newly opened modals have a higher z-index than currently active ones.\n  // All active modals have a z-index of ('defaultZIndex' - 'stackSize' - 'positionInStack').\n  //\n  // This means inactive modals will already be higher than active ones when opened.\n  'z-index': isActive.value\n    ? defaultModalDialogZIndex - ((activeModalCount?.value ?? 0) - (activePosition?.value ?? 0))\n    : defaultModalDialogZIndex,\n}))\n\nuseEventListener(element, 'bv-toggle', () => {\n  modelValue.value ? hideFn() : showFn()\n})\n\nconst sharedSlots = computed<SharedSlotsData>(() => ({\n  cancel: () => {\n    hideFn('cancel')\n  },\n  close: () => {\n    hideFn('close')\n  },\n  hide: hideFn,\n  ok: () => {\n    hideFn('ok')\n  },\n  visible: modelValue.value,\n}))\n\ndefineExpose({\n  hide: hideFn,\n  id: computedId,\n  show: showFn,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.modal {\n  display: block;\n}\n\n.modal-dialog {\n  z-index: 1051;\n}\n</style>\n","import {\n  type Component,\n  computed,\n  type ComputedRef,\n  type MaybeRefOrGetter,\n  type Plugin,\n  shallowRef,\n  toValue,\n} from 'vue'\nimport {modalControllerPluginKey} from '../utils'\nimport type {BModalProps, OrchestratedModal} from '../types'\nimport BModal from '../components/BModal/BModal.vue'\n\nexport default {\n  install(app) {\n    const modals = shallowRef<\n      ComputedRef<{\n        component: unknown // TS being weird here, just use unknown\n        props: OrchestratedModal & {\n          _self: symbol\n          _modelValue: BModalProps['modelValue']\n          _promise: {\n            value: Promise<boolean | null>\n            resolve: (value: boolean | null) => void\n          }\n          _isConfirm: boolean\n        }\n      }>[]\n    >([])\n\n    const buildPromise = (): {\n      value: Promise<boolean | null>\n      resolve: (value: boolean | null) => void\n    } => {\n      let resolveFunc: (value: boolean | null) => void = () => {\n        /* empty */\n      }\n\n      const promise = new Promise<boolean | null>((resolve) => {\n        resolveFunc = resolve\n      })\n\n      return {\n        value: promise,\n        resolve: resolveFunc,\n      }\n    }\n\n    const show = (obj: {\n      component?: MaybeRefOrGetter<Readonly<Component>>\n      props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n    }) => {\n      const _promise = buildPromise()\n      const _self = Symbol()\n\n      modals.value = [\n        ...modals.value,\n        computed(() => ({\n          component: toValue(obj.component) ?? BModal,\n          props: {...toValue(obj.props), _isConfirm: false, _promise, _self, _modelValue: true},\n        })),\n      ]\n\n      return _promise.value\n    }\n\n    const confirm = (obj: {\n      component?: MaybeRefOrGetter<Readonly<Component>>\n      props?: MaybeRefOrGetter<Readonly<OrchestratedModal>>\n    }) => {\n      const _promise = buildPromise()\n      const _self = Symbol()\n\n      modals.value = [\n        ...modals.value,\n        computed(() => ({\n          component: toValue(obj.component) ?? BModal,\n          props: {...toValue(obj.props), _isConfirm: true, _promise, _self, _modelValue: true},\n        })),\n      ]\n\n      return _promise.value\n    }\n\n    const remove = (self: symbol) => {\n      modals.value = modals.value.filter((el) => el.value.props._self !== self)\n    }\n\n    app.provide(modalControllerPluginKey, {\n      modals,\n      remove,\n      show,\n      confirm,\n    })\n  },\n} satisfies Plugin\n","import {type ComponentInternalInstance, type Plugin, type Ref, shallowRef, toRef} from 'vue'\nimport {modalManagerPluginKey} from '../utils'\n\nexport default {\n  install(app) {\n    /**\n     * A collection of all currently active modals\n     */\n    const stack: Ref<ComponentInternalInstance[]> = shallowRef([])\n\n    const countStack = toRef(() => stack.value.length)\n    const lastStack = toRef(() => stack.value[stack.value.length - 1])\n\n    const pushStack = (modal: Readonly<ComponentInternalInstance>) => {\n      stack.value = [...stack.value, modal]\n    }\n    const removeStack = (modal: Readonly<ComponentInternalInstance>) => {\n      stack.value = stack.value.filter((item) => item.uid !== modal.uid)\n    }\n\n    /**\n     * A collection of all registered modals\n     */\n    const registry: Ref<ComponentInternalInstance[]> = shallowRef([])\n\n    // Utility getters not made, would not be used (count, last)\n\n    const pushRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n      registry.value = [...registry.value, modal]\n    }\n    const removeRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n      registry.value = registry.value.filter((item) => item.uid !== modal.uid)\n    }\n\n    app.provide(modalManagerPluginKey, {\n      stack,\n      countStack,\n      lastStack,\n      registry,\n      pushStack,\n      removeStack,\n      pushRegistry,\n      removeRegistry,\n    })\n  },\n} satisfies Plugin\n","import {type Plugin, ref} from 'vue'\nimport {rtlPluginKey} from '../utils'\nimport type {BootstrapVueOptions} from '../types'\n\nexport default {\n  install(app, options: BootstrapVueOptions['plugins']) {\n    const rtlDefault = false\n    const localeDefault = undefined\n\n    const rtlInitial =\n      typeof options?.rtl === 'boolean' ? rtlDefault : options?.rtl?.rtlInitial ?? rtlDefault\n\n    const localeInitial =\n      typeof options?.rtl === 'boolean'\n        ? localeDefault\n        : options?.rtl?.localeInitial ?? localeDefault\n\n    const isRtl = ref(rtlInitial)\n    const locale = ref(localeInitial)\n\n    app.provide(rtlPluginKey, {isRtl, locale})\n  },\n} satisfies Plugin\n","<template>\n  <div :id=\"computedId\" class=\"accordion\" :class=\"computedClasses\">\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, readonly, toRef} from 'vue'\nimport {accordionInjectionKey} from '../../utils'\nimport {useId} from '../../composables'\nimport type {BAccordionProps} from '../../types'\n\nconst props = withDefaults(defineProps<BAccordionProps>(), {\n  flush: false,\n  free: false,\n  id: undefined,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<string | undefined>({\n  default: undefined,\n})\n\nconst computedId = useId(() => props.id, 'accordion')\n\nconst computedClasses = computed(() => ({\n  'accordion-flush': props.flush,\n}))\n\nprovide(accordionInjectionKey, {\n  openItem: readonly(modelValue),\n  free: toRef(() => props.free),\n  setOpenItem: (id: string) => {\n    modelValue.value = id\n  },\n})\n</script>\n","<template>\n  <slot name=\"header\" v-bind=\"sharedSlots\" />\n  <component\n    :is=\"tag\"\n    :id=\"computedId\"\n    ref=\"element\"\n    class=\"collapse\"\n    :class=\"computedClasses\"\n    :is-nav=\"props.isNav\"\n    v-bind=\"$attrs\"\n  >\n    <slot v-bind=\"sharedSlots\" />\n  </component>\n  <slot name=\"footer\" v-bind=\"sharedSlots\" />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, onMounted, provide, readonly, ref, toRef, watch} from 'vue'\nimport {useId} from '../composables'\nimport {useEventListener} from '@vueuse/core'\nimport {BvTriggerableEvent, collapseInjectionKey, getTransitionDelay} from '../utils'\nimport type {BCollapseProps} from '../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BCollapseProps>(), {\n  horizontal: false,\n  id: undefined,\n  isNav: false,\n  skipAnimation: false,\n  tag: 'div',\n  toggle: false,\n  visible: false,\n})\n\nconst emit = defineEmits<{\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n}>()\n\ntype SharedSlotsData = {\n  hide: () => void\n  id: string\n  show: () => void\n  toggle: () => void\n  visible: boolean\n}\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  footer?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: SharedSlotsData) => any\n}>()\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Readonly<Partial<BvTriggerableEvent>> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nconst modelValue = defineModel<boolean>({\n  default: false,\n})\n\nconst computedId = useId(() => props.id, 'collapse')\n\nconst element = ref<HTMLElement | null>(null)\nconst isCollapsing = ref(false)\nconst showRef = ref(modelValue.value)\n\nconst computedClasses = computed(() => ({\n  'show': showRef.value,\n  'navbar-collapse': props.isNav,\n  'collapsing': isCollapsing.value,\n  'closing': showRef.value && !modelValue.value,\n  'collapse-horizontal': props.horizontal,\n}))\n\nconst hide = () => {\n  modelValue.value = false\n}\nconst show = () => {\n  modelValue.value = true\n}\nconst toggleFn = () => {\n  modelValue.value = !modelValue.value\n}\n\nconst sharedSlots = computed<SharedSlotsData>(() => ({\n  toggle: toggleFn,\n  show,\n  hide,\n  id: computedId.value,\n  visible: modelValue.value,\n}))\n\nlet revealTimeout: ReturnType<typeof setTimeout> | undefined\nlet hideTimeout: ReturnType<typeof setTimeout> | undefined\nlet _skipAnimation = props.skipAnimation\n\nconst reveal = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    emit('show-prevented')\n    return\n  }\n  clearTimeout(hideTimeout)\n  clearTimeout(revealTimeout)\n  showRef.value = true\n  if (_skipAnimation) return\n  isCollapsing.value = true\n  nextTick(() => {\n    if (element.value === null) return\n    if (props.horizontal) {\n      element.value.style.width = `${element.value.scrollWidth}px`\n    } else {\n      element.value.style.height = `${element.value.scrollHeight}px`\n    }\n    revealTimeout = setTimeout(() => {\n      isCollapsing.value = false\n      emit('shown')\n      if (element.value === null) return\n      element.value.style.height = ''\n      element.value.style.width = ''\n    }, getTransitionDelay(element.value))\n  })\n}\n\nconst hideFn = () => {\n  const event = buildTriggerableEvent('hide', {cancelable: true})\n  emit('hide', event)\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    return\n  }\n  clearTimeout(revealTimeout)\n  clearTimeout(hideTimeout)\n  if (element.value === null) return\n  if (_skipAnimation) {\n    showRef.value = false\n    return\n  }\n  if (isCollapsing.value) {\n    element.value.style.height = ``\n    element.value.style.width = ``\n    // return\n  } else {\n    if (props.horizontal) {\n      element.value.style.width = `${element.value.scrollWidth}px`\n    } else {\n      element.value.style.height = `${element.value.scrollHeight}px`\n    }\n  }\n  // element.value.style.height = `${element.value.scrollHeight}px`\n  element.value.offsetHeight // force reflow\n  isCollapsing.value = true\n  nextTick(() => {\n    if (element.value === null) return\n    element.value.style.height = ``\n    element.value.style.width = ``\n    hideTimeout = setTimeout(() => {\n      showRef.value = false\n      isCollapsing.value = false\n      emit('hidden')\n    }, getTransitionDelay(element.value))\n  })\n}\n\nwatch(modelValue, () => {\n  modelValue.value ? reveal() : hideFn()\n})\n\nonMounted(() => {\n  if (element.value === null) return\n  if (!modelValue.value && props.toggle) {\n    nextTick(() => {\n      modelValue.value = true\n    })\n  }\n})\n\nwatch(\n  () => props.skipAnimation,\n  (newval) => {\n    _skipAnimation = newval\n  }\n)\n\nif (props.visible) {\n  _skipAnimation = true\n  modelValue.value = true\n  nextTick(() => {\n    _skipAnimation = props.skipAnimation\n  })\n}\n\nwatch(\n  () => props.visible,\n  (newval) => {\n    _skipAnimation = true\n    newval ? show() : hide()\n    nextTick(() => {\n      _skipAnimation = props.skipAnimation\n    })\n  }\n)\n\nuseEventListener(element, 'bv-toggle', () => {\n  modelValue.value = !modelValue.value\n})\n\ndefineExpose({\n  hide,\n  isNav: props.isNav,\n  show,\n  toggle: toggleFn,\n  visible: readonly(showRef),\n})\n\nprovide(collapseInjectionKey, {\n  id: computedId,\n  hide,\n  show,\n  toggle: toggleFn,\n  visible: readonly(showRef),\n  isNav: toRef(() => props.isNav),\n})\n</script>\n","<template>\n  <div class=\"accordion-item\" v-bind=\"wrapperAttrs\" :class=\"wrapperClass\">\n    <BCollapse\n      :id=\"computedId\"\n      v-model=\"modelValue\"\n      class=\"accordion-collapse\"\n      :class=\"collapseClass\"\n      :aria-labelledby=\"`${computedId}-heading`\"\n      v-bind=\"collapseAttrs\"\n      :tag=\"tag\"\n      :toggle=\"toggle\"\n      :horizontal=\"horizontal\"\n      :visible=\"visible\"\n      :is-nav=\"isNav\"\n      @show=\"emit('show', $event)\"\n      @shown=\"emit('shown')\"\n      @hide=\"emit('hide', $event)\"\n      @hidden=\"emit('hidden')\"\n      @hide-prevented=\"emit('hide-prevented')\"\n      @show-prevented=\"emit('show-prevented')\"\n    >\n      <template #header=\"{visible: toggleVisible, toggle: slotToggle}\">\n        <component\n          :is=\"headerTag\"\n          :id=\"`${computedId}-heading`\"\n          class=\"accordion-header\"\n          :class=\"headerClass\"\n          v-bind=\"headerAttrs\"\n        >\n          <button\n            class=\"accordion-button\"\n            v-bind=\"buttonAttrs\"\n            :class=\"[{collapsed: !toggleVisible}, buttonClass]\"\n            type=\"button\"\n            :aria-expanded=\"toggleVisible ? 'true' : 'false'\"\n            :aria-controls=\"computedId\"\n            @click=\"slotToggle\"\n          >\n            <slot name=\"title\"> {{ title }} </slot>\n          </button>\n        </component>\n      </template>\n      <div class=\"accordion-body\" v-bind=\"bodyAttrs\" :class=\"bodyClass\">\n        <slot />\n      </div>\n    </BCollapse>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {inject, onMounted, useAttrs, watch} from 'vue'\nimport BCollapse from '../BCollapse.vue'\nimport {accordionInjectionKey, BvTriggerableEvent} from '../../utils'\nimport {useId} from '../../composables'\nimport type {BAccordionItemProps} from '../../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\nconst {class: wrapperClass, ...collapseAttrs} = useAttrs()\n\nconst props = withDefaults(defineProps<BAccordionItemProps>(), {\n  bodyAttrs: undefined,\n  bodyClass: undefined,\n  buttonAttrs: undefined,\n  buttonClass: undefined,\n  collapseClass: undefined,\n  headerAttrs: undefined,\n  headerClass: undefined,\n  headerTag: 'h2',\n  horizontal: undefined,\n  id: undefined,\n  isNav: undefined,\n  tag: undefined,\n  title: undefined,\n  toggle: undefined,\n  visible: false,\n  wrapperAttrs: undefined,\n})\n\nconst emit = defineEmits<{\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<boolean>({default: false})\n\nconst parentData = inject(accordionInjectionKey, null)\n\nconst computedId = useId(() => props.id, 'accordion_item')\n\nonMounted(() => {\n  if (modelValue.value && !parentData?.free.value) {\n    parentData?.setOpenItem(computedId.value)\n  }\n  if (!modelValue.value && parentData?.openItem.value === computedId.value) {\n    modelValue.value = true\n  }\n})\n\nwatch(\n  () => parentData?.openItem.value,\n  () =>\n    (modelValue.value = parentData?.openItem.value === computedId.value && !parentData?.free.value)\n)\nwatch(modelValue, () => {\n  if (modelValue.value && !parentData?.free.value) parentData?.setOpenItem(computedId.value)\n})\n</script>\n","<template>\n  <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n    <div\n      v-if=\"isAlertVisible\"\n      ref=\"element\"\n      class=\"alert\"\n      role=\"alert\"\n      aria-live=\"polite\"\n      aria-atomic=\"true\"\n      :class=\"computedClasses\"\n    >\n      <slot />\n      <template v-if=\"props.dismissible\">\n        <BButton v-if=\"hasCloseSlot || closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n          <slot name=\"close\">\n            {{ closeContent }}\n          </slot>\n        </BButton>\n        <BCloseButton v-else :aria-label=\"closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n      </template>\n    </div>\n  </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition/BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types'\nimport {computed, onBeforeUnmount, ref, toRef, watch, watchEffect} from 'vue'\nimport {useCountdown} from '../../composables'\nimport {isEmptySlot} from '../../utils'\nimport {useElementHover, useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BAlertProps>(), {\n  closeClass: undefined,\n  closeContent: undefined,\n  closeLabel: 'Close',\n  closeVariant: 'secondary',\n  dismissible: false,\n  fade: false,\n  immediate: true,\n  interval: 1000,\n  noHoverPause: false,\n  showOnPause: true,\n  variant: 'info',\n})\n\nconst emit = defineEmits<{\n  'close': []\n  'close-countdown': [value: number]\n  'closed': []\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  close?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<boolean | number>({default: false})\n\nconst isHovering = useElementHover(element)\n\nconst intervalNumber = useToNumber(() => props.interval)\n\nconst hasCloseSlot = toRef(() => !isEmptySlot(slots.close))\n\nconst countdownLength = toRef(() => (typeof modelValue.value === 'boolean' ? 0 : modelValue.value))\n\nconst computedClasses = computed(() => ({\n  [`alert-${props.variant}`]: props.variant !== null,\n  'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n  isActive,\n  pause,\n  restart,\n  resume,\n  stop,\n  isPaused,\n  value: remainingMs,\n} = useCountdown(countdownLength, intervalNumber, {\n  immediate: typeof modelValue.value === 'number' && props.immediate,\n})\n\nconst isAlertVisible = toRef(() =>\n  typeof modelValue.value === 'boolean'\n    ? modelValue.value\n    : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n  variant: hasCloseSlot.value ? props.closeVariant : undefined,\n  class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n  emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n  emit('close')\n\n  if (typeof modelValue.value === 'boolean') {\n    modelValue.value = false\n  } else {\n    modelValue.value = 0\n    stop()\n  }\n\n  emit('closed')\n}\n\nconst onMouseEnter = () => {\n  if (props.noHoverPause) return\n  pause()\n}\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  resume()\n})\n\nonBeforeUnmount(stop)\n\ndefineExpose({\n  pause,\n  restart,\n  resume,\n  stop,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n","<template>\n  <component\n    :is=\"computedTag\"\n    class=\"b-avatar\"\n    :class=\"computedClasses\"\n    :style=\"computedStyle\"\n    v-bind=\"computedLinkProps\"\n    :type=\"props.button && !computedLink ? props.buttonType : undefined\"\n    :disabled=\"props.disabled || null\"\n    @click=\"clicked\"\n  >\n    <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n      <slot />\n    </span>\n    <span v-else-if=\"!!src\" class=\"b-avatar-img\">\n      <img :src=\"src\" :alt=\"alt\" @error=\"onImgError\" />\n    </span>\n    <span v-else-if=\"!!text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n      {{ text }}\n    </span>\n    <span v-if=\"showBadge\" class=\"b-avatar-badge\" :class=\"badgeClasses\" :style=\"badgeStyle\">\n      <slot name=\"badge\">\n        {{ badgeText }}\n      </slot>\n    </span>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey, isEmptySlot} from '../../utils'\nimport {computed, type CSSProperties, inject, type StyleValue, toRef} from 'vue'\nimport type {BAvatarProps} from '../../types'\nimport {\n  useBLinkHelper,\n  useColorVariantClasses,\n  useNumberishToStyle,\n  useRadiusElementClasses,\n} from '../../composables'\nimport BLink from '../BLink/BLink.vue'\n\nconst props = withDefaults(defineProps<BAvatarProps>(), {\n  alt: 'avatar',\n  badge: false,\n  badgeBgVariant: null,\n  badgeOffset: undefined,\n  badgeStart: false,\n  badgeTextVariant: null,\n  badgeTop: false,\n  badgeVariant: 'primary',\n  button: false,\n  buttonType: 'button',\n  size: undefined,\n  square: false,\n  src: undefined,\n  text: undefined,\n  // Link props\n  variant: 'secondary',\n  // All others use defaults\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  // End link props\n  // ColorExtendables props\n  // Variant is here as well\n  bgVariant: null,\n  textVariant: null,\n  // End ColorExtendables props\n  // RadiusElementExtendables props\n  rounded: false,\n  roundedBottom: undefined,\n  roundedEnd: undefined,\n  roundedStart: undefined,\n  roundedTop: undefined,\n  // End RadiusElementExtendables props\n})\n\nconst emit = defineEmits<{\n  'click': [value: MouseEvent]\n  'img-error': [value: Event]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  badge?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = ['sm', null, 'lg']\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = toRef(() => !isEmptySlot(slots.badge))\n\nconst showBadge = toRef(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = toRef(() => parentData?.size.value ?? props.square)\n\nconst computedPropSize = useNumberishToStyle(() => props.size)\nconst computedParentSize = useNumberishToStyle(() => parentData?.size.value)\nconst computedSize = computed(() => computedParentSize.value ?? computedPropSize.value)\n\nconst computedVariant = toRef(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = toRef(() => parentData?.rounded.value ?? props.rounded)\nconst computedRoundedTop = toRef(() => parentData?.roundedTop.value ?? props.roundedTop)\nconst computedRoundedBottom = toRef(() => parentData?.roundedBottom.value ?? props.roundedBottom)\nconst computedRoundedStart = toRef(() => parentData?.roundedStart.value ?? props.roundedStart)\nconst computedRoundedEnd = toRef(() => parentData?.roundedEnd.value ?? props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n  rounded: computedRounded.value,\n  roundedTop: computedRoundedTop.value,\n  roundedBottom: computedRoundedBottom.value,\n  roundedStart: computedRoundedStart.value,\n  roundedEnd: computedRoundedEnd.value,\n}))\nconst badgeClasses = useColorVariantClasses(() => ({\n  variant: props.badgeVariant,\n  bgVariant: props.badgeBgVariant,\n  textVariant: props.badgeTextVariant,\n}))\n\nconst badgeText = toRef(() => (props.badge === true ? '' : props.badge))\n\nconst computedTextVariant = toRef(() => parentData?.textVariant.value ?? props.textVariant)\nconst computedBgVariant = toRef(() => parentData?.bgVariant.value ?? props.bgVariant)\n\nconst resolvedBackgroundClasses = useColorVariantClasses(() => ({\n  bgVariant: computedBgVariant.value,\n  textVariant: computedTextVariant.value,\n  variant: computedVariant.value,\n}))\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  // Square overwrites all else\n  computedSquare.value === true ? undefined : radiusElementClasses.value,\n  {\n    [`b-avatar-${props.size}`]:\n      !!props.size && SIZES.indexOf(computedPropSize.value as string) !== -1,\n    [`btn-${computedVariant.value}`]: props.button ? computedVariant.value !== null : false,\n    'badge': !props.button && computedVariant.value !== null && hasDefaultSlot.value,\n    'btn': props.button,\n    // Square is the same as rounded-0 class\n    'rounded-0': computedSquare.value === true,\n  },\n])\n\nconst badgeStyle = computed<StyleValue>(() => {\n  const offset = props.badgeOffset || '0px'\n  const fontSize =\n    SIZES.indexOf((computedSize.value as string | undefined) || null) === -1\n      ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n      : ''\n  return {\n    fontSize: fontSize || '',\n    top: props.badgeTop ? offset : '',\n    bottom: props.badgeTop ? '' : offset,\n    left: props.badgeStart ? offset : '',\n    right: props.badgeStart ? '' : offset,\n  }\n})\n\nconst textFontStyle = computed<StyleValue>(() => {\n  const fontSize =\n    SIZES.indexOf((computedSize.value as string | undefined) || null) === -1\n      ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n      : null\n  return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n  const overlapScale = parentData?.overlapScale?.value || 0\n\n  const value =\n    computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n  return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.button ? 'button' : 'span'))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  ...marginStyle.value,\n  width: computedSize.value ?? undefined,\n  height: computedSize.value ?? undefined,\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n  if (!props.disabled && (computedLink.value || props.button)) emit('click', e)\n}\n\nconst onImgError = (e: Readonly<Event>) => {\n  emit('img-error', e)\n}\n</script>\n","<template>\n  <component :is=\"tag\" class=\"b-avatar-group\" role=\"group\">\n    <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n      <slot />\n    </div>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {BAvatarGroupProps} from '../../types'\nimport {avatarGroupInjectionKey} from '../../utils'\nimport {useNumberishToStyle} from '../../composables'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BAvatarGroupProps>(), {\n  overlap: 0.3,\n  size: undefined,\n  square: false,\n  tag: 'div',\n  // RadiusElementExtendables props\n  rounded: false,\n  roundedBottom: undefined,\n  roundedEnd: undefined,\n  roundedStart: undefined,\n  roundedTop: undefined,\n  // End RadiusElementExtendables props\n  // ColorExtendables props\n  bgVariant: null,\n  textVariant: null,\n  variant: null,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = useNumberishToStyle(() => props.size)\nconst overlapScale = toRef(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n  const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n  return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n  overlapScale,\n  size: toRef(() => props.size),\n  square: toRef(() => props.square),\n  rounded: toRef(() => props.rounded),\n  roundedTop: toRef(() => props.roundedTop),\n  roundedBottom: toRef(() => props.roundedBottom),\n  roundedStart: toRef(() => props.roundedStart),\n  roundedEnd: toRef(() => props.roundedEnd),\n  variant: toRef(() => props.variant),\n  bgVariant: toRef(() => props.bgVariant),\n  textVariant: toRef(() => props.textVariant),\n})\n</script>\n","<template>\n  <component :is=\"computedTag\" class=\"badge\" :class=\"computedClasses\" v-bind=\"computedLinkProps\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useBLinkHelper, useColorVariantClasses} from '../../composables'\nimport {computed, toRef} from 'vue'\nimport type {BBadgeProps} from '../../types'\nimport BLink from '../BLink/BLink.vue'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BBadgeProps>(), {\n  dotIndicator: false,\n  pill: false,\n  tag: 'span',\n  textIndicator: false,\n  // Link props\n  variant: 'secondary',\n  // All others use defaults\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  // End link props\n  // ColorExtendables props\n  // Variant is here as well\n  textVariant: null,\n  bgVariant: null,\n  // End ColorExtendables props\n})\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n  'active',\n  'activeClass',\n  'append',\n  'disabled',\n  'href',\n  'rel',\n  'replace',\n  'routerComponentName',\n  'target',\n  'to',\n  'opacity',\n  'opacityHover',\n  'underlineVariant',\n  'underlineOffset',\n  'underlineOffsetHover',\n  'underlineOpacity',\n  'underlineOpacityHover',\n  'icon',\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.tag))\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    'active': props.active,\n    'disabled': props.disabled,\n    'rounded-pill': props.pill,\n    'position-absolute top-0 start-100 translate-middle': props.textIndicator || props.dotIndicator,\n    'p-2 border border-light rounded-circle': props.dotIndicator,\n    'text-decoration-none': computedLink.value,\n  },\n])\n</script>\n","<template>\n  <li class=\"breadcrumb-item\" :class=\"computedClasses\">\n    <component\n      :is=\"computedTag\"\n      :aria-current=\"computedAriaCurrent\"\n      v-bind=\"computedLinkProps\"\n      @click=\"clicked\"\n    >\n      <slot>\n        {{ text }}\n      </slot>\n    </component>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {pick} from '../../utils'\nimport {computed, toRef} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BBreadcrumbItemProps} from '../../types'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BBreadcrumbItemProps>(), {\n  ariaCurrent: 'location',\n  text: undefined,\n  // Link props\n  active: false, // Why is this active: false?\n  // All others use defaults\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  routerTag: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  variant: undefined,\n  // End link props\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst computedClasses = computed(() => ({\n  active: props.active,\n}))\n\nconst computedTag = toRef(() => (props.active ? 'span' : BLink))\n\nconst computedAriaCurrent = toRef(() => (props.active ? props.ariaCurrent : undefined))\n\nconst computedLinkProps = computed(() =>\n  computedTag.value !== 'span'\n    ? pick(props, [\n        'active',\n        'activeClass',\n        'append',\n        'disabled',\n        'href',\n        'rel',\n        'replace',\n        'routerComponentName',\n        'target',\n        'to',\n        'variant',\n        'opacity',\n        'opacityHover',\n        'underlineVariant',\n        'underlineOffset',\n        'underlineOffsetHover',\n        'underlineOpacity',\n        'underlineOpacityHover',\n        'icon',\n      ])\n    : {}\n)\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n  if (props.disabled || props.active) {\n    e.preventDefault()\n    e.stopImmediatePropagation()\n    return\n  }\n  if (!props.disabled) emit('click', e)\n}\n</script>\n","<template>\n  <nav aria-label=\"breadcrumb\">\n    <ol class=\"breadcrumb\">\n      <slot name=\"prepend\" />\n      <BBreadcrumbItem v-for=\"(item, i) in breadcrumbItemObjects\" :key=\"i\" v-bind=\"item\">\n        {{ item.text }}\n      </BBreadcrumbItem>\n      <slot />\n      <slot name=\"append\" />\n    </ol>\n  </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useBreadcrumb} from '../../composables'\nimport type {BBreadcrumbProps, BreadcrumbItem} from '../../types'\nimport BBreadcrumbItem from './BBreadcrumbItem.vue'\n\nconst props = withDefaults(defineProps<BBreadcrumbProps>(), {items: undefined})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  append?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  prepend?: (props: Record<string, never>) => any\n}>()\n\nconst breadcrumb = useBreadcrumb()\n\nconst breadcrumbItemObjects = computed<BreadcrumbItem[]>(() => {\n  const localItems = props.items || breadcrumb.items?.value || []\n  let activeDefined = false\n  const items = localItems.map((item, idx) => {\n    if (typeof item === 'string') {\n      item = {text: item}\n      if (idx < localItems.length - 1) item.href = '#'\n    }\n    if (item.active) activeDefined = true\n\n    // Auto-detect active by position in list\n    if (!item.active && !activeDefined) {\n      item.active = idx + 1 === localItems.length\n    }\n    return item\n  })\n  return items\n})\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"ariaLabel\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BButtonGroupProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BButtonGroupProps>(), {\n  ariaLabel: 'Group',\n  size: 'md',\n  tag: 'div',\n  vertical: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  'btn-group': !props.vertical,\n  [`btn-group-${props.size}`]: props.size !== 'md',\n  'btn-group-vertical': props.vertical,\n}))\n</script>\n","<template>\n  <div :class=\"computedClasses\" class=\"btn-toolbar\" :role=\"role\" :aria-label=\"ariaLabel\">\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BButtonToolbarProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BButtonToolbarProps>(), {\n  ariaLabel: 'Group',\n  justify: false,\n  role: 'toolbar',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  'justify-content-between': props.justify,\n}))\n</script>\n","<template>\n  <img\n    :class=\"computedClasses\"\n    :src=\"!props.blank ? src : computedBlankImgSrc\"\n    :width=\"computedDimentions.width || undefined\"\n    :height=\"computedDimentions.height || undefined\"\n    :srcset=\"!props.blank ? computedSrcset : undefined\"\n    :sizes=\"!props.blank ? computedSizes : undefined\"\n    :loading=\"props.lazy ? 'lazy' : 'eager'\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BImgProps} from '../types'\nimport {useRadiusElementClasses} from '../composables'\nimport {computed, toRef} from 'vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BImgProps>(), {\n  blank: false,\n  blankColor: 'transparent',\n  block: false,\n  center: false,\n  end: false,\n  fluid: false,\n  fluidGrow: false,\n  height: undefined,\n  lazy: false,\n  sizes: undefined,\n  src: undefined,\n  srcset: undefined,\n  start: false,\n  thumbnail: false,\n  width: undefined,\n  // RadiusElementExtendables props\n  rounded: false,\n  roundedBottom: undefined,\n  roundedEnd: undefined,\n  roundedStart: undefined,\n  roundedTop: undefined,\n  // End RadiusElementExtendables props\n})\n\nconst heightNumber = useToNumber(() => props.height ?? NaN)\nconst widthNumber = useToNumber(() => props.width ?? NaN)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n  rounded: props.rounded,\n  roundedTop: props.roundedTop,\n  roundedBottom: props.roundedBottom,\n  roundedStart: props.roundedStart,\n  roundedEnd: props.roundedEnd,\n}))\n\nconst computedSrcset = computed(() =>\n  typeof props.srcset === 'string'\n    ? props.srcset\n        .split(',')\n        .filter((x) => x)\n        .join(',')\n    : Array.isArray(props.srcset)\n      ? props.srcset.filter((x) => x).join(',')\n      : undefined\n)\n\nconst computedSizes = computed(() =>\n  typeof props.sizes === 'string'\n    ? props.sizes\n        .split(',')\n        .filter((x) => x)\n        .join(',')\n    : Array.isArray(props.sizes)\n      ? props.sizes.filter((x) => x).join(',')\n      : undefined\n)\n\nconst computedDimentions = computed<{height: number | undefined; width: number | undefined}>(() => {\n  const width = Number.isNaN(widthNumber.value) ? undefined : widthNumber.value\n  const height = Number.isNaN(heightNumber.value) ? undefined : heightNumber.value\n  if (props.blank) {\n    if (width !== undefined && height === undefined) {\n      return {height: width, width}\n    }\n    if (width === undefined && height !== undefined) {\n      return {height, width: height}\n    }\n    return {height: 1, width: 1}\n  }\n  return {\n    width,\n    height,\n  }\n})\n\nconst computedBlankImgSrc = toRef(() =>\n  makeBlankImgSrc(computedDimentions.value.width, computedDimentions.value.height, props.blankColor)\n)\n\nconst alignment = toRef(() =>\n  props.start ? 'float-start' : props.end ? 'float-end' : props.center ? 'mx-auto' : undefined\n)\n\nconst computedClasses = computed(() => [\n  radiusElementClasses.value,\n  {\n    'img-thumbnail': props.thumbnail,\n    'img-fluid': props.fluid || props.fluidGrow,\n    'w-100': props.fluidGrow,\n    [`${alignment.value}`]: alignment.value !== undefined,\n    'd-block': props.block || props.center,\n  },\n])\n\nconst makeBlankImgSrc = (width: number | undefined, height: number | undefined, color: string) =>\n  `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"none\">\n    <rect width=\"100%\" height=\"100%\" style=\"fill:${color};\"></rect>\n    </svg>`)}`\n</script>\n","<template>\n  <BImg v-bind=\"computedImgProps\" :class=\"baseClass\" />\n</template>\n\n<script setup lang=\"ts\">\nimport BImg from '../BImg.vue'\nimport type {BCardImageProps} from '../../types'\nimport {omit} from '../../utils'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(defineProps<BCardImageProps>(), {\n  bottom: false,\n  top: false,\n  // BImg props\n  blank: undefined,\n  blankColor: undefined,\n  block: undefined,\n  center: undefined,\n  end: undefined,\n  fluid: undefined,\n  fluidGrow: undefined,\n  height: undefined,\n  lazy: undefined,\n  rounded: undefined,\n  roundedBottom: undefined,\n  roundedEnd: undefined,\n  roundedStart: undefined,\n  roundedTop: undefined,\n  sizes: undefined,\n  src: undefined,\n  srcset: undefined,\n  start: undefined,\n  thumbnail: undefined,\n  width: undefined,\n  // End BImg props\n})\n\nconst baseClass = toRef(() =>\n  props.top\n    ? 'card-img-top'\n    : props.end\n      ? 'card-img-right'\n      : props.bottom\n        ? 'card-img-bottom'\n        : props.start\n          ? 'card-img-left'\n          : 'card-img'\n)\n\nconst computedImgProps = computed(() => omit(props, ['bottom', 'top', 'end', 'start']))\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\">\n    <!-- eslint-disable-next-line vue/no-v-html -->\n    <div v-if=\"!!html\" v-html=\"html\" />\n    <slot v-else>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport type {BCardHeadFootProps} from '../../types'\nimport {useColorVariantClasses} from '../../composables'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n  borderVariant: null,\n  html: undefined,\n  tag: 'div',\n  text: undefined,\n  // ColorExtendables props\n  bgVariant: null,\n  textVariant: null,\n  variant: null,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    [`border-${props.borderVariant}`]: props.borderVariant !== null,\n  },\n])\n</script>\n","<template>\n  <BCardHeadFoot class=\"card-header\" v-bind=\"props\">\n    <slot />\n  </BCardHeadFoot>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardHeadFootProps} from '../../types'\nimport BCardHeadFoot from './BCardHeadFoot.vue'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n  borderVariant: undefined,\n  html: undefined,\n  tag: 'div',\n  text: undefined,\n  // ColorExtendables props\n  bgVariant: undefined,\n  textVariant: undefined,\n  variant: undefined,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <component :is=\"tag\" class=\"card-subtitle mb-2\" :class=\"computedClasses\">\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardSubtitleProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BCardSubtitleProps>(), {\n  tag: 'h6',\n  text: undefined,\n  textVariant: 'body-secondary',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`text-${props.textVariant}`]: props.textVariant !== null,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" class=\"card-body\" :class=\"computedClasses\">\n    <BCardTitle v-if=\"!!title || hasTitleSlot\" :tag=\"titleTag\">\n      <slot name=\"title\">\n        {{ title }}\n      </slot>\n    </BCardTitle>\n\n    <BCardSubtitle\n      v-if=\"!!subtitle || hasSubtitleSlot\"\n      :tag=\"subtitleTag\"\n      :text-variant=\"subtitleTextVariant\"\n    >\n      <slot name=\"subtitle\">\n        {{ subtitle }}\n      </slot>\n    </BCardSubtitle>\n\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport BCardTitle from './BCardTitle.vue'\nimport {isEmptySlot} from '../../utils'\nimport BCardSubtitle from './BCardSubtitle.vue'\nimport type {BCardBodyProps} from '../../types'\nimport {useColorVariantClasses} from '../../composables'\n\nconst props = withDefaults(defineProps<BCardBodyProps>(), {\n  overlay: false,\n  subtitle: undefined,\n  subtitleTag: 'h4',\n  subtitleTextVariant: undefined,\n  tag: 'div',\n  text: undefined,\n  title: undefined,\n  titleTag: 'h4',\n  // ColorExtendables props\n  bgVariant: null,\n  textVariant: null,\n  variant: null,\n  // End ColorExtendables props\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  subtitle?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst hasTitleSlot = toRef(() => !isEmptySlot(slots.title))\nconst hasSubtitleSlot = toRef(() => !isEmptySlot(slots.subtitle))\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    'card-img-overlay': props.overlay,\n  },\n])\n</script>\n","<template>\n  <BCardHeadFoot class=\"card-footer\" v-bind=\"props\">\n    <slot>\n      {{ text }}\n    </slot>\n  </BCardHeadFoot>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardHeadFootProps} from '../../types'\nimport BCardHeadFoot from './BCardHeadFoot.vue'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n  borderVariant: undefined,\n  html: undefined,\n  tag: 'div',\n  text: undefined,\n  // ColorExtendables props\n  bgVariant: undefined,\n  textVariant: undefined,\n  variant: undefined,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <component :is=\"tag\" class=\"card\" :class=\"computedClasses\">\n    <ReusableImg.define>\n      <slot name=\"img\">\n        <BCardImg v-if=\"imgSrc\" v-bind=\"imgAttr\" />\n      </slot>\n    </ReusableImg.define>\n\n    <ReusableImg.reuse v-if=\"!props.imgBottom\" />\n    <BCardHeader\n      v-if=\"header || hasHeaderSlot || headerHtml\"\n      :bg-variant=\"headerBgVariant\"\n      :variant=\"headerVariant\"\n      :border-variant=\"headerBorderVariant\"\n      :html=\"headerHtml\"\n      :tag=\"headerTag\"\n      :text-variant=\"headerTextVariant\"\n      :class=\"headerClass\"\n    >\n      <slot name=\"header\">\n        {{ header }}\n      </slot>\n    </BCardHeader>\n    <BCardBody\n      v-if=\"!props.noBody\"\n      :overlay=\"overlay\"\n      :bg-variant=\"bodyBgVariant\"\n      :tag=\"bodyTag\"\n      :text-variant=\"bodyTextVariant\"\n      :subtitle=\"subtitle\"\n      :subtitle-tag=\"subtitleTag\"\n      :subtitle-text-variant=\"subtitleTextVariant\"\n      :title=\"title\"\n      :title-tag=\"titleTag\"\n      :class=\"bodyClass\"\n    >\n      <slot>\n        {{ bodyText }}\n      </slot>\n    </BCardBody>\n    <slot v-else>\n      {{ bodyText }}\n    </slot>\n    <BCardFooter\n      v-if=\"footer || hasFooterSlot || footerHtml\"\n      :bg-variant=\"footerBgVariant\"\n      :border-variant=\"footerBorderVariant\"\n      :variant=\"footerVariant\"\n      :html=\"footerHtml\"\n      :tag=\"footerTag\"\n      :text-variant=\"footerTextVariant\"\n      :class=\"footerClass\"\n    >\n      <slot name=\"footer\">\n        {{ footer }}\n      </slot>\n    </BCardFooter>\n    <ReusableImg.reuse v-if=\"props.imgBottom\" />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardProps} from '../../types'\nimport {isEmptySlot} from '../../utils'\nimport {computed, toRef} from 'vue'\nimport {useColorVariantClasses} from '../../composables'\nimport BCardImg from './BCardImg.vue'\nimport BCardHeader from './BCardHeader.vue'\nimport BCardBody from './BCardBody.vue'\nimport BCardFooter from './BCardFooter.vue'\nimport {createReusableTemplate} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BCardProps>(), {\n  align: undefined,\n  bodyBgVariant: undefined,\n  bodyClass: undefined,\n  bodyTag: 'div',\n  bodyText: '',\n  bodyTextVariant: undefined,\n  borderVariant: null,\n  footer: undefined,\n  footerBgVariant: undefined,\n  footerBorderVariant: undefined,\n  footerClass: undefined,\n  footerHtml: '',\n  footerTag: 'div',\n  footerTextVariant: undefined,\n  footerVariant: null,\n  header: undefined,\n  headerBgVariant: undefined,\n  headerBorderVariant: undefined,\n  headerClass: undefined,\n  headerHtml: '',\n  headerTag: 'div',\n  headerTextVariant: undefined,\n  headerVariant: null,\n  imgAlt: undefined,\n  imgBottom: false,\n  imgEnd: false,\n  imgHeight: undefined,\n  imgSrc: undefined,\n  imgStart: false,\n  imgTop: false,\n  imgWidth: undefined,\n  noBody: false,\n  overlay: false,\n  subtitle: undefined,\n  subtitleTag: 'h6',\n  subtitleTextVariant: 'body-secondary',\n  tag: 'div',\n  title: undefined,\n  titleTag: 'h4',\n  // ColorExtendables props\n  bgVariant: null,\n  textVariant: null,\n  variant: null,\n  // End ColorExtendables props\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  footer?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  img?: (props: Record<string, never>) => any\n}>()\n\nconst hasHeaderSlot = toRef(() => !isEmptySlot(slots.header))\nconst hasFooterSlot = toRef(() => !isEmptySlot(slots.footer))\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    [`text-${props.align}`]: props.align !== undefined,\n    [`border-${props.borderVariant}`]: props.borderVariant !== null,\n    'flex-row': props.imgStart,\n    'flex-row-reverse': props.imgEnd,\n  },\n])\n\nconst imgAttr = computed(() => ({\n  src: props.imgSrc,\n  alt: props.imgAlt,\n  height: props.imgHeight,\n  width: props.imgWidth,\n  bottom: props.imgBottom,\n  end: props.imgEnd,\n  start: props.imgStart,\n  top: props.imgTop,\n}))\n\nconst ReusableImg = createReusableTemplate()\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"cardTypeClass\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardGroupProps} from '../../types'\nimport {toRef} from 'vue'\n\nconst props = withDefaults(defineProps<BCardGroupProps>(), {\n  columns: false,\n  deck: false,\n  tag: 'div',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst cardTypeClass = toRef(() =>\n  props.deck ? 'card-deck' : props.columns ? 'card-columns' : 'card-group'\n)\n</script>\n","<template>\n  <div :id=\"computedId\" ref=\"element\" class=\"carousel slide pointer-event\" :class=\"computedClasses\">\n    <div v-if=\"props.indicators\" class=\"carousel-indicators\">\n      <!-- :data-bs-target=\"`#${computedId}`\" is required since the classes target elems with that attr -->\n      <button\n        v-for=\"(_, i) in slides.length\"\n        :key=\"i\"\n        type=\"button\"\n        data-bs-target=\"\"\n        :class=\"i === modelValue ? 'active' : ''\"\n        :aria-current=\"i === modelValue ? true : undefined\"\n        :aria-label=\"`${indicatorsButtonLabel} ${i}`\"\n        @click=\"goToValue(i)\"\n      />\n    </div>\n\n    <div ref=\"relatedTarget\" class=\"carousel-inner\">\n      <TransitionGroup\n        :enter-from-class=\"enterClasses\"\n        :enter-active-class=\"enterClasses\"\n        :enter-to-class=\"enterClasses\"\n        :leave-from-class=\"leaveClasses\"\n        :leave-active-class=\"leaveClasses\"\n        :leave-to-class=\"leaveClasses\"\n        @before-leave=\"onBeforeLeave\"\n        @after-leave=\"onAfterLeave\"\n        @after-enter=\"onAfterEnter\"\n      >\n        <component\n          :is=\"slide\"\n          v-for=\"(slide, i) in slides\"\n          v-show=\"i === modelValue\"\n          :key=\"i\"\n          :class=\"{active: i === modelValue && isTransitioning === false}\"\n        />\n      </TransitionGroup>\n    </div>\n\n    <template v-if=\"props.controls\">\n      <button class=\"carousel-control-prev\" type=\"button\" @click=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ controlsPrevText }}</span>\n      </button>\n      <button class=\"carousel-control-next\" type=\"button\" @click=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ controlsNextText }}</span>\n      </button>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvCarouselEvent, carouselInjectionKey, getSlotElements} from '../../utils'\nimport {computed, provide, ref, toRef, watch} from 'vue'\nimport {useId} from '../../composables'\nimport type {BCarouselProps} from '../../types'\nimport {onKeyStroke, useElementHover, useIntervalFn, useSwipe, useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BCarouselProps>(), {\n  background: undefined,\n  controls: false,\n  controlsNextText: 'Next',\n  controlsPrevText: 'Previous',\n  fade: false,\n  id: undefined,\n  imgHeight: undefined,\n  imgWidth: undefined,\n  indicators: false,\n  indicatorsButtonLabel: 'Slide',\n  interval: 5000,\n  keyboard: true,\n  noHoverPause: false,\n  noTouch: false,\n  noWrap: false,\n  // eslint-disable-next-line vue/require-valid-default-prop\n  ride: false,\n  rideReverse: false,\n  touchThreshold: 50,\n})\n\nconst emit = defineEmits<{\n  slide: [value: BvCarouselEvent]\n  slid: [value: BvCarouselEvent]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'carousel')\n\nconst modelValue = defineModel<number>({default: 0})\n\nconst touchThresholdNumber = useToNumber(() => props.touchThreshold)\nconst intervalNumber = useToNumber(() => props.interval)\n\nconst isTransitioning = ref(false)\nconst rideStarted = ref(false)\nconst direction = ref(true)\nconst relatedTarget = ref<HTMLElement | null>(null)\nconst element = ref<HTMLElement | null>(null)\nconst previousModelValue = ref(modelValue.value)\n\nconst isHovering = useElementHover(element)\n\n// Class carousel-item is a static property\n// If you make it static, the direction can be reversed -- properly (atm it does the carousel-item-${} logic backwards for entering, a weird hack)\n// So all that would be great. However, when you do this, it will break the transition flow. Something about it breaks and I'm not sure why!\n// Try it by removing carousel-item from below and making `!direction.value` => `direction.value` for enter\n// Then reviewing the behavior\nconst enterClasses = toRef(\n  () =>\n    `carousel-item carousel-item-${!direction.value ? 'next' : 'prev'} carousel-item-${\n      !direction.value ? 'start' : 'end'\n    }`\n)\nconst leaveClasses = toRef(\n  () => `carousel-item active carousel-item-${direction.value ? 'start' : 'end'}`\n)\n\nconst {pause, resume} = useIntervalFn(\n  () => {\n    props.rideReverse ? prev() : next()\n  },\n  intervalNumber,\n  {immediate: props.ride === 'carousel'}\n)\n\nconst isRiding = toRef(\n  () => (props.ride === true && rideStarted.value === true) || props.ride === 'carousel'\n)\nconst slides = computed(() => getSlotElements(slots.default, 'BCarouselSlide'))\nconst computedClasses = computed(() => ({'carousel-fade': props.fade}))\n// TODO a general idea of showing only slides that are in bounds\n// const localValue = computed(() =>\n//   props.modelValue >= slides.value.length\n//     ? slides.value.length - 1\n//     : props.modelValue < 0\n//     ? 0\n//     : props.modelValue\n// )\n\nconst buildBvCarouselEvent = (event: 'slid' | 'slide') =>\n  new BvCarouselEvent(event, {\n    componentId: computedId.value,\n    cancelable: false,\n    target: element.value,\n    direction: direction.value ? 'right' : 'left',\n    from: previousModelValue.value,\n    to: modelValue.value,\n    relatedTarget: relatedTarget.value?.children[modelValue.value] ?? null,\n  })\n\nconst goToValue = (value: number): void => {\n  if (isTransitioning.value === true) return\n\n  if (props.ride === true) {\n    rideStarted.value = true\n  }\n  if (isRiding.value === true) {\n    resume()\n  }\n  direction.value = value < modelValue.value ? false : true\n  if (value >= slides.value.length) {\n    if (props.noWrap) return\n    modelValue.value = 0\n    return\n  }\n  if (value < 0) {\n    if (props.noWrap) return\n    modelValue.value = slides.value.length - 1\n    return\n  }\n  previousModelValue.value = modelValue.value\n  modelValue.value = value\n}\n\nconst prev = (): void => {\n  goToValue(modelValue.value - 1)\n}\nconst next = (): void => {\n  goToValue(modelValue.value + 1)\n}\n\nconst onKeydown = (fn: () => void) => {\n  if (props.keyboard === false) return\n  fn()\n}\n\nconst onMouseEnter = () => {\n  if (props.noHoverPause) return\n  pause()\n}\nconst onMouseLeave = () => {\n  if (!isRiding.value) return\n  resume()\n}\n\nconst {lengthX} = useSwipe(element, {\n  passive: true,\n  onSwipeStart() {\n    if (props.noTouch === true) return\n    pause()\n  },\n  onSwipeEnd() {\n    if (props.noTouch === true) return\n    const resumeRiding = () => {\n      if (isRiding.value === false) return\n      resume()\n    }\n    if (lengthX.value >= touchThresholdNumber.value) {\n      next()\n      resumeRiding()\n      return\n    }\n    if (lengthX.value <= -touchThresholdNumber.value) {\n      prev()\n      resumeRiding()\n    }\n  },\n})\n\nconst onBeforeLeave = () => {\n  emit('slide', buildBvCarouselEvent('slide'))\n  isTransitioning.value = true\n}\nconst onAfterLeave = () => {\n  emit('slid', buildBvCarouselEvent('slid'))\n  isTransitioning.value = false\n}\n// carousel-item class is removed from the slide during the transition,\n// as is included within enter classes.\n// The first slide recovers carousel-item class,\nconst onAfterEnter = (el: Readonly<Element>) => {\n  if (modelValue.value !== 0) {\n    el.classList.add('carousel-item')\n  }\n}\n\nonKeyStroke(\n  'ArrowLeft',\n  () => {\n    onKeydown(prev)\n  },\n  {target: element}\n)\nonKeyStroke(\n  'ArrowRight',\n  () => {\n    onKeydown(next)\n  },\n  {target: element}\n)\n\nwatch(\n  () => props.ride,\n  () => {\n    rideStarted.value = false\n  }\n)\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  onMouseLeave()\n})\n\ndefineExpose({\n  next,\n  pause,\n  prev,\n  resume,\n})\n\nprovide(carouselInjectionKey, {\n  background: toRef(() => props.background),\n  width: toRef(() => props.imgWidth),\n  height: toRef(() => props.imgHeight),\n})\n</script>\n","<template>\n  <div class=\"carousel-item\" :style=\"computedStyle\">\n    <slot name=\"img\">\n      <BImg\n        class=\"d-block w-100\"\n        :alt=\"imgAlt\"\n        :srcset=\"imgSrcset\"\n        :src=\"imgSrc\"\n        :width=\"imgWidth || parentData?.width.value\"\n        :height=\"imgHeight || parentData?.height.value\"\n        :blank=\"imgBlank\"\n        :blank-color=\"imgBlankColor\"\n      />\n    </slot>\n    <component\n      :is=\"contentTag\"\n      v-if=\"hasContent\"\n      class=\"carousel-caption\"\n      :class=\"computedContentClasses\"\n    >\n      <component :is=\"captionTag\" v-if=\"hasCaption\">\n        <slot name=\"caption\">\n          <!-- eslint-disable-next-line vue/no-v-html -->\n          <span v-if=\"captionHtml\" v-html=\"captionHtml\" />\n          <span v-else>{{ caption }}</span>\n        </slot>\n      </component>\n      <component :is=\"textTag\" v-if=\"hasText\">\n        <slot name=\"text\">\n          <!-- eslint-disable-next-line vue/no-v-html -->\n          <span v-if=\"textHtml\" v-html=\"textHtml\" />\n          <span v-else>{{ text }}</span>\n        </slot>\n      </component>\n      <slot />\n    </component>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, inject, toRef} from 'vue'\nimport type {BCarouselSlideProps} from '../../types'\nimport {carouselInjectionKey, isEmptySlot} from '../../utils'\nimport BImg from '../BImg.vue'\n\n// TODO interval is unused\n// Need to add https://getbootstrap.com/docs/5.3/components/carousel/#individual-carousel-item-interval\n// Perhaps a provide/inject with next/prev values where the component can call those would work.\n\nconst props = withDefaults(defineProps<BCarouselSlideProps>(), {\n  background: undefined,\n  caption: undefined,\n  captionHtml: undefined,\n  captionTag: 'h3',\n  contentTag: 'div',\n  contentVisibleUp: undefined,\n  id: undefined,\n  imgAlt: undefined,\n  imgBlank: false,\n  imgBlankColor: 'transparent',\n  imgHeight: undefined,\n  imgSrc: undefined,\n  imgSrcset: undefined,\n  imgWidth: undefined,\n  interval: undefined,\n  text: undefined,\n  textHtml: undefined,\n  textTag: 'p',\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  caption?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  img?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  text?: (props: Record<string, never>) => any\n}>()\n\nconst parentData = inject(carouselInjectionKey, null)\n\nconst hasText = toRef(() => props.text || props.textHtml || !isEmptySlot(slots.text))\nconst hasCaption = toRef(() => props.caption || props.captionHtml || !isEmptySlot(slots.caption))\nconst hasContent = toRef(() => hasText.value || hasCaption.value || !isEmptySlot(slots.default))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  background: `${\n    props.background || parentData?.background.value || 'rgb(171, 171, 171)'\n  } none repeat scroll 0% 0%`,\n}))\n\nconst computedContentClasses = computed(() => ({\n  'd-none': props.contentVisibleUp !== undefined,\n  [`d-${props.contentVisibleUp}-block`]: props.contentVisibleUp !== undefined,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script lang=\"ts\">\nimport {computed, defineComponent, type PropType, type SlotsType} from 'vue'\nimport type {AlignmentVertical} from '../types'\nimport {getBreakpointProps, getClasses} from '../utils'\n\nconst breakpointCol = getBreakpointProps('', [], {type: [Boolean, String, Number], default: false})\nconst breakpointOffset = getBreakpointProps('offset', [''], {type: [String, Number], default: null})\nconst breakpointOrder = getBreakpointProps('order', [''], {type: [String, Number], default: null})\n\nexport default defineComponent({\n  name: 'BCol',\n  slots: Object as SlotsType<{\n    default?: Record<string, never>\n  }>,\n  props: {\n    col: {type: Boolean, default: false}, // Generic flexbox .col (xs)\n    cols: {type: [String, Number], default: null}, // .col-[1-12]|auto (xs)\n    ...breakpointCol,\n    offset: {type: [String, Number], default: null},\n    ...breakpointOffset,\n    order: {type: [String, Number], default: null},\n    ...breakpointOrder,\n    alignSelf: {type: String as PropType<AlignmentVertical | 'auto'>, default: null},\n    tag: {type: String, default: 'div'},\n  },\n  setup(props) {\n    const properties = [\n      {content: breakpointCol, propPrefix: 'cols', classPrefix: 'col'},\n      {content: breakpointOffset, propPrefix: 'offset'},\n      {content: breakpointOrder, propPrefix: 'order'},\n    ]\n\n    const classList = computed(() =>\n      properties.flatMap((el) => getClasses(props, el.content, el.propPrefix, el.classPrefix))\n    )\n\n    const computedClasses = computed(() => [\n      classList.value,\n      {\n        col: props.col || (!classList.value.some((e) => /^col-/.test(e)) && !props.cols),\n        [`col-${props.cols}`]: !!props.cols,\n        [`offset-${props.offset}`]: !!props.offset,\n        [`order-${props.order}`]: !!props.order,\n        [`align-self-${props.alignSelf}`]: !!props.alignSelf,\n      },\n    ])\n\n    return {\n      computedClasses,\n    }\n  },\n})\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BContainerProps} from '../types'\nimport {computed} from 'vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BContainerProps>(), {\n  fluid: false,\n  gutterX: undefined,\n  gutterY: undefined,\n  tag: 'div',\n})\n\nconst gutterXToNumber = useToNumber(() => props.gutterX ?? NaN, {method: 'parseInt'})\nconst gutterYToNumber = useToNumber(() => props.gutterY ?? NaN, {method: 'parseInt'})\n\nconst computedClasses = computed(() => ({\n  container: props.fluid === false,\n  [`container-fluid`]: props.fluid === true,\n  [`container-${props.fluid}`]: typeof props.fluid === 'string',\n  [`gx-${gutterXToNumber.value}`]: !Number.isNaN(gutterXToNumber.value),\n  [`gy-${gutterYToNumber.value}`]: !Number.isNaN(gutterYToNumber.value),\n}))\n</script>\n","<template>\n  <div ref=\"wrapper\" :class=\"computedClasses\" class=\"btn-group\">\n    <BButton\n      :id=\"computedId\"\n      ref=\"splitButton\"\n      :variant=\"splitVariant || variant\"\n      :size=\"size\"\n      :class=\"buttonClasses\"\n      :disabled=\"props.splitDisabled || disabled\"\n      :type=\"splitButtonType\"\n      :aria-label=\"ariaLabel\"\n      :aria-expanded=\"props.split ? undefined : modelValue\"\n      :aria-haspopup=\"props.split ? undefined : 'menu'\"\n      :href=\"props.split ? splitHref : undefined\"\n      :to=\"props.split && splitTo ? splitTo : undefined\"\n      @click=\"onSplitClick\"\n    >\n      <slot name=\"button-content\">\n        {{ text }}\n      </slot>\n    </BButton>\n    <BButton\n      v-if=\"props.split\"\n      ref=\"button\"\n      :variant=\"variant\"\n      :size=\"size\"\n      :disabled=\"disabled\"\n      :class=\"[toggleClass, {show: modelValue}]\"\n      class=\"dropdown-toggle-split dropdown-toggle\"\n      :aria-expanded=\"modelValue\"\n      aria-haspopup=\"menu\"\n      @click=\"onButtonClick\"\n    >\n      <span class=\"visually-hidden\">\n        <slot name=\"toggle-text\">\n          {{ toggleText }}\n        </slot>\n      </span>\n    </BButton>\n    <Teleport :to=\"teleportTo\" :disabled=\"!teleportTo || teleportDisabled\">\n      <ul\n        v-if=\"!props.lazy || modelValue\"\n        v-show=\"props.lazy || modelValue\"\n        ref=\"floating\"\n        :style=\"[floatingStyles, sizeStyles]\"\n        class=\"dropdown-menu overflow-auto\"\n        :class=\"[menuClass, {show: modelValue}]\"\n        :aria-labelledby=\"computedId\"\n        :role=\"role\"\n        @click=\"onClickInside\"\n      >\n        <slot :hide=\"hide\" :show=\"show\" />\n      </ul>\n    </Teleport>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  autoUpdate,\n  type Boundary,\n  flip,\n  type Middleware,\n  offset as offsetMiddleware,\n  type RootBoundary,\n  shift,\n  size as sizeMiddleware,\n  useFloating,\n} from '@floating-ui/vue'\nimport {onClickOutside, onKeyStroke, useToNumber} from '@vueuse/core'\nimport {computed, type CSSProperties, nextTick, provide, ref, toRef, watch} from 'vue'\nimport {useId} from '../../composables'\nimport type {BDropdownProps} from '../../types'\nimport {BvTriggerableEvent, dropdownInjectionKey, resolveFloatingPlacement} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\n\n// TODO add navigation through keyboard events\n// TODO standardize keydown vs keyup events globally\n\nconst props = withDefaults(defineProps<BDropdownProps>(), {\n  ariaLabel: undefined,\n  autoClose: true,\n  boundary: 'clippingAncestors',\n  boundaryPadding: undefined,\n  center: false,\n  teleportTo: undefined,\n  teleportDisabled: false,\n  disabled: false,\n  dropend: false,\n  dropstart: false,\n  dropup: false,\n  end: false,\n  floatingMiddleware: undefined,\n  id: undefined,\n  isNav: false,\n  lazy: false,\n  menuClass: undefined,\n  noCaret: false,\n  noFlip: false,\n  noShift: false,\n  noSize: false,\n  offset: 0,\n  role: 'menu',\n  size: 'md',\n  split: false,\n  splitButtonType: 'button',\n  splitClass: undefined,\n  splitDisabled: undefined,\n  splitHref: undefined,\n  splitTo: undefined,\n  splitVariant: undefined,\n  strategy: 'absolute',\n  text: undefined,\n  toggleClass: undefined,\n  toggleText: 'Toggle dropdown',\n  variant: 'secondary',\n})\n\nconst emit = defineEmits<{\n  'click': [event: MouseEvent]\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n  'toggle': []\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'button-content'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: {hide: () => void; show: () => void}) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'toggle-text'?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'dropdown')\n\nconst modelValue = defineModel<boolean>({default: false})\n\nconst computedOffset = toRef(() =>\n  typeof props.offset === 'string' || typeof props.offset === 'number' ? props.offset : NaN\n)\nconst offsetToNumber = useToNumber(computedOffset)\n\nconst floating = ref<HTMLElement | null>(null)\nconst button = ref<HTMLElement | null>(null)\nconst splitButton = ref<HTMLElement | null>(null)\nconst wrapper = ref<HTMLElement | null>(null)\n\nconst boundary = computed<Boundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? undefined : props.boundary\n)\nconst rootBoundary = computed<RootBoundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? props.boundary : undefined\n)\n\nconst referencePlacement = toRef(() => (!props.split ? splitButton.value : button.value))\n\nonKeyStroke(\n  'Escape',\n  () => {\n    modelValue.value = !modelValue.value\n  },\n  {target: referencePlacement}\n)\nonKeyStroke(\n  'Escape',\n  () => {\n    modelValue.value = !modelValue.value\n  },\n  {target: floating}\n)\n\nconst keynav = (e: Readonly<Event>, v: number) => {\n  if (floating.value?.contains((e.target as HTMLElement)?.closest('form'))) return\n  if (/input|select|option|textarea|form/i.test((e.target as HTMLElement)?.tagName)) return\n  e.preventDefault()\n  if (!modelValue.value) {\n    open()\n    nextTick(() => keynav(e, v))\n    return\n  }\n  const list = floating.value?.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)')\n  if (!list) return\n  if (floating.value?.contains(document.activeElement)) {\n    const active = floating.value.querySelector('.dropdown-item:focus')\n    const index = Array.prototype.indexOf.call(list, active) + v\n    if (index >= 0 && index < list?.length) (list[index] as HTMLElement)?.focus()\n  } else {\n    ;(list[v === -1 ? list.length - 1 : 0] as HTMLElement)?.focus()\n  }\n}\n\nonKeyStroke('ArrowUp', (e) => keynav(e, -1), {target: referencePlacement})\nonKeyStroke('ArrowDown', (e) => keynav(e, 1), {target: referencePlacement})\nonKeyStroke('ArrowUp', (e) => keynav(e, -1), {target: floating})\nonKeyStroke('ArrowDown', (e) => keynav(e, 1), {target: floating})\n\nconst floatingPlacement = computed(() =>\n  resolveFloatingPlacement({\n    top: props.dropup,\n    start: props.dropstart,\n    end: props.dropend,\n    alignCenter: props.center,\n    alignEnd: props.end,\n  })\n)\nconst sizeStyles = ref<CSSProperties>({})\nconst floatingMiddleware = computed<Middleware[]>(() => {\n  if (props.floatingMiddleware !== undefined) {\n    return props.floatingMiddleware\n  }\n  const localOffset =\n    typeof props.offset === 'string' || typeof props.offset === 'number'\n      ? offsetToNumber.value\n      : props.offset\n  const arr: Middleware[] = [offsetMiddleware(localOffset)]\n  if (props.noFlip === false) {\n    arr.push(\n      flip({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (props.noShift === false) {\n    arr.push(\n      shift({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (props.noSize === false) {\n    arr.push(\n      sizeMiddleware({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n        apply({availableWidth, availableHeight}) {\n          sizeStyles.value = {\n            maxHeight: availableHeight && modelValue.value ? `${availableHeight}px` : undefined,\n            maxWidth: availableWidth && modelValue.value ? `${availableWidth}px` : undefined,\n          }\n        },\n      })\n    )\n  }\n  return arr\n})\nconst {update, floatingStyles} = useFloating(referencePlacement, floating, {\n  placement: floatingPlacement,\n  middleware: floatingMiddleware,\n  strategy: toRef(() => props.strategy),\n  whileElementsMounted: autoUpdate,\n})\n\nconst computedClasses = computed(() => ({\n  'dropup': props.dropup,\n  'dropend': props.dropend,\n  'dropstart': props.dropstart,\n  'position-static': props.boundary !== 'clippingAncestors' && !props.isNav,\n}))\n\nconst buttonClasses = computed(() => [\n  props.split ? props.splitClass : props.toggleClass,\n  {\n    'nav-link': props.isNav,\n    'dropdown-toggle': !props.split,\n    'dropdown-toggle-no-caret': props.noCaret && !props.split,\n    'show': props.split ? undefined : modelValue.value,\n  },\n])\n\nconst onButtonClick = () => {\n  toggle()\n}\n\nconst onSplitClick = (event: Readonly<MouseEvent>) => {\n  props.split ? emit('click', event) : onButtonClick()\n}\n\nonClickOutside(\n  floating,\n  () => {\n    if (modelValue.value && (props.autoClose === true || props.autoClose === 'outside')) {\n      toggle()\n    }\n  },\n  {ignore: [button, splitButton]}\n)\nconst onClickInside = () => {\n  if (modelValue.value && (props.autoClose === true || props.autoClose === 'inside')) {\n    toggle()\n  }\n}\n\nconst hide = () => {\n  modelValue.value && toggle()\n}\nconst show = () => {\n  modelValue.value || toggle()\n}\nconst toggle = () => {\n  emit('toggle')\n  const currentModelValue = modelValue.value\n  const e = new BvTriggerableEvent(currentModelValue ? 'hide' : 'show')\n  currentModelValue ? emit('hide', e) : emit('show', e)\n  if (e.defaultPrevented) {\n    currentModelValue ? emit('hide-prevented') : emit('show-prevented')\n    return\n  }\n  modelValue.value = !currentModelValue\n  currentModelValue ? emit('hidden') : emit('shown')\n  wrapper.value?.dispatchEvent(new Event('forceHide'))\n}\n\nwatch(modelValue, () => {\n  update()\n})\n\ndefineExpose({\n  hide,\n  show,\n  toggle,\n})\n\nprovide(dropdownInjectionKey, {\n  id: computedId,\n  show,\n  hide,\n  toggle,\n  visible: toRef(() => modelValue.value),\n  isNav: toRef(() => props.isNav),\n})\n</script>\n","<template>\n  <li role=\"presentation\">\n    <component\n      :is=\"headerTag\"\n      :id=\"headerId\"\n      class=\"dropdown-header\"\n      :class=\"computedClasses\"\n      :role=\"headerRole\"\n    >\n      <slot name=\"header\">\n        {{ header }}\n      </slot>\n    </component>\n    <ul\n      :id=\"id\"\n      role=\"group\"\n      class=\"list-unstyled\"\n      v-bind=\"$attrs\"\n      :aria-describedby=\"ariaDescribedby || headerId\"\n    >\n      <slot />\n    </ul>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BDropdownGroupProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BDropdownGroupProps>(), {\n  ariaDescribedby: undefined,\n  header: undefined,\n  headerClass: undefined,\n  headerTag: 'header',\n  headerVariant: null,\n  id: undefined,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: Record<string, never>) => any\n}>()\n\nconst headerId = toRef(() => (props.id ? `${props.id}_group_dd_header` : undefined))\nconst headerRole = toRef(() => (props.headerTag === 'header' ? undefined : 'heading'))\n\nconst computedClasses = computed(() => [\n  props.headerClass,\n  {\n    [`text-${props.headerVariant}`]: props.headerVariant !== null,\n  },\n])\n</script>\n","<template>\n  <li role=\"presentation\" :class=\"wrapperClass\" v-bind=\"wrapperAttrs\">\n    <component\n      :is=\"computedTag\"\n      class=\"dropdown-item\"\n      :class=\"computedClasses\"\n      :disabled=\"props.disabled\"\n      :aria-disabled=\"props.disabled ? true : null\"\n      :aria-current=\"props.active ? true : null\"\n      :href=\"computedTag === 'a' ? href : null\"\n      :rel=\"rel\"\n      role=\"menuitem\"\n      :type=\"computedTag === 'button' ? 'button' : null\"\n      :target=\"target\"\n      v-bind=\"{...computedLinkProps, ...attrs}\"\n      @click=\"clicked\"\n    >\n      <slot />\n    </component>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport BLink from '../BLink/BLink.vue'\nimport {computed, inject, toRef, useAttrs} from 'vue'\nimport type {BDropdownItemProps} from '../../types'\nimport {useBLinkHelper} from '../../composables'\nimport {collapseInjectionKey, dropdownInjectionKey, navbarInjectionKey} from '../../utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BDropdownItemProps>(), {\n  wrapperAttrs: undefined,\n  // Link props\n  linkClass: undefined,\n  variant: null,\n  // All others use defaults\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  // End link props\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst {class: wrapperClass, ...attrs} = useAttrs()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst computedClasses = computed(() => [\n  props.linkClass,\n  {\n    active: props.active,\n    disabled: props.disabled,\n    [`text-${props.variant}`]: props.variant !== null,\n  },\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.href ? 'a' : 'button'))\n\nconst collapseData = inject(collapseInjectionKey, null)\nconst dropdownData = inject(dropdownInjectionKey, null)\nconst navbarData = inject(navbarInjectionKey, null)\n\n// Pretty sure this emits if computedTag is not button and is disabled\nconst clicked = (e: Readonly<MouseEvent>): void => {\n  emit('click', e)\n  if (navbarData !== null && navbarData?.autoClose?.value === true) {\n    collapseData?.hide?.()\n  }\n  dropdownData?.hide?.()\n}\n</script>\n","<template>\n  <li role=\"presentation\">\n    <button\n      role=\"menu\"\n      type=\"button\"\n      class=\"dropdown-item\"\n      :class=\"computedClasses\"\n      :disabled=\"props.disabled\"\n      @click=\"clicked\"\n    >\n      <slot />\n    </button>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BDropdownItemButtonProps} from '../../types'\nimport {computed} from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BDropdownItemButtonProps>(), {\n  active: false,\n  activeClass: 'active',\n  buttonClass: undefined,\n  disabled: false,\n  variant: null,\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n  props.buttonClass,\n  {\n    [props.activeClass]: props.active,\n    disabled: props.disabled,\n    [`text-${props.variant}`]: props.variant !== null,\n  },\n])\n\nconst clicked = (e: Readonly<MouseEvent>) => {\n  emit('click', e)\n}\n</script>\n","<template>\n  <form\n    :id=\"id\"\n    ref=\"element\"\n    :novalidate=\"props.novalidate\"\n    :class=\"computedClasses\"\n    @submit.prevent=\"submitted\"\n  >\n    <slot />\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormProps} from '../../types'\nimport {computed, ref} from 'vue'\n\nconst props = withDefaults(defineProps<BFormProps>(), {\n  floating: false,\n  id: undefined,\n  novalidate: false,\n  validated: false,\n})\n\nconst emit = defineEmits<{\n  submit: [value: Event]\n}>()\n\nconst element = ref<HTMLFormElement | null>(null)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  'form-floating': props.floating,\n  'was-validated': props.validated,\n}))\n\nconst submitted = (e: Readonly<Event>) => {\n  emit('submit', e)\n}\n\ndefineExpose({\n  element,\n})\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"id\"\n    :role=\"role\"\n    :aria-live=\"ariaLive\"\n    :aria-atomic=\"ariaLive ? true : undefined\"\n    :class=\"computedClasses\"\n  >\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BFormFeedbackSharedProps} from '../../types'\n\nconst props = withDefaults(defineProps<BFormFeedbackSharedProps>(), {\n  ariaLive: undefined,\n  forceShow: false,\n  id: undefined,\n  role: undefined,\n  state: null,\n  tag: 'div',\n  text: undefined,\n  tooltip: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedShow = toRef(() => props.forceShow === true || props.state === false)\n\nconst computedClasses = computed(() => ({\n  'd-block': computedShow.value,\n  'invalid-feedback': !props.tooltip,\n  'invalid-tooltip': props.tooltip,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" :id=\"id\" :class=\"computedClasses\">\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport type {BFormTextProps} from '../../types'\n\nconst props = withDefaults(defineProps<BFormTextProps>(), {\n  id: undefined,\n  inline: false,\n  tag: 'small',\n  text: undefined,\n  textVariant: 'body-secondary',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`text-${props.textVariant}`]: props.textVariant !== null,\n  'form-text': !props.inline,\n}))\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"id\"\n    :role=\"role\"\n    :aria-live=\"ariaLive\"\n    :aria-atomic=\"ariaLive ? true : undefined\"\n    :class=\"computedClasses\"\n  >\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BFormFeedbackSharedProps} from '../../types'\n\nconst props = withDefaults(defineProps<BFormFeedbackSharedProps>(), {\n  ariaLive: undefined,\n  forceShow: false,\n  id: undefined,\n  role: undefined,\n  state: null,\n  tag: 'div',\n  text: undefined,\n  tooltip: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedShow = toRef(() => props.forceShow === true || props.state === true)\n\nconst computedClasses = computed(() => ({\n  'd-block': computedShow.value,\n  'valid-feedback': !props.tooltip,\n  'valid-tooltip': props.tooltip,\n}))\n</script>\n","<script lang=\"ts\">\nimport {\n  defineComponent,\n  h,\n  type PropType,\n  type RendererElement,\n  type SlotsType,\n  Teleport,\n} from 'vue'\n\nexport default defineComponent({\n  name: 'ComponentOrEmpty',\n  slots: Object as SlotsType<{\n    default?: Record<string, never>\n  }>,\n  props: {\n    tag: {\n      type: String,\n      default: 'div',\n    },\n    to: {\n      type: [String, Object] as PropType<string | RendererElement | null | undefined>,\n      default: null,\n    },\n    skip: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props, {slots, attrs}) {\n    return () =>\n      props.skip\n        ? slots.default?.()\n        : props.tag === 'Teleport'\n          ? h(Teleport, {to: props.to}, [slots.default?.()])\n          : h(props.tag, {...attrs}, [slots.default?.()])\n  },\n})\n</script>\n","<template>\n  <RenderComponentOrSkip :skip=\"isButtonGroup\" :class=\"computedClasses\">\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"input\"\n      v-model=\"localValue\"\n      :class=\"inputClasses\"\n      type=\"checkbox\"\n      :disabled=\"props.disabled || parentData?.disabled.value\"\n      :required=\"computedRequired || undefined\"\n      :name=\"name || parentData?.name.value\"\n      :form=\"form || parentData?.form.value\"\n      :aria-label=\"ariaLabel\"\n      :aria-labelledby=\"ariaLabelledby\"\n      :aria-required=\"computedRequired || undefined\"\n      :value=\"value\"\n      :true-value=\"value\"\n      :false-value=\"uncheckedValue\"\n      :indeterminate=\"props.indeterminate\"\n    />\n    <label v-if=\"hasDefaultSlot || props.plain === false\" :for=\"computedId\" :class=\"labelClasses\">\n      <slot />\n    </label>\n  </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, ref, toRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses, useId} from '../../composables'\nimport type {BFormCheckboxProps, CheckboxValue} from '../../types'\nimport {checkboxGroupKey, isEmptySlot} from '../../utils'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BFormCheckboxProps>(), {\n  ariaLabel: undefined,\n  ariaLabelledby: undefined,\n  autofocus: false,\n  button: false,\n  buttonGroup: false,\n  buttonVariant: null,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  inline: false,\n  name: undefined,\n  plain: false,\n  required: undefined,\n  reverse: false,\n  size: undefined,\n  state: null,\n  switch: false,\n  uncheckedValue: false,\n  value: true,\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<CheckboxValue | CheckboxValue[]>({\n  default: undefined,\n})\nconst indeterminate = defineModel<boolean>('indeterminate', {\n  default: false,\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(checkboxGroupKey, null)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\n\nconst localValue = computed({\n  get: () => parentData?.modelValue.value ?? modelValue.value,\n  set: (newVal) => {\n    if (newVal === undefined) return\n    // Indeterminate is implicitly cleared when the checked state is changed to any value\n    //  by the user.  We reflect that here by setting our indetermiate model to false\n    //  which will emit the indeterminate event to the parent\n    indeterminate.value = false\n    if (parentData !== null && Array.isArray(newVal)) {\n      // The type cast isn't perfect. Array.isArray detects CheckboxValue.unknown[],\n      // but since it's parentData, it should always be CheckboxValue[]\n      // It doesn't quite work when props.value is an [], but this is more of a Vue issue\n      parentData.modelValue.value = newVal as CheckboxValue[]\n      return\n    }\n    modelValue.value = newVal as CheckboxValue\n  },\n})\n\nconst computedRequired = toRef(\n  () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = toRef(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n  plain: props.plain || (parentData?.plain.value ?? false),\n  button: props.button || (parentData?.buttons.value ?? false),\n  inline: props.inline || (parentData?.inline.value ?? false),\n  reverse: props.reverse || (parentData?.reverse.value ?? false),\n  switch: props.switch || (parentData?.switch.value ?? false),\n  state: props.state || parentData?.state.value,\n  size: props.size ?? parentData?.size.value ?? 'md', // This is where the true default is made\n  buttonVariant: props.buttonVariant ?? parentData?.buttonVariant.value ?? 'secondary', // This is where the true default is made\n  hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <div\n    v-bind=\"computedAttrs\"\n    :id=\"computedId\"\n    ref=\"element\"\n    role=\"group\"\n    :class=\"computedClasses\"\n    class=\"bv-no-focus-ring\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"first\" />\n    <BFormCheckbox v-for=\"item in normalizeOptions\" :key=\"item.self\" v-bind=\"item.props\">\n      <!-- eslint-disable-next-line vue/no-v-html -->\n      <span v-if=\"!!item.html\" v-html=\"item.html\" />\n      <template v-else>\n        {{ item.text }}\n      </template>\n    </BFormCheckbox>\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, ref, toRef} from 'vue'\nimport BFormCheckbox from './BFormCheckbox.vue'\nimport type {BFormCheckboxGroupProps, CheckboxValue} from '../../types'\nimport {getGroupAttr, getGroupClasses, useId} from '../../composables'\nimport {checkboxGroupKey} from '../../utils'\nimport {useFocus} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BFormCheckboxGroupProps>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  buttonVariant: 'secondary',\n  buttons: false,\n  disabled: false,\n  disabledField: 'disabled',\n  form: undefined,\n  htmlField: 'html',\n  id: undefined,\n  name: undefined,\n  options: () => [],\n  plain: false,\n  required: false,\n  reverse: false,\n  size: 'md',\n  stacked: false,\n  state: null,\n  switches: false,\n  textField: 'text',\n  validated: false,\n  valueField: 'value',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<CheckboxValue[]>({\n  default: () => [],\n})\n\nconst computedId = useId(() => props.id, 'checkbox')\nconst computedName = useId(() => props.name, 'checkbox')\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element, {\n  initialValue: props.autofocus,\n})\n\nprovide(checkboxGroupKey, {\n  modelValue,\n  switch: toRef(() => props.switches),\n  buttonVariant: toRef(() => props.buttonVariant),\n  form: toRef(() => props.form),\n  name: computedName,\n  state: toRef(() => props.state),\n  plain: toRef(() => props.plain),\n  size: toRef(() => props.size),\n  inline: toRef(() => !props.stacked),\n  reverse: toRef(() => props.reverse),\n  required: toRef(() => props.required),\n  buttons: toRef(() => props.buttons),\n  disabled: toRef(() => props.disabled),\n})\n\nconst normalizeOptions = computed(() =>\n  props.options.map((el, ind) =>\n    typeof el === 'string' || typeof el === 'number'\n      ? {\n          props: {\n            value: el,\n            disabled: props.disabled,\n          },\n          text: el.toString(),\n          html: undefined,\n          self: Symbol(`checkboxGroupOptionItem${ind}`),\n        }\n      : {\n          props: {\n            value: el[props.valueField] as string | number | undefined,\n            disabled: el[props.disabledField] as boolean | undefined,\n            ...(el.props ? el.props : {}),\n          },\n          text: el[props.textField] as string | undefined,\n          html: el[props.htmlField] as string | undefined,\n          self: Symbol(`checkboxGroupOptionItem${ind}`),\n        }\n  )\n)\n\nconst classesObject = computed(() => ({\n  required: props.required,\n  ariaInvalid: props.ariaInvalid,\n  state: props.state,\n  validated: props.validated,\n  buttons: props.buttons,\n  stacked: props.stacked,\n  size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <DefineTemplate>\n    <label class=\"input-group-text\" :for=\"computedId\">\n      {{ browserText }}\n    </label>\n  </DefineTemplate>\n\n  <label v-if=\"hasLabelSlot || label\" class=\"form-label\" :class=\"labelClass\" :for=\"computedId\">\n    <slot name=\"label\">\n      {{ label }}\n    </slot>\n  </label>\n\n  <div class=\"input-group form-input-file\">\n    <ReusableTemplate v-if=\"placement === 'start'\" />\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"input\"\n      type=\"file\"\n      class=\"form-control\"\n      :class=\"computedClasses\"\n      :form=\"form\"\n      :name=\"name\"\n      :multiple=\"props.multiple\"\n      :disabled=\"props.disabled\"\n      :capture=\"props.capture\"\n      :accept=\"computedAccept || undefined\"\n      :required=\"props.required || undefined\"\n      :aria-label=\"ariaLabel\"\n      :aria-labelledby=\"ariaLabelledby\"\n      :aria-required=\"props.required || undefined\"\n      :directory=\"props.directory\"\n      :webkitdirectory=\"props.directory\"\n      @change=\"onChange\"\n      @drop=\"onDrop\"\n    />\n    <ReusableTemplate v-if=\"placement === 'end'\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {createReusableTemplate, useFocus} from '@vueuse/core'\nimport {computed, ref, toRef, watch} from 'vue'\nimport type {BFormFileProps} from '../../types'\nimport {useId, useStateClass} from '../../composables'\nimport {isEmptySlot} from '../../utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  label?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BFormFileProps>(), {\n  ariaLabel: undefined,\n  ariaLabelledby: undefined,\n  accept: '',\n  autofocus: false,\n  browserText: 'Choose',\n  // eslint-disable-next-line vue/require-valid-default-prop\n  capture: false,\n  directory: false,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  label: '',\n  labelClass: undefined,\n  multiple: false,\n  name: undefined,\n  noDrop: false,\n  noTraverse: false,\n  placement: 'start',\n  required: false,\n  size: undefined,\n  state: null,\n})\n\nconst modelValue = defineModel<File | File[] | null>({\n  default: null,\n})\nconst computedId = useId(() => props.id)\n\n// TODO noTraverse is not implemented yet\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = ref<HTMLInputElement | null>(null)\n\nconst {focused} = useFocus(input, {initialValue: props.autofocus})\n\nconst hasLabelSlot = toRef(() => !isEmptySlot(slots['label']))\n\nconst computedAccept = toRef(() =>\n  typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    [`form-control-${props.size}`]: props.size !== undefined,\n  },\n])\n\nconst onChange = () => {\n  const value =\n    input.value?.files === null || input.value?.files === undefined ? null : [...input.value.files]\n  modelValue.value = value === null ? null : props.multiple === true ? value : value[0]\n}\n\nconst onDrop = (e: Readonly<Event>) => {\n  if (props.noDrop === true) {\n    e.preventDefault()\n  }\n}\n\n/**\n * Reset the form input\n */\nconst reset = () => {\n  modelValue.value = null\n}\n\nwatch(modelValue, (newValue) => {\n  if (newValue === null && input.value !== null) {\n    input.value.value = ''\n  }\n})\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n  reset,\n})\n\nconst [DefineTemplate, ReusableTemplate] = createReusableTemplate()\n</script>\n\n<style scoped>\n.form-input-file {\n  input[type='file'] {\n    margin-left: -2px !important;\n\n    &::-webkit-file-upload-button {\n      display: none;\n    }\n\n    &::file-selector-button {\n      display: none;\n    }\n  }\n\n  &:hover {\n    label {\n      background-color: #dde0e3;\n      cursor: pointer;\n    }\n  }\n}\n</style>\n","<script lang=\"ts\">\nimport {useAriaInvalid, useId, useStateClass} from '../../composables'\nimport {RX_SPACE_SPLIT} from '../../constants/regex'\nimport {attemptFocus, IS_BROWSER, isVisible, normalizeSlot, suffixPropName} from '../../utils'\nimport {computed, defineComponent, h, nextTick, onMounted, type PropType, ref, watch} from 'vue'\nimport BCol from '../BCol.vue'\nimport BFormInvalidFeedback from '../BForm/BFormInvalidFeedback.vue'\nimport BFormRow from '../BForm/BFormRow.vue'\nimport BFormText from '../BForm/BFormText.vue'\nimport BFormValidFeedback from '../BForm/BFormValidFeedback.vue'\nimport type {AriaInvalid} from '../../types'\n\nconst INPUTS = ['input', 'select', 'textarea']\n// Selector for finding first input in the form group\nconst INPUT_SELECTOR = INPUTS.map((v) => `${v}:not([disabled])`).join()\n\n// A list of interactive elements (tag names) inside `<BFormGroup>`'s legend\nconst LEGEND_INTERACTIVE_ELEMENTS = [...INPUTS, 'a', 'button', 'label']\n\nexport const SLOT_NAME_LABEL = 'label'\nexport const SLOT_NAME_INVALID_FEEDBACK = 'invalid-feedback'\nexport const SLOT_NAME_VALID_FEEDBACK = 'valid-feedback'\nexport const SLOT_NAME_DESCRIPTION = 'description'\nexport const SLOT_NAME_DEFAULT = 'default'\n\nexport default defineComponent({\n  components: {BCol, BFormInvalidFeedback, BFormRow, BFormText, BFormValidFeedback},\n  props: {\n    ariaInvalid: {type: [Boolean, String] as PropType<AriaInvalid>, default: undefined},\n    contentCols: {type: [Boolean, String, Number], default: undefined},\n    contentColsLg: {type: [Boolean, String, Number], default: undefined},\n    contentColsMd: {type: [Boolean, String, Number], default: undefined},\n    contentColsSm: {type: [Boolean, String, Number], default: undefined},\n    contentColsXl: {type: [Boolean, String, Number], default: undefined},\n    description: {type: [String], default: undefined},\n    disabled: {type: Boolean, default: false},\n    feedbackAriaLive: {type: String, default: 'assertive'},\n    id: {type: String, default: undefined},\n    invalidFeedback: {type: String, default: undefined},\n    label: {type: String, default: undefined},\n    labelAlign: {type: [Boolean, String, Number], default: undefined},\n    labelAlignLg: {type: [Boolean, String, Number], default: undefined},\n    labelAlignMd: {type: [Boolean, String, Number], default: undefined},\n    labelAlignSm: {type: [Boolean, String, Number], default: undefined},\n    labelAlignXl: {type: [Boolean, String, Number], default: undefined},\n    labelClass: {type: [Array, Object, String], default: undefined},\n    labelCols: {type: [Boolean, String, Number], default: undefined},\n    labelColsLg: {type: [Boolean, String, Number], default: undefined},\n    labelColsMd: {type: [Boolean, String, Number], default: undefined},\n    labelColsSm: {type: [Boolean, String, Number], default: undefined},\n    labelColsXl: {type: [Boolean, String, Number], default: undefined},\n    labelFor: {type: String, default: undefined},\n    labelSize: {type: String, default: undefined},\n    labelSrOnly: {type: Boolean, default: false},\n    state: {type: Boolean as PropType<boolean | null>, default: null},\n    tooltip: {type: Boolean, default: false},\n    validFeedback: {type: String, default: undefined},\n    validated: {type: Boolean, default: false},\n    floating: {type: Boolean, default: false},\n  },\n  setup(props) {\n    const ariaDescribedby: string | null = null as string | null\n    const breakPoints = ['xs', 'sm', 'md', 'lg', 'xl']\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const getAlignClasses = (props: any, prefix: string) =>\n      breakPoints.reduce((result: string[], breakpoint) => {\n        const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Align`)\n        const propValue: string = props[suffix] || null\n        if (propValue) {\n          breakpoint === 'xs'\n            ? result.push(`text-${propValue}`)\n            : result.push(`text-${breakpoint}-${propValue}`)\n        }\n\n        return result\n      }, [])\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const getColProps = (props: any, prefix: string) =>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      breakPoints.reduce((result: any, breakpoint: string) => {\n        const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Cols`)\n        let propValue = props[suffix]\n        // Handle case where the prop's value is an empty string,\n        // which represents `true`\n        propValue = propValue === '' ? true : propValue || false\n\n        if (!(typeof propValue === 'boolean') && propValue !== 'auto') {\n          // Convert to column size to number\n          const val = Number.parseInt(propValue)\n          propValue = Number.isNaN(val) ? 0 : val\n          // Ensure column size is greater than `0`\n          propValue = propValue > 0 ? propValue : false\n        }\n\n        // Add the prop to the list of props to give to `</BCol>`\n        // If breakpoint is '' (`${prefix}Cols` is `true`), then we use\n        // the 'col' prop to make equal width at 'xs'\n        if (propValue) {\n          // Extra care is required for xs since it does not have a BCol breakpoint prop\n          // Xs breakpoint is simply 'cols'\n          if (breakpoint === 'xs') {\n            result[typeof propValue === 'boolean' ? 'col' : 'cols'] = propValue\n          } else {\n            result[breakpoint || (typeof propValue === 'boolean' ? 'col' : 'cols')] = propValue\n          }\n        }\n        return result\n      }, {})\n\n    const content = ref<HTMLElement | null>(null)\n\n    // Sets the `aria-describedby` attribute on the input if `labelFor` is set\n    // Optionally accepts a string of Ids to remove as the second parameter\n    // Preserves any `aria-describedby` value(s) user may have on input\n    const updateAriaDescribedby = (newValue: string | null, oldValue: string | null = null) => {\n      if (IS_BROWSER && props.labelFor && content.value !== null) {\n        // We need to escape `labelFor` since it can be user-provided\n        const $input = content.value.querySelector(`#${CSS.escape(props.labelFor)}`)\n        if ($input) {\n          const attr = 'aria-describedby'\n          const newIds = (newValue || '').split(RX_SPACE_SPLIT)\n          const oldIds = (oldValue || '').split(RX_SPACE_SPLIT)\n\n          // Update Id list, preserving any original Ids\n          // and ensuring the Id's are unique\n          const ids = ($input.getAttribute(attr) || '')\n            .split(RX_SPACE_SPLIT)\n            .filter((id) => !oldIds.includes(id))\n            .concat(newIds)\n            .filter((id, index, ids) => ids.indexOf(id) === index)\n            .filter((x) => x)\n            .join(' ')\n            .trim()\n\n          if (ids) {\n            $input.setAttribute(attr, ids)\n          } else {\n            $input.removeAttribute(attr)\n          }\n        }\n      }\n    }\n\n    const contentColProps = computed(() => getColProps(props, 'content'))\n    const labelAlignClasses = computed(() => getAlignClasses(props, 'label'))\n    const labelColProps = computed(() => getColProps(props, 'label'))\n    const isHorizontal = computed(\n      () =>\n        // Determine if the form group will be rendered horizontal\n        // based on the existence of 'content-col' or 'label-col' props\n        Object.keys(contentColProps.value).length > 0 || Object.keys(labelColProps.value).length > 0\n    )\n\n    const stateClass = useStateClass(() => props.state)\n\n    const computedAriaInvalid = useAriaInvalid(\n      () => props.ariaInvalid,\n      () => props.state\n    )\n\n    watch(\n      () => ariaDescribedby,\n      (newValue: string | null, oldValue: string | null) => {\n        if (newValue !== oldValue) {\n          updateAriaDescribedby(newValue, oldValue)\n        }\n      }\n    )\n\n    onMounted(() => {\n      nextTick(() => {\n        // Set `aria-describedby` on the input specified by `labelFor`\n        // We do this in a `$nextTick()` to ensure the children have finished rendering\n        updateAriaDescribedby(ariaDescribedby)\n      })\n    })\n\n    const onLegendClick = (event: Readonly<MouseEvent>) => {\n      // Don't do anything if `labelFor` is set\n      if (props.labelFor || content.value === null) return\n\n      const {target} = event\n      const tagName = target ? (target as HTMLElement).tagName : ''\n\n      // If clicked an interactive element inside legend,\n      // we just let the default happen\n      if (LEGEND_INTERACTIVE_ELEMENTS.indexOf(tagName) !== -1) return\n\n      // If only a single input, focus it, emulating label behaviour\n      const inputs = [...content.value.querySelectorAll(INPUT_SELECTOR)].filter(isVisible)\n      const [inp] = inputs\n      if (inputs.length === 1 && inp instanceof HTMLElement) {\n        attemptFocus(inp)\n      }\n    }\n\n    return {\n      ariaDescribedby,\n      computedAriaInvalid,\n      contentColProps,\n      isHorizontal,\n      labelAlignClasses,\n      labelColProps,\n      onLegendClick,\n      stateClass,\n    }\n  },\n  render() {\n    const props = this.$props\n    const slots = this.$slots\n\n    const id = useId()\n    const isFieldset = !props.labelFor\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let $label: any = null\n    const labelContent = normalizeSlot(SLOT_NAME_LABEL, {}, slots) || props.label\n    const labelId = labelContent ? useId(undefined, '_BV_label_').value : null\n\n    if (labelContent || this.isHorizontal) {\n      const labelTag: 'legend' | 'label' = isFieldset ? 'legend' : 'label'\n      if (props.labelSrOnly) {\n        if (labelContent) {\n          $label = h(\n            labelTag,\n            {\n              class: 'visually-hidden',\n              id: labelId,\n              for: props.labelFor || null,\n            },\n            labelContent\n          )\n        }\n        if (this.isHorizontal) {\n          $label = h(BCol, this.labelColProps, {default: () => $label})\n        } else {\n          $label = h('div', {}, [$label])\n        }\n      } else {\n        const renderProps = {\n          onClick: isFieldset ? this.onLegendClick : null,\n          ...(this.isHorizontal ? this.labelColProps : {}),\n          tag: this.isHorizontal ? labelTag : null,\n          id: labelId,\n          for: props.labelFor || null,\n          tabIndex: isFieldset ? '-1' : null,\n          class: [\n            this.isHorizontal ? 'col-form-label' : 'form-label',\n            {\n              'bv-no-focus-ring': isFieldset,\n              'col-form-label': this.isHorizontal || isFieldset,\n              'pt-0': !this.isHorizontal && isFieldset,\n              'd-block': !this.isHorizontal && !isFieldset,\n              [`col-form-label-${props.labelSize}`]: !!props.labelSize,\n            },\n            this.labelAlignClasses,\n            props.labelClass,\n          ],\n        }\n        if (this.isHorizontal) {\n          $label = h(BCol, renderProps, {default: () => labelContent})\n        } else {\n          $label = h(labelTag, renderProps, labelContent)\n        }\n      }\n    }\n\n    let $invalidFeedback = null\n    const invalidFeedbackContent =\n      normalizeSlot(SLOT_NAME_INVALID_FEEDBACK, {}, slots) || this.invalidFeedback\n    const invalidFeedbackId = invalidFeedbackContent\n      ? useId(undefined, '_BV_feedback_invalid_').value\n      : undefined\n\n    if (invalidFeedbackContent) {\n      $invalidFeedback = h(\n        BFormInvalidFeedback,\n        {\n          ariaLive: props.feedbackAriaLive,\n          id: invalidFeedbackId,\n          state: props.state,\n          tooltip: props.tooltip,\n        },\n        {default: () => invalidFeedbackContent}\n      )\n    }\n\n    let $validFeedback = null\n    const validFeedbackContent =\n      normalizeSlot(SLOT_NAME_VALID_FEEDBACK, {}, slots) || this.validFeedback\n    const validFeedbackId = validFeedbackContent\n      ? useId(undefined, '_BV_feedback_valid_').value\n      : undefined\n\n    if (validFeedbackContent) {\n      $validFeedback = h(\n        BFormValidFeedback,\n        {\n          ariaLive: props.feedbackAriaLive,\n          id: validFeedbackId,\n          state: props.state,\n          tooltip: props.tooltip,\n        },\n        {default: () => validFeedbackContent}\n        // validFeedbackContent\n      )\n    }\n\n    let $description = null\n    const descriptionContent = normalizeSlot(SLOT_NAME_DESCRIPTION, {}, slots) || this.description\n    const descriptionId = descriptionContent\n      ? useId(undefined, '_BV_description_').value\n      : undefined\n    if (descriptionContent) {\n      $description = h(\n        BFormText,\n        {\n          id: descriptionId,\n        },\n        {default: () => descriptionContent}\n      )\n    }\n\n    // Update `ariaDescribedby`\n    // Screen readers will read out any content linked to by `aria-describedby`\n    // even if the content is hidden with `display: none;`, hence we only include\n    // feedback Ids if the form group's state is explicitly valid or invalid\n    const ariaDescribedby = (this.ariaDescribedby =\n      [\n        descriptionId,\n        props.state === false ? invalidFeedbackId : null,\n        props.state === true ? validFeedbackId : null,\n      ]\n        .filter((x) => x)\n        .join(' ') || null)\n\n    const contentBlocks = [\n      normalizeSlot(SLOT_NAME_DEFAULT, {ariaDescribedby, descriptionId, id, labelId}, slots) || '',\n      $invalidFeedback,\n      $validFeedback,\n      $description,\n    ]\n    if (!this.isHorizontal && props.floating) contentBlocks.push($label)\n\n    let $content = h(\n      'div',\n      {\n        ref: 'content',\n        class: [\n          {\n            'form-floating': !this.isHorizontal && props.floating,\n          },\n        ],\n      },\n      contentBlocks\n    )\n    if (this.isHorizontal) {\n      $content = h(BCol, {ref: 'content', ...this.contentColProps}, {default: () => contentBlocks})\n    }\n\n    // Return it wrapped in a form group\n    // Note: Fieldsets do not support adding `row` or `form-row` directly\n    // to them due to browser specific render issues, so we move the `form-row`\n    // to an inner wrapper div when horizontal and using a fieldset\n    const rowProps = {\n      'class': [\n        this.stateClass,\n        {\n          'was-validated': props.validated,\n        },\n      ],\n      'id': useId(() => props.id).value,\n      'disabled': isFieldset ? props.disabled : null,\n      'role': isFieldset ? null : 'group',\n      'aria-invalid': this.computedAriaInvalid,\n      // Only apply `aria-labelledby` if we are a horizontal fieldset\n      // as the legend is no longer a direct child of fieldset\n      'aria-labelledby': isFieldset && this.isHorizontal ? labelId : null,\n    }\n\n    if (this.isHorizontal && !isFieldset) {\n      return h(BFormRow, rowProps, {default: () => [$label, $content]})\n    }\n\n    return h(\n      isFieldset ? 'fieldset' : 'div',\n      rowProps,\n      this.isHorizontal && isFieldset\n        ? [h(BFormRow, null, {default: () => [$label, $content]})]\n        : this.isHorizontal || !props.floating\n          ? [$label, $content]\n          : [$content]\n    )\n  },\n})\n</script>\n","<template>\n  <input\n    :id=\"computedId\"\n    ref=\"input\"\n    :value=\"modelValue\"\n    :class=\"computedClasses\"\n    :name=\"name || undefined\"\n    :form=\"form || undefined\"\n    :type=\"type\"\n    :disabled=\"props.disabled\"\n    :placeholder=\"placeholder\"\n    :required=\"props.required || undefined\"\n    :autocomplete=\"autocomplete || undefined\"\n    :readonly=\"props.readonly || props.plaintext\"\n    :min=\"min\"\n    :max=\"max\"\n    :step=\"step\"\n    :list=\"type !== 'password' ? list : undefined\"\n    :aria-required=\"props.required || undefined\"\n    :aria-invalid=\"computedAriaInvalid\"\n    @input=\"onInput($event)\"\n    @change=\"onChange($event)\"\n    @blur=\"onBlur($event)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useFormInput, useStateClass} from '../../composables'\nimport type {BFormInputProps, Numberish} from '../../types'\n\nconst props = withDefaults(defineProps<BFormInputProps>(), {\n  max: undefined,\n  min: undefined,\n  step: undefined,\n  type: 'text',\n  // CommonInputProps\n  ariaInvalid: undefined,\n  autocomplete: undefined,\n  autofocus: false,\n  debounce: 0,\n  debounceMaxWait: NaN,\n  disabled: false,\n  form: undefined,\n  formatter: undefined,\n  id: undefined,\n  lazy: false,\n  lazyFormatter: false,\n  list: undefined,\n  modelValue: '',\n  name: undefined,\n  number: false,\n  placeholder: undefined,\n  plaintext: false,\n  readonly: false,\n  required: false,\n  size: undefined,\n  state: null,\n  trim: false,\n  // End CommonInputProps\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [val: Numberish | null]\n}>()\n\nconst {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =\n  useFormInput(props, emit)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst isHighlighted = ref(false)\n\nconst computedClasses = computed(() => {\n  const isRange = props.type === 'range'\n  const isColor = props.type === 'color'\n  return [\n    stateClass.value,\n    {\n      'form-control-highlighted': isHighlighted.value,\n      'form-range': isRange,\n      'form-control': isColor || (!props.plaintext && !isRange),\n      'form-control-color': isColor,\n      'form-control-plaintext': props.plaintext && !isRange && !isColor,\n      [`form-control-${props.size}`]: !!props.size,\n    },\n  ]\n})\n\ndefineExpose({\n  blur,\n  element: input,\n  focus,\n})\n\n// const highlight = () => {\n//   if (isHighlighted.value === true) return\n//   isHighlighted.value = true\n//   setTimeout(() => {\n//     isHighlighted.value = false\n//   }, 2000)\n// }\n</script>\n","<template>\n  <RenderComponentOrSkip :skip=\"isButtonGroup\" :class=\"computedClasses\">\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"input\"\n      v-model=\"localValue\"\n      :class=\"inputClasses\"\n      type=\"radio\"\n      :disabled=\"props.disabled || parentData?.disabled.value\"\n      :required=\"computedRequired || undefined\"\n      :name=\"name || parentData?.name.value\"\n      :form=\"form || parentData?.form.value\"\n      :aria-label=\"ariaLabel\"\n      :aria-labelledby=\"ariaLabelledby\"\n      :value=\"value\"\n      :aria-required=\"computedRequired || undefined\"\n    />\n    <label v-if=\"hasDefaultSlot || props.plain === false\" :for=\"computedId\" :class=\"labelClasses\">\n      <slot />\n    </label>\n  </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus} from '@vueuse/core'\nimport {computed, inject, ref, toRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses, useId} from '../../composables'\nimport type {BFormRadioProps, RadioValue} from '../../types'\nimport {isEmptySlot, radioGroupKey} from '../../utils'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BFormRadioProps>(), {\n  ariaLabel: undefined,\n  ariaLabelledby: undefined,\n  autofocus: false,\n  button: false,\n  buttonGroup: false,\n  buttonVariant: null,\n  disabled: false,\n  form: undefined,\n  id: undefined,\n  inline: false,\n  name: undefined,\n  plain: false,\n  required: false,\n  reverse: false,\n  size: undefined,\n  state: null,\n  value: true,\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<RadioValue | undefined>({\n  default: undefined,\n})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst parentData = inject(radioGroupKey, null)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: props.autofocus,\n})\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\n\nconst localValue = computed({\n  get: () => parentData?.modelValue.value ?? modelValue.value,\n  set: (newValue) => {\n    if (newValue === undefined) return\n    if (parentData !== null) {\n      parentData.modelValue.value = newValue as RadioValue\n      return\n    }\n    modelValue.value = newValue as RadioValue\n  },\n})\n\nconst computedRequired = toRef(\n  () => !!(props.name ?? parentData?.name.value) && (props.required || parentData?.required.value)\n)\n\nconst isButtonGroup = toRef(() => props.buttonGroup || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n  plain: props.plain || (parentData?.plain.value ?? false),\n  button: props.button || (parentData?.buttons.value ?? false),\n  inline: props.inline || (parentData?.inline.value ?? false),\n  state: props.state || parentData?.state.value,\n  reverse: props.reverse || (parentData?.reverse.value ?? false),\n  size: props.size ?? parentData?.size.value ?? 'md', // This is where the true default is made\n  buttonVariant: props.buttonVariant ?? parentData?.buttonVariant.value ?? 'secondary', // This is where the true default is made\n  hasDefaultSlot: hasDefaultSlot.value,\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <div\n    v-bind=\"computedAttrs\"\n    :id=\"computedId\"\n    ref=\"element\"\n    role=\"radiogroup\"\n    :class=\"computedClasses\"\n    class=\"bv-no-focus-ring\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"first\" />\n    <BFormRadio\n      v-for=\"item in normalizeOptions\"\n      :key=\"item.self\"\n      :disabled=\"item.disabled\"\n      :value=\"item.value\"\n    >\n      <!-- eslint-disable-next-line vue/no-v-html -->\n      <span v-if=\"!!item.html\" v-html=\"item.html\" />\n      <template v-else>\n        {{ item.text }}\n      </template>\n    </BFormRadio>\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormRadioGroupProps, RadioValue} from '../../types'\nimport {computed, provide, ref, toRef} from 'vue'\nimport {radioGroupKey} from '../../utils'\nimport BFormRadio from './BFormRadio.vue'\nimport {getGroupAttr, getGroupClasses, useId} from '../../composables'\nimport {useFocus} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BFormRadioGroupProps>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  buttonVariant: 'secondary',\n  buttons: false,\n  disabled: false,\n  disabledField: 'disabled',\n  form: undefined,\n  htmlField: 'html',\n  id: undefined,\n  name: undefined,\n  options: () => [],\n  plain: false,\n  required: false,\n  reverse: false,\n  size: 'md',\n  stacked: false,\n  state: null,\n  textField: 'text',\n  validated: false,\n  valueField: 'value',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<RadioValue | null>({\n  default: null,\n})\n\nconst computedId = useId(() => props.id, 'radio')\nconst computedName = useId(() => props.name, 'checkbox')\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element, {\n  initialValue: props.autofocus,\n})\n\nprovide(radioGroupKey, {\n  modelValue,\n  buttonVariant: toRef(() => props.buttonVariant),\n  form: toRef(() => props.form),\n  name: computedName,\n  buttons: toRef(() => props.buttons),\n  state: toRef(() => props.state),\n  plain: toRef(() => props.plain),\n  size: toRef(() => props.size),\n  inline: toRef(() => !props.stacked),\n  reverse: toRef(() => props.reverse),\n  required: toRef(() => props.required),\n  disabled: toRef(() => props.disabled),\n})\n\nconst normalizeOptions = computed(() =>\n  props.options.map((el, ind) =>\n    typeof el === 'string' || typeof el === 'number'\n      ? {\n          value: el,\n          disabled: props.disabled,\n          text: el.toString(),\n          html: undefined,\n          self: Symbol(`radioGroupOptionItem${ind}`),\n        }\n      : {\n          value: el[props.valueField] as string | undefined,\n          disabled: el[props.disabledField] as boolean | undefined,\n          ...(el.props ? el.props : {}),\n          text: el[props.textField] as string | undefined,\n          html: el[props.htmlField] as string | undefined,\n          self: Symbol(`radioGroupOptionItem${ind}`),\n        }\n  )\n)\n\nconst classesObject = computed(() => ({\n  required: props.required,\n  ariaInvalid: props.ariaInvalid,\n  state: props.state,\n  validated: props.validated,\n  buttons: props.buttons,\n  stacked: props.stacked,\n  size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <option :value=\"value\" :disabled=\"props.disabled\">\n    <slot />\n  </option>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type {BFormSelectOptionProps} from '../../types'\n\nconst props = withDefaults(defineProps<BFormSelectOptionProps<T>>(), {\n  disabled: false,\n  value: undefined,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <optgroup :label=\"label\">\n    <slot name=\"first\" />\n    <BFormSelectOption\n      v-for=\"(option, index) in normalizedOptsWrapper\"\n      :key=\"index\"\n      :disabled=\"option.disabled\"\n      :value=\"option.value\"\n      v-bind=\"$attrs\"\n    >\n      <!-- eslint-disable-next-line vue/no-v-html -->\n      <span v-if=\"!!option.html\" v-html=\"option.html\" />\n      <template v-else>\n        {{ option.text }}\n      </template>\n    </BFormSelectOption>\n    <slot />\n  </optgroup>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport BFormSelectOption from './BFormSelectOption.vue'\nimport {useFormSelect} from '../../composables'\nimport type {BFormSelectOptionGroupProps, SelectOption} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BFormSelectOptionGroupProps>(), {\n  disabledField: 'disabled',\n  htmlField: 'html',\n  label: undefined,\n  options: () => [],\n  textField: 'text',\n  valueField: 'value',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst {normalizedOptions} = useFormSelect(() => props.options, props)\n\nconst normalizedOptsWrapper = computed(() => normalizedOptions.value as SelectOption<T>[])\n</script>\n","<template>\n  <select\n    :id=\"computedId\"\n    ref=\"input\"\n    v-model=\"localValue\"\n    :class=\"computedClasses\"\n    :name=\"name\"\n    :form=\"form || undefined\"\n    :multiple=\"props.multiple || undefined\"\n    :size=\"computedSelectSize\"\n    :disabled=\"props.disabled\"\n    :required=\"props.required || undefined\"\n    :aria-required=\"props.required || undefined\"\n    :aria-invalid=\"computedAriaInvalid\"\n  >\n    <slot name=\"first\" />\n    <template v-for=\"(option, index) in normalizedOptsWrapper\" :key=\"index\">\n      <BFormSelectOptionGroup\n        v-if=\"isComplex(option)\"\n        :label=\"option.label\"\n        :options=\"option.options\"\n        :value-field=\"valueField\"\n        :text-field=\"textField\"\n        :html-field=\"htmlField\"\n        :disabled-field=\"disabledField\"\n      />\n      <BFormSelectOption v-else :value=\"option.value\" :disabled=\"option.disabled\">\n        <!-- eslint-disable-next-line vue/no-v-html -->\n        <span v-if=\"!!option.html\" v-html=\"option.html\" />\n        <template v-else>\n          {{ option.text }}\n        </template>\n      </BFormSelectOption>\n    </template>\n    <slot />\n  </select>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type {BFormSelectProps, ComplexSelectOptionRaw, SelectOption} from '../../types'\nimport {computed, ref, toRef} from 'vue'\nimport BFormSelectOption from './BFormSelectOption.vue'\nimport BFormSelectOptionGroup from './BFormSelectOptionGroup.vue'\nimport {useAriaInvalid, useFormSelect, useId, useStateClass} from '../../composables'\nimport {useFocus, useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BFormSelectProps>(), {\n  ariaInvalid: undefined,\n  autofocus: false,\n  disabled: false,\n  disabledField: 'disabled',\n  form: undefined,\n  htmlField: 'html',\n  id: undefined,\n  labelField: 'label',\n  multiple: false,\n  name: undefined,\n  // eslint-disable-next-line vue/require-valid-default-prop\n  options: () => [],\n  optionsField: 'options',\n  plain: false,\n  required: false,\n  selectSize: 0,\n  size: 'md',\n  state: null,\n  textField: 'text',\n  valueField: 'value',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<T>({\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default: '' as any,\n})\n\nconst computedId = useId(() => props.id, 'input')\n\nconst selectSizeNumber = useToNumber(() => props.selectSize)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: props.autofocus,\n})\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    'form-control': props.plain,\n    [`form-control-${props.size}`]: props.size !== 'md' && props.plain,\n    'form-select': !props.plain,\n    [`form-select-${props.size}`]: props.size !== 'md' && !props.plain,\n  },\n])\n\nconst computedSelectSize = toRef(() =>\n  selectSizeNumber.value || props.plain ? selectSizeNumber.value : undefined\n)\n\nconst computedAriaInvalid = useAriaInvalid(\n  () => props.ariaInvalid,\n  () => props.state\n)\n\nconst {normalizedOptions, isComplex} = useFormSelect(() => props.options, props)\n\nconst normalizedOptsWrapper = computed(\n  () => normalizedOptions.value as readonly (ComplexSelectOptionRaw<T> | SelectOption<T>)[]\n)\n\nconst localValue = computed({\n  get: () => modelValue.value,\n  set: (newValue) => {\n    modelValue.value = newValue\n  },\n})\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","export const CODE_BACKSPACE = 'Backspace'\nexport const CODE_BREAK = 19\nexport const CODE_DELETE = 46\nexport const CODE_DOWN = 'ArrowDown'\nexport const CODE_END = 'End'\nexport const CODE_ENTER = 13\nexport const CODE_ESC = 27\nexport const CODE_HOME = 'Home'\nexport const CODE_LEFT = 37\nexport const CODE_PAGEDOWN = 'PageDown'\nexport const CODE_PAGEUP = 'PageUp'\nexport const CODE_RIGHT = 39\nexport const CODE_SPACE = 32\nexport const CODE_UP = 'ArrowUp'\n","<template>\n  <div\n    ref=\"element\"\n    class=\"b-form-spinbutton form-control\"\n    :class=\"computedClasses\"\n    role=\"group\"\n    :lang=\"computedLocale\"\n    :tabindex=\"props.disabled ? undefined : '-1'\"\n    :title=\"ariaLabel\"\n    @click=\"focused = true\"\n  >\n    <!-- eslint-disable-next-line prettier/prettier -->\n    <!-- prettier-ignore -->\n    <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n      <button\n        v-bind=\"buttons.top.button\"\n        @mousedown=\"buttons.top.handler\"\n        @touchstart=\"buttons.top.handler\"\n      >\n        <svg v-bind=\"buttons.top.svg\">\n          <path v-bind=\"buttons.top.path\" />\n        </svg>\n      </button>\n    </slot>\n    <input\n      v-if=\"name && !props.disabled\"\n      key=\"hidden\"\n      type=\"hidden\"\n      :name=\"name\"\n      :form=\"form\"\n      :value=\"valueAsFixed\"\n    />\n    <output\n      :id=\"computedId\"\n      key=\"output\"\n      class=\"flex-grow-1\"\n      :class=\"computedSpinClasses\"\n      :dir=\"isRtl ?? false ? 'rtl' : 'ltr'\"\n      :tabindex=\"props.disabled ? undefined : '0'\"\n      role=\"spinbutton\"\n      aria-live=\"off\"\n      :aria-label=\"ariaLabel || undefined\"\n      :aria-invalid=\"\n        props.state === false || (!modelValue !== null && props.required) ? true : undefined\n      \"\n      :aria-required=\"props.required ? true : undefined\"\n      :aria-valuemin=\"computedMin\"\n      :aria-valuemax=\"computedMax\"\n      :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n      :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n    >\n      <bdi>\n        {{ (modelValue !== null ? computedFormatter(modelValue) : placeholder) || '' }}\n      </bdi>\n    </output>\n    <!-- eslint-disable-next-line prettier/prettier -->\n    <!-- prettier-ignore -->\n    <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n      <button\n        v-bind=\"buttons.bottom.button\"\n        @mousedown=\"buttons.bottom.handler\"\n        @touchstart=\"buttons.bottom.handler\"\n      >\n        <svg v-bind=\"buttons.bottom.svg\">\n          <path v-bind=\"buttons.bottom.path\" />\n        </svg>\n      </button>\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref, toRef} from 'vue'\nimport type {BFormSpinbuttonProps, ButtonType} from '../../types'\nimport {eventOnOff} from '../../utils/event'\nimport {\n  CODE_DOWN,\n  CODE_END,\n  CODE_HOME,\n  CODE_PAGEDOWN,\n  CODE_PAGEUP,\n  CODE_UP,\n} from '../../constants/codes'\nimport {onKeyStroke, useFocus, useToNumber} from '@vueuse/core'\nimport {useId, useRtl} from '../../composables'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst props = withDefaults(defineProps<BFormSpinbuttonProps>(), {\n  ariaControls: undefined,\n  ariaLabel: undefined,\n  disabled: false,\n  form: undefined,\n  formatterFn: undefined,\n  id: undefined,\n  inline: false,\n  labelDecrement: 'Decrement',\n  labelIncrement: 'Increment',\n  locale: undefined,\n  max: defaultValues.max,\n  min: defaultValues.min,\n  name: undefined,\n  placeholder: undefined,\n  readonly: false,\n  repeatDelay: defaultValues.repeatDelay,\n  repeatInterval: defaultValues.repeatInterval,\n  repeatStepMultiplier: defaultValues.repeatMultiplier,\n  repeatThreshold: defaultValues.repeatThreshold,\n  required: false,\n  size: undefined,\n  state: null,\n  step: defaultValues.step,\n  vertical: false,\n  wrap: false,\n})\n\nconst emit = defineEmits<{\n  change: [value: number | null]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  decrement?: (props: {hasFocus: boolean}) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  increment?: (props: {hasFocus: boolean}) => any\n}>()\n\nconst modelValue = defineModel<number | null>({\n  default: null,\n})\n\n// TODO focus system\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst computedClasses = computed(() => ({\n  'disabled': props.disabled,\n  'readonly': props.readonly,\n  'focus': focused.value,\n  'd-inline-flex': props.inline || props.vertical,\n  'd-flex': !props.inline && !props.vertical,\n  'align-items-stretch': !props.vertical,\n  'flex-column': props.vertical,\n  [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n  'd-flex': props.vertical,\n  'align-self-center': !props.vertical,\n  'align-items-center': props.vertical,\n  'border-top': props.vertical,\n  'border-bottom': props.vertical,\n  'border-start': !props.vertical,\n  'border-end': !props.vertical,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = toRef(() =>\n  Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = toRef(() =>\n  Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = toRef(() => {\n  const step = computedStep.value\n  const min = computedMin.value\n  return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedDelay = toRef(() =>\n  repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedInterval = toRef(() =>\n  repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedThreshold = toRef(() =>\n  Math.max(\n    Number.isNaN(repeatThresholdNumber.value)\n      ? defaultValues.repeatThreshold\n      : repeatThresholdNumber.value,\n    1\n  )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedStepMultiplier = toRef(() =>\n  Math.max(\n    Number.isNaN(repeatStepMultiplierNumber.value)\n      ? defaultValues.repeatMultiplier\n      : repeatStepMultiplierNumber.value,\n    1\n  )\n)\n\nconst computedPrecision = toRef(() => {\n  const step = computedStep.value\n  return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = toRef(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = toRef(() =>\n  modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n  const loc = (props.locale ?? globalLocale?.value) || 'locale'\n  const locales = [loc]\n  const nf = new Intl.NumberFormat(locales)\n  return nf.resolvedOptions().locale\n})\n\nconst defaultFormatter = () =>\n  new Intl.NumberFormat(computedLocale.value, {\n    style: 'decimal',\n    useGrouping: false,\n    minimumIntegerDigits: 1,\n    minimumFractionDigits: computedPrecision.value,\n    maximumFractionDigits: computedPrecision.value,\n    notation: 'standard',\n  }).format\n\nconst computedFormatter = toRef(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n  // Sets a new incremented or decremented value, supporting optional wrapping\n  // Direction is either +1 or -1 (or a multiple thereof)\n  let {value} = modelValue\n  if (!props.disabled && value !== null) {\n    const step = computedStep.value * direction\n    const min = computedMin.value\n    const max = computedMax.value\n    const multiplier = computedMultiplier.value\n    const {wrap} = props\n    // We ensure that the value steps like a native input\n    value = Math.round((value - min) / step) * step + min + step\n    // We ensure that precision is maintained (decimals)\n    value = Math.round(value * multiplier) / multiplier\n    // Handle if wrapping is enabled\n    modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n  }\n}\n\nconst stepUp = (multiplier = 1) => {\n  if (modelValue.value === null) {\n    modelValue.value = computedMin.value\n    return\n  }\n  stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n  if (modelValue.value === null) {\n    modelValue.value = props.wrap ? computedMax.value : computedMin.value\n    return\n  }\n  stepValue(-1 * multiplier)\n}\n\nconst stopEvent = (event: Readonly<Event>) => {\n  event.preventDefault()\n  event.stopImmediatePropagation()\n}\n\nonKeyStroke(\n  KEY_CODES,\n  (event) => {\n    const {code, altKey, ctrlKey, metaKey} = event\n\n    if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n    // https://w3c.github.io/aria-practices/#spinbutton\n    stopEvent(event)\n    if ($_keyIsDown) {\n      // Keypress is already in progress\n      return\n    }\n\n    resetTimers()\n    if ([CODE_UP, CODE_DOWN].includes(code)) {\n      // The following use the custom auto-repeat handling\n\n      $_keyIsDown = true\n      if (code === CODE_UP) {\n        handleStepRepeat(event, stepUp)\n        return\n      }\n      if (code === CODE_DOWN) {\n        handleStepRepeat(event, stepDown)\n      }\n      return\n    }\n    // These use native OS key repeating\n    if (code === CODE_PAGEUP) {\n      stepUp(computedStepMultiplier.value)\n      return\n    }\n    if (code === CODE_PAGEDOWN) {\n      stepDown(computedStepMultiplier.value)\n      return\n    }\n    if (code === CODE_HOME) {\n      modelValue.value = computedMin.value\n      return\n    }\n    if (code === CODE_END) {\n      modelValue.value = computedMax.value\n    }\n  },\n  {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n  KEY_CODES,\n  (event: Readonly<KeyboardEvent>) => {\n    // Emit a change event when the keyup happens\n\n    const {altKey, ctrlKey, metaKey} = event\n\n    if (props.disabled || props.readonly || altKey || ctrlKey || metaKey) return\n\n    stopEvent(event)\n    resetTimers()\n    $_keyIsDown = false\n    emit('change', modelValue.value)\n  },\n  {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Readonly<Event>, stepper: (step: number) => void) => {\n  const {type} = event || {}\n\n  if (!props.disabled && !props.readonly) {\n    if (isMouseEvent(event)) {\n      // We only respond to left (main === 0) button clicks\n      if (type === 'mousedown' && event.button) return\n    }\n    resetTimers()\n    // Step the counter initially\n    stepper(1)\n    const threshold = computedThreshold.value\n    const multiplier = computedStepMultiplier.value\n    const delay = computedDelay.value\n    const interval = computedInterval.value\n\n    // Initiate the delay/repeat interval\n    $_autoDelayTimer = setTimeout(() => {\n      let count = 0\n      $_autoRepeatTimer = setInterval(() => {\n        // After N initial repeats, we increase the incrementing step amount\n        // We do this to minimize screen reader announcements of the value\n        // (values are announced every change, which can be chatty for SR users)\n        // And to make it easer to select a value when the range is large\n        stepper(count < threshold ? 1 : multiplier)\n        count++\n      }, interval)\n    }, delay)\n  }\n}\n\nconst isMouseEvent = (evt: Readonly<Event>): evt is MouseEvent =>\n  evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Readonly<Event>) => {\n  // `<body>` listener, only enabled when mousedown starts\n\n  if (isMouseEvent(event)) {\n    if (event.type === 'mouseup' && event.button) {\n      // Ignore non left button (main === 0) mouse button click\n      return\n    }\n  }\n\n  stopEvent(event)\n  resetTimers()\n  setMouseup(false)\n  // Trigger the change event\n  emit('change', modelValue.value)\n}\n\nconst setMouseup = (on: boolean) => {\n  // Enable or disabled the body mouseup/touchend handlers\n  // Use try/catch to handle case when called server side\n  try {\n    eventOnOff(on, [document.body, 'mouseup', onMouseup, false])\n    eventOnOff(on, [document.body, 'touchend', onMouseup, false])\n  } catch {\n    /* empty */\n  }\n}\nconst resetTimers = () => {\n  clearTimeout($_autoDelayTimer)\n  clearInterval($_autoRepeatTimer)\n  $_autoDelayTimer = undefined\n  $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n  const incrementSvgAttrs = {\n    svg: {\n      xmlns: 'http://www.w3.org/2000/svg',\n      width: '16',\n      height: '16',\n      fill: 'currentColor',\n      class: 'bi bi-plus',\n      viewBox: '0 0 16 16',\n    },\n    path: {\n      d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n    },\n  } as const\n\n  const decrementSvgAttrs = {\n    svg: {\n      xmlns: 'http://www.w3.org/2000/svg',\n      width: '16',\n      height: '16',\n      fill: 'currentColor',\n      class: 'bi bi-dash',\n      viewBox: '0 0 16 16',\n    },\n    path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n  } as const\n\n  const sharedButtonAttrs = {\n    'class': [{'py-0': !props.vertical}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n    'tabindex': '-1',\n    'type': 'button' as ButtonType,\n    'disabled': props.disabled || props.readonly,\n    'aria-disabled': props.disabled || props.readonly ? true : undefined,\n    'aria-controls': computedId.value,\n  }\n\n  const sharedSvgAttrs = {\n    'aria-hidden': true,\n    'scale': focused.value ? 1.5 : 1.25,\n  }\n\n  const handler = (event: Readonly<Event>, stepper: (multiplier?: number) => void) => {\n    if (!props.disabled && !props.readonly) {\n      stopEvent(event)\n      setMouseup(true)\n      // Since we `preventDefault()`, we must manually focus the button\n      // Though it's likely captured from the element click focus\n      focused.value = true\n      handleStepRepeat(event, stepper)\n    }\n  }\n\n  const incrementAttrs = {\n    button: {\n      ...sharedButtonAttrs,\n      'aria-label': props.labelIncrement || undefined,\n      'aria-keyshortcuts': 'ArrowUp',\n    },\n    svg: {\n      ...sharedSvgAttrs,\n      ...incrementSvgAttrs.svg,\n    },\n    path: {\n      ...incrementSvgAttrs.path,\n    },\n    slot: {\n      name: 'increment',\n    },\n    handler: (e: Event) => handler(e, stepUp),\n  }\n\n  const decrementAttrs = {\n    button: {\n      ...sharedButtonAttrs,\n      'aria-label': props.labelDecrement || undefined,\n      'aria-keyshortcuts': 'ArrowDown',\n    },\n    svg: {\n      ...sharedSvgAttrs,\n      ...decrementSvgAttrs.svg,\n    },\n    path: {\n      ...decrementSvgAttrs.path,\n    },\n    slot: {\n      name: 'decrement',\n    },\n    handler: (e: Readonly<Event>) => handler(e, stepDown),\n  }\n\n  return {\n    top: {\n      ...(props.vertical ? incrementAttrs : decrementAttrs),\n    },\n    bottom: {\n      ...(!props.vertical ? incrementAttrs : decrementAttrs),\n    },\n  }\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n  min: 1,\n  max: 100,\n  step: 1,\n  repeatDelay: 500,\n  repeatInterval: 100,\n  repeatThreshold: 10,\n  repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"computedId\"\n    :title=\"tagText\"\n    class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n    :class=\"computedClasses\"\n    :aria-labelledby=\"taglabelId\"\n  >\n    <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n      <slot>{{ tagText }}</slot>\n    </span>\n    <BCloseButton\n      v-if=\"!props.disabled && !props.noRemove\"\n      aria-keyshortcuts=\"Delete\"\n      :aria-label=\"removeLabel\"\n      class=\"b-form-tag-remove\"\n      :aria-describedby=\"taglabelId\"\n      :aria-controls=\"id\"\n      @click=\"emit('remove', tagText)\"\n    />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport {useId} from '../../composables'\nimport type {BFormTagProps} from '../../types'\nimport BCloseButton from '../BButton/BCloseButton.vue'\n\nconst props = withDefaults(defineProps<BFormTagProps>(), {\n  disabled: false,\n  id: undefined,\n  noRemove: false,\n  pill: false,\n  removeLabel: 'Remove tag',\n  tag: 'span',\n  title: undefined,\n  variant: 'secondary',\n})\n\nconst emit = defineEmits<{\n  remove: [value: string]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id)\n\nconst tagText = computed(\n  () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = toRef(() => `${computedId.value}taglabel__`)\n\nconst computedClasses = computed(() => ({\n  [`text-bg-${props.variant}`]: props.variant !== null,\n  'rounded-pill': props.pill,\n  'disabled': props.disabled,\n}))\n</script>\n","<template>\n  <div\n    :id=\"computedId\"\n    class=\"b-form-tags form-control h-auto\"\n    :class=\"computedClasses\"\n    role=\"group\"\n    tabindex=\"-1\"\n    @focusin=\"onFocusin\"\n    @focusout=\"emit('focusout', $event)\"\n  >\n    <output\n      :id=\"`${computedId}selected_tags__`\"\n      class=\"visually-hidden\"\n      :for=\"_inputId\"\n      :aria-live=\"focused ? 'polite' : 'off'\"\n      aria-atomic=\"true\"\n      aria-relevant=\"additions text\"\n      >{{ tags.join(', ') }}</output\n    >\n    <div\n      :id=\"`${computedId}removed_tags__`\"\n      role=\"status\"\n      :aria-live=\"focused ? 'assertive' : 'off'\"\n      aria-atomic=\"true\"\n      class=\"visually-hidden\"\n    >\n      ({{ tagRemovedLabel }}) {{ lastRemovedTag }}\n    </div>\n\n    <slot v-bind=\"slotAttrs\">\n      <ul\n        :id=\"`${computedId}tag_list__`\"\n        class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n      >\n        <template v-for=\"(tag, index) in tags\" :key=\"index\">\n          <slot\n            name=\"tag\"\n            :tag=\"tag\"\n            :tag-class=\"tagClass\"\n            :tag-variant=\"tagVariant\"\n            :tag-pills=\"props.tagPills\"\n            :remove-tag=\"removeTag\"\n          >\n            <BFormTag\n              :key=\"tag\"\n              :class=\"tagClass\"\n              tag=\"li\"\n              :variant=\"tagVariant\"\n              :pill=\"tagPills\"\n              @remove=\"removeTag\"\n              >{{ tag }}</BFormTag\n            >\n          </slot>\n        </template>\n        <li\n          role=\"none\"\n          aria-live=\"off\"\n          class=\"b-from-tags-field flex-grow-1\"\n          :aria-controls=\"`${computedId}tag_list__`\"\n        >\n          <div role=\"group\" class=\"d-flex\">\n            <input\n              :id=\"_inputId\"\n              ref=\"input\"\n              :disabled=\"props.disabled\"\n              :value=\"inputValue\"\n              :type=\"inputType\"\n              :placeholder=\"placeholder\"\n              class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n              style=\"outline: currentcolor none 0px; min-width: 5rem\"\n              v-bind=\"inputAttrs\"\n              :form=\"form\"\n              :required=\"props.required || undefined\"\n              :aria-required=\"props.required || undefined\"\n              @input=\"onInput\"\n              @change=\"onChange\"\n              @focus=\"onFocus\"\n              @blur=\"onBlur\"\n            />\n            <button\n              v-if=\"disableAddButton\"\n              type=\"button\"\n              class=\"btn b-form-tags-button py-0\"\n              :class=\"[\n                inputClass,\n                {\n                  [`btn-${addButtonVariant}`]: addButtonVariant !== null,\n                  'disabled invisible': inputValue.length === 0,\n                },\n              ]\"\n              style=\"font-size: 90%\"\n              :disabled=\"props.disabled || inputValue.length === 0 || isLimitReached\"\n              @click=\"addTag(inputValue)\"\n            >\n              <slot name=\"add-button-text\">{{ addButtonText }}</slot>\n            </button>\n          </div>\n        </li>\n      </ul>\n      <div aria-live=\"polite\" aria-atomic=\"true\">\n        <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n          {{ invalidTagText }}: {{ inputValue }}\n        </div>\n        <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n          >{{ duplicateTagText }}: {{ inputValue }}</small\n        >\n        <small v-if=\"tags.length === limit\" class=\"form-text text-body-secondary\">\n          {{ limitTagsText }}</small\n        >\n      </div>\n    </slot>\n    <template v-if=\"name\">\n      <input v-for=\"(tag, index) in tags\" :key=\"index\" type=\"hidden\" :name=\"name\" :value=\"tag\" />\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, syncRef, useFocus, useToNumber} from '@vueuse/core'\nimport {computed, ref, toRef} from 'vue'\nimport {useId, useStateClass} from '../../composables'\nimport type {BFormTagsProps, ClassValue, ColorVariant} from '../../types'\nimport {escapeRegExpChars} from '../../utils'\nimport BFormTag from './BFormTag.vue'\n\nconst props = withDefaults(defineProps<BFormTagsProps>(), {\n  addButtonText: 'Add',\n  addButtonVariant: 'outline-secondary',\n  addOnChange: false,\n  autofocus: false,\n  disabled: false,\n  duplicateTagText: 'Duplicate tag(s)',\n  form: undefined,\n  inputAttrs: undefined,\n  inputClass: undefined,\n  inputId: undefined,\n  inputType: 'text',\n  invalidTagText: 'Invalid tag(s)',\n  limit: undefined,\n  limitTagsText: 'Tag limit reached',\n  name: undefined,\n  noAddOnEnter: false,\n  noOuterFocus: false,\n  noTagRemove: false,\n  placeholder: 'Add tag...',\n  removeOnDelete: false,\n  required: false,\n  separator: undefined,\n  size: 'md',\n  state: null,\n  tagClass: undefined,\n  tagPills: false,\n  tagRemoveLabel: undefined,\n  tagRemovedLabel: 'Tag removed',\n  tagValidator: () => true,\n  tagVariant: 'secondary',\n})\n\nconst emit = defineEmits<{\n  'blur': [value: FocusEvent]\n  'focus': [value: FocusEvent]\n  'focusin': [value: FocusEvent]\n  'focusout': [value: FocusEvent]\n  'tag-state': [...args: string[][]]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'add-button-text'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: typeof slotAttrs.value) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'tag'?: (props: {\n    tag: string\n    tagClass: ClassValue\n    tagVariant: ColorVariant | null\n    tagPills: boolean\n    removeTag: (tag?: string) => void\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n}>()\n\nconst modelValue = defineModel<string[]>({\n  default: () => [],\n})\n\nconst computedId = useId()\n\nconst limitNumber = useToNumber(() => props.limit ?? NaN)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst input = ref<HTMLInputElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: props.autofocus,\n})\n\nconst _inputId = toRef(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>([...modelValue.value])\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nsyncRef(modelValue, tags, {\n  direction: 'ltr',\n  transform: {\n    ltr: (v) => [...v],\n  },\n})\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    [`form-control-${props.size}`]: props.size !== 'md',\n    disabled: props.disabled,\n    focus: focused.value,\n  },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n  inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = toRef(() => tags.value.length === limitNumber.value)\nconst disableAddButton = toRef(() => !isInvalid.value && !isDuplicate.value)\n\nconst slotAttrs = computed(() => ({\n  addButtonText: props.addButtonText,\n  addButtonVariant: props.addButtonVariant,\n  addTag,\n  disableAddButton: disableAddButton.value,\n  disabled: props.disabled,\n  duplicateTagText: props.duplicateTagText,\n  duplicateTags: duplicateTags.value,\n  form: props.form,\n  inputAttrs: {\n    ...props.inputAttrs,\n    disabled: props.disabled,\n    form: props.form,\n    id: _inputId,\n    value: inputValue,\n  },\n  inputHandlers: {\n    input: onInput,\n    keydown: onKeydown,\n    change: onChange,\n  },\n  inputId: _inputId,\n  inputType: props.inputType,\n  invalidTagText: props.invalidTagText,\n  invalidTags: invalidTags.value,\n  isDuplicate: isDuplicate.value,\n  isInvalid: isInvalid.value,\n  isLimitReached: isLimitReached.value,\n  limitTagsText: props.limitTagsText,\n  limit: limitNumber.value,\n  noTagRemove: props.noTagRemove,\n  placeholder: props.placeholder,\n  removeTag,\n  required: props.required,\n  separator: props.separator,\n  size: props.size,\n  state: props.state,\n  tagClass: props.tagClass,\n  tagPills: props.tagPills,\n  tagRemoveLabel: props.tagRemoveLabel,\n  tagVariant: props.tagVariant,\n  tags: tags.value,\n}))\n\nconst onFocusin = (e: Readonly<FocusEvent>): void => {\n  if (props.disabled) {\n    const target = e.target as HTMLDivElement\n    target.blur()\n    return\n  }\n\n  emit('focusin', e)\n}\n\nconst onFocus = (e: Readonly<FocusEvent>): void => {\n  if (props.disabled || props.noOuterFocus) {\n    return\n  }\n\n  focused.value = true\n  emit('focus', e)\n}\n\nconst onBlur = (e: Readonly<FocusEvent>): void => {\n  focused.value = false\n  emit('blur', e)\n}\n\nconst onInput = (e: Readonly<Event> | string): void => {\n  const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n  shouldRemoveOnDelete.value = false\n\n  if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n    if (input.value) {\n      input.value.value = ''\n    }\n    return\n  }\n\n  inputValue.value = value\n\n  if (props.separator?.includes(value.charAt(value.length - 1))) {\n    addTag(value.slice(0, value.length - 1))\n    return\n  }\n\n  validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n  invalidTags.value = props.tagValidator(value) ? [] : [value]\n  duplicateTags.value = isDuplicate.value ? [value] : []\n\n  emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Readonly<Event>): void => {\n  if (props.addOnChange) {\n    onInput(e)\n\n    if (!isDuplicate.value) {\n      addTag(inputValue.value)\n    }\n  }\n}\n\nconst onKeydown = (e: Readonly<KeyboardEvent>): void => {\n  if (e.key === 'Enter' && !props.noAddOnEnter) {\n    addTag(inputValue.value)\n    return\n  }\n\n  if (\n    (e.key === 'Backspace' || e.key === 'Delete') &&\n    props.removeOnDelete &&\n    inputValue.value === '' &&\n    shouldRemoveOnDelete.value &&\n    tags.value.length > 0\n  ) {\n    removeTag(tags.value[tags.value.length - 1])\n  } else {\n    shouldRemoveOnDelete.value = true\n  }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n  if (!props.separator) {\n    return\n  }\n\n  return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n  if (!separator.value) {\n    return\n  }\n\n  return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n  tag = (tag ?? inputValue.value).trim()\n\n  const newTags = separatorRegExp.value\n    ? tag.split(separatorRegExp.value).map((t) => t.trim())\n    : [tag]\n  const validTags: string[] = []\n\n  for (const newTag of newTags) {\n    if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n      continue\n    }\n\n    if (limitNumber.value && isLimitReached.value) {\n      break\n    }\n\n    validTags.push(newTag)\n  }\n\n  const newValue = [...modelValue.value, ...validTags]\n  inputValue.value = ''\n  shouldRemoveOnDelete.value = true\n  modelValue.value = newValue\n  focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n  const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n  if (tagIndex === -1) return\n  lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString() // TODO this seems strange, if index === -1 you'll remove the last el\n  modelValue.value = tags.value\n}\n\n// TODO these focus/blur events aren't quite in line with use useFormInput implementation. Perhaps we should bring them together?\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <textarea\n    :id=\"computedId\"\n    ref=\"input\"\n    :class=\"computedClasses\"\n    :name=\"name || undefined\"\n    :form=\"form || undefined\"\n    :value=\"modelValue ?? undefined\"\n    :disabled=\"props.disabled\"\n    :placeholder=\"placeholder\"\n    :required=\"props.required || undefined\"\n    :autocomplete=\"autocomplete || undefined\"\n    :readonly=\"props.readonly || props.plaintext\"\n    :aria-required=\"required || undefined\"\n    :aria-invalid=\"computedAriaInvalid\"\n    :rows=\"rows\"\n    :style=\"computedStyles\"\n    :wrap=\"wrap || undefined\"\n    @input=\"onInput($event)\"\n    @change=\"onChange($event)\"\n    @blur=\"onBlur($event)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormTextareaProps, Numberish} from '../../types'\nimport {computed, type CSSProperties} from 'vue'\nimport {useFormInput, useStateClass} from '../../composables'\n\nconst props = withDefaults(defineProps<BFormTextareaProps>(), {\n  // CommonInputProps\n  ariaInvalid: undefined,\n  autocomplete: undefined,\n  autofocus: false,\n  debounce: 0,\n  debounceMaxWait: NaN,\n  disabled: false,\n  form: undefined,\n  formatter: undefined,\n  id: undefined,\n  lazy: false,\n  lazyFormatter: false,\n  list: undefined,\n  modelValue: '',\n  name: undefined,\n  number: false,\n  placeholder: undefined,\n  plaintext: false,\n  readonly: false,\n  required: false,\n  size: undefined,\n  state: null,\n  trim: false,\n  // End CommonInputProps\n  noResize: false,\n  rows: 2,\n  wrap: 'soft',\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [val: Numberish | null]\n}>()\n\nconst {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =\n  useFormInput(props, emit)\n\nconst stateClass = useStateClass(() => props.state)\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  props.plaintext ? 'form-control-plaintext' : 'form-control',\n  {\n    [`form-control-${props.size}`]: !!props.size,\n  },\n])\n\nconst computedStyles = computed<CSSProperties>(() => ({\n  resize: props.noResize ? 'none' : undefined,\n}))\n\ndefineExpose({\n  blur,\n  element: input,\n  focus,\n})\n</script>\n","<template>\n  <component :is=\"tag\" :id=\"id\" class=\"input-group\" :class=\"computedClasses\" role=\"group\">\n    <slot name=\"prepend\">\n      <span v-if=\"hasPrepend\" class=\"input-group-text\">\n        <!-- eslint-disable-next-line vue/no-v-html -->\n        <span v-if=\"!!prependHtml\" v-html=\"prependHtml\" />\n        <span v-else>{{ prepend }}</span>\n      </span>\n    </slot>\n    <slot />\n    <slot name=\"append\">\n      <span v-if=\"hasAppend\" class=\"input-group-text\">\n        <!-- eslint-disable-next-line vue/no-v-html -->\n        <span v-if=\"!!appendHtml\" v-html=\"appendHtml\" />\n        <span v-else>{{ append }}</span>\n      </span>\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BInputGroupProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(defineProps<BInputGroupProps>(), {\n  append: undefined,\n  appendHtml: undefined,\n  id: undefined,\n  prepend: undefined,\n  prependHtml: undefined,\n  size: 'md',\n  tag: 'div',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  append?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  prepend?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`input-group-${props.size}`]: props.size !== 'md',\n}))\nconst hasAppend = toRef(() => !!props.append || !!props.appendHtml)\nconst hasPrepend = toRef(() => !!props.prepend || !!props.prependHtml)\n</script>\n","<template>\n  <BInputGroupText v-if=\"props.isText\">\n    <slot />\n  </BInputGroupText>\n  <slot v-else />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BInputGroupAddonProps} from '../../types'\nimport BInputGroupText from './BInputGroupText.vue'\n\nconst props = withDefaults(defineProps<BInputGroupAddonProps>(), {\n  isText: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <component :is=\"computedTag\" class=\"list-group\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef} from 'vue'\nimport {listGroupInjectionKey} from '../../utils'\nimport type {BListGroupProps} from '../../types'\n\nconst props = withDefaults(defineProps<BListGroupProps>(), {\n  flush: false,\n  horizontal: false,\n  numbered: false,\n  tag: 'div',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => {\n  const horizontal = props.flush ? false : props.horizontal\n  return {\n    'list-group-flush': props.flush,\n    'list-group-horizontal': horizontal === true,\n    [`list-group-horizontal-${horizontal}`]: typeof horizontal === 'string',\n    'list-group-numbered': props.numbered,\n  }\n})\nconst computedTag = toRef(() => (props.numbered === true ? 'ol' : props.tag))\n\nprovide(listGroupInjectionKey, {\n  numbered: toRef(() => props.numbered),\n})\n</script>\n","<template>\n  <component\n    :is=\"tagComputed\"\n    class=\"list-group-item\"\n    :class=\"computedClasses\"\n    :aria-current=\"props.active ? true : undefined\"\n    :aria-disabled=\"props.disabled ? true : undefined\"\n    :target=\"isLink ? target : undefined\"\n    :href=\"!props.button ? href : undefined\"\n    :to=\"!props.button ? to : undefined\"\n    v-bind=\"computedAttrs\"\n  >\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, inject, toRef, useAttrs} from 'vue'\nimport type {BListGroupItemProps} from '../../types'\nimport {useBLinkHelper} from '../../composables'\nimport BLink from '../BLink/BLink.vue'\nimport {listGroupInjectionKey} from '../../utils'\n\nconst props = withDefaults(defineProps<BListGroupItemProps>(), {\n  action: false,\n  button: false,\n  tag: 'div',\n  // Link props\n  active: false, // Why is this active: false?\n  // All others use defaults\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  variant: undefined,\n  // End link props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst attrs = useAttrs()\n\nconst parentData = inject(listGroupInjectionKey, null)\n\nconst {computedLink} = useBLinkHelper(props)\n\nconst isLink = toRef(() => !props.button && computedLink.value)\nconst tagComputed = toRef(() =>\n  parentData?.numbered.value ? 'li' : props.button ? 'button' : !isLink.value ? props.tag : BLink\n)\n\nconst isAction = computed(\n  () =>\n    props.action ||\n    isLink.value ||\n    props.button ||\n    ['a', 'router-link', 'button', 'b-link'].includes(props.tag)\n)\n\nconst computedClasses = computed(() => ({\n  [`list-group-item-${props.variant}`]: props.variant !== null && props.variant !== undefined,\n  'list-group-item-action': isAction.value,\n  'active': props.active,\n  'disabled': props.disabled,\n}))\n\nconst computedAttrs = computed(() => {\n  const localAttrs = {} as {type?: string; disabled?: boolean}\n  if (props.button) {\n    if (!attrs || !attrs.type) {\n      // Add a type for button is one not provided in passed attributes\n      localAttrs.type = 'button'\n    }\n    if (props.disabled) {\n      // Set disabled attribute if button and disabled\n      localAttrs.disabled = true\n    }\n  }\n  return localAttrs\n})\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"props.teleportDisabled\">\n    <!-- This wrapper div is used for specific targetting by the user -->\n    <!-- Even though it serves no direct purpose itself -->\n    <div id=\"__BVID__modal-container\">\n      <!-- TODO the animation when entering doesn't work. -->\n      <!-- I tried to use <Transition appear> to have the animation work, but it didn't -->\n      <component\n        :is=\"modal.value.component\"\n        v-for=\"(modal, index) in modals\"\n        :key=\"index\"\n        v-model=\"modal.value.props._modelValue\"\n        v-bind=\"pluckModalItem(modal.value.props)\"\n        :teleport-disabled=\"true\"\n        @hide=\"\n          (e: BvTriggerableEvent) => {\n            // These following are confirm rules, otherwise we always resolve true\n            if (modal.value.props._isConfirm === true) {\n              if (e.trigger === 'ok') {\n                modal.value.props._promise.resolve(true)\n                return\n              }\n              if (e.trigger === 'cancel') {\n                modal.value.props._promise.resolve(false)\n                return\n              }\n              modal.value.props._promise.resolve(null)\n            }\n            modal.value.props._promise.resolve(true)\n          }\n        \"\n        @hidden=\"remove?.(modal.value.props._self)\"\n      />\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvTriggerableEvent, omit} from '../../utils'\nimport {useModalController} from '../../composables'\nimport type {BModalOrchestratorProps} from '../../types'\n\nconst props = withDefaults(defineProps<BModalOrchestratorProps>(), {\n  teleportDisabled: false,\n  teleportTo: 'body',\n})\n\nconst {modals, remove, show, confirm} = useModalController()\n\nconst pluckModalItem = (\n  payload: Readonly<Exclude<typeof modals, undefined>['value'][number]['value']['props']>\n) => omit(payload, ['_promise', '_self', '_isConfirm', '_modelValue'])\n\ndefineExpose({\n  modals,\n  show,\n  confirm,\n})\n</script>\n","<template>\n  <component :is=\"tag\" class=\"nav\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavProps} from '../../types'\nimport {useAlignment} from '../../composables'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BNavProps>(), {\n  align: undefined,\n  cardHeader: false,\n  fill: false,\n  justified: false,\n  pills: false,\n  small: false,\n  tabs: false,\n  tag: 'ul',\n  underline: false,\n  vertical: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst alignment = useAlignment(() => props.align)\n\nconst computedClasses = computed(() => ({\n  'nav-tabs': props.tabs,\n  'nav-pills': props.pills && !props.tabs,\n  'card-header-tabs': !props.vertical && props.cardHeader && props.tabs,\n  'card-header-pills': !props.vertical && props.cardHeader && props.pills && !props.tabs,\n  'flex-column': props.vertical,\n  'nav-fill': !props.vertical && props.fill,\n  'nav-justified': !props.vertical && props.justified,\n  [alignment.value]: !props.vertical && props.align !== undefined,\n  'small': props.small,\n  'nav-underline': props.underline,\n}))\n</script>\n","<template>\n  <li class=\"d-flex flex-row align-items-center flex-wrap\">\n    <BForm\n      v-bind=\"$attrs\"\n      :id=\"id\"\n      :floating=\"floating\"\n      :role=\"role\"\n      :novalidate=\"novalidate\"\n      :validated=\"validated\"\n      class=\"d-flex\"\n      @submit.prevent=\"submitted\"\n    >\n      <slot />\n    </BForm>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavFormProps} from '../../types'\nimport BForm from '../BForm/BForm.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nwithDefaults(defineProps<BNavFormProps>(), {\n  role: undefined,\n  // BForm props\n  floating: undefined,\n  id: undefined,\n  novalidate: undefined,\n  validated: undefined,\n  // End BForm props\n})\n\nconst emit = defineEmits<{\n  submit: [value: Event]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst submitted = (e: Readonly<Event>) => {\n  emit('submit', e)\n}\n</script>\n","<template>\n  <li class=\"nav-item\">\n    <BLink\n      class=\"nav-link\"\n      :class=\"linkClass\"\n      :tabindex=\"props.disabled ? -1 : undefined\"\n      :aria-disabled=\"props.disabled ? true : undefined\"\n      v-bind=\"{...computedLinkProps, ...linkAttrs}\"\n      @click=\"emit('click', $event)\"\n    >\n      <slot />\n    </BLink>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BNavItemProps} from '../../types'\nimport {pick} from '../../utils'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BNavItemProps>(), {\n  // Link props\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  linkAttrs: undefined,\n  linkClass: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  variant: undefined,\n  // End link props\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst computedLinkProps = computed(() =>\n  pick(props, [\n    'active',\n    'activeClass',\n    'append',\n    'disabled',\n    'href',\n    'icon',\n    'opacity',\n    'opacityHover',\n    'rel',\n    'replace',\n    'routerComponentName',\n    'target',\n    'to',\n    'underlineOffset',\n    'underlineOffsetHover',\n    'underlineOpacity',\n    'underlineOpacityHover',\n    'underlineVariant',\n    'variant',\n  ])\n)\ncomputedLinkProps.value.activeClass\n</script>\n","<template>\n  <li class=\"nav-item dropdown\">\n    <BDropdown\n      ref=\"dropdown\"\n      v-bind=\"props\"\n      v-model=\"modelValue\"\n      is-nav\n      @show=\"emit('show', $event)\"\n      @shown=\"emit('shown')\"\n      @hide=\"emit('hide', $event)\"\n      @hidden=\"emit('hidden')\"\n      @hide-prevented=\"emit('hide-prevented')\"\n      @show-prevented=\"emit('show-prevented')\"\n      @click=\"emit('click', $event)\"\n      @toggle=\"emit('toggle')\"\n    >\n      <template #button-content>\n        <slot name=\"button-content\" />\n      </template>\n      <template #toggle-text>\n        <slot name=\"toggle-text\" />\n      </template>\n      <template #default>\n        <slot :hide=\"hide\" :show=\"show\" />\n      </template>\n    </BDropdown>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref} from 'vue'\nimport {BvTriggerableEvent} from '../../utils'\nimport BDropdown from '../BDropdown/BDropdown.vue'\nimport type {BDropdownProps} from '../../types'\n\nconst props = withDefaults(defineProps<BDropdownProps>(), {\n  ariaLabel: undefined,\n  autoClose: true,\n  block: false,\n  boundary: 'clippingAncestors',\n  boundaryPadding: undefined,\n  center: false,\n  teleportTo: undefined,\n  teleportDisabled: false,\n  disabled: false,\n  dropend: false,\n  dropstart: false,\n  dropup: false,\n  end: false,\n  floatingMiddleware: undefined,\n  id: undefined,\n  isNav: true,\n  lazy: false,\n  menuClass: undefined,\n  noCaret: false,\n  noFlip: false,\n  noShift: false,\n  noSize: false,\n  offset: 0,\n  role: 'menu',\n  size: 'md',\n  split: false,\n  splitButtonType: 'button',\n  splitClass: undefined,\n  splitDisabled: undefined,\n  splitHref: undefined,\n  splitTo: undefined,\n  splitVariant: undefined,\n  strategy: 'absolute',\n  text: undefined,\n  toggleClass: undefined,\n  toggleText: 'Toggle dropdown',\n  variant: 'link',\n})\n\nconst emit = defineEmits<{\n  'click': [event: MouseEvent]\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n  'toggle': []\n}>()\n\nconst modelValue = defineModel<boolean>({default: false})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'button-content'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: {hide: () => void; show: () => void}) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'toggle-text'?: (props: Record<string, never>) => any\n}>()\nconst dropdown = ref<InstanceType<typeof BDropdown> | null>(null)\n\nconst hide = () => {\n  dropdown.value?.hide()\n}\nconst show = () => {\n  dropdown.value?.show()\n}\nconst toggle = () => {\n  dropdown.value?.toggle()\n}\n\ndefineExpose({\n  hide,\n  show,\n  toggle,\n})\n</script>\n","<template>\n  <component :is=\"tag\" class=\"navbar\" :class=\"computedClasses\" :role=\"computedRole\">\n    <div v-if=\"container !== false\" :class=\"containerClass\">\n      <slot />\n    </div>\n    <slot v-else />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef} from 'vue'\nimport type {BNavbarProps} from '../../types'\nimport {useContainerClasses} from '../../composables'\nimport {navbarInjectionKey} from '../../utils'\n\nconst props = withDefaults(defineProps<BNavbarProps>(), {\n  autoClose: true,\n  container: 'fluid',\n  fixed: undefined,\n  print: false,\n  sticky: undefined,\n  tag: 'nav',\n  toggleable: false,\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedRole = toRef(() => (props.tag === 'nav' ? undefined : 'navigation'))\n\nconst containerClass = useContainerClasses(() => props.container)\n\nconst computedClasses = computed(() => ({\n  'd-print': props.print,\n  [`sticky-${props.sticky}`]: props.sticky !== undefined,\n  [`bg-${props.variant}`]: props.variant !== null,\n  [`fixed-${props.fixed}`]: props.fixed !== undefined,\n  'navbar-expand': props.toggleable === false,\n  [`navbar-expand-${props.toggleable}`]: typeof props.toggleable === 'string',\n}))\n\nprovide(navbarInjectionKey, {\n  tag: toRef(() => props.tag),\n  autoClose: toRef(() => props.autoClose),\n})\n</script>\n","<template>\n  <component :is=\"computedTag\" class=\"navbar-brand\" v-bind=\"computedLinkProps\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BNavbarBrandProps} from '../../types'\nimport {useBLinkHelper} from '../../composables'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BNavbarBrandProps>(), {\n  tag: 'div',\n  // Link props\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  variant: undefined,\n  // End link props\n})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n  'active',\n  'activeClass',\n  'append',\n  'disabled',\n  'href',\n  'rel',\n  'replace',\n  'routerComponentName',\n  'target',\n  'to',\n  'variant',\n  'opacity',\n  'opacityHover',\n  'underlineVariant',\n  'underlineOffset',\n  'underlineOffsetHover',\n  'underlineOpacity',\n  'underlineOpacityHover',\n  'icon',\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.tag))\n</script>\n","<template>\n  <ul class=\"navbar-nav\" :class=\"computedClasses\">\n    <slot />\n  </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavbarNavProps} from '../../types'\nimport {computed} from 'vue'\nimport {useAlignment} from '../../composables'\n\nconst props = withDefaults(defineProps<BNavbarNavProps>(), {\n  align: undefined,\n  fill: false,\n  justified: false,\n  small: false,\n  tag: 'ul',\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst alignment = useAlignment(() => props.align)\n\nconst computedClasses = computed(() => ({\n  'nav-fill': props.fill,\n  'nav-justified': props.justified,\n  [alignment.value]: props.align !== undefined,\n  'small': props.small,\n}))\n</script>\n","import type {Directive, DirectiveBinding} from 'vue'\n\nconst setTheme = (el: Readonly<HTMLElement>, value: string): void =>\n  el.setAttribute('data-bs-theme', value)\nexport default {\n  mounted(el, binding: DirectiveBinding): void {\n    setTheme(el, binding.value)\n  },\n  updated(el, binding: DirectiveBinding): void {\n    setTheme(el, binding.value)\n  },\n} satisfies Directive<HTMLElement>\n","import {RX_HASH, RX_HASH_ID, RX_SPACE_SPLIT} from '../constants/regex'\nimport type {Directive, DirectiveBinding} from 'vue'\n\nconst getTargets = (\n  binding: DirectiveBinding<string | readonly string[] | undefined>,\n  el: Readonly<HTMLElement>\n) => {\n  const {modifiers, arg, value} = binding\n  // Any modifiers are considered target Ids\n  const targets = Object.keys(modifiers || {})\n\n  // If value is a string, split out individual targets (if space delimited)\n  const localValue = typeof value === 'string' ? value.split(RX_SPACE_SPLIT) : value\n\n  // Support target Id as link href (`href=\"#id\"`)\n  if (el.tagName.toLowerCase() === 'a') {\n    const href = el.getAttribute('href') || ''\n    if (RX_HASH_ID.test(href)) {\n      targets.push(href.replace(RX_HASH, ''))\n    }\n  }\n\n  // Add Id from `arg` (if provided), and support value\n  // as a single string Id or an array of string Ids\n  // If `value` is not an array or string, then it gets filtered out\n  Array.prototype.concat\n    .apply([], [arg, localValue])\n    .forEach((t) => typeof t === 'string' && targets.push(t))\n\n  // Return only unique and truthy target Ids\n  return targets.filter((t, index, arr) => t && arr.indexOf(t) === index)\n}\n\nconst toggle = (targetIds: readonly string[], el: Readonly<HTMLElement>) => {\n  targetIds.forEach((targetId) => {\n    const target = document.getElementById(targetId)\n\n    if (target !== null) {\n      target.dispatchEvent(new Event('bv-toggle'))\n    }\n  })\n  setTimeout(() => checkVisibility(targetIds, el), 50)\n}\n\nconst checkVisibility = (targetIds: readonly string[], el: Readonly<HTMLElement>) => {\n  let visible = false\n  targetIds.forEach((targetId) => {\n    const target = document.getElementById(targetId)\n\n    if (target?.classList.contains('show')) {\n      visible = true\n    }\n    if (target?.classList.contains('closing')) {\n      visible = false\n    }\n  })\n  el.setAttribute('aria-expanded', visible ? 'true' : 'false')\n  el.classList.remove(visible ? 'collapsed' : 'not-collapsed')\n  el.classList.add(visible ? 'not-collapsed' : 'collapsed')\n}\n\nconst handleUpdate = (\n  el: WithToggle,\n  binding: DirectiveBinding<string | readonly string[] | undefined>\n) => {\n  // Determine targets\n  const targets = getTargets(binding, el)\n  if (targets.length === 0) return\n\n  // Set up click handler\n  if (el.__toggle) {\n    el.removeEventListener('click', el.__toggle)\n  }\n  el.__toggle = () => toggle(targets, el)\n  el.addEventListener('click', el.__toggle)\n\n  // Update attributes\n  el.setAttribute('aria-controls', targets.join(' '))\n  checkVisibility(targets, el)\n}\n\nexport interface WithToggle extends HTMLElement {\n  __toggle: () => void\n}\n\nexport default {\n  mounted: handleUpdate,\n  updated: handleUpdate,\n  unmounted(el: WithToggle): void {\n    el.removeEventListener('click', el.__toggle)\n    el.removeAttribute('aria-controls')\n    el.removeAttribute('aria-expanded')\n  },\n} satisfies Directive<WithToggle>\n","import {type Directive} from 'vue'\nimport {\n  bind,\n  type ElementWithPopper,\n  resolveActiveStatus,\n  resolveContent,\n  resolveDirectiveProps,\n  unbind,\n} from '../utils/floatingUi'\n\nexport default {\n  mounted(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n    bind(el, binding, {\n      ...resolveDirectiveProps(binding, el),\n      ...text,\n    })\n  },\n  updated(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n\n    unbind(el)\n    bind(el, binding, {\n      ...resolveDirectiveProps(binding, el),\n      ...text,\n    })\n  },\n  beforeUnmount(el) {\n    unbind(el)\n  },\n} satisfies Directive<ElementWithPopper>\n","import {type Directive, type DirectiveBinding} from 'vue'\nimport {useScrollspy} from '../composables'\nimport {omit} from '../utils'\n\nexport interface ElementWithScrollspy extends HTMLElement {\n  $__scrollspy?: ReturnType<typeof useScrollspy>\n}\n\nconst bind = (el: ElementWithScrollspy, binding: Readonly<DirectiveBinding>) => {\n  if (el.$__scrollspy) el.$__scrollspy.cleanup()\n  const {arg, value} = binding\n  const isObject = typeof value === 'object' && value !== null\n  const content = arg\n    ? arg\n    : typeof value === 'string'\n      ? value\n      : isObject\n        ? value.content || value.element\n        : null\n  el.$__scrollspy = useScrollspy(content, el, isObject ? omit(value, ['content', 'element']) : {})\n}\n\nexport default {\n  mounted: bind,\n  updated: bind,\n  beforeUnmount(el) {\n    if (el.$__scrollspy) el.$__scrollspy.cleanup()\n  },\n} satisfies Directive<ElementWithScrollspy>\n","import {type Directive} from 'vue'\nimport {\n  bind,\n  type ElementWithPopper,\n  resolveActiveStatus,\n  resolveContent,\n  resolveDirectiveProps,\n  unbind,\n} from '../utils/floatingUi'\n\nexport default {\n  mounted(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n\n    bind(el, binding, {\n      noninteractive: true,\n      ...resolveDirectiveProps(binding, el),\n      title: text.title ?? text.content ?? '',\n      tooltip: isActive,\n    })\n  },\n  updated(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n    unbind(el)\n\n    bind(el, binding, {\n      noninteractive: true,\n      ...resolveDirectiveProps(binding, el),\n      title: text.title ?? text.content ?? '',\n      tooltip: isActive,\n    })\n  },\n  beforeUnmount(el) {\n    unbind(el)\n  },\n} satisfies Directive<ElementWithPopper>\n","<template>\n  <button\n    v-b-toggle=\"!props.disabled ? target : undefined\"\n    class=\"navbar-toggler\"\n    type=\"button\"\n    :class=\"computedClasses\"\n    :disabled=\"props.disabled\"\n    :aria-label=\"label\"\n    @click=\"onClick\"\n  >\n    <slot>\n      <span class=\"navbar-toggler-icon\" />\n    </slot>\n  </button>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BNavbarToggleProps} from '../../types'\nimport {vBToggle} from '../../directives'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BNavbarToggleProps>(), {\n  label: 'Toggle navigation',\n  disabled: false,\n  target: undefined,\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\ndefineSlots<{\n  // TODO this scoped slot is {expanded: boolean}\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  disabled: props.disabled,\n}))\n\nconst onClick = (e: Readonly<MouseEvent>): void => {\n  if (!props.disabled) {\n    emit('click', e)\n  }\n}\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"props.teleportDisabled\">\n    <BTransition\n      :no-fade=\"true\"\n      :trans-props=\"{\n        enterToClass: 'showing',\n        enterFromClass: '',\n        leaveToClass: 'hiding show',\n        leaveFromClass: 'show',\n      }\"\n      @before-enter=\"OnBeforeEnter\"\n      @after-enter=\"OnAfterEnter\"\n      @leave=\"onLeave\"\n      @after-leave=\"OnAfterLeave\"\n    >\n      <div\n        v-show=\"modelValue\"\n        :id=\"computedId\"\n        ref=\"element\"\n        aria-modal=\"true\"\n        role=\"dialog\"\n        :class=\"computedClasses\"\n        tabindex=\"-1\"\n        :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n        data-bs-backdrop=\"false\"\n        v-bind=\"$attrs\"\n      >\n        <template v-if=\"lazyShowing\">\n          <div v-if=\"!props.noHeader\" class=\"offcanvas-header\" :class=\"headerClass\">\n            <slot name=\"header\" v-bind=\"sharedSlots\">\n              <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n                <slot name=\"title\" v-bind=\"sharedSlots\">\n                  {{ title }}\n                </slot>\n              </h5>\n              <template v-if=\"!props.noHeaderClose\">\n                <BButton v-if=\"hasHeaderCloseSlot\" v-bind=\"headerCloseAttrs\" @click=\"hide('close')\">\n                  <slot name=\"header-close\" />\n                </BButton>\n                <BCloseButton\n                  v-else\n                  :aria-label=\"headerCloseLabel\"\n                  v-bind=\"headerCloseAttrs\"\n                  @click=\"hide('close')\"\n                />\n              </template>\n            </slot>\n          </div>\n          <div class=\"offcanvas-body\" :class=\"bodyClass\" v-bind=\"bodyAttrs\">\n            <slot v-bind=\"sharedSlots\" />\n          </div>\n          <div v-if=\"hasFooterSlot\" :class=\"footerClass\">\n            <slot name=\"footer\" v-bind=\"sharedSlots\" />\n          </div>\n        </template>\n      </div>\n    </BTransition>\n    <slot name=\"backdrop\">\n      <BOverlay\n        :blur=\"backdropBlur\"\n        :variant=\"backdropVariant\"\n        :show=\"showBackdrop\"\n        fixed\n        no-wrap\n        no-spinner\n        @click=\"hide('backdrop')\"\n      />\n    </slot>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {onKeyStroke, useEventListener, useFocus} from '@vueuse/core'\nimport {computed, nextTick, ref, toRef} from 'vue'\nimport {useId, useSafeScrollLock} from '../../composables'\nimport type {BOffcanvasProps} from '../../types'\nimport {BvTriggerableEvent, isEmptySlot} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BOverlay from '../BOverlay/BOverlay.vue'\nimport BTransition from '../BTransition/BTransition.vue'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BOffcanvasProps>(), {\n  backdrop: true,\n  backdropBlur: undefined,\n  backdropVariant: 'dark',\n  bodyAttrs: undefined,\n  bodyClass: undefined,\n  bodyScrolling: false,\n  footerClass: undefined,\n  headerClass: undefined,\n  headerCloseClass: undefined,\n  headerCloseLabel: 'Close',\n  headerCloseVariant: 'secondary',\n  id: undefined,\n  lazy: false,\n  noCloseOnBackdrop: false,\n  noCloseOnEsc: false,\n  noFocus: false,\n  noHeader: false,\n  noHeaderClose: false,\n  placement: 'start',\n  shadow: false,\n  teleportDisabled: false,\n  teleportTo: 'body',\n  title: undefined,\n})\n\nconst emit = defineEmits<{\n  'close': [value: BvTriggerableEvent]\n  'esc': [value: BvTriggerableEvent]\n  'hidden': [value: BvTriggerableEvent]\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': [value: BvTriggerableEvent]\n}>()\n\ntype SharedSlotsData = {\n  visible: boolean\n  placement: 'top' | 'bottom' | 'start' | 'end'\n  hide: (trigger?: string) => void\n}\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'backdrop'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'footer'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header-close'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'title'?: (props: SharedSlotsData) => any\n}>()\n\nconst modelValue = defineModel<boolean>({\n  default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\nuseSafeScrollLock(modelValue, () => props.bodyScrolling)\n\nconst element = ref<HTMLElement | null>(null)\n\nonKeyStroke(\n  'Escape',\n  () => {\n    hide('esc')\n  },\n  {target: element}\n)\n\nconst {focused} = useFocus(element, {\n  initialValue: modelValue.value && props.noFocus === false,\n})\n\nconst isActive = ref(modelValue.value)\nconst lazyLoadCompleted = ref(false)\n\nconst showBackdrop = toRef(() => props.backdrop === true && modelValue.value === true)\n\nconst lazyShowing = toRef(\n  () =>\n    props.lazy === false ||\n    (props.lazy === true && lazyLoadCompleted.value === true) ||\n    (props.lazy === true && modelValue.value === true)\n)\n\nconst hasHeaderCloseSlot = toRef(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n  {'text-reset': !hasHeaderCloseSlot.value},\n  props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n  variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n  class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = toRef(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n  // props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n  'offcanvas', // Remove when above check is fixed\n  `offcanvas-${props.placement}`,\n  {\n    show: modelValue.value && isActive.value === true,\n    [`shadow-${props.shadow}`]: !!props.shadow,\n  },\n])\n\nconst sharedSlots = computed<SharedSlotsData>(() => ({\n  visible: modelValue.value,\n  placement: props.placement,\n  hide,\n}))\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nconst hide = (trigger = '') => {\n  if (\n    (trigger === 'backdrop' && props.noCloseOnBackdrop) ||\n    (trigger === 'esc' && props.noCloseOnEsc)\n  ) {\n    emit('hide-prevented')\n    return\n  }\n\n  const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n  if (trigger === 'close') {\n    emit(trigger, event)\n  }\n  if (trigger === 'esc') {\n    emit(trigger, event)\n  }\n  emit('hide', event)\n\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    return\n  }\n\n  modelValue.value = false\n}\n\nconst show = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    modelValue.value = false\n    emit('show-prevented')\n    return\n  }\n  modelValue.value = true\n}\n\nconst focus = () => {\n  nextTick(() => {\n    if (props.noFocus === false) {\n      focused.value = true\n    }\n  })\n}\n\nconst OnBeforeEnter = () => show()\nconst OnAfterEnter = () => {\n  isActive.value = true\n  focus()\n  emit('shown', buildTriggerableEvent('shown'))\n  if (props.lazy === true) lazyLoadCompleted.value = true\n}\nconst onLeave = () => {\n  isActive.value = false\n}\nconst OnAfterLeave = () => {\n  emit('hidden', buildTriggerableEvent('hidden'))\n  if (props.lazy === true) lazyLoadCompleted.value = false\n}\nuseEventListener(element, 'bv-toggle', () => {\n  modelValue.value ? hide() : show()\n})\n\ndefineExpose({\n  hide,\n  show,\n})\n</script>\n","<template>\n  <ul\n    class=\"pagination\"\n    :class=\"computedWrapperClasses\"\n    role=\"menubar\"\n    :aria-disabled=\"props.disabled\"\n    :aria-label=\"ariaLabel || undefined\"\n  >\n    <ReusableButton.define v-slot=\"{button, li, text, clickHandler}\">\n      <li v-bind=\"li\">\n        <component v-bind=\"button\" :is=\"button.is\" @click=\"clickHandler\">\n          <slot\n            :name=\"text.name\"\n            :disabled=\"text.disabled\"\n            :page=\"text.page\"\n            :index=\"text.index\"\n            :active=\"text.active\"\n            :content=\"text.value\"\n          >\n            {{ text.value }}\n          </slot>\n        </component>\n      </li>\n    </ReusableButton.define>\n\n    <ReusableEllipsis.define>\n      <li v-bind=\"ellipsisProps.li\">\n        <span v-bind=\"ellipsisProps.span\">\n          <slot name=\"ellipsis-text\">\n            {{ ellipsisText || '...' }}\n          </slot>\n        </span>\n      </li>\n    </ReusableEllipsis.define>\n\n    <template v-for=\"button in buttons\" :key=\"`page-${button.number}`\">\n      <ReusableButton.reuse v-if=\"button === FIRST_BUTTON\" v-bind=\"firstButtonProps\" />\n      <ReusableButton.reuse v-else-if=\"button === PREV_BUTTON\" v-bind=\"prevButtonProps\" />\n      <ReusableButton.reuse v-else-if=\"button === NEXT_BUTTON\" v-bind=\"nextButtonProps\" />\n      <ReusableButton.reuse v-else-if=\"button === LAST_BUTTON\" v-bind=\"lastButtonProps\" />\n      <ReusableEllipsis.reuse v-else-if=\"button === ELLIPSIS_BUTTON\" />\n      <ReusableButton.reuse v-else v-bind=\"getPageButtonProps(button!)\" />\n    </template>\n  </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvEvent} from '../../utils'\nimport {computed, toRef, watch} from 'vue'\nimport type {BPaginationProps, ClassValue} from '../../types'\nimport {useAlignment} from '../../composables'\nimport {createReusableTemplate, useToNumber} from '@vueuse/core'\n\n// Threshold of limit size when we start/stop showing ellipsis\nconst ELLIPSIS_THRESHOLD = 3\n\nconst FIRST_BUTTON = -1\nconst PREV_BUTTON = -2\nconst NEXT_BUTTON = -3\nconst LAST_BUTTON = -4\nconst ELLIPSIS_BUTTON = -5\n\nconst props = withDefaults(defineProps<BPaginationProps>(), {\n  align: 'start',\n  ariaControls: undefined,\n  ariaLabel: 'Pagination',\n  disabled: false,\n  ellipsisClass: undefined,\n  ellipsisText: '\\u2026',\n  firstClass: undefined,\n  firstNumber: false,\n  firstText: '\\u00AB',\n  hideEllipsis: false,\n  hideGotoEndButtons: false,\n  labelFirstPage: 'Go to first page',\n  labelLastPage: 'Go to last page',\n  labelNextPage: 'Go to next page',\n  labelPage: 'Go to page',\n  labelPrevPage: 'Go to previous page',\n  lastClass: undefined,\n  lastNumber: false,\n  lastText: '\\u00BB',\n  limit: 5,\n  nextClass: undefined,\n  nextText: '\\u203A',\n  pageClass: undefined,\n  perPage: DEFAULT_PER_PAGE,\n  pills: false,\n  prevClass: undefined,\n  prevText: '\\u2039',\n  size: undefined,\n  totalRows: DEFAULT_TOTAL_ROWS,\n})\n\nconst emit = defineEmits<{\n  'page-click': [event: BvEvent, pageNumber: number]\n}>()\n\nconst modelValue = defineModel<number>({default: 1})\n\nconst limitNumber = useToNumber(() => props.limit, {nanToZero: true, method: 'parseInt'})\nconst perPageNumber = useToNumber(() => props.perPage, {nanToZero: true, method: 'parseInt'})\nconst totalRowsNumber = useToNumber(() => props.totalRows, {nanToZero: true, method: 'parseInt'})\nconst modelValueNumber = useToNumber(modelValue, {nanToZero: true, method: 'parseInt'})\n\nconst perPageSanitized = toRef(() => Math.max(perPageNumber.value || DEFAULT_PER_PAGE, 1))\nconst totalRowsSanitized = toRef(() => Math.max(totalRowsNumber.value || DEFAULT_TOTAL_ROWS, 0))\n// Use Active to on page-item to denote active tab\nconst numberOfPages = toRef(() => Math.ceil(totalRowsSanitized.value / perPageSanitized.value))\nconst computedFill = toRef(() => props.align === 'fill')\n// This doesn't use the computedFill util because TS cannot infer that it would never be 'fill'\nconst justifyAlign = toRef(() => (props.align === 'fill' ? 'start' : props.align))\n\nconst alignment = useAlignment(justifyAlign)\n\nconst isActivePage = (pageNumber: number) => pageNumber === modelValueNumber.value\nconst getTabIndex = (num: number) => (props.disabled ? null : isActivePage(num) ? '0' : '-1')\n\nconst checkDisabled = (num: number) =>\n  props.disabled ||\n  isActivePage(num) ||\n  modelValueNumber.value < 1 ||\n  // Check if the number is out of bounds\n  num < 1 ||\n  num > numberOfPages.value\n\nconst firstDisabled = computed(() => checkDisabled(1))\nconst prevDisabled = computed(() => checkDisabled(modelValueNumber.value - 1))\nconst lastDisabled = computed(() => checkDisabled(numberOfPages.value))\nconst nextDisabled = computed(() => checkDisabled(modelValueNumber.value + 1))\n\nconst getBaseButtonProps = ({\n  page,\n  classVal,\n  dis,\n  slotName,\n  textValue,\n  tabIndex,\n  label,\n  position,\n  isActive,\n  role,\n  hidden,\n}: {\n  page: number\n  dis: boolean\n  classVal: ClassValue\n  slotName: string\n  textValue?: string\n  tabIndex?: string\n  label?: string\n  position?: number\n  isActive?: boolean\n  role?: string\n  hidden?: boolean\n}) => ({\n  li: {\n    'class': [\n      'page-item',\n      {\n        'active': isActive,\n        'disabled': dis,\n        'flex-fill': computedFill.value,\n        'd-flex': computedFill.value && !dis,\n      },\n      classVal,\n    ],\n    role,\n    'aria-hidden': hidden,\n  },\n  button: {\n    'is': dis ? 'span' : 'button',\n    'class': ['page-link', {'flex-grow-1': !dis && computedFill.value}],\n    'aria-label': label,\n    'aria-controls': props.ariaControls || undefined,\n    'aria-disabled': dis ? true : undefined,\n    'aria-posinset': position,\n    'aria-setsize': position ? numberOfPages.value : undefined,\n    'role': 'menuitem',\n    'type': dis ? undefined : 'button',\n    'tabindex': dis ? undefined : tabIndex,\n  },\n  text: {\n    name: slotName,\n    active: isActive,\n    value: textValue ?? page,\n    page,\n    disabled: dis,\n    index: page - 1,\n    content: textValue ? undefined : page,\n  },\n  clickHandler: (e: Readonly<MouseEvent>) => pageClick(e, page),\n})\n\nconst getButtonProps = ({\n  page,\n  classVal,\n  dis,\n  slotName,\n  textValue,\n  label,\n}: {\n  page: number\n  dis: boolean\n  classVal: ClassValue\n  slotName: string\n  textValue?: string\n  label: string\n}) => getBaseButtonProps({page, classVal, dis, slotName, textValue, label, tabIndex: '-1'})\n\nconst getPageButtonProps = (page: number) =>\n  getBaseButtonProps({\n    page,\n    dis: props.disabled,\n    classVal: props.pageClass,\n    slotName: 'page',\n    label: props.labelPage ? `${props.labelPage} ${page}` : undefined,\n    tabIndex: getTabIndex(page) ?? undefined,\n    position: page,\n    isActive: isActivePage(page),\n  })\n\nconst firstButtonProps = computed(() =>\n  getButtonProps({\n    page: 1,\n    dis: firstDisabled.value,\n    classVal: props.firstClass,\n    slotName: 'first-text',\n    textValue: props.firstText,\n    label: props.labelFirstPage,\n  })\n)\nconst prevButtonProps = computed(() =>\n  getButtonProps({\n    page: Math.max(modelValueNumber.value - 1, 1),\n    dis: prevDisabled.value,\n    classVal: props.prevClass,\n    slotName: 'prev-text',\n    textValue: props.prevText,\n    label: props.labelPrevPage,\n  })\n)\nconst nextButtonProps = computed(() =>\n  getButtonProps({\n    page: Math.min(modelValueNumber.value + 1, numberOfPages.value),\n    dis: nextDisabled.value,\n    classVal: props.nextClass,\n    slotName: 'next-text',\n    textValue: props.nextText,\n    label: props.labelNextPage,\n  })\n)\nconst lastButtonProps = computed(() =>\n  getButtonProps({\n    page: numberOfPages.value,\n    dis: lastDisabled.value,\n    classVal: props.lastClass,\n    slotName: 'last-text',\n    textValue: props.lastText,\n    label: props.labelLastPage,\n  })\n)\n\nconst ReusableButton = createReusableTemplate<ReturnType<typeof getButtonProps>>()\nconst ReusableEllipsis = createReusableTemplate()\n\nconst ellipsisProps = computed(() => ({\n  li: {\n    class: [\n      'page-item',\n      'disabled',\n      'bv-d-xs-down-none',\n      computedFill.value ? 'flex-fill' : '',\n      props.ellipsisClass,\n    ],\n    role: 'separator',\n  },\n  span: {\n    class: ['page-link'],\n  },\n}))\n\nconst computedWrapperClasses = computed(() => [\n  alignment.value,\n  {\n    [`pagination-${props.size}`]: props.size !== undefined,\n    'b-pagination-pills': props.pills,\n  },\n])\n\nconst pagination = computed(() => ({\n  pageSize: perPageSanitized.value,\n  totalRows: totalRowsNumber.value,\n  numberOfPages: numberOfPages.value,\n}))\n\nconst pageClick = (event: Readonly<MouseEvent>, pageNumber: number) => {\n  if (pageNumber === modelValueNumber.value) return\n\n  const clickEvent = new BvEvent('page-click', {\n    cancelable: true,\n    target: event.target,\n  })\n  emit('page-click', clickEvent, pageNumber)\n\n  if (clickEvent.defaultPrevented) return\n\n  modelValue.value = pageNumber\n\n  //    nextTick(() => {\n  //  if (isVisible(target) && un_element.contains(target)) {\n  //  attemptFocus(target)\n  //} else {\n  //this.focusCurrent()\n  //}\n  // })\n}\n\nwatch(modelValueNumber, (newValue) => {\n  const sanitizeCurrentPage = (value: number, numberOfPages: number) => {\n    const page = value || 1\n    return page > numberOfPages ? numberOfPages : page < 1 ? 1 : page\n  }\n  const calculatedValue = sanitizeCurrentPage(newValue, numberOfPages.value)\n  if (calculatedValue === modelValue.value) return\n  modelValue.value = calculatedValue\n})\n\nwatch(pagination, (oldValue, newValue) => {\n  if (newValue.pageSize !== oldValue.pageSize && newValue.totalRows === oldValue.totalRows) {\n    // If the page size changes, reset to page 1\n    modelValue.value = 1\n  } else if (\n    newValue.numberOfPages !== oldValue.numberOfPages &&\n    modelValueNumber.value > newValue.numberOfPages\n  ) {\n    // If `numberOfPages` changes and is less than\n    // the `currentPage` number, reset to page 1\n    modelValue.value = 1\n  }\n})\n\nconst buttons = computed(() => {\n  // The idea here is to create an array of all the buttons on the page control.\n  // This was we can keep the invariants in one place and the template code just\n  // iterates over the array.\n\n  const pages = numberOfPages.value\n  const {value} = modelValueNumber\n  const limit = limitNumber.value\n  const firstPage = props.firstNumber ? 1 : 0\n  const lastPage = props.lastNumber ? 1 : 0\n  const hideEllipsis = props.hideEllipsis || limit <= ELLIPSIS_THRESHOLD\n  const hideEndButtons = props.hideGotoEndButtons ? 1 : 0\n\n  // The first case is when all of the page buttons fit on the control, this is\n  //  the simplest case and the only one that will create an array smaller than\n  //  Limit + 4 - hideEndButtons *2 (the [first, last,] prev, next buttons)\n\n  if (pages < limit + firstPage + lastPage) {\n    return [\n      !firstPage && !hideEndButtons ? FIRST_BUTTON : null,\n      PREV_BUTTON,\n      ...Array.from({length: pages}, (_, index) => index + 1),\n      NEXT_BUTTON,\n      !lastPage && !hideEndButtons ? LAST_BUTTON : null,\n    ].filter((x) => x !== null)\n  }\n\n  // All of the remaining cases result in an array that is exactly limit + 4 - hideEndButtons * 2 in length, so create\n  //  the array upfront and set up the beginning and end buttons, then fill the rest for each case\n\n  const buttons = Array.from({length: limit + 4 - hideEndButtons * 2})\n  if (!hideEndButtons) {\n    if (!firstPage) {\n      buttons[0] = FIRST_BUTTON\n      buttons[1] = PREV_BUTTON\n    } else {\n      buttons[0] = PREV_BUTTON\n      buttons[1] = 1\n    }\n\n    if (!lastPage) {\n      buttons[buttons.length - 1] = LAST_BUTTON\n      buttons[buttons.length - 2] = NEXT_BUTTON\n    } else {\n      buttons[buttons.length - 1] = NEXT_BUTTON\n      buttons[buttons.length - 2] = pages\n    }\n  } else {\n    buttons[0] = PREV_BUTTON\n    buttons[buttons.length - 1] = NEXT_BUTTON\n  }\n\n  // The next case is where the buttons page buttons start at the begginning, with\n  //  no ellipsis at the beginning, but one at the end\n\n  const halfLimit = Math.floor(limit / 2)\n  if (value <= halfLimit + firstPage) {\n    for (let index = 1; index <= limit; index++) {\n      buttons[index + 1 - hideEndButtons] = index + firstPage\n    }\n\n    if (!hideEllipsis) {\n      buttons[buttons.length - 3] = ELLIPSIS_BUTTON\n    }\n  }\n\n  // And then we have the case where the page buttons go up to the end, with no\n  //  ellipsis at the end, but one at the beginning\n\n  if (value > pages - halfLimit - lastPage) {\n    const start = pages - (limit - 1) - lastPage\n    for (let index = 0; index < limit; index++) {\n      buttons[index + 2 - hideEndButtons] = start + index\n    }\n\n    if (!hideEllipsis) {\n      buttons[2] = ELLIPSIS_BUTTON\n    }\n  }\n\n  // Finally we have the case where we have ellipsis at both ends\n  if (!buttons[2]) {\n    // Is there a more elegant way to ceck that we're in the final case?\n    const start = value - Math.floor(limit / 2)\n    for (let index = 0; index < limit; index++) {\n      buttons[index + 2 - hideEndButtons] = start + index\n    }\n\n    if (!hideEllipsis) {\n      buttons[2] = ELLIPSIS_BUTTON\n      buttons[buttons.length - 3] = ELLIPSIS_BUTTON\n    }\n  }\n\n  // Enable sanity check for debugging purposes\n  // for (let i = 0; i < buttons.length; i++) {\n  //   if (!buttons[i]) {\n  //     console.log(\n  //       `Failed: button == ${i}, limit=${limit}, pages=${pages}, firstPage=${firstPage}, lastPage=${lastPage}, value=${value}`\n  //     )\n  //   }\n  // }\n\n  return buttons as number[]\n})\n</script>\n\n<script lang=\"ts\">\nconst DEFAULT_PER_PAGE = 20\nconst DEFAULT_TOTAL_ROWS = 0\n</script>\n","<template>\n  <component :is=\"wrapperTag\" :class=\"wrapperClasses\">\n    <component\n      v-bind=\"$attrs\"\n      :is=\"tag\"\n      class=\"placeholder\"\n      :class=\"computedClasses\"\n      :style=\"computedStyle\"\n    />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, toRef} from 'vue'\nimport type {BPlaceholderProps} from '../../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BPlaceholderProps>(), {\n  animation: undefined,\n  cols: 12,\n  size: 'md',\n  tag: 'span',\n  variant: null,\n  width: undefined,\n  wrapperTag: 'span',\n})\n\nconst widthString = toRef(() =>\n  props.width === undefined\n    ? undefined\n    : typeof props.width === 'number'\n      ? props.width.toString()\n      : props.width.replace('%', '')\n)\n\nconst colsString = toRef(() =>\n  props.cols === undefined\n    ? undefined\n    : typeof props.cols === 'number'\n      ? props.cols.toString()\n      : props.cols\n)\n\nconst computedClasses = computed(() => ({\n  [`col-${colsString.value}`]: colsString.value !== undefined && widthString.value === undefined,\n  [`bg-${props.variant}`]: props.variant !== null,\n  [`placeholder-${props.size}`]: props.size !== 'md',\n}))\n\nconst wrapperClasses = computed(() => ({\n  [`placeholder-${props.animation}`]: props.animation !== undefined,\n}))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  width: widthString.value === undefined ? undefined : `${widthString.value}%`,\n}))\n</script>\n","<template>\n  <BPlaceholder\n    class=\"btn disabled\"\n    :class=\"computedClasses\"\n    :animation=\"animation\"\n    :width=\"width\"\n    :cols=\"cols\"\n    :tag=\"tag\"\n    :style=\"{'cursor': 'wait', 'pointer-events': 'auto'}\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport BPlaceholder from './BPlaceholder.vue'\nimport type {BPlaceholderButtonProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BPlaceholderButtonProps>(), {\n  animation: undefined,\n  cols: undefined,\n  tag: 'div',\n  variant: 'primary',\n  width: undefined,\n})\n\nconst computedClasses = computed(() => ({\n  [`btn-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <BCard :img-bottom=\"imgBottom\">\n    <template v-if=\"!props.noImg\" #img>\n      <slot name=\"img\">\n        <BCardImg\n          :blank=\"!imgSrc ? true : false\"\n          :blank-color=\"imgBlankColor\"\n          :height=\"!imgSrc ? imgHeight : undefined\"\n          :src=\"imgSrc\"\n          :top=\"!imgBottom\"\n          :bottom=\"imgBottom\"\n          :style=\"{cursor: 'wait'}\"\n        />\n      </slot>\n    </template>\n\n    <template v-if=\"!props.noHeader\" #header>\n      <slot name=\"header\">\n        <BPlaceholder\n          :width=\"headerWidth\"\n          :variant=\"headerVariant\"\n          :animation=\"headerAnimation\"\n          :size=\"headerSize\"\n        />\n      </slot>\n    </template>\n    <slot>\n      <BPlaceholder cols=\"7\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"4\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"4\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"6\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"8\" v-bind=\"defaultAttrs\" />\n    </slot>\n    <template v-if=\"!props.noFooter\" #footer>\n      <slot name=\"footer\">\n        <component\n          :is=\"footerComponent\"\n          :width=\"footerWidth\"\n          :animation=\"footerAnimation\"\n          :size=\"props.noButton ? footerSize : undefined\"\n          :variant=\"footerVariant\"\n        />\n      </slot>\n    </template>\n  </BCard>\n</template>\n\n<script setup lang=\"ts\">\nimport BCard from '../BCard/BCard.vue'\nimport BCardImg from '../BCard/BCardImg.vue'\nimport BPlaceholder from './BPlaceholder.vue'\nimport BPlaceholderButton from './BPlaceholderButton.vue'\nimport type {BPlaceholderCardProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(defineProps<BPlaceholderCardProps>(), {\n  animation: undefined,\n  footerAnimation: undefined,\n  footerSize: 'md',\n  footerVariant: undefined,\n  footerWidth: 100,\n  headerAnimation: undefined,\n  headerSize: 'md',\n  headerVariant: undefined,\n  headerWidth: 100,\n  imgBlankColor: '#868e96',\n  imgBottom: false,\n  imgHeight: 100,\n  imgSrc: undefined,\n  noButton: false,\n  noFooter: false,\n  noHeader: false,\n  noImg: false,\n  size: 'md',\n  variant: undefined,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  footer?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  img?: (props: Record<string, never>) => any\n}>()\n\nconst defaultAttrs = computed(() => ({\n  animation: props.animation,\n  size: props.size,\n  variant: props.variant,\n}))\n\nconst footerComponent = toRef(() => (!props.noButton ? BPlaceholderButton : BPlaceholder))\n</script>\n","<template>\n  <!-- tables definitions are shared. Can't use createReusableTemplate cause it becomes a non-root node -->\n  <div v-if=\"isResponsive\" :class=\"responsiveClasses\" :style=\"responsiveStyles\">\n    <table v-bind=\"tableAttrs\">\n      <slot />\n    </table>\n  </div>\n  <table v-else v-bind=\"tableAttrs\">\n    <slot />\n  </table>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type StyleValue} from 'vue'\nimport type {BTableSimpleProps} from '../../types'\nimport {useNumberishToStyle} from '../../composables'\n\nconst defaultStickyHeaderHeight = '300px'\n\n// TODO alphabetize the lists for tables\n// TODO all table things do not declare their props\n// TODO some props are not used. ex id, fixed, etc\n// TODO Attrs fallthrough will attach to either responsive or table, but you can't assign attrs to table if it is responsive. So we will need an attrs & class\nconst props = withDefaults(defineProps<BTableSimpleProps>(), {\n  borderVariant: null,\n  tableClass: undefined,\n  variant: null,\n  bordered: false,\n  borderless: false,\n  captionTop: false,\n  dark: false,\n  hover: false,\n  id: undefined,\n  noBorderCollapse: false,\n  outlined: false,\n  fixed: false,\n  responsive: false,\n  stacked: false,\n  striped: false,\n  stripedColumns: false,\n  small: false,\n  stickyHeader: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n  props.tableClass,\n  'table',\n  'b-table',\n  {\n    'table-bordered': props.bordered,\n    'table-borderless': props.borderless,\n    [`border-${props.borderVariant}`]: props.borderVariant !== null,\n    'caption-top': props.captionTop,\n    'table-dark': props.dark,\n    'table-hover': props.hover,\n    'b-table-stacked': props.stacked === true,\n    [`b-table-stacked-${props.stacked}`]: typeof props.stacked === 'string',\n    'table-striped': props.striped,\n    'table-sm': props.small,\n    [`table-${props.variant}`]: props.variant !== null,\n    'table-striped-columns': props.stripedColumns,\n  },\n])\nconst tableAttrs = computed(() => ({\n  id: props.id,\n  class: computedClasses.value,\n}))\n\nconst computedSticky = useNumberishToStyle(\n  computed(\n    () => (props.stickyHeader === true ? defaultStickyHeaderHeight : props.stickyHeader) || NaN\n  )\n)\nconst stickyIsValid = computed(() => props.stickyHeader !== false)\n\nconst isResponsive = computed(() => props.responsive !== false || stickyIsValid.value)\nconst responsiveStyles = computed<StyleValue | undefined>(() =>\n  stickyIsValid.value ? {maxHeight: computedSticky.value} : undefined\n)\nconst responsiveClasses = computed(() => ({\n  'table-responsive': props.responsive === true,\n  [`table-responsive-${props.responsive}`]: typeof props.responsive === 'string',\n  'b-table-sticky-header': stickyIsValid.value,\n}))\n</script>\n","<template>\n  <BTableSimple>\n    <slot v-if=\"!props.hideHeader\" name=\"thead\">\n      <thead>\n        <tr>\n          <th v-for=\"(_, i) in computedHeaderColumnsLength\" :key=\"i\">\n            <BPlaceholder\n              :size=\"headerSize\"\n              :variant=\"headerVariant\"\n              :animation=\"headerAnimation\"\n              :width=\"headerCellWidth\"\n            />\n          </th>\n        </tr>\n      </thead>\n    </slot>\n    <slot>\n      <tbody>\n        <tr v-for=\"(_, j) in rowsNumber\" :key=\"j\">\n          <td v-for=\"(__, k) in columnsNumber\" :key=\"k\">\n            <BPlaceholder\n              :size=\"size\"\n              :variant=\"variant\"\n              :animation=\"animation\"\n              :width=\"cellWidth\"\n            />\n          </td>\n        </tr>\n      </tbody>\n    </slot>\n    <slot v-if=\"props.showFooter\" name=\"tfoot\">\n      <tfoot>\n        <tr>\n          <th v-for=\"(_, l) in computedFooterColumnsLength\" :key=\"l\">\n            <BPlaceholder\n              :size=\"footerSize\"\n              :variant=\"footerVariant\"\n              :animation=\"footerAnimation\"\n              :width=\"footerCellWidth\"\n            />\n          </th>\n        </tr>\n      </tfoot>\n    </slot>\n  </BTableSimple>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport type {BPlaceholderTableProps} from '../../types'\nimport BTableSimple from '../BTable/BTableSimple.vue'\nimport BPlaceholder from './BPlaceholder.vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BPlaceholderTableProps>(), {\n  animation: undefined,\n  cellWidth: 100,\n  columns: 5,\n  footerAnimation: undefined,\n  footerCellWidth: 100,\n  footerColumns: undefined,\n  footerSize: 'md',\n  footerVariant: undefined,\n  headerAnimation: undefined,\n  headerCellWidth: 100,\n  headerColumns: undefined,\n  headerSize: 'md',\n  headerVariant: undefined,\n  hideHeader: false,\n  rows: 3,\n  showFooter: false,\n  size: 'md',\n  variant: undefined,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  tfoot?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  thead?: (props: Record<string, never>) => any\n}>()\n\nconst columnsToNumber = useToNumber(() => props.columns)\nconst rowsToNumber = useToNumber(() => props.rows)\nconst computedHeaderColumns = toRef(() => props.headerColumns ?? NaN)\nconst computedFooterColumns = toRef(() => props.footerColumns ?? NaN)\nconst headerColumnsNumber = useToNumber(computedHeaderColumns)\nconst footerColumnsNumber = useToNumber(computedFooterColumns)\n\nconst columnsNumber = toRef(() => columnsToNumber.value || 5)\nconst rowsNumber = toRef(() => rowsToNumber.value || 3)\n\nconst computedHeaderColumnsLength = toRef(() =>\n  props.headerColumns === undefined ? columnsNumber.value : headerColumnsNumber.value\n)\nconst computedFooterColumnsLength = toRef(() =>\n  props.footerColumns === undefined ? columnsNumber.value : footerColumnsNumber.value\n)\n</script>\n","<template>\n  <slot v-if=\"props.loading\" name=\"loading\" />\n  <slot v-else />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BPlaceholderWrapperProps} from '../../types'\n\nconst props = withDefaults(defineProps<BPlaceholderWrapperProps>(), {\n  loading: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  loading?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <component :is=\"tag\" class=\"row\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script lang=\"ts\">\nimport {computed, defineComponent, type PropType, type SlotsType} from 'vue'\nimport {getBreakpointProps, getClasses} from '../utils'\nimport type {AlignmentContent, AlignmentJustifyContent, AlignmentVertical} from '../types'\nimport {useAlignment} from '../composables'\n\nconst rowColsProps = getBreakpointProps('cols', [''], {type: [String, Number], default: null})\n\nexport default defineComponent({\n  name: 'BRow',\n  slots: Object as SlotsType<{\n    default?: Record<string, never>\n  }>,\n  props: {\n    tag: {type: String, default: 'div'},\n    gutterX: {type: String, default: null},\n    gutterY: {type: String, default: null},\n    noGutters: {type: Boolean, default: false},\n    alignV: {type: String as PropType<AlignmentVertical>, default: null},\n    alignH: {type: String as PropType<AlignmentJustifyContent>, default: null},\n    alignContent: {type: String as PropType<AlignmentContent>, default: null},\n    ...rowColsProps,\n  },\n  setup(props) {\n    const alignment = useAlignment(() => props.alignH)\n\n    const rowColsClasses = computed(() => getClasses(props, rowColsProps, 'cols', 'row-cols'))\n\n    const computedClasses = computed(() => [\n      rowColsClasses.value,\n      {\n        [`gx-${props.gutterX}`]: props.gutterX !== null,\n        [`gy-${props.gutterY}`]: props.gutterY !== null,\n        'g-0': props.noGutters,\n        [`align-items-${props.alignV}`]: props.alignV !== null,\n        [alignment.value]: props.alignH !== null,\n        [`align-content-${props.alignContent}`]: props.alignContent !== null,\n      },\n    ])\n\n    return {\n      computedClasses,\n    }\n  },\n})\n</script>\n","import type {ClassValue, ColorVariant, LiteralUnion, MaybePromise} from '.'\nimport type {StyleValue} from 'vue'\n\nexport type TableItem<T = Record<string, unknown>> = T & {\n  _rowVariant?: ColorVariant | null\n  _cellVariants?: Partial<Record<keyof T, ColorVariant>>\n  _showDetails?: boolean\n}\n\nexport const isTableItem = (value: unknown): value is TableItem =>\n  typeof value === 'object' && value !== null\n\n// undefined means no sorting\nexport type BTableSortByOrder = 'desc' | 'asc' | undefined\n\nexport type BTableSortBy = {\n  order: BTableSortByOrder\n  key: string\n  comparer?: (a: string, b: string) => number\n}\n\nexport type BTableProviderContext = {\n  sortBy: BTableSortBy[] | undefined\n  filter: string | undefined\n  currentPage: number\n  perPage: number\n}\n\nexport type BTableProvider<T> = (\n  context: Readonly<BTableProviderContext>\n) => MaybePromise<T[] | undefined>\n\nexport type TableFieldFormatter<T> = (value: unknown, key: string, item: T) => string\n\nexport type TableFieldAttribute<T> =\n  | Record<string, unknown>\n  | ((value: unknown, key: string, item: T) => Record<string, unknown>)\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TableField<T = any> = {\n  key: LiteralUnion<keyof T>\n  label?: string\n  headerTitle?: string\n  headerAbbr?: string\n  class?: ClassValue\n  formatter?: TableFieldFormatter<T>\n  sortable?: boolean\n  sortKey?: string\n  sortDirection?: string\n  sortByFormatted?: boolean | TableFieldFormatter<T>\n  filterByFormatted?: boolean\n  tdClass?: ClassValue\n  thClass?: ClassValue\n  thStyle?: StyleValue\n  variant?: ColorVariant | null\n  tdAttr?: TableFieldAttribute<T>\n  thAttr?: TableFieldAttribute<T>\n  isRowHeader?: boolean\n  stickyColumn?: boolean\n}\n\nexport type TableFieldRaw<T = unknown> = T extends object\n  ? LiteralUnion<keyof T> | TableField<T>\n  : string | TableField\n\nexport const isTableField = <T>(value: unknown): value is TableField<T> =>\n  typeof value === 'object' && value !== null && 'key' in value\n\nexport const isTableFieldRaw = <T>(value: unknown): value is TableFieldRaw<T> =>\n  typeof value === 'string' || isTableField(value)\n\nexport type NoProviderTypes = 'paging' | 'sorting' | 'filtering'\n","<template>\n  <tbody :class=\"computedClasses\">\n    <slot />\n  </tbody>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTbodyProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BTbodyProps>(), {\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`thead-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <td\n    :scope=\"scope\"\n    :class=\"computedClasses\"\n    :colspan=\"colspan\"\n    :rowspan=\"rowspan\"\n    :data-label=\"stackedHeading\"\n  >\n    <div v-if=\"stackedHeading\">\n      <slot />\n    </div>\n    <slot v-else />\n  </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTdProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(defineProps<BTdProps>(), {\n  colspan: undefined,\n  rowspan: undefined,\n  stackedHeading: undefined,\n  stickyColumn: false,\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': props.stickyColumn,\n  'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n\nconst scope = toRef(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n  <tfoot :class=\"computedClasses\">\n    <slot />\n  </tfoot>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTfootProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BTfootProps>(), {\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <th\n    :scope=\"scope\"\n    :class=\"computedClasses\"\n    :colspan=\"colspan\"\n    :rowspan=\"rowspan\"\n    :data-label=\"stackedHeading\"\n  >\n    <div v-if=\"stackedHeading !== undefined\">\n      <slot />\n    </div>\n    <slot v-else />\n  </th>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BThProps} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(defineProps<BThProps>(), {\n  colspan: undefined,\n  rowspan: undefined,\n  stackedHeading: undefined,\n  stickyColumn: false,\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': props.stickyColumn,\n  'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n\nconst scope = toRef(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n  <thead :class=\"computedClasses\">\n    <slot />\n  </thead>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTheadProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BTheadProps>(), {\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <tr :class=\"computedClasses\">\n    <slot />\n  </tr>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTrProps} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(defineProps<BTrProps>(), {\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <BTableSimple\n    :id=\"id\"\n    :bordered=\"bordered\"\n    :borderless=\"borderless\"\n    :border-variant=\"borderVariant\"\n    :caption-top=\"captionTop\"\n    :dark=\"dark\"\n    :fixed=\"fixed\"\n    :hover=\"hover\"\n    :no-border-collapse=\"noBorderCollapse\"\n    :outlined=\"outlined\"\n    :responsive=\"responsive\"\n    :small=\"small\"\n    :stacked=\"props.stacked\"\n    :sticky-header=\"stickyHeader\"\n    :striped=\"striped\"\n    :table-class=\"computedTableClasses\"\n    :variant=\"variant\"\n    :striped-columns=\"stripedColumns\"\n  >\n    <BThead v-show=\"showComputedHeaders\" :variant=\"headVariant\" :class=\"theadClass\">\n      <slot v-if=\"$slots['thead-top']\" name=\"thead-top\" />\n      <BTr :variant=\"headRowVariant\" :class=\"theadTrClass\">\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :variant=\"field.variant\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          v-bind=\"field.thAttr\"\n          @click=\"headerClicked(field, $event)\"\n        >\n          <slot\n            :name=\"$slots[`head(${String(field.key)})`] ? `head(${String(field.key)})` : 'head()'\"\n            :label=\"field.label\"\n            :column=\"field.key\"\n            :field=\"field\"\n            :is-foot=\"false\"\n          >\n            {{ getTableFieldHeadLabel(field) }}\n          </slot>\n        </BTh>\n      </BTr>\n      <BTr v-if=\"$slots['thead-sub']\">\n        <BTd\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :variant=\"field.variant\"\n          :class=\"[field.class, field.thClass]\"\n        >\n          <slot name=\"thead-sub\" :items=\"computedFields\" v-bind=\"field\">\n            {{ field.label }}\n          </slot>\n        </BTd>\n      </BTr>\n    </BThead>\n    <BTbody :class=\"tbodyClass\">\n      <slot\n        name=\"custom-body\"\n        :fields=\"computedFields\"\n        :items=\"items\"\n        :columns=\"computedFields.length\"\n      >\n        <BTr v-if=\"!props.stacked && $slots['top-row']\">\n          <slot name=\"top-row\" />\n        </BTr>\n\n        <template v-for=\"(item, itemIndex) in items\" :key=\"itemIndex\">\n          <BTr\n            :class=\"getRowClasses(item, 'row')\"\n            :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n            @click=\"!filterEvent($event) && emit('row-clicked', item, itemIndex, $event)\"\n            @dblclick=\"!filterEvent($event) && emit('row-dbl-clicked', item, itemIndex, $event)\"\n            @mouseenter=\"!filterEvent($event) && emit('row-hovered', item, itemIndex, $event)\"\n            @mouseleave=\"!filterEvent($event) && emit('row-unhovered', item, itemIndex, $event)\"\n          >\n            <BTd\n              v-for=\"field in computedFields\"\n              :key=\"field.key\"\n              :variant=\"\n                (isTableItem(item) ? item._cellVariants?.[field.key as string] : false)\n                  ? null\n                  : field.variant\n              \"\n              :class=\"getFieldRowClasses(field, item)\"\n              v-bind=\"itemAttributes(item, String(field.key), field.tdAttr)\"\n            >\n              <label v-if=\"props.stacked && props.labelStacked\" class=\"b-table-stacked-label\">\n                {{ getTableFieldHeadLabel(field) }}\n              </label>\n              <slot\n                :name=\"\n                  $slots[`cell(${String(field.key)})`] ? `cell(${String(field.key)})` : 'cell()'\n                \"\n                :value=\"get(item, String(field.key))\"\n                :index=\"itemIndex\"\n                :item=\"item\"\n                :field=\"field\"\n                :items=\"items\"\n                :toggle-details=\"\n                  () => {\n                    toggleRowDetails(item)\n                  }\n                \"\n                :details-showing=\"isTableItem(item) ? detailsMap.get(item) ?? false : false\"\n              >\n                <template v-if=\"!$slots[`cell(${String(field.key)})`] && !$slots['cell()']\">\n                  {{ formatItem(item, String(field.key), field.formatter) }}\n                </template>\n              </slot>\n            </BTd>\n          </BTr>\n\n          <template\n            v-if=\"isTableItem(item) && detailsMap.get(item) === true && $slots['row-details']\"\n          >\n            <BTr aria-hidden=\"true\" role=\"presentation\" class=\"d-none\" />\n            <BTr :class=\"getRowClasses(item, 'row-details')\" :variant=\"item._rowVariant\">\n              <BTd :colspan=\"computedFieldsTotal\">\n                <slot\n                  name=\"row-details\"\n                  :item=\"item\"\n                  :toggle-details=\"\n                    () => {\n                      toggleRowDetails(item)\n                    }\n                  \"\n                  :fields=\"fields\"\n                  :index=\"itemIndex\"\n                />\n              </BTd>\n            </BTr>\n          </template>\n        </template>\n        <BTr v-if=\"props.showEmpty && items.length === 0\" class=\"b-table-empty-slot\">\n          <BTd :colspan=\"computedFieldsTotal\">\n            <slot name=\"empty\" :items=\"items\">\n              {{ emptyText }}\n            </slot>\n          </BTd>\n        </BTr>\n        <BTr v-if=\"!props.stacked && $slots['bottom-row']\">\n          <slot name=\"bottom-row\" />\n        </BTr>\n      </slot>\n    </BTbody>\n    <BTfoot v-if=\"props.footClone\" :variant=\"footVariant\" :class=\"tfootClass\">\n      <BTr :variant=\"footRowVariant\" :class=\"tfootTrClass\">\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          :variant=\"field.variant\"\n          v-bind=\"field.thAttr\"\n          @click=\"headerClicked(field, $event, true)\"\n        >\n          <div class=\"d-inline-flex flex-nowrap align-items-center gap-1\">\n            <div>\n              <slot\n                :name=\"\n                  $slots[`foot(${String(field.key)})`] ? `foot(${String(field.key)})` : 'foot()'\n                \"\n                :label=\"field.label\"\n                :column=\"field.key\"\n                :field=\"field\"\n                :is-foot=\"true\"\n              >\n                {{ getTableFieldHeadLabel(field) }}\n              </slot>\n            </div>\n          </div>\n        </BTh>\n      </BTr>\n    </BTfoot>\n    <BTfoot v-else-if=\"$slots['custom-foot']\">\n      <slot\n        name=\"custom-foot\"\n        :fields=\"computedFields\"\n        :items=\"items\"\n        :columns=\"computedFields.length\"\n      />\n    </BTfoot>\n    <caption v-if=\"$slots['table-caption'] || caption\">\n      <slot name=\"table-caption\">\n        {{ caption }}\n      </slot>\n    </caption>\n  </BTableSimple>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport {computed, ref, toRef, watch} from 'vue'\nimport type {BTableLiteProps, TableField, TableFieldAttribute, TableItem} from '../../types'\nimport {isTableField, isTableItem} from '../../types/TableTypes'\nimport {filterEvent, formatItem, get, getTableFieldHeadLabel, startCase} from '../../utils'\nimport BTableSimple from './BTableSimple.vue'\nimport BTbody from './BTbody.vue'\nimport BTd from './BTd.vue'\nimport BTfoot from './BTfoot.vue'\nimport BTh from './BTh.vue'\nimport BThead from './BThead.vue'\nimport BTr from './BTr.vue'\n\nconst props = withDefaults(defineProps<BTableLiteProps<T>>(), {\n  caption: undefined,\n  align: undefined,\n  fields: () => [],\n  footClone: false,\n  items: () => [],\n  labelStacked: false,\n  showEmpty: false,\n  emptyText: 'There are no records to show',\n  emptyFilteredText: 'There are no records matching your request', // TODO not implemented\n  fieldColumnClass: undefined,\n  tbodyTrClass: undefined,\n  captionHtml: undefined,\n  detailsTdClass: undefined,\n  headVariant: undefined,\n  headRowVariant: undefined,\n  footRowVariant: undefined,\n  footVariant: undefined,\n  modelValue: undefined,\n  primaryKey: undefined,\n  tbodyClass: undefined,\n  tbodyTrAttr: undefined,\n  tfootClass: undefined,\n  tfootTrClass: undefined,\n  theadClass: undefined,\n  theadTrClass: undefined,\n  // BTableSimpleProps props\n  borderVariant: undefined,\n  tableClass: undefined,\n  variant: undefined,\n  bordered: undefined,\n  borderless: undefined,\n  captionTop: undefined,\n  dark: undefined,\n  hover: undefined,\n  id: undefined,\n  noBorderCollapse: undefined,\n  outlined: undefined,\n  fixed: undefined,\n  responsive: undefined,\n  stacked: undefined,\n  striped: undefined,\n  stripedColumns: undefined,\n  small: undefined,\n  stickyHeader: undefined,\n  // End BTableSimpleProps props\n})\n\nconst emit = defineEmits<{\n  'head-clicked': [key: string, field: TableField<T>, event: MouseEvent, isFooter: boolean]\n  'row-clicked': [item: T, index: number, event: MouseEvent]\n  'row-dbl-clicked': [item: T, index: number, event: MouseEvent]\n  'row-hovered': [item: T, index: number, event: MouseEvent]\n  'row-unhovered': [item: T, index: number, event: MouseEvent]\n}>()\n\nconst generateDetailsItem = (item: TableItem): [object, boolean | undefined] => [\n  item,\n  item._showDetails,\n]\nconst detailsMap = ref(\n  new WeakMap(\n    props.items.reduce(\n      (acc, el) => {\n        if (isTableItem(el)) {\n          acc.push(generateDetailsItem(el))\n        }\n        return acc\n      },\n      [] as [object, boolean | undefined][]\n    )\n  )\n)\nwatch(\n  () => props.items,\n  (items) => {\n    items.forEach((item) => {\n      if (!isTableItem(item)) return\n      const detailsItem = generateDetailsItem(item)\n      detailsMap.value.set(detailsItem[0], detailsItem[1])\n    })\n  },\n  {deep: true}\n)\n\nconst computedTableClasses = computed(() => [\n  props.tableClass,\n  {\n    [`align-${props.align}`]: props.align !== undefined,\n  },\n])\n\nconst computedFields = computed<(TableField & {_noHeader?: true})[]>(() => {\n  if (!props.fields.length && props.items.length) {\n    const [firstItem] = props.items\n    if (isTableItem(firstItem) || Array.isArray(firstItem)) {\n      return Object.keys(firstItem).map((k) => {\n        const label = startCase(k)\n        return {\n          key: k,\n          label,\n          tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n        }\n      })\n    }\n    // The items are primitives, so we just return a single empty field\n    // No header will be shown, as we don't know what to show\n    return [{key: '', _noHeader: true}]\n  }\n\n  return props.fields.map((f) => {\n    if (isTableField(f)) {\n      return {\n        ...(f as TableField),\n        tdAttr:\n          props.stacked === true\n            ? {'data-label': startCase(f.key as string), ...f.tdAttr}\n            : f.tdAttr,\n      }\n    }\n    const label = startCase(f as string)\n    return {\n      key: f as string,\n      label,\n      tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n    }\n  })\n})\nconst computedFieldsTotal = toRef(() => computedFields.value.length)\nconst showComputedHeaders = computed(() => {\n  // We only hide the header if all fields have _noHeader set to true. Which would be our doing\n  // This usually happens under a circumstance of displaying an array of primitives\n  // Under any other circumstance, I'm not sure how this would apply\n  if (computedFields.value.length > 0 && computedFields.value.every((el) => el._noHeader === true))\n    return false\n  return true\n})\n\nconst itemAttributes = (item: T, fieldKey: string, attr?: TableFieldAttribute<unknown>) => {\n  const val = get(item, fieldKey)\n  return attr && typeof attr === 'function' ? attr(val, fieldKey, item) : attr\n}\n\nconst headerClicked = (field: TableField<T>, event: Readonly<MouseEvent>, isFooter = false) => {\n  emit('head-clicked', field.key as string, field, event, isFooter)\n}\n\nconst toggleRowDetails = (tr: T) => {\n  if (isTableItem(tr)) {\n    const prevValue = detailsMap.value.get(tr)\n    detailsMap.value.set(tr, !prevValue)\n  }\n}\n\nconst getFieldColumnClasses = (field: TableField) => [\n  field.class,\n  field.thClass,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n  props.fieldColumnClass\n    ? typeof props.fieldColumnClass === 'function'\n      ? props.fieldColumnClass(field)\n      : props.fieldColumnClass\n    : null,\n]\n\nconst getFieldRowClasses = (field: Readonly<TableField>, tr: T) => [\n  field.class,\n  field.tdClass,\n  (isTableItem(tr) ? tr._cellVariants?.[field.key as string] : false)\n    ? `table-${(tr as TableItem)._cellVariants?.[field.key as string]}`\n    : null,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n]\n\nconst getRowClasses = (item: T, type: 'row-details' | 'row') =>\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null\n</script>\n","<template>\n  <BTableLite\n    v-bind=\"props\"\n    :aria-busy=\"busyModel\"\n    :items=\"computedDisplayItems\"\n    :fields=\"computedFields\"\n    :table-class=\"tableClasses\"\n    :tbody-tr-class=\"getRowClasses\"\n    :field-column-class=\"getFieldColumnClasses\"\n    @head-clicked=\"onFieldHeadClick\"\n    @row-dbl-clicked=\"\n      (row, index, e) => {\n        emit('row-dbl-clicked', row, index, e)\n      }\n    \"\n    @row-clicked=\"onRowClick\"\n    @row-hovered=\"\n      (row, index, e) => {\n        emit('row-hovered', row, index, e)\n      }\n    \"\n    @row-unhovered=\"\n      (row, index, e) => {\n        emit('row-unhovered', row, index, e)\n      }\n    \"\n  >\n    <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n      <slot :name=\"name\" v-bind=\"slotData\" />\n    </template>\n    <template #head()=\"scope\">\n      {{ getTableFieldHeadLabel(scope.field) }}\n      <template v-if=\"isSortable && !!scope.field.sortable && props.noSortableIcon === false\">\n        <slot\n          v-if=\"sortByModel?.find((el) => el.key === scope.field.key)?.order === 'asc'\"\n          v-bind=\"{...scope}\"\n          :name=\"\n            $slots[`sortAsc(${String(scope.field.key)})`]\n              ? `sortAsc(${String(scope.field.key)})`\n              : 'sortAsc()'\n          \"\n        >\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"24\"\n            height=\"24\"\n            fill=\"currentColor\"\n            class=\"bi bi-arrow-up-short\"\n            viewBox=\"0 0 16 16\"\n            aria-hidden\n          >\n            <path\n              fill-rule=\"evenodd\"\n              d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n            />\n          </svg>\n        </slot>\n        <slot\n          v-else-if=\"sortByModel?.find((el) => el.key === scope.field.key)?.order === 'desc'\"\n          v-bind=\"{...scope}\"\n          :name=\"\n            $slots[`sortDesc(${String(scope.field.key)})`]\n              ? `sortDesc(${String(scope.field.key)})`\n              : 'sortDesc()'\n          \"\n        >\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"24\"\n            height=\"24\"\n            fill=\"currentColor\"\n            class=\"bi bi-arrow-down-short\"\n            viewBox=\"0 0 16 16\"\n            aria-hidden\n          >\n            <path\n              fill-rule=\"evenodd\"\n              d=\"M8 4a.5.5 0 0 1 .5.5v5.793l2.146-2.147a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L7.5 10.293V4.5A.5.5 0 0 1 8 4z\"\n            />\n          </svg>\n        </slot>\n        <slot\n          v-else\n          v-bind=\"{...scope}\"\n          :name=\"\n            $slots[`sortDefault(${String(scope.field.key)})`]\n              ? `sortDefault(${String(scope.field.key)})`\n              : 'sortDefault()'\n          \"\n        >\n          <svg\n            :style=\"{opacity: 0.4}\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"24\"\n            height=\"24\"\n            fill=\"currentColor\"\n            class=\"bi bi-arrow-up-short\"\n            viewBox=\"0 0 16 16\"\n            aria-hidden\n          >\n            <path\n              fill-rule=\"evenodd\"\n              d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n            />\n          </svg>\n        </slot>\n      </template>\n    </template>\n    <template #custom-body=\"scope\">\n      <BTr v-if=\"busyModel\" class=\"b-table-busy-slot\" :class=\"getBusyRowClasses\">\n        <BTd :colspan=\"scope.fields.length\">\n          <slot name=\"table-busy\">\n            <BOverlay show>\n              <template #overlay>\n                <div class=\"d-flex align-items-center gap-2 mt-5\">\n                  <BSpinner />\n                  <strong>{{ busyLoadingText }}</strong>\n                </div>\n              </template>\n            </BOverlay>\n          </slot>\n        </BTd>\n      </BTr>\n    </template>\n  </BTableLite>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport {useToNumber} from '@vueuse/core'\nimport {computed, onMounted, type Ref, ref, toRef, watch} from 'vue'\nimport type {\n  BTableProps,\n  BTableSortBy,\n  BTableSortByOrder,\n  NoProviderTypes,\n  TableField,\n  TableFieldRaw,\n  TableItem,\n} from '../../types'\nimport {formatItem, get, getTableFieldHeadLabel, set} from '../../utils'\nimport BOverlay from '../BOverlay/BOverlay.vue'\nimport BSpinner from '../BSpinner.vue'\nimport BTableLite from './BTableLite.vue'\nimport BTd from './BTd.vue'\nimport BTr from './BTr.vue'\nimport {isTableField, isTableItem} from '../../types/TableTypes'\n\nconst props = withDefaults(defineProps<BTableProps<T>>(), {\n  noSortableIcon: false,\n  perPage: Number.POSITIVE_INFINITY,\n  filter: undefined,\n  mustSort: false,\n  filterable: undefined,\n  provider: undefined,\n  noProvider: undefined,\n  noProviderPaging: false,\n  noProviderSorting: false,\n  multisort: false,\n  noProviderFiltering: false,\n  noLocalSorting: false,\n  noSelectOnClick: false,\n  selectable: false,\n  stickySelect: false,\n  selectHead: true,\n  selectMode: 'multi',\n  selectionVariant: 'primary',\n  busyLoadingText: 'Loading...',\n  currentPage: 1,\n  // BTableLite props\n  items: () => [],\n  fields: () => [],\n  // All others use defaults\n  caption: undefined,\n  align: undefined,\n  footClone: undefined,\n  labelStacked: undefined,\n  showEmpty: undefined,\n  emptyText: undefined,\n  emptyFilteredText: undefined,\n  fieldColumnClass: undefined,\n  tbodyTrClass: undefined,\n  captionHtml: undefined,\n  detailsTdClass: undefined,\n  headVariant: undefined,\n  headRowVariant: undefined,\n  footRowVariant: undefined,\n  footVariant: undefined,\n  modelValue: undefined,\n  primaryKey: undefined,\n  tbodyClass: undefined,\n  tbodyTrAttr: undefined,\n  tfootClass: undefined,\n  tfootTrClass: undefined,\n  theadClass: undefined,\n  theadTrClass: undefined,\n  // End BTableLite props\n  // BTableSimple props\n  borderVariant: undefined,\n  variant: undefined,\n  bordered: undefined,\n  borderless: undefined,\n  captionTop: undefined,\n  dark: undefined,\n  hover: undefined,\n  id: undefined,\n  noBorderCollapse: undefined,\n  outlined: undefined,\n  fixed: undefined,\n  responsive: undefined,\n  stacked: undefined,\n  striped: undefined,\n  stripedColumns: undefined,\n  small: undefined,\n  stickyHeader: undefined,\n  // End BTableSimple props\n})\n\nconst emit = defineEmits<{\n  'filtered': [value: T[]]\n  'head-clicked': [key: string, field: TableField<T>, event: MouseEvent, isFooter: boolean]\n  'row-clicked': [item: T, index: number, event: MouseEvent]\n  'row-dbl-clicked': [item: T, index: number, event: MouseEvent]\n  'row-hovered': [item: T, index: number, event: MouseEvent]\n  'row-unhovered': [item: T, index: number, event: MouseEvent]\n  'row-selected': [value: T]\n  'row-unselected': [value: T]\n  'selection': [value: T[]]\n  'sorted': [value: BTableSortBy]\n  'change': [value: T[]]\n}>()\n\nconst sortByModel = defineModel<BTableSortBy[] | undefined>('sortBy', {\n  default: undefined,\n})\nconst busyModel = defineModel<boolean>('busy', {\n  default: false,\n})\nconst selectedItemsModel = defineModel<T[]>('selectedItems', {\n  default: () => [],\n})\n\nconst selectedItemsToSet = computed({\n  get: () => new Set([...selectedItemsModel.value]),\n  set: (val) => {\n    selectedItemsModel.value = [...val]\n  },\n})\n/**\n * This is to avoid the issue of directly mutating the array structure and to properly trigger the computed setter.\n * The utils also conveniently emit the proper events after\n */\nconst selectedItemsSetUtilities = {\n  add: (item: T) => {\n    const value = new Set(selectedItemsToSet.value)\n    value.add(item)\n    selectedItemsToSet.value = value\n    emit('row-selected', item)\n  },\n  clear: () => {\n    selectedItemsToSet.value.forEach((item) => {\n      selectedItemsSetUtilities.delete(item)\n    })\n  },\n  delete: (item: T) => {\n    const value = new Set(selectedItemsToSet.value)\n    value.delete(item)\n    selectedItemsToSet.value = value\n    emit('row-unselected', item)\n  },\n  set: (items: T[]) => {\n    selectedItemsToSet.value = new Set(items)\n    selectedItemsToSet.value.forEach((item) => {\n      emit('row-unselected', item)\n    })\n  },\n  /* TODO\n  This has method and the delete method suffer from an error when using a non-reactive source as the items prop\n  ```ts\n  const items = [{first_name: 'Geneva', last_name: 'Wilson', age: 89},{first_name: 'Jami', last_name: 'Carney', age: 38}]\n  ```\n  For some reason, the reference of the object gets lost. However, when you use an actual ref(), it works just fine\n  Getting the reference properly will fix all outstanding issues\n  */\n  has: (item: T) => {\n    if (!props.primaryKey) return selectedItemsToSet.value.has(item)\n\n    // Resolver for when we are using primary keys\n    const pkey: string = props.primaryKey\n    for (const selected of selectedItemsToSet.value) {\n      const selectedKey = get(selected, pkey)\n      const itemKey = get(item, pkey)\n\n      if (!!selectedKey && !!itemKey && selectedKey === itemKey) return true\n    }\n    return false\n  },\n} as const\n\n/**\n * Only stores data that is fetched when using the provider\n */\nconst internalItems: Ref<T[]> = ref([])\n\nconst perPageNumber = useToNumber(() => props.perPage, {method: 'parseInt'})\nconst currentPageNumber = useToNumber(() => props.currentPage, {method: 'parseInt'})\n\nconst isFilterableTable = toRef(() => !!props.filter)\nconst usesProvider = toRef(() => props.provider !== undefined)\nconst isSelecting = toRef(() => selectedItemsToSet.value.size > 0)\n\nconst isSortable = computed(\n  () =>\n    sortByModel.value !== undefined ||\n    props.fields.some(\n      (field) => typeof field === 'object' && field !== null && field.sortable === true\n    )\n)\n\nconst computedFields = computed<TableFieldRaw<T>[]>(() =>\n  props.fields.map((el) => {\n    if (!(typeof el === 'object' && el !== null)) return el\n\n    const value = sortByModel.value?.find((sb) => el.key === sb.key)\n    const sortValue =\n      isSortable.value === false\n        ? undefined\n        : value === undefined\n          ? 'none'\n          : value.order === 'desc'\n            ? 'descending'\n            : 'ascending'\n    return {\n      ...el,\n      thAttr: {\n        'aria-sort': sortValue,\n        ...el.thAttr,\n      },\n    }\n  })\n)\n\nconst tableClasses = computed(() => ({\n  'b-table-busy': busyModel.value,\n  'b-table-selectable': props.selectable,\n  'user-select-none': props.selectable && isSelecting.value,\n}))\n// All three of these are similar, even though the two following are not computeds\nconst getBusyRowClasses = computed(() => [\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(null, 'table-busy')\n      : props.tbodyTrClass\n    : null,\n])\nconst getFieldColumnClasses = (field: TableField) => [\n  {\n    'b-table-sortable-column': isSortable.value && field.sortable,\n  },\n]\n// TODO this class has issues if the table has a variant already applied\n// Also the row should technically have aria-selected . Both things could probably just use a function with tbodyTrAttrs\n// But functional tbodyTrAttrs are not supported yet\n// Also the stuff for resolving functions could probably be made a util\nconst getRowClasses = (item: T, type: string) => [\n  {\n    [`selected table-${props.selectionVariant}`]:\n      props.selectable && item && selectedItemsSetUtilities.has(item),\n  },\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null,\n]\n\nconst computedItems = computed<T[]>(() => {\n  const sortItems = (items: T[]) => {\n    // \"undefined\" values are set by us, we do this so we dont wipe out the comparer\n    const sortByItems = sortByModel.value?.filter((el) => !!el.order)\n\n    if (!sortByItems || sortByItems.length === 0) return items\n\n    // Multi-sort\n    return [...items].sort((a, b) => {\n      for (let i = 0; i < (sortByItems.length ?? 0); i++) {\n        const sortOption = sortByItems[i]\n        const realVal = (ob: T): string => {\n          if (!isTableItem(ob)) return String(ob)\n\n          const sortField = computedFields.value.find((el) => {\n            if (isTableField(el)) return el.key === sortOption.key\n\n            return false\n          })\n          const val = get(ob, sortOption.key as keyof TableItem)\n          if (isTableField(sortField) && !!sortField.sortByFormatted) {\n            const formatter =\n              typeof sortField.sortByFormatted === 'function'\n                ? sortField.sortByFormatted\n                : sortField.formatter\n            if (formatter) {\n              return formatItem(ob, String(sortField.key), formatter) as string\n            }\n          }\n          return typeof val === 'object' && val !== null\n            ? JSON.stringify(val)\n            : val?.toString() ?? ''\n        }\n\n        const aValue = realVal(a)\n        const bValue = realVal(b)\n        const comparison = sortOption.comparer\n          ? sortOption.comparer(aValue, bValue)\n          : aValue.localeCompare(bValue, undefined, {numeric: true})\n\n        if (comparison !== 0) {\n          return sortOption.order === 'asc' ? comparison : -comparison\n        }\n      }\n      return 0 // items are equal\n    })\n  }\n\n  const filterItems = (items: T[]) =>\n    items.filter((item) =>\n      isTableItem(item)\n        ? Object.entries(item).some(([key, val]) => {\n            if (\n              val === null ||\n              val === undefined ||\n              key[0] === '_' ||\n              (!props.filterable?.includes(key) && !!props.filterable?.length)\n            )\n              return false\n            const itemValue: string =\n              typeof val === 'object' ? JSON.stringify(Object.values(val)) : val.toString()\n            return itemValue.toLowerCase().includes(props.filter?.toLowerCase() ?? '')\n          })\n        : true\n    )\n\n  let mappedItems = usesProvider.value ? internalItems.value : (props.items as T[])\n  mappedItems = mappedItems.map((item) => {\n    if (\n      typeof item === 'object' &&\n      item !== null &&\n      Object.keys(item).some((key) => key.includes('.'))\n    ) {\n      // We use any here because the TS doesn't isn't certain that \"item\" is the same type as our newItem.\n      // But we've determined that it's an object, so we can ignore it since they will always be the same \"object\"\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      let newItem: any = {}\n      for (const key in item) {\n        if (key.includes('.')) {\n          newItem = set(newItem, key, item[key])\n        } else {\n          newItem[key] = item[key]\n        }\n      }\n      return newItem\n      // return\n    }\n    return item\n  })\n\n  if (\n    (isFilterableTable.value === true && !usesProvider.value) ||\n    (isFilterableTable.value === true && usesProvider.value && props.noProviderFiltering)\n  ) {\n    mappedItems = filterItems(mappedItems)\n  }\n\n  if (\n    (isSortable.value === true && !usesProvider.value && !props.noLocalSorting) ||\n    (isSortable.value === true && usesProvider.value && props.noProviderSorting)\n  ) {\n    mappedItems = sortItems(mappedItems)\n  }\n\n  return mappedItems\n})\n\nconst computedDisplayItems = computed<T[]>(() => {\n  if (Number.isNaN(perPageNumber.value) || (usesProvider.value && !props.noProviderPaging)) {\n    return computedItems.value\n  }\n\n  return computedItems.value.slice(\n    (currentPageNumber.value - 1) * (perPageNumber.value || Number.POSITIVE_INFINITY),\n    currentPageNumber.value * (perPageNumber.value || Number.POSITIVE_INFINITY)\n  )\n})\n\nwatch(computedDisplayItems, (v) => {\n  emit('change', v)\n})\n\nconst handleRowSelection = (\n  row: T,\n  index: number,\n  shiftClicked = false,\n  ctrlClicked = false,\n  metaClicked = false\n) => {\n  if (!props.selectable) return\n\n  if (props.selectMode === 'single' || props.selectMode === 'multi') {\n    // Do nothing when these items are held\n    if (shiftClicked || ctrlClicked) return\n    // Delete if item is in\n    if (selectedItemsSetUtilities.has(row)) {\n      selectedItemsSetUtilities.delete(row)\n    } else {\n      if (props.selectMode === 'single') {\n        selectedItemsSetUtilities.set([row])\n      } else {\n        selectedItemsSetUtilities.add(row)\n      }\n    }\n  } else {\n    if (ctrlClicked || metaClicked) {\n      // Delete if in the object\n      if (selectedItemsSetUtilities.has(row)) {\n        selectedItemsSetUtilities.delete(row)\n        // Otherwise add. Functions similarly to 'multi' at this point\n      } else {\n        selectedItemsSetUtilities.add(row)\n      }\n      // This is where range is different, due to the difference in shift\n    } else if (shiftClicked) {\n      const lastSelectedItem = [...selectedItemsToSet.value].pop()\n      const lastSelectedIndex = props.items.findIndex((i) => i === lastSelectedItem)\n      const selectStartIndex = Math.min(lastSelectedIndex, index)\n      const selectEndIndex = Math.max(lastSelectedIndex, index)\n      const items = props.items.slice(selectStartIndex, selectEndIndex + 1)\n      selectedItemsSetUtilities.set(items)\n      // If nothing is being held, then we just behave like it's single mode\n    } else {\n      selectedItemsSetUtilities.set([row])\n    }\n  }\n  // Notify\n  notifySelectionEvent()\n}\n\nconst onRowClick = (row: T, index: number, e: MouseEvent) => {\n  if (props.noSelectOnClick === false) {\n    handleRowSelection(row, index, e.shiftKey, e.ctrlKey, e.metaKey)\n  }\n  emit('row-clicked', row, index, e)\n}\n\nconst handleFieldSorting = (field: TableField<T>) => {\n  if (!isSortable.value) return\n\n  const fieldKey = typeof field === 'object' && field !== null ? field.key : field\n  const fieldSortable = typeof field === 'object' && field !== null ? field.sortable : false\n\n  // TODO implement rules for noSortReset\n\n  if (!(isSortable.value === true && fieldSortable === true)) return\n\n  const resolveOrder = (val: BTableSortByOrder): BTableSortByOrder | undefined => {\n    if (val === 'asc') return 'desc'\n    if (val === undefined) return 'asc'\n    if (\n      props.mustSort === true ||\n      (Array.isArray(props.mustSort) && props.mustSort.includes(fieldKey as string))\n    )\n      return 'asc'\n    return undefined\n  }\n\n  const index = sortByModel.value?.findIndex((el) => el.key === fieldKey) ?? -1\n  const originalValue = sortByModel.value?.[index]\n  const updatedValue: BTableSortBy =\n    // If value is new, we default to ascending\n    // Otherwise we make a temp copy of the value\n    index === -1 || !originalValue ? {key: fieldKey as string, order: 'asc'} : {...originalValue}\n\n  /**\n   * @returns the updated value to emit for sorted\n   */\n  const handleMultiSort = (): BTableSortBy => {\n    let val = updatedValue\n    if (index === -1) {\n      sortByModel.value = [...(sortByModel.value ?? []), updatedValue]\n    } else {\n      const order = resolveOrder(updatedValue.order)\n      val = {...updatedValue, order}\n      sortByModel.value = order\n        ? sortByModel.value?.map((el) => (el.key === val.key ? val : el))\n        : sortByModel.value?.filter((el) => el.key !== val.key)\n    }\n    return val\n  }\n\n  /**\n   * @returns the updated value to emit for sorted\n   */\n  const handleSingleSort = (): BTableSortBy => {\n    const val = {\n      ...updatedValue,\n      order: index === -1 ? updatedValue.order : resolveOrder(updatedValue.order),\n    }\n    sortByModel.value = [val]\n    return val\n  }\n\n  // Then emit the returned updated value\n  emit('sorted', props.multisort === true ? handleMultiSort() : handleSingleSort())\n}\n\nconst onFieldHeadClick = (\n  fieldKey: string,\n  field: TableField<T>,\n  event: Readonly<MouseEvent>,\n  isFooter = false\n) => {\n  emit('head-clicked', fieldKey, field, event, isFooter)\n  handleFieldSorting(field)\n}\n\nconst callItemsProvider = async () => {\n  if (!usesProvider.value || props.provider === undefined || busyModel.value) return\n  busyModel.value = true\n  const response = props.provider({\n    currentPage: currentPageNumber.value,\n    filter: props.filter,\n    sortBy: sortByModel.value,\n    perPage: perPageNumber.value,\n  })\n  try {\n    const items = response instanceof Promise ? await response : response\n\n    if (items === undefined) return\n    internalItems.value = items\n  } finally {\n    // Potential race condition could occur if the user explicitly sets the busy value to a different value while the response promise is executing\n    // which would have been the users choice.\n    // eslint-disable-next-line require-atomic-updates\n    busyModel.value = false\n  }\n}\n\nconst notifySelectionEvent = () => {\n  if (!props.selectable) return\n  emit('selection', [...selectedItemsToSet.value])\n}\n\nconst providerPropsWatch = async (prop: string, val: unknown, oldVal: unknown) => {\n  if (val === oldVal) return\n\n  //stop provide when paging\n  const inNoProvider = (key: NoProviderTypes) => props.noProvider?.includes(key) === true\n  const noProvideWhenPaging =\n    (prop === 'currentPage' || prop === 'perPage') &&\n    (inNoProvider('paging') || props.noProviderPaging === true)\n  const noProvideWhenFiltering =\n    prop === 'filter' && (inNoProvider('filtering') || props.noProviderFiltering === true)\n  const noProvideWhenSorting =\n    (prop === 'sortBy' || prop === 'sortDesc') &&\n    (inNoProvider('sorting') || props.noProviderSorting === true)\n\n  if (noProvideWhenPaging || noProvideWhenFiltering || noProvideWhenSorting) return\n\n  if (usesProvider.value === true) {\n    await callItemsProvider()\n  }\n\n  if (!(prop === 'currentPage' || prop === 'perPage')) {\n    emit('filtered', [...computedItems.value])\n  }\n}\n\nwatch(\n  () => props.filter,\n  (filter, oldFilter) => {\n    providerPropsWatch('filter', filter, oldFilter)\n\n    if (filter === oldFilter || usesProvider.value) return\n    if (!filter) {\n      emit('filtered', [...computedItems.value])\n    }\n  }\n)\nwatch(currentPageNumber, (val, oldVal) => {\n  providerPropsWatch('currentPage', val, oldVal)\n})\nwatch(perPageNumber, (val, oldVal) => {\n  providerPropsWatch('perPage', val, oldVal)\n})\nwatch(\n  sortByModel,\n  (val, oldVal) => {\n    providerPropsWatch('sortBy', val, oldVal)\n  },\n  {deep: true}\n)\n\nwatch(\n  () => props.provider,\n  (newValue) => {\n    // Reset the internal values if the provider stops getting used\n    if (newValue === undefined) {\n      internalItems.value = []\n      return\n    }\n    // Otherwise we should refresh the table on such a change\n    callItemsProvider()\n  }\n)\n\nonMounted(callItemsProvider)\n\ndefineExpose({\n  // The row selection methods are really for compat. Users should probably use the v-model though\n  clearSelected: () => {\n    if (!props.selectable) return\n    selectedItemsSetUtilities.clear()\n    notifySelectionEvent()\n  },\n  refresh: callItemsProvider,\n  selectAllRows: () => {\n    if (!props.selectable) return\n    const unselectableItems = selectedItemsToSet.value.size > 0 ? [...selectedItemsToSet.value] : []\n    selectedItemsToSet.value = new Set([...computedItems.value])\n    selectedItemsToSet.value.forEach((item) => {\n      if (unselectableItems.includes(item)) return\n      emit('row-selected', item)\n    })\n    notifySelectionEvent()\n  },\n  selectRow: (index: number) => {\n    if (!props.selectable) return\n    const item = computedItems.value[index]\n    if (!item || selectedItemsSetUtilities.has(item)) return\n    selectedItemsSetUtilities.add(item)\n    notifySelectionEvent()\n  },\n  unselectRow: (index: number) => {\n    if (!props.selectable) return\n    const item = computedItems.value[index]\n    if (!item || !selectedItemsSetUtilities.has(item)) return\n    selectedItemsSetUtilities.delete(item)\n    notifySelectionEvent()\n  },\n})\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"computedId\"\n    ref=\"el\"\n    class=\"tab-pane\"\n    :class=\"computedClasses\"\n    role=\"tabpanel\"\n    :aria-labelledby=\"buttonId\"\n    v-bind=\"attrs\"\n  >\n    <slot v-if=\"showSlot\" />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, inject, onMounted, onUnmounted, ref, toRef, useAttrs, watch} from 'vue'\nimport {useId} from '../../composables'\nimport type {BTabProps, TabType} from '../../types'\nimport {tabsInjectionKey} from '../../utils'\n\nconst props = withDefaults(defineProps<BTabProps>(), {\n  buttonId: undefined,\n  disabled: false,\n  id: undefined,\n  lazy: undefined,\n  lazyOnce: undefined,\n  noBody: false,\n  tag: 'div',\n  title: undefined,\n  titleItemClass: undefined,\n  titleLinkAttrs: undefined,\n  titleLinkClass: undefined,\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst activeModel = defineModel<boolean>('active', {\n  default: false,\n})\n\nconst parentData = inject(tabsInjectionKey, null)\nconst computedId = useId(() => props.id, 'tabpane')\nconst buttonId = useId(() => props.buttonId, 'tab')\n\nconst lazyRenderCompleted = ref(false)\nconst el = ref<HTMLElement | null>(null)\n\nconst {onClick, ...attrs} = useAttrs()\n\nconst tab = computed(\n  () =>\n    ({\n      id: computedId.value,\n      buttonId: buttonId.value,\n      disabled: props.disabled,\n      title: props.title,\n      titleComponent: slots.title,\n      titleItemClass: props.titleItemClass,\n      titleLinkAttrs: props.titleLinkAttrs,\n      titleLinkClass: props.titleLinkClass,\n      onClick,\n      el: el.value,\n    }) as TabType\n)\n\nonMounted(() => {\n  if (!parentData) return\n  parentData.registerTab(tab)\n  if (props.active) {\n    parentData.activateTab(computedId.value)\n  }\n})\n\nonUnmounted(() => {\n  if (!parentData) return\n  parentData.unregisterTab(computedId.value)\n})\n\nconst isActive = toRef(() => parentData?.activeId.value === computedId.value)\nconst show = ref(isActive.value)\n\nconst computedLazy = toRef(() => !!(parentData?.lazy.value || (props.lazyOnce ?? props.lazy)))\nconst computedLazyOnce = toRef(() => props.lazyOnce !== undefined)\n\nconst computedActive = toRef(() => isActive.value && !props.disabled)\nconst showSlot = toRef(\n  () =>\n    computedActive.value ||\n    !computedLazy.value ||\n    (computedLazy.value && computedLazyOnce.value && lazyRenderCompleted.value)\n)\n\nwatch(isActive, (active) => {\n  if (active) {\n    activeModel.value = true\n    setTimeout(() => {\n      show.value = true\n    }, 0)\n    return\n  }\n  show.value = false\n  activeModel.value = false\n})\nwatch(\n  () => props.active,\n  (active) => {\n    if (!parentData) return\n    if (!active) {\n      if (isActive.value) {\n        parentData.activateTab(undefined)\n      }\n      return\n    }\n    parentData.activateTab(computedId.value)\n  }\n)\n\nconst computedClasses = computed(() => [\n  {\n    'active': isActive.value,\n    'show': show.value,\n    'card-body': parentData?.card.value && props.noBody === false,\n    'fade': !parentData?.noFade.value,\n  },\n  show.value ? parentData?.activeTabClass : parentData?.inactiveTabClass,\n  parentData?.tabClass,\n])\n\nwatch(showSlot, (shown) => {\n  if (shown && !lazyRenderCompleted.value) lazyRenderCompleted.value = true\n})\n</script>\n","<template>\n  <component :is=\"tag\" :id=\"id\" class=\"tabs\" :class=\"computedClasses\">\n    <ReusableEmptyTab.define>\n      <div class=\"tab-content\" :class=\"contentClass\">\n        <slot />\n        <div\n          v-if=\"showEmpty\"\n          key=\"bv-empty-tab\"\n          class=\"tab-pane active\"\n          :class=\"{'card-body': props.card}\"\n        >\n          <slot name=\"empty\" />\n        </div>\n      </div>\n    </ReusableEmptyTab.define>\n\n    <ReusableEmptyTab.reuse v-if=\"props.end\" />\n    <div :class=\"[navWrapperClass, {'card-header': props.card, 'ms-auto': vertical && props.end}]\">\n      <ul\n        class=\"nav\"\n        :class=\"[navTabsClasses, navClass]\"\n        role=\"tablist\"\n        :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n      >\n        <slot name=\"tabs-start\" />\n        <li\n          v-for=\"(tab, idx) in tabs\"\n          :key=\"tab.id\"\n          class=\"nav-item\"\n          :class=\"tab.titleItemClass\"\n          role=\"presentation\"\n        >\n          <button\n            :id=\"tab.buttonId\"\n            class=\"nav-link\"\n            :class=\"tab.navItemClasses\"\n            role=\"tab\"\n            :aria-controls=\"tab.id\"\n            :aria-selected=\"tab.active\"\n            v-bind=\"tab.titleLinkAttrs\"\n            @keydown.left.stop.prevent=\"keynav(-1)\"\n            @keydown.right.stop.prevent=\"keynav(1)\"\n            @keydown.page-up.stop.prevent=\"keynav(-999)\"\n            @keydown.page-down.stop.prevent=\"keynav(999)\"\n            @click.stop.prevent=\"(e) => handleClick(e, idx)\"\n          >\n            <component :is=\"tab.titleComponent\" v-if=\"tab.titleComponent\" />\n            <template v-else>\n              {{ tab.title }}\n            </template>\n          </button>\n        </li>\n        <slot name=\"tabs-end\" />\n      </ul>\n    </div>\n    <ReusableEmptyTab.reuse v-if=\"!props.end\" />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, provide, type Ref, ref, toRef, unref, watch} from 'vue'\nimport {BvEvent, tabsInjectionKey} from '../../utils'\nimport {useAlignment} from '../../composables'\nimport type {BTabsProps, TabType} from '../../types'\nimport {createReusableTemplate} from '@vueuse/core'\n// TODO this component needs a desperate refactoring to use provide/inject and not the complicated slot manipulation logic it's doing now\n\nconst props = withDefaults(defineProps<BTabsProps>(), {\n  activeNavItemClass: undefined,\n  activeTabClass: undefined,\n  align: undefined,\n  card: false,\n  contentClass: undefined,\n  end: false,\n  fill: false,\n  id: undefined,\n  inactiveNavItemClass: undefined,\n  inactiveTabClass: undefined,\n  justified: false,\n  lazy: false,\n  navClass: undefined,\n  navItemClass: undefined,\n  navWrapperClass: undefined,\n  noFade: false,\n  // noKeyNav: false,\n  noNavStyle: false,\n  pills: false,\n  small: false,\n  tag: 'div',\n  tabClass: undefined,\n  vertical: false,\n})\n\nconst emit = defineEmits<{\n  'activate-tab': [v1: number, v2: number, v3: BvEvent]\n  'click': [] // TODO click event is never used\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'empty'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'tabs-end'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'tabs-start'?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = defineModel<number>({\n  default: -1,\n})\nconst activeId = defineModel<string | undefined>('activeId', {\n  default: undefined,\n})\n\nconst ReusableEmptyTab = createReusableTemplate()\n\nconst tabsInternal = ref<Ref<TabType>[]>([])\n\nconst tabs = computed(() =>\n  tabsInternal.value.map((_tab) => {\n    const tab = unref(_tab)\n    const active = tab.id === activeId.value\n\n    return {\n      ...tab,\n      active,\n      navItemClasses: [\n        {\n          active,\n          disabled: tab.disabled,\n        },\n        active ? props.activeNavItemClass : props.inactiveNavItemClass,\n        props.navItemClass,\n        tab.titleLinkClass,\n      ],\n    }\n  })\n)\n\nconst showEmpty = toRef(() => !(tabs?.value && tabs.value.length > 0))\n\nconst computedClasses = computed(() => ({\n  'd-flex': props.vertical,\n  'align-items-start': props.vertical,\n}))\n\nconst alignment = useAlignment(() => props.align)\n\nconst navTabsClasses = computed(() => ({\n  'nav-pills': props.pills,\n  'flex-column me-3': props.vertical,\n  [alignment.value]: props.align !== undefined,\n  'nav-fill': props.fill,\n  'card-header-tabs': props.card,\n  'nav-justified': props.justified,\n  'nav-tabs': !props.noNavStyle && !props.pills,\n  'small': props.small,\n}))\n\nconst activateTab = (index: number): void => {\n  if (index !== undefined) {\n    const id = tabs.value[index]?.id\n    if (\n      index > -1 &&\n      index < tabs.value.length &&\n      !tabs.value[index].disabled &&\n      (modelValue.value < 0 || activeId.value !== id || modelValue.value !== index)\n    ) {\n      const tabEvent = new BvEvent('activate-tab', {cancelable: true})\n      emit('activate-tab', index, modelValue.value, tabEvent)\n      if (!tabEvent.defaultPrevented) {\n        if (activeId.value !== id) activeId.value = id\n        if (modelValue.value !== index) modelValue.value = index\n      }\n    }\n  }\n}\n\nconst handleClick = (event: Readonly<MouseEvent>, index: number) => {\n  activateTab(index)\n  if (\n    index >= 0 &&\n    !tabs.value[index].disabled &&\n    tabs.value[index]?.onClick &&\n    typeof tabs.value[index].onClick === 'function'\n  ) {\n    tabs.value[index].onClick?.(event)\n  }\n}\n\nconst keynav = (direction: number) => {\n  if (tabs.value.length <= 0) return\n  modelValue.value = nextIndex(modelValue.value + direction, direction)\n  document.getElementById(tabs.value[modelValue.value]?.buttonId)?.focus()\n}\n\nconst nextIndex = (start: number, direction: number) => {\n  let index = start\n  let minIdx = -1\n  let maxIdx = -1\n\n  for (let i = 0; i < tabs.value.length; i++) {\n    if (!tabs.value[i].disabled) {\n      if (minIdx === -1) minIdx = i\n      maxIdx = i\n    }\n  }\n\n  while (index >= minIdx && index <= maxIdx && tabs.value[index].disabled) {\n    index += direction\n  }\n\n  if (index < minIdx) index = minIdx\n  if (index > maxIdx) index = maxIdx\n\n  return index\n}\n\nwatch(modelValue, (newValue, oldValue) => {\n  if (newValue === oldValue) return\n  if (tabs.value.length <= 0) {\n    return\n  }\n\n  const index = nextIndex(newValue, newValue > oldValue ? 1 : -1)\n  nextTick(() => {\n    activateTab(index)\n  })\n})\n\nwatch(activeId, (newValue, oldValue) => {\n  const index = tabs.value.findIndex((t) => t.id === newValue)\n  if (newValue === oldValue) return\n  if (tabs.value.length <= 0) {\n    return\n  }\n  if (index === -1) {\n    activateTab(nextIndex(0, 1))\n    return\n  }\n  activateTab(index)\n})\n\nconst registerTab = (tab: Ref<TabType>) => {\n  if (!tabsInternal.value.find((t) => t.value.id === tab.value.id)) {\n    tabsInternal.value.push(tab)\n  } else {\n    tabsInternal.value[tabsInternal.value.findIndex((t) => t.value.id === tab.value.id)] = tab\n  }\n  tabsInternal.value.sort((a, b) => {\n    if (!Node || !a.value.el || !b.value.el) return 0\n    const position = a.value.el.compareDocumentPosition(b.value.el)\n    if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n    if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n    return 0\n  })\n}\nconst unregisterTab = (id: string) => {\n  tabsInternal.value = tabsInternal.value.filter((t) => t.value.id !== id)\n}\n\nwatch(\n  tabsInternal,\n  () => {\n    findActive()\n  },\n  {deep: true}\n)\n\nconst findActive = () => {\n  if (tabs.value.length === 0) {\n    modelValue.value = -1\n    activeId.value = undefined\n    return\n  }\n  if (modelValue.value >= 0 && !activeId.value) {\n    activeId.value = tabs.value[modelValue.value]?.id\n  }\n  if (tabs.value.find((t) => t.id === activeId.value)) {\n    activateTab(tabs.value.findIndex((t) => t.id === activeId.value))\n    return\n  }\n  activateTab(tabs.value.map((tab) => !tab.disabled).indexOf(true))\n}\n\nprovide(tabsInjectionKey, {\n  lazy: toRef(() => props.lazy),\n  card: toRef(() => props.card),\n  noFade: toRef(() => props.noFade),\n  activeTabClass: toRef(() => props.activeTabClass),\n  inactiveTabClass: toRef(() => props.inactiveTabClass),\n  tabClass: toRef(() => props.tabClass),\n  registerTab,\n  unregisterTab,\n  activeId,\n  activateTab: (id) => {\n    const idx = tabs.value.findIndex((t) => t.id === id)\n    if (id === undefined || idx === -1) {\n      activateTab(nextIndex(0, 1))\n      return\n    }\n    activateTab(idx)\n  },\n})\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"props.teleportDisabled\">\n    <!-- This wrapper div is used for specific targetting by the user -->\n    <!-- Even though it serves no direct purpose itself -->\n    <div id=\"__BVID__toaster-container\">\n      <div\n        v-for=\"(value, key) in toastPositions\"\n        :key=\"key\"\n        :class=\"value\"\n        class=\"toast-container position-fixed p-3\"\n      >\n        <TransitionGroup name=\"b-list\">\n          <component\n            :is=\"toast.value.component\"\n            v-for=\"toast in toasts?.filter((el) => el.value.props.pos === key)\"\n            :key=\"toast.value.props._self\"\n            v-bind=\"pluckToastItem(toast.value.props)\"\n            v-model=\"toast.value.props._modelValue\"\n            :trans-props=\"{...toast.value.props.transProps, appear: true}\"\n            @hide.prevent=\"remove?.(toast.value.props._self)\"\n          />\n        </TransitionGroup>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {watch} from 'vue'\nimport {useToast} from '../../composables'\nimport {omit} from '../../utils'\nimport type {BToastOrchestratorProps} from '../../types'\n\nconst props = withDefaults(defineProps<BToastOrchestratorProps>(), {\n  teleportDisabled: false,\n  teleportTo: 'body',\n  appendToast: false,\n})\n\nconst toastPositions = {\n  'top-left': 'top-0 start-0',\n  'top-center': 'top-0 start-50 translate-middle-x',\n  'top-right': 'top-0 end-0',\n  'middle-left': 'top-50 start-0 translate-middle-y',\n  'middle-center': 'top-50 start-50 translate-middle',\n  'middle-right': 'top-50 end-0 translate-middle-y',\n  'bottom-left': 'bottom-0 start-0',\n  'bottom-center': 'bottom-0 start-50 translate-middle-x',\n  'bottom-right': 'bottom-0 end-0',\n} as const\n\nconst {remove, toasts, show, _setIsAppend} = useToast()\n\nwatch(\n  () => props.appendToast,\n  (value) => {\n    _setIsAppend?.(value)\n  },\n  {immediate: true}\n)\n\nconst pluckToastItem = (\n  payload: Readonly<Exclude<typeof toasts, undefined>['value'][number]['value']['props']>\n) => omit(payload, ['_modelValue', '_self', 'pos'])\n\ndefineExpose({\n  remove,\n  show,\n  toasts,\n})\n</script>\n\n<style lang=\"scss\">\n/*\nIf you remove the last element in the list, the animation goes farther to the right then normal.\nI don't know why\nI kind of like it though, and even if I didn't, I don't know how to get rid of it.\nGetting the transitions to work here was basically all trial and error.\nI think it's because it's \"moving\", but I don't know where it's moving to\n*/\n.b-list-move,\n.b-list-enter-active,\n.b-list-leave-active {\n  transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);\n}\n.b-list-enter-from,\n.b-list-leave-to {\n  opacity: 0; // TODO this should be the responsibility of the child\n}\n.b-list-leave-active {\n  position: fixed;\n}\n</style>\n","<template>\n  <BPopover ref=\"popover\" v-bind=\"computedProps\" v-model=\"modelValue\" tooltip>\n    <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n      <slot :name=\"name\" v-bind=\"slotData\" />\n    </template>\n  </BPopover>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport BPopover from './BPopover.vue'\nimport type {BPopoverProps, BTooltipProps} from '../types'\n\nconst props = withDefaults(defineProps<BTooltipProps>(), {\n  click: undefined,\n  teleportDisabled: undefined,\n  teleportTo: undefined,\n  content: undefined,\n  customClass: undefined,\n  delay: undefined,\n  floatingMiddleware: undefined,\n  hide: undefined,\n  html: undefined,\n  id: undefined,\n  inline: undefined,\n  interactive: undefined,\n  manual: undefined,\n  noAutoClose: undefined,\n  noFade: undefined,\n  noFlip: undefined,\n  noHide: undefined,\n  noShift: undefined,\n  noninteractive: undefined,\n  offset: undefined,\n  placement: undefined,\n  realtime: undefined,\n  reference: undefined,\n  strategy: undefined,\n  target: undefined,\n  title: undefined,\n  variant: undefined,\n})\n\nconst modelValue = defineModel<boolean | undefined>({default: undefined})\n\nconst computedProps = computed<BPopoverProps>(() => {\n  const {interactive, noninteractive, ...rest} = props\n  return {noninteractive: noninteractive !== undefined ? noninteractive : !interactive, ...rest}\n})\n\nconst popover = ref<null | InstanceType<typeof BPopover>>(null)\n\ndefineExpose({\n  hide: popover.value?.hide,\n  show: popover.value?.show,\n  toggle: popover.value?.toggle,\n})\n</script>\n","import type {Plugin} from 'vue'\nimport type {BootstrapVueOptions, ComponentType, DirectiveType} from './types'\nimport toastPlugin from './plugins/toastPlugin'\nimport breadcrumbPlugin from './plugins/breadcrumbPlugin'\nimport idPlugin from './plugins/idPlugin'\nimport modalControllerPlugin from './plugins/modalControllerPlugin'\nimport modalManagerPlugin from './plugins/modalManagerPlugin'\nimport rtlPlugin from './plugins/rtlPlugin'\n\nimport './styles/styles.scss'\n\nimport * as Components from './components'\nimport * as Directives from './directives'\nimport parseActiveImports from './utils/parseActiveImports'\n\ndeclare module '@vue/runtime-core' {\n  export interface GlobalComponents {\n    BFormFile: typeof Components.BFormFile\n    BAccordion: typeof Components.BAccordion\n    BAccordionItem: typeof Components.BAccordionItem\n    BAlert: typeof Components.BAlert\n    BAvatar: typeof Components.BAvatar\n    BAvatarGroup: typeof Components.BAvatarGroup\n    BBadge: typeof Components.BBadge\n    BBreadcrumb: typeof Components.BBreadcrumb\n    BBreadcrumbItem: typeof Components.BBreadcrumbItem\n    BButton: typeof Components.BButton\n    BButtonGroup: typeof Components.BButtonGroup\n    BButtonToolbar: typeof Components.BButtonToolbar\n    BCard: typeof Components.BCard\n    BCardBody: typeof Components.BCardBody\n    BCardFooter: typeof Components.BCardFooter\n    BCardGroup: typeof Components.BCardGroup\n    BCardHeader: typeof Components.BCardHeader\n    BCardImg: typeof Components.BCardImg\n    BCardSubtitle: typeof Components.BCardSubtitle\n    BCardText: typeof Components.BCardText\n    BCardTitle: typeof Components.BCardTitle\n    BCarousel: typeof Components.BCarousel\n    BCarouselSlide: typeof Components.BCarouselSlide\n    BCloseButton: typeof Components.BCloseButton\n    BCol: typeof Components.BCol\n    BCollapse: typeof Components.BCollapse\n    BContainer: typeof Components.BContainer\n    BDropdown: typeof Components.BDropdown\n    BDropdownDivider: typeof Components.BDropdownDivider\n    BDropdownForm: typeof Components.BDropdownForm\n    BDropdownGroup: typeof Components.BDropdownGroup\n    BDropdownHeader: typeof Components.BDropdownHeader\n    BDropdownItem: typeof Components.BDropdownItem\n    BDropdownItemButton: typeof Components.BDropdownItemButton\n    BDropdownText: typeof Components.BDropdownText\n    BForm: typeof Components.BForm\n    BFormCheckbox: typeof Components.BFormCheckbox\n    BFormCheckboxGroup: typeof Components.BFormCheckboxGroup\n    BFormFloatingLabel: typeof Components.BFormFloatingLabel\n    BFormGroup: typeof Components.BFormGroup\n    BFormInput: typeof Components.BFormInput\n    BFormInvalidFeedback: typeof Components.BFormInvalidFeedback\n    BFormRadio: typeof Components.BFormRadio\n    BFormRadioGroup: typeof Components.BFormRadioGroup\n    BFormRow: typeof Components.BFormRow\n    BFormSelect: typeof Components.BFormSelect\n    BFormSelectOption: typeof Components.BFormSelectOption\n    BFormSelectOptionGroup: typeof Components.BFormSelectOptionGroup\n    BFormText: typeof Components.BFormText\n    BFormTextarea: typeof Components.BFormTextarea\n    BFormTag: typeof Components.BFormTag\n    BFormTags: typeof Components.BFormTags\n    BFormSpinbutton: typeof Components.BFormSpinbutton\n    BFormValidFeedback: typeof Components.BFormValidFeedback\n    BImg: typeof Components.BImg\n    BInputGroup: typeof Components.BInputGroup\n    BInputGroupAddon: typeof Components.BInputGroupAddon\n    BInputGroupAppend: typeof Components.BInputGroupAppend\n    BInputGroupPrepend: typeof Components.BInputGroupPrepend\n    BInputGroupText: typeof Components.BInputGroupText\n    BLink: typeof Components.BLink\n    BListGroup: typeof Components.BListGroup\n    BListGroupItem: typeof Components.BListGroupItem\n    BModal: typeof Components.BModal\n    BModalOrchestrator: typeof Components.BModalOrchestrator\n    BNav: typeof Components.BNav\n    BNavForm: typeof Components.BNavForm\n    BNavText: typeof Components.BNavText\n    BNavbar: typeof Components.BNavbar\n    BNavbarBrand: typeof Components.BNavbarBrand\n    BNavbarNav: typeof Components.BNavbarNav\n    BNavbarToggle: typeof Components.BNavbarToggle\n    BNavItem: typeof Components.BNavItem\n    BNavItemDropdown: typeof Components.BNavItemDropdown\n    BOffcanvas: typeof Components.BOffcanvas\n    BOverlay: typeof Components.BOverlay\n    BPagination: typeof Components.BPagination\n    BPlaceholder: typeof Components.BPlaceholder\n    BPlaceholderButton: typeof Components.BPlaceholderButton\n    BPlaceholderCard: typeof Components.BPlaceholderCard\n    BPlaceholderTable: typeof Components.BPlaceholderTable\n    BPlaceholderWrapper: typeof Components.BPlaceholderWrapper\n    BPopover: typeof Components.BPopover\n    BProgress: typeof Components.BProgress\n    BProgressBar: typeof Components.BProgressBar\n    BRow: typeof Components.BRow\n    BSpinner: typeof Components.BSpinner\n    BTab: typeof Components.BTab\n    BTable: typeof Components.BTable\n    BTableSimple: typeof Components.BTableSimple\n    BTbody: typeof Components.BTbody\n    BTd: typeof Components.BTd\n    BTfoot: typeof Components.BTfoot\n    BTh: typeof Components.BTh\n    BThead: typeof Components.BThead\n    BTr: typeof Components.BTr\n    BToast: typeof Components.BToast\n    BToastOrchestrator: typeof Components.BToastOrchestrator\n    BTooltip: typeof Components.BTooltip\n    BTabs: typeof Components.BTabs\n    BTransition: typeof Components.BTransition\n  }\n}\n\n// Main app plugin\nexport const createBootstrap = ({\n  components = false,\n  directives = false,\n  plugins = {},\n}: BootstrapVueOptions = {}): Plugin => ({\n  install(app) {\n    const selectedComponents = typeof components === 'boolean' ? {all: components} : components\n\n    const componentKeys = Object.keys(Components) as unknown as ComponentType[]\n    parseActiveImports(selectedComponents, componentKeys).forEach((name) => {\n      const component = Components[name]\n      app.component(name, component)\n    })\n\n    const selectedDirectives = typeof directives === 'boolean' ? {all: directives} : directives\n\n    const directiveKeys = Object.keys(Directives) as unknown as DirectiveType[]\n    const sliceName = (str: string) => (str.toLowerCase().startsWith('v') ? str.slice(1) : str)\n    parseActiveImports(selectedDirectives, directiveKeys).forEach((name) => {\n      const parsedName = sliceName(name)\n      const directive = Directives[name]\n      app.directive(parsedName, directive)\n    })\n\n    if (plugins?.breadcrumb ?? true === true) {\n      app.use(breadcrumbPlugin)\n    }\n    if ((plugins?.id ?? true === true) || typeof plugins.id === 'object') {\n      app.use(idPlugin, plugins)\n    }\n    if (plugins?.modalController ?? true === true) {\n      app.use(modalControllerPlugin)\n    }\n    if (plugins?.modalManager ?? true === true) {\n      app.use(modalManagerPlugin)\n    }\n    if ((plugins?.rtl ?? true === true) || typeof plugins.rtl === 'object') {\n      app.use(rtlPlugin, plugins)\n    }\n    if (plugins?.toast ?? true === true) {\n      app.use(toastPlugin)\n    }\n  },\n})\n\nexport * from './components'\nexport * as Components from './components'\nexport * from './directives'\nexport * as Directives from './directives'\nexport * from './composables/exports'\nexport * as Composables from './composables/exports'\nexport * from './utils/exports'\nexport * as Utils from './utils/exports'\nexport * from './types/exports'\nexport * as Types from './types/exports'\n\nexport default createBootstrap\n"],"names":["useAlignment","align","computed","value","toValue","useAriaInvalid","ariaInvalid","state","resolvedAriaInvalid","resolvedState","BvEvent","eventType","eventInit","__publicField","prop","setter","BvTriggerableEvent","BvCarouselEvent","from","direction","to","attemptFocus","el","options","getActiveElement","excludes","activeElement","isActiveElement","e","isEmptySlot","isVisible","bcr","getTransitionDelay","element","style","transitionDelay","transitionDuration","transitionDelayMs","transitionDurationMs","IS_BROWSER","parseEventOptions","passiveEventSupported","eventOn","eventName","handler","eventOff","eventOnOff","on","eventParams","TABLE_TAG_NAMES","eventFilter","filterEvent","event","label","labelFor","input","sides","alignments","placements","acc","side","min","max","round","floor","createCoords","v","oppositeSideMap","oppositeAlignmentMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","x","y","statefulPlacement","middlewareData","resetCount","i","name","fn","nextX","nextY","data","reset","detectOverflow","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","getPlacementList","autoAlignment","allowedPlacements","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","crossAxis","detectOverflowOptions","placements$1","overflow","currentIndex","currentPlacement","alignmentSides","currentOverflows","allOverflows","nextPlacement","placementsSortedByMostSpace","d","a","b","resetPlacement","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","isBasePlacement","fallbackPlacements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","_overflowsData$map$so","getSideOffsets","isAnySideFullyClipped","hide","offsets","getBoundingRect","minX","minY","maxX","maxY","getRectsByLine","sortedRects","groups","prevRect","inline","nativeClientRects","clientRects","fallback","getBoundingClientRect","firstRect","lastRect","isTop","top","bottom","left","right","width","height","isLeftSide","maxRight","minLeft","measureRects","resetRects","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","apply","heightSide","widthSide","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","maximumClippingWidth","maximumClippingHeight","xMin","xMax","yMin","yMax","nextDimensions","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isContainingBlock","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","topLayerSelectors","isTopLayer","selector","convertOffsetParentRelativeRectToViewportRelativeRect","documentElement","topLayer","scroll","isOffsetParentAnElement","offsetRect","getClientRects","getWindowScrollBarX","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","getTrueOffsetParent","polyfill","getOffsetParent","window","getElementRects","getOffsetParentFn","getDimensionsFn","isRTL","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","autoPlacement$1","shift$1","flip$1","size$1","hide$1","arrow$1","inline$1","mergedOptions","platformWithCache","computePosition$1","isComponentPublicInstance","target","args","unref","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_unref","middlewareOption","placementOption","_unref2","strategyOption","_unref3","transformOption","_unref4","referenceElement","floatingElement","ref","shallowRef","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","position","attach","watch","getCurrentScope","onScopeDispose","shallowReadonly","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","attributeRegex","regex","DefaultAllowlist","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","elementName","attributeList","allowedAttributes","tryOnScopeDispose","makeDestructurable","obj","arr","clone","index","r","isClient","isDef","val","notNullish","toString","isObject","noop","isIOS","getIsIOS","_a","_b","createFilterWrapper","filter","wrapper","resolve","reject","bypassFilter","invoke","debounceFilter","ms","timer","maxTimer","lastRejector","_clearTimeout","timer2","duration","maxDuration","pausableFilter","extendFilter","isActive","pause","resume","readonly","cacheStringFunction","str","camelizeRE","camelize","_","c","getLifeCycleTarget","getCurrentInstance","toRef","toRef$1","customRef","useDebounceFn","watchWithFilter","source","cb","watchOptions","watchPausable","syncRef","flush","deep","immediate","transform","watchers","transformLTR","transformRTL","newValue","w","tryOnMounted","sync","onMounted","nextTick","useIntervalFn","interval","immediateCallback","clean","intervalValue","isRef","stopWatch","useToNumber","method","radix","nanToZero","resolved","createReusableTemplate","inheritAttrs","render","define","defineComponent","slots","reuse","attrs","vnode","keysToCamelKebabCase","newObj","key","unrefElement","elRef","plain","defaultWindow","useEventListener","events","listeners","cleanups","register","listener","options2","optionsClone","stop","_iOSWorkaround","onClickOutside","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","createKeyPredicate","keyFilter","onKeyStroke","passive","dedupe","predicate","useMounted","isMounted","instance","useSupported","callback","useMediaQuery","query","isSupported","mediaQuery","matches","watchEffect","cloneFnJSON","_global","globalKey","handlers","getHandlers","getSSRHandler","guessSerializerType","rawInit","StorageSerializers","customStorageEventName","useStorage","defaults","storage","listenToStorageChanges","writeDefaults","mergeDefaults","shallow","onError","initOnMounted","_a2","type","serializer","pauseWatch","resumeWatch","pausableWatch","write","updateFromCustomEvent","dispatchWriteEvent","oldValue","serialized","read","usePreferredDark","useColorMode","initialValue","storageKey","storageRef","emitAuto","disableTransition","modes","preferredDark","system","store","updateHTMLAttrs","selector2","attribute2","current","defaultOnChanged","mode","onChanged","auto","useMutationObserver","mutationOptions","observer","targets","items","targets2","takeRecords","useElementHover","delayEnter","delayLeave","isHovered","toggle","entering","delay","useIntersectionObserver","rootMargin","_target","root2","useFocus","focusVisible","innerFocused","targetElement","focused","resolveElement","UseMouseBuiltinExtractors","useMouse","touch","resetOnTouchEnds","_prevMouseEvent","sourceType","extractor","mouseHandler","touchHandler","scrollHandler","pos","mouseHandlerWrapper","touchHandlerWrapper","scrollHandlerWrapper","listenerOptions","useMouseInElement","handleOutside","targetRef","elementX","elementY","elementPositionX","elementPositionY","elementHeight","elementWidth","isOutside","elX","elY","checkOverflowScroll","ele","parent","preventDefault","rawEvent","elInitialOverflow","useScrollLock","initialState","isLocked","stopTouchMoveListener","lock","unlock","useSwipe","onSwipe","onSwipeEnd","onSwipeStart","coordsStart","reactive","coordsEnd","diffX","diffY","abs","isThresholdExceeded","isSwiping","getTouchEventCoords","updateCoordsStart","updateCoordsEnd","isPassiveEventSupported","checkPassiveEventSupport","onTouchEnd","stops","s","document","supportsPassive","optionsBlock","useVModel","props","emit","_c","defaultValue","shouldEmit","vm","_emit","cloneFn","getValue","triggerEmit","proxy","isUpdating","__props","__emit","modelValue","_useModel","showState","showStateInternal","show","computedId","useId","hidden","targetTrigger","trigger","placeholder","sanitizedTitle","sanitizedContent","isAutoPlacement","offsetNumber","sizeStyles","floatingMiddleware","off","offsetMiddleware","hideMiddleware","inlineMiddleware","arrowMiddleware","sizeMiddleware","placementRef","arrowStyle","computedClasses","resolveBootstrapPlacement","triggerIsOutside","buildTriggerableEvent","opts","showTimeout","__expose","bind","elem","getElement","unbind","onBeforeUnmount","resolveFloatingPlacement","alignCenter","alignEnd","_placement","resolveActiveStatus","values","resolveContent","missingBindingValue","title","resolveDirectiveProps","binding","div","h","BPopover","formatItem","item","fieldKey","formatter","get","getBreakpointProps","prefix","breakpoints","definition","breakpoint","getClasses$1","els","propPrefix","classPrefix","getSlotElements","slot","filterBy","child","RX_UNDERSCORE","RX_LOWER_UPPER","RX_NUMBER","RX_START_SPACE_WORD","RX_FIRST_START_SPACE_WORD","RX_SPACE_SPLIT","RX_HASH","RX_HASH_ID","RX_REGEXP_REPLACE","RX_SPACES","startCase","$1","$2","titleCase","upperFirst","trim","escapeRegExp","escapeRegExpChars","getTableFieldHeadLabel","field","isLink","carouselInjectionKey","tabsInjectionKey","progressInjectionKey","listGroupInjectionKey","avatarGroupInjectionKey","accordionInjectionKey","checkboxGroupKey","radioGroupKey","collapseInjectionKey","dropdownInjectionKey","navbarInjectionKey","toastPluginKey","rtlPluginKey","breadcrumbPluginKey","modalControllerPluginKey","modalManagerPluginKey","idPluginKey","normalizeSlot","scope","$slots","names","omit","objToPluck","keysToPluck","pick","memo","path","segments","set","initial","toInt","def","_set","nextIsNum","cloned","parseActiveImports","all","others","valuesCopy","merge","suffixPropName","suffix","useBLinkHelper","pickProps","pickPropsResolved","resolvedProps","computedLink","computedLinkProps","useBreadcrumb","inject","persist","useColorVariantClasses","useContainerClasses","resolvedValue","useCountdown","intervalOpts","resolvedLength","resolvedInterval","isPaused","intervalsPassed","amountOfIntervals","restart","myPause","myResume","useStateClass","getClasses","resolvedItems","getInputClasses","stateClass","getLabelClasses","getGroupAttr","computedAriaInvalid","getGroupClasses","id","getId","useFormInput","debounceNumber","debounceMaxWaitNumber","internalUpdateModelValue","updateModelValue","force","_formatValue","evt","_getModelValue","onActivated","formattedValue","nextModel","useFormSelect","isComplex","option","normalizeOption","text","disabled","normalizeOptions","modalOpenClassName","useSharedModalStack","modalManagerPlugin","dispose","modal","useModalManager","modalOpen","pushRegistry","pushStack","removeStack","stack","countStack","currentModal","useModal","registry","findBModal","component","modalComponent","resolvedId","useModalController","lastStack","useNumberishToStyle","unit","resolvedUnit","useRadiusElementClasses","resolveRadiusElement","strValue","useRtl","rtlPlugin","rtlNew","localeNew","useSafeScrollLock","isOpen","bodyScroll","resolvedIsOpen","resolvedBodyScrolling","inverseBodyScrollingValue","modelVal","bodyVal","useScrollspy","content","cont","tar","resolvedContent","resolvedTarget","updateList","contentQuery","targetQuery","manual","watchChanges","nodeList","isScrollingDown","previousScrollTop","scrollRoot","iobs","scrollTop","entry","newId","_d","nodes","foundParent","parentDropdown","parentNav","_e","_f","_g","_h","_i","_j","_k","mobs","scrollIntoView","smooth","href","useToast","fadeProperties","NO_FADE_PROPS","FADE_PROPS","baseProperties","defaultActiveClass","useAttrs","collapseData","navbarData","tag","routerName","computedHref","toFallback","hash","routerAttr","computedLinkClasses","clicked","parentData","resolvedBackgroundClasses","numberPrecision","numberValue","numberMax","parentMaxNumber","computedLabel","computedWidth","provide","isHovering","intervalNumber","countdownLength","remainingMs","computedTag","BLink","isToastVisible","onMouseEnter","showFn","hideFn","onBeforeEnter","onAfterEnter","onAfterLeave","posDefault","toastPlugin","app","toasts","_isAppend","_setIsAppend","_self","toastToAdd","unwrappedProps","BToast","remove","self","breadcrumbPlugin","idPlugin","_useSlots","hasLabelSlot","pressedValue","isToggle","isButton","isBLink","nonStandardTag","linkProps","positionStyles","radiusElementClasses","computedVariant","computedAriaBusy","spinnerAttrs","overlayStyles","overlayClasses","blurClasses","blurStyles","spinWrapperStyles","defaultModalDialogZIndex","okButton","cancelButton","closeButton","lazyLoadCompleted","modalFocus","okButtonFocus","cancelButtonFocus","closeButtonFocus","modalClasses","lazyShowing","computedBackdropVariant","hasHeaderCloseSlot","modalDialogClasses","resolvedBodyBgClasses","bodyClasses","resolvedHeaderBgClasses","headerClasses","headerCloseAttrs","resolvedFooterBgClasses","footerClasses","titleClasses","disableCancel","disableOk","pickFocusItem","onLeave","activePosition","activeModalCount","computedZIndex","sharedSlots","modalControllerPlugin","modals","buildPromise","resolveFunc","_promise","BModal","confirm","removeRegistry","rtlInitial","localeInitial","isRtl","locale","isCollapsing","showRef","toggleFn","revealTimeout","hideTimeout","_skipAnimation","reveal","newval","wrapperClass","collapseAttrs","hasCloseSlot","closeClasses","isAlertVisible","closeAttrs","FONT_SIZE_SCALE","SIZES","BADGE_FONT_SIZE_SCALE","hasDefaultSlot","hasBadgeSlot","showBadge","computedSquare","computedPropSize","computedParentSize","computedSize","computedRounded","computedRoundedTop","computedRoundedBottom","computedRoundedStart","computedRoundedEnd","badgeClasses","badgeText","computedTextVariant","computedBgVariant","badgeStyle","textFontStyle","fontSize","marginStyle","overlapScale","onImgError","overlapNumber","paddingStyle","computedAriaCurrent","breadcrumb","breadcrumbItemObjects","localItems","activeDefined","idx","heightNumber","widthNumber","computedSrcset","computedSizes","computedDimentions","computedBlankImgSrc","makeBlankImgSrc","color","baseClass","computedImgProps","hasTitleSlot","hasSubtitleSlot","hasHeaderSlot","hasFooterSlot","imgAttr","ReusableImg","cardTypeClass","touchThresholdNumber","isTransitioning","rideStarted","relatedTarget","previousModelValue","enterClasses","leaveClasses","prev","next","isRiding","slides","buildBvCarouselEvent","goToValue","onKeydown","onMouseLeave","lengthX","resumeRiding","onBeforeLeave","hasText","hasCaption","hasContent","computedContentClasses","breakpointCol","breakpointOffset","breakpointOrder","_sfc_main$14","properties","classList","_sfc_render","_ctx","$props","$setup","$data","$options","_normalizeClass","_renderSlot","gutterXToNumber","gutterYToNumber","computedOffset","offsetToNumber","button","splitButton","referencePlacement","keynav","active","floatingPlacement","localOffset","buttonClasses","onButtonClick","onSplitClick","onClickInside","currentModelValue","headerId","headerRole","dropdownData","submitted","computedShow","_sfc_main$Q","Teleport","indeterminate","localValue","newVal","computedRequired","isButtonGroup","classesObject","inputClasses","labelClasses","computedName","ind","computedAttrs","computedAccept","onChange","onDrop","DefineTemplate","ReusableTemplate","INPUTS","INPUT_SELECTOR","LEGEND_INTERACTIVE_ELEMENTS","SLOT_NAME_LABEL","SLOT_NAME_INVALID_FEEDBACK","SLOT_NAME_VALID_FEEDBACK","SLOT_NAME_DESCRIPTION","SLOT_NAME_DEFAULT","_sfc_main$M","BCol","BFormInvalidFeedback","BFormRow","BFormText","BFormValidFeedback","breakPoints","getAlignClasses","propValue","getColProps","updateAriaDescribedby","$input","attr","newIds","oldIds","ids","contentColProps","labelAlignClasses","labelColProps","isHorizontal","tagName","inputs","inp","isFieldset","$label","labelContent","labelId","labelTag","renderProps","$invalidFeedback","invalidFeedbackContent","invalidFeedbackId","$validFeedback","validFeedbackContent","validFeedbackId","$description","descriptionContent","descriptionId","ariaDescribedby","contentBlocks","$content","rowProps","onInput","onBlur","focus","blur","isHighlighted","isRange","isColor","normalizedOptions","normalizedOptsWrapper","selectSizeNumber","computedSelectSize","CODE_DOWN","CODE_END","CODE_HOME","CODE_PAGEDOWN","CODE_PAGEUP","CODE_UP","defaultValues","KEY_CODES","computedSpinClasses","$_autoDelayTimer","$_autoRepeatTimer","$_keyIsDown","stepNumber","computedStep","minNumber","computedMin","maxNumber","computedMax","step","repeatDelayNumber","computedDelay","repeatIntervalNumber","computedInterval","repeatThresholdNumber","computedThreshold","repeatStepMultiplierNumber","computedStepMultiplier","computedPrecision","computedMultiplier","valueAsFixed","globalLocale","computedLocale","locales","defaultFormatter","computedFormatter","stepValue","multiplier","wrap","stepUp","stepDown","stopEvent","code","altKey","ctrlKey","metaKey","resetTimers","handleStepRepeat","stepper","isMouseEvent","count","onMouseup","setMouseup","buttons","incrementSvgAttrs","decrementSvgAttrs","sharedButtonAttrs","sharedSvgAttrs","incrementAttrs","decrementAttrs","tagText","taglabelId","limitNumber","_inputId","tags","inputValue","shouldRemoveOnDelete","lastRemovedTag","validTags","invalidTags","duplicateTags","isDuplicate","isInvalid","isLimitReached","disableAddButton","slotAttrs","addTag","removeTag","onFocusin","onFocus","separator","separatorRegExp","newTags","t","newTag","tagIndex","computedStyles","hasAppend","hasPrepend","horizontal","tagComputed","isAction","localAttrs","pluckModalItem","payload","dropdown","computedRole","containerClass","setTheme","BColorMode","getTargets","modifiers","arg","targetIds","targetId","checkVisibility","visible","handleUpdate","vBToggle","BScrollspy","BTooltip","onClick","showBackdrop","headerCloseClasses","OnBeforeEnter","OnAfterEnter","OnAfterLeave","DEFAULT_PER_PAGE","DEFAULT_TOTAL_ROWS","perPageNumber","totalRowsNumber","modelValueNumber","perPageSanitized","totalRowsSanitized","numberOfPages","computedFill","justifyAlign","isActivePage","pageNumber","getTabIndex","num","checkDisabled","firstDisabled","prevDisabled","lastDisabled","nextDisabled","getBaseButtonProps","page","classVal","dis","slotName","textValue","tabIndex","role","pageClick","getButtonProps","getPageButtonProps","firstButtonProps","prevButtonProps","nextButtonProps","lastButtonProps","ReusableButton","ReusableEllipsis","ellipsisProps","computedWrapperClasses","pagination","clickEvent","calculatedValue","pages","limit","firstPage","lastPage","hideEllipsis","hideEndButtons","halfLimit","widthString","colsString","wrapperClasses","defaultAttrs","footerComponent","BPlaceholder","BPlaceholderButton","defaultStickyHeaderHeight","tableAttrs","computedSticky","stickyIsValid","isResponsive","responsiveStyles","responsiveClasses","columnsToNumber","rowsToNumber","computedHeaderColumns","computedFooterColumns","headerColumnsNumber","footerColumnsNumber","columnsNumber","rowsNumber","computedHeaderColumnsLength","computedFooterColumnsLength","rowColsProps","_sfc_main$c","rowColsClasses","isTableItem","isTableField","generateDetailsItem","detailsMap","detailsItem","computedTableClasses","computedFields","firstItem","k","f","computedFieldsTotal","showComputedHeaders","itemAttributes","headerClicked","isFooter","toggleRowDetails","tr","prevValue","getFieldColumnClasses","getFieldRowClasses","getRowClasses","sortByModel","busyModel","selectedItemsModel","selectedItemsToSet","selectedItemsSetUtilities","pkey","selected","selectedKey","itemKey","internalItems","currentPageNumber","isFilterableTable","usesProvider","isSelecting","isSortable","sb","sortValue","tableClasses","getBusyRowClasses","computedItems","sortItems","sortByItems","sortOption","realVal","ob","sortField","aValue","bValue","comparison","filterItems","mappedItems","newItem","computedDisplayItems","handleRowSelection","row","shiftClicked","ctrlClicked","metaClicked","lastSelectedItem","lastSelectedIndex","selectStartIndex","selectEndIndex","notifySelectionEvent","onRowClick","handleFieldSorting","fieldSortable","resolveOrder","originalValue","updatedValue","handleMultiSort","order","handleSingleSort","onFieldHeadClick","callItemsProvider","response","providerPropsWatch","oldVal","inNoProvider","noProvideWhenPaging","noProvideWhenFiltering","noProvideWhenSorting","oldFilter","unselectableItems","activeModel","buttonId","lazyRenderCompleted","tab","onUnmounted","computedLazy","computedLazyOnce","computedActive","showSlot","shown","activeId","ReusableEmptyTab","tabsInternal","tabs","_tab","showEmpty","navTabsClasses","activateTab","tabEvent","handleClick","minIdx","maxIdx","registerTab","unregisterTab","findActive","toastPositions","pluckToastItem","computedProps","interactive","noninteractive","rest","popover","createBootstrap","components","directives","plugins","selectedComponents","componentKeys","Components","selectedDirectives","directiveKeys","Directives","sliceName","parsedName","directive"],"mappings":";;;;AAGA,MAAAA,KAAe,CAACC,MACdC,EAAS,MAAM;AACP,QAAAC,IAAQC,GAAQH,CAAK;AAC3B,SAAQE,IAAa,mBAAmBA,CAAK,KAA7B;AAClB,CAAC,GCJHE,KAAe,CACbC,GACAC,MAEAL,EAAS,MAAM;AACP,QAAAM,IAAsBJ,GAAQE,CAAW,GACzCG,IAAgBL,GAAQG,CAAK;AAa5B,SAVLC,MAAwB,KACpB,SACA,OAAOA,KAAwB,WAC7BA,IACAC,MAAkB,KAChB,SACAD,MAAwB,KACtB,UACA;AAGd,CAAC;AClBH,MAAqBE,GAAQ;AAAA,EA6B3B,YACEC,GACAC,IAAkE,IAClE;AA/BO,IAAAC,GAAA,oBAAsB;AACtB,IAAAA,GAAA,qBAA6B;AAC9B,IAAAA,GAAA,2BAAoB;AACnB,IAAAA,GAAA,mBAAoB;AACpB,IAAAA,GAAA,qBAA6B;AAC9B,IAAAA,GAAA;AACC,IAAAA,GAAA,uBAAoC;AACpC,IAAAA,GAAA,gBAA6B;AAyBpC,QAAI,CAACF;AACH,YAAM,IAAI;AAAA,QACR,wBAAwB,KAAK,YAAY,IAAI,2BAA2B,UAAU,MAAM;AAAA,MAAA;AAM5F,WAAO,OAAO,MAAMD,GAAQ,UAAUE,GAAW,EAAC,WAAAD,GAAU,GAEvD,KAAA,kBAAkB,WAA2B;AAChD,MAAI,KAAK,eACP,KAAK,mBAAmB;AAAA,IAC1B;AAAA,EAEJ;AAAA;AAAA;AAAA,EArCA,IAAW,mBAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAc,iBAAiBG,GAAM;AACnC,SAAK,oBAAoBA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAIA,IAAW,iBAAiB;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA,EAGA,IAAc,eAAeC,GAAoB;AAC/C,SAAK,kBAAkBA;AAAA,EACzB;AAAA,EAuBA,WAAW,WAAW;AACb,WAAA;AAAA,MACL,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa;AAAA,MACb,eAAe;AAAA,MACf,QAAQ;AAAA,IAAA;AAAA,EAEZ;AACF;AC/DA,MAAqBC,WAA2BN,GAAQ;AAAA,EAGtD,YACEC,GACAC,IAA6E,IAC7E;AACA,UAAMD,GAAWC,CAAS;AANnB,IAAAC,GAAA,iBAAyB;AAUhC,WAAO,OAAO,MAAMH,GAAQ,UAAUE,GAAW,EAAC,WAAAD,GAAU;AAAA,EAC9D;AAAA,EAEA,WAAW,WAAW;AACb,WAAA;AAAA,MACL,GAAG,MAAM;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,EAEb;AACF;ACpBA,MAAqBM,WAAwBP,GAAQ;AAAA,EAKnD,YACEC,GACAC,GAKA;AACA,UAAMD,GAAWC,CAAS;AAZnB,IAAAC,GAAA;AACA,IAAAA,GAAA;AACA,IAAAA,GAAA;AAWP,WAAO,OAAO,MAAMH,GAAQ,UAAUE,GAAW,EAAC,WAAAD,GAAU;AAC5D,UAAM,EAAC,MAAAO,GAAM,WAAAC,GAAW,IAAAC,EAAA,IAAMR;AAC9B,SAAK,OAAOM,GACZ,KAAK,KAAKE,GACV,KAAK,YAAYD;AAAA,EACnB;AAAA,EAEA,WAAW,WAAW;AACb,WAAA;AAAA,MACL,GAAG,MAAM;AAAA,IAAA;AAAA,EAEb;AACF;ACvBO,MAAME,KAAe,CAC1BC,GACAC,IAAkC,OACtB;AACZ,QAAMC,IAAmB,CAACC,IAAmC,OAAuB;AAC5E,UAAA,EAAC,eAAAC,EAAiB,IAAA;AACjB,WAAAA,KAAiB,CAACD,EAAS,KAAK,CAACH,MAAOA,MAAOI,CAAa,IAAIA,IAAgB;AAAA,EAAA,GAGnFC,IAAkB,CAACL,MAAuCA,MAAOE,EAAiB;AAEpF,MAAA;AACF,IAAAF,EAAG,MAAMC,CAAO;AAAA,WACTK,GAAG;AAEV,YAAQ,MAAMA,CAAC;AAAA,EACjB;AACA,SAAOD,EAAgBL,CAAE;AAC3B,GAEaO,KAAc,CAACP,QAAmCA,KAAA,gBAAAA,QAAU,IAAI,WAAW,GAK3EQ,KAAY,CAACR,MAAmC;AAM3D,MAAIA,EAAG,aAAa,SAAS,MAAM;AAE1B,WAAA;AAKH,QAAAS,IAAMT,EAAG;AACf,SAAO,CAAC,EAAES,KAAOA,EAAI,SAAS,KAAKA,EAAI,QAAQ;AACjD,GAEaC,KAAqB,CAACC,MAAmC;AAC9D,QAAAC,IAAQ,OAAO,iBAAiBD,CAAO,GAEvCE,IAAkBD,EAAM,gBAAgB,MAAM,GAAG,EAAE,CAAC,KAAK,IACzDE,IAAqBF,EAAM,mBAAmB,MAAM,GAAG,EAAE,CAAC,KAAK,IAC/DG,IAAoB,OAAOF,EAAgB,MAAM,GAAG,EAAE,CAAC,IAAI,KAC3DG,IAAuB,OAAOF,EAAmB,MAAM,GAAG,EAAE,CAAC,IAAI;AACvE,SAAOC,IAAoBC;AAC7B,GCpDaC,KACX,OAAO,SAAW,OAClB,OAAO,WAAa,OACpB,OAAO,YAAc,KAOVC,KAAoB,CAC/BjB,OAEmC,MAAM;AACvC,MAAIkB,IAAwB;AAC5B,MAAIF;AACE,QAAA;AACF,YAAMhB,IAAU;AAAA;AAAA;AAAA,QAGd,IAAI,UAAU;AACY,UAAAkB,IAAA;AAAA,QAG1B;AAAA,MAAA;AAIK,aAAA,iBAAiB,QAAQlB,GAASA,CAAO,GAGzC,OAAA,oBAAoB,QAAQA,GAASA,CAAO;AAAA,IAAA,QAC7C;AACkB,MAAAkB,IAAA;AAAA,IAC1B;AAEK,SAAAA;AAAA,OAIA,OAAOlB,KAAY,WAAWA,IAAU,EAAC,SAAS,CAAC,CAACA,KAAW,OAGjE,OAAOA,KAAY,WAAWA,EAAQ,UAAUA,GAO5CmB,KAAU,CACrBpB,GACAqB,GACAC,GACArB,MACG;AACC,EAAAD,KAAMA,EAAG,oBACXA,EAAG,iBAAiBqB,GAAWC,GAASJ,GAAkBjB,CAAO,CAAC;AAEtE,GAMasB,KAAW,CACtBvB,GACAqB,GACAC,GACArB,MACG;AACC,EAAAD,KAAMA,EAAG,uBACRA,EAAA,oBAAoBqB,GAAWC,GAASrB,CAAO;AAEtD,GAOauB,KAAa,CAACC,GAAaC,MAA6C;AAEnF,GADeD,IAAKL,KAAUG,IACvB,GAAGG,CAAW;AACvB,GCvFMC,KAAkB,CAAC,MAAM,MAAM,IAAI,GAInCC,KAAc;AAAA,EAClB;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAIKC,KAAA,CAACC,MAA2B;AAEzC,MAAI,CAACA,KAAS,CAACA,EAAM;AACZ,WAAA;AAET,QAAM9B,IAAK8B,EAAM;AAEZ,MAAA,cAAc9B,KAAMA,EAAG,YAAa2B,GAAgB,QAAQ3B,EAAG,OAAO,MAAM;AACxE,WAAA;AAGL,MAAAA,EAAG,QAAQ,gBAAgB;AAAU,WAAA;AAEzC,QAAM+B,IAAQ/B,EAAG,YAAY,UAAUA,IAAKA,EAAG,QAAQ,OAAO;AAI9D,MAAI+B,GAAO;AACH,UAAAC,IAAWD,EAAM,aAAa,KAAK,GACnCE,IAAQD,IACV,SAAS,eAAeA,CAAQ,IAChCD,EAAM,cAAc,yBAAyB;AAC7C,QAAAE,KAAS,CAAEA,EAA2B;AACjC,aAAA;AAAA,EAEX;AAIO,SAAAjC,EAAG,QAAQ4B,EAAW;AAC/B,GC9CMM,KAAQ,CAAC,OAAO,SAAS,UAAU,MAAM,GACzCC,KAAa,CAAC,SAAS,KAAK,GAC5BC,KAA0B,gBAAAF,GAAM,OAAO,CAACG,GAAKC,MAASD,EAAI,OAAOC,GAAMA,IAAO,MAAMH,GAAW,CAAC,GAAGG,IAAO,MAAMH,GAAW,CAAC,CAAC,GAAG,CAAA,CAAE,GAClII,KAAM,KAAK,KACXC,KAAM,KAAK,KACXC,KAAQ,KAAK,OACbC,KAAQ,KAAK,OACbC,KAAe,CAAAC,OAAM;AAAA,EACzB,GAAGA;AAAA,EACH,GAAGA;AACL,IACMC,KAAkB;AAAA,EACtB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AACP,GACMC,KAAuB;AAAA,EAC3B,OAAO;AAAA,EACP,KAAK;AACP;AACA,SAASC,GAAMC,GAAOnE,GAAOoE,GAAK;AAChC,SAAOT,GAAIQ,GAAOT,GAAI1D,GAAOoE,CAAG,CAAC;AACnC;AACA,SAASC,GAASrE,GAAOsE,GAAO;AAC9B,SAAO,OAAOtE,KAAU,aAAaA,EAAMsE,CAAK,IAAItE;AACtD;AACA,SAASuE,GAAQC,GAAW;AAC1B,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AACA,SAASC,GAAaD,GAAW;AAC/B,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AACA,SAASE,GAAgBC,GAAM;AAC7B,SAAOA,MAAS,MAAM,MAAM;AAC9B;AACA,SAASC,GAAcD,GAAM;AAC3B,SAAOA,MAAS,MAAM,WAAW;AACnC;AACA,SAASE,GAAYL,GAAW;AAC9B,SAAO,CAAC,OAAO,QAAQ,EAAE,SAASD,GAAQC,CAAS,CAAC,IAAI,MAAM;AAChE;AACA,SAASM,GAAiBN,GAAW;AACnC,SAAOE,GAAgBG,GAAYL,CAAS,CAAC;AAC/C;AACA,SAASO,GAAkBP,GAAWQ,GAAOC,GAAK;AAChD,EAAIA,MAAQ,WACVA,IAAM;AAER,QAAMC,IAAYT,GAAaD,CAAS,GAClCW,IAAgBL,GAAiBN,CAAS,GAC1CY,IAASR,GAAcO,CAAa;AAC1C,MAAIE,IAAoBF,MAAkB,MAAMD,OAAeD,IAAM,QAAQ,WAAW,UAAU,SAASC,MAAc,UAAU,WAAW;AAC9I,SAAIF,EAAM,UAAUI,CAAM,IAAIJ,EAAM,SAASI,CAAM,MACjDC,IAAoBC,GAAqBD,CAAiB,IAErD,CAACA,GAAmBC,GAAqBD,CAAiB,CAAC;AACpE;AACA,SAASE,GAAsBf,GAAW;AACxC,QAAMgB,IAAoBF,GAAqBd,CAAS;AACxD,SAAO,CAACiB,GAA8BjB,CAAS,GAAGgB,GAAmBC,GAA8BD,CAAiB,CAAC;AACvH;AACA,SAASC,GAA8BjB,GAAW;AAChD,SAAOA,EAAU,QAAQ,cAAc,CAAAU,MAAajB,GAAqBiB,CAAS,CAAC;AACrF;AACA,SAASQ,GAAYjC,GAAMkC,GAASV,GAAK;AACvC,QAAMW,IAAK,CAAC,QAAQ,OAAO,GACrBC,IAAK,CAAC,SAAS,MAAM,GACrBC,IAAK,CAAC,OAAO,QAAQ,GACrBC,IAAK,CAAC,UAAU,KAAK;AAC3B,UAAQtC,GAAI;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AACH,aAAIwB,IAAYU,IAAUE,IAAKD,IACxBD,IAAUC,IAAKC;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AACH,aAAOF,IAAUG,IAAKC;AAAA,IACxB;AACE,aAAO;EACV;AACH;AACA,SAASC,GAA0BxB,GAAWyB,GAAejF,GAAWiE,GAAK;AAC3E,QAAMC,IAAYT,GAAaD,CAAS;AACxC,MAAI0B,IAAOR,GAAYnB,GAAQC,CAAS,GAAGxD,MAAc,SAASiE,CAAG;AACrE,SAAIC,MACFgB,IAAOA,EAAK,IAAI,CAAAzC,MAAQA,IAAO,MAAMyB,CAAS,GAC1Ce,MACFC,IAAOA,EAAK,OAAOA,EAAK,IAAIT,EAA6B,CAAC,KAGvDS;AACT;AACA,SAASZ,GAAqBd,GAAW;AACvC,SAAOA,EAAU,QAAQ,0BAA0B,CAAAf,MAAQO,GAAgBP,CAAI,CAAC;AAClF;AACA,SAAS0C,GAAoBC,GAAS;AACpC,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,GAAGA;AAAA,EACP;AACA;AACA,SAASC,GAAiBD,GAAS;AACjC,SAAO,OAAOA,KAAY,WAAWD,GAAoBC,CAAO,IAAI;AAAA,IAClE,KAAKA;AAAA,IACL,OAAOA;AAAA,IACP,QAAQA;AAAA,IACR,MAAMA;AAAA,EACV;AACA;AACA,SAASE,GAAiBC,GAAM;AAC9B,SAAO;AAAA,IACL,GAAGA;AAAA,IACH,KAAKA,EAAK;AAAA,IACV,MAAMA,EAAK;AAAA,IACX,OAAOA,EAAK,IAAIA,EAAK;AAAA,IACrB,QAAQA,EAAK,IAAIA,EAAK;AAAA,EAC1B;AACA;AC3HA,SAASC,GAA2BC,GAAMjC,GAAWS,GAAK;AACxD,MAAI;AAAA,IACF,WAAAyB;AAAA,IACA,UAAAC;AAAA,EACD,IAAGF;AACJ,QAAMG,IAAW/B,GAAYL,CAAS,GAChCW,IAAgBL,GAAiBN,CAAS,GAC1CqC,IAAcjC,GAAcO,CAAa,GACzC1B,IAAOc,GAAQC,CAAS,GACxBsC,IAAaF,MAAa,KAC1BG,IAAUL,EAAU,IAAIA,EAAU,QAAQ,IAAIC,EAAS,QAAQ,GAC/DK,IAAUN,EAAU,IAAIA,EAAU,SAAS,IAAIC,EAAS,SAAS,GACjEM,IAAcP,EAAUG,CAAW,IAAI,IAAIF,EAASE,CAAW,IAAI;AACzE,MAAIK;AACJ,UAAQzD,GAAI;AAAA,IACV,KAAK;AACH,MAAAyD,IAAS;AAAA,QACP,GAAGH;AAAA,QACH,GAAGL,EAAU,IAAIC,EAAS;AAAA,MAClC;AACM;AAAA,IACF,KAAK;AACH,MAAAO,IAAS;AAAA,QACP,GAAGH;AAAA,QACH,GAAGL,EAAU,IAAIA,EAAU;AAAA,MACnC;AACM;AAAA,IACF,KAAK;AACH,MAAAQ,IAAS;AAAA,QACP,GAAGR,EAAU,IAAIA,EAAU;AAAA,QAC3B,GAAGM;AAAA,MACX;AACM;AAAA,IACF,KAAK;AACH,MAAAE,IAAS;AAAA,QACP,GAAGR,EAAU,IAAIC,EAAS;AAAA,QAC1B,GAAGK;AAAA,MACX;AACM;AAAA,IACF;AACE,MAAAE,IAAS;AAAA,QACP,GAAGR,EAAU;AAAA,QACb,GAAGA,EAAU;AAAA,MACrB;AAAA,EACG;AACD,UAAQjC,GAAaD,CAAS,GAAC;AAAA,IAC7B,KAAK;AACH,MAAA0C,EAAO/B,CAAa,KAAK8B,KAAehC,KAAO6B,IAAa,KAAK;AACjE;AAAA,IACF,KAAK;AACH,MAAAI,EAAO/B,CAAa,KAAK8B,KAAehC,KAAO6B,IAAa,KAAK;AACjE;AAAA,EACH;AACD,SAAOI;AACT;AASA,MAAMC,KAAkB,OAAOT,GAAWC,GAAUS,MAAW;AAC7D,QAAM;AAAA,IACJ,WAAA5C,IAAY;AAAA,IACZ,UAAA6C,IAAW;AAAA,IACX,YAAAC,IAAa,CAAE;AAAA,IACf,UAAAC;AAAA,EACD,IAAGH,GACEI,IAAkBF,EAAW,OAAO,OAAO,GAC3CrC,IAAM,OAAOsC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMZ,CAAQ;AAC5E,MAAI3B,IAAQ,MAAMuC,EAAS,gBAAgB;AAAA,IACzC,WAAAb;AAAA,IACA,UAAAC;AAAA,IACA,UAAAU;AAAA,EACJ,CAAG,GACG;AAAA,IACF,GAAAI;AAAA,IACA,GAAAC;AAAA,EACD,IAAGlB,GAA2BxB,GAAOR,GAAWS,CAAG,GAChD0C,IAAoBnD,GACpBoD,IAAiB,CAAA,GACjBC,IAAa;AACjB,WAASC,IAAI,GAAGA,IAAIN,EAAgB,QAAQM,KAAK;AAC/C,UAAM;AAAA,MACJ,MAAAC;AAAA,MACA,IAAAC;AAAA,IACN,IAAQR,EAAgBM,CAAC,GACf;AAAA,MACJ,GAAGG;AAAA,MACH,GAAGC;AAAA,MACH,MAAAC;AAAA,MACA,OAAAC;AAAA,IACD,IAAG,MAAMJ,EAAG;AAAA,MACX,GAAAP;AAAA,MACA,GAAAC;AAAA,MACA,kBAAkBlD;AAAA,MAClB,WAAWmD;AAAA,MACX,UAAAN;AAAA,MACA,gBAAAO;AAAA,MACA,OAAA5C;AAAA,MACA,UAAAuC;AAAA,MACA,UAAU;AAAA,QACR,WAAAb;AAAA,QACA,UAAAC;AAAA,MACD;AAAA,IACP,CAAK;AACD,IAAAc,IAAIQ,KAAwBR,GAC5BC,IAAIQ,KAAwBR,GAC5BE,IAAiB;AAAA,MACf,GAAGA;AAAA,MACH,CAACG,CAAI,GAAG;AAAA,QACN,GAAGH,EAAeG,CAAI;AAAA,QACtB,GAAGI;AAAA,MACJ;AAAA,IACP,GACQC,KAASP,KAAc,OACzBA,KACI,OAAOO,KAAU,aACfA,EAAM,cACRT,IAAoBS,EAAM,YAExBA,EAAM,UACRpD,IAAQoD,EAAM,UAAU,KAAO,MAAMb,EAAS,gBAAgB;AAAA,MAC5D,WAAAb;AAAA,MACA,UAAAC;AAAA,MACA,UAAAU;AAAA,IACZ,CAAW,IAAIe,EAAM,QAEZ;AAAA,MACC,GAAAX;AAAA,MACA,GAAAC;AAAA,IACD,IAAGlB,GAA2BxB,GAAO2C,GAAmB1C,CAAG,IAE9D6C,IAAI;AAAA,EAEP;AACD,SAAO;AAAA,IACL,GAAAL;AAAA,IACA,GAAAC;AAAA,IACA,WAAWC;AAAA,IACX,UAAAN;AAAA,IACA,gBAAAO;AAAA,EACJ;AACA;AAUA,eAAeS,GAAejI,GAAOgB,GAAS;AAC5C,MAAIkH;AACJ,EAAIlH,MAAY,WACdA,IAAU,CAAA;AAEZ,QAAM;AAAA,IACJ,GAAAqG;AAAA,IACA,GAAAC;AAAA,IACA,UAAAH;AAAA,IACA,OAAAvC;AAAA,IACA,UAAAuD;AAAA,IACA,UAAAlB;AAAA,EACD,IAAGjH,GACE;AAAA,IACJ,UAAAoI,IAAW;AAAA,IACX,cAAAC,IAAe;AAAA,IACf,gBAAAC,IAAiB;AAAA,IACjB,aAAAC,IAAc;AAAA,IACd,SAAAvC,IAAU;AAAA,EACd,IAAM/B,GAASjD,GAAShB,CAAK,GACrBwI,IAAgBvC,GAAiBD,CAAO,GAExCtE,IAAUyG,EAASI,IADND,MAAmB,aAAa,cAAc,aACbA,CAAc,GAC5DG,IAAqBvC,GAAiB,MAAMiB,EAAS,gBAAgB;AAAA,IACzE,UAAWe,IAAwB,OAAOf,EAAS,aAAa,OAAO,SAASA,EAAS,UAAUzF,CAAO,OAAO,QAAOwG,IAAgCxG,IAAUA,EAAQ,kBAAmB,OAAOyF,EAAS,sBAAsB,OAAO,SAASA,EAAS,mBAAmBgB,EAAS,QAAQ;AAAA,IAChS,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAApB;AAAA,EACD,CAAA,CAAC,GACId,IAAOmC,MAAmB,aAAa;AAAA,IAC3C,GAAG1D,EAAM;AAAA,IACT,GAAAyC;AAAA,IACA,GAAAC;AAAA,EACJ,IAAM1C,EAAM,WACJ8D,IAAe,OAAOvB,EAAS,mBAAmB,OAAO,SAASA,EAAS,gBAAgBgB,EAAS,QAAQ,IAC5GQ,IAAe,OAAOxB,EAAS,aAAa,OAAO,SAASA,EAAS,UAAUuB,CAAY,KAAO,OAAOvB,EAAS,YAAY,OAAO,SAASA,EAAS,SAASuB,CAAY,MAAO;AAAA,IACvL,GAAG;AAAA,IACH,GAAG;AAAA,EACP,IAAM;AAAA,IACF,GAAG;AAAA,IACH,GAAG;AAAA,EACP,GACQE,IAAoB1C,GAAiBiB,EAAS,wDAAwD,MAAMA,EAAS,sDAAsD;AAAA,IAC/K,UAAAgB;AAAA,IACA,MAAAhC;AAAA,IACA,cAAAuC;AAAA,IACA,UAAAzB;AAAA,EACJ,CAAG,IAAId,CAAI;AACT,SAAO;AAAA,IACL,MAAMsC,EAAmB,MAAMG,EAAkB,MAAMJ,EAAc,OAAOG,EAAY;AAAA,IACxF,SAASC,EAAkB,SAASH,EAAmB,SAASD,EAAc,UAAUG,EAAY;AAAA,IACpG,OAAOF,EAAmB,OAAOG,EAAkB,OAAOJ,EAAc,QAAQG,EAAY;AAAA,IAC5F,QAAQC,EAAkB,QAAQH,EAAmB,QAAQD,EAAc,SAASG,EAAY;AAAA,EACpG;AACA;AAOA,MAAME,KAAQ,CAAA7H,OAAY;AAAA,EACxB,MAAM;AAAA,EACN,SAAAA;AAAA,EACA,MAAM,GAAGhB,GAAO;AACd,UAAM;AAAA,MACJ,GAAAqH;AAAA,MACA,GAAAC;AAAA,MACA,WAAAlD;AAAA,MACA,OAAAQ;AAAA,MACA,UAAAuC;AAAA,MACA,UAAAgB;AAAA,MACA,gBAAAX;AAAA,IACD,IAAGxH,GAEE;AAAA,MACJ,SAAA0B;AAAA,MACA,SAAAsE,IAAU;AAAA,IACX,IAAG/B,GAASjD,GAAShB,CAAK,KAAK,CAAA;AAChC,QAAI0B,KAAW;AACb,aAAO;AAET,UAAM8G,IAAgBvC,GAAiBD,CAAO,GACxCc,IAAS;AAAA,MACb,GAAAO;AAAA,MACA,GAAAC;AAAA,IACN,GACU/C,IAAOG,GAAiBN,CAAS,GACjCY,IAASR,GAAcD,CAAI,GAC3BuE,IAAkB,MAAM3B,EAAS,cAAczF,CAAO,GACtDqH,IAAUxE,MAAS,KACnByE,IAAUD,IAAU,QAAQ,QAC5BE,IAAUF,IAAU,WAAW,SAC/BG,IAAaH,IAAU,iBAAiB,eACxCI,IAAUvE,EAAM,UAAUI,CAAM,IAAIJ,EAAM,UAAUL,CAAI,IAAIuC,EAAOvC,CAAI,IAAIK,EAAM,SAASI,CAAM,GAChGoE,IAAYtC,EAAOvC,CAAI,IAAIK,EAAM,UAAUL,CAAI,GAC/C8E,IAAoB,OAAOlC,EAAS,mBAAmB,OAAO,SAASA,EAAS,gBAAgBzF,CAAO;AAC7G,QAAI4H,IAAaD,IAAoBA,EAAkBH,CAAU,IAAI;AAGrE,KAAI,CAACI,KAAc,CAAE,OAAOnC,EAAS,aAAa,OAAO,SAASA,EAAS,UAAUkC,CAAiB,QACpGC,IAAanB,EAAS,SAASe,CAAU,KAAKtE,EAAM,SAASI,CAAM;AAErE,UAAMuE,IAAoBJ,IAAU,IAAIC,IAAY,GAI9CI,IAAyBF,IAAa,IAAIR,EAAgB9D,CAAM,IAAI,IAAI,GACxEyE,IAAanG,GAAIkF,EAAcQ,CAAO,GAAGQ,CAAsB,GAC/DE,IAAapG,GAAIkF,EAAcS,CAAO,GAAGO,CAAsB,GAI/DG,IAAQF,GACRlG,KAAM+F,IAAaR,EAAgB9D,CAAM,IAAI0E,GAC7CE,IAASN,IAAa,IAAIR,EAAgB9D,CAAM,IAAI,IAAIuE,GACxDM,IAAS/F,GAAM6F,GAAOC,GAAQrG,EAAG,GAMjCuG,IAAkB,CAACtC,EAAe,SAASnD,GAAaD,CAAS,KAAK,QAAQwF,MAAWC,KAAUjF,EAAM,UAAUI,CAAM,IAAI,KAAK4E,IAASD,IAAQF,IAAaC,KAAcZ,EAAgB9D,CAAM,IAAI,IAAI,GAC5M+E,IAAkBD,IAAkBF,IAASD,IAAQC,IAASD,IAAQC,IAASrG,KAAM;AAC3F,WAAO;AAAA,MACL,CAACgB,CAAI,GAAGuC,EAAOvC,CAAI,IAAIwF;AAAA,MACvB,MAAM;AAAA,QACJ,CAACxF,CAAI,GAAGsF;AAAA,QACR,cAAcD,IAASC,IAASE;AAAA,QAChC,GAAID,KAAmB;AAAA,UACrB,iBAAAC;AAAA,QACD;AAAA,MACF;AAAA,MACD,OAAOD;AAAA,IACb;AAAA,EACG;AACH;AAEA,SAASE,GAAiBlF,GAAWmF,GAAeC,GAAmB;AAErE,UAD2CpF,IAAY,CAAC,GAAGoF,EAAkB,OAAO,CAAA9F,MAAaC,GAAaD,CAAS,MAAMU,CAAS,GAAG,GAAGoF,EAAkB,OAAO,CAAA9F,MAAaC,GAAaD,CAAS,MAAMU,CAAS,CAAC,IAAIoF,EAAkB,OAAO,CAAA9F,MAAaD,GAAQC,CAAS,MAAMA,CAAS,GACxP,OAAO,CAAAA,MAC3CU,IACKT,GAAaD,CAAS,MAAMU,MAAcmF,IAAgB5E,GAA8BjB,CAAS,MAAMA,IAAY,MAErH,EACR;AACH;AAOA,MAAM+F,KAAgB,SAAUnJ,GAAS;AACvC,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,UAAIoK,GAAuBC,GAAwBC;AACnD,YAAM;AAAA,QACJ,OAAA1F;AAAA,QACA,gBAAA4C;AAAA,QACA,WAAApD;AAAA,QACA,UAAA+C;AAAA,QACA,UAAAgB;AAAA,MACD,IAAGnI,GACE;AAAA,QACJ,WAAAuK,IAAY;AAAA,QACZ,WAAAzF;AAAA,QACA,mBAAAoF,IAAoB/G;AAAA,QACpB,eAAA8G,IAAgB;AAAA,QAChB,GAAGO;AAAA,MACX,IAAUvG,GAASjD,GAAShB,CAAK,GACrByK,IAAe3F,MAAc,UAAaoF,MAAsB/G,KAAa6G,GAAiBlF,KAAa,MAAMmF,GAAeC,CAAiB,IAAIA,GACrJQ,IAAW,MAAMzC,GAAejI,GAAOwK,CAAqB,GAC5DG,MAAiBP,IAAwB5C,EAAe,kBAAkB,OAAO,SAAS4C,EAAsB,UAAU,GAC1HQ,IAAmBH,EAAaE,CAAY;AAClD,UAAIC,KAAoB;AACtB,eAAO;AAET,YAAMC,IAAiBlG,GAAkBiG,GAAkBhG,GAAO,OAAOuC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMgB,EAAS,QAAQ,EAAE;AAG7I,UAAI/D,MAAcwG;AAChB,eAAO;AAAA,UACL,OAAO;AAAA,YACL,WAAWH,EAAa,CAAC;AAAA,UAC1B;AAAA,QACX;AAEM,YAAMK,IAAmB,CAACJ,EAASvG,GAAQyG,CAAgB,CAAC,GAAGF,EAASG,EAAe,CAAC,CAAC,GAAGH,EAASG,EAAe,CAAC,CAAC,CAAC,GACjHE,IAAe,CAAC,KAAMV,IAAyB7C,EAAe,kBAAkB,OAAO,SAAS6C,EAAuB,cAAc,CAAA,GAAK;AAAA,QAC9I,WAAWO;AAAA,QACX,WAAWE;AAAA,MACnB,CAAO,GACKE,IAAgBP,EAAaE,IAAe,CAAC;AAGnD,UAAIK;AACF,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,OAAOL,IAAe;AAAA,YACtB,WAAWI;AAAA,UACZ;AAAA,UACD,OAAO;AAAA,YACL,WAAWC;AAAA,UACZ;AAAA,QACX;AAEM,YAAMC,IAA8BF,EAAa,IAAI,CAAAG,MAAK;AACxD,cAAMpG,IAAYT,GAAa6G,EAAE,SAAS;AAC1C,eAAO,CAACA,EAAE,WAAWpG,KAAayF;AAAA;AAAA,UAElCW,EAAE,UAAU,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC9H,GAAKO,OAAMP,IAAMO,IAAG,CAAC;AAAA;AAAA;AAAA,UAErDuH,EAAE,UAAU,CAAC;AAAA,WAAGA,EAAE,SAAS;AAAA,MACnC,CAAO,EAAE,KAAK,CAACC,GAAGC,MAAMD,EAAE,CAAC,IAAIC,EAAE,CAAC,CAAC,GAKvBC,MAAmBf,IAJWW,EAA4B,OAAO,CAAAC,MAAKA,EAAE,CAAC,EAAE;AAAA,QAAM;AAAA;AAAA;AAAA,QAGvF7G,GAAa6G,EAAE,CAAC,CAAC,IAAI,IAAI;AAAA,MAAC,EAAE,MAAM,CAAAvH,MAAKA,KAAK,CAAC,CAAC,EAC+B,CAAC,MAAM,OAAO,SAAS2G,EAAsB,CAAC,MAAMW,EAA4B,CAAC,EAAE,CAAC;AACjK,aAAII,MAAmBjH,IACd;AAAA,QACL,MAAM;AAAA,UACJ,OAAOuG,IAAe;AAAA,UACtB,WAAWI;AAAA,QACZ;AAAA,QACD,OAAO;AAAA,UACL,WAAWM;AAAA,QACZ;AAAA,MACX,IAEa;IACR;AAAA,EACL;AACA,GAQMC,KAAO,SAAUtK,GAAS;AAC9B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,UAAIuL,GAAuBC;AAC3B,YAAM;AAAA,QACJ,WAAApH;AAAA,QACA,gBAAAoD;AAAA,QACA,OAAA5C;AAAA,QACA,kBAAA6G;AAAA,QACA,UAAAtE;AAAA,QACA,UAAAgB;AAAA,MACD,IAAGnI,GACE;AAAA,QACJ,UAAU0L,IAAgB;AAAA,QAC1B,WAAWC,IAAiB;AAAA,QAC5B,oBAAoBC;AAAA,QACpB,kBAAAC,IAAmB;AAAA,QACnB,2BAAAC,IAA4B;AAAA,QAC5B,eAAAjG,IAAgB;AAAA,QAChB,GAAG2E;AAAA,MACX,IAAUvG,GAASjD,GAAShB,CAAK;AAM3B,WAAKuL,IAAwB/D,EAAe,UAAU,QAAQ+D,EAAsB;AAClF,eAAO;AAET,YAAMlI,IAAOc,GAAQC,CAAS,GACxB2H,IAAkB5H,GAAQsH,CAAgB,MAAMA,GAChD5G,IAAM,OAAOsC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMgB,EAAS,QAAQ,IAC/E6D,IAAqBJ,MAAgCG,KAAmB,CAAClG,IAAgB,CAACX,GAAqBuG,CAAgB,CAAC,IAAItG,GAAsBsG,CAAgB;AAChL,MAAI,CAACG,KAA+BE,MAA8B,UAChEE,EAAmB,KAAK,GAAGpG,GAA0B6F,GAAkB5F,GAAeiG,GAA2BjH,CAAG,CAAC;AAEvH,YAAM1B,IAAa,CAACsI,GAAkB,GAAGO,CAAkB,GACrDtB,IAAW,MAAMzC,GAAejI,GAAOwK,CAAqB,GAC5DyB,IAAY,CAAA;AAClB,UAAIC,MAAkBV,IAAuBhE,EAAe,SAAS,OAAO,SAASgE,EAAqB,cAAc,CAAA;AAIxH,UAHIE,KACFO,EAAU,KAAKvB,EAASrH,CAAI,CAAC,GAE3BsI,GAAgB;AAClB,cAAM1I,IAAQ0B,GAAkBP,GAAWQ,GAAOC,CAAG;AACrD,QAAAoH,EAAU,KAAKvB,EAASzH,EAAM,CAAC,CAAC,GAAGyH,EAASzH,EAAM,CAAC,CAAC,CAAC;AAAA,MACtD;AAOD,UANAiJ,IAAgB,CAAC,GAAGA,GAAe;AAAA,QACjC,WAAA9H;AAAA,QACA,WAAA6H;AAAA,MACR,CAAO,GAGG,CAACA,EAAU,MAAM,CAAA5I,MAAQA,KAAQ,CAAC,GAAG;AACvC,YAAI8I,GAAuBC;AAC3B,cAAMC,OAAeF,IAAwB3E,EAAe,SAAS,OAAO,SAAS2E,EAAsB,UAAU,KAAK,GACpHnB,KAAgB7H,EAAWkJ,CAAS;AAC1C,YAAIrB;AAEF,iBAAO;AAAA,YACL,MAAM;AAAA,cACJ,OAAOqB;AAAA,cACP,WAAWH;AAAA,YACZ;AAAA,YACD,OAAO;AAAA,cACL,WAAWlB;AAAA,YACZ;AAAA,UACb;AAKQ,YAAIK,KAAkBe,IAAwBF,EAAc,OAAO,CAAAhB,MAAKA,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAACC,GAAGC,MAAMD,EAAE,UAAU,CAAC,IAAIC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,MAAM,OAAO,SAASgB,EAAsB;AAG1L,YAAI,CAACf;AACH,kBAAQQ,GAAgB;AAAA,YACtB,KAAK,WACH;AACE,kBAAIS;AACJ,oBAAMlI,KAAakI,IAAwBJ,EAAc,IAAI,CAAAhB,MAAK,CAACA,EAAE,WAAWA,EAAE,UAAU,OAAO,CAAAR,MAAYA,IAAW,CAAC,EAAE,OAAO,CAACtH,GAAKsH,MAAatH,IAAMsH,GAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAACS,GAAGC,MAAMD,EAAE,CAAC,IAAIC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,OAAO,SAASkB,EAAsB,CAAC;AACtP,cAAIlI,MACFiH,IAAiBjH;AAEnB;AAAA,YACD;AAAA,YACH,KAAK;AACH,cAAAiH,IAAiBI;AACjB;AAAA,UACH;AAEH,YAAIrH,MAAciH;AAChB,iBAAO;AAAA,YACL,OAAO;AAAA,cACL,WAAWA;AAAA,YACZ;AAAA,UACb;AAAA,MAEO;AACD,aAAO;IACR;AAAA,EACL;AACA;AAEA,SAASkB,GAAe7B,GAAUvE,GAAM;AACtC,SAAO;AAAA,IACL,KAAKuE,EAAS,MAAMvE,EAAK;AAAA,IACzB,OAAOuE,EAAS,QAAQvE,EAAK;AAAA,IAC7B,QAAQuE,EAAS,SAASvE,EAAK;AAAA,IAC/B,MAAMuE,EAAS,OAAOvE,EAAK;AAAA,EAC/B;AACA;AACA,SAASqG,GAAsB9B,GAAU;AACvC,SAAOzH,GAAM,KAAK,CAAAI,MAAQqH,EAASrH,CAAI,KAAK,CAAC;AAC/C;AAMA,MAAMoJ,KAAO,SAAUzL,GAAS;AAC9B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,YAAM;AAAA,QACJ,OAAA4E;AAAA,MACD,IAAG5E,GACE;AAAA,QACJ,UAAAiH,IAAW;AAAA,QACX,GAAGuD;AAAA,MACX,IAAUvG,GAASjD,GAAShB,CAAK;AAC3B,cAAQiH,GAAQ;AAAA,QACd,KAAK,mBACH;AACE,gBAAMyD,IAAW,MAAMzC,GAAejI,GAAO;AAAA,YAC3C,GAAGwK;AAAA,YACH,gBAAgB;AAAA,UAC9B,CAAa,GACKkC,IAAUH,GAAe7B,GAAU9F,EAAM,SAAS;AACxD,iBAAO;AAAA,YACL,MAAM;AAAA,cACJ,wBAAwB8H;AAAA,cACxB,iBAAiBF,GAAsBE,CAAO;AAAA,YAC/C;AAAA,UACf;AAAA,QACW;AAAA,QACH,KAAK,WACH;AACE,gBAAMhC,IAAW,MAAMzC,GAAejI,GAAO;AAAA,YAC3C,GAAGwK;AAAA,YACH,aAAa;AAAA,UAC3B,CAAa,GACKkC,IAAUH,GAAe7B,GAAU9F,EAAM,QAAQ;AACvD,iBAAO;AAAA,YACL,MAAM;AAAA,cACJ,gBAAgB8H;AAAA,cAChB,SAASF,GAAsBE,CAAO;AAAA,YACvC;AAAA,UACf;AAAA,QACW;AAAA,QACH;AAEI,iBAAO;MAEZ;AAAA,IACF;AAAA,EACL;AACA;AAEA,SAASC,GAAgB/H,GAAO;AAC9B,QAAMgI,IAAOtJ,GAAI,GAAGsB,EAAM,IAAI,CAAAuB,MAAQA,EAAK,IAAI,CAAC,GAC1C0G,IAAOvJ,GAAI,GAAGsB,EAAM,IAAI,CAAAuB,MAAQA,EAAK,GAAG,CAAC,GACzC2G,IAAOvJ,GAAI,GAAGqB,EAAM,IAAI,CAAAuB,MAAQA,EAAK,KAAK,CAAC,GAC3C4G,IAAOxJ,GAAI,GAAGqB,EAAM,IAAI,CAAAuB,MAAQA,EAAK,MAAM,CAAC;AAClD,SAAO;AAAA,IACL,GAAGyG;AAAA,IACH,GAAGC;AAAA,IACH,OAAOC,IAAOF;AAAA,IACd,QAAQG,IAAOF;AAAA,EACnB;AACA;AACA,SAASG,GAAepI,GAAO;AAC7B,QAAMqI,IAAcrI,EAAM,MAAK,EAAG,KAAK,CAACuG,GAAGC,MAAMD,EAAE,IAAIC,EAAE,CAAC,GACpD8B,IAAS,CAAA;AACf,MAAIC,IAAW;AACf,WAASzF,IAAI,GAAGA,IAAIuF,EAAY,QAAQvF,KAAK;AAC3C,UAAMvB,IAAO8G,EAAYvF,CAAC;AAC1B,IAAI,CAACyF,KAAYhH,EAAK,IAAIgH,EAAS,IAAIA,EAAS,SAAS,IACvDD,EAAO,KAAK,CAAC/G,CAAI,CAAC,IAElB+G,EAAOA,EAAO,SAAS,CAAC,EAAE,KAAK/G,CAAI,GAErCgH,IAAWhH;AAAA,EACZ;AACD,SAAO+G,EAAO,IAAI,CAAA/G,MAAQD,GAAiByG,GAAgBxG,CAAI,CAAC,CAAC;AACnE;AAMA,MAAMiH,KAAS,SAAUpM,GAAS;AAChC,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,YAAM;AAAA,QACJ,WAAAoE;AAAA,QACA,UAAA+D;AAAA,QACA,OAAAvD;AAAA,QACA,UAAAuC;AAAA,QACA,UAAAF;AAAA,MACD,IAAGjH,GAIE;AAAA,QACJ,SAAAgG,IAAU;AAAA,QACV,GAAAqB;AAAA,QACA,GAAAC;AAAA,MACR,IAAUrD,GAASjD,GAAShB,CAAK,GACrBqN,IAAoB,MAAM,KAAM,OAAOlG,EAAS,kBAAkB,OAAO,SAASA,EAAS,eAAegB,EAAS,SAAS,MAAO,CAAA,CAAE,GACrImF,IAAcN,GAAeK,CAAiB,GAC9CE,IAAWrH,GAAiByG,GAAgBU,CAAiB,CAAC,GAC9D7E,IAAgBvC,GAAiBD,CAAO;AAC9C,eAASwH,IAAwB;AAE/B,YAAIF,EAAY,WAAW,KAAKA,EAAY,CAAC,EAAE,OAAOA,EAAY,CAAC,EAAE,SAASjG,KAAK,QAAQC,KAAK;AAE9F,iBAAOgG,EAAY,KAAK,CAAAnH,MAAQkB,IAAIlB,EAAK,OAAOqC,EAAc,QAAQnB,IAAIlB,EAAK,QAAQqC,EAAc,SAASlB,IAAInB,EAAK,MAAMqC,EAAc,OAAOlB,IAAInB,EAAK,SAASqC,EAAc,MAAM,KAAK+E;AAI/L,YAAID,EAAY,UAAU,GAAG;AAC3B,cAAI7I,GAAYL,CAAS,MAAM,KAAK;AAClC,kBAAMqJ,IAAYH,EAAY,CAAC,GACzBI,IAAWJ,EAAYA,EAAY,SAAS,CAAC,GAC7CK,IAAQxJ,GAAQC,CAAS,MAAM,OAC/BwJ,KAAMH,EAAU,KAChBI,IAASH,EAAS,QAClBI,IAAOH,IAAQF,EAAU,OAAOC,EAAS,MACzCK,IAAQJ,IAAQF,EAAU,QAAQC,EAAS,OAC3CM,IAAQD,IAAQD,GAChBG,IAASJ,IAASD;AACxB,mBAAO;AAAA,cACL,KAAAA;AAAA,cACA,QAAAC;AAAA,cACA,MAAAC;AAAA,cACA,OAAAC;AAAA,cACA,OAAAC;AAAA,cACA,QAAAC;AAAA,cACA,GAAGH;AAAA,cACH,GAAGF;AAAA,YACjB;AAAA,UACW;AACD,gBAAMM,IAAa/J,GAAQC,CAAS,MAAM,QACpC+J,IAAW5K,GAAI,GAAG+J,EAAY,IAAI,CAAAnH,MAAQA,EAAK,KAAK,CAAC,GACrDiI,IAAU9K,GAAI,GAAGgK,EAAY,IAAI,CAAAnH,MAAQA,EAAK,IAAI,CAAC,GACnDkI,IAAef,EAAY,OAAO,CAAAnH,MAAQ+H,IAAa/H,EAAK,SAASiI,IAAUjI,EAAK,UAAUgI,CAAQ,GACtGP,IAAMS,EAAa,CAAC,EAAE,KACtBR,IAASQ,EAAaA,EAAa,SAAS,CAAC,EAAE,QAC/CP,IAAOM,GACPL,IAAQI,GACRH,IAAQD,IAAQD,GAChBG,IAASJ,IAASD;AACxB,iBAAO;AAAA,YACL,KAAAA;AAAA,YACA,QAAAC;AAAA,YACA,MAAAC;AAAA,YACA,OAAAC;AAAA,YACA,OAAAC;AAAA,YACA,QAAAC;AAAA,YACA,GAAGH;AAAA,YACH,GAAGF;AAAA,UACf;AAAA,QACS;AACD,eAAOL;AAAA,MACR;AACD,YAAMe,IAAa,MAAMnH,EAAS,gBAAgB;AAAA,QAChD,WAAW;AAAA,UACT,uBAAAqG;AAAA,QACD;AAAA,QACD,UAAUrF,EAAS;AAAA,QACnB,UAAAlB;AAAA,MACR,CAAO;AACD,aAAIrC,EAAM,UAAU,MAAM0J,EAAW,UAAU,KAAK1J,EAAM,UAAU,MAAM0J,EAAW,UAAU,KAAK1J,EAAM,UAAU,UAAU0J,EAAW,UAAU,SAAS1J,EAAM,UAAU,WAAW0J,EAAW,UAAU,SACnM;AAAA,QACL,OAAO;AAAA,UACL,OAAOA;AAAA,QACR;AAAA,MACX,IAEa;IACR;AAAA,EACL;AACA;AAKA,eAAeC,GAAqBvO,GAAOgB,GAAS;AAClD,QAAM;AAAA,IACJ,WAAAoD;AAAA,IACA,UAAA+C;AAAA,IACA,UAAAgB;AAAA,EACD,IAAGnI,GACE6E,IAAM,OAAOsC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMgB,EAAS,QAAQ,IAC/E9E,IAAOc,GAAQC,CAAS,GACxBU,IAAYT,GAAaD,CAAS,GAClCsC,IAAajC,GAAYL,CAAS,MAAM,KACxCoK,IAAgB,CAAC,QAAQ,KAAK,EAAE,SAASnL,CAAI,IAAI,KAAK,GACtDoL,IAAiB5J,KAAO6B,IAAa,KAAK,GAC1CgI,IAAWzK,GAASjD,GAAShB,CAAK;AACxC,MAAI;AAAA,IACF,UAAA2O;AAAA,IACA,WAAApE;AAAA,IACA,eAAAxF;AAAA,EACJ,IAAM,OAAO2J,KAAa,WAAW;AAAA,IACjC,UAAUA;AAAA,IACV,WAAW;AAAA,IACX,eAAe;AAAA,EACnB,IAAM;AAAA,IACF,UAAU;AAAA,IACV,WAAW;AAAA,IACX,eAAe;AAAA,IACf,GAAGA;AAAA,EACP;AACE,SAAI5J,KAAa,OAAOC,KAAkB,aACxCwF,IAAYzF,MAAc,QAAQC,IAAgB,KAAKA,IAElD2B,IAAa;AAAA,IAClB,GAAG6D,IAAYkE;AAAA,IACf,GAAGE,IAAWH;AAAA,EAClB,IAAM;AAAA,IACF,GAAGG,IAAWH;AAAA,IACd,GAAGjE,IAAYkE;AAAA,EACnB;AACA;AASA,MAAM5E,KAAS,SAAU7I,GAAS;AAChC,SAAIA,MAAY,WACdA,IAAU,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,UAAI4O,GAAuBrD;AAC3B,YAAM;AAAA,QACJ,GAAAlE;AAAA,QACA,GAAAC;AAAA,QACA,WAAAlD;AAAA,QACA,gBAAAoD;AAAA,MACD,IAAGxH,GACE6O,IAAa,MAAMN,GAAqBvO,GAAOgB,CAAO;AAI5D,aAAIoD,QAAgBwK,IAAwBpH,EAAe,WAAW,OAAO,SAASoH,EAAsB,eAAerD,IAAwB/D,EAAe,UAAU,QAAQ+D,EAAsB,kBACjM,KAEF;AAAA,QACL,GAAGlE,IAAIwH,EAAW;AAAA,QAClB,GAAGvH,IAAIuH,EAAW;AAAA,QAClB,MAAM;AAAA,UACJ,GAAGA;AAAA,UACH,WAAAzK;AAAA,QACD;AAAA,MACT;AAAA,IACK;AAAA,EACL;AACA,GAOM0K,KAAQ,SAAU9N,GAAS;AAC/B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,YAAM;AAAA,QACJ,GAAAqH;AAAA,QACA,GAAAC;AAAA,QACA,WAAAlD;AAAA,MACD,IAAGpE,GACE;AAAA,QACJ,UAAU0L,IAAgB;AAAA,QAC1B,WAAWC,IAAiB;AAAA,QAC5B,SAAAoD,IAAU;AAAA,UACR,IAAI,CAAA1I,MAAQ;AACV,gBAAI;AAAA,cACF,GAAAgB;AAAA,cACA,GAAAC;AAAA,YACD,IAAGjB;AACJ,mBAAO;AAAA,cACL,GAAAgB;AAAA,cACA,GAAAC;AAAA,YACd;AAAA,UACW;AAAA,QACF;AAAA,QACD,GAAGkD;AAAA,MACX,IAAUvG,GAASjD,GAAShB,CAAK,GACrB8G,IAAS;AAAA,QACb,GAAAO;AAAA,QACA,GAAAC;AAAA,MACR,GACYoD,IAAW,MAAMzC,GAAejI,GAAOwK,CAAqB,GAC5DD,IAAY9F,GAAYN,GAAQC,CAAS,CAAC,GAC1CuK,IAAWrK,GAAgBiG,CAAS;AAC1C,UAAIyE,IAAgBlI,EAAO6H,CAAQ,GAC/BM,IAAiBnI,EAAOyD,CAAS;AACrC,UAAImB,GAAe;AACjB,cAAMwD,IAAUP,MAAa,MAAM,QAAQ,QACrCQ,IAAUR,MAAa,MAAM,WAAW,SACxCrL,IAAM0L,IAAgBtE,EAASwE,CAAO,GACtC3L,IAAMyL,IAAgBtE,EAASyE,CAAO;AAC5C,QAAAH,IAAgBlL,GAAMR,GAAK0L,GAAezL,CAAG;AAAA,MAC9C;AACD,UAAIoI,GAAgB;AAClB,cAAMuD,IAAU3E,MAAc,MAAM,QAAQ,QACtC4E,IAAU5E,MAAc,MAAM,WAAW,SACzCjH,IAAM2L,IAAiBvE,EAASwE,CAAO,GACvC3L,IAAM0L,IAAiBvE,EAASyE,CAAO;AAC7C,QAAAF,IAAiBnL,GAAMR,GAAK2L,GAAgB1L,CAAG;AAAA,MAChD;AACD,YAAM6L,IAAgBL,EAAQ,GAAG;AAAA,QAC/B,GAAG/O;AAAA,QACH,CAAC2O,CAAQ,GAAGK;AAAA,QACZ,CAACzE,CAAS,GAAG0E;AAAA,MACrB,CAAO;AACD,aAAO;AAAA,QACL,GAAGG;AAAA,QACH,MAAM;AAAA,UACJ,GAAGA,EAAc,IAAI/H;AAAA,UACrB,GAAG+H,EAAc,IAAI9H;AAAA,QACtB;AAAA,MACT;AAAA,IACK;AAAA,EACL;AACA,GA4EM+H,KAAO,SAAUrO,GAAS;AAC9B,SAAIA,MAAY,WACdA,IAAU,CAAA,IAEL;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,MAAM,GAAGhB,GAAO;AACd,YAAM;AAAA,QACJ,WAAAoE;AAAA,QACA,OAAAQ;AAAA,QACA,UAAAuC;AAAA,QACA,UAAAgB;AAAA,MACD,IAAGnI,GACE;AAAA,QACJ,OAAAsP,IAAQ,MAAM;AAAA,QAAE;AAAA,QAChB,GAAG9E;AAAA,MACX,IAAUvG,GAASjD,GAAShB,CAAK,GACrB0K,IAAW,MAAMzC,GAAejI,GAAOwK,CAAqB,GAC5DnH,IAAOc,GAAQC,CAAS,GACxBU,IAAYT,GAAaD,CAAS,GAClC2E,IAAUtE,GAAYL,CAAS,MAAM,KACrC;AAAA,QACJ,OAAA4J;AAAA,QACA,QAAAC;AAAA,MACR,IAAUrJ,EAAM;AACV,UAAI2K,GACAC;AACJ,MAAInM,MAAS,SAASA,MAAS,YAC7BkM,IAAalM,GACbmM,IAAY1K,OAAgB,OAAOqC,EAAS,SAAS,OAAO,SAASA,EAAS,MAAMgB,EAAS,QAAQ,KAAM,UAAU,SAAS,SAAS,YAEvIqH,IAAYnM,GACZkM,IAAazK,MAAc,QAAQ,QAAQ;AAE7C,YAAM2K,IAA0BxB,IAASvD,EAAS6E,CAAU,GACtDG,IAAyB1B,IAAQtD,EAAS8E,CAAS,GACnDG,IAAU,CAAC3P,EAAM,eAAe;AACtC,UAAI4P,IAAkBH,GAClBI,IAAiBH;AACrB,UAAI3G,GAAS;AACX,cAAM+G,IAAuB9B,IAAQtD,EAAS,OAAOA,EAAS;AAC9D,QAAAmF,IAAiB/K,KAAa6K,IAAUrM,GAAIoM,GAAwBI,CAAoB,IAAIA;AAAA,MACpG,OAAa;AACL,cAAMC,IAAwB9B,IAASvD,EAAS,MAAMA,EAAS;AAC/D,QAAAkF,IAAkB9K,KAAa6K,IAAUrM,GAAImM,GAAyBM,CAAqB,IAAIA;AAAA,MAChG;AACD,UAAIJ,KAAW,CAAC7K,GAAW;AACzB,cAAMkL,IAAOzM,GAAImH,EAAS,MAAM,CAAC,GAC3BuF,IAAO1M,GAAImH,EAAS,OAAO,CAAC,GAC5BwF,IAAO3M,GAAImH,EAAS,KAAK,CAAC,GAC1ByF,IAAO5M,GAAImH,EAAS,QAAQ,CAAC;AACnC,QAAI3B,IACF8G,IAAiB7B,IAAQ,KAAKgC,MAAS,KAAKC,MAAS,IAAID,IAAOC,IAAO1M,GAAImH,EAAS,MAAMA,EAAS,KAAK,KAExGkF,IAAkB3B,IAAS,KAAKiC,MAAS,KAAKC,MAAS,IAAID,IAAOC,IAAO5M,GAAImH,EAAS,KAAKA,EAAS,MAAM;AAAA,MAE7G;AACD,YAAM4E,EAAM;AAAA,QACV,GAAGtP;AAAA,QACH,gBAAA6P;AAAA,QACA,iBAAAD;AAAA,MACR,CAAO;AACD,YAAMQ,IAAiB,MAAMjJ,EAAS,cAAcgB,EAAS,QAAQ;AACrE,aAAI6F,MAAUoC,EAAe,SAASnC,MAAWmC,EAAe,SACvD;AAAA,QACL,OAAO;AAAA,UACL,OAAO;AAAA,QACR;AAAA,MACX,IAEa;IACR;AAAA,EACL;AACA;AC3/BA,SAASC,GAAYC,GAAM;AACzB,SAAIC,GAAOD,CAAI,KACLA,EAAK,YAAY,IAAI,YAAW,IAKnC;AACT;AACA,SAASE,GAAUF,GAAM;AACvB,MAAIG;AACJ,UAAQH,KAAQ,SAASG,IAAsBH,EAAK,kBAAkB,OAAO,SAASG,EAAoB,gBAAgB;AAC5H;AACA,SAASC,GAAmBJ,GAAM;AAChC,MAAIjK;AACJ,UAAQA,KAAQkK,GAAOD,CAAI,IAAIA,EAAK,gBAAgBA,EAAK,aAAa,OAAO,aAAa,OAAO,SAASjK,EAAK;AACjH;AACA,SAASkK,GAAO3Q,GAAO;AACrB,SAAOA,aAAiB,QAAQA,aAAiB4Q,GAAU5Q,CAAK,EAAE;AACpE;AACA,SAAS+Q,GAAU/Q,GAAO;AACxB,SAAOA,aAAiB,WAAWA,aAAiB4Q,GAAU5Q,CAAK,EAAE;AACvE;AACA,SAASgR,GAAchR,GAAO;AAC5B,SAAOA,aAAiB,eAAeA,aAAiB4Q,GAAU5Q,CAAK,EAAE;AAC3E;AACA,SAASiR,GAAajR,GAAO;AAE3B,SAAI,OAAO,aAAe,MACjB,KAEFA,aAAiB,cAAcA,aAAiB4Q,GAAU5Q,CAAK,EAAE;AAC1E;AACA,SAASkR,GAAkBpP,GAAS;AAClC,QAAM;AAAA,IACJ,UAAAgJ;AAAA,IACA,WAAAqG;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,EACJ,IAAMC,GAAiBxP,CAAO;AAC5B,SAAO,kCAAkC,KAAKgJ,IAAWsG,IAAYD,CAAS,KAAK,CAAC,CAAC,UAAU,UAAU,EAAE,SAASE,CAAO;AAC7H;AACA,SAASE,GAAezP,GAAS;AAC/B,SAAO,CAAC,SAAS,MAAM,IAAI,EAAE,SAAS2O,GAAY3O,CAAO,CAAC;AAC5D;AACA,SAAS0P,GAAkB1P,GAAS;AAClC,QAAM2P,IAASC,MACTC,IAAML,GAAiBxP,CAAO;AAGpC,SAAO6P,EAAI,cAAc,UAAUA,EAAI,gBAAgB,WAAWA,EAAI,gBAAgBA,EAAI,kBAAkB,WAAW,OAAU,CAACF,MAAWE,EAAI,iBAAiBA,EAAI,mBAAmB,SAAS,OAAU,CAACF,MAAWE,EAAI,SAASA,EAAI,WAAW,SAAS,OAAU,CAAC,aAAa,eAAe,QAAQ,EAAE,KAAK,CAAA3R,OAAU2R,EAAI,cAAc,IAAI,SAAS3R,CAAK,CAAC,KAAK,CAAC,SAAS,UAAU,UAAU,SAAS,EAAE,KAAK,CAAAA,OAAU2R,EAAI,WAAW,IAAI,SAAS3R,CAAK,CAAC;AACnc;AACA,SAAS4R,GAAmB9P,GAAS;AACnC,MAAI+P,IAAcC,GAAchQ,CAAO;AACvC,SAAOkP,GAAca,CAAW,KAAK,CAACE,GAAsBF,CAAW,KAAG;AACxE,QAAIL,GAAkBK,CAAW;AAC/B,aAAOA;AAEP,IAAAA,IAAcC,GAAcD,CAAW;AAAA,EAE1C;AACD,SAAO;AACT;AACA,SAASH,KAAW;AAClB,SAAI,OAAO,MAAQ,OAAe,CAAC,IAAI,WAAiB,KACjD,IAAI,SAAS,2BAA2B,MAAM;AACvD;AACA,SAASK,GAAsBrB,GAAM;AACnC,SAAO,CAAC,QAAQ,QAAQ,WAAW,EAAE,SAASD,GAAYC,CAAI,CAAC;AACjE;AACA,SAASY,GAAiBxP,GAAS;AACjC,SAAO8O,GAAU9O,CAAO,EAAE,iBAAiBA,CAAO;AACpD;AACA,SAASkQ,GAAclQ,GAAS;AAC9B,SAAIiP,GAAUjP,CAAO,IACZ;AAAA,IACL,YAAYA,EAAQ;AAAA,IACpB,WAAWA,EAAQ;AAAA,EACzB,IAES;AAAA,IACL,YAAYA,EAAQ;AAAA,IACpB,WAAWA,EAAQ;AAAA,EACvB;AACA;AACA,SAASgQ,GAAcpB,GAAM;AAC3B,MAAID,GAAYC,CAAI,MAAM;AACxB,WAAOA;AAET,QAAMuB;AAAA;AAAA,IAENvB,EAAK;AAAA,IAELA,EAAK;AAAA,IAELO,GAAaP,CAAI,KAAKA,EAAK;AAAA,IAE3BI,GAAmBJ,CAAI;AAAA;AACvB,SAAOO,GAAagB,CAAM,IAAIA,EAAO,OAAOA;AAC9C;AACA,SAASC,GAA2BxB,GAAM;AACxC,QAAMyB,IAAaL,GAAcpB,CAAI;AACrC,SAAIqB,GAAsBI,CAAU,IAC3BzB,EAAK,gBAAgBA,EAAK,cAAc,OAAOA,EAAK,OAEzDM,GAAcmB,CAAU,KAAKjB,GAAkBiB,CAAU,IACpDA,IAEFD,GAA2BC,CAAU;AAC9C;AACA,SAASC,GAAqB1B,GAAMxK,GAAMmM,GAAiB;AACzD,MAAIC;AACJ,EAAIpM,MAAS,WACXA,IAAO,CAAA,IAELmM,MAAoB,WACtBA,IAAkB;AAEpB,QAAME,IAAqBL,GAA2BxB,CAAI,GACpD8B,IAASD,QAAyBD,IAAuB5B,EAAK,kBAAkB,OAAO,SAAS4B,EAAqB,OACrHG,IAAM7B,GAAU2B,CAAkB;AACxC,SAAIC,IACKtM,EAAK,OAAOuM,GAAKA,EAAI,kBAAkB,CAAE,GAAEvB,GAAkBqB,CAAkB,IAAIA,IAAqB,IAAIE,EAAI,gBAAgBJ,IAAkBD,GAAqBK,EAAI,YAAY,IAAI,CAAA,CAAE,IAE/LvM,EAAK,OAAOqM,GAAoBH,GAAqBG,GAAoB,CAAE,GAAEF,CAAe,CAAC;AACtG;ACvHA,SAASK,GAAiB5Q,GAAS;AACjC,QAAM6P,IAAML,GAAiBxP,CAAO;AAGpC,MAAIsM,IAAQ,WAAWuD,EAAI,KAAK,KAAK,GACjCtD,IAAS,WAAWsD,EAAI,MAAM,KAAK;AACvC,QAAMgB,IAAY3B,GAAclP,CAAO,GACjC8Q,IAAcD,IAAY7Q,EAAQ,cAAcsM,GAChDyE,IAAeF,IAAY7Q,EAAQ,eAAeuM,GAClDyE,IAAiBlP,GAAMwK,CAAK,MAAMwE,KAAehP,GAAMyK,CAAM,MAAMwE;AACzE,SAAIC,MACF1E,IAAQwE,GACRvE,IAASwE,IAEJ;AAAA,IACL,OAAAzE;AAAA,IACA,QAAAC;AAAA,IACA,GAAGyE;AAAA,EACP;AACA;AAEA,SAASC,GAAcjR,GAAS;AAC9B,SAAQiP,GAAUjP,CAAO,IAA6BA,IAAzBA,EAAQ;AACvC;AAEA,SAASkR,GAASlR,GAAS;AACzB,QAAMmR,IAAaF,GAAcjR,CAAO;AACxC,MAAI,CAACkP,GAAciC,CAAU;AAC3B,WAAOnP,GAAa,CAAC;AAEvB,QAAMyC,IAAO0M,EAAW,yBAClB;AAAA,IACJ,OAAA7E;AAAA,IACA,QAAAC;AAAA,IACA,GAAA6E;AAAA,EACJ,IAAMR,GAAiBO,CAAU;AAC/B,MAAIxL,KAAKyL,IAAItP,GAAM2C,EAAK,KAAK,IAAIA,EAAK,SAAS6H,GAC3C1G,KAAKwL,IAAItP,GAAM2C,EAAK,MAAM,IAAIA,EAAK,UAAU8H;AAIjD,UAAI,CAAC5G,KAAK,CAAC,OAAO,SAASA,CAAC,OAC1BA,IAAI,KAEF,CAACC,KAAK,CAAC,OAAO,SAASA,CAAC,OAC1BA,IAAI,IAEC;AAAA,IACL,GAAAD;AAAA,IACA,GAAAC;AAAA,EACJ;AACA;AAEA,MAAMyL,KAAyB,gBAAArP,GAAa,CAAC;AAC7C,SAASsP,GAAiBtR,GAAS;AACjC,QAAM2Q,IAAM7B,GAAU9O,CAAO;AAC7B,SAAI,CAAC4P,GAAQ,KAAM,CAACe,EAAI,iBACfU,KAEF;AAAA,IACL,GAAGV,EAAI,eAAe;AAAA,IACtB,GAAGA,EAAI,eAAe;AAAA,EAC1B;AACA;AACA,SAASY,GAAuBvR,GAASwR,GAASC,GAAsB;AAItE,SAHID,MAAY,WACdA,IAAU,KAER,CAACC,KAAwBD,KAAWC,MAAyB3C,GAAU9O,CAAO,IACzE,KAEFwR;AACT;AAEA,SAAS1F,GAAsB9L,GAAS0R,GAAcC,GAAiB3K,GAAc;AACnF,EAAI0K,MAAiB,WACnBA,IAAe,KAEbC,MAAoB,WACtBA,IAAkB;AAEpB,QAAMC,IAAa5R,EAAQ,yBACrBmR,IAAaF,GAAcjR,CAAO;AACxC,MAAI6R,IAAQ7P,GAAa,CAAC;AAC1B,EAAI0P,MACE1K,IACEiI,GAAUjI,CAAY,MACxB6K,IAAQX,GAASlK,CAAY,KAG/B6K,IAAQX,GAASlR,CAAO;AAG5B,QAAM8R,IAAgBP,GAAuBJ,GAAYQ,GAAiB3K,CAAY,IAAIsK,GAAiBH,CAAU,IAAInP,GAAa,CAAC;AACvI,MAAI2D,KAAKiM,EAAW,OAAOE,EAAc,KAAKD,EAAM,GAChDjM,KAAKgM,EAAW,MAAME,EAAc,KAAKD,EAAM,GAC/CvF,IAAQsF,EAAW,QAAQC,EAAM,GACjCtF,IAASqF,EAAW,SAASC,EAAM;AACvC,MAAIV,GAAY;AACd,UAAMR,IAAM7B,GAAUqC,CAAU,GAC1BY,IAAY/K,KAAgBiI,GAAUjI,CAAY,IAAI8H,GAAU9H,CAAY,IAAIA;AACtF,QAAIgL,IAAarB,GACbsB,IAAgBD,EAAW;AAC/B,WAAOC,KAAiBjL,KAAgB+K,MAAcC,KAAY;AAChE,YAAME,IAAchB,GAASe,CAAa,GACpCE,IAAaF,EAAc,yBAC3BpC,IAAML,GAAiByC,CAAa,GACpC7F,IAAO+F,EAAW,QAAQF,EAAc,aAAa,WAAWpC,EAAI,WAAW,KAAKqC,EAAY,GAChGhG,IAAMiG,EAAW,OAAOF,EAAc,YAAY,WAAWpC,EAAI,UAAU,KAAKqC,EAAY;AAClG,MAAAvM,KAAKuM,EAAY,GACjBtM,KAAKsM,EAAY,GACjB5F,KAAS4F,EAAY,GACrB3F,KAAU2F,EAAY,GACtBvM,KAAKyG,GACLxG,KAAKsG,GACL8F,IAAalD,GAAUmD,CAAa,GACpCA,IAAgBD,EAAW;AAAA,IAC5B;AAAA,EACF;AACD,SAAOxN,GAAiB;AAAA,IACtB,OAAA8H;AAAA,IACA,QAAAC;AAAA,IACA,GAAA5G;AAAA,IACA,GAAAC;AAAA,EACJ,CAAG;AACH;AAEA,MAAMwM,KAAoB,CAAC,iBAAiB,QAAQ;AACpD,SAASC,GAAWxN,GAAU;AAC5B,SAAOuN,GAAkB,KAAK,CAAAE,MAAY;AACxC,QAAI;AACF,aAAOzN,EAAS,QAAQyN,CAAQ;AAAA,IACjC,QAAW;AACV,aAAO;AAAA,IACR;AAAA,EACL,CAAG;AACH;AAEA,SAASC,GAAsD5N,GAAM;AACnE,MAAI;AAAA,IACF,UAAA8B;AAAA,IACA,MAAAhC;AAAA,IACA,cAAAuC;AAAA,IACA,UAAAzB;AAAA,EACD,IAAGZ;AACJ,QAAM6M,IAAUjM,MAAa,SACvBiN,IAAkBxD,GAAmBhI,CAAY,GACjDyL,IAAWhM,IAAW4L,GAAW5L,EAAS,QAAQ,IAAI;AAC5D,MAAIO,MAAiBwL,KAAmBC,KAAYjB;AAClD,WAAO/M;AAET,MAAIiO,IAAS;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,EACf,GACMb,IAAQ7P,GAAa,CAAC;AAC1B,QAAMgJ,IAAUhJ,GAAa,CAAC,GACxB2Q,IAA0BzD,GAAclI,CAAY;AAC1D,OAAI2L,KAA2B,CAACA,KAA2B,CAACnB,QACtD7C,GAAY3H,CAAY,MAAM,UAAUoI,GAAkBoD,CAAe,OAC3EE,IAASxC,GAAclJ,CAAY,IAEjCkI,GAAclI,CAAY,IAAG;AAC/B,UAAM4L,IAAa9G,GAAsB9E,CAAY;AACrD,IAAA6K,IAAQX,GAASlK,CAAY,GAC7BgE,EAAQ,IAAI4H,EAAW,IAAI5L,EAAa,YACxCgE,EAAQ,IAAI4H,EAAW,IAAI5L,EAAa;AAAA,EACzC;AAEH,SAAO;AAAA,IACL,OAAOvC,EAAK,QAAQoN,EAAM;AAAA,IAC1B,QAAQpN,EAAK,SAASoN,EAAM;AAAA,IAC5B,GAAGpN,EAAK,IAAIoN,EAAM,IAAIa,EAAO,aAAab,EAAM,IAAI7G,EAAQ;AAAA,IAC5D,GAAGvG,EAAK,IAAIoN,EAAM,IAAIa,EAAO,YAAYb,EAAM,IAAI7G,EAAQ;AAAA,EAC/D;AACA;AAEA,SAAS6H,GAAe7S,GAAS;AAC/B,SAAO,MAAM,KAAKA,EAAQ,eAAgB,CAAA;AAC5C;AAEA,SAAS8S,GAAoB9S,GAAS;AAGpC,SAAO8L,GAAsBkD,GAAmBhP,CAAO,CAAC,EAAE,OAAOkQ,GAAclQ,CAAO,EAAE;AAC1F;AAIA,SAAS+S,GAAgB/S,GAAS;AAChC,QAAMgT,IAAOhE,GAAmBhP,CAAO,GACjC0S,IAASxC,GAAclQ,CAAO,GAC9BiT,IAAOjT,EAAQ,cAAc,MAC7BsM,IAAQzK,GAAImR,EAAK,aAAaA,EAAK,aAAaC,EAAK,aAAaA,EAAK,WAAW,GAClF1G,IAAS1K,GAAImR,EAAK,cAAcA,EAAK,cAAcC,EAAK,cAAcA,EAAK,YAAY;AAC7F,MAAItN,IAAI,CAAC+M,EAAO,aAAaI,GAAoB9S,CAAO;AACxD,QAAM4F,IAAI,CAAC8M,EAAO;AAClB,SAAIlD,GAAiByD,CAAI,EAAE,cAAc,UACvCtN,KAAK9D,GAAImR,EAAK,aAAaC,EAAK,WAAW,IAAI3G,IAE1C;AAAA,IACL,OAAAA;AAAA,IACA,QAAAC;AAAA,IACA,GAAA5G;AAAA,IACA,GAAAC;AAAA,EACJ;AACA;AAEA,SAASsN,GAAgBlT,GAASuF,GAAU;AAC1C,QAAMoL,IAAM7B,GAAU9O,CAAO,GACvBgT,IAAOhE,GAAmBhP,CAAO,GACjCmT,IAAiBxC,EAAI;AAC3B,MAAIrE,IAAQ0G,EAAK,aACbzG,IAASyG,EAAK,cACdrN,IAAI,GACJC,IAAI;AACR,MAAIuN,GAAgB;AAClB,IAAA7G,IAAQ6G,EAAe,OACvB5G,IAAS4G,EAAe;AACxB,UAAMC,IAAsBxD;AAC5B,KAAI,CAACwD,KAAuBA,KAAuB7N,MAAa,aAC9DI,IAAIwN,EAAe,YACnBvN,IAAIuN,EAAe;AAAA,EAEtB;AACD,SAAO;AAAA,IACL,OAAA7G;AAAA,IACA,QAAAC;AAAA,IACA,GAAA5G;AAAA,IACA,GAAAC;AAAA,EACJ;AACA;AAGA,SAASyN,GAA2BrT,GAASuF,GAAU;AACrD,QAAMqM,IAAa9F,GAAsB9L,GAAS,IAAMuF,MAAa,OAAO,GACtE2G,IAAM0F,EAAW,MAAM5R,EAAQ,WAC/BoM,IAAOwF,EAAW,OAAO5R,EAAQ,YACjC6R,IAAQ3C,GAAclP,CAAO,IAAIkR,GAASlR,CAAO,IAAIgC,GAAa,CAAC,GACnEsK,IAAQtM,EAAQ,cAAc6R,EAAM,GACpCtF,IAASvM,EAAQ,eAAe6R,EAAM,GACtClM,IAAIyG,IAAOyF,EAAM,GACjBjM,IAAIsG,IAAM2F,EAAM;AACtB,SAAO;AAAA,IACL,OAAAvF;AAAA,IACA,QAAAC;AAAA,IACA,GAAA5G;AAAA,IACA,GAAAC;AAAA,EACJ;AACA;AACA,SAAS0N,GAAkCtT,GAASuT,GAAkBhO,GAAU;AAC9E,MAAId;AACJ,MAAI8O,MAAqB;AACvB,IAAA9O,IAAOyO,GAAgBlT,GAASuF,CAAQ;AAAA,WAC/BgO,MAAqB;AAC9B,IAAA9O,IAAOsO,GAAgB/D,GAAmBhP,CAAO,CAAC;AAAA,WACzCiP,GAAUsE,CAAgB;AACnC,IAAA9O,IAAO4O,GAA2BE,GAAkBhO,CAAQ;AAAA,OACvD;AACL,UAAMuM,IAAgBR,GAAiBtR,CAAO;AAC9C,IAAAyE,IAAO;AAAA,MACL,GAAG8O;AAAA,MACH,GAAGA,EAAiB,IAAIzB,EAAc;AAAA,MACtC,GAAGyB,EAAiB,IAAIzB,EAAc;AAAA,IAC5C;AAAA,EACG;AACD,SAAOtN,GAAiBC,CAAI;AAC9B;AACA,SAAS+O,GAAyBxT,GAASyT,GAAU;AACnD,QAAMpD,IAAaL,GAAchQ,CAAO;AACxC,SAAIqQ,MAAeoD,KAAY,CAACxE,GAAUoB,CAAU,KAAKJ,GAAsBI,CAAU,IAChF,KAEFb,GAAiBa,CAAU,EAAE,aAAa,WAAWmD,GAAyBnD,GAAYoD,CAAQ;AAC3G;AAKA,SAASC,GAA4B1T,GAAS2T,GAAO;AACnD,QAAMC,IAAeD,EAAM,IAAI3T,CAAO;AACtC,MAAI4T;AACF,WAAOA;AAET,MAAIzD,IAASG,GAAqBtQ,GAAS,CAAA,GAAI,EAAK,EAAE,OAAO,CAAAX,MAAM4P,GAAU5P,CAAE,KAAKsP,GAAYtP,CAAE,MAAM,MAAM,GAC1GwU,IAAsC;AAC1C,QAAMC,IAAiBtE,GAAiBxP,CAAO,EAAE,aAAa;AAC9D,MAAI+P,IAAc+D,IAAiB9D,GAAchQ,CAAO,IAAIA;AAG5D,SAAOiP,GAAUc,CAAW,KAAK,CAACE,GAAsBF,CAAW,KAAG;AACpE,UAAMgE,IAAgBvE,GAAiBO,CAAW,GAC5CiE,IAA0BtE,GAAkBK,CAAW;AAC7D,IAAI,CAACiE,KAA2BD,EAAc,aAAa,YACzDF,IAAsC,QAEVC,IAAiB,CAACE,KAA2B,CAACH,IAAsC,CAACG,KAA2BD,EAAc,aAAa,YAAY,CAAC,CAACF,KAAuC,CAAC,YAAY,OAAO,EAAE,SAASA,EAAoC,QAAQ,KAAKzE,GAAkBW,CAAW,KAAK,CAACiE,KAA2BR,GAAyBxT,GAAS+P,CAAW,KAGvZI,IAASA,EAAO,OAAO,CAAA8D,MAAYA,MAAalE,CAAW,IAG3D8D,IAAsCE,GAExChE,IAAcC,GAAcD,CAAW;AAAA,EACxC;AACD,SAAA4D,EAAM,IAAI3T,GAASmQ,CAAM,GAClBA;AACT;AAIA,SAAS+D,GAAgBvP,GAAM;AAC7B,MAAI;AAAA,IACF,SAAA3E;AAAA,IACA,UAAA0G;AAAA,IACA,cAAAC;AAAA,IACA,UAAApB;AAAA,EACD,IAAGZ;AAEJ,QAAMwP,IAAoB,CAAC,GADMzN,MAAa,sBAAsBgN,GAA4B1T,GAAS,KAAK,EAAE,IAAI,CAAA,EAAG,OAAO0G,CAAQ,GAC9EC,CAAY,GAC9DyN,IAAwBD,EAAkB,CAAC,GAC3CE,IAAeF,EAAkB,OAAO,CAACG,GAASf,MAAqB;AAC3E,UAAM9O,IAAO6O,GAAkCtT,GAASuT,GAAkBhO,CAAQ;AAClF,WAAA+O,EAAQ,MAAMzS,GAAI4C,EAAK,KAAK6P,EAAQ,GAAG,GACvCA,EAAQ,QAAQ1S,GAAI6C,EAAK,OAAO6P,EAAQ,KAAK,GAC7CA,EAAQ,SAAS1S,GAAI6C,EAAK,QAAQ6P,EAAQ,MAAM,GAChDA,EAAQ,OAAOzS,GAAI4C,EAAK,MAAM6P,EAAQ,IAAI,GACnCA;AAAA,EACR,GAAEhB,GAAkCtT,GAASoU,GAAuB7O,CAAQ,CAAC;AAC9E,SAAO;AAAA,IACL,OAAO8O,EAAa,QAAQA,EAAa;AAAA,IACzC,QAAQA,EAAa,SAASA,EAAa;AAAA,IAC3C,GAAGA,EAAa;AAAA,IAChB,GAAGA,EAAa;AAAA,EACpB;AACA;AAEA,SAASE,GAAcvU,GAAS;AAC9B,QAAM;AAAA,IACJ,OAAAsM;AAAA,IACA,QAAAC;AAAA,EACJ,IAAMqE,GAAiB5Q,CAAO;AAC5B,SAAO;AAAA,IACL,OAAAsM;AAAA,IACA,QAAAC;AAAA,EACJ;AACA;AAEA,SAASiI,GAA8BxU,GAASgH,GAAczB,GAAU;AACtE,QAAMoN,IAA0BzD,GAAclI,CAAY,GACpDwL,IAAkBxD,GAAmBhI,CAAY,GACjDwK,IAAUjM,MAAa,SACvBd,IAAOqH,GAAsB9L,GAAS,IAAMwR,GAASxK,CAAY;AACvE,MAAI0L,IAAS;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,EACf;AACE,QAAM1H,IAAUhJ,GAAa,CAAC;AAC9B,MAAI2Q,KAA2B,CAACA,KAA2B,CAACnB;AAI1D,SAHI7C,GAAY3H,CAAY,MAAM,UAAUoI,GAAkBoD,CAAe,OAC3EE,IAASxC,GAAclJ,CAAY,IAEjC2L,GAAyB;AAC3B,YAAMC,IAAa9G,GAAsB9E,GAAc,IAAMwK,GAASxK,CAAY;AAClF,MAAAgE,EAAQ,IAAI4H,EAAW,IAAI5L,EAAa,YACxCgE,EAAQ,IAAI4H,EAAW,IAAI5L,EAAa;AAAA,IACzC;AAAM,MAAIwL,MACTxH,EAAQ,IAAI8H,GAAoBN,CAAe;AAGnD,QAAM7M,IAAIlB,EAAK,OAAOiO,EAAO,aAAa1H,EAAQ,GAC5CpF,IAAInB,EAAK,MAAMiO,EAAO,YAAY1H,EAAQ;AAChD,SAAO;AAAA,IACL,GAAArF;AAAA,IACA,GAAAC;AAAA,IACA,OAAOnB,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACjB;AACA;AAEA,SAASgQ,GAAoBzU,GAAS0U,GAAU;AAC9C,SAAI,CAACxF,GAAclP,CAAO,KAAKwP,GAAiBxP,CAAO,EAAE,aAAa,UAC7D,OAEL0U,IACKA,EAAS1U,CAAO,IAElBA,EAAQ;AACjB;AAIA,SAAS2U,GAAgB3U,GAAS0U,GAAU;AAC1C,QAAME,IAAS9F,GAAU9O,CAAO;AAChC,MAAI,CAACkP,GAAclP,CAAO,KAAKqS,GAAWrS,CAAO;AAC/C,WAAO4U;AAET,MAAI5N,IAAeyN,GAAoBzU,GAAS0U,CAAQ;AACxD,SAAO1N,KAAgByI,GAAezI,CAAY,KAAKwI,GAAiBxI,CAAY,EAAE,aAAa;AACjG,IAAAA,IAAeyN,GAAoBzN,GAAc0N,CAAQ;AAE3D,SAAI1N,MAAiB2H,GAAY3H,CAAY,MAAM,UAAU2H,GAAY3H,CAAY,MAAM,UAAUwI,GAAiBxI,CAAY,EAAE,aAAa,YAAY,CAAC0I,GAAkB1I,CAAY,KACnL4N,IAEF5N,KAAgB8I,GAAmB9P,CAAO,KAAK4U;AACxD;AAEA,MAAMC,KAAkB,eAAgBxO,GAAM;AAC5C,QAAMyO,IAAoB,KAAK,mBAAmBH,IAC5CI,IAAkB,KAAK;AAC7B,SAAO;AAAA,IACL,WAAWP,GAA8BnO,EAAK,WAAW,MAAMyO,EAAkBzO,EAAK,QAAQ,GAAGA,EAAK,QAAQ;AAAA,IAC9G,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAI,MAAM0O,EAAgB1O,EAAK,QAAQ;AAAA,IACxC;AAAA,EACL;AACA;AAEA,SAAS2O,GAAMhV,GAAS;AACtB,SAAOwP,GAAiBxP,CAAO,EAAE,cAAc;AACjD;AAEA,MAAMyF,KAAW;AAAA,EACf,uDAAA8M;AAAA,EACA,oBAAAvD;AAAA,EACA,iBAAAkF;AAAA,EACA,iBAAAS;AAAA,EACA,iBAAAE;AAAA,EACA,gBAAAhC;AAAA,EACA,eAAA0B;AAAA,EACA,UAAArD;AAAA,EACA,WAAAjC;AAAA,EACA,OAAA+F;AACF;AAGA,SAASC,GAAYjV,GAASkV,GAAQ;AACpC,MAAIC,IAAK,MACLC;AACJ,QAAMC,IAAOrG,GAAmBhP,CAAO;AACvC,WAASsV,IAAU;AACjB,QAAIC;AACJ,iBAAaH,CAAS,IACrBG,IAAMJ,MAAO,QAAQI,EAAI,WAAU,GACpCJ,IAAK;AAAA,EACN;AACD,WAASK,EAAQC,GAAMC,GAAW;AAChC,IAAID,MAAS,WACXA,IAAO,KAELC,MAAc,WAChBA,IAAY,IAEdJ;AACA,UAAM;AAAA,MACJ,MAAAlJ;AAAA,MACA,KAAAF;AAAA,MACA,OAAAI;AAAA,MACA,QAAAC;AAAA,IACN,IAAQvM,EAAQ;AAIZ,QAHKyV,KACHP,KAEE,CAAC5I,KAAS,CAACC;AACb;AAEF,UAAMoJ,IAAW5T,GAAMmK,CAAG,GACpB0J,IAAa7T,GAAMsT,EAAK,eAAejJ,IAAOE,EAAM,GACpDuJ,IAAc9T,GAAMsT,EAAK,gBAAgBnJ,IAAMK,EAAO,GACtDuJ,IAAY/T,GAAMqK,CAAI,GAEtB9M,IAAU;AAAA,MACd,YAFiB,CAACqW,IAAW,QAAQ,CAACC,IAAa,QAAQ,CAACC,IAAc,QAAQ,CAACC,IAAY;AAAA,MAG/F,WAAWjU,GAAI,GAAGD,GAAI,GAAG8T,CAAS,CAAC,KAAK;AAAA,IAC9C;AACI,QAAIK,IAAgB;AACpB,aAASC,EAAcC,GAAS;AAC9B,YAAMC,IAAQD,EAAQ,CAAC,EAAE;AACzB,UAAIC,MAAUR,GAAW;AACvB,YAAI,CAACK;AACH,iBAAOP,EAAO;AAEhB,QAAKU,IAKHV,EAAQ,IAAOU,CAAK,IAJpBd,IAAY,WAAW,MAAM;AAC3B,UAAAI,EAAQ,IAAO,IAAI;AAAA,QACpB,GAAE,GAAG;AAAA,MAIT;AACD,MAAAO,IAAgB;AAAA,IACjB;AAID,QAAI;AACF,MAAAZ,IAAK,IAAI,qBAAqBa,GAAe;AAAA,QAC3C,GAAG1W;AAAA;AAAA,QAEH,MAAM+V,EAAK;AAAA,MACnB,CAAO;AAAA,IACF,QAAW;AACV,MAAAF,IAAK,IAAI,qBAAqBa,GAAe1W,CAAO;AAAA,IACrD;AACD,IAAA6V,EAAG,QAAQnV,CAAO;AAAA,EACnB;AACD,SAAAwV,EAAQ,EAAI,GACLF;AACT;AAUA,SAASa,GAAWvR,GAAWC,GAAUuR,GAAQ9W,GAAS;AACxD,EAAIA,MAAY,WACdA,IAAU,CAAA;AAEZ,QAAM;AAAA,IACJ,gBAAA+W,IAAiB;AAAA,IACjB,gBAAAC,IAAiB;AAAA,IACjB,eAAAC,IAAgB,OAAO,kBAAmB;AAAA,IAC1C,aAAAC,IAAc,OAAO,wBAAyB;AAAA,IAC9C,gBAAAC,IAAiB;AAAA,EAClB,IAAGnX,GACEoX,IAAczF,GAAcrM,CAAS,GACrC+R,IAAYN,KAAkBC,IAAiB,CAAC,GAAII,IAAcpG,GAAqBoG,CAAW,IAAI,CAAE,GAAG,GAAGpG,GAAqBzL,CAAQ,CAAC,IAAI,CAAA;AACtJ,EAAA8R,EAAU,QAAQ,CAAA1C,MAAY;AAC5B,IAAAoC,KAAkBpC,EAAS,iBAAiB,UAAUmC,GAAQ;AAAA,MAC5D,SAAS;AAAA,IACf,CAAK,GACDE,KAAkBrC,EAAS,iBAAiB,UAAUmC,CAAM;AAAA,EAChE,CAAG;AACD,QAAMQ,IAAYF,KAAeF,IAAcvB,GAAYyB,GAAaN,CAAM,IAAI;AAClF,MAAIS,IAAiB,IACjBC,IAAiB;AACrB,EAAIP,MACFO,IAAiB,IAAI,eAAe,CAAAnS,MAAQ;AAC1C,QAAI,CAACoS,CAAU,IAAIpS;AACnB,IAAIoS,KAAcA,EAAW,WAAWL,KAAeI,MAGrDA,EAAe,UAAUjS,CAAQ,GACjC,qBAAqBgS,CAAc,GACnCA,IAAiB,sBAAsB,MAAM;AAC3C,UAAIG;AACJ,OAACA,IAAkBF,MAAmB,QAAQE,EAAgB,QAAQnS,CAAQ;AAAA,IACxF,CAAS,IAEHuR;EACN,CAAK,GACGM,KAAe,CAACD,KAClBK,EAAe,QAAQJ,CAAW,GAEpCI,EAAe,QAAQjS,CAAQ;AAEjC,MAAIoS,GACAC,IAAcT,IAAiB3K,GAAsBlH,CAAS,IAAI;AACtE,EAAI6R,KACFU;AAEF,WAASA,IAAY;AACnB,UAAMC,IAActL,GAAsBlH,CAAS;AACnD,IAAIsS,MAAgBE,EAAY,MAAMF,EAAY,KAAKE,EAAY,MAAMF,EAAY,KAAKE,EAAY,UAAUF,EAAY,SAASE,EAAY,WAAWF,EAAY,WACtKd,KAEFc,IAAcE,GACdH,IAAU,sBAAsBE,CAAS;AAAA,EAC1C;AACD,SAAAf,KACO,MAAM;AACX,QAAIiB;AACJ,IAAAV,EAAU,QAAQ,CAAA1C,MAAY;AAC5B,MAAAoC,KAAkBpC,EAAS,oBAAoB,UAAUmC,CAAM,GAC/DE,KAAkBrC,EAAS,oBAAoB,UAAUmC,CAAM;AAAA,IACrE,CAAK,GACDQ,KAAa,QAAQA,MACpBS,IAAmBP,MAAmB,QAAQO,EAAiB,WAAU,GAC1EP,IAAiB,MACbL,KACF,qBAAqBQ,CAAO;AAAA,EAElC;AACA;AAQA,MAAMxO,KAAgB6O,IAOhBlK,KAAQmK,IAQR3N,KAAO4N,IAQP7J,KAAO8J,IAOP1M,KAAO2M,IAOPvQ,KAAQwQ,IAORjM,KAASkM,IAWTvS,KAAkB,CAACT,GAAWC,GAAUvF,MAAY;AAIxD,QAAMqU,IAAQ,oBAAI,OACZkE,IAAgB;AAAA,IACpB,UAAApS;AAAA,IACA,GAAGnG;AAAA,EACP,GACQwY,IAAoB;AAAA,IACxB,GAAGD,EAAc;AAAA,IACjB,IAAIlE;AAAA,EACR;AACE,SAAOoE,GAAkBnT,GAAWC,GAAU;AAAA,IAC5C,GAAGgT;AAAA,IACH,UAAUC;AAAA,EACd,CAAG;AACH;AC/pBA,SAASE,GAA0BC,GAAQ;AACzC,SAAOA,KAAU,QAAQ,OAAOA,KAAW,YAAY,SAASA;AAClE;AACA,SAAShH,GAAcgH,GAAQ;AAC7B,MAAID,GAA0BC,CAAM,GAAG;AACrC,UAAMjY,IAAUiY,EAAO;AACvB,WAAOpJ,GAAO7O,CAAO,KAAK2O,GAAY3O,CAAO,MAAM,aAAa,OAAOA;AAAA,EACxE;AACD,SAAOiY;AACT;AAOA,SAAS9Q,GAAM7H,GAAS;AACtB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,GAAG4Y,GAAM;AACP,YAAMlY,IAAUiR,GAAckH,EAAM7Y,EAAQ,OAAO,CAAC;AACpD,aAAIU,KAAW,OACN,KAEF2X,GAAQ;AAAA,QACb,SAAA3X;AAAA,QACA,SAASV,EAAQ;AAAA,MACzB,CAAO,EAAE,GAAG4Y,CAAI;AAAA,IACX;AAAA,EACL;AACA;AAEA,SAASE,GAAOpY,GAAS;AACvB,SAAI,OAAO,SAAW,MACb,KAEGA,EAAQ,cAAc,eAAe,QACtC,oBAAoB;AACjC;AAEA,SAASqY,GAAWrY,GAAS9B,GAAO;AAClC,QAAMoa,IAAMF,GAAOpY,CAAO;AAC1B,SAAO,KAAK,MAAM9B,IAAQoa,CAAG,IAAIA;AACnC;AASA,SAASC,GAAY3T,GAAWC,GAAUvF,GAAS;AACjD,EAAIA,MAAY,WACdA,IAAU,CAAA;AAEZ,QAAMkZ,IAA6BlZ,EAAQ,sBACrCmZ,IAAaxa,EAAS,MAAM;AAChC,QAAIya;AACJ,YAAQA,IAASP,EAAM7Y,EAAQ,IAAI,MAAM,OAAOoZ,IAAS;AAAA,EAC7D,CAAG,GACKC,IAAmB1a,EAAS,MAAMka,EAAM7Y,EAAQ,UAAU,CAAC,GAC3DsZ,IAAkB3a,EAAS,MAAM;AACrC,QAAI4a;AACJ,YAAQA,IAAUV,EAAM7Y,EAAQ,SAAS,MAAM,OAAOuZ,IAAU;AAAA,EACpE,CAAG,GACKC,IAAiB7a,EAAS,MAAM;AACpC,QAAI8a;AACJ,YAAQA,IAAUZ,EAAM7Y,EAAQ,QAAQ,MAAM,OAAOyZ,IAAU;AAAA,EACnE,CAAG,GACKC,IAAkB/a,EAAS,MAAM;AACrC,QAAIgb;AACJ,YAAQA,IAAUd,EAAM7Y,EAAQ,SAAS,MAAM,OAAO2Z,IAAU;AAAA,EACpE,CAAG,GACKC,IAAmBjb,EAAS,MAAMgT,GAAcrM,EAAU,KAAK,CAAC,GAChEuU,IAAkBlb,EAAS,MAAMgT,GAAcpM,EAAS,KAAK,CAAC,GAC9Dc,IAAIyT,EAAI,CAAC,GACTxT,IAAIwT,EAAI,CAAC,GACT7T,IAAW6T,EAAIN,EAAe,KAAK,GACnCpW,IAAY0W,EAAIR,EAAgB,KAAK,GACrC9S,IAAiBuT,GAAW,CAAA,CAAE,GAC9BC,IAAeF,EAAI,EAAK,GACxBG,IAAiBtb,EAAS,MAAM;AACpC,UAAMub,IAAgB;AAAA,MACpB,UAAUjU,EAAS;AAAA,MACnB,MAAM;AAAA,MACN,KAAK;AAAA,IACX;AACI,QAAI,CAAC4T,EAAgB;AACnB,aAAOK;AAET,UAAMC,IAAOpB,GAAWc,EAAgB,OAAOxT,EAAE,KAAK,GAChD+T,IAAOrB,GAAWc,EAAgB,OAAOvT,EAAE,KAAK;AACtD,WAAIoT,EAAgB,QACX;AAAA,MACL,GAAGQ;AAAA,MACH,WAAW,eAAeC,IAAO,SAASC,IAAO;AAAA,MACjD,GAAItB,GAAOe,EAAgB,KAAK,KAAK,OAAO;AAAA,QAC1C,YAAY;AAAA,MACb;AAAA,IACT,IAEW;AAAA,MACL,UAAU5T,EAAS;AAAA,MACnB,MAAMkU,IAAO;AAAA,MACb,KAAKC,IAAO;AAAA,IAClB;AAAA,EACA,CAAG;AACD,MAAIC;AACJ,WAASvD,IAAS;AAChB,IAAI8C,EAAiB,SAAS,QAAQC,EAAgB,SAAS,QAG/D9T,GAAgB6T,EAAiB,OAAOC,EAAgB,OAAO;AAAA,MAC7D,YAAYR,EAAiB;AAAA,MAC7B,WAAWC,EAAgB;AAAA,MAC3B,UAAUE,EAAe;AAAA,IAC/B,CAAK,EAAE,KAAK,CAAAc,MAAY;AAClB,MAAAjU,EAAE,QAAQiU,EAAS,GACnBhU,EAAE,QAAQgU,EAAS,GACnBrU,EAAS,QAAQqU,EAAS,UAC1BlX,EAAU,QAAQkX,EAAS,WAC3B9T,EAAe,QAAQ8T,EAAS,gBAChCN,EAAa,QAAQ;AAAA,IAC3B,CAAK;AAAA,EACF;AACD,WAAShE,IAAU;AACjB,IAAI,OAAOqE,KAAgC,eACzCA,KACAA,IAA8B;AAAA,EAEjC;AACD,WAASE,IAAS;AAEhB,QADAvE,KACIkD,MAA+B,QAAW;AAC5C,MAAApC;AACA;AAAA,IACD;AACD,QAAI8C,EAAiB,SAAS,QAAQC,EAAgB,SAAS,MAAM;AACnE,MAAAQ,IAA8BnB,EAA2BU,EAAiB,OAAOC,EAAgB,OAAO/C,CAAM;AAC9G;AAAA,IACD;AAAA,EACF;AACD,WAAS9P,IAAQ;AACf,IAAKmS,EAAW,UACda,EAAa,QAAQ;AAAA,EAExB;AACD,SAAAQ,GAAM,CAACnB,GAAkBC,GAAiBE,CAAc,GAAG1C,GAAQ;AAAA,IACjE,OAAO;AAAA,EACX,CAAG,GACD0D,GAAM,CAACZ,GAAkBC,CAAe,GAAGU,GAAQ;AAAA,IACjD,OAAO;AAAA,EACX,CAAG,GACDC,GAAMrB,GAAYnS,GAAO;AAAA,IACvB,OAAO;AAAA,EACX,CAAG,GACGyT,GAAe,KACjBC,GAAe1E,CAAO,GAEjB;AAAA,IACL,GAAG2E,GAAgBtU,CAAC;AAAA,IACpB,GAAGsU,GAAgBrU,CAAC;AAAA,IACpB,UAAUqU,GAAgB1U,CAAQ;AAAA,IAClC,WAAW0U,GAAgBvX,CAAS;AAAA,IACpC,gBAAgBuX,GAAgBnU,CAAc;AAAA,IAC9C,cAAcmU,GAAgBX,CAAY;AAAA,IAC1C,gBAAAC;AAAA,IACA,QAAAnD;AAAA,EACJ;AACA;ACzKA,MAAM8D,yBAAoB,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAEKC,KAAyB,kBAOzBC,KAAmB,kEAOnBC,KACJ,sIAEIC,KAAmB,CACvBC,GACAC,MACG;AACG,QAAAC,IAAgBF,EAAU,SAAS,YAAY;AAEjD,SAAAC,EAAqB,SAASC,CAAa,IACzCP,GAAc,IAAIO,CAAa,IAC1B,GACLL,GAAiB,KAAKG,EAAU,aAAa,EAAE,KAC7CF,GAAiB,KAAKE,EAAU,aAAa,EAAE,KAI9C,KAIFC,EACJ,OAAO,CAACE,MAA6CA,aAA0B,MAAM,EACrF,KAAK,CAACC,MAAUA,EAAM,KAAKF,CAAa,CAAC;AAC9C,GAEaG,KAAmB;AAAA;AAAA,EAE9B,KAAK,CAAC,SAAS,OAAO,MAAM,QAAQ,QAAQT,EAAsB;AAAA,EAClE,GAAK,CAAC,UAAU,QAAQ,SAAS,KAAK;AAAA,EACtC,MAAQ,CAAC;AAAA,EACT,GAAK,CAAC;AAAA,EACN,IAAM,CAAC;AAAA,EACP,KAAO,CAAC;AAAA,EACR,MAAQ,CAAC;AAAA,EACT,KAAO,CAAC;AAAA,EACR,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,GAAK,CAAC;AAAA,EACN,KAAO,CAAC,OAAO,UAAU,OAAO,SAAS,SAAS,QAAQ;AAAA,EAC1D,IAAM,CAAC;AAAA,EACP,IAAM,CAAC;AAAA,EACP,GAAK,CAAC;AAAA,EACN,KAAO,CAAC;AAAA,EACR,GAAK,CAAC;AAAA,EACN,OAAS,CAAC;AAAA,EACV,MAAQ,CAAC;AAAA,EACT,KAAO,CAAC;AAAA,EACR,KAAO,CAAC;AAAA,EACR,QAAU,CAAC;AAAA,EACX,GAAK,CAAC;AAAA,EACN,IAAM,CAAC;AACT,GAEaU,KAAe,CAC1BC,GACAC,GACAC,MACG;AACC,MAAA,CAACF,EAAW;AACP,WAAAA;AAGL,MAAAE,KAAoB,OAAOA,KAAqB;AAClD,WAAOA,EAAiBF,CAAU;AAIpC,QAAMG,IADY,IAAI,OAAO,YACK,gBAAgBH,GAAY,WAAW,GACnErU,IAAgCwU,EAAgB,KAAK,iBAAiB,GAAG;AAE/E,aAAWjb,KAAWyG,GAAU;AACxB,UAAAyU,IAAclb,EAAQ,SAAS,YAAY;AAEjD,QAAI,CAAC,OAAO,KAAK+a,CAAS,EAAE,SAASG,CAAW,GAAG;AACjD,MAAAlb,EAAQ,OAAO;AAEf;AAAA,IACF;AAEA,UAAMmb,IAAgBnb,EAAQ,YACxBob,IAAoB,CAAC,GAAIL,EAAU,GAAG,KAAK,IAAK,GAAIA,EAAUG,CAAW,KAAK,CAAA,CAAG;AAEvF,eAAWX,KAAaY;AACtB,MAAKb,GAAiBC,GAAWa,CAAiB,KACxCpb,EAAA,gBAAgBua,EAAU,QAAQ;AAAA,EAGhD;AAEA,SAAOU,EAAgB,KAAK;AAC9B;ACjFA,SAASI,GAAkBnV,GAAI;AAC7B,SAAI6T,GAAe,KACjBC,GAAe9T,CAAE,GACV,MAEF;AACT;AAqIA,SAASoV,GAAmBC,GAAKC,GAAK;AACpC,MAAI,OAAO,SAAW,KAAa;AACjC,UAAMC,IAAQ,EAAE,GAAGF;AACnB,kBAAO,eAAeE,GAAO,OAAO,UAAU;AAAA,MAC5C,YAAY;AAAA,MACZ,QAAQ;AACN,YAAIC,IAAQ;AACZ,eAAO;AAAA,UACL,MAAM,OAAO;AAAA,YACX,OAAOF,EAAIE,GAAO;AAAA,YAClB,MAAMA,IAAQF,EAAI;AAAA,UAC9B;AAAA,QACA;AAAA,MACO;AAAA,IACP,CAAK,GACMC;AAAA,EACX;AACI,WAAO,OAAO,OAAO,CAAC,GAAGD,CAAG,GAAGD,CAAG;AAEtC;AAEA,SAASpd,GAAQwd,GAAG;AAClB,SAAO,OAAOA,KAAM,aAAaA,EAAC,IAAKxD,EAAMwD,CAAC;AAChD;AA4EA,MAAMC,KAAW,OAAO,SAAW,OAAe,OAAO,WAAa;AACrD,OAAO,oBAAsB,OAAe,sBAAsB;AACnF,MAAMC,KAAQ,CAACC,MAAQ,OAAOA,IAAQ,KAChCC,KAAa,CAACD,MAAQA,KAAO,MAK7BE,KAAW,OAAO,UAAU,UAC5BC,KAAW,CAACH,MAAQE,GAAS,KAAKF,CAAG,MAAM,mBAI3CI,KAAO,MAAM;AACnB,GAOMC,KAAwB,gBAAAC,GAAQ;AACtC,SAASA,KAAW;AAClB,MAAIC,GAAIC;AACR,SAAOV,QAAcS,IAAK,UAAU,OAAO,SAAS,OAAO,cAAc,OAAO,SAASA,EAAG,eAAe,iBAAiB,KAAK,OAAO,UAAU,SAAS,OAAOC,IAAK,UAAU,OAAO,SAAS,OAAO,cAAc,OAAO,SAASA,EAAG,kBAAkB,KAAK,iBAAiB,KAAK,UAAU,OAAO,SAAS,OAAO,UAAU,SAAS;AAC5U;AAEA,SAASC,GAAoBC,GAAQtW,GAAI;AACvC,WAASuW,KAAWvE,GAAM;AACxB,WAAO,IAAI,QAAQ,CAACwE,GAASC,MAAW;AACtC,cAAQ,QAAQH,EAAO,MAAMtW,EAAG,MAAM,MAAMgS,CAAI,GAAG,EAAE,IAAAhS,GAAI,SAAS,MAAM,MAAAgS,EAAI,CAAE,CAAC,EAAE,KAAKwE,CAAO,EAAE,MAAMC,CAAM;AAAA,IACjH,CAAK;AAAA,EACF;AACD,SAAOF;AACT;AACA,MAAMG,KAAe,CAACC,MACbA,EAAM;AAEf,SAASC,GAAeC,GAAIzd,IAAU,IAAI;AACxC,MAAI0d,GACAC,GACAC,IAAehB;AACnB,QAAMiB,IAAgB,CAACC,MAAW;AAChC,iBAAaA,CAAM,GACnBF,KACAA,IAAehB;AAAA,EACnB;AA+BE,SA9Be,CAACW,MAAW;AACzB,UAAMQ,IAAWlf,GAAQ4e,CAAE,GACrBO,IAAcnf,GAAQmB,EAAQ,OAAO;AAG3C,WAFI0d,KACFG,EAAcH,CAAK,GACjBK,KAAY,KAAKC,MAAgB,UAAUA,KAAe,KACxDL,MACFE,EAAcF,CAAQ,GACtBA,IAAW,OAEN,QAAQ,QAAQJ,EAAM,CAAE,KAE1B,IAAI,QAAQ,CAACH,GAASC,MAAW;AACtC,MAAAO,IAAe5d,EAAQ,iBAAiBqd,IAASD,GAC7CY,KAAe,CAACL,MAClBA,IAAW,WAAW,MAAM;AAC1B,QAAID,KACFG,EAAcH,CAAK,GACrBC,IAAW,MACXP,EAAQG,EAAM,CAAE;AAAA,MACjB,GAAES,CAAW,IAEhBN,IAAQ,WAAW,MAAM;AACvB,QAAIC,KACFE,EAAcF,CAAQ,GACxBA,IAAW,MACXP,EAAQG,EAAM,CAAE;AAAA,MACjB,GAAEQ,CAAQ;AAAA,IACjB,CAAK;AAAA,EACL;AAEA;AAuDA,SAASE,GAAeC,IAAeZ,IAAc;AACnD,QAAMa,IAAWrE,EAAI,EAAI;AACzB,WAASsE,IAAQ;AACf,IAAAD,EAAS,QAAQ;AAAA,EAClB;AACD,WAASE,IAAS;AAChB,IAAAF,EAAS,QAAQ;AAAA,EAClB;AACD,QAAMxc,IAAc,IAAIiX,MAAS;AAC/B,IAAIuF,EAAS,SACXD,EAAa,GAAGtF,CAAI;AAAA,EAC1B;AACE,SAAO,EAAE,UAAU0F,GAASH,CAAQ,GAAG,OAAAC,GAAO,QAAAC,GAAQ,aAAA1c;AACxD;AAQA,SAAS4c,GAAoB3X,GAAI;AAC/B,QAAMyN,IAAwB,uBAAO,OAAO,IAAI;AAChD,SAAO,CAACmK,MACMnK,EAAMmK,CAAG,MACNnK,EAAMmK,CAAG,IAAI5X,EAAG4X,CAAG;AAEtC;AAGA,MAAMC,KAAa,UACbC,KAAWH,GAAoB,CAACC,MAC7BA,EAAI,QAAQC,IAAY,CAACE,GAAGC,MAAMA,IAAIA,EAAE,YAAa,IAAG,EAAE,CAClE;AA8DD,SAASC,GAAmBlG,GAAQ;AAClC,SAAOA,KAAUmG;AACnB;AAEA,SAASC,MAASnG,GAAM;AACtB,MAAIA,EAAK,WAAW;AAClB,WAAOoG,EAAQ,GAAGpG,CAAI;AACxB,QAAMyD,IAAIzD,EAAK,CAAC;AAChB,SAAO,OAAOyD,KAAM,aAAaiC,GAASW,GAAU,OAAO,EAAE,KAAK5C,GAAG,KAAKO,GAAI,EAAG,CAAC,IAAI9C,EAAIuC,CAAC;AAC7F;AAmCA,SAAS6C,GAActY,GAAI6W,IAAK,KAAKzd,IAAU,CAAA,GAAI;AACjD,SAAOid;AAAA,IACLO,GAAeC,GAAIzd,CAAO;AAAA,IAC1B4G;AAAA,EACJ;AACA;AA4GA,SAASuY,GAAgBC,GAAQC,GAAIrf,IAAU,CAAA,GAAI;AACjD,QAAM;AAAA,IACJ,aAAA2B,IAAc2b;AAAA,IACd,GAAGgC;AAAA,EACJ,IAAGtf;AACJ,SAAOwa;AAAA,IACL4E;AAAA,IACAnC;AAAA,MACEtb;AAAA,MACA0d;AAAA,IACD;AAAA,IACDC;AAAA,EACJ;AACA;AAEA,SAASC,GAAcH,GAAQC,GAAIrf,IAAU,CAAA,GAAI;AAC/C,QAAM;AAAA,IACJ,aAAakd;AAAA,IACb,GAAGoC;AAAA,EACJ,IAAGtf,GACE,EAAE,aAAA2B,GAAa,OAAAyc,GAAO,QAAAC,GAAQ,UAAAF,MAAaF,GAAef,CAAM;AAStE,SAAO,EAAE,MARIiC;AAAA,IACXC;AAAA,IACAC;AAAA,IACA;AAAA,MACE,GAAGC;AAAA,MACH,aAAA3d;AAAA,IACD;AAAA,EACL,GACiB,OAAAyc,GAAO,QAAAC,GAAQ,UAAAF,EAAQ;AACxC;AAEA,SAASqB,GAAQ1S,GAAMC,MAAU,CAAC/M,CAAO,GAAG;AAC1C,QAAM;AAAA,IACJ,OAAAyf,IAAQ;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,WAAA/f,IAAY;AAAA,IACZ,WAAAggB,IAAY,CAAE;AAAA,EAClB,IAAM5f,KAAW,CAAA,GACT6f,IAAW,CAAA,GACXC,IAAe,SAASF,KAAaA,EAAU,QAAQ,CAACjd,MAAMA,IAC9Dod,IAAe,SAASH,KAAaA,EAAU,QAAQ,CAACjd,MAAMA;AACpE,UAAI/C,MAAc,UAAUA,MAAc,UACxCigB,EAAS,KAAKN;AAAA,IACZzS;AAAA,IACA,CAACkT,MAAa;AACZ,MAAAH,EAAS,QAAQ,CAACI,MAAMA,EAAE,MAAO,CAAA,GACjClT,EAAM,QAAQ+S,EAAaE,CAAQ,GACnCH,EAAS,QAAQ,CAACI,MAAMA,EAAE,OAAQ,CAAA;AAAA,IACnC;AAAA,IACD,EAAE,OAAAR,GAAO,MAAAC,GAAM,WAAAC,EAAW;AAAA,EAChC,CAAK,IAEC/f,MAAc,UAAUA,MAAc,UACxCigB,EAAS,KAAKN;AAAA,IACZxS;AAAA,IACA,CAACiT,MAAa;AACZ,MAAAH,EAAS,QAAQ,CAACI,MAAMA,EAAE,MAAO,CAAA,GACjCnT,EAAK,QAAQiT,EAAaC,CAAQ,GAClCH,EAAS,QAAQ,CAACI,MAAMA,EAAE,OAAQ,CAAA;AAAA,IACnC;AAAA,IACD,EAAE,OAAAR,GAAO,MAAAC,GAAM,WAAAC,EAAW;AAAA,EAChC,CAAK,GAEU,MAAM;AACjB,IAAAE,EAAS,QAAQ,CAACI,MAAMA,EAAE,KAAM,CAAA;AAAA,EACpC;AAEA;AAgEA,SAASC,GAAatZ,GAAIuZ,IAAO,IAAMxH,GAAQ;AAE7C,EADiBkG,OAEfuB,GAAUxZ,GAAI+R,CAAM,IACbwH,IACPvZ,MAEAyZ,GAASzZ,CAAE;AACf;AAmVA,SAAS0Z,GAAcjB,GAAIkB,IAAW,KAAKvgB,IAAU,CAAA,GAAI;AACvD,QAAM;AAAA,IACJ,WAAA2f,IAAY;AAAA,IACZ,mBAAAa,IAAoB;AAAA,EACrB,IAAGxgB;AACJ,MAAI0d,IAAQ;AACZ,QAAMS,IAAWrE,EAAI,EAAK;AAC1B,WAAS2G,IAAQ;AACf,IAAI/C,MACF,cAAcA,CAAK,GACnBA,IAAQ;AAAA,EAEX;AACD,WAASU,IAAQ;AACf,IAAAD,EAAS,QAAQ,IACjBsC;EACD;AACD,WAASpC,IAAS;AAChB,UAAMqC,IAAgB7hB,GAAQ0hB,CAAQ;AACtC,IAAIG,KAAiB,MAErBvC,EAAS,QAAQ,IACbqC,KACFnB,KACFoB,KACA/C,IAAQ,YAAY2B,GAAIqB,CAAa;AAAA,EACtC;AAGD,MAFIf,KAAarD,MACf+B,KACEsC,GAAMJ,CAAQ,KAAK,OAAOA,KAAa,YAAY;AACrD,UAAMK,IAAYpG,GAAM+F,GAAU,MAAM;AACtC,MAAIpC,EAAS,SAAS7B,MACpB+B;IACR,CAAK;AACD,IAAAtC,GAAkB6E,CAAS;AAAA,EAC5B;AACD,SAAA7E,GAAkBqC,CAAK,GAChB;AAAA,IACL,UAAAD;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,EACJ;AACA;AAsGA,SAASwC,GAAYjiB,GAAOoB,IAAU,IAAI;AACxC,QAAM;AAAA,IACJ,QAAA8gB,IAAS;AAAA,IACT,OAAAC;AAAA,IACA,WAAAC;AAAA,EACD,IAAGhhB;AACJ,SAAOrB,EAAS,MAAM;AACpB,QAAIsiB,IAAWpiB,GAAQD,CAAK;AAC5B,WAAI,OAAOqiB,KAAa,aACtBA,IAAW,OAAOH,CAAM,EAAEG,GAAUF,CAAK,IACvCC,KAAa,OAAO,MAAMC,CAAQ,MACpCA,IAAW,IACNA;AAAA,EACX,CAAG;AACH;AC/sCA,SAASC,GAAuBlhB,IAAU,IAAI;AAM5C,QAAM;AAAA,IACJ,cAAAmhB,IAAe;AAAA,EAChB,IAAGnhB,GACEohB,IAASrH,MACTsH,IAAyB,gBAAAC,EAAgB;AAAA,IAC7C,MAAM3C,GAAG,EAAE,OAAA4C,KAAS;AAClB,aAAO,MAAM;AACX,QAAAH,EAAO,QAAQG,EAAM;AAAA,MAC7B;AAAA,IACK;AAAA,EACL,CAAG,GACKC,IAAwB,gBAAAF,EAAgB;AAAA,IAC5C,cAAAH;AAAA,IACA,MAAMxC,GAAG,EAAE,OAAA8C,GAAO,OAAAF,EAAK,GAAI;AACzB,aAAO,MAAM;AACX,YAAIxE;AACJ,YAAI,CAACqE,EAAO,SAAS,QAAQ,IAAI,aAAa;AAC5C,gBAAM,IAAI,MAAM,6DAA6D;AAC/E,cAAMM,KAAS3E,IAAKqE,EAAO,UAAU,OAAO,SAASrE,EAAG,KAAKqE,GAAQ,EAAE,GAAGO,GAAqBF,CAAK,GAAG,QAAQF,EAAK,CAAE;AACtH,eAAOJ,MAAiBO,KAAS,OAAO,SAASA,EAAM,YAAY,IAAIA,EAAM,CAAC,IAAIA;AAAA,MAC1F;AAAA,IACK;AAAA,EACL,CAAG;AACD,SAAO1F;AAAA,IACL,EAAE,QAAAqF,GAAQ,OAAAG,EAAO;AAAA,IACjB,CAACH,GAAQG,CAAK;AAAA,EAClB;AACA;AACA,SAASG,GAAqB1F,GAAK;AACjC,QAAM2F,IAAS,CAAA;AACf,aAAWC,KAAO5F;AAChB,IAAA2F,EAAOlD,GAASmD,CAAG,CAAC,IAAI5F,EAAI4F,CAAG;AACjC,SAAOD;AACT;AA6DA,SAASE,GAAaC,GAAO;AAC3B,MAAIhF;AACJ,QAAMiF,IAAQnjB,GAAQkjB,CAAK;AAC3B,UAAQhF,IAAKiF,KAAS,OAAO,SAASA,EAAM,QAAQ,OAAOjF,IAAKiF;AAClE;AAEA,MAAMC,KAAgB3F,KAAW,SAAS;AAK1C,SAAS4F,MAAoBtJ,GAAM;AACjC,MAAID,GACAwJ,GACAC,GACApiB;AAOJ,MANI,OAAO4Y,EAAK,CAAC,KAAM,YAAY,MAAM,QAAQA,EAAK,CAAC,CAAC,KACtD,CAACuJ,GAAQC,GAAWpiB,CAAO,IAAI4Y,GAC/BD,IAASsJ,MAET,CAACtJ,GAAQwJ,GAAQC,GAAWpiB,CAAO,IAAI4Y,GAErC,CAACD;AACH,WAAOiE;AACT,EAAK,MAAM,QAAQuF,CAAM,MACvBA,IAAS,CAACA,CAAM,IACb,MAAM,QAAQC,CAAS,MAC1BA,IAAY,CAACA,CAAS;AACxB,QAAMC,IAAW,CAAA,GACXrM,IAAU,MAAM;AACpB,IAAAqM,EAAS,QAAQ,CAACzb,MAAOA,EAAI,CAAA,GAC7Byb,EAAS,SAAS;AAAA,EACtB,GACQC,IAAW,CAACviB,GAAI8B,GAAO0gB,GAAUC,OACrCziB,EAAG,iBAAiB8B,GAAO0gB,GAAUC,CAAQ,GACtC,MAAMziB,EAAG,oBAAoB8B,GAAO0gB,GAAUC,CAAQ,IAEzD5B,IAAYpG;AAAA,IAChB,MAAM,CAACsH,GAAanJ,CAAM,GAAG9Z,GAAQmB,CAAO,CAAC;AAAA,IAC7C,CAAC,CAACD,GAAIyiB,CAAQ,MAAM;AAElB,UADAxM,KACI,CAACjW;AACH;AACF,YAAM0iB,IAAe9F,GAAS6F,CAAQ,IAAI,EAAE,GAAGA,EAAU,IAAGA;AAC5D,MAAAH,EAAS;AAAA,QACP,GAAGF,EAAO,QAAQ,CAACtgB,MACVugB,EAAU,IAAI,CAACG,MAAaD,EAASviB,GAAI8B,GAAO0gB,GAAUE,CAAY,CAAC,CAC/E;AAAA,MACT;AAAA,IACK;AAAA,IACD,EAAE,WAAW,IAAM,OAAO,OAAQ;AAAA,EACtC,GACQC,IAAO,MAAM;AACjB,IAAA9B,KACA5K;EACJ;AACE,SAAA+F,GAAkB2G,CAAI,GACfA;AACT;AAEA,IAAIC,KAAiB;AACrB,SAASC,GAAejK,GAAQtX,GAASrB,IAAU,CAAA,GAAI;AACrD,QAAM,EAAE,QAAAsV,IAAS2M,IAAe,QAAAY,IAAS,CAAE,GAAE,SAAAC,IAAU,IAAM,cAAAC,IAAe,GAAO,IAAG/iB;AACtF,MAAI,CAACsV;AACH,WAAOsH;AACT,EAAIC,MAAS,CAAC8F,OACZA,KAAiB,IACjB,MAAM,KAAKrN,EAAO,SAAS,KAAK,QAAQ,EAAE,QAAQ,CAACvV,MAAOA,EAAG,iBAAiB,SAAS6c,EAAI,CAAC,GAC5FtH,EAAO,SAAS,gBAAgB,iBAAiB,SAASsH,EAAI;AAEhE,MAAIoG,IAAe;AACnB,QAAMC,IAAe,CAACphB,MACbghB,EAAO,KAAK,CAACK,MAAY;AAC9B,QAAI,OAAOA,KAAY;AACrB,aAAO,MAAM,KAAK5N,EAAO,SAAS,iBAAiB4N,CAAO,CAAC,EAAE,KAAK,CAACnjB,MAAOA,MAAO8B,EAAM,UAAUA,EAAM,aAAY,EAAG,SAAS9B,CAAE,CAAC;AAC7H;AACL,YAAMA,IAAK+hB,GAAaoB,CAAO;AAC/B,aAAOnjB,MAAO8B,EAAM,WAAW9B,KAAM8B,EAAM,eAAe,SAAS9B,CAAE;AAAA,IACtE;AAAA,EACP,CAAK,GAcGiW,IAAU;AAAA,IACdkM,GAAiB5M,GAAQ,SAbV,CAACzT,MAAU;AAC1B,YAAM9B,IAAK+hB,GAAanJ,CAAM;AAC9B,UAAI,GAAC5Y,KAAMA,MAAO8B,EAAM,UAAUA,EAAM,aAAY,EAAG,SAAS9B,CAAE,IAIlE;AAAA,YAFI8B,EAAM,WAAW,MACnBmhB,IAAe,CAACC,EAAaphB,CAAK,IAChC,CAACmhB,GAAc;AACjB,UAAAA,IAAe;AACf;AAAA,QACD;AACD,QAAA3hB,EAAQQ,CAAK;AAAA;AAAA,IACjB,GAEgD,EAAE,SAAS,IAAM,SAAAihB,GAAS;AAAA,IACtEZ,GAAiB5M,GAAQ,eAAe,CAACjV,MAAM;AAC7C,YAAMN,IAAK+hB,GAAanJ,CAAM;AAC9B,MAAAqK,IAAe,CAACC,EAAa5iB,CAAC,KAAK,CAAC,EAAEN,KAAM,CAACM,EAAE,aAAc,EAAC,SAASN,CAAE;AAAA,IAC/E,GAAO,EAAE,SAAS,IAAM;AAAA,IACpBgjB,KAAgBb,GAAiB5M,GAAQ,QAAQ,CAACzT,MAAU;AAC1D,iBAAW,MAAM;AACf,YAAIkb;AACJ,cAAMhd,IAAK+hB,GAAanJ,CAAM;AAC9B,UAAMoE,IAAKzH,EAAO,SAAS,kBAAkB,OAAO,SAASyH,EAAG,aAAa,YAAY,EAAEhd,KAAM,QAAgBA,EAAG,SAASuV,EAAO,SAAS,aAAa,MACxJjU,EAAQQ,CAAK;AAAA,MAChB,GAAE,CAAC;AAAA,IACV,CAAK;AAAA,EACL,EAAI,OAAO,OAAO;AAEhB,SADa,MAAMmU,EAAQ,QAAQ,CAACpP,MAAOA,EAAE,CAAE;AAEjD;AAEA,SAASuc,GAAmBC,GAAW;AACrC,SAAI,OAAOA,KAAc,aAChBA,IACA,OAAOA,KAAc,WACrB,CAACvhB,MAAUA,EAAM,QAAQuhB,IACzB,MAAM,QAAQA,CAAS,IACvB,CAACvhB,MAAUuhB,EAAU,SAASvhB,EAAM,GAAG,IACzC,MAAM;AACf;AACA,SAASwhB,MAAezK,GAAM;AAC5B,MAAIiJ,GACAxgB,GACArB,IAAU,CAAA;AACd,EAAI4Y,EAAK,WAAW,KAClBiJ,IAAMjJ,EAAK,CAAC,GACZvX,IAAUuX,EAAK,CAAC,GAChB5Y,IAAU4Y,EAAK,CAAC,KACPA,EAAK,WAAW,IACrB,OAAOA,EAAK,CAAC,KAAM,YACrBiJ,IAAM,IACNxgB,IAAUuX,EAAK,CAAC,GAChB5Y,IAAU4Y,EAAK,CAAC,MAEhBiJ,IAAMjJ,EAAK,CAAC,GACZvX,IAAUuX,EAAK,CAAC,MAGlBiJ,IAAM,IACNxgB,IAAUuX,EAAK,CAAC;AAElB,QAAM;AAAA,IACJ,QAAAD,IAASsJ;AAAA,IACT,WAAA7gB,IAAY;AAAA,IACZ,SAAAkiB,IAAU;AAAA,IACV,QAAAC,IAAS;AAAA,EACV,IAAGvjB,GACEwjB,IAAYL,GAAmBtB,CAAG;AAOxC,SAAOK,GAAiBvJ,GAAQvX,GANf,CAACf,MAAM;AACtB,IAAIA,EAAE,UAAUxB,GAAQ0kB,CAAM,KAE1BC,EAAUnjB,CAAC,KACbgB,EAAQhB,CAAC;AAAA,EACf,GACuDijB,CAAO;AAC9D;AAmKA,SAASG,KAAa;AACpB,QAAMC,IAAY5J,EAAI,EAAK,GACrB6J,IAAW7E;AACjB,SAAI6E,KACFvD,GAAU,MAAM;AACd,IAAAsD,EAAU,QAAQ;AAAA,EACnB,GAAkBC,CAAQ,GAEtBD;AACT;AAEA,SAASE,GAAaC,GAAU;AAC9B,QAAMH,IAAYD;AAClB,SAAO9kB,EAAS,OACd+kB,EAAU,OACH,EAAQG,EAAQ,EACxB;AACH;AAwkBA,SAASC,GAAcC,GAAO/jB,IAAU,IAAI;AAC1C,QAAM,EAAE,QAAAsV,IAAS2M,GAAe,IAAGjiB,GAC7BgkB,IAAcJ,GAAa,MAAMtO,KAAU,gBAAgBA,KAAU,OAAOA,EAAO,cAAe,UAAU;AAClH,MAAI2O;AACJ,QAAMC,IAAUpK,EAAI,EAAK,GACnBzY,IAAU,CAACQ,MAAU;AACzB,IAAAqiB,EAAQ,QAAQriB,EAAM;AAAA,EAC1B,GACQmU,IAAU,MAAM;AACpB,IAAKiO,MAED,yBAAyBA,IAC3BA,EAAW,oBAAoB,UAAU5iB,CAAO,IAEhD4iB,EAAW,eAAe5iB,CAAO;AAAA,EACvC,GACQuf,IAAYuD,GAAY,MAAM;AAClC,IAAKH,EAAY,UAEjBhO,KACAiO,IAAa3O,EAAO,WAAWzW,GAAQklB,CAAK,CAAC,GACzC,sBAAsBE,IACxBA,EAAW,iBAAiB,UAAU5iB,CAAO,IAE7C4iB,EAAW,YAAY5iB,CAAO,GAChC6iB,EAAQ,QAAQD,EAAW;AAAA,EAC/B,CAAG;AACD,SAAAlI,GAAkB,MAAM;AACtB,IAAA6E,KACA5K,KACAiO,IAAa;AAAA,EACjB,CAAG,GACMC;AACT;AA8XA,SAASE,GAAYhF,GAAQ;AAC3B,SAAO,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC;AAC1C;AAyBA,MAAMiF,KAAU,OAAO,aAAe,MAAc,aAAa,OAAO,SAAW,MAAc,SAAS,OAAO,SAAW,MAAc,SAAS,OAAO,OAAS,MAAc,OAAO,IAClLC,KAAY,2BACZC,KAA2B,gBAAAC,GAAW;AAC5C,SAASA,KAAc;AACrB,SAAMF,MAAaD,OACjBA,GAAQC,EAAS,IAAID,GAAQC,EAAS,KAAK,CAAA,IACtCD,GAAQC,EAAS;AAC1B;AACA,SAASG,GAAc5C,GAAKtV,GAAU;AACpC,SAAOgY,GAAS1C,CAAG,KAAKtV;AAC1B;AAKA,SAASmY,GAAoBC,GAAS;AACpC,SAAOA,KAAW,OAAO,QAAQA,aAAmB,MAAM,QAAQA,aAAmB,MAAM,QAAQA,aAAmB,OAAO,SAAS,OAAOA,KAAY,YAAY,YAAY,OAAOA,KAAY,WAAW,WAAW,OAAOA,KAAY,WAAW,WAAY,OAAO,MAAMA,CAAO,IAAe,QAAX;AAC9R;AAEA,MAAMC,KAAqB;AAAA,EACzB,SAAS;AAAA,IACP,MAAM,CAACjiB,MAAMA,MAAM;AAAA,IACnB,OAAO,CAACA,MAAM,OAAOA,CAAC;AAAA,EACvB;AAAA,EACD,QAAQ;AAAA,IACN,MAAM,CAACA,MAAM,KAAK,MAAMA,CAAC;AAAA,IACzB,OAAO,CAACA,MAAM,KAAK,UAAUA,CAAC;AAAA,EAC/B;AAAA,EACD,QAAQ;AAAA,IACN,MAAM,CAACA,MAAM,OAAO,WAAWA,CAAC;AAAA,IAChC,OAAO,CAACA,MAAM,OAAOA,CAAC;AAAA,EACvB;AAAA,EACD,KAAK;AAAA,IACH,MAAM,CAACA,MAAMA;AAAA,IACb,OAAO,CAACA,MAAM,OAAOA,CAAC;AAAA,EACvB;AAAA,EACD,QAAQ;AAAA,IACN,MAAM,CAACA,MAAMA;AAAA,IACb,OAAO,CAACA,MAAM,OAAOA,CAAC;AAAA,EACvB;AAAA,EACD,KAAK;AAAA,IACH,MAAM,CAACA,MAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC;AAAA,IAClC,OAAO,CAACA,MAAM,KAAK,UAAU,MAAM,KAAKA,EAAE,QAAO,CAAE,CAAC;AAAA,EACrD;AAAA,EACD,KAAK;AAAA,IACH,MAAM,CAACA,MAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC;AAAA,IAClC,OAAO,CAACA,MAAM,KAAK,UAAU,MAAM,KAAKA,CAAC,CAAC;AAAA,EAC3C;AAAA,EACD,MAAM;AAAA,IACJ,MAAM,CAACA,MAAM,IAAI,KAAKA,CAAC;AAAA,IACvB,OAAO,CAACA,MAAMA,EAAE,YAAa;AAAA,EAC9B;AACH,GACMkiB,KAAyB;AAC/B,SAASC,GAAWjD,GAAKkD,GAAUC,GAAShlB,IAAU,CAAA,GAAI;AACxD,MAAI+c;AACJ,QAAM;AAAA,IACJ,OAAA0C,IAAQ;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,wBAAAuF,IAAyB;AAAA,IACzB,eAAAC,IAAgB;AAAA,IAChB,eAAAC,IAAgB;AAAA,IAChB,SAAAC;AAAA,IACA,QAAA9P,IAAS2M;AAAA,IACT,aAAAtgB;AAAA,IACA,SAAA0jB,IAAU,CAAChlB,MAAM;AACf,cAAQ,MAAMA,CAAC;AAAA,IAChB;AAAA,IACD,eAAAilB;AAAA,EACD,IAAGtlB,GACE+G,KAAQqe,IAAUrL,KAAaD,GAAK,OAAOiL,KAAa,aAAaA,MAAaA,CAAQ;AAChG,MAAI,CAACC;AACH,QAAI;AACF,MAAAA,IAAUP,GAAc,qBAAqB,MAAM;AACjD,YAAIc;AACJ,gBAAQA,IAAMtD,OAAkB,OAAO,SAASsD,EAAI;AAAA,MACrD,CAAA;IACF,SAAQllB,GAAG;AACV,MAAAglB,EAAQhlB,CAAC;AAAA,IACV;AAEH,MAAI,CAAC2kB;AACH,WAAOje;AACT,QAAM4d,IAAU9lB,GAAQkmB,CAAQ,GAC1BS,IAAOd,GAAoBC,CAAO,GAClCc,KAAc1I,IAAK/c,EAAQ,eAAe,OAAO+c,IAAK6H,GAAmBY,CAAI,GAC7E,EAAE,OAAOE,GAAY,QAAQC,EAAa,IAAGC;AAAAA,IACjD7e;AAAA,IACA,MAAM8e,EAAM9e,EAAK,KAAK;AAAA,IACtB,EAAE,OAAA0Y,GAAO,MAAAC,GAAM,aAAA/d,EAAa;AAAA,EAChC;AACE,EAAI2T,KAAU2P,KACZ/E,GAAa,MAAM;AACjB,IAAAgC,GAAiB5M,GAAQ,WAAWwB,CAAM,GAC1CoL,GAAiB5M,GAAQuP,IAAwBiB,CAAqB,GAClER,KACFxO;EACR,CAAK,GAEEwO,KACHxO;AACF,WAASiP,EAAmBC,GAAUhG,GAAU;AAC9C,IAAI1K,KACFA,EAAO,cAAc,IAAI,YAAYuP,IAAwB;AAAA,MAC3D,QAAQ;AAAA,QACN,KAAAhD;AAAA,QACA,UAAAmE;AAAA,QACA,UAAAhG;AAAA,QACA,aAAagF;AAAA,MACd;AAAA,IACF,CAAA,CAAC;AAAA,EAEL;AACD,WAASa,EAAMljB,GAAG;AAChB,QAAI;AACF,YAAMqjB,IAAWhB,EAAQ,QAAQnD,CAAG;AACpC,UAAIlf,KAAK;AACP,QAAAojB,EAAmBC,GAAU,IAAI,GACjChB,EAAQ,WAAWnD,CAAG;AAAA,WACjB;AACL,cAAMoE,IAAaR,EAAW,MAAM9iB,CAAC;AACrC,QAAIqjB,MAAaC,MACfjB,EAAQ,QAAQnD,GAAKoE,CAAU,GAC/BF,EAAmBC,GAAUC,CAAU;AAAA,MAE1C;AAAA,IACF,SAAQ5lB,GAAG;AACV,MAAAglB,EAAQhlB,CAAC;AAAA,IACV;AAAA,EACF;AACD,WAAS6lB,EAAKrkB,GAAO;AACnB,UAAM6L,IAAW7L,IAAQA,EAAM,WAAWmjB,EAAQ,QAAQnD,CAAG;AAC7D,QAAInU,KAAY;AACd,aAAIwX,KAAiBP,KAAW,QAC9BK,EAAQ,QAAQnD,GAAK4D,EAAW,MAAMd,CAAO,CAAC,GACzCA;AACF,QAAI,CAAC9iB,KAASsjB,GAAe;AAClC,YAAMvmB,IAAQ6mB,EAAW,KAAK/X,CAAQ;AACtC,aAAI,OAAOyX,KAAkB,aACpBA,EAAcvmB,GAAO+lB,CAAO,IAC5Ba,MAAS,YAAY,CAAC,MAAM,QAAQ5mB,CAAK,IACzC,EAAE,GAAG+lB,GAAS,GAAG/lB,MACnBA;AAAA,IACb;AAAW,aAAI,OAAO8O,KAAa,WACtBA,IAEA+X,EAAW,KAAK/X,CAAQ;AAAA,EAElC;AACD,WAASoJ,EAAOjV,GAAO;AACrB,QAAI,EAAAA,KAASA,EAAM,gBAAgBmjB,IAEnC;AAAA,UAAInjB,KAASA,EAAM,OAAO,MAAM;AAC9B,QAAAkF,EAAK,QAAQ4d;AACb;AAAA,MACD;AACD,UAAI,EAAA9iB,KAASA,EAAM,QAAQggB,IAE3B;AAAA,QAAA6D;AACA,YAAI;AACF,WAAK7jB,KAAS,OAAO,SAASA,EAAM,cAAc4jB,EAAW,MAAM1e,EAAK,KAAK,MAC3EA,EAAK,QAAQmf,EAAKrkB,CAAK;AAAA,QAC1B,SAAQxB,GAAG;AACV,UAAAglB,EAAQhlB,CAAC;AAAA,QACf,UAAc;AACR,UAAIwB,IACFwe,GAASsF,CAAW,IAEpBA;QACH;AAAA;AAAA;AAAA,EACF;AACD,WAASG,EAAsBjkB,GAAO;AACpC,IAAAiV,EAAOjV,EAAM,MAAM;AAAA,EACpB;AACD,SAAOkF;AACT;AAEA,SAASof,GAAiBnmB,GAAS;AACjC,SAAO8jB,GAAc,gCAAgC9jB,CAAO;AAC9D;AAEA,SAASomB,GAAapmB,IAAU,IAAI;AAClC,QAAM;AAAA,IACJ,UAAAgT,IAAW;AAAA,IACX,WAAAiI,IAAY;AAAA,IACZ,cAAAoL,IAAe;AAAA,IACf,QAAA/Q,IAAS2M;AAAA,IACT,SAAA+C;AAAA,IACA,YAAAsB,IAAa;AAAA,IACb,wBAAArB,IAAyB;AAAA,IACzB,YAAAsB;AAAA,IACA,UAAAC;AAAA,IACA,mBAAAC,IAAoB;AAAA,EACrB,IAAGzmB,GACE0mB,IAAQ;AAAA,IACZ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,GAAG1mB,EAAQ,SAAS,CAAE;AAAA,EAC1B,GACQ2mB,IAAgBR,GAAiB,EAAE,QAAA7Q,EAAQ,CAAA,GAC3CsR,IAASjoB,EAAS,MAAMgoB,EAAc,QAAQ,SAAS,OAAO,GAC9DE,IAAQN,MAAeD,KAAc,OAAOvH,GAAMsH,CAAY,IAAIvB,GAAWwB,GAAYD,GAAcrB,GAAS,EAAE,QAAA1P,GAAQ,wBAAA2P,EAAwB,CAAA,IAClJjmB,IAAQL,EAAS,MAAMkoB,EAAM,UAAU,SAASD,EAAO,QAAQC,EAAM,KAAK,GAC1EC,IAAkBrC;AAAA,IACtB;AAAA,IACA,CAACsC,GAAWC,GAAYpoB,MAAU;AAChC,YAAMmB,IAAK,OAAOgnB,KAAc,WAAWzR,KAAU,OAAO,SAASA,EAAO,SAAS,cAAcyR,CAAS,IAAIjF,GAAaiF,CAAS;AACtI,UAAI,CAAChnB;AACH;AACF,UAAIY;AAOJ,UANI8lB,MACF9lB,IAAQ2U,EAAO,SAAS,cAAc,OAAO,GAE7C3U,EAAM,YAAY,SAAS,eADP,6KACiC,CAAC,GACtD2U,EAAO,SAAS,KAAK,YAAY3U,CAAK,IAEpCqmB,MAAe,SAAS;AAC1B,cAAMC,IAAUroB,EAAM,MAAM,KAAK;AACjC,eAAO,OAAO8nB,CAAK,EAAE,QAAQ,CAAChgB,OAAOA,KAAK,IAAI,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAC/D,MAAM;AACzF,UAAIskB,EAAQ,SAAStkB,CAAC,IACpB5C,EAAG,UAAU,IAAI4C,CAAC,IAElB5C,EAAG,UAAU,OAAO4C,CAAC;AAAA,QACjC,CAAS;AAAA,MACT;AACQ,QAAA5C,EAAG,aAAainB,GAAYpoB,CAAK;AAEnC,MAAI6nB,MACFnR,EAAO,iBAAiB3U,CAAK,EAAE,SAC/B,SAAS,KAAK,YAAYA,CAAK;AAAA,IAElC;AAAA,EACL;AACE,WAASumB,EAAiBC,GAAM;AAC9B,QAAIpK;AACJ,IAAA+J,EAAgB9T,GAAUiI,IAAY8B,IAAK2J,EAAMS,CAAI,MAAM,OAAOpK,IAAKoK,CAAI;AAAA,EAC5E;AACD,WAASC,EAAUD,GAAM;AACvB,IAAInnB,EAAQ,YACVA,EAAQ,UAAUmnB,GAAMD,CAAgB,IAExCA,EAAiBC,CAAI;AAAA,EACxB;AACD,EAAA3M,GAAMxb,GAAOooB,GAAW,EAAE,OAAO,QAAQ,WAAW,GAAI,CAAE,GAC1DlH,GAAa,MAAMkH,EAAUpoB,EAAM,KAAK,CAAC;AACzC,QAAMqoB,IAAO1oB,EAAS;AAAA,IACpB,MAAM;AACJ,aAAO6nB,IAAWK,EAAM,QAAQ7nB,EAAM;AAAA,IACvC;AAAA,IACD,IAAI2D,GAAG;AACL,MAAAkkB,EAAM,QAAQlkB;AAAA,IACf;AAAA,EACL,CAAG;AACD,MAAI;AACF,WAAO,OAAO,OAAO0kB,GAAM,EAAE,OAAAR,GAAO,QAAAD,GAAQ,OAAA5nB,EAAK,CAAE;AAAA,EACpD,QAAW;AACV,WAAOqoB;AAAA,EACR;AACH;AAmCA,SAASC,GAAoB3O,GAAQkL,GAAU7jB,IAAU,CAAA,GAAI;AAC3D,QAAM,EAAE,QAAAsV,IAAS2M,IAAe,GAAGsF,EAAe,IAAKvnB;AACvD,MAAIwnB;AACJ,QAAMxD,IAAcJ,GAAa,MAAMtO,KAAU,sBAAsBA,CAAM,GACvEU,IAAU,MAAM;AACpB,IAAIwR,MACFA,EAAS,WAAU,GACnBA,IAAW;AAAA,EAEjB,GACQC,IAAU9oB,EAAS,MAAM;AAC7B,UAAMC,IAAQC,GAAQ8Z,CAAM,GACtB+O,KAAS,MAAM,QAAQ9oB,CAAK,IAAIA,IAAQ,CAACA,CAAK,GAAG,IAAIkjB,EAAY,EAAE,OAAOrF,EAAU;AAC1F,WAAO,IAAI,IAAIiL,CAAK;AAAA,EACxB,CAAG,GACK9G,IAAYpG;AAAA,IAChB,MAAMiN,EAAQ;AAAA,IACd,CAACE,MAAa;AACZ,MAAA3R,KACIgO,EAAY,SAAS1O,KAAUqS,EAAS,SAC1CH,IAAW,IAAI,iBAAiB3D,CAAQ,GACxC8D,EAAS,QAAQ,CAAC5nB,MAAOynB,EAAS,QAAQznB,GAAIwnB,CAAe,CAAC;AAAA,IAEjE;AAAA,IACD,EAAE,WAAW,IAAM,OAAO,OAAQ;AAAA,EACtC,GACQK,IAAc,MACXJ,KAAY,OAAO,SAASA,EAAS,YAAW,GAEnD9E,IAAO,MAAM;AACjB,IAAA1M,KACA4K;EACJ;AACE,SAAA7E,GAAkB2G,CAAI,GACf;AAAA,IACL,aAAAsB;AAAA,IACA,MAAAtB;AAAA,IACA,aAAAkF;AAAA,EACJ;AACA;AAowBA,SAASC,GAAgB9nB,GAAIC,IAAU,IAAI;AACzC,QAAM;AAAA,IACJ,YAAA8nB,IAAa;AAAA,IACb,YAAAC,IAAa;AAAA,IACb,QAAAzS,IAAS2M;AAAA,EACV,IAAGjiB,GACEgoB,IAAYlO,EAAI,EAAK;AAC3B,MAAI4D;AACJ,QAAMuK,IAAS,CAACC,MAAa;AAC3B,UAAMC,IAAQD,IAAWJ,IAAaC;AACtC,IAAIrK,MACF,aAAaA,CAAK,GAClBA,IAAQ,SAENyK,IACFzK,IAAQ,WAAW,MAAMsK,EAAU,QAAQE,GAAUC,CAAK,IAE1DH,EAAU,QAAQE;AAAA,EACxB;AACE,SAAK5S,MAEL4M,GAAiBniB,GAAI,cAAc,MAAMkoB,EAAO,EAAI,GAAG,EAAE,SAAS,GAAI,CAAE,GACxE/F,GAAiBniB,GAAI,cAAc,MAAMkoB,EAAO,EAAK,GAAG,EAAE,SAAS,GAAI,CAAE,IAClED;AACT;AA2DA,SAASI,GAAwBzP,GAAQkL,GAAU7jB,IAAU,CAAA,GAAI;AAC/D,QAAM;AAAA,IACJ,MAAA+V;AAAA,IACA,YAAAsS,IAAa;AAAA,IACb,WAAAjS,IAAY;AAAA,IACZ,QAAAd,IAAS2M;AAAA,IACT,WAAAtC,IAAY;AAAA,EACb,IAAG3f,GACEgkB,IAAcJ,GAAa,MAAMtO,KAAU,0BAA0BA,CAAM,GAC3EmS,IAAU9oB,EAAS,MAAM;AAC7B,UAAM2pB,IAAUzpB,GAAQ8Z,CAAM;AAC9B,YAAQ,MAAM,QAAQ2P,CAAO,IAAIA,IAAU,CAACA,CAAO,GAAG,IAAIxG,EAAY,EAAE,OAAOrF,EAAU;AAAA,EAC7F,CAAG;AACD,MAAIzG,IAAU4G;AACd,QAAMuB,IAAWrE,EAAI6F,CAAS,GACxBiB,IAAYoD,EAAY,QAAQxJ;AAAA,IACpC,MAAM,CAACiN,EAAQ,OAAO3F,GAAa/L,CAAI,GAAGoI,EAAS,KAAK;AAAA,IACxD,CAAC,CAACwJ,GAAUY,CAAK,MAAM;AAIrB,UAHAvS,KACI,CAACmI,EAAS,SAEV,CAACwJ,EAAS;AACZ;AACF,YAAMH,IAAW,IAAI;AAAA,QACnB3D;AAAA,QACA;AAAA,UACE,MAAM/B,GAAayG,CAAK;AAAA,UACxB,YAAAF;AAAA,UACA,WAAAjS;AAAA,QACD;AAAA,MACT;AACM,MAAAuR,EAAS,QAAQ,CAAC5nB,MAAOA,KAAMynB,EAAS,QAAQznB,CAAE,CAAC,GACnDiW,IAAU,MAAM;AACd,QAAAwR,EAAS,WAAU,GACnBxR,IAAU4G;AAAA,MAClB;AAAA,IACK;AAAA,IACD,EAAE,WAAA+C,GAAW,OAAO,OAAQ;AAAA,EAC7B,IAAG/C,IACE8F,IAAO,MAAM;AACjB,IAAA1M,KACA4K,KACAzC,EAAS,QAAQ;AAAA,EACrB;AACE,SAAApC,GAAkB2G,CAAI,GACf;AAAA,IACL,aAAAsB;AAAA,IACA,UAAA7F;AAAA,IACA,QAAQ;AACN,MAAAnI,KACAmI,EAAS,QAAQ;AAAA,IAClB;AAAA,IACD,SAAS;AACP,MAAAA,EAAS,QAAQ;AAAA,IAClB;AAAA,IACD,MAAAuE;AAAA,EACJ;AACA;AAuqBA,SAAS8F,GAAS7P,GAAQ3Y,IAAU,IAAI;AACtC,QAAM,EAAE,cAAAqmB,IAAe,IAAO,cAAAoC,IAAe,GAAK,IAAKzoB,GACjD0oB,IAAe5O,EAAI,EAAK,GACxB6O,IAAgBhqB,EAAS,MAAMmjB,GAAanJ,CAAM,CAAC;AACzD,EAAAuJ,GAAiByG,GAAe,SAAS,CAAC9mB,MAAU;AAClD,QAAIkb,GAAIC;AACR,KAAI,CAACyL,MAAkBzL,KAAMD,IAAKlb,EAAM,QAAQ,YAAY,QAAgBmb,EAAG,KAAKD,GAAI,gBAAgB,OACtG2L,EAAa,QAAQ;AAAA,EAC3B,CAAG,GACDxG,GAAiByG,GAAe,QAAQ,MAAMD,EAAa,QAAQ,EAAK;AACxE,QAAME,IAAUjqB,EAAS;AAAA,IACvB,KAAK,MAAM+pB,EAAa;AAAA,IACxB,IAAI9pB,GAAO;AACT,UAAIme,GAAIC;AACR,MAAI,CAACpe,KAAS8pB,EAAa,SACxB3L,IAAK4L,EAAc,UAAU,QAAgB5L,EAAG,SAC1Cne,KAAS,CAAC8pB,EAAa,WAC7B1L,IAAK2L,EAAc,UAAU,QAAgB3L,EAAG;IACpD;AAAA,EACL,CAAG;AACD,SAAAxC;AAAA,IACEmO;AAAA,IACA,MAAM;AACJ,MAAAC,EAAQ,QAAQvC;AAAA,IACjB;AAAA,IACD,EAAE,WAAW,IAAM,OAAO,OAAQ;AAAA,EACtC,GACS,EAAE,SAAAuC,EAAO;AAClB;AA0iBA,SAASC,GAAe9oB,GAAI;AAC1B,SAAI,OAAO,SAAW,OAAeA,aAAc,SAC1CA,EAAG,SAAS,kBACjB,OAAO,WAAa,OAAeA,aAAc,WAC5CA,EAAG,kBACLA;AACT;AAmdA,MAAM+oB,KAA4B;AAAA,EAChC,MAAM,CAACjnB,MAAU,CAACA,EAAM,OAAOA,EAAM,KAAK;AAAA,EAC1C,QAAQ,CAACA,MAAU,CAACA,EAAM,SAASA,EAAM,OAAO;AAAA,EAChD,QAAQ,CAACA,MAAU,CAACA,EAAM,SAASA,EAAM,OAAO;AAAA,EAChD,UAAU,CAACA,MAAUA,aAAiB,QAAQ,OAAO,CAACA,EAAM,WAAWA,EAAM,SAAS;AACxF;AACA,SAASknB,GAAS/oB,IAAU,IAAI;AAC9B,QAAM;AAAA,IACJ,MAAAwlB,IAAO;AAAA,IACP,OAAAwD,IAAQ;AAAA,IACR,kBAAAC,IAAmB;AAAA,IACnB,cAAA5C,IAAe,EAAE,GAAG,GAAG,GAAG,EAAG;AAAA,IAC7B,QAAA/Q,IAAS2M;AAAA,IACT,QAAAtJ,IAASrD;AAAA,IACT,QAAAlC,IAAS;AAAA,IACT,aAAAzR;AAAA,EACD,IAAG3B;AACJ,MAAIkpB,IAAkB;AACtB,QAAM7iB,IAAIyT,EAAIuM,EAAa,CAAC,GACtB/f,IAAIwT,EAAIuM,EAAa,CAAC,GACtB8C,IAAarP,EAAI,IAAI,GACrBsP,IAAY,OAAO5D,KAAS,aAAaA,IAAOsD,GAA0BtD,CAAI,GAC9E6D,IAAe,CAACxnB,MAAU;AAC9B,UAAMgP,IAASuY,EAAUvnB,CAAK;AAC9B,IAAAqnB,IAAkBrnB,GACdgP,MACF,CAACxK,EAAE,OAAOC,EAAE,KAAK,IAAIuK,GACrBsY,EAAW,QAAQ;AAAA,EAEzB,GACQG,IAAe,CAACznB,MAAU;AAC9B,QAAIA,EAAM,QAAQ,SAAS,GAAG;AAC5B,YAAMgP,IAASuY,EAAUvnB,EAAM,QAAQ,CAAC,CAAC;AACzC,MAAIgP,MACF,CAACxK,EAAE,OAAOC,EAAE,KAAK,IAAIuK,GACrBsY,EAAW,QAAQ;AAAA,IAEtB;AAAA,EACL,GACQI,IAAgB,MAAM;AAC1B,QAAI,CAACL,KAAmB,CAAC5T;AACvB;AACF,UAAMkU,IAAMJ,EAAUF,CAAe;AACrC,IAAIA,aAA2B,cAAcM,MAC3CnjB,EAAE,QAAQmjB,EAAI,CAAC,IAAIlU,EAAO,SAC1BhP,EAAE,QAAQkjB,EAAI,CAAC,IAAIlU,EAAO;AAAA,EAEhC,GACQtO,IAAQ,MAAM;AAClB,IAAAX,EAAE,QAAQggB,EAAa,GACvB/f,EAAE,QAAQ+f,EAAa;AAAA,EAC3B,GACQoD,IAAsB9nB,IAAc,CAACE,MAAUF,EAAY,MAAM0nB,EAAaxnB,CAAK,GAAG,CAAE,CAAA,IAAI,CAACA,MAAUwnB,EAAaxnB,CAAK,GACzH6nB,IAAsB/nB,IAAc,CAACE,MAAUF,EAAY,MAAM2nB,EAAaznB,CAAK,GAAG,CAAE,CAAA,IAAI,CAACA,MAAUynB,EAAaznB,CAAK,GACzH8nB,IAAuBhoB,IAAc,MAAMA,EAAY,MAAM4nB,EAAa,GAAI,CAAE,CAAA,IAAI,MAAMA;AAChG,MAAI5Q,GAAQ;AACV,UAAMiR,IAAkB,EAAE,SAAS;AACnC,IAAA1H,GAAiBvJ,GAAQ,CAAC,aAAa,UAAU,GAAG8Q,GAAqBG,CAAe,GACpFZ,KAASxD,MAAS,eACpBtD,GAAiBvJ,GAAQ,CAAC,cAAc,WAAW,GAAG+Q,GAAqBE,CAAe,GACtFX,KACF/G,GAAiBvJ,GAAQ,YAAY3R,GAAO4iB,CAAe,IAE3DxW,KAAUoS,MAAS,UACrBtD,GAAiB5M,GAAQ,UAAUqU,GAAsB,EAAE,SAAS,GAAI,CAAE;AAAA,EAC7E;AACD,SAAO;AAAA,IACL,GAAAtjB;AAAA,IACA,GAAAC;AAAA,IACA,YAAA6iB;AAAA,EACJ;AACA;AAEA,SAASU,GAAkBlR,GAAQ3Y,IAAU,IAAI;AAC/C,QAAM;AAAA,IACJ,eAAA8pB,IAAgB;AAAA,IAChB,QAAAxU,IAAS2M;AAAA,EACV,IAAGjiB,GACEwlB,IAAOxlB,EAAQ,QAAQ,QACvB,EAAE,GAAAqG,GAAG,GAAAC,GAAG,YAAA6iB,EAAU,IAAKJ,GAAS/oB,CAAO,GACvC+pB,IAAYjQ,EAAInB,MAA0BrD,KAAU,OAAO,SAASA,EAAO,SAAS,KAAI,GACxF0U,IAAWlQ,EAAI,CAAC,GAChBmQ,IAAWnQ,EAAI,CAAC,GAChBoQ,IAAmBpQ,EAAI,CAAC,GACxBqQ,IAAmBrQ,EAAI,CAAC,GACxBsQ,IAAgBtQ,EAAI,CAAC,GACrBuQ,IAAevQ,EAAI,CAAC,GACpBwQ,IAAYxQ,EAAI,EAAI;AAC1B,MAAI4I,IAAO,MAAM;AAAA,EACnB;AACE,SAAIpN,MACFoN,IAAOlI;AAAA,IACL,CAACuP,GAAW1jB,GAAGC,CAAC;AAAA,IAChB,MAAM;AACJ,YAAMvG,IAAK+hB,GAAaiI,CAAS;AACjC,UAAI,CAAChqB;AACH;AACF,YAAM;AAAA,QACJ,MAAA+M;AAAA,QACA,KAAAF;AAAA,QACA,OAAAI;AAAA,QACA,QAAAC;AAAA,MACV,IAAYlN,EAAG;AACP,MAAAmqB,EAAiB,QAAQpd,KAAQ0Y,MAAS,SAASlQ,EAAO,cAAc,IACxE6U,EAAiB,QAAQvd,KAAO4Y,MAAS,SAASlQ,EAAO,cAAc,IACvE8U,EAAc,QAAQnd,GACtBod,EAAa,QAAQrd;AACrB,YAAMud,IAAMlkB,EAAE,QAAQ6jB,EAAiB,OACjCM,IAAMlkB,EAAE,QAAQ6jB,EAAiB;AACvC,MAAAG,EAAU,QAAQtd,MAAU,KAAKC,MAAW,KAAKsd,IAAM,KAAKC,IAAM,KAAKD,IAAMvd,KAASwd,IAAMvd,IACxF6c,KAAiB,CAACQ,EAAU,WAC9BN,EAAS,QAAQO,GACjBN,EAAS,QAAQO;AAAA,IAEpB;AAAA,IACD,EAAE,WAAW,GAAM;AAAA,EACzB,GACItI,GAAiB,UAAU,cAAc,MAAM;AAC7C,IAAAoI,EAAU,QAAQ;AAAA,EACxB,CAAK,IAEI;AAAA,IACL,GAAAjkB;AAAA,IACA,GAAAC;AAAA,IACA,YAAA6iB;AAAA,IACA,UAAAa;AAAA,IACA,UAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAA5H;AAAA,EACJ;AACA;AAivBA,SAAS+H,GAAoBC,GAAK;AAChC,QAAM/pB,IAAQ,OAAO,iBAAiB+pB,CAAG;AACzC,MAAI/pB,EAAM,cAAc,YAAYA,EAAM,cAAc,YAAYA,EAAM,cAAc,UAAU+pB,EAAI,cAAcA,EAAI,eAAe/pB,EAAM,cAAc,UAAU+pB,EAAI,eAAeA,EAAI;AAC1L,WAAO;AACF;AACL,UAAMC,IAASD,EAAI;AACnB,WAAI,CAACC,KAAUA,EAAO,YAAY,SACzB,KACFF,GAAoBE,CAAM;AAAA,EAClC;AACH;AACA,SAASC,GAAeC,GAAU;AAChC,QAAM,IAAIA,KAAY,OAAO,OACvBvC,IAAU,EAAE;AAClB,SAAImC,GAAoBnC,CAAO,IACtB,KACL,EAAE,QAAQ,SAAS,IACd,MACL,EAAE,kBACJ,EAAE,eAAc,GACX;AACT;AACA,MAAMwC,KAAoC,oBAAI;AAC9C,SAASC,GAAcrqB,GAASsqB,IAAe,IAAO;AACpD,QAAMC,IAAWnR,EAAIkR,CAAY;AACjC,MAAIE,IAAwB;AAC5B,EAAA1Q,GAAMuE,GAAMre,CAAO,GAAG,CAACX,MAAO;AAC5B,UAAM4Y,IAASkQ,GAAehqB,GAAQkB,CAAE,CAAC;AACzC,QAAI4Y,GAAQ;AACV,YAAM+R,IAAM/R;AACZ,MAAKmS,GAAkB,IAAIJ,CAAG,KAC5BI,GAAkB,IAAIJ,GAAKA,EAAI,MAAM,QAAQ,GAC3CO,EAAS,UACXP,EAAI,MAAM,WAAW;AAAA,IACxB;AAAA,EACL,GAAK;AAAA,IACD,WAAW;AAAA,EACf,CAAG;AACD,QAAMS,IAAO,MAAM;AACjB,UAAMprB,IAAK8oB,GAAehqB,GAAQ6B,CAAO,CAAC;AAC1C,IAAI,CAACX,KAAMkrB,EAAS,UAEhBpO,OACFqO,IAAwBhJ;AAAA,MACtBniB;AAAA,MACA;AAAA,MACA,CAACM,MAAM;AACL,QAAAuqB,GAAevqB,CAAC;AAAA,MACjB;AAAA,MACD,EAAE,SAAS,GAAO;AAAA,IAC1B,IAEIN,EAAG,MAAM,WAAW,UACpBkrB,EAAS,QAAQ;AAAA,EACrB,GACQG,IAAS,MAAM;AACnB,QAAIrO;AACJ,UAAMhd,IAAK8oB,GAAehqB,GAAQ6B,CAAO,CAAC;AAC1C,IAAI,CAACX,KAAM,CAACkrB,EAAS,UAErBpO,OAAUqO,KAAyB,QAAgBA,EAAuB,IAC1EnrB,EAAG,MAAM,YAAYgd,IAAK+N,GAAkB,IAAI/qB,CAAE,MAAM,OAAOgd,IAAK,IACpE+N,GAAkB,OAAO/qB,CAAE,GAC3BkrB,EAAS,QAAQ;AAAA,EACrB;AACE,SAAAlP,GAAkBqP,CAAM,GACjBzsB,EAAS;AAAA,IACd,MAAM;AACJ,aAAOssB,EAAS;AAAA,IACjB;AAAA,IACD,IAAItoB,GAAG;AACL,MAAIA,IACFwoB,MAEAC;IACH;AAAA,EACL,CAAG;AACH;AAmbA,SAASC,GAAS1S,GAAQ3Y,IAAU,IAAI;AACtC,QAAM;AAAA,IACJ,WAAAoW,IAAY;AAAA,IACZ,SAAAkV;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,SAAAlI,IAAU;AAAA,IACV,QAAAhO,IAAS2M;AAAA,EACV,IAAGjiB,GACEyrB,IAAcC,GAAS,EAAE,GAAG,GAAG,GAAG,EAAC,CAAE,GACrCC,IAAYD,GAAS,EAAE,GAAG,GAAG,GAAG,EAAC,CAAE,GACnCE,IAAQjtB,EAAS,MAAM8sB,EAAY,IAAIE,EAAU,CAAC,GAClDE,IAAQltB,EAAS,MAAM8sB,EAAY,IAAIE,EAAU,CAAC,GAClD,EAAE,KAAAppB,GAAK,KAAAupB,EAAK,IAAG,MACfC,IAAsBptB,EAAS,MAAM4D,EAAIupB,EAAIF,EAAM,KAAK,GAAGE,EAAID,EAAM,KAAK,CAAC,KAAKzV,CAAS,GACzF4V,IAAYlS,EAAI,EAAK,GACrBla,IAAYjB,EAAS,MACpBotB,EAAoB,QAErBD,EAAIF,EAAM,KAAK,IAAIE,EAAID,EAAM,KAAK,IAC7BD,EAAM,QAAQ,IAAI,SAAS,UAE3BC,EAAM,QAAQ,IAAI,OAAO,SAJzB,MAMV,GACKI,IAAsB,CAAC5rB,MAAM,CAACA,EAAE,QAAQ,CAAC,EAAE,SAASA,EAAE,QAAQ,CAAC,EAAE,OAAO,GACxE6rB,IAAoB,CAAC7lB,GAAGC,MAAM;AAClC,IAAAmlB,EAAY,IAAIplB,GAChBolB,EAAY,IAAInlB;AAAA,EACpB,GACQ6lB,IAAkB,CAAC9lB,GAAGC,MAAM;AAChC,IAAAqlB,EAAU,IAAItlB,GACdslB,EAAU,IAAIrlB;AAAA,EAClB;AACE,MAAIsjB;AACJ,QAAMwC,IAA0BC,GAAyB/W,KAAU,OAAO,SAASA,EAAO,QAAQ;AAClG,EAAKgO,IAGHsG,IAAkBwC,IAA0B,EAAE,SAAS,GAAI,IAAK,EAAE,SAAS,OAF3ExC,IAAkBwC,IAA0B,EAAE,SAAS,IAAO,SAAS,OAAS,EAAE,SAAS;AAG7F,QAAME,IAAa,CAACjsB,MAAM;AACxB,IAAI2rB,EAAU,UACZT,KAAc,QAAgBA,EAAWlrB,GAAGT,EAAU,KAAK,IAC7DosB,EAAU,QAAQ;AAAA,EACtB,GACQO,IAAQ;AAAA,IACZrK,GAAiBvJ,GAAQ,cAAc,CAACtY,MAAM;AAC5C,UAAIA,EAAE,QAAQ,WAAW;AACvB;AACF,MAAIupB,EAAgB,WAAW,CAACA,EAAgB,WAC9CvpB,EAAE,eAAc;AAClB,YAAM,CAACgG,GAAGC,CAAC,IAAI2lB,EAAoB5rB,CAAC;AACpC,MAAA6rB,EAAkB7lB,GAAGC,CAAC,GACtB6lB,EAAgB9lB,GAAGC,CAAC,GACpBklB,KAAgB,QAAgBA,EAAanrB,CAAC;AAAA,IAC/C,GAAEupB,CAAe;AAAA,IAClB1H,GAAiBvJ,GAAQ,aAAa,CAACtY,MAAM;AAC3C,UAAIA,EAAE,QAAQ,WAAW;AACvB;AACF,YAAM,CAACgG,GAAGC,CAAC,IAAI2lB,EAAoB5rB,CAAC;AACpC,MAAA8rB,EAAgB9lB,GAAGC,CAAC,GAChB,CAAC0lB,EAAU,SAASD,EAAoB,UAC1CC,EAAU,QAAQ,KAChBA,EAAU,UACZV,KAAW,QAAgBA,EAAQjrB,CAAC;AAAA,IACvC,GAAEupB,CAAe;AAAA,IAClB1H,GAAiBvJ,GAAQ,CAAC,YAAY,aAAa,GAAG2T,GAAY1C,CAAe;AAAA,EACrF;AAEE,SAAO;AAAA,IACL,yBAAAwC;AAAA,IACA,WAAAJ;AAAA,IACA,WAAApsB;AAAA,IACA,aAAA6rB;AAAA,IACA,WAAAE;AAAA,IACA,SAASC;AAAA,IACT,SAASC;AAAA,IACT,MATW,MAAMU,EAAM,QAAQ,CAACC,MAAMA,EAAC,CAAE;AAAA,EAU7C;AACA;AACA,SAASH,GAAyBI,GAAU;AAC1C,MAAI,CAACA;AACH,WAAO;AACT,MAAIC,IAAkB;AACtB,QAAMC,IAAe;AAAA,IACnB,IAAI,UAAU;AACZ,aAAAD,IAAkB,IACX;AAAA,IACR;AAAA,EACL;AACE,SAAAD,EAAS,iBAAiB,KAAK7P,IAAM+P,CAAY,GACjDF,EAAS,oBAAoB,KAAK7P,EAAI,GAC/B8P;AACT;AAsmBA,SAASE,GAAUC,GAAOhL,GAAKiL,GAAM9sB,IAAU,CAAA,GAAI;AAC9C,MAAC+c,GAAIC,GAAI+P;AACZ,QAAM;AAAA,IACJ,OAAA5Q,IAAQ;AAAA,IACR,SAAAmH,IAAU;AAAA,IACV,WAAAliB;AAAA,IACA,MAAAse,IAAO;AAAA,IACP,cAAAsN;AAAA,IACA,YAAAC;AAAA,EACD,IAAGjtB,GACEktB,IAAKpO,MACLqO,IAAQL,MAASI,KAAM,OAAO,SAASA,EAAG,WAAWnQ,IAAKmQ,KAAM,OAAO,SAASA,EAAG,UAAU,OAAO,SAASnQ,EAAG,KAAKmQ,CAAE,QAAQH,KAAM/P,IAAKkQ,KAAM,OAAO,SAASA,EAAG,UAAU,OAAO,SAASlQ,EAAG,UAAU,OAAO,SAAS+P,EAAG,KAAKG,KAAM,OAAO,SAASA,EAAG,KAAK;AACtQ,MAAIrrB,IAAQT;AACZ,EAAKygB,MAODA,IAAM,eAGVhgB,IAAQA,KAAS,UAAUggB,EAAI,SAAU,CAAA;AACzC,QAAMuL,IAAU,CAAC5Q,MAASL,IAAc,OAAOA,KAAU,aAAaA,EAAMK,CAAG,IAAI4H,GAAY5H,CAAG,IAAhEA,GAC5B6Q,IAAW,MAAM9Q,GAAMsQ,EAAMhL,CAAG,CAAC,IAAIuL,EAAQP,EAAMhL,CAAG,CAAC,IAAImL,GAC3DM,IAAc,CAAC1uB,MAAU;AAC7B,IAAIquB,IACEA,EAAWruB,CAAK,KAClBuuB,EAAMtrB,GAAOjD,CAAK,IAEpBuuB,EAAMtrB,GAAOjD,CAAK;AAAA,EAExB;AACE,MAAI0kB,GAAS;AACX,UAAM+C,IAAegH,KACfE,IAAQzT,EAAIuM,CAAY;AAC9B,QAAImH,IAAa;AACjB,WAAAhT;AAAA,MACE,MAAMqS,EAAMhL,CAAG;AAAA,MACf,CAAClf,MAAM;AACL,QAAK6qB,MACHA,IAAa,IACbD,EAAM,QAAQH,EAAQzqB,CAAC,GACvB0d,GAAS,MAAMmN,IAAa,EAAK;AAAA,MAEpC;AAAA,IACP,GACIhT;AAAA,MACE+S;AAAA,MACA,CAAC5qB,MAAM;AACL,QAAI,CAAC6qB,MAAe7qB,MAAMkqB,EAAMhL,CAAG,KAAKnC,MACtC4N,EAAY3qB,CAAC;AAAA,MAChB;AAAA,MACD,EAAE,MAAA+c,EAAM;AAAA,IACd,GACW6N;AAAA,EACX;AACI,WAAO5uB,EAAS;AAAA,MACd,MAAM;AACJ,eAAO0uB,EAAQ;AAAA,MAChB;AAAA,MACD,IAAIzuB,GAAO;AACT,QAAA0uB,EAAY1uB,CAAK;AAAA,MAClB;AAAA,IACP,CAAK;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC57MA,UAAMiuB,IAAQY,GAkCRX,IAAOY,GAuBPC,IAAaC,kBAElB,GAEKC,IAAY/T,EAAI6T,EAAW,KAAK,GAChCG,IAAoBhU,EAAI6T,EAAW,KAAK;AAC9C,IAAAxJ,GAAY,MAAM;AAChB,MAAAwJ,EAAW,QAAQE,EAAU;AAAA,IAAA,CAC9B,GAEKrT,GAAAmT,GAAY,CAAC3N,MAAa;AAC9B,MAAIA,MAAa6N,EAAU,UAC3B7N,IAAW+N,MAAStiB,EAAK,IAAI,MAAM,mBAAmB,CAAC;AAAA,IAAA,CACxD;AAED,UAAMuiB,IAAaC,GAAM,MAAMpB,EAAM,IAAI,SAAS,GAE5CqB,IAASpU,EAAI,EAAK,GAElBpZ,IAAUoZ,EAAwB,IAAI,GACtCqU,IAAgBrU,EAAwB,IAAI,GAC5CjS,IAAQiS,EAAwB,IAAI,GACpCsU,IAAUtU,EAAwB,IAAI,GACtCuU,IAAcvU,EAAwB,IAAI,GAE1CwU,IAAiB3vB;AAAA,MAAS,MAC9BkuB,EAAM,QAAQtR,GAAasR,EAAM,OAAOvR,EAAgB,IAAI;AAAA,IAAA,GAGxDiT,IAAmB5vB;AAAA,MAAS,MAChCkuB,EAAM,UAAUtR,GAAasR,EAAM,SAASvR,EAAgB,IAAI;AAAA,IAAA,GAE5DkT,IAAkBzP,EAAM,MAAM8N,EAAM,UAAU,WAAW,MAAM,CAAC,GAChE4B,IAAe5N,GAAY,MAAMgM,EAAM,UAAU,GAAG,GAEpDzlB,IAAWzI;AAAA,MAA+B,MAC9CkuB,EAAM,aAAa,cAAcA,EAAM,aAAa,aAAa,SAAYA,EAAM;AAAA,IAAA,GAE/ExlB,IAAe1I;AAAA,MAAmC,MACtDkuB,EAAM,aAAa,cAAcA,EAAM,aAAa,aAAaA,EAAM,WAAW;AAAA,IAAA,GAG9E6B,IAAa5U,EAAmB,CAAA,CAAE,GAClC6U,IAAqBhwB,EAAuB,MAAM;AAClD,UAAAkuB,EAAM,uBAAuB;AAC/B,eAAOA,EAAM;AAET,YAAA+B,IAAM/B,EAAM,WAAW,OAAO4B,EAAa,QAAQ5B,EAAM,UAAU,IAAI,GACvE3Q,KAAoB,CAAC2S,GAAiBD,CAAG,CAAC;AAChD,aAAI/B,EAAM,WAAW,MAAS,CAAC2B,EAAgB,SACzCtS,GAAA;AAAA,QACF5R,GAAK;AAAA,UACH,UAAUlD,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,QAAA,CAChB;AAAA,MAAA,GAGD2B,EAAgB,SACdtS,GAAA;AAAA,QACF/S,GAAc;AAAA,UACZ,WAAY0jB,EAAM,UAAU,MAAM,GAAG,EAAE,CAAC,KAAmB;AAAA,UAC3D,UAAUzlB,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,QAAA,CAChB;AAAA,MAAA,GAGDA,EAAM,YAAY,MAChB3Q,GAAA;AAAA,QACFpO,GAAM;AAAA,UACJ,UAAU1G,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,QAAA,CAChB;AAAA,MAAA,GAGDA,EAAM,WAAW,MACf3Q,GAAA;AAAA,QACF4S,GAAe;AAAA,UACb,UAAU1nB,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,QAAA,CAChB;AAAA,MAAA,GAGDA,EAAM,WAAW,MACf3Q,GAAA,KAAK6S,IAAkB,GAEzB7S,GAAA,KAAK8S,GAAgB,EAAC,SAASnnB,GAAO,SAAS,GAAG,CAAA,CAAC,GACnDglB,EAAM,WAAW,MACf3Q,GAAA;AAAA,QACF+S,GAAe;AAAA,UACb,UAAU7nB,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,UACf,MAAM,EAAC,gBAAAhe,IAAgB,iBAAAD,MAAkB;AACvC,YAAA8f,EAAW,QAAQ;AAAA,cACjB,WAAW9f,KAAkB,GAAGA,EAAe,OAAO;AAAA,cACtD,UAAUC,KAAiB,GAAGA,EAAc,OAAO;AAAA,YAAA;AAAA,UAEvD;AAAA,QAAA,CACD;AAAA,MAAA,GAGEqN;AAAA,IAAA,CACR,GAEKgT,IAAenQ;AAAAA,MAAM,MACzByP,EAAgB,QAAQ,SAAa3B,EAAM;AAAA,IAAA,GAGvC,EAAC,gBAAA5S,GAAgB,gBAAAzT,GAAgB,WAAApD,GAAW,QAAA0T,MAAUmC,GAAYkV,GAAeztB,GAAS;AAAA,MAC9F,WAAWwuB;AAAA,MACX,YAAYP;AAAA,MACZ,UAAU5P,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACpC,sBAAsB,IAAIjU,MACR/B,GAAW,GAAG+B,GAAM,EAAC,gBAAgBiU,EAAM,UAAS;AAAA,IAGtE,CACD,GAEKsC,IAAarV,EAAmB,EAAC,UAAU,WAAW,CAAA;AAE5D,IAAAU,GAAMhU,GAAgB,MAAM;;AAQtB,UAPAqmB,EAAM,WAAW,QACf9P,IAAAvW,EAAe,MAAM,SAArB,QAAAuW,EAA2B,kBAC7BmR,EAAO,QAAQ,KAEfA,EAAO,QAAQ,KAGf1nB,EAAe,MAAM,OAAO;AAC9B,cAAM,EAAC,GAAAH,IAAG,GAAAC,GAAC,IAAIE,EAAe,MAAM;AACpC,QAAA2oB,EAAW,QAAQ;AAAA,UACjB,UAAU;AAAA,UACV,KAAK7oB,KAAI,GAAGA,EAAC,OAAO;AAAA,UACpB,MAAMD,KAAI,GAAGA,EAAC,OAAO;AAAA,QAAA;AAAA,MAEzB;AAAA,IAAA,CACD;AAEK,UAAA+oB,KAAkBzwB,EAAS,MAAM;AAC/B,YAAA6mB,IAAOqH,EAAM,UAAU,YAAY;AAClC,aAAA;AAAA,QACLrH;AAAA,QACA,KAAKA,CAAI;AAAA,QACT;AAAA,UACE,CAAC,KAAKA,CAAI,IAAIqH,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,UAClD,MAAMgB,EAAU,SAAS,CAACK,EAAO;AAAA,UAChC,WAAY,CAACL,EAAU;AAAA,UACxB,MAAM,CAAChB,EAAM;AAAA,UACZ,UAAW,CAACgB,EAAU,SAAShB,EAAM;AAAA,UACtC,CAAC,GAAGA,EAAM,WAAW,EAAE,GAAGA,EAAM,gBAAgB;AAAA,UAChD,CAAC,MAAMrH,CAAI,IAAI6J,GAA0BjsB,EAAU,KAAK,CAAC,EAAE,GAAGA,EAAU,UAAU;AAAA,QACpF;AAAA,MAAA;AAAA,IACF,CACD,GAEK,EAAC,WAAAknB,EAAA,IAAaT,GAAkBnpB,CAAO,GACvC,EAAC,WAAW4uB,EAAgB,IAAIzF,GAAkBuE,CAAO,GAEzDnG,IAAS,CAAC5nB,MAAc;AAC5B,YAAMwB,KAAQxB,KAAK,IAAI,MAAM,OAAO;AACpC,MAAAwtB,EAAU,QAAQpiB,EAAK5J,EAAK,IAAIksB,EAAK;AAAA,IAAA,GAGjCwB,IAAwB,CAC5B/J,GACAgK,KAAoC,CAAA,MAEpC,IAAI/vB,GAAmB+lB,GAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,QAAQ9kB,EAAQ,SAAS;AAAA,MACzB,eAAe;AAAA,MACf,SAAS;AAAA,MACT,GAAG8uB;AAAA,MACH,aAAaxB,EAAW;AAAA,IAAA,CACzB;AAEC,QAAAyB;AACJ,UAAM1B,IAAO,MAAM;AACjB,YAAMlsB,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,CAAK,GACdA,EAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB;AACrB;AAAA,MACF;AACA,MAAAgB,EAAkB,QAAQ,IAC1BzN,GAAS,MAAM;;AACN,QAAAvJ,KACO2Y,IAAA;AAAA,UACZ,MAAM;AACG,YAAA3Y,KACP+W,EAAU,QAAQ,IAClBxN,GAAS,MAAM;AACR,cAAAyM,EAAA,SAASyC,EAAsB,OAAO,CAAC;AAAA,YAAA,CAC7C;AAAA,UACH;AAAA,UACA,OAAO1C,EAAM,SAAU,WAAWA,EAAM,UAAQ9P,KAAA8P,EAAM,UAAN,gBAAA9P,GAAa,SAAQ;AAAA,QAAA;AAAA,MACvE,CACD;AAAA,IAAA,GAGGtR,IAAO,CAACpL,MAAuB;;AACnC,YAAMwB,KAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,EAAK,GACdA,GAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB;AACrB;AAAA,MACF;AACA,MAAI2C,MACF,aAAaA,CAAW,GACVA,IAAA;AAEV,YAAAtH,KAAQ,OAAO0E,EAAM,SAAU,WAAWA,EAAM,UAAQ9P,KAAA8P,EAAM,UAAN,gBAAA9P,GAAa,SAAQ;AACnF,iBAAW,MAAM;;AACf,SACE1c,KAAA,gBAAAA,EAAG,UAAS,YACZA,KAAA,gBAAAA,EAAG,UAAS,gBACXA,KAAA,gBAAAA,EAAG,UAAS,uBAAuBwsB,EAAM,UACzC,CAACA,EAAM,kBACNvC,EAAU,SACVgF,EAAiB,SACjB,GAACvS,KAAArc,EAAQ,UAAR,QAAAqc,GAAe,SAAS,qCAAU,mBACnC,GAACC,KAAAoR,EAAQ,UAAR,QAAApR,GAAe,SAAS,qCAAU,mBACpC6P,EAAM,kBAAkByC,EAAiB,SAE1CzB,EAAU,QAAQ,IAClBxN,GAAS,MAAM;AACb;AAAA,YACE,MAAM;AACJ,cAAAyN,EAAkB,QAAQ;AAAA,YAC5B;AAAA,YACAptB,EAAQ,QAAQD,GAAmBC,EAAQ,KAAK,IAAI;AAAA,UAAA,GAEjDosB,EAAA,UAAUyC,EAAsB,QAAQ,CAAC;AAAA,QAAA,CAC/C,KAED;AAAA,UACE,MAAM;AACJ9jB,YAAAA,EAAKpL,CAAC;AAAA,UACR;AAAA,UACA8nB,KAAQ,KAAK,KAAKA;AAAA,QAAA;AAAA,SAGrBA,EAAK;AAAA,IAAA;AAGG,IAAAuH,EAAA;AAAA,MAAA,MACXjkB;AAAAA,MACA,MAAAsiB;AAAA,MACA,QAAA9F;AAAA,IAAA,CACD;AAED,UAAM0H,IAAO,MAAM;;AAGjB,UAAI9C,EAAM,QAAQ;AACV,cAAA+C,KAAOC,GAAWhD,EAAM,MAAM;AACpC,QAAI+C,KACFxB,EAAQ,QAAQwB,KAGR,QAAA,KAAK,4BAA4B/C,EAAM,MAAM;AAAA,MACvD;AAEQ,QAAAuB,EAAA,SAAQrR,IAAAsR,EAAY,UAAZ,gBAAAtR,EAAmB;AAErC,UAAI8P,EAAM,WAAW;AACb,cAAA+C,KAAOC,GAAWhD,EAAM,SAAS;AACvC,QAAI+C,KACFzB,EAAc,QAAQyB,KAGd,QAAA,KAAK,+BAA+B/C,EAAM,SAAS;AAAA,MAC7D;AAEA,QAAAsB,EAAc,QAAQC,EAAQ;AAEhC,UAAI,GAACA,EAAQ,SAASvB,EAAM,WAGvB7rB,IAEL;AAAA,YADQotB,EAAA,MAAM,iBAAiB,aAAa3iB,CAAI,GAC5CohB,EAAM,OAAO;AACP,UAAAuB,EAAA,MAAM,iBAAiB,SAASnG,CAAM;AAC9C;AAAA,QACF;AACQ,QAAAmG,EAAA,MAAM,iBAAiB,gBAAgBL,CAAI,GAC3CK,EAAA,MAAM,iBAAiB,gBAAgB3iB,CAAI,GAC3C2iB,EAAA,MAAM,iBAAiB,SAASL,CAAI,GACpCK,EAAA,MAAM,iBAAiB,QAAQ3iB,CAAI;AAAA;AAAA,IAAA,GAGvCqkB,KAAS,MAAM;AACnB,MAAI1B,EAAQ,UACFA,EAAA,MAAM,oBAAoB,aAAa3iB,CAAI,GAC3C2iB,EAAA,MAAM,oBAAoB,SAASnG,CAAM,GACzCmG,EAAA,MAAM,oBAAoB,gBAAgBL,CAAI,GAC9CK,EAAA,MAAM,oBAAoB,gBAAgB3iB,CAAI,GAC9C2iB,EAAA,MAAM,oBAAoB,SAASL,CAAI,GACvCK,EAAA,MAAM,oBAAoB,QAAQ3iB,CAAI;AAAA,IAChD;AAGF,WAAAmX;AAAA,MACEliB;AAAA,MACA,MAAM;AACA,QAAAmtB,EAAU,SAAShB,EAAM,SAAS,CAACA,EAAM,eAAe,CAACA,EAAM,UAC5DphB,EAAA,IAAI,MAAM,cAAc,CAAC;AAAA,MAClC;AAAA,MACA,EAAC,QAAQ,CAAC2iB,CAAO,EAAC;AAAA,IAAA,GAGd5T,GAAA,CAAC,MAAMqS,EAAM,OAAO,MAAMA,EAAM,QAAQ,MAAMA,EAAM,SAAS,GAAG,MAAM;AACnE,MAAAiD,MACFH;IAAA,CAEN,GAEDvP,GAAUuP,CAAI,GAEdI,GAAgBD,EAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrdTE,KAA2B,CAAC;AAAA,EACvC,KAAApjB;AAAA,EACA,KAAA5J;AAAA,EACA,OAAAD;AAAA,EACA,aAAAktB;AAAA,EACA,UAAAC;AACF,MAMkB;AAChB,QAAMtwB,IAAYgN,IAAM,QAAQ7J,IAAQ,SAASC,IAAM,UAAU,UAC3DtE,IAAQwxB,IAAW,QAAQD,IAAc,OAAO;AACtD,SAAO,GAAGrwB,CAAS,GAAGlB,IAAQ,IAAIA,CAAK,KAAK,EAAE;AAChD,GAEa2wB,KAA4B,CAACjsB,MAAiC;AACzE,QAAM,CAAC+sB,CAAU,IAAI/sB,EAAU,MAAM,GAAG;AACxC,UAAQ+sB,GAAY;AAAA,IAClB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAAA;AAAA,EACX;AACF,GAEaC,KAAsB,CAACC,MAClC,OAAOA,KAAW,YAAYA,EAAO,WAAW,IAErCC,KAAiB,CAC5BD,GACAtwB,MACuC;AAEvC,MAAI,CADaqwB,GAAoBC,CAAM;AAC5B,WAAO;AAEhB,QAAAE,IACJ,OAAOF,IAAW,OACjB,OAAOA,KAAW,YAAY,CAACA,EAAO,SAAS,CAACA,EAAO,SACpDG,IAAQzwB,EAAG,aAAa,OAAO,KAAKA,EAAG,aAAa,qBAAqB;AAC/E,SAAIwwB,IACEC,KACFzwB,EAAG,gBAAgB,OAAO,GACvBA,EAAA,aAAa,uBAAuBywB,CAAK,GAErC;AAAA,IACL,SAASjV,GAAaiV,GAAOlV,EAAgB;AAAA,EAAA,KAG1C,KAEL,OAAO+U,KAAW,WACb;AAAA,IACL,SAAS9U,GAAa8U,GAAQ/U,EAAgB;AAAA,EAAA,IAG3C;AAAA,IACL,OAAO+U,KAAA,QAAAA,EAAQ,QAAQ9U,GAAa8U,KAAA,gBAAAA,EAAQ,OAAO/U,EAAgB,IAAI;AAAA,IACvE,SAAS+U,KAAA,QAAAA,EAAQ,UAAU9U,GAAa8U,KAAA,gBAAAA,EAAQ,SAAS/U,EAAgB,IAAI;AAAA,EAAA;AAEjF,GAEamV,KAAwB,CACnCC,GACA3wB,OACI;AAAA,EACJ,QAAQA;AAAA,EACR,YAAY2wB,EAAQ,UAAU;AAAA,EAC9B,QAAQA,EAAQ,UAAU;AAAA,EAC1B,OAAOA,EAAQ,UAAU;AAAA,EACzB,UAAUA,EAAQ,UAAU;AAAA,EAC5B,YAAYA,EAAQ,UAAU;AAAA,EAC9B,WAAWA,EAAQ,UAAU,OACzB,SACAA,EAAQ,UAAU,QAChB,UACAA,EAAQ,UAAU,SAChB,WACAA,EAAQ,UAAU,MAChB,QACA;AAAA,EACV,MAAM;AAAA,EACN,GAAI,OAAOA,EAAQ,SAAU,WAAWA,EAAQ,QAAQ,CAAC;AAAA,EACzD,GAAIA,EAAQ,UAAU,cAAc,EAAC,gBAAgB,GAAA,IAAS,CAAC;AAAA,EAC/D,OAAO;AAAA,EACP,SAAS;AACX,IAMaf,KAAO,CAClB5vB,GACA2wB,GACA7D,MACG;;AACG,QAAA8D,IAAM,SAAS,cAAc,MAAM;AACzC,EAAID,EAAQ,UAAU,OAAe,SAAA,KAAK,YAAYC,CAAG,IAChDD,EAAQ,UAAU,QAAO3wB,EAAG,YAAY4wB,CAAG,KAC/C5T,IAAAhd,EAAG,eAAH,QAAAgd,EAAe,aAAa4T,GAAK5wB,EAAG,cACzCqhB,GAAOwP,GAAEC,IAAUhE,CAAK,GAAG8D,CAAG,GAC9B5wB,EAAG,aAAa4wB;AAClB,GAEab,KAAS,CAAC/vB,MAA0B;AAC/C,QAAM4wB,IAAM5wB,EAAG;AACX,EAAA4wB,KAAKvP,GAAO,MAAMuP,CAAG,GACzB,WAAW,MAAM;AACf,IAAAA,KAAA,QAAAA,EAAK;AAAA,KACJ,CAAC,GACJ,OAAO5wB,EAAG;AACZ,GCjIA+wB,KAAe,CACbC,GAEAC,GACAC,MACG;AACG,QAAAzU,IAAM0U,GAAIH,GAAMC,CAAQ;AACvB,SAAAC,KAAa,OAAOA,KAAc,aAAaA,EAAUzU,GAAKwU,GAAUD,CAAI,IAAIvU;AACzF,GCTA2U,KAAe,CACbC,GACAC,GACAC,MAEAD,EAAY,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,KAAK,CAAC,EAAE,OAAO,CAACxE,GAAO0E,OACjE1E,EACGuE,IAAsB,GAAGA,CAAM,GAAGG,EAAW,OAAO,CAAC,EAAE,YAAgB,IAAAA,EAAW,MAAM,CAAC,CAAC,KAAjFA,CACZ,IAAID,GACGzE,IACN,EAAoB,GCVV2E,KAAA,CACb3E,GACA4E,GACAC,GACAC,IAAcD,MAEd,OAAO,KAAKD,CAAG,EAAE,OAAO,CAACvV,GAAe3c,OACjCstB,EAAMttB,CAAI,KAEX2c,EAAA;AAAA,EACF,CAACyV,GAAapyB,EAAK,QAAQmyB,GAAY,EAAE,GAAG7E,EAAMttB,CAAI,CAAC,EACpD,OAAO,CAACc,MAAMA,KAAK,OAAOA,KAAM,SAAS,EACzC,KAAK,GAAG,EACR,YAAY;AAAA,GAGV6b,IACN,EAAc,GCjBJ2T,KAAA,CACbnvB,MAC4B;AAC5B,MAAKA;AACD,WAAA,OAAOA,KAAY,WACjB,OAAO,WAAa,MAAoB,SAC1B,SAAS,eAAeA,CAAO,KAC5B,SAAS,cAAcA,CAAO,KAAqB,SAElEA,EAAoC,OAAOA;AACrD,GCVAkxB,KAAe,CAACC,GAAwBC,QACrCD,KAAA,gBAAAA,QAAY,CAAA,GACV,OAAO,CAAC3V,GAAc2V,OACjB,OAAOA,EAAK,QAAS,WACjB3V,IAAAA,EAAI,OAAO2V,EAAK,QAA4B,IAElD3V,EAAI,KAAK2V,CAAI,GAER3V,IACN,CAAE,CAAA,EACJ,OAAO,CAAC6V,MAAW;;AAAA,WAAAhV,IAAAgV,EAAM,SAAN,gBAAAhV,EAA6C,YAAW+U;AAAA,CAAQ,GCZ3EE,KAAgB,MAChBC,KAAiB,mBACjBC,KAAY,qBACZC,KAAsB,eACtBC,KAA4B,cAC5BC,KAAiB,OACjBC,KAAU,MACVC,KAAa,yBAGbC,KAAoB,yBACpBC,KAAY,oBCEZC,KAAY,CAAClU,MACxBA,EACG,QAAQwT,IAAe,GAAG,EAC1B,QAAQC,IAAgB,CAACtT,GAAGgU,GAAIC,MAAO,GAAGD,CAAE,IAAIC,CAAE,EAAE,EACpD,QAAQR,IAA2B,CAACzT,GAAGgU,GAAIC,MAAOD,IAAKC,EAAG,YAAa,CAAA,GAM/DC,KAAY,CAACrU,MACxBA,EACG,QAAQwT,IAAe,GAAG,EAC1B,QAAQC,IAAgB,CAACtT,GAAGgU,GAAIC,MAAO,GAAGD,CAAE,IAAIC,CAAE,EAAE,EACpD,QAAQT,IAAqB,CAACxT,GAAGgU,GAAIC,MAAOD,IAAKC,EAAG,YAAa,CAAA,GAQzDE,KAAa,CAACtU,MAAwB;AAC3C,QAAAuU,IAAOvU,EAAI;AACV,SAAAuU,EAAK,OAAO,CAAC,EAAE,gBAAgBA,EAAK,MAAM,CAAC;AACpD,GAQaC,KAAe,CAACxU,MAAwBA,EAAI,QAAQgU,IAAmB,MAAM,GAS7ES,KAAoB,CAACzU,MAChCwU,GAAaxU,CAAG,EAAE,QAAQiU,IAAW,KAAK,GCrD5CS,KAAe,CAACC,MACd,OAAOA,KAAU,WACbN,GAAUM,CAAK,IACfA,EAAM,UAAU,SACdA,EAAM,QACN,OAAOA,EAAM,OAAQ,WACnBN,GAAUM,EAAM,GAAG,IACnBA,EAAM,KCRhBC,KAAe,CAACvG,MACd,CAAC,EAAEA,EAAM,QAAQA,EAAM,KCyBZwG,KAIR,OAAO,UAAU,GAGTC,KAWR,OAAO,MAAM,GAGLC,KAMR,OAAO,UAAU,GAGTC,KAER,OAAO,WAAW,GAGVC,KAYR,OAAO,aAAa,GAGZC,KAIR,OAAO,WAAW,GAGVC,KAcR,OAAO,eAAe,GAEdC,KAaR,OAAO,YAAY,GAGXC,KAOR,OAAO,UAAU,GAETC,KAOR,OAAO,UAAU,GAETC,KAGR,OAAO,QAAQ,GAEPC,KAiBR,OAAO,aAAa,GAEZC,KAGR,OAAO,WAAW,GAEVC,KAGR,OAAO,kBAAkB,GAEjBC,KAwBR,OAAO,uBAAuB,GAEtBC,KASR,OAAO,oBAAoB,GAEnBC,KAA0C,OAAO,aAAa,GC5M5DC,KAAA,CAAC3tB,GAAc4tB,IAAQ,IAAIC,IAAgB,CAAA,MAAc;AAEhE,QAAAC,IAAQ,CAAC9tB,CAAI;AACf,MAAAkrB;AACJ,WAASnrB,IAAI,GAAGA,IAAI+tB,EAAM,UAAU,CAAC5C,GAAMnrB,KAAK;AACxCC,UAAAA,IAAO8tB,EAAM/tB,CAAC;AACpB,IAAAmrB,IAAO2C,EAAO7tB,CAAI;AAAA,EACpB;AAEA,SAAQkrB,KAAQ,OAAOA,KAAS,aAAaA,EAAK0C,CAAK,IAAI1C;AAC7D,GCRa6C,KAAO,CAIlBC,GACAC,MAEA,OAAO,KAAKD,CAAU,EACnB,OAAO,CAAC9S,MAAQ,CAAC+S,EAAY,IAAI,CAAC70B,MAAOA,EAAG,SAAS,CAAC,EAAE,SAAS8hB,CAAG,CAAC,EACrE,OAAO,CAAChR,GAAQgR,OAAS,EAAC,GAAGhR,GAAQ,CAACgR,CAAG,GAAG8S,EAAW9S,CAAG,EAAC,IAAI,CAAA,CAAwB,GAM/EgT,KAAO,CAIlBF,GACAC,MAEA,CAAC,GAAGA,CAAW,EAAE;AAAA,EACf,CAACE,GAAMv1B,OACAu1B,EAAAv1B,CAAI,IAAIo1B,EAAWp1B,CAAI,GACrBu1B;AAAA,EAET,CAAC;AACH,GAWW5D,KAAM,CAEjBtyB,GACAm2B,GACA/H,MACa;AACP,QAAAgI,IAAWD,EAAK,MAAM,SAAS;AAErC,MAAI9N,IAAeroB;AACnB,aAAWijB,KAAOmT,GAAU;AAE1B,QADI/N,MAAY,QACZA,MAAY;AAAkB,aAAA+F;AAC9B,IAAAnL,EAAI,WAAW,OACnBoF,IAAUA,EAAQpF,CAAG;AAAA,EACvB;AACA,SAAIoF,MAAY,SAAkB+F,IAC3B/F;AACT,GAcagO,KAAM,CAAsBC,GAAYH,GAAcn2B,MAAgB;AAC3E,QAAAud,IAAQ,CAAIF,MAAc;AAO1B,SALgB,CAACrd,MAEnBA,KAAU,QACT,OAAOA,KAAU,YAAY,OAAOA,KAAU,YAEjCqd,CAAG;AACV,aAAAA;AAGL,QAAA,OAAOA,KAAQ;AACV,aAAAA,EAAI,KAAK,CAAA,CAAE;AAGd,UAAA2F,IAAS,IAAM3F,EAAe;AAGpC,kBAAO,oBAAoBA,CAAG,EAAE,QAAQ,CAAC1c,MAAS;AAE9C,MAAAqiB,EAAeriB,CAAI,IAAK0c,EAAY1c,CAAI;AAAA,IAAA,CAC3C,GAEMqiB;AAAA,EAAA,GAIHuT,IAAQ,CAAmCv2B,GAAYouB,MAAiC;AACtF,UAAAoI,IAAMpI,MAAiB,SAAY,IAAIA;AACzCpuB,QAAAA,KAAU;AACL,aAAAw2B;AAEH,UAAAvkB,IAAS,OAAO,SAASjS,CAAK;AACpC,WAAO,OAAO,MAAMiS,CAAM,IAAIukB,IAAMvkB;AAAA,EAAA;AAGtC,MAAI,CAACqkB;AAAS,WAAO;AACjB,MAAA,CAACH,KAAQn2B,MAAU;AAAkB,WAAAs2B;AACzC,QAAMF,IAAWD,EAAK,MAAM,SAAS,EAAE,OAAO,CAAC1uB,MAAM,CAAC,CAACA,EAAE,KAAM,CAAA,GAEzDgvB,IAAO,CAAC/lB,MAAc;AACtB,QAAA0lB,EAAS,SAAS,GAAG;AACjB,YAAAnT,IAAMmT,EAAS,SACfM,IAAYH,EAAMH,EAAS,CAAC,GAAG,IAAI,MAAM;AAC/C,MAAA1lB,EAAKuS,CAAG,IAAIvS,EAAKuS,CAAG,MAAM,SAAayT,IAAY,CAAA,IAAK,CAAA,IAAMhmB,EAAKuS,CAAG,GACjEwT,EAAA/lB,EAAKuS,CAAG,CAAC;AAAA,IAAA;AAET,MAAAvS,EAAA0lB,EAAS,CAAC,CAAC,IAAIp2B;AAAA,EACtB,GAEI22B,IAASpZ,EAAM+Y,CAAO;AAC5B,SAAAG,EAAKE,CAAM,GACJA;AACT,GC9HAC,KAAe,CACbx1B,GACAqwB,MACW;AACX,QAAM,EAAC,KAAAoF,GAAK,GAAGC,EAAA,IAAU11B,GACnB21B,IAAmD,CAAA;AACzD,EAAIF,KACKpF,EAAA,QAAQ,CAACtwB,MAAO;AACrB,IAAA41B,EAAW51B,CAAE,IAAI01B;AAAA,EAAA,CAClB;AAEH,QAAMG,IAAiC,EAAC,GAAGD,GAAY,GAAGD,EAAM;AAE9D,SAAA,OAAO,QAAQE,CAAK,EAEjB,OAAO,CAAC,CAACjvB,GAAM/H,CAAK,MAAM,CAAC,CAACA,KAASyxB,EAAO,SAAS1pB,CAAY,CAAC,EAClE,IAAI,CAAC,CAACA,CAAI,MAAMA,CAAY;AAEnC,GCRakvB,KAAiB,CAACC,GAAgBl3B,MAC7CA,KAASk3B,IAAShD,GAAWgD,CAAM,IAAI,KCVzCC,KAAe,CACblJ,GACAmJ,MACG;AACG,QAAAC,IAAoBlX,EAAMiX,CAAS,GACnCE,IAAgBnX,EAAM8N,CAAK,GAE3BsJ,IAAepX,EAAM,MAAMqU,GAAO8C,EAAc,KAAK,CAAC,GACtDE,IAAoBz3B;AAAA,IAAS,MACjCw3B,EAAa,QACTtB;AAAA,MACEqB,EAAc;AAAA,MACdD,EAAkB,SAAS;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IAAA,IAEF,CAAC;AAAA,EAAA;AAGA,SAAA,EAAC,cAAAE,GAAc,mBAAAC;AACxB,GCpCeC,KAAA,OAAO,EAAC,GAAGC,GAAOpC,EAAmB,MCOpD9N,KAAe,CAACoJ,IAAmC,CAAA,MAAO;AAClD,QAAA+G,IAAU/G,EAAK,WAAW,IAC1BvU,IAAY,iBACZjI,IAAW;AACjB,SAAOoT,GAAa;AAAA,IAClB,WAAAnL;AAAA,IACA,UAAAjI;AAAA,IACA,YACEujB,MAAY,KACR,YAAY/G,EAAK,aAAavU,CAAS,IAAIuU,EAAK,YAAYxc,CAAQ,KACpE;AAAA,IACN,GAAGwc;AAAA,EAAA,CACJ;AACH,GCpBAgH,KAAe,CAACva,MACdtd,EAAS,MAAM;AACT,MAAAkuB,IAAQhuB,GAAQod,CAAG;AACf,SAAA4Q,IAAA;AAAA,IACN,GAAGA;AAAA,IACH,SAASA,EAAM,WAAW;AAAA,IAC1B,WAAWA,EAAM,aAAa;AAAA,IAC9B,aAAaA,EAAM,eAAe;AAAA,EAAA,GAE7B;AAAA,IACL,CAAC,WAAWA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,IAChD,CAAC,QAAQA,EAAM,WAAW,EAAE,GAAGA,EAAM,gBAAgB,QAAQA,EAAM,YAAY;AAAA,IAC/E,CAAC,MAAMA,EAAM,SAAS,EAAE,GAAGA,EAAM,cAAc,QAAQA,EAAM,YAAY;AAAA,EAAA;AAE7E,CAAC,GCdH4J,KAAe,CAAC73B,MACdD,EAAS,MAAM;AACP,QAAA+3B,IAAgB73B,GAAQD,CAAK;AAC5B,SAAA;AAAA,IACL,WAAW83B,MAAkB;AAAA,IAC7B,CAAC,aAAaA,CAAa,EAAE,GAAG,OAAOA,KAAkB;AAAA,EAAA;AAE7D,CAAC,GCaHC,KAAe,CACb3yB,GACAuc,IAAqCzG,EAAI,GAAI,GAC7C8c,IAA+C,OAC3B;AACpB,QAAMC,IAAiBvY,GAASS,EAAM/a,CAAM,CAAC,GAEvC8yB,IAAmBxY,GAASS,EAAMwB,CAAQ,CAAC,GAE3CwW,IAAWjd,EAAI,EAAK,GAEpBkd,IAAkBld,EAAI,CAAC,GAEvBmd,IAAoBlY,EAAM,MAAM,KAAK,KAAK8X,EAAe,QAAQC,EAAiB,KAAK,CAAC,GAExFl4B,IAAQmgB;AAAAA,IAAM,MAClBZ,EAAS,SAAS4Y,EAAS,QACvB,KAAK,MAAMF,EAAe,QAAQG,EAAgB,QAAQF,EAAiB,KAAK,IAChF;AAAA,EAAA,GAGA,EAAC,OAAA1Y,GAAO,QAAAC,GAAQ,UAAAF,EAAY,IAAAmC;AAAA,IAChC,MAAM;AACY,MAAA0W,EAAA,QAAQA,EAAgB,QAAQ;AAAA,IAClD;AAAA,IACAzW;AAAA,IACAqW;AAAA,EAAA,GAGIM,IAAU,MAAM;AACpB,IAAAH,EAAS,QAAQ,IACjBC,EAAgB,QAAQ,GACjB3Y;EAAA,GAGHqE,IAAO,MAAM;AACjB,IAAAqU,EAAS,QAAQ,IACjBC,EAAgB,QAAQC,EAAkB;AAAA,EAAA;AAG5C,EAAA9S,GAAY,MAAM;AACZ,IAAA6S,EAAgB,QAAQC,EAAkB,UAC5CD,EAAgB,QAAQC,EAAkB,QAExCD,EAAgB,UAAUC,EAAkB,SACxC7Y;EACR,CACD,GAED5D,GAAM,CAACsc,GAAkBD,CAAc,GAAG,MAAM;AACzC,IAAAnU,KACGwU;EAAA,CACT;AAED,QAAMC,IAAU,MAAM;AACpB,IAAIhZ,EAAS,UAAU,OACvB4Y,EAAS,QAAQ,IACX3Y;EAAA,GAGFgZ,IAAW,MAAM;AACjB,IAAAJ,EAAgB,UAAUC,EAAkB,UAChDF,EAAS,QAAQ,IACV1Y;EAAA;AAGF,SAAA;AAAA,IACL,UAAUC,GAASH,CAAQ;AAAA,IAC3B,UAAUG,GAASyY,CAAQ;AAAA,IAC3B,SAAAG;AAAA,IACA,MAAAxU;AAAA,IACA,OAAOyU;AAAA,IACP,QAAQC;AAAA,IACR,OAAAx4B;AAAA,EAAA;AAEJ,GChGAy4B,KAAe,CAACz4B,MACdD,EAAS,MAAM;AACP,QAAA+3B,IAAgB73B,GAAQD,CAAK;AAEnC,SAAO83B,MAAkB,KAAO,aAAaA,MAAkB,KAAQ,eAAe;AACxF,CAAC,GCQGY,KAAa,CAAC5P,MAClB/oB,EAAS,MAAM;AACP,QAAA44B,IAAgB14B,GAAQ6oB,CAAK;AAC5B,SAAA;AAAA,IACL,cACE6P,EAAc,UAAU,MACxBA,EAAc,WAAW,MACzBA,EAAc;AAAA,IAChB,sBAAsBA,EAAc,YAAY;AAAA,IAChD,qBAAqBA,EAAc,WAAW;AAAA,IAC9C,eAAeA,EAAc,WAAW;AAAA,IACxC,CAAC,gBAAgBA,EAAc,IAAI,EAAE,GACnCA,EAAc,SAAS,UACvBA,EAAc,SAAS,QACvBA,EAAc,WAAW;AAAA,EAAA;AAE/B,CAAC,GAQGC,KAAkB,CAAC9P,MAAoD;AACrE,QAAA6P,IAAgBxY,EAAM2I,CAAK,GAE3B+P,IAAaJ,GAAc,MAAME,EAAc,MAAM,SAAS,IAAI;AAExE,SAAO54B,EAAS,MAAM;AAAA,IACpB84B,EAAW;AAAA,IACX;AAAA,MACE,oBACEF,EAAc,MAAM,UAAU,MAASA,EAAc,MAAM,WAAW;AAAA,MACxE,aAAaA,EAAc,MAAM,WAAW;AAAA,IAC9C;AAAA,EAAA,CACD;AACH,GASMG,KAAkB,CAAChQ,MACvB/oB,EAAS,MAAM;AACP,QAAA44B,IAAgB14B,GAAQ6oB,CAAK;AAC5B,SAAA;AAAA,IACL,oBAAoB6P,EAAc,UAAU,MAASA,EAAc,WAAW;AAAA,IAC9E,KAAOA,EAAc,WAAW;AAAA,IAChC,CAAC,OAAOA,EAAc,aAAa,EAAE,GACnCA,EAAc,WAAW,MACzBA,EAAc,kBAAkB,UAChCA,EAAc,kBAAkB;AAAA,IAClC,CAAC,OAAOA,EAAc,IAAI,EAAE,GAC1BA,EAAc,UAAUA,EAAc,QAAQA,EAAc,SAAS;AAAA,EAAA;AAE3E,CAAC,GAQGI,KAAe,CAACjQ,MAAiD;AAC/D,QAAA6P,IAAgBxY,EAAM2I,CAAK,GAC3BkQ,IAAsB94B;AAAA,IAC1B,MAAMy4B,EAAc,MAAM;AAAA,IAC1B,MAAMA,EAAc,MAAM;AAAA,EAAA;AAE5B,SAAO54B,EAAS,OAAO;AAAA,IACrB,gBAAgBi5B,EAAoB;AAAA,IACpC,iBAAiBL,EAAc,MAAM,aAAa,KAAO,KAAO;AAAA,EAChE,EAAA;AACJ,GASMM,KAAkB,CAACnQ,MACvB/oB,EAAS,MAAM;AACP,QAAA44B,IAAgB14B,GAAQ6oB,CAAK;AAC5B,SAAA;AAAA,IACL,iBAAiB6P,EAAc,cAAc;AAAA,IAC7C,aAAaA,EAAc,YAAY,MAAQA,EAAc,YAAY;AAAA,IACzE,sBAAsBA,EAAc,YAAY,MAAQA,EAAc,YAAY;AAAA,IAClF,CAAC,aAAaA,EAAc,IAAI,EAAE,GAAGA,EAAc,SAAS;AAAA,EAAA;AAEhE,CAAC,GC3GHtJ,KAAe,CAAC6J,GAA2ChC,MACzDn3B,EAAS,MAAME,GAAQi5B,CAAE,KAAKC,GAAMjC,CAAM,CAAC,GAEhCiC,KAAQ,CAACjC,IAAS,OAEtB,WADOQ,GAAOjC,IAAa,MAAM,KAAK,SAAS,SAAW,EAAA,MAAM,GAAG,CAAC,CAAC,EAC1D0D,CAAO,SAASjC,CAAM,MCD1CkC,KAAe,CACbnL,GAEAC,MACG;AACG,QAAA9qB,IAAQ8X,EAA6B,IAAI,GAEzC6T,IAAaf,GAAUC,GAAO,cAAcC,GAAM,EAAC,SAAS,IAAK,GAEjEkB,IAAaC,GAAM,MAAMpB,EAAM,IAAI,OAAO,GAC1CoL,IAAiBpX,GAAY,MAAMgM,EAAM,YAAY,CAAC,GACtDqL,IAAwBrX,GAAY,MAAMgM,EAAM,mBAAmB,GAAG,GAEtEsL,IAA2BjZ;AAAA,IAC/B,CAACtgB,MAAiC;AAChC,MAAA+uB,EAAW,QAAQ/uB;AAAA,IACrB;AAAA,IACA,MAAOiuB,EAAM,SAAS,KAAO,IAAIoL,EAAe;AAAA,IAChD,EAAC,SAAS,MAAOpL,EAAM,SAAS,KAAO,MAAMqL,EAAsB,MAAM;AAAA,EAAA,GAGrEE,IAAmB,CAACx5B,GAA8By5B,IAAQ,OAAU;AACpE,IAAAxL,EAAM,SAAS,MAAQwL,MAAU,MACrCF,EAAyBv5B,CAAK;AAAA,EAAA,GAG1B,EAAC,SAAAgqB,EAAA,IAAWJ,GAASxmB,GAAO;AAAA,IAChC,cAAc6qB,EAAM;AAAA,EAAA,CACrB,GAEKyL,IAAe,CAAC15B,GAAe25B,GAAsBF,IAAQ,OAC7DxL,EAAM,cAAc,WAAc,CAACA,EAAM,iBAAiBwL,KACrDxL,EAAM,UAAUjuB,GAAO25B,CAAG,IAE5B35B,GAGH45B,IAAiB,CAAC55B,MAClBiuB,EAAM,OAAajuB,EAAM,SACzBiuB,EAAM,SAAe,OAAO,WAAWjuB,CAAK,IAEzCA;AAGT,EAAAwhB,GAAU,MAAM;;AACd,IAAIpe,EAAM,UACRA,EAAM,MAAM,UAAQ+a,IAAA4Q,EAAW,UAAX,gBAAA5Q,EAAkB,eAAc;AAAA,EACtD,CACD,GAED0b,GAAY,MAAM;AAChB,IAAApY,GAAS,MAAM;AACb,MAAIwM,EAAM,cACRjE,EAAQ,QAAQ;AAAA,IAClB,CACD;AAAA,EAAA,CACF;AAED,QAAMgP,IAAsB94B;AAAA,IAC1B,MAAM+tB,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,EAAA;AAsDP,SAAA;AAAA,IACL,OAAA7qB;AAAA,IACA,YAAAgsB;AAAA,IACA,qBAAA4J;AAAA,IACA,SAvDc,CAACW,MAAyB;AAClC,YAAA,EAAC,OAAA35B,EAAK,IAAI25B,EAAI,QACdG,IAAiBJ,EAAa15B,GAAO25B,CAAG;AAC9C,UAAIA,EAAI,kBAAkB;AACxB,QAAAA,EAAI,eAAe;AACnB;AAAA,MACF;AAEM,YAAAI,IAAYH,EAAeE,CAAc;AAE/C,MAAAN,EAAiBO,CAAS;AAAA,IAAA;AAAA,IA8C1B,UA3Ce,CAACJ,MAAyB;AACnC,YAAA,EAAC,OAAA35B,EAAK,IAAI25B,EAAI,QACdG,IAAiBJ,EAAa15B,GAAO25B,CAAG;AAC9C,UAAIA,EAAI,kBAAkB;AACxB,QAAAA,EAAI,eAAe;AACnB;AAAA,MACF;AAEM,YAAAI,IAAYH,EAAeE,CAAc;AAC3C,MAAA/K,EAAW,UAAUgL,KACvBP,EAAiBM,GAAgB,EAAI;AAAA,IACvC;AAAA,IAiCA,QA9Ba,CAACH,MAA8B;AAC5C,UAAI,CAAC1L,EAAM,QAAQ,CAACA,EAAM;AAAe;AAEnC,YAAA,EAAC,OAAAjuB,EAAK,IAAI25B,EAAI,QACdG,IAAiBJ,EAAa15B,GAAO25B,GAAK,EAAI,GAE9CI,IAAYH,EAAeE,CAAc;AAC3C,MAAA/K,EAAW,UAAUgL,KACvBP,EAAiBM,GAAgB,EAAI;AAAA,IACvC;AAAA,IAsBA,OAnBY,MAAM;AACd,MAAC7L,EAAM,aACTjE,EAAQ,QAAQ;AAAA,IAClB;AAAA,IAiBA,MAdW,MAAM;AACb,MAACiE,EAAM,aACTjE,EAAQ,QAAQ;AAAA,IAClB;AAAA,EAWA;AAEJ,GC/HAgQ,KAAe,CAAC54B,GAA2B6sB,MAAmC;AACtE,QAAAgM,IAAY,CAACC,MACjB,OAAOA,KAAW,YAAYA,MAAW,QAAQ,WAAWA,GAExDC,IAAkB,CAEtBD,MAC0C;AACtC,QAAA,OAAOA,KAAW;AACpB,aAAO,EAAC,OAAOA,GAAQ,MAAMA,EAAM;AAEjC,QAAA,OAAOA,KAAW;AACpB,aAAO,EAAC,OAAOA,GAAQ,MAAM,GAAGA,CAAM;AAExC,QAAIA,aAAkB;AACpB,aAAO,EAAC,OAAOA,GAAQ,MAAMA,EAAO;AAGtC,UAAMl6B,IAAiBsyB,GAAI4H,GAAQjM,EAAM,UAAoB,GACvDmM,IAAe9H,GAAI4H,GAAQjM,EAAM,SAAmB,GACpDnZ,IAAewd,GAAI4H,GAAQjM,EAAM,SAAmB,GACpDoM,IAAoB/H,GAAI4H,GAAQjM,EAAM,aAAuB,GAE7D2C,IAA0D3C,EAAM,eAClEqE,GAAI4H,GAAQjM,EAAM,YAAsB,IACxC;AAEJ,WAAI2C,MAAS,SACJ;AAAA,MACL,OAAO0B,GAAI4H,GAAQjM,EAAM,UAAoB,KAAKmM;AAAA,MAClD,SAASxJ;AAAA,IAAA,IAIN;AAAA,MACL,OAAA5wB;AAAA,MACA,MAAAo6B;AAAA,MACA,MAAAtlB;AAAA,MACA,UAAAulB;AAAA,IAAA;AAAA,EACF,GAGIC,IAAmB,CACvBl5B,MAE8CA,EAAQ,IAAI,CAAC84B,MAAWC,EAAgBD,CAAM,CAAC;AAIxF,SAAA,EAAC,mBAFkBn6B,EAAS,MAAMu6B,EAAiBr6B,GAAQmB,CAAO,CAAC,CAAC,GAEhD,WAAA64B;AAC7B,GC3CMM,KAAqB,cAEdC,KAAsB,MAAM;AACjC,QAAAC,IAAqB/C,GAAOlC,EAAqB,GAKjDkF,IAAU,CAACC,MAAqD;AACpE,IAAAF,KAAA,QAAAA,EAAoB,YAAYE,IAChCF,KAAA,QAAAA,EAAoB,eAAeE;AAAA,EAAK,GAGpCzS,IAAkBrC,GAAc,mBAAmB,CAACzR,GAAUiI,GAAWrc,MAAU;AACjF,UAAAmB,IACJ,OAAOiT,KAAa,WAChB,iCAAQ,SAAS,cAAcA,KAC/B8O,GAAa9O,CAAQ;AAC3B,IAAKjT,MAEDkb,MAAc,UAChBlb,EAAG,UAAU,OAAOo5B,IAAoBv6B,MAAUu6B,EAAkB,IAEjEp5B,EAAA,aAAakb,GAAWrc,CAAK;AAAA,EAClC,CACD;AAED,SAAAmd,GAAkB,MAAM;AACN,IAAA+K,EAAA,QAAQ,SAAS,EAAE;AAAA,EAAA,CACpC,GAEDtM;AAAA,IACE,MAAM6e,KAAA,gBAAAA,EAAoB,WAAW;AAAA,IACrC,CAACrZ,MAAa;AACZ,MAAIA,MAAa,UACjB8G,EAAgB,QAAQ,SAAS9G,IAAW,IAAImZ,KAAqB,EAAE;AAAA,IACzE;AAAA,EAAA,GAGK;AAAA,IACL,GAAGE;AAAA,IACH,SAAAC;AAAA,EAAA;AAEJ,GAEeE,KAAA,CAACC,MAAsC;AAC9C,QAAA,EAAC,cAAAC,GAAc,WAAAC,GAAW,aAAAC,GAAa,OAAAC,GAAO,SAAAP,GAAS,YAAAQ,MAAcV,MAErEW,IAAejb;AAErB,MAAI,CAACib,KAAgBA,EAAa,KAAK,WAAW;AAC1C,UAAA,IAAI,MAAM,mDAAmD;AAGrE,SAAAL,KAAA,QAAAA,EAAeK,IAEfhe,GAAkB,MAAM;AACtB,IAAAud,EAAQS,CAAY;AAAA,EAAA,CACrB,GAEDvf;AAAA,IACEif;AAAA,IACA,CAACzZ,GAAUgG,MAAa;AACtB,MAAIhG,IACF2Z,KAAA,QAAAA,EAAYI,KACH/T,KAAY,CAAChG,MACtB4Z,KAAA,QAAAA,EAAcG;AAAA,IAElB;AAAA,IACA,EAAC,WAAW,GAAI;AAAA,EAAA,GAGX;AAAA,IACL,gBAAgBp7B;AAAA,MAAS,MACvBk7B,KAAA,gBAAAA,EAAO,MAAM,UAAU,CAAC95B,MAAO;;AAAA,iBAAAgd,IAAAhd,EAAG,YAAH,gBAAAgd,EAAY,UAAOC,IAAA+c,EAAa,YAAb,gBAAA/c,EAAsB;AAAA;AAAA,IAC1E;AAAA,IACA,kBAAkB8c;AAAA,EAAA;AAEtB,GC/EAE,KAAe,CAAClC,IAA2C,WAAc;AACjE,QAAA,EAAC,UAAAmC,MAAYb,MACbzV,IAAW7E,MAEXob,IAAa,CAACC,MACbA,EAAU,SAIXA,EAAU,OAAO,KAAK,WAAW,WAC5BA,EAAU,SAGZD,EAAWC,EAAU,MAAM,IAPzB,MAULC,IAAiBz7B,EAAS,MAAM;AAC9B,UAAA07B,IAAax7B,GAAQi5B,CAAE;AAC7B,WAAIuC,KACKJ,KAAA,gBAAAA,EAAU,MAAM,KAAK,CAACV,MAAUA;;AAAAA,eAAAA,IAAAA,EAAM,YAANA,gBAAAA,EAAe,GAAG,WAAUc;AAAA,WAAe,OAG/E1W,IAIEuW,EAAWvW,CAAQ,IAHjB;AAAA,EAGiB,CAC3B,GAEK4V,IAAQxa,EAAM,MAAA;;AAAM,YAAAhC,IAAAqd,EAAe,UAAf,gBAAArd,EAAsB;AAAA,GAAK;AAE9C,SAAA;AAAA,IACL,OAAO;;AACU,OAAAC,KAAAD,IAAAqd,EAAA,UAAA,gBAAArd,EAAO,YAAP,QAAAC,EAAgB;AAAA,IACjC;AAAA,IACA,KAAKoR,IAAU,IAAI;;AACF,OAAApR,KAAAD,IAAAqd,EAAA,UAAA,gBAAArd,EAAO,YAAP,QAAAC,EAAgB,KAAKoR;AAAA,IACtC;AAAA,IACA,OAAAmL;AAAA,EAAA;AAEJ,GC9CAe,KAAe,MAAM;AACnB,QAAM,EAAC,WAAAC,GAAW,OAAAV,EAAK,IAAIT,GAAoB;AAgBxC,SAAA;AAAA,IACL,GAf4B9C,GAAOnC,EAAwB;AAAA,IAgB3D,MAdW,CAAC/F,IAAU,OAAO;;AAC7B,MAAImM,KAAA,QAAAA,EAAW,WACFxd,IAAAwd,KAAA,gBAAAA,EAAA,MAAM,YAAN,QAAAxd,EAAe,KAAKqR;AAAA,IACjC;AAAA,IAYA,SATc,CAACA,IAAU,OAAO;AACzB,MAAAyL,KAAA,QAAAA,EAAA,MAAM,QAAQ,CAACN,MAAU;;AACxB,SAAAxc,IAAAwc,EAAA,YAAA,QAAAxc,EAAS,KAAKqR;AAAA,MAAO;AAAA,IAC5B;AAAA;AAAA,EAMD;AAGJ,GCvBeoM,KAAA,CACbz6B,GAMA06B,IAAiC,SAEjC97B,EAAS,MAAM;AACP,QAAAC,IAAQC,GAAQkB,CAAE,GAClB26B,IAAe77B,GAAQ47B,CAAI;AAEjC,SAAOvI,GAAU,KAAK,OAAOtzB,CAAK,CAAC,IAC/B,GAAG,OAAOA,CAAK,CAAC,GAAG87B,CAAY,KAC9B97B;AACP,CAAC,GCjBY+7B,KAAA,CAAC1e,MAAoD;AAC5D,QAAA2e,IAAuB,CAC3Bh8B,GACA4f,MACW;AACX,UAAMqc,IAAWrc,MAAQ,OAAO,KAAK,GAAGA,CAAG;AAEpC,WAAA5f,MAAU,WACb,GAAGi8B,CAAQ,mBACXj8B,MAAU,SACR,GAAGi8B,CAAQ,iBACX,OAAOj8B,KAAU,YACfA,MAAU,OACVA,MAAU,OACVA,MAAU,OACVA,MAAU,OACVA,MAAU,OACVA,MAAU,MACV,GAAGi8B,CAAQ,WAAWj8B,CAAK,KAC3BA,MAAU,SACR,GAAGi8B,CAAQ,cACXj8B,MAAU,OACR,GAAGi8B,CAAQ,cACXj8B,MAAU,OACR,GAAGi8B,CAAQ,cACX,GAAGA,CAAQ;AAAA,EAAA;AAG3B,SAAOl8B,EAAS,MAAM;AACd,UAAAkuB,IAAQhuB,GAAQod,CAAG;AAElB,WAAA;AAAA,MACL,CAAC,GAAG2e,EAAqB/N,EAAM,SAAoC,IAAI,CAAC,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,MACrF,CAAC,GAAG+N,EAAqB/N,EAAM,YAAuC,KAAK,CAAC,EAAE,GAC5E,CAAC,CAACA,EAAM;AAAA,MACV,CAAC,GAAG+N,EAAqB/N,EAAM,eAA0C,QAAQ,CAAC,EAAE,GAClF,CAAC,CAACA,EAAM;AAAA,MACV,CAAC,GAAG+N,EAAqB/N,EAAM,cAAyC,OAAO,CAAC,EAAE,GAChF,CAAC,CAACA,EAAM;AAAA,MACV,CAAC,GAAG+N,EAAqB/N,EAAM,YAAuC,KAAK,CAAC,EAAE,GAC5E,CAAC,CAACA,EAAM;AAAA,IAAA;AAAA,EACZ,CACD;AACH,GC3CAiO,KAAe,MAAM;AACb,QAAAC,IAAYzE,GAAOrC,EAAY;AAErC,SAAA7T,GAAU,MAAM;AACd,IAAA5F;AAAA,MACE,CAAC,MAAMugB,KAAA,gBAAAA,EAAW,MAAM,OAAO,MAAMA,KAAA,gBAAAA,EAAW,OAAO,KAAK;AAAA,MAC5D,CAAC,CAACC,GAAQC,CAAS,MAAM;AACvB,cAAMvnB,IAAO,SAAS;AAGtB,QAAAA,EAAK,aAAa,OAAOsnB,KAAU,KAAQ,QAAQ,KAAK,GACnDtnB,EAAA,aAAa,QAAQunB,KAAa,EAAE;AAAA,MAC3C;AAAA,MACA,EAAC,WAAW,GAAI;AAAA,IAAA;AAAA,EAClB,CACD,GAEM,EAAC,GAAGF;AACb,GClBAG,KAAe,CAACC,GAAmCC,MAA0C;AAC3F,QAAMC,IAAiB/c,GAASS,EAAMoc,CAAM,CAAC,GACvCG,IAAwBhd,GAASS,EAAMqc,CAAU,CAAC,GAKlDG,IAA4Bxc,EAAM,MAAM,CAACuc,EAAsB,KAAK;AAE1E,EAAAlb,GAAU,MAAM;AACd,UAAM6K,IAAWF;AAAA,MACf,SAAS;AAAA,MACTsQ,EAAe,SAASE,EAA0B;AAAA,IAAA;AAG9C,IAAA/gB,GAAA,CAAC6gB,GAAgBE,CAAyB,GAAG,CAAC,CAACC,GAAUC,CAAO,MAAM;AAC1E,MAAAxQ,EAAS,QAAQuQ,KAAYC;AAAA,IAAA,CAC9B;AAAA,EAAA,CACF;AACH,GCqBeC,KAAA,CACbC,GACAhjB,GACA3Y,IAA+C,OAC3B;AACd,QAAA47B,IAAO7c,EAAM4c,CAAO,GACpBE,IAAM9c,EAAMpG,CAAM,GAElBmjB,IAAkBhiB,EAAI+V,GAAW+L,EAAK,KAAK,CAAC,GAC5CG,IAAiBjiB,EAAI+V,GAAWgM,EAAI,KAAK,CAAC;AAEhD,EAAArhB,GAAM,CAACohB,GAAMC,CAAG,GAAG,MAAM;AACZ,IAAAG;EAAA,CACZ;AACK,QAAA;AAAA,IACJ,cAAAC,IAAe;AAAA,IACf,aAAAC,IAAc;AAAA,IACd,QAAAC,IAAS;AAAA,IACT,MAAApmB;AAAA,IACA,YAAAsS,IAAa;AAAA,IACb,WAAAjS,IAAY,CAAC,KAAK,KAAK,CAAC;AAAA,IACxB,cAAAgmB,IAAe;AAAA,EACb,IAAAp8B,GACEinB,IAAUnN,EAAmB,IAAI,GACjChV,IAAOgV,EAAmB,CAAA,CAAE,GAC5BuiB,IAAWviB,EAAmB,CAAA,CAAE;AAItC,EADYgF,OAMVsB,GAAU,MAAM;AACd,IAAAZ,GAAQoc,GAAME,GAAiB;AAAA,MAC7B,WAAW;AAAA,QACT,KAAK,CAACn5B,MAAMktB,GAAWltB,CAAC;AAAA,MAC1B;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,IAAA,CACZ,GACD6c,GAAQqc,GAAKE,GAAgB;AAAA,MAC3B,WAAW;AAAA,QACT,KAAK,CAACp5B,MAAMktB,GAAWltB,CAAC;AAAA,MAC1B;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,IAAA,CACZ,GACUq5B;EAAA,CACZ,IApBD3b,GAAS,MAAM;AACF,IAAA2b;EAAA,CACZ;AAqBH,QAAMA,IAAa,MAAM;AACd,IAAAK,EAAA,QAAQP,EAAgB,QAC5B,MAAM,KAAKA,EAAgB,MAAM,iBAAiBG,CAAY,CAAC,IAChE,CAAA,GACJn3B,EAAK,QAAQu3B,EAAS,MAAM,IAAI,CAACt8B,OAAQ;AAAA,MACvC,IAAIA,EAAG;AAAA,MACP,IAAAA;AAAA,MACA,SAAS;AAAA,MACT,MAAMA,EAAG;AAAA,IACT,EAAA;AAAA,EAAA;AAGJ,MAAIu8B,IAAkB,IAClBC,IAAoB;AACxB,QAAMC,IAAa79B;AAAA,IAAS,MAC1Bm9B,EAAgB,SAAS,iBAAiBA,EAAgB,KAAK,EAAE,cAAc,YAC3E,OACAA,EAAgB;AAAA,EAAA,GAGhBW,IAAOrU;AAAA,IACXiU;AAAA,IACA,CAAC1lB,MAAY;;AACX,YAAM+lB,KAAa3f,KAAAyf,EAAW,UAAS,qCAAU,qBAA9B,gBAAAzf,GAAgD;AACnE,MAAAuf,IAAkBI,IAAYH,GACVA,IAAAG,GACZ/lB,EAAA,QAAQ,CAACgmB,MAAU;AACzB,YAAIA,EAAM,gBAAgB;AACnB,UAAA73B,EAAA,MAAM,QAAQ,CAACwK,MAAS;AACvB,YAAAA,EAAK,OAAOqtB,EAAM,WACpBrtB,EAAK,UAAU;AAAA,UACjB,CACD;AACD;AAAA,QACF;AACK,QAAAxK,EAAA,MAAM,QAAQ,CAACwK,MAAS;AACvB,UAAAA,EAAK,OAAOqtB,EAAM,WACpBrtB,EAAK,UAAU;AAAA,QACjB,CACD;AAAA,MAAA,CACF;AACD,UAAIstB,IAAuB;AAC3B,MAAIN,IACFM,MAAQ5f,IAAA,CAAC,GAAGlY,EAAK,KAAK,EAAE,QAAU,EAAA,KAAK,CAACwK,MAASA,EAAK,OAAO,MAArD,gBAAA0N,EAAwD,OAAM,OAE9D4f,MAAA7P,IAAAjoB,EAAK,MAAM,KAAK,CAACwK,MAASA,EAAK,OAAO,MAAtC,gBAAAyd,EAAyC,OAAM,MAErD6P,MAAU,SACZ3V,EAAQ,QAAQ2V,IAEb3V,EAAQ,UACXA,EAAQ,UAAQ4V,IAAA/3B,EAAK,MAAM,CAAC,MAAZ,gBAAA+3B,EAAe,OAAM;AAAA,IAEzC;AAAA,IACA;AAAA,MACE,MAAM9mB,IAAO8Z,GAAW9Z,CAAI,IAAIymB;AAAA,MAChC,YAAAnU;AAAA,MACA,WAAAjS;AAAA,IACF;AAAA,EAAA;AAEI,EAAAoE,GAAAyM,GAAS,CAAC2V,MAAU;;AACpB,QAAAT;AAAQ;AACZ,UAAMW,KAAQ/f,IAAAgf,EAAe,UAAf,gBAAAhf,EAAsB,iBAAiBmf;AACrD,QAAIY,MAAU;AAAW;AACzB,QAAIC,IAAc,IACd58B,KAAoC;AAClC,IAAA28B,EAAA,QAAQ,CAACxtB,MAAS;;AAChB,YAAA0tB,IAAiB1tB,EAAK,QAAQ,WAAW;AAE3C,WAAAyN,IAAAzN,EAAK,aAAa,MAAM,MAAxB,QAAAyN,EAA2B,SAAS,IAAI6f,CAAK,KAAK;AACpC,QAAAz8B,KAAAmP,GACXA,EAAA,UAAU,IAAI,QAAQ,GACvB0tB,OACFhgB,IAAAggB,KAAA,gBAAAA,EAAgB,cAAc,wBAA9B,QAAAhgB,EAAmD,UAAU,IAAI,WACnD+f,IAAA;AAEhB,YAAIE,MAAYlQ,IAAAzd,EAAK,QAAQ,MAAM,MAAnB,gBAAAyd,EAAsB;AACtC,gBAAO8P,IAAAI,MAAA,gBAAAA,GAAW,cAAX,QAAAJ,EAAsB,SAAS;AACtB,UAAAE,IAAA,KACdG,IAAAD,GAAU,cAAc,WAAW,MAAnC,QAAAC,EAAsC,UAAU,IAAI,WACxCD,MAAAE,KAAAF,GAAU,QAAQ,MAAM,MAAxB,gBAAAE,GAA2B;AAAA,MACzC,WAEK7tB,EAAA,UAAU,OAAO,QAAQ,GAC1B0tB,KAAkB,CAACD,OACrBK,IAAAJ,KAAA,gBAAAA,EAAgB,cAAc,wBAA9B,QAAAI,EAAmD,UAAU,OAAO,YAGlE,CAACL,GAAa;AAChB,YAAIE,MAAYI,KAAA/tB,EAAK,QAAQ,MAAM,MAAnB,gBAAA+tB,GAAsB;AACtC,gBAAOC,KAAAL,MAAA,gBAAAA,GAAW,cAAX,QAAAK,GAAsB,SAAS;AACtB,UAAAP,IAAA,IACJE,GAAA,cAAc,WAAW,MAAM98B,QACvCo9B,KAAAN,GAAU,cAAc,WAAW,MAAnC,QAAAM,GAAsC,UAAU,OAAO,YAC7CN,MAAAO,KAAAP,GAAU,QAAQ,MAAM,MAAxB,gBAAAO,GAA2B;AAAA,MAE3C;AAAA,IACF,CACD;AAAA,EAAA,CACF;AAED,QAAMC,IAAQrB,IAEV9U;AAAA,IACEwU;AAAA,IACA,MAAM;AACO,MAAAE;IACb;AAAA,IACA;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EAAA,IARF,EAAC,MAAM,MAAM;AAAA,OAUX0B,IAAiB,CAAC77B,GAA6B87B,IAAkB,OAAU;;AAC/E,IAAA97B,EAAM,eAAe;AACrB,UAAM+7B,KAAQ5gB,KAAAD,IAAAlb,EAAM,WAAN,gBAAAkb,EAA8B,iBAA9B,gBAAAC,EAAA,KAAAD,GAA6C,SACrDhd,KAAyB69B,IAAO,qCAAU,cAAcA,KAAQ;AAElE,IAAA79B,MAAM+7B,EAAgB,UACxBA,EAAgB,MAAM,WAClBA,EAAgB,MAAM,SAAS,EAAC,KAAK/7B,GAAG,WAAW,UAAU49B,IAAS,WAAW,QAAO,IACvF7B,EAAgB,MAAM,YAAY/7B,GAAG;AAAA,EAC5C,GAEIiW,IAAU,MAAM;AACpB,IAAAymB,EAAK,KAAK,GACVgB,EAAK,KAAK;AAAA,EAAA;AAEL,SAAA;AAAA,IACL,SAASnf,GAAS2I,CAAO;AAAA,IACzB,MAAAniB;AAAA,IACA,SAASg3B;AAAA,IACT,QAAQC;AAAA,IACR,gBAAA2B;AAAA,IACA,YAAA1B;AAAA,IACA,SAAAhmB;AAAA,EAAA;AAEJ,GCrOe6nB,KAAA,OAAO,EAAC,GAAGvH,GAAOtC,EAAc;;;;;;;;;;ACsB/C,UAAMnH,IAAQY,GAORX,IAAOY,GAoBPoQ,IAAiBn/B,EAAS,MAAM;AACpC,YAAMo/B,IAAgB;AAAA,QACpB,MAAM;AAAA,QACN,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,MAAA,GAEZC,IAAa;AAAA,QACjB,GAAGD;AAAA,QACH,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,MAAA;AAEb,aAAAlR,EAAM,SAASkR,IAAgBC;AAAA,IAAA,CACvC,GAEKC,IAAiBt/B,EAAS,OAAO,EAAC,MAAMkuB,EAAM,MAAM,KAAK,IAAM,GAAGiR,EAAe,MAAA,EAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzD9F,UAAMjR,IAAQY,GAMRX,IAAOY;;;;;;;;;IC4DPwQ,KAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;AAxC3B,UAAMrR,IAAQY,GA0BRX,IAAOY,GAIPjM,IAAQ0c,MAKRC,IAAe9H,GAAOzC,IAAsB,IAAI,GAChDwK,IAAa/H,GAAOvC,IAAoB,IAAI,GAE5CpQ,IAAW7E,MAIXwf,IAAM3/B,EAAS,MAAM;AACnB,YAAA4/B,IAAa1R,EAAM,oBACtB,MAAM,GAAG,EACT,IAAI,CAACxsB,MAAMA,EAAE,OAAO,CAAC,EAAE,YAAgB,IAAAA,EAAE,MAAM,CAAC,CAAC,EACjD,KAAK,EAAE;AAEV,aAAI,GADcsjB,KAAA,gBAAAA,EAAU,WAAW,IAAI,UAAU4a,QAAgB,WACnD1R,EAAM,YAAY,CAACA,EAAM,KAClC,MAEFA,EAAM;AAAA,IAAA,CACd,GAEK2R,IAAe7/B,EAAS,MAAM;AAClC,YAAM8/B,IAAa;AACnB,UAAI5R,EAAM;AAAM,eAAOA,EAAM;AAEzB,UAAA,OAAOA,EAAM,MAAO;AAAU,eAAOA,EAAM,MAAM4R;AAE/C,YAAA,EAAC,IAAA5+B,EAAM,IAAAgtB;AAET,UAAAhtB,MAAO,UAAa,UAAUA,GAAI;AAC9B,cAAAk1B,IAAOl1B,EAAG,QAAQ,IAClBkkB,IAAQlkB,EAAG,QACb,IAAI,OAAO,KAAKA,EAAG,KAAK,EACrB,IAAI,CAACQ,MAAA;;AAAM,oBAAGA,CAAC,KAAI0c,IAAAld,EAAG,UAAH,gBAAAkd,EAAW1c,EAAE;AAAA,SAAE,EAClC,KAAK,GAAG,CAAC,KACZ,IACEq+B,IAAO,CAAC7+B,EAAG,QAAQA,EAAG,KAAK,OAAO,CAAC,MAAM,MAAMA,EAAG,QAAQ,KAAK,IAAIA,EAAG,IAAI;AAChF,eAAO,GAAGk1B,CAAI,GAAGhR,CAAK,GAAG2a,CAAI,MAAMD;AAAA,MACrC;AAGO,aAAAA;AAAA,IAAA,CACR,GAEKrP,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,QAAQkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC7C,CAAC,gBAAgBA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MACrD,CAAC,gBAAgBA,EAAM,YAAY,QAAQ,GAAGA,EAAM,iBAAiB;AAAA,MACrE,CAAC,kBAAkBA,EAAM,gBAAgB,EAAE,GAAGA,EAAM,qBAAqB;AAAA,MACzE,CAAC,eAAeA,EAAM,eAAe,EAAE,GAAGA,EAAM,oBAAoB;AAAA,MACpE,CAAC,eAAeA,EAAM,oBAAoB,QAAQ,GAAGA,EAAM,yBAAyB;AAAA,MACpF,CAAC,0BAA0BA,EAAM,gBAAgB,EAAE,GAAGA,EAAM,qBAAqB;AAAA,MACjF,CAAC,0BAA0BA,EAAM,qBAAqB,QAAQ,GAC5DA,EAAM,0BAA0B;AAAA,MAClC,aAAaA,EAAM,SAAS;AAAA,IAC5B,EAAA,GAEI8R,IAAahgC,EAAS,OAAO;AAAA,MACjC,OAASywB,EAAgB;AAAA,MACzB,IAAMvC,EAAM;AAAA,MACZ,MAAQ2R,EAAa;AAAA,MACrB,QAAU3R,EAAM;AAAA,MAChB,KAAOA,EAAM,WAAW,WAAWA,EAAM,OAAO,aAAa;AAAA,MAC7D,UAAYA,EAAM,WAAW,OAAO,OAAOpL,EAAM,WAAa,MAAc,OAAOA,EAAM;AAAA,MACzF,iBAAiBoL,EAAM,WAAW,KAAO;AAAA,IACzC,EAAA,GAEI+R,IAAsBjgC,EAAS,OAAO;AAAA,MAC1C,CAACu/B,EAAkB,GAAGrR,EAAM;AAAA,MAC5B,UAAUA,EAAM;AAAA,IAChB,EAAA,GAEIgS,IAAU,CAACx+B,MAAkC;;AACjD,UAAIwsB,EAAM,UAAU;AAClB,QAAAxsB,EAAE,eAAe,GACjBA,EAAE,yBAAyB;AAC3B;AAAA,MACF;AAGG,SAAA0c,IAAAqhB,KAAA,gBAAAA,EAAc,UAAd,gBAAArhB,EAAqB,WAAU,MAAQshB,MAAe,QACtDA,MAAe,UAAQrhB,IAAAqhB,EAAW,cAAX,gBAAArhB,EAAsB,WAAU,SAExD+P,IAAAqR,KAAA,gBAAAA,EAAc,SAAd,QAAArR,EAAA,KAAAqR,KAGFtR,EAAK,SAASzsB,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvIjB,UAAMwsB,IAAQY,GAoBRqR,IAAaxI,GAAO/C,IAAsB,IAAI,GAE9CwL,IAA4BvI,GAAuB3J,CAAK,GAExDuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA,MAC1B;AAAA,QACE,yBAAyBlS,EAAM,aAAYiS,KAAA,gBAAAA,EAAY,SAAS;AAAA,QAChE,wBACEjS,EAAM,YAAWiS,KAAA,gBAAAA,EAAY,QAAQ,UAASjS,EAAM,aAAYiS,KAAA,gBAAAA,EAAY,SAAS;AAAA,MACzF;AAAA,IAAA,CACD,GAEKE,IAAkBne,GAAY,MAAMgM,EAAM,SAAS,GACnDoS,IAAcpe,GAAY,MAAMgM,EAAM,KAAK,GAC3CqS,IAAYre,GAAY,MAAMgM,EAAM,OAAO,GAAG,GAC9CsS,IAAkBte,GAAY,OAAMie,KAAA,gBAAAA,EAAY,IAAI,UAAS,GAAG,GAEhEM,IAAgBzgC;AAAA,MAAS,MAC7BkuB,EAAM,cAAc,SAChBA,EAAM,YACNA,EAAM,aAAaiS,KAAA,QAAAA,EAAY,UAAU,QACvCG,EAAY,MAAM,QAAQD,EAAgB,KAAK,IAC/CnS,EAAM,gBAAgBiS,KAAA,QAAAA,EAAY,aAAa,SAC3CG,EAAY,QAAQ,OAAQC,EAAU,SAAS,MAAM,QAAQF,EAAgB,KAAK,IACpFnS,EAAM,UAAU,SACdA,EAAM,QACN;AAAA,IAAA,GAGNwS,IAAgB1gC;AAAA,MAAS,MAC7BwgC,EAAgB,QACZ,GAAIF,EAAY,QAAQ,MAAOE,EAAgB,KAAK,MACpDD,EAAU,QACR,GAAID,EAAY,QAAQ,MAAOC,EAAU,KAAK,MAC9C,OAAOrS,EAAM,SAAU,WACrBA,EAAM,QACN,GAAGA,EAAM,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDxB,UAAMA,IAAQY;AAqBd,WAAA6R,GAAQ/L,IAAsB;AAAA,MAC5B,UAAUxU,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACpC,KAAK9N,EAAM,MAAM8N,EAAM,GAAG;AAAA,MAC1B,cAAc9N,EAAM,MAAM8N,EAAM,YAAY;AAAA,MAC5C,WAAW9N,EAAM,MAAM8N,EAAM,SAAS;AAAA,MACtC,SAAS9N,EAAM,MAAM8N,EAAM,OAAO;AAAA,IAAA,CACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgBD,UAAMA,IAAQY,GA4CRX,IAAOY,GAWPhtB,IAAUoZ,EAAwB,IAAI,GAEtCylB,IAAa1X,GAAgBnnB,CAAO,GAGpCitB,IAAaC,kBAA8C,GAE3D,EAAC,cAAAuI,GAAc,mBAAAC,EAAiB,IAAIL,GAAelJ,CAAK,GAExD2S,IAAiB3e,GAAY,MAAMgM,EAAM,QAAQ,GAEjDkS,IAA4BvI,GAAuB3J,CAAK,GACxD4S,IAAkB1gB,EAAM,MAAO,OAAO4O,EAAW,SAAU,YAAY,IAAIA,EAAW,KAAM,GAE5F;AAAA,MACJ,UAAAxP;AAAA,MACA,OAAAC;AAAA,MACA,SAAA8Y;AAAA,MACA,QAAA7Y;AAAA,MACA,MAAAqE;AAAA,MACA,UAAAqU;AAAA,MACA,OAAO2I;AAAA,IAAA,IACL/I,GAAa8I,GAAiBD,GAAgB;AAAA,MAChD,WAAW,OAAO7R,EAAW,SAAU;AAAA,IAAA,CACxC;AAED,IAAAxJ,GAAY,MAAM;AACX,MAAA2I,EAAA,mBAAmB4S,EAAY,KAAK;AAAA,IAAA,CAC1C;AAED,UAAMC,IAAc5gB,EAAM,MAAOoX,EAAa,QAAQyJ,KAAQ,KAAM,GAE9DC,IAAiB9gB;AAAAA,MAAM,MAC3B,OAAO4O,EAAW,SAAU,YACxBA,EAAW,QACXxP,EAAS,SAAU0O,EAAM,eAAekK,EAAS;AAAA,IAAA,GAGjD3H,IAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA,MAC1B;AAAA,QACE,MAAMc,EAAe;AAAA,MACvB;AAAA,IAAA,CACD,GAEKC,IAAe,MAAM;AACzB,MAAIjT,EAAM,gBACJzO;IAAA;AAGF,IAAA5D,GAAA+kB,GAAY,CAACvf,MAAa;AAC9B,UAAIA,GAAU;AACC,QAAA8f;AACb;AAAA,MACF;AACO,MAAAzhB;IAAA,CACR;AAEK,UAAAkR,IAAwB,CAC5B/J,GACAgK,IAA8C,CAAA,MAE9C,IAAI/vB,GAAmB+lB,GAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,QAAQ9kB,EAAQ,SAAS;AAAA,MACzB,eAAe;AAAA,MACf,SAAS;AAAA,MACT,GAAG8uB;AAAA,MACH,aAAa3C,EAAM;AAAA,IAAA,CACpB,GAEGkT,IAAS,MAAM;AACnB,YAAMl+B,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,CAAK,GACdA,EAAM,kBAAkB;AAC1B,QAAI8rB,EAAW,UAAOA,EAAW,QAAQ,KACzCb,EAAK,gBAAgB;AACrB;AAAA,MACF;AACA,MAAKa,EAAW,UAAOA,EAAW,QAAQ;AAAA,IAAA,GAEtCqS,IAAS,CAAC5R,IAAU,OAAO;AACzB,YAAAvsB,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAYnB,MAAY,IAAI,SAAAA,GAAQ;AAQjF,UANAtB,EAAK,QAAQjrB,CAAK,GAEdusB,MAAY,WACdtB,EAAK,SAASjrB,CAAK,GAGjBA,EAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB,GAChBa,EAAW,UAAOA,EAAW,QAAQ;AAC1C;AAAA,MACF;AAEI,MAAA,OAAOA,EAAW,SAAU,YAC9BA,EAAW,QAAQ,MAEnBA,EAAW,QAAQ,GACdjL;IACP,GAGIud,IAAgB,MAAM;AACnB,MAAAF;IAAA,GAEHG,IAAe,MAAM;AACpB,MAAApT,EAAA,SAASyC,EAAsB,OAAO,CAAC;AAAA,IAAA,GAExC4Q,KAAe,MAAM;AACpB,MAAArT,EAAA,UAAUyC,EAAsB,QAAQ,CAAC;AAAA,IAAA;AAI1C,WAAA/U,GAAA2D,GAAU,CAAC6B,MAAa;AACxB,MAAAA,MAAa,MAAS+W,EAAS,UAAU,MAAWpJ,EAAW,SAC1DqS;IACT,CACD,GAEDjQ,GAAgBrN,CAAI,GAEPgN,EAAA;AAAA,MACX,OAAAtR;AAAA,MACA,SAAA8Y;AAAA,MACA,QAAA7Y;AAAA,MACA,MAAAqE;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7OK0d,KAAa,aAEJC,KAAA;AAAA,EACb,QAAQC,GAAK;AACL,UAAAC,IAASxmB,GASb,CAAA,CAAE,GAEEymB,IAAY1mB,EAAI,EAAK,GAErB2mB,IAAe,CAAC7hC,MAAmB;AACvC,MAAA4hC,EAAU,QAAQ5hC;AAAA,IAAA,GAMdmvB,IAAO,CAAC9R,MAGA;AACZ,YAAMykB,IAAQ,UAERC,IAAahiC,EAAS,MAAM;AAC1B,cAAAiiC,IAAiB/hC,GAAQod,EAAI,KAAK;AACjC,eAAA;AAAA,UACL,WAAWpd,GAAQod,EAAI,SAAS,KAAK4kB;AAAAA,UACrC,OAAO;AAAA,YACL,GAAGD;AAAA,YACH,MAAKA,KAAA,gBAAAA,EAAgB,QAAOR;AAAA,YAC5B,cAAaQ,KAAA,gBAAAA,EAAgB,UAAS;AAAA,YACtC,OAAAF;AAAA,UACF;AAAA,QAAA;AAAA,MACF,CACD;AAGC,cAAAC,EAAW,MAAM,MAAM,gBAAgB,SACnCA,EAAW,MAAM,MAAM,cACvBH,EAAU,SAEdD,EAAO,QAAQ,CAAC,GAAGA,EAAO,OAAOI,CAAU,IAE3CJ,EAAO,QAAQ,CAACI,GAAY,GAAGJ,EAAO,KAAK,GAGtCG;AAAA,IAAA,GAMHI,IAAS,CAACC,MAAiB;AACxB,MAAAR,EAAA,QAAQA,EAAO,MAAM,OAAO,CAACxgC,MAAOA,EAAG,MAAM,MAAM,UAAUghC,CAAI;AAAA,IAAA;AAG1E,IAAAT,EAAI,QAAQtM,IAAgB;AAAA,MAC1B,cAAAyM;AAAA,MACA,QAAAF;AAAA,MACA,MAAAxS;AAAA,MACA,QAAA+S;AAAA,IAAA,CACD;AAAA,EACH;AACF,GChFeE,KAAA;AAAA,EACb,QAAQV,GAAK;AACL,UAAA5Y,IAAQ5N,EAAyB,CAAA,CAAE,GACnC9S,IAAQ,MAAM;AAClB,MAAA0gB,EAAM,MAAM,OAAO,GAAGA,EAAM,MAAM,MAAM;AAAA,IAAA;AAG1C,IAAA4Y,EAAI,QAAQpM,IAAqB,EAAC,OAAAxM,GAAO,OAAA1gB,EAAM,CAAA;AAAA,EACjD;AACF,GCTei6B,KAAA;AAAA,EACb,QAAQX,GAAKtgC,GAAyC;AACpD,KAAIA,KAAA,gBAAAA,EAAS,eAAc,UAAU,OAAOA,EAAQ,GAAG,SAAU,cAC/DsgC,EAAI,QAAQjM,IAAar0B,EAAQ,GAAG,KAAK;AAAA,EAE7C;AACF;;;;;;;;;;;;;;ACQA,UAAM6sB,IAAQY,GASRlM,IAAQ2f,MAKR9R,IAAkBzwB,EAAS,MAAM;AAAA,MACrC,WAAWkuB,EAAM,IAAI;AAAA,MACrB;AAAA,QACE,CAAC,WAAWA,EAAM,IAAI,KAAK,GAAGA,EAAM;AAAA,QACpC,CAAC,QAAQA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC/C;AAAA,IAAA,CACD,GAEKsU,IAAepiB,EAAM,MAAM,CAACze,GAAYihB,EAAM,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACW1D,UAAMsL,IAAQY,GAmCRX,IAAOY,GAIP0T,IAAexT,GAAgCH,GAAC,SAA+B,GAE/E,EAAC,cAAA0I,GAAc,mBAAAC,MAAqBL,GAAelJ,GAAO;AAAA,MAC9D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,GAEKwU,IAAWtiB,EAAM,MAAM,OAAO8N,EAAM,WAAY,SAAS,GACzDyU,IAAWviB;AAAAA,MACf,MAAM8N,EAAM,QAAQ,YAAYA,EAAM,SAAS,UAAaA,EAAM,OAAO;AAAA,IAAA,GAErE0U,IAAUxiB,EAAM,MAAM8N,EAAM,OAAO,MAAS,GAC5C2U,IAAiBziB,EAAM,MAAO8N,EAAM,SAAS,SAAY,KAAQ,CAACyU,EAAS,KAAM,GAEjFG,IAAY9iC,EAAS,MAAO4iC,EAAQ,QAAQnL,EAAkB,QAAQ,CAAA,CAAG,GAEzEhH,IAAkBzwB,EAAS,MAAM;AAAA,MACrC,CAAC,OAAOkuB,EAAM,IAAI,EAAE;AAAA,MACpB;AAAA,QACE,CAAC,OAAOA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,QAC5C,QAAUA,EAAM,UAAUA,EAAM;AAAA,QAChC,gBAAgBA,EAAM;AAAA,QACtB,aAAaA,EAAM;AAAA,QACnB,UAAYA,EAAM;AAAA,MACpB;AAAA,IAAA,CACD,GAEK8S,IAAc5gB,EAAM,MAAOwiB,EAAQ,QAAQ3B,KAAQ/S,EAAM,OAAO,MAAMA,EAAM,GAAI,GAEhFgS,IAAU,CAACx+B,MAAkC;AACjD,UAAIwsB,EAAM,UAAU;AAClB,QAAAxsB,EAAE,eAAe,GACjBA,EAAE,gBAAgB;AAClB;AAAA,MACF;AACA,MAAAysB,EAAK,SAASzsB,CAAC,GACXghC,EAAS,UACED,EAAA,QAAQ,CAACvU,EAAM;AAAA,IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9FF,UAAMA,IAAQY,GA0BRX,IAAOY,GAaPgU,IAAiB,EAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,KAErDC,IAAuBhH,GAAwB,OAAO;AAAA,MAC1D,SAAS9N,EAAM;AAAA,MACf,YAAYA,EAAM;AAAA,MAClB,eAAeA,EAAM;AAAA,MACrB,cAAcA,EAAM;AAAA,MACpB,YAAYA,EAAM;AAAA,IAClB,EAAA,GAEI+U,IAAkB7iB;AAAAA,MAAM,MAC5B8N,EAAM,YAAY,QAAQ,CAACA,EAAM,UAAU,MAAMA,EAAM,OAAO,KAAK;AAAA,IAAA,GAG/DgV,IAAmB9iB,EAAM,MAAO8N,EAAM,OAAO,KAAO,IAAK,GAEzDiV,IAAenjC,EAAS,OAAO;AAAA,MACnC,MAAMkuB,EAAM;AAAA,MACZ,SAASA,EAAM;AAAA,MACf,OAAOA,EAAM;AAAA,IACb,EAAA,GAEIkV,IAAgBpjC,EAAS,OAAO;AAAA,MACpC,GAAG+iC;AAAA,MACH,QAAQ7U,EAAM,UAAU;AAAA,IACxB,EAAA,GAEImV,IAAiBrjC,EAAS,OAAO;AAAA,MACrC,qBAAqB,CAACkuB,EAAM,UAAU,CAACA,EAAM;AAAA,MAC7C,kBAAkBA,EAAM,UAAUA,EAAM;AAAA,IACxC,EAAA,GAEIoV,IAActjC,EAAS,MAAM,CAACijC,EAAgB,OAAOD,EAAqB,KAAK,CAAC,GAEhFO,IAAavjC,EAAS,OAAO;AAAA,MACjC,GAAG+iC;AAAA,MACH,SAAS7U,EAAM;AAAA,MACf,iBAAiBA,EAAM,WAAW;AAAA,MAClC,gBAAgBA,EAAM,OAAO,QAAQA,EAAM,IAAI,MAAM;AAAA,IACrD,EAAA,GAEIsV,IAAoBxjC;AAAA,MAAS,MACjCkuB,EAAM,WACF6U,IACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qECgUAU,KAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAxTjC,UAAMvV,IAAQY,GA0DRX,IAAOY,GAoBPnM,IAAQ2f,MAmBRlT,IAAaC,GAAM,MAAMpB,EAAM,IAAI,OAAO,GAG1Cc,IAAaC,kBAAqC,GAElDltB,IAAUoZ,EAAwB,IAAI,GACtCuoB,IAAWvoB,EAAwB,IAAI,GACvCwoB,IAAexoB,EAAwB,IAAI,GAC3CyoB,IAAczoB,EAAwB,IAAI,GAC1CqE,IAAWrE,EAAI6T,EAAW,KAAK,GAC/B6U,IAAoB1oB,EAAI,EAAK;AAEnC,IAAAuJ;AAAA,MACE;AAAA,MACA,MAAM;AACJ,QAAA2c,EAAO,KAAK;AAAA,MACd;AAAA,MACA,EAAC,QAAQt/B,EAAO;AAAA,IAAA,GAEAw6B,GAAAvN,GAAY,MAAMd,EAAM,aAAa;AACvD,UAAM,EAAC,SAAS4V,MAAcja,GAAS9nB,GAAS;AAAA,MAC9C,cAAcitB,EAAW,SAASd,EAAM,oBAAoB;AAAA,IAAA,CAC7D,GACK,EAAC,SAAS6V,MAAiBla,GAAS6Z,GAAU;AAAA,MAClD,cAAc1U,EAAW,SAASd,EAAM,oBAAoB;AAAA,IAAA,CAC7D,GACK,EAAC,SAAS8V,MAAqBna,GAAS8Z,GAAc;AAAA,MAC1D,cAAc3U,EAAW,SAASd,EAAM,oBAAoB;AAAA,IAAA,CAC7D,GACK,EAAC,SAAS+V,MAAoBpa,GAAS+Z,GAAa;AAAA,MACxD,cAAc5U,EAAW,SAASd,EAAM,oBAAoB;AAAA,IAAA,CAC7D,GAEKgW,IAAelkC,EAAS,MAAM;AAAA,MAClCkuB,EAAM;AAAA,MACN;AAAA,QACE,MAAM,CAACA,EAAM;AAAA,QACb,MAAM1O,EAAS;AAAA,MACjB;AAAA,IAAA,CACD,GAEK2kB,IAAc/jB;AAAAA,MAClB,MACE8N,EAAM,SAAS,MACdA,EAAM,SAAS,MAAQ2V,EAAkB,UAAU,MACnD3V,EAAM,SAAS,MAAQc,EAAW,UAAU;AAAA,IAAA,GAG3CoV,IAA0BhkB;AAAAA,MAAM,MACpC8N,EAAM,oBAAoB,SACtBA,EAAM,kBACNA,EAAM,eACJ,gBACA;AAAA,IAAA,GAGFmW,IAAqBjkB,EAAM,MAAM,CAACze,GAAYihB,EAAM,cAAc,CAAC,CAAC,GAEpE0hB,IAAqBtkC,EAAS,MAAM;AAAA,MACxCkuB,EAAM;AAAA,MACN;AAAA,QACE,oBAAoBA,EAAM,eAAe;AAAA,QACzC,CAAC,oBAAoBA,EAAM,UAAU,OAAO,GAAG,OAAOA,EAAM,cAAe;AAAA,QAC3E,CAAC,SAASA,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,QACxC,yBAAyBA,EAAM;AAAA,QAC/B,2BAA2BA,EAAM;AAAA,MACnC;AAAA,IAAA,CACD,GAEKqW,IAAwB1M,GAAuB,OAAO;AAAA,MAC1D,WAAW3J,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,IACf,EAAA,GAEIsW,IAAcxkC,EAAS,MAAM,CAACkuB,EAAM,WAAWqW,EAAsB,KAAK,CAAC,GAE3EE,IAA0B5M,GAAuB,OAAO;AAAA,MAC5D,WAAW3J,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,IACf,EAAA,GAEIwW,IAAgB1kC,EAAS,MAAM;AAAA,MACnCkuB,EAAM;AAAA,MACNuW,EAAwB;AAAA,MACxB;AAAA,QACE,CAAC,UAAUvW,EAAM,mBAAmB,EAAE,GAAGA,EAAM,wBAAwB;AAAA,MACzE;AAAA,IAAA,CACD,GAEKyW,IAAmB3kC,EAAS,OAAO;AAAA,MACvC,SAASqkC,EAAmB,QAAQnW,EAAM,qBAAqB;AAAA,MAC/D,OAAOA,EAAM;AAAA,IACb,EAAA,GAEI0W,IAA0B/M,GAAuB,OAAO;AAAA,MAC5D,WAAW3J,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,IACf,EAAA,GAEI2W,KAAgB7kC,EAAS,MAAM;AAAA,MACnCkuB,EAAM;AAAA,MACN0W,EAAwB;AAAA,MACxB;AAAA,QACE,CAAC,UAAU1W,EAAM,mBAAmB,EAAE,GAAGA,EAAM,wBAAwB;AAAA,MACzE;AAAA,IAAA,CACD,GAEK4W,IAAe9kC,EAAS,MAAM;AAAA,MAClCkuB,EAAM;AAAA,MACN;AAAA,QACG,mBAAoBA,EAAM;AAAA,MAC7B;AAAA,IAAA,CACD,GACK6W,IAAgB3kB,EAAM,MAAM8N,EAAM,kBAAkBA,EAAM,IAAI,GAC9D8W,IAAY5kB,EAAM,MAAM8N,EAAM,cAAcA,EAAM,IAAI,GAEtD0C,IAAwB,CAC5B/J,GACAgK,IAA8C,CAAA,MAE9C,IAAI/vB,GAAmB+lB,GAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,QAAQ9kB,EAAQ,SAAS;AAAA,MACzB,eAAe;AAAA,MACf,SAAS;AAAA,MACT,GAAG8uB;AAAA,MACH,aAAaxB,EAAW;AAAA,IAAA,CACzB;AAEG,IAAAxT,GAAAmT,GAAY,CAAC3N,GAAUgG,MAAa;AACxC,MAAIhG,MAAagG,MACbhG,MAAa,KACR+f,MAEAC;IACT,CACD;AAEK,UAAAA,IAAS,CAAC5R,IAAU,OAAO;AAC/B,UACGA,MAAY,cAAcvB,EAAM,qBAChCuB,MAAY,SAASvB,EAAM,cAC5B;AACA,QAAAC,EAAK,gBAAgB;AACrB;AAAA,MACF;AAEM,YAAAjrB,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAYnB,MAAY,IAAI,SAAAA,GAAQ;AAajF,UAXIA,MAAY,QACdtB,EAAKsB,GAASvsB,CAAK,GAEjBusB,MAAY,YACdtB,EAAKsB,GAASvsB,CAAK,GAEjBusB,MAAY,WACdtB,EAAKsB,GAASvsB,CAAK,GAErBirB,EAAK,QAAQjrB,CAAK,GAEdA,EAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB,GAChBa,EAAW,UAAOA,EAAW,QAAQ;AAC1C;AAAA,MACF;AACA,MAAIA,EAAW,UAAOA,EAAW,QAAQ;AAAA,IAAA,GAKrCoS,IAAS,MAAM;AACnB,UAAI5hB,EAAS;AAAO;AAEpB,YAAMtc,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,CAAK,GACdA,EAAM,kBAAkB;AAC1B,QAAI8rB,EAAW,UAAOA,EAAW,QAAQ,KACzCb,EAAK,gBAAgB;AACrB;AAAA,MACF;AACA,MAAKa,EAAW,UAAOA,EAAW,QAAQ;AAAA,IAAA,GAGtCiW,IAAgB,MAAM;AAC1B,MAAI/W,EAAM,cAAc,OACxBA,EAAM,oBAAoB,OACrB6V,EAAc,QAAQ,KACvB7V,EAAM,oBAAoB,UACvB+V,EAAiB,QAAQ,KAC1B/V,EAAM,oBAAoB,WACvB8V,EAAkB,QAAQ,KAC1BF,EAAW,QAAQ;AAAA,IAAA,GAGxBxC,IAAgB,MAAM;AACnB,MAAAF;IAAA,GAEHG,KAAe,MAAM;AACzB,MAAA/hB,EAAS,QAAQ,IACHylB,KACT9W,EAAA,SAASyC,EAAsB,OAAO,CAAC,GACxC1C,EAAM,SAAS,OAAM2V,EAAkB,QAAQ;AAAA,IAAA,GAE/CqB,IAAU,MAAM;AACpB,MAAA1lB,EAAS,QAAQ;AAAA,IAAA,GAEbgiB,KAAe,MAAM;AACpB,MAAArT,EAAA,UAAUyC,EAAsB,QAAQ,CAAC,GAC1C1C,EAAM,SAAS,OAAM2V,EAAkB,QAAQ;AAAA,IAAA,GAG/C,EAAC,gBAAAsB,IAAgB,kBAAAC,GAAgB,IAAIvK,GAAgBrb,CAAQ,GAE7D6lB,KAAiBrlC,EAAwB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKpD,WAAWwf,EAAS,QAChBikB,QAA6B2B,MAAA,gBAAAA,GAAkB,UAAS,OAAMD,MAAA,gBAAAA,GAAgB,UAAS,MACvF1B;AAAA,IACJ,EAAA;AAEe,IAAAlgB,GAAAxhB,GAAS,aAAa,MAAM;AAChC,MAAAitB,EAAA,QAAQqS,EAAO,IAAID,EAAO;AAAA,IAAA,CACtC;AAEK,UAAAkE,KAActlC,EAA0B,OAAO;AAAA,MACnD,QAAQ,MAAM;AACZ,QAAAqhC,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,OAAO,MAAM;AACX,QAAAA,EAAO,OAAO;AAAA,MAChB;AAAA,MACA,MAAMA;AAAA,MACN,IAAI,MAAM;AACR,QAAAA,EAAO,IAAI;AAAA,MACb;AAAA,MACA,SAASrS,EAAW;AAAA,IACpB,EAAA;AAEW,WAAA+B,EAAA;AAAA,MACX,MAAMsQ;AAAA,MACN,IAAIhS;AAAA,MACJ,MAAM+R;AAAA,IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEChdcmE,KAAA;AAAA,EACb,QAAQ5D,GAAK;AACL,UAAA6D,IAASpqB,GAab,CAAA,CAAE,GAEEqqB,IAAe,MAGhB;AACH,UAAIC,IAA+C,MAAM;AAAA,MAAA;AAQlD,aAAA;AAAA,QACL,OALc,IAAI,QAAwB,CAACjnB,MAAY;AACzC,UAAAinB,IAAAjnB;AAAA,QAAA,CACf;AAAA,QAIC,SAASinB;AAAA,MAAA;AAAA,IACX,GAGItW,IAAO,CAAC9R,MAGR;AACJ,YAAMqoB,IAAWF,KACX1D,IAAQ;AAEd,aAAAyD,EAAO,QAAQ;AAAA,QACb,GAAGA,EAAO;AAAA,QACVxlC,EAAS,OAAO;AAAA,UACd,WAAWE,GAAQod,EAAI,SAAS,KAAKsoB;AAAA,UACrC,OAAO,EAAC,GAAG1lC,GAAQod,EAAI,KAAK,GAAG,YAAY,IAAO,UAAAqoB,GAAU,OAAA5D,GAAO,aAAa,GAAI;AAAA,QAAA,EACpF;AAAA,MAAA,GAGG4D,EAAS;AAAA,IAAA,GAGZE,IAAU,CAACvoB,MAGX;AACJ,YAAMqoB,IAAWF,KACX1D,IAAQ;AAEd,aAAAyD,EAAO,QAAQ;AAAA,QACb,GAAGA,EAAO;AAAA,QACVxlC,EAAS,OAAO;AAAA,UACd,WAAWE,GAAQod,EAAI,SAAS,KAAKsoB;AAAA,UACrC,OAAO,EAAC,GAAG1lC,GAAQod,EAAI,KAAK,GAAG,YAAY,IAAM,UAAAqoB,GAAU,OAAA5D,GAAO,aAAa,GAAI;AAAA,QAAA,EACnF;AAAA,MAAA,GAGG4D,EAAS;AAAA,IAAA,GAGZxD,IAAS,CAACC,MAAiB;AACxB,MAAAoD,EAAA,QAAQA,EAAO,MAAM,OAAO,CAACpkC,MAAOA,EAAG,MAAM,MAAM,UAAUghC,CAAI;AAAA,IAAA;AAG1E,IAAAT,EAAI,QAAQnM,IAA0B;AAAA,MACpC,QAAAgQ;AAAA,MACA,QAAArD;AAAA,MACA,MAAA/S;AAAA,MACA,SAAAyW;AAAA,IAAA,CACD;AAAA,EACH;AACF,GC5FenL,KAAA;AAAA,EACb,QAAQiH,GAAK;AAIL,UAAAzG,IAA0C9f,GAAW,CAAA,CAAE,GAEvD+f,IAAa/a,EAAM,MAAM8a,EAAM,MAAM,MAAM,GAC3CU,IAAYxb,EAAM,MAAM8a,EAAM,MAAMA,EAAM,MAAM,SAAS,CAAC,CAAC,GAE3DF,IAAY,CAACJ,MAA+C;AAChE,MAAAM,EAAM,QAAQ,CAAC,GAAGA,EAAM,OAAON,CAAK;AAAA,IAAA,GAEhCK,IAAc,CAACL,MAA+C;AAC5D,MAAAM,EAAA,QAAQA,EAAM,MAAM,OAAO,CAAC9I,MAASA,EAAK,QAAQwI,EAAM,GAAG;AAAA,IAAA,GAM7DU,IAA6ClgB,GAAW,CAAA,CAAE,GAI1D2f,IAAe,CAACH,MAA+C;AACnE,MAAAU,EAAS,QAAQ,CAAC,GAAGA,EAAS,OAAOV,CAAK;AAAA,IAAA,GAEtCkL,IAAiB,CAAClL,MAA+C;AAC5D,MAAAU,EAAA,QAAQA,EAAS,MAAM,OAAO,CAAClJ,MAASA,EAAK,QAAQwI,EAAM,GAAG;AAAA,IAAA;AAGzE,IAAA+G,EAAI,QAAQlM,IAAuB;AAAA,MACjC,OAAAyF;AAAA,MACA,YAAAC;AAAA,MACA,WAAAS;AAAA,MACA,UAAAN;AAAA,MACA,WAAAN;AAAA,MACA,aAAAC;AAAA,MACA,cAAAF;AAAA,MACA,gBAAA+K;AAAA,IAAA,CACD;AAAA,EACH;AACF,GCzCe1J,KAAA;AAAA,EACb,QAAQuF,GAAKtgC,GAAyC;;AAI9C,UAAA0kC,IACJ,QAAO1kC,KAAA,gBAAAA,EAAS,QAAQ,YAAY,OAAa+c,IAAA/c,KAAA,gBAAAA,EAAS,QAAT,gBAAA+c,EAAc,eAAc,IAEzE4nB,IACJ,QAAO3kC,KAAA,gBAAAA,EAAS,QAAQ,YACpB,WACAgd,IAAAhd,KAAA,gBAAAA,EAAS,QAAT,gBAAAgd,EAAc,kBAAiB,QAE/B4nB,IAAQ9qB,EAAI4qB,CAAU,GACtBG,IAAS/qB,EAAI6qB,CAAa;AAEhC,IAAArE,EAAI,QAAQrM,IAAc,EAAC,OAAA2Q,GAAO,QAAAC,EAAO,CAAA;AAAA,EAC3C;AACF;;;;;;;;;;;;;;;ACVA,UAAMhY,IAAQY,GAWRE,IAAaC,kBAElB,GAEKI,IAAaC,GAAM,MAAMpB,EAAM,IAAI,WAAW,GAE9CuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,mBAAmBkuB,EAAM;AAAA,IACzB,EAAA;AAEF,WAAAyS,GAAQ5L,IAAuB;AAAA,MAC7B,UAAUpV,GAASqP,CAAU;AAAA,MAC7B,MAAM5O,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,aAAa,CAACiL,MAAe;AAC3B,QAAAnK,EAAW,QAAQmK;AAAA,MACrB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;ACZD,UAAMjL,IAAQY,GAURX,IAAOY,GA0BP6B,IAAwB,CAC5B/J,GACAgK,IAA8C,CAAA,MAE9C,IAAI/vB,GAAmB+lB,GAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,QAAQ9kB,EAAQ,SAAS;AAAA,MACzB,eAAe;AAAA,MACf,SAAS;AAAA,MACT,GAAG8uB;AAAA,MACH,aAAaxB,EAAW;AAAA,IAAA,CACzB,GAEGL,IAAaC,kBAElB,GAEKI,IAAaC,GAAM,MAAMpB,EAAM,IAAI,UAAU,GAE7CnsB,IAAUoZ,EAAwB,IAAI,GACtCgrB,IAAehrB,EAAI,EAAK,GACxBirB,IAAUjrB,EAAI6T,EAAW,KAAK,GAE9ByB,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,MAAQomC,EAAQ;AAAA,MAChB,mBAAmBlY,EAAM;AAAA,MACzB,YAAciY,EAAa;AAAA,MAC3B,SAAWC,EAAQ,SAAS,CAACpX,EAAW;AAAA,MACxC,uBAAuBd,EAAM;AAAA,IAC7B,EAAA,GAEIphB,IAAO,MAAM;AACjB,MAAAkiB,EAAW,QAAQ;AAAA,IAAA,GAEfI,IAAO,MAAM;AACjB,MAAAJ,EAAW,QAAQ;AAAA,IAAA,GAEfqX,IAAW,MAAM;AACV,MAAArX,EAAA,QAAQ,CAACA,EAAW;AAAA,IAAA,GAG3BsW,IAActlC,EAA0B,OAAO;AAAA,MACnD,QAAQqmC;AAAA,MACR,MAAAjX;AAAA,MACA,MAAAtiB;AAAA,MACA,IAAIuiB,EAAW;AAAA,MACf,SAASL,EAAW;AAAA,IACpB,EAAA;AAEE,QAAAsX,GACAC,GACAC,IAAiBtY,EAAM;AAE3B,UAAMuY,IAAS,MAAM;AACnB,YAAMvjC,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,CAAK,GACdA,EAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB;AACrB;AAAA,MACF;AAII,MAHJ,aAAaoY,CAAW,GACxB,aAAaD,CAAa,GAC1BF,EAAQ,QAAQ,IACZ,CAAAI,MACJL,EAAa,QAAQ,IACrBzkB,GAAS,MAAM;AACb,QAAI3f,EAAQ,UAAU,SAClBmsB,EAAM,aACRnsB,EAAQ,MAAM,MAAM,QAAQ,GAAGA,EAAQ,MAAM,WAAW,OAExDA,EAAQ,MAAM,MAAM,SAAS,GAAGA,EAAQ,MAAM,YAAY,MAE5DukC,IAAgB,WAAW,MAAM;AAG/B,UAFAH,EAAa,QAAQ,IACrBhY,EAAK,OAAO,GACRpsB,EAAQ,UAAU,SACdA,EAAA,MAAM,MAAM,SAAS,IACrBA,EAAA,MAAM,MAAM,QAAQ;AAAA,QAC3B,GAAAD,GAAmBC,EAAQ,KAAK,CAAC;AAAA,MAAA,CACrC;AAAA,IAAA,GAGGs/B,IAAS,MAAM;AACnB,YAAMn+B,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,CAAK,GACdA,EAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB;AACrB;AAAA,MACF;AAGA,UAFA,aAAamY,CAAa,GAC1B,aAAaC,CAAW,GACpBxkC,EAAQ,UAAU,MACtB;AAAA,YAAIykC,GAAgB;AAClB,UAAAJ,EAAQ,QAAQ;AAChB;AAAA,QACF;AACA,QAAID,EAAa,SACPpkC,EAAA,MAAM,MAAM,SAAS,IACrBA,EAAA,MAAM,MAAM,QAAQ,MAGxBmsB,EAAM,aACRnsB,EAAQ,MAAM,MAAM,QAAQ,GAAGA,EAAQ,MAAM,WAAW,OAExDA,EAAQ,MAAM,MAAM,SAAS,GAAGA,EAAQ,MAAM,YAAY,MAI9DA,EAAQ,MAAM,cACdokC,EAAa,QAAQ,IACrBzkB,GAAS,MAAM;AACb,UAAI3f,EAAQ,UAAU,SACdA,EAAA,MAAM,MAAM,SAAS,IACrBA,EAAA,MAAM,MAAM,QAAQ,IAC5BwkC,IAAc,WAAW,MAAM;AAC7B,YAAAH,EAAQ,QAAQ,IAChBD,EAAa,QAAQ,IACrBhY,EAAK,QAAQ;AAAA,UACZ,GAAArsB,GAAmBC,EAAQ,KAAK,CAAC;AAAA,QAAA,CACrC;AAAA;AAAA,IAAA;AAGH,WAAA8Z,GAAMmT,GAAY,MAAM;AACX,MAAAA,EAAA,QAAQyX,EAAO,IAAIpF,EAAO;AAAA,IAAA,CACtC,GAED5f,GAAU,MAAM;AACd,MAAI1f,EAAQ,UAAU,QAClB,CAACitB,EAAW,SAASd,EAAM,UAC7BxM,GAAS,MAAM;AACb,QAAAsN,EAAW,QAAQ;AAAA,MAAA,CACpB;AAAA,IACH,CACD,GAEDnT;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAACwY,MAAW;AACO,QAAAF,IAAAE;AAAA,MACnB;AAAA,IAAA,GAGExY,EAAM,YACSsY,IAAA,IACjBxX,EAAW,QAAQ,IACnBtN,GAAS,MAAM;AACb,MAAA8kB,IAAiBtY,EAAM;AAAA,IAAA,CACxB,IAGHrS;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAACwY,MAAW;AACO,QAAAF,IAAA,IACRE,IAAAtX,MAAStiB,KAClB4U,GAAS,MAAM;AACb,UAAA8kB,IAAiBtY,EAAM;AAAA,QAAA,CACxB;AAAA,MACH;AAAA,IAAA,GAGe3K,GAAAxhB,GAAS,aAAa,MAAM;AAChC,MAAAitB,EAAA,QAAQ,CAACA,EAAW;AAAA,IAAA,CAChC,GAEY+B,EAAA;AAAA,MACX,MAAAjkB;AAAA,MACA,OAAOohB,EAAM;AAAA,MACb,MAAAkB;AAAA,MACA,QAAQiX;AAAA,MACR,SAAS1mB,GAASymB,CAAO;AAAA,IAAA,CAC1B,GAEDzF,GAAQzL,IAAsB;AAAA,MAC5B,IAAI7F;AAAA,MACJ,MAAAviB;AAAA,MACA,MAAAsiB;AAAA,MACA,QAAQiX;AAAA,MACR,SAAS1mB,GAASymB,CAAO;AAAA,MACzB,OAAOhmB,EAAM,MAAM8N,EAAM,KAAK;AAAA,IAAA,CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxLD,UAAM,EAAC,OAAOyY,GAAc,GAAGC,MAAiBpH,GAAS,GAEnDtR,IAAQY,GAmBRX,IAAOY,GAgBPC,IAAaC,kBAAqC,GAElDkR,IAAaxI,GAAO5C,IAAuB,IAAI,GAE/C1F,IAAaC,GAAM,MAAMpB,EAAM,IAAI,gBAAgB;AAEzD,WAAAzM,GAAU,MAAM;AACd,MAAIuN,EAAW,SAAS,EAACmR,KAAA,QAAAA,EAAY,KAAK,WAC5BA,KAAA,QAAAA,EAAA,YAAY9Q,EAAW,SAEjC,CAACL,EAAW,UAASmR,KAAA,gBAAAA,EAAY,SAAS,WAAU9Q,EAAW,UACjEL,EAAW,QAAQ;AAAA,IACrB,CACD,GAEDnT;AAAA,MACE,MAAMskB,KAAA,gBAAAA,EAAY,SAAS;AAAA,MAC3B,MACGnR,EAAW,SAAQmR,KAAA,gBAAAA,EAAY,SAAS,WAAU9Q,EAAW,SAAS,EAAC8Q,KAAA,QAAAA,EAAY,KAAK;AAAA,IAAA,GAE7FtkB,GAAMmT,GAAY,MAAM;AACtB,MAAIA,EAAW,SAAS,EAACmR,KAAA,QAAAA,EAAY,KAAK,WAAmBA,KAAA,QAAAA,EAAA,YAAY9Q,EAAW;AAAA,IAAK,CAC1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFD,UAAMnB,IAAQY,GAcRX,IAAOY,GAMPnM,IAAQ2f,MAORxgC,IAAUoZ,EAAwB,IAAI,GAEtC6T,IAAaC,kBAA8C,GAE3D2R,IAAa1X,GAAgBnnB,CAAO,GAEpC8+B,IAAiB3e,GAAY,MAAMgM,EAAM,QAAQ,GAEjD2Y,IAAezmB,EAAM,MAAM,CAACze,GAAYihB,EAAM,KAAK,CAAC,GAEpDke,IAAkB1gB,EAAM,MAAO,OAAO4O,EAAW,SAAU,YAAY,IAAIA,EAAW,KAAM,GAE5FyB,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC9C,qBAAqBA,EAAM;AAAA,IAC3B,EAAA,GAEI4Y,IAAe9mC,EAAS,MAAM,CAACkuB,EAAM,YAAY,EAAC,oBAAoB2Y,EAAa,MAAM,CAAA,CAAC,GAE1F;AAAA,MACJ,UAAArnB;AAAA,MACA,OAAAC;AAAA,MACA,SAAA8Y;AAAA,MACA,QAAA7Y;AAAA,MACA,MAAAqE;AAAA,MACA,UAAAqU;AAAA,MACA,OAAO2I;AAAA,IAAA,IACL/I,GAAa8I,GAAiBD,GAAgB;AAAA,MAChD,WAAW,OAAO7R,EAAW,SAAU,YAAYd,EAAM;AAAA,IAAA,CAC1D,GAEK6Y,IAAiB3mB;AAAAA,MAAM,MAC3B,OAAO4O,EAAW,SAAU,YACxBA,EAAW,QACXxP,EAAS,SAAU0O,EAAM,eAAekK,EAAS;AAAA,IAAA,GAGjD4O,IAAahnC,EAAS,OAAO;AAAA,MACjC,SAAS6mC,EAAa,QAAQ3Y,EAAM,eAAe;AAAA,MACnD,OAAO4Y,EAAa;AAAA,IACpB,EAAA;AAEF,IAAAthB,GAAY,MAAM;AACX,MAAA2I,EAAA,mBAAmB4S,EAAY,KAAK;AAAA,IAAA,CAC1C;AAED,UAAMj0B,IAAO,MAAM;AACjB,MAAAqhB,EAAK,OAAO,GAER,OAAOa,EAAW,SAAU,YAC9BA,EAAW,QAAQ,MAEnBA,EAAW,QAAQ,GACdjL,MAGPoK,EAAK,QAAQ;AAAA,IAAA,GAGTgT,IAAe,MAAM;AACzB,MAAIjT,EAAM,gBACJzO;IAAA;AAGF,WAAA5D,GAAA+kB,GAAY,CAACvf,MAAa;AAC9B,UAAIA,GAAU;AACC,QAAA8f;AACb;AAAA,MACF;AACO,MAAAzhB;IAAA,CACR,GAED0R,GAAgBrN,CAAI,GAEPgN,EAAA;AAAA,MACX,OAAAtR;AAAA,MACA,SAAA8Y;AAAA,MACA,QAAA7Y;AAAA,MACA,MAAAqE;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBC/BKkjB,KAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AArExB,UAAM/Y,IAAQY,GAoDRX,IAAOY,GAKPnM,IAAQ2f,MAOR,EAAC,cAAA/K,GAAc,mBAAAC,EAAiB,IAAIL,GAAelJ,CAAK,GAExDiS,IAAaxI,GAAO7C,IAAyB,IAAI,GAEjDoS,IAAQ,CAAC,MAAM,MAAM,IAAI,GAEzBC,IAAwBF,KAAkB,KAE1CG,IAAiBhnB,EAAM,MAAM,CAACze,GAAYihB,EAAM,OAAO,CAAC,GACxDykB,IAAejnB,EAAM,MAAM,CAACze,GAAYihB,EAAM,KAAK,CAAC,GAEpD0kB,IAAYlnB,EAAM,MAAM,CAAC,CAAC8N,EAAM,SAASA,EAAM,UAAU,MAAMmZ,EAAa,KAAK,GACjFE,IAAiBnnB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,KAAK,UAASjS,EAAM,MAAM,GAEnEsZ,IAAmB3L,GAAoB,MAAM3N,EAAM,IAAI,GACvDuZ,IAAqB5L,GAAoB,MAAMsE,KAAA,gBAAAA,EAAY,KAAK,KAAK,GACrEuH,IAAe1nC,EAAS,MAAMynC,EAAmB,SAASD,EAAiB,KAAK,GAEhFvE,IAAkB7iB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,QAAQ,UAASjS,EAAM,OAAO,GACxEyZ,IAAkBvnB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,QAAQ,UAASjS,EAAM,OAAO,GACxE0Z,IAAqBxnB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,WAAW,UAASjS,EAAM,UAAU,GACjF2Z,IAAwBznB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,cAAc,UAASjS,EAAM,aAAa,GAC1F4Z,IAAuB1nB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,aAAa,UAASjS,EAAM,YAAY,GACvF6Z,IAAqB3nB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,WAAW,UAASjS,EAAM,UAAU,GAEjF8U,IAAuBhH,GAAwB,OAAO;AAAA,MAC1D,SAAS2L,EAAgB;AAAA,MACzB,YAAYC,EAAmB;AAAA,MAC/B,eAAeC,EAAsB;AAAA,MACrC,cAAcC,EAAqB;AAAA,MACnC,YAAYC,EAAmB;AAAA,IAC/B,EAAA,GACIC,IAAenQ,GAAuB,OAAO;AAAA,MACjD,SAAS3J,EAAM;AAAA,MACf,WAAWA,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,IACnB,EAAA,GAEI+Z,IAAY7nB,EAAM,MAAO8N,EAAM,UAAU,KAAO,KAAKA,EAAM,KAAM,GAEjEga,IAAsB9nB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,YAAY,UAASjS,EAAM,WAAW,GACpFia,IAAoB/nB,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,UAAU,UAASjS,EAAM,SAAS,GAE9EkS,IAA4BvI,GAAuB,OAAO;AAAA,MAC9D,WAAWsQ,EAAkB;AAAA,MAC7B,aAAaD,EAAoB;AAAA,MACjC,SAASjF,EAAgB;AAAA,IACzB,EAAA,GAEIxS,KAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA;AAAA,MAE1BmH,EAAe,UAAU,KAAO,SAAYvE,EAAqB;AAAA,MACjE;AAAA,QACE,CAAC,YAAY9U,EAAM,IAAI,EAAE,GACvB,CAAC,CAACA,EAAM,QAAQgZ,EAAM,QAAQM,EAAiB,KAAe,MAAM;AAAA,QACtE,CAAC,OAAOvE,EAAgB,KAAK,EAAE,GAAG/U,EAAM,SAAS+U,EAAgB,UAAU,OAAO;AAAA,QAClF,OAAS,CAAC/U,EAAM,UAAU+U,EAAgB,UAAU,QAAQmE,EAAe;AAAA,QAC3E,KAAOlZ,EAAM;AAAA;AAAA,QAEb,aAAaqZ,EAAe,UAAU;AAAA,MACxC;AAAA,IAAA,CACD,GAEKa,IAAapoC,EAAqB,MAAM;AACtC,YAAAkK,IAASgkB,EAAM,eAAe;AAK7B,aAAA;AAAA,QACL,WAJAgZ,EAAM,QAASQ,EAAa,SAAgC,IAAI,MAAM,KAClE,QAAQA,EAAa,KAAK,MAAMP,CAAqB,MACrD,OAEkB;AAAA,QACtB,KAAKjZ,EAAM,WAAWhkB,IAAS;AAAA,QAC/B,QAAQgkB,EAAM,WAAW,KAAKhkB;AAAA,QAC9B,MAAMgkB,EAAM,aAAahkB,IAAS;AAAA,QAClC,OAAOgkB,EAAM,aAAa,KAAKhkB;AAAA,MAAA;AAAA,IACjC,CACD,GAEKm+B,IAAgBroC,EAAqB,MAAM;AAC/C,YAAMsoC,IACJpB,EAAM,QAASQ,EAAa,SAAgC,IAAI,MAAM,KAClE,QAAQA,EAAa,KAAK,MAAMT,EAAe,MAC/C;AACN,aAAOqB,IAAW,EAAC,UAAAA,EAAQ,IAAI;IAAC,CACjC,GAEKC,IAAcvoC,EAAS,MAAM;;AAC3B,YAAAwoC,MAAepqB,IAAA+hB,KAAA,gBAAAA,EAAY,iBAAZ,gBAAA/hB,EAA0B,UAAS,GAElDne,KACJynC,EAAa,SAASc,IAAe,QAAQd,EAAa,KAAK,OAAOc,CAAY,MAAM;AAC1F,aAAOvoC,KAAQ,EAAC,YAAYA,IAAO,aAAaA,OAAS;IAAC,CAC3D,GAEK+gC,IAAc5gB,EAAM,MAAOoX,EAAa,QAAQyJ,KAAQ/S,EAAM,SAAS,WAAW,MAAO,GAEzFpY,IAAgB9V,EAAwB,OAAO;AAAA,MACnD,GAAGuoC,EAAY;AAAA,MACf,OAAOb,EAAa,SAAS;AAAA,MAC7B,QAAQA,EAAa,SAAS;AAAA,IAC9B,EAAA,GAEIxH,IAAU,CAACx+B,MAAkC;AACjD,MAAI,CAACwsB,EAAM,aAAasJ,EAAa,SAAStJ,EAAM,WAASC,EAAK,SAASzsB,CAAC;AAAA,IAAA,GAGxE+mC,IAAa,CAAC/mC,MAAuB;AACzC,MAAAysB,EAAK,aAAazsB,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrMrB,UAAMwsB,IAAQY,GAwBR4Z,IAAgBxmB,GAAY,MAAMgM,EAAM,OAAO,GAE/CwZ,IAAe7L,GAAoB,MAAM3N,EAAM,IAAI,GACnDsa,IAAepoB,EAAM,MAAM,KAAK,IAAI,KAAK,IAAIsoB,EAAc,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAE5EC,IAAe3oC,EAAqB,MAAM;AACxC,YAAAC,IAAQynC,EAAa,QAAQ,QAAQA,EAAa,KAAK,MAAMc,EAAa,KAAK,MAAM;AAC3F,aAAOvoC,IAAQ,EAAC,aAAaA,GAAO,cAAcA,MAAS;IAAC,CAC7D;AAED,WAAA0gC,GAAQ7L,IAAyB;AAAA,MAC/B,cAAA0T;AAAA,MACA,MAAMpoB,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,QAAQ9N,EAAM,MAAM8N,EAAM,MAAM;AAAA,MAChC,SAAS9N,EAAM,MAAM8N,EAAM,OAAO;AAAA,MAClC,YAAY9N,EAAM,MAAM8N,EAAM,UAAU;AAAA,MACxC,eAAe9N,EAAM,MAAM8N,EAAM,aAAa;AAAA,MAC9C,cAAc9N,EAAM,MAAM8N,EAAM,YAAY;AAAA,MAC5C,YAAY9N,EAAM,MAAM8N,EAAM,UAAU;AAAA,MACxC,SAAS9N,EAAM,MAAM8N,EAAM,OAAO;AAAA,MAClC,WAAW9N,EAAM,MAAM8N,EAAM,SAAS;AAAA,MACtC,aAAa9N,EAAM,MAAM8N,EAAM,WAAW;AAAA,IAAA,CAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CD,UAAMA,IAAQY,GAmCRsR,IAA4BvI,GAAuB3J,CAAK,GAExD,EAAC,cAAAsJ,GAAc,mBAAAC,MAAqBL,GAAelJ,GAAO;AAAA,MAC9D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,GAEK8S,IAAc5gB,EAAM,MAAOoX,EAAa,QAAQyJ,KAAQ/S,EAAM,GAAI,GAElEuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA,MAC1B;AAAA,QACE,QAAUlS,EAAM;AAAA,QAChB,UAAYA,EAAM;AAAA,QAClB,gBAAgBA,EAAM;AAAA,QACtB,sDAAsDA,EAAM,iBAAiBA,EAAM;AAAA,QACnF,0CAA0CA,EAAM;AAAA,QAChD,wBAAwBsJ,EAAa;AAAA,MACvC;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DD,UAAMtJ,IAAQY,GA6BRX,IAAOY,GAIP0B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,QAAQkuB,EAAM;AAAA,IACd,EAAA,GAEI8S,IAAc5gB,EAAM,MAAO8N,EAAM,SAAS,SAAS+S,EAAM,GAEzD2H,IAAsBxoB,EAAM,MAAO8N,EAAM,SAASA,EAAM,cAAc,MAAU,GAEhFuJ,IAAoBz3B;AAAA,MAAS,MACjCghC,EAAY,UAAU,SAClB9K,GAAKhI,GAAO;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAA,IACD,CAAC;AAAA,IAAA,GAGDgS,IAAU,CAACx+B,MAAkC;AAC7C,UAAAwsB,EAAM,YAAYA,EAAM,QAAQ;AAClC,QAAAxsB,EAAE,eAAe,GACjBA,EAAE,yBAAyB;AAC3B;AAAA,MACF;AACA,MAAKwsB,EAAM,YAAUC,EAAK,SAASzsB,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;AChFtC,UAAMwsB,IAAQY,GAWR+Z,IAAanR,MAEboR,IAAwB9oC,EAA2B,MAAM;;AAC7D,YAAM+oC,IAAa7a,EAAM,WAAS9P,IAAAyqB,EAAW,UAAX,gBAAAzqB,EAAkB,UAAS;AAC7D,UAAI4qB,IAAgB;AAcb,aAbOD,EAAW,IAAI,CAAC3W,GAAM6W,OAC9B,OAAO7W,KAAS,aACXA,IAAA,EAAC,MAAMA,KACV6W,IAAMF,EAAW,SAAS,MAAG3W,EAAK,OAAO,OAE3CA,EAAK,WAAwB4W,IAAA,KAG7B,CAAC5W,EAAK,UAAU,CAAC4W,MACd5W,EAAA,SAAS6W,IAAM,MAAMF,EAAW,SAEhC3W,EACR;AAAA,IACM,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCD,UAAMlE,IAAQY,GAYR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,aAAa,CAACkuB,EAAM;AAAA,MACpB,CAAC,aAAaA,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,MAC5C,sBAAsBA,EAAM;AAAA,IAC5B,EAAA;;;;;;;;;;;;;;;;;;;;AChBF,UAAMA,IAAQY,GAWR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,2BAA2BkuB,EAAM;AAAA,IACjC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLF,UAAMA,IAAQY,GAyBRoa,IAAehnB,GAAY,MAAMgM,EAAM,UAAU,GAAG,GACpDib,IAAcjnB,GAAY,MAAMgM,EAAM,SAAS,GAAG,GAElD8U,IAAuBhH,GAAwB,OAAO;AAAA,MAC1D,SAAS9N,EAAM;AAAA,MACf,YAAYA,EAAM;AAAA,MAClB,eAAeA,EAAM;AAAA,MACrB,cAAcA,EAAM;AAAA,MACpB,YAAYA,EAAM;AAAA,IAClB,EAAA,GAEIkb,IAAiBppC;AAAA,MAAS,MAC9B,OAAOkuB,EAAM,UAAW,WACpBA,EAAM,OACH,MAAM,GAAG,EACT,OAAO,CAACxmB,MAAMA,CAAC,EACf,KAAK,GAAG,IACX,MAAM,QAAQwmB,EAAM,MAAM,IACxBA,EAAM,OAAO,OAAO,CAACxmB,MAAMA,CAAC,EAAE,KAAK,GAAG,IACtC;AAAA,IAAA,GAGF2hC,IAAgBrpC;AAAA,MAAS,MAC7B,OAAOkuB,EAAM,SAAU,WACnBA,EAAM,MACH,MAAM,GAAG,EACT,OAAO,CAACxmB,MAAMA,CAAC,EACf,KAAK,GAAG,IACX,MAAM,QAAQwmB,EAAM,KAAK,IACvBA,EAAM,MAAM,OAAO,CAACxmB,MAAMA,CAAC,EAAE,KAAK,GAAG,IACrC;AAAA,IAAA,GAGF4hC,IAAqBtpC,EAAkE,MAAM;AACjG,YAAMqO,IAAQ,OAAO,MAAM86B,EAAY,KAAK,IAAI,SAAYA,EAAY,OAClE76B,IAAS,OAAO,MAAM46B,EAAa,KAAK,IAAI,SAAYA,EAAa;AAC3E,aAAIhb,EAAM,QACJ7f,MAAU,UAAaC,MAAW,SAC7B,EAAC,QAAQD,GAAO,OAAAA,MAErBA,MAAU,UAAaC,MAAW,SAC7B,EAAC,QAAAA,GAAQ,OAAOA,MAElB,EAAC,QAAQ,GAAG,OAAO,EAAC,IAEtB;AAAA,QACL,OAAAD;AAAA,QACA,QAAAC;AAAA,MAAA;AAAA,IACF,CACD,GAEKi7B,IAAsBnpB;AAAAA,MAAM,MAChCopB,EAAgBF,EAAmB,MAAM,OAAOA,EAAmB,MAAM,QAAQpb,EAAM,UAAU;AAAA,IAAA,GAG7F/oB,IAAYib;AAAAA,MAAM,MACtB8N,EAAM,QAAQ,gBAAgBA,EAAM,MAAM,cAAcA,EAAM,SAAS,YAAY;AAAA,IAAA,GAG/EuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCgjC,EAAqB;AAAA,MACrB;AAAA,QACE,iBAAiB9U,EAAM;AAAA,QACvB,aAAaA,EAAM,SAASA,EAAM;AAAA,QAClC,SAASA,EAAM;AAAA,QACf,CAAC,GAAG/oB,EAAU,KAAK,EAAE,GAAGA,EAAU,UAAU;AAAA,QAC5C,WAAW+oB,EAAM,SAASA,EAAM;AAAA,MAClC;AAAA,IAAA,CACD,GAEKsb,IAAkB,CAACn7B,GAA2BC,GAA4Bm7B,MAC9E,oCAAoC,mBAAmB,eAAep7B,CAAK,aAAaC,CAAM,qDAAqDD,CAAK,IAAIC,CAAM;AAAA,mDACjHm7B,CAAK;AAAA,WAC7C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1GZ,UAAMvb,IAAQY,GA2BR4a,IAAYtpB;AAAAA,MAAM,MACtB8N,EAAM,MACF,iBACAA,EAAM,MACJ,mBACAA,EAAM,SACJ,oBACAA,EAAM,QACJ,kBACA;AAAA,IAAA,GAGNyb,IAAmB3pC,EAAS,MAAM+1B,GAAK7H,GAAO,CAAC,UAAU,OAAO,OAAO,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;AClCtF,UAAMA,IAAQY,GAiBRsR,IAA4BvI,GAAuB3J,CAAK,GAExDuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA,MAC1B;AAAA,QACE,CAAC,UAAUlS,EAAM,aAAa,EAAE,GAAGA,EAAM,kBAAkB;AAAA,MAC7D;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BD,UAAMA,IAAQY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEd,UAAMZ,IAAQY,GAWR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,QAAQkuB,EAAM,WAAW,EAAE,GAAGA,EAAM,gBAAgB;AAAA,IACrD,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOF,UAAMA,IAAQY,GAgBRlM,IAAQ2f,MASRnC,IAA4BvI,GAAuB3J,CAAK,GAExD0b,IAAexpB,EAAM,MAAM,CAACze,GAAYihB,EAAM,KAAK,CAAC,GACpDinB,IAAkBzpB,EAAM,MAAM,CAACze,GAAYihB,EAAM,QAAQ,CAAC,GAE1D6N,IAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA,MAC1B;AAAA,QACE,oBAAoBlS,EAAM;AAAA,MAC5B;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD,UAAMA,IAAQY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC4Dd,UAAMZ,IAAQY,GA+CRlM,IAAQ2f,MAWRuH,IAAgB1pB,EAAM,MAAM,CAACze,GAAYihB,EAAM,MAAM,CAAC,GACtDmnB,IAAgB3pB,EAAM,MAAM,CAACze,GAAYihB,EAAM,MAAM,CAAC,GAEtDwd,IAA4BvI,GAAuB3J,CAAK,GAExDuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCogC,EAA0B;AAAA,MAC1B;AAAA,QACE,CAAC,QAAQlS,EAAM,KAAK,EAAE,GAAGA,EAAM,UAAU;AAAA,QACzC,CAAC,UAAUA,EAAM,aAAa,EAAE,GAAGA,EAAM,kBAAkB;AAAA,QAC3D,YAAYA,EAAM;AAAA,QAClB,oBAAoBA,EAAM;AAAA,MAC5B;AAAA,IAAA,CACD,GAEK8b,IAAUhqC,EAAS,OAAO;AAAA,MAC9B,KAAKkuB,EAAM;AAAA,MACX,KAAKA,EAAM;AAAA,MACX,QAAQA,EAAM;AAAA,MACd,OAAOA,EAAM;AAAA,MACb,QAAQA,EAAM;AAAA,MACd,KAAKA,EAAM;AAAA,MACX,OAAOA,EAAM;AAAA,MACb,KAAKA,EAAM;AAAA,IACX,EAAA,GAEI+b,IAAc1nB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClJpB,UAAM2L,IAAQY,GAWRob,IAAgB9pB;AAAAA,MAAM,MAC1B8N,EAAM,OAAO,cAAcA,EAAM,UAAU,iBAAiB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoC9D,UAAMA,IAAQY,GAsBRX,IAAOY,GAKPnM,IAAQ2f,MAKRlT,IAAaC,GAAM,MAAMpB,EAAM,IAAI,UAAU,GAE7Cc,IAAaC,GAAmBH,GAAA,YAAa,GAE7Cqb,IAAuBjoB,GAAY,MAAMgM,EAAM,cAAc,GAC7D2S,IAAiB3e,GAAY,MAAMgM,EAAM,QAAQ,GAEjDkc,IAAkBjvB,EAAI,EAAK,GAC3BkvB,IAAclvB,EAAI,EAAK,GACvBla,IAAYka,EAAI,EAAI,GACpBmvB,IAAgBnvB,EAAwB,IAAI,GAC5CpZ,IAAUoZ,EAAwB,IAAI,GACtCovB,IAAqBpvB,EAAI6T,EAAW,KAAK,GAEzC4R,IAAa1X,GAAgBnnB,CAAO,GAOpCyoC,IAAepqB;AAAAA,MACnB,MACE,+BAAgCnf,EAAU,QAAiB,SAAT,MAAe,kBAC9DA,EAAU,QAAkB,QAAV,OACrB;AAAA,IAAA,GAEEwpC,IAAerqB;AAAAA,MACnB,MAAM,sCAAsCnf,EAAU,QAAQ,UAAU,KAAK;AAAA,IAAA,GAGzE,EAAC,OAAAwe,GAAO,QAAAC,EAAA,IAAUiC;AAAA,MACtB,MAAM;AACE,QAAAuM,EAAA,cAAcwc,EAAK,IAAIC,EAAK;AAAA,MACpC;AAAA,MACA9J;AAAA,MACA,EAAC,WAAW3S,EAAM,SAAS,WAAU;AAAA,IAAA,GAGjC0c,IAAWxqB;AAAAA,MACf,MAAO8N,EAAM,SAAS,MAAQmc,EAAY,UAAU,MAASnc,EAAM,SAAS;AAAA,IAAA,GAExE2c,IAAS7qC,EAAS,MAAMizB,GAAgBrQ,EAAM,SAAS,gBAAgB,CAAC,GACxE6N,IAAkBzwB,EAAS,OAAO,EAAC,iBAAiBkuB,EAAM,KAAM,EAAA,GAUhE4c,IAAuB,CAAC5nC;;AAC5B,iBAAInC,GAAgBmC,GAAO;AAAA,QACzB,aAAamsB,EAAW;AAAA,QACxB,YAAY;AAAA,QACZ,QAAQttB,EAAQ;AAAA,QAChB,WAAWd,EAAU,QAAQ,UAAU;AAAA,QACvC,MAAMspC,EAAmB;AAAA,QACzB,IAAIvb,EAAW;AAAA,QACf,iBAAe5Q,IAAAksB,EAAc,UAAd,gBAAAlsB,EAAqB,SAAS4Q,EAAW,WAAU;AAAA,MAAA,CACnE;AAAA,OAEG+b,IAAY,CAAC9qC,MAAwB;AACzC,UAAImqC,EAAgB,UAAU,IAS1B;AAAA,YAPAlc,EAAM,SAAS,OACjBmc,EAAY,QAAQ,KAElBO,EAAS,UAAU,MACdlrB,KAETze,EAAU,QAAQ,EAAAhB,IAAQ+uB,EAAW,QACjC/uB,KAAS4qC,EAAO,MAAM,QAAQ;AAChC,cAAI3c,EAAM;AAAQ;AAClB,UAAAc,EAAW,QAAQ;AACnB;AAAA,QACF;AACA,YAAI/uB,IAAQ,GAAG;AACb,cAAIiuB,EAAM;AAAQ;AACP,UAAAc,EAAA,QAAQ6b,EAAO,MAAM,SAAS;AACzC;AAAA,QACF;AACA,QAAAN,EAAmB,QAAQvb,EAAW,OACtCA,EAAW,QAAQ/uB;AAAA;AAAA,IAAA,GAGfyqC,IAAO,MAAY;AACb,MAAAK,EAAA/b,EAAW,QAAQ,CAAC;AAAA,IAAA,GAE1B2b,IAAO,MAAY;AACb,MAAAI,EAAA/b,EAAW,QAAQ,CAAC;AAAA,IAAA,GAG1Bgc,IAAY,CAAC/iC,MAAmB;AACpC,MAAIimB,EAAM,aAAa,MACpBjmB;IAAA,GAGCk5B,KAAe,MAAM;AACzB,MAAIjT,EAAM,gBACJzO;IAAA,GAEFwrB,IAAe,MAAM;AACzB,MAAKL,EAAS,SACPlrB;IAAA,GAGH,EAAC,SAAAwrB,EAAA,IAAWxe,GAAS3qB,GAAS;AAAA,MAClC,SAAS;AAAA,MACT,eAAe;AACb,QAAImsB,EAAM,YAAY,MAChBzO;MACR;AAAA,MACA,aAAa;AACX,YAAIyO,EAAM,YAAY;AAAM;AAC5B,cAAMid,IAAe,MAAM;AACzB,UAAIP,EAAS,UAAU,MAChBlrB;QAAA;AAEL,YAAAwrB,EAAQ,SAASf,EAAqB,OAAO;AAC1C,UAAAQ,KACQQ;AACb;AAAA,QACF;AACA,QAAID,EAAQ,SAAS,CAACf,EAAqB,UACpCO,KACQS;MAEjB;AAAA,IAAA,CACD,GAEKC,IAAgB,MAAM;AACrB,MAAAjd,EAAA,SAAS2c,EAAqB,OAAO,CAAC,GAC3CV,EAAgB,QAAQ;AAAA,IAAA,GAEpB5I,IAAe,MAAM;AACpB,MAAArT,EAAA,QAAQ2c,EAAqB,MAAM,CAAC,GACzCV,EAAgB,QAAQ;AAAA,IAAA,GAKpB7I,IAAe,CAACngC,MAA0B;AAC1C,MAAA4tB,EAAW,UAAU,KACpB5tB,EAAA,UAAU,IAAI,eAAe;AAAA,IAClC;AAGF,WAAAsjB;AAAA,MACE;AAAA,MACA,MAAM;AACJ,QAAAsmB,EAAUN,CAAI;AAAA,MAChB;AAAA,MACA,EAAC,QAAQ3oC,EAAO;AAAA,IAAA,GAElB2iB;AAAA,MACE;AAAA,MACA,MAAM;AACJ,QAAAsmB,EAAUL,CAAI;AAAA,MAChB;AAAA,MACA,EAAC,QAAQ5oC,EAAO;AAAA,IAAA,GAGlB8Z;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAmc,EAAY,QAAQ;AAAA,MACtB;AAAA,IAAA,GAGIxuB,GAAA+kB,GAAY,CAACvf,MAAa;AAC9B,UAAIA,GAAU;AACC,QAAA8f;AACb;AAAA,MACF;AACa,MAAA8J;IAAA,CACd,GAEYla,EAAA;AAAA,MACX,MAAA4Z;AAAA,MACA,OAAAlrB;AAAA,MACA,MAAAirB;AAAA,MACA,QAAAhrB;AAAA,IAAA,CACD,GAEDihB,GAAQjM,IAAsB;AAAA,MAC5B,YAAYtU,EAAM,MAAM8N,EAAM,UAAU;AAAA,MACxC,OAAO9N,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACjC,QAAQ9N,EAAM,MAAM8N,EAAM,SAAS;AAAA,IAAA,CACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxOD,UAAMA,IAAQY,GAqBRlM,IAAQ2f,MAWRpC,IAAaxI,GAAOjD,IAAsB,IAAI,GAE9C2W,IAAUjrB,EAAM,MAAM8N,EAAM,QAAQA,EAAM,YAAY,CAACvsB,GAAYihB,EAAM,IAAI,CAAC,GAC9E0oB,IAAalrB,EAAM,MAAM8N,EAAM,WAAWA,EAAM,eAAe,CAACvsB,GAAYihB,EAAM,OAAO,CAAC,GAC1F2oB,IAAanrB,EAAM,MAAMirB,EAAQ,SAASC,EAAW,SAAS,CAAC3pC,GAAYihB,EAAM,OAAO,CAAC,GAEzF9M,IAAgB9V,EAAwB,OAAO;AAAA,MACnD,YAAY,GACVkuB,EAAM,eAAciS,KAAA,gBAAAA,EAAY,WAAW,UAAS,oBACtD;AAAA,IACA,EAAA,GAEIqL,IAAyBxrC,EAAS,OAAO;AAAA,MAC7C,UAAUkuB,EAAM,qBAAqB;AAAA,MACrC,CAAC,KAAKA,EAAM,gBAAgB,QAAQ,GAAGA,EAAM,qBAAqB;AAAA,IAClE,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrFIud,KAAgBjZ,GAAmB,IAAI,IAAI,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,GAAM,CAAA,GAC5FkZ,KAAmBlZ,GAAmB,UAAU,CAAC,EAAE,GAAG,EAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAK,CAAA,GAC7FmZ,KAAkBnZ,GAAmB,SAAS,CAAC,EAAE,GAAG,EAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAK,CAAA,GAEjGoZ,KAAejpB,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EAGP,OAAO;AAAA,IACL,KAAK,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA;AAAA,IACnC,MAAM,EAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAI;AAAA;AAAA,IAC5C,GAAG8oB;AAAA,IACH,QAAQ,EAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAI;AAAA,IAC9C,GAAGC;AAAA,IACH,OAAO,EAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAI;AAAA,IAC7C,GAAGC;AAAA,IACH,WAAW,EAAC,MAAM,QAAgD,SAAS,KAAI;AAAA,IAC/E,KAAK,EAAC,MAAM,QAAQ,SAAS,MAAK;AAAA,EACpC;AAAA,EACA,MAAMzd,GAAO;AACX,UAAM2d,IAAa;AAAA,MACjB,EAAC,SAASJ,IAAe,YAAY,QAAQ,aAAa,MAAK;AAAA,MAC/D,EAAC,SAASC,IAAkB,YAAY,SAAQ;AAAA,MAChD,EAAC,SAASC,IAAiB,YAAY,QAAO;AAAA,IAAA,GAG1CG,IAAY9rC;AAAA,MAAS,MACzB6rC,EAAW,QAAQ,CAACzqC,MAAOu3B,GAAWzK,GAAO9sB,EAAG,SAASA,EAAG,YAAYA,EAAG,WAAW,CAAC;AAAA,IAAA;AAclF,WAAA;AAAA,MACL,iBAZsBpB,EAAS,MAAM;AAAA,QACrC8rC,EAAU;AAAA,QACV;AAAA,UACE,KAAK5d,EAAM,OAAQ,CAAC4d,EAAU,MAAM,KAAK,CAACpqC,MAAM,QAAQ,KAAKA,CAAC,CAAC,KAAK,CAACwsB,EAAM;AAAA,UAC3E,CAAC,OAAOA,EAAM,IAAI,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,UAC/B,CAAC,UAAUA,EAAM,MAAM,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,UACpC,CAAC,SAASA,EAAM,KAAK,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,UAClC,CAAC,cAAcA,EAAM,SAAS,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,QAC7C;AAAA,MAAA,CACD;AAAA,IAGC;AAAA,EAEJ;AACF,CAAC;AAxD4B,SAAA6d,GAD7BC,GAC+Bvb,GAAewb,GAAAC,GAAAC,GAAAC,GAAA;;IAD9C,OAEYC,EAAAL,EAAA,eAAA;AAAA,EAAA,GAAA;AAAA;MAFZM,EAAAN,EAAA,QAAA,SAAA;AAAA,IAAA,CAAA;AAAA;;;;;;;;;;;;ACWA,UAAM9d,IAAQY,GAORyd,IAAkBrqB,GAAY,MAAMgM,EAAM,WAAW,KAAK,EAAC,QAAQ,WAAA,CAAW,GAC9Ese,IAAkBtqB,GAAY,MAAMgM,EAAM,WAAW,KAAK,EAAC,QAAQ,WAAA,CAAW,GAE9EuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,WAAWkuB,EAAM,UAAU;AAAA,MAC1B,mBAAoBA,EAAM,UAAU;AAAA,MACrC,CAAC,aAAaA,EAAM,KAAK,EAAE,GAAG,OAAOA,EAAM,SAAU;AAAA,MACrD,CAAC,MAAMqe,EAAgB,KAAK,EAAE,GAAG,CAAC,OAAO,MAAMA,EAAgB,KAAK;AAAA,MACpE,CAAC,MAAMC,EAAgB,KAAK,EAAE,GAAG,CAAC,OAAO,MAAMA,EAAgB,KAAK;AAAA,IACpE,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoDF,UAAMte,IAAQY,GAuCRX,IAAOY,GAoBPM,IAAaC,GAAM,MAAMpB,EAAM,IAAI,UAAU,GAE7Cc,IAAaC,kBAAqC,GAElDwd,IAAiBrsB;AAAAA,MAAM,MAC3B,OAAO8N,EAAM,UAAW,YAAY,OAAOA,EAAM,UAAW,WAAWA,EAAM,SAAS;AAAA,IAAA,GAElFwe,IAAiBxqB,GAAYuqB,CAAc,GAE3C7lC,IAAWuU,EAAwB,IAAI,GACvCwxB,IAASxxB,EAAwB,IAAI,GACrCyxB,IAAczxB,EAAwB,IAAI,GAC1CqD,IAAUrD,EAAwB,IAAI,GAEtC1S,IAAWzI;AAAA,MAA+B,MAC9CkuB,EAAM,aAAa,cAAcA,EAAM,aAAa,aAAa,SAAYA,EAAM;AAAA,IAAA,GAE/ExlB,IAAe1I;AAAA,MAAmC,MACtDkuB,EAAM,aAAa,cAAcA,EAAM,aAAa,aAAaA,EAAM,WAAW;AAAA,IAAA,GAG9E2e,IAAqBzsB,EAAM,MAAQ8N,EAAM,QAA4Bye,EAAO,QAA3BC,EAAY,KAAqB;AAExF,IAAAloB;AAAA,MACE;AAAA,MACA,MAAM;AACO,QAAAsK,EAAA,QAAQ,CAACA,EAAW;AAAA,MACjC;AAAA,MACA,EAAC,QAAQ6d,EAAkB;AAAA,IAAA,GAE7BnoB;AAAA,MACE;AAAA,MACA,MAAM;AACO,QAAAsK,EAAA,QAAQ,CAACA,EAAW;AAAA,MACjC;AAAA,MACA,EAAC,QAAQpoB,EAAQ;AAAA,IAAA;AAGb,UAAAkmC,IAAS,CAACprC,GAAoBsC,MAAc;;AAEhD,WADIqa,IAAAzX,EAAS,UAAT,QAAAyX,EAAgB,UAAUD,IAAA1c,EAAE,WAAF,gBAAA0c,EAA0B,QAAQ,YAC5D,qCAAqC,MAAMgQ,IAAA1sB,EAAE,WAAF,gBAAA0sB,EAA0B,OAAO;AAAG;AAE/E,UADJ1sB,EAAE,eAAe,GACb,CAACstB,EAAW,OAAO;AAChB,gBACLtN,GAAS,MAAMorB,EAAOprC,GAAGsC,CAAC,CAAC;AAC3B;AAAA,MACF;AACA,YAAMmC,KAAO+3B,IAAAt3B,EAAS,UAAT,gBAAAs3B,EAAgB,iBAAiB;AAC9C,UAAK/3B;AACL,aAAIo4B,IAAA33B,EAAS,UAAT,QAAA23B,EAAgB,SAAS,SAAS,gBAAgB;AACpD,gBAAMwO,KAASnmC,EAAS,MAAM,cAAc,sBAAsB,GAC5D6W,KAAQ,MAAM,UAAU,QAAQ,KAAKtX,GAAM4mC,EAAM,IAAI/oC;AACvD,UAAAyZ,MAAS,KAAKA,MAAQtX,KAAA,gBAAAA,EAAM,aAASq4B,KAAAr4B,EAAKsX,EAAK,MAAV,QAAA+gB,GAA6B;AAAA,QAAM;AAE1E,WAAAC,IAAAt4B,EAAKnC,MAAM,KAAKmC,EAAK,SAAS,IAAI,CAAC,MAAnC,QAAAs4B,EAAsD;AAAA,IAC1D;AAGU,IAAA/Z,GAAA,WAAW,CAAChjB,MAAMorC,EAAOprC,GAAG,EAAE,GAAG,EAAC,QAAQmrC,EAAmB,CAAA,GAC7DnoB,GAAA,aAAa,CAAChjB,MAAMorC,EAAOprC,GAAG,CAAC,GAAG,EAAC,QAAQmrC,EAAA,CAAmB,GAC9DnoB,GAAA,WAAW,CAAChjB,MAAMorC,EAAOprC,GAAG,EAAE,GAAG,EAAC,QAAQkF,EAAS,CAAA,GACnD8d,GAAA,aAAa,CAAChjB,MAAMorC,EAAOprC,GAAG,CAAC,GAAG,EAAC,QAAQkF,EAAA,CAAS;AAEhE,UAAMomC,IAAoBhtC;AAAA,MAAS,MACjCqxB,GAAyB;AAAA,QACvB,KAAKnD,EAAM;AAAA,QACX,OAAOA,EAAM;AAAA,QACb,KAAKA,EAAM;AAAA,QACX,aAAaA,EAAM;AAAA,QACnB,UAAUA,EAAM;AAAA,MAAA,CACjB;AAAA,IAAA,GAEG6B,IAAa5U,EAAmB,CAAA,CAAE,GAClC6U,IAAqBhwB,EAAuB,MAAM;AAClD,UAAAkuB,EAAM,uBAAuB;AAC/B,eAAOA,EAAM;AAET,YAAA+e,IACJ,OAAO/e,EAAM,UAAW,YAAY,OAAOA,EAAM,UAAW,WACxDwe,EAAe,QACfxe,EAAM,QACN3Q,IAAoB,CAAC2S,GAAiB+c,CAAW,CAAC;AACpD,aAAA/e,EAAM,WAAW,MACf3Q,EAAA;AAAA,QACF5R,GAAK;AAAA,UACH,UAAUlD,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,QAAA,CAChB;AAAA,MAAA,GAGDA,EAAM,YAAY,MAChB3Q,EAAA;AAAA,QACFpO,GAAM;AAAA,UACJ,UAAU1G,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,QAAA,CAChB;AAAA,MAAA,GAGDA,EAAM,WAAW,MACf3Q,EAAA;AAAA,QACF+S,GAAe;AAAA,UACb,UAAU7nB,EAAS;AAAA,UACnB,cAAcC,EAAa;AAAA,UAC3B,SAASwlB,EAAM;AAAA,UACf,MAAM,EAAC,gBAAAhe,GAAgB,iBAAAD,KAAkB;AACvC,YAAA8f,EAAW,QAAQ;AAAA,cACjB,WAAW9f,KAAmB+e,EAAW,QAAQ,GAAG/e,CAAe,OAAO;AAAA,cAC1E,UAAUC,KAAkB8e,EAAW,QAAQ,GAAG9e,CAAc,OAAO;AAAA,YAAA;AAAA,UAE3E;AAAA,QAAA,CACD;AAAA,MAAA,GAGEqN;AAAA,IAAA,CACR,GACK,EAAC,QAAApF,GAAQ,gBAAAmD,EAAA,IAAkBhB,GAAYuyB,GAAoBjmC,GAAU;AAAA,MACzE,WAAWomC;AAAA,MACX,YAAYhd;AAAA,MACZ,UAAU5P,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACpC,sBAAsBhW;AAAA,IAAA,CACvB,GAEKuY,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,QAAUkuB,EAAM;AAAA,MAChB,SAAWA,EAAM;AAAA,MACjB,WAAaA,EAAM;AAAA,MACnB,mBAAmBA,EAAM,aAAa,uBAAuB,CAACA,EAAM;AAAA,IACpE,EAAA,GAEIgf,IAAgBltC,EAAS,MAAM;AAAA,MACnCkuB,EAAM,QAAQA,EAAM,aAAaA,EAAM;AAAA,MACvC;AAAA,QACE,YAAYA,EAAM;AAAA,QAClB,mBAAmB,CAACA,EAAM;AAAA,QAC1B,4BAA4BA,EAAM,WAAW,CAACA,EAAM;AAAA,QACpD,MAAQA,EAAM,QAAQ,SAAYc,EAAW;AAAA,MAC/C;AAAA,IAAA,CACD,GAEKme,IAAgB,MAAM;AACnB,MAAA7jB;IAAA,GAGH8jB,IAAe,CAAClqC,MAAgC;AACpD,MAAAgrB,EAAM,QAAQC,EAAK,SAASjrB,CAAK,IAAIiqC;IAAc;AAGrD,IAAAlpB;AAAA,MACErd;AAAA,MACA,MAAM;AACJ,QAAIooB,EAAW,UAAUd,EAAM,cAAc,MAAQA,EAAM,cAAc,cAChE5E;MAEX;AAAA,MACA,EAAC,QAAQ,CAACqjB,GAAQC,CAAW,EAAC;AAAA,IAAA;AAEhC,UAAMS,IAAgB,MAAM;AAC1B,MAAIre,EAAW,UAAUd,EAAM,cAAc,MAAQA,EAAM,cAAc,aAChE5E;IACT,GAGIxc,IAAO,MAAM;AACjB,MAAAkiB,EAAW,SAAS1F;IAAO,GAEvB8F,IAAO,MAAM;AACjB,MAAAJ,EAAW,SAAS1F;IAAO,GAEvBA,KAAS,MAAM;;AACnB,MAAA6E,EAAK,QAAQ;AACb,YAAMmf,IAAoBte,EAAW,OAC/BttB,IAAI,IAAIZ,GAAmBwsC,IAAoB,SAAS,MAAM;AAEpE,UADoBnf,EAApBmf,IAAyB,SAAkB,QAAV5rC,CAAC,GAC9BA,EAAE,kBAAkB;AACtB,QAAoBysB,EAApBmf,IAAyB,mBAAyB,gBAAT;AACzC;AAAA,MACF;AACA,MAAAte,EAAW,QAAQ,CAACse,GACAnf,EAApBmf,IAAyB,WAAiB,OAAT,IACjClvB,IAAAI,EAAQ,UAAR,QAAAJ,EAAe,cAAc,IAAI,MAAM,WAAW;AAAA,IAAC;AAGrD,WAAAvC,GAAMmT,GAAY,MAAM;AACf,MAAA7W;IAAA,CACR,GAEY4Y,EAAA;AAAA,MACX,MAAAjkB;AAAA,MACA,MAAAsiB;AAAA,MACA,QAAA9F;AAAA,IAAA,CACD,GAEDqX,GAAQxL,IAAsB;AAAA,MAC5B,IAAI9F;AAAA,MACJ,MAAAD;AAAA,MACA,MAAAtiB;AAAA,MACA,QAAAwc;AAAA,MACA,SAASlJ,EAAM,MAAM4O,EAAW,KAAK;AAAA,MACrC,OAAO5O,EAAM,MAAM8N,EAAM,KAAK;AAAA,IAAA,CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClTD,UAAMA,IAAQY,GAgBRye,IAAWntB,EAAM,MAAO8N,EAAM,KAAK,GAAGA,EAAM,EAAE,qBAAqB,MAAU,GAC7Esf,IAAaptB,EAAM,MAAO8N,EAAM,cAAc,WAAW,SAAY,SAAU,GAE/EuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCkuB,EAAM;AAAA,MACN;AAAA,QACE,CAAC,QAAQA,EAAM,aAAa,EAAE,GAAGA,EAAM,kBAAkB;AAAA,MAC3D;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD,UAAMA,IAAQY,GA4BRX,IAAOY,GAIP,EAAC,OAAO4X,GAAc,GAAG7jB,MAAS0c,GAAS,GAO3C,EAAC,cAAAhI,GAAc,mBAAAC,EAAiB,IAAIL,GAAelJ,CAAK,GAExDuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrCkuB,EAAM;AAAA,MACN;AAAA,QACE,QAAQA,EAAM;AAAA,QACd,UAAUA,EAAM;AAAA,QAChB,CAAC,QAAQA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC/C;AAAA,IAAA,CACD,GAEK8S,IAAc5gB,EAAM,MAAOoX,EAAa,QAAQyJ,KAAQ/S,EAAM,OAAO,MAAM,QAAS,GAEpFuR,IAAe9H,GAAOzC,IAAsB,IAAI,GAChDuY,IAAe9V,GAAOxC,IAAsB,IAAI,GAChDuK,IAAa/H,GAAOvC,IAAoB,IAAI,GAG5C8K,IAAU,CAACx+B,MAAkC;;AACjD,MAAAysB,EAAK,SAASzsB,CAAC,GACXg+B,MAAe,UAAQthB,IAAAshB,KAAA,gBAAAA,EAAY,cAAZ,gBAAAthB,EAAuB,WAAU,QAC1DC,IAAAohB,KAAA,gBAAAA,EAAc,SAAd,QAAAphB,EAAA,KAAAohB,MAEFrR,IAAAqf,KAAA,gBAAAA,EAAc,SAAd,QAAArf,EAAA,KAAAqf;AAAA,IAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEvB,UAAMvf,IAAQY,GAQRX,IAAOY,GASP0B,IAAkBzwB,EAAS,MAAM;AAAA,MACrCkuB,EAAM;AAAA,MACN;AAAA,QACE,CAACA,EAAM,WAAW,GAAGA,EAAM;AAAA,QAC3B,UAAUA,EAAM;AAAA,QAChB,CAAC,QAAQA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC/C;AAAA,IAAA,CACD,GAEKgS,IAAU,CAACx+B,MAA4B;AAC3C,MAAAysB,EAAK,SAASzsB,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCjB,UAAMwsB,IAAQY,GAORX,IAAOY,GAIPhtB,IAAUoZ,EAA4B,IAAI,GAO1CsV,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,iBAAiBkuB,EAAM;AAAA,MACvB,iBAAiBA,EAAM;AAAA,IACvB,EAAA,GAEIwf,IAAY,CAAChsC,MAAuB;AACxC,MAAAysB,EAAK,UAAUzsB,CAAC;AAAA,IAAA;AAGL,WAAAqvB,EAAA;AAAA,MACX,SAAAhvB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BD,UAAMmsB,IAAQY,GAgBR6e,IAAevtB,EAAM,MAAM8N,EAAM,cAAc,MAAQA,EAAM,UAAU,EAAK,GAE5EuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,WAAW2tC,EAAa;AAAA,MACxB,oBAAoB,CAACzf,EAAM;AAAA,MAC3B,mBAAmBA,EAAM;AAAA,IACzB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BF,UAAMA,IAAQY,GAaR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,QAAQkuB,EAAM,WAAW,EAAE,GAAGA,EAAM,gBAAgB;AAAA,MACrD,aAAa,CAACA,EAAM;AAAA,IACpB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACTF,UAAMA,IAAQY,GAgBR6e,IAAevtB,EAAM,MAAM8N,EAAM,cAAc,MAAQA,EAAM,UAAU,EAAI,GAE3EuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,WAAW2tC,EAAa;AAAA,MACxB,kBAAkB,CAACzf,EAAM;AAAA,MACzB,iBAAiBA,EAAM;AAAA,IACvB,EAAA;;;;;;;;;;;;;;;;IC/BF0f,KAAejrB,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EAGP,OAAO;AAAA,IACL,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,IAAI;AAAA,MACF,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAMuL,GAAO,EAAC,OAAAtL,GAAO,OAAAE,KAAQ;AAC3B,WAAO,MACL;;AAAA,aAAAoL,EAAM,QACF9P,IAAAwE,EAAM,YAAN,gBAAAxE,EAAA,KAAAwE,KACAsL,EAAM,QAAQ,aACZ+D,GAAE4b,IAAU,EAAC,IAAI3f,EAAM,MAAK,EAAC7P,IAAAuE,EAAM,YAAN,gBAAAvE,EAAA,KAAAuE,EAAiB,CAAC,IAC/CqP,GAAE/D,EAAM,KAAK,EAAC,GAAGpL,KAAQ,EAACsL,IAAAxL,EAAM,YAAN,gBAAAwL,EAAA,KAAAxL,EAAiB,CAAC;AAAA;AAAA,EACtD;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACED,UAAMsL,IAAQY,GAsBRlM,IAAQ2f,MAKRvT,IAAaC,GAA4CH,GAAA,YAE9D,GACKgf,IAAgB7e,GAAoBH,GAAC,eAE1C,GAEKO,IAAaC,GAAM,MAAMpB,EAAM,IAAI,YAAY,GAE/CiS,IAAaxI,GAAO3C,IAAkB,IAAI,GAE1C3xB,IAAQ8X,EAAwB,IAAI,GAEpC,EAAC,SAAA8O,EAAA,IAAWJ,GAASxmB,GAAO;AAAA,MAChC,cAAc6qB,EAAM;AAAA,IAAA,CACrB,GAEKkZ,IAAiBhnB,EAAM,MAAM,CAACze,GAAYihB,EAAM,OAAO,CAAC,GAExDmrB,IAAa/tC,EAAS;AAAA,MAC1B,KAAK,OAAMmgC,KAAA,gBAAAA,EAAY,WAAW,UAASnR,EAAW;AAAA,MACtD,KAAK,CAACgf,MAAW;AACf,YAAIA,MAAW,QAKf;AAAA,cADAF,EAAc,QAAQ,IAClB3N,MAAe,QAAQ,MAAM,QAAQ6N,CAAM,GAAG;AAIhD,YAAA7N,EAAW,WAAW,QAAQ6N;AAC9B;AAAA,UACF;AACA,UAAAhf,EAAW,QAAQgf;AAAA;AAAA,MACrB;AAAA,IAAA,CACD,GAEKC,IAAmB7tB;AAAAA,MACvB,MAAM,CAAC,EAAE8N,EAAM,SAAQiS,KAAA,gBAAAA,EAAY,KAAK,YAAWjS,EAAM,aAAYiS,KAAA,gBAAAA,EAAY,SAAS;AAAA,IAAA,GAGtF+N,IAAgB9tB,EAAM,MAAM8N,EAAM,iBAAgBiS,KAAA,gBAAAA,EAAY,QAAQ,UAAS,GAAM,GAErFgO,IAAgBnuC,EAAS,OAAO;AAAA,MACpC,OAAOkuB,EAAM,WAAUiS,KAAA,gBAAAA,EAAY,MAAM,UAAS;AAAA,MAClD,QAAQjS,EAAM,YAAWiS,KAAA,gBAAAA,EAAY,QAAQ,UAAS;AAAA,MACtD,QAAQjS,EAAM,YAAWiS,KAAA,gBAAAA,EAAY,OAAO,UAAS;AAAA,MACrD,SAASjS,EAAM,aAAYiS,KAAA,gBAAAA,EAAY,QAAQ,UAAS;AAAA,MACxD,QAAQjS,EAAM,YAAWiS,KAAA,gBAAAA,EAAY,OAAO,UAAS;AAAA,MACrD,OAAOjS,EAAM,UAASiS,KAAA,gBAAAA,EAAY,MAAM;AAAA,MACxC,MAAMjS,EAAM,SAAQiS,KAAA,gBAAAA,EAAY,KAAK,UAAS;AAAA;AAAA,MAC9C,eAAejS,EAAM,kBAAiBiS,KAAA,gBAAAA,EAAY,cAAc,UAAS;AAAA;AAAA,MACzE,gBAAgBiH,EAAe;AAAA,IAC/B,EAAA,GACI3W,IAAkBkI,GAAWwV,CAAa,GAC1CC,IAAevV,GAAgBsV,CAAa,GAC5CE,IAAetV,GAAgBoV,CAAa;AAErC,WAAApd,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,SAAS5mB;AAAA,MACT,OAAO,MAAM;AACX,QAAA4mB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvGD,UAAMiE,IAAQY,GA+BRE,IAAaC,kBAElB,GAEKI,IAAaC,GAAM,MAAMpB,EAAM,IAAI,UAAU,GAC7CogB,IAAehf,GAAM,MAAMpB,EAAM,MAAM,UAAU,GAEjDnsB,IAAUoZ,EAAwB,IAAI,GAEtC,EAAC,SAAA8O,EAAA,IAAWJ,GAAS9nB,GAAS;AAAA,MAClC,cAAcmsB,EAAM;AAAA,IAAA,CACrB;AAED,IAAAyS,GAAQ3L,IAAkB;AAAA,MACxB,YAAAhG;AAAA,MACA,QAAQ5O,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MAClC,eAAe9N,EAAM,MAAM8N,EAAM,aAAa;AAAA,MAC9C,MAAM9N,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,MAAMogB;AAAA,MACN,OAAOluB,EAAM,MAAM8N,EAAM,KAAK;AAAA,MAC9B,OAAO9N,EAAM,MAAM8N,EAAM,KAAK;AAAA,MAC9B,MAAM9N,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,QAAQ9N,EAAM,MAAM,CAAC8N,EAAM,OAAO;AAAA,MAClC,SAAS9N,EAAM,MAAM8N,EAAM,OAAO;AAAA,MAClC,UAAU9N,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACpC,SAAS9N,EAAM,MAAM8N,EAAM,OAAO;AAAA,MAClC,UAAU9N,EAAM,MAAM8N,EAAM,QAAQ;AAAA,IAAA,CACrC;AAED,UAAMqM,IAAmBv6B;AAAA,MAAS,MAChCkuB,EAAM,QAAQ;AAAA,QAAI,CAAC9sB,GAAImtC,MACrB,OAAOntC,KAAO,YAAY,OAAOA,KAAO,WACpC;AAAA,UACE,OAAO;AAAA,YACL,OAAOA;AAAA,YACP,UAAU8sB,EAAM;AAAA,UAClB;AAAA,UACA,MAAM9sB,EAAG,SAAS;AAAA,UAClB,MAAM;AAAA,UACN,MAAM,OAAO,0BAA0BmtC,CAAG,EAAE;AAAA,QAAA,IAE9C;AAAA,UACE,OAAO;AAAA,YACL,OAAOntC,EAAG8sB,EAAM,UAAU;AAAA,YAC1B,UAAU9sB,EAAG8sB,EAAM,aAAa;AAAA,YAChC,GAAI9sB,EAAG,QAAQA,EAAG,QAAQ,CAAC;AAAA,UAC7B;AAAA,UACA,MAAMA,EAAG8sB,EAAM,SAAS;AAAA,UACxB,MAAM9sB,EAAG8sB,EAAM,SAAS;AAAA,UACxB,MAAM,OAAO,0BAA0BqgB,CAAG,EAAE;AAAA,QAC9C;AAAA,MACN;AAAA,IAAA,GAGIJ,IAAgBnuC,EAAS,OAAO;AAAA,MACpC,UAAUkuB,EAAM;AAAA,MAChB,aAAaA,EAAM;AAAA,MACnB,OAAOA,EAAM;AAAA,MACb,WAAWA,EAAM;AAAA,MACjB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,MAAMA,EAAM;AAAA,IACZ,EAAA,GACIsgB,IAAgBxV,GAAamV,CAAa,GAC1C1d,IAAkByI,GAAgBiV,CAAa;AAExC,WAAApd,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,OAAO,MAAM;AACX,QAAAA,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFD,UAAMrH,IAAQ2f,MAKRrU,IAAQY,GAwBRE,IAAaC,kBAElB,GACKI,IAAaC,GAAM,MAAMpB,EAAM,EAAE,GAIjC4K,IAAaJ,GAAc,MAAMxK,EAAM,KAAK,GAE5C7qB,IAAQ8X,EAA6B,IAAI,GAEzC,EAAC,SAAA8O,EAAW,IAAAJ,GAASxmB,GAAO,EAAC,cAAc6qB,EAAM,UAAA,CAAU,GAE3DsU,IAAepiB,EAAM,MAAM,CAACze,GAAYihB,EAAM,KAAQ,CAAC,GAEvD6rB,IAAiBruB;AAAAA,MAAM,MAC3B,OAAO8N,EAAM,UAAW,WAAWA,EAAM,SAASA,EAAM,OAAO,KAAK,GAAG;AAAA,IAAA,GAGnEuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrC84B,EAAW;AAAA,MACX;AAAA,QACE,CAAC,gBAAgB5K,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,MACjD;AAAA,IAAA,CACD,GAEKwgB,IAAW,MAAM;;AACrB,YAAMzuC,MACJme,IAAA/a,EAAM,UAAN,gBAAA+a,EAAa,WAAU,UAAQC,IAAAhb,EAAM,UAAN,gBAAAgb,EAAa,WAAU,SAAY,OAAO,CAAC,GAAGhb,EAAM,MAAM,KAAK;AACrF,MAAA2rB,EAAA,QAAQ/uB,MAAU,OAAO,OAAOiuB,EAAM,aAAa,KAAOjuB,IAAQA,EAAM,CAAC;AAAA,IAAA,GAGhF0uC,IAAS,CAACjtC,MAAuB;AACjC,MAAAwsB,EAAM,WAAW,MACnBxsB,EAAE,eAAe;AAAA,IACnB,GAMI2G,IAAQ,MAAM;AAClB,MAAA2mB,EAAW,QAAQ;AAAA,IAAA;AAGf,IAAAnT,GAAAmT,GAAY,CAAC3N,MAAa;AAC9B,MAAIA,MAAa,QAAQhe,EAAM,UAAU,SACvCA,EAAM,MAAM,QAAQ;AAAA,IACtB,CACD,GAEY0tB,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,SAAS5mB;AAAA,MACT,OAAO,MAAM;AACX,QAAA4mB,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,OAAA5hB;AAAA,IAAA,CACD;AAED,UAAM,CAACumC,GAAgBC,CAAgB,IAAItsB,GAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qECnI5DusB,KAAS,CAAC,SAAS,UAAU,UAAU,GAEvCC,KAAiBD,GAAO,IAAI,CAAC9qC,MAAM,GAAGA,CAAC,kBAAkB,EAAE,QAG3DgrC,KAA8B,CAAC,GAAGF,IAAQ,KAAK,UAAU,OAAO,GAEzDG,KAAkB,SAClBC,KAA6B,oBAC7BC,KAA2B,kBAC3BC,KAAwB,eACxBC,KAAoB,WAEjCC,KAAe3sB,EAAgB;AAAA,EAC7B,YAAY,EAAC,MAAA4sB,IAAMC,sBAAAA,IAAsBC,UAAAA,IAAUC,WAAAA,IAAWC,oBAAAA,GAAkB;AAAA,EAChF,OAAO;AAAA,IACL,aAAa,EAAC,MAAM,CAAC,SAAS,MAAM,GAA4B,SAAS,OAAS;AAAA,IAClF,aAAa,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACjE,eAAe,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACnE,eAAe,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACnE,eAAe,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACnE,eAAe,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACnE,aAAa,EAAC,MAAM,CAAC,MAAM,GAAG,SAAS,OAAS;AAAA,IAChD,UAAU,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA,IACxC,kBAAkB,EAAC,MAAM,QAAQ,SAAS,YAAW;AAAA,IACrD,IAAI,EAAC,MAAM,QAAQ,SAAS,OAAS;AAAA,IACrC,iBAAiB,EAAC,MAAM,QAAQ,SAAS,OAAS;AAAA,IAClD,OAAO,EAAC,MAAM,QAAQ,SAAS,OAAS;AAAA,IACxC,YAAY,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAChE,cAAc,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAClE,cAAc,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAClE,cAAc,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAClE,cAAc,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAClE,YAAY,EAAC,MAAM,CAAC,OAAO,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAC9D,WAAW,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IAC/D,aAAa,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACjE,aAAa,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACjE,aAAa,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACjE,aAAa,EAAC,MAAM,CAAC,SAAS,QAAQ,MAAM,GAAG,SAAS,OAAS;AAAA,IACjE,UAAU,EAAC,MAAM,QAAQ,SAAS,OAAS;AAAA,IAC3C,WAAW,EAAC,MAAM,QAAQ,SAAS,OAAS;AAAA,IAC5C,aAAa,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA,IAC3C,OAAO,EAAC,MAAM,SAAqC,SAAS,KAAI;AAAA,IAChE,SAAS,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA,IACvC,eAAe,EAAC,MAAM,QAAQ,SAAS,OAAS;AAAA,IAChD,WAAW,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA,IACzC,UAAU,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA,EAC1C;AAAA,EACA,MAAMzhB,GAAO;AAEX,UAAM0hB,IAAc,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI,GAG3CC,IAAkB,CAAC3hB,GAAYuE,MACnCmd,EAAY,OAAO,CAAC19B,GAAkB0gB,MAAe;AAC7C,YAAAuE,IAASD,GAAetE,MAAe,OAAO,KAAKA,GAAY,GAAGH,CAAM,OAAO,GAC/Eqd,IAAoB5hB,EAAMiJ,CAAM,KAAK;AAC3C,aAAI2Y,MACFld,MAAe,OACX1gB,EAAO,KAAK,QAAQ49B,CAAS,EAAE,IAC/B59B,EAAO,KAAK,QAAQ0gB,CAAU,IAAIkd,CAAS,EAAE,IAG5C59B;AAAA,IACT,GAAG,CAAE,CAAA,GAGD69B,IAAc,CAAC7hB,GAAYuE;AAAA;AAAA,MAE/Bmd,EAAY,OAAO,CAAC19B,GAAa0gB,MAAuB;AAChD,cAAAuE,IAASD,GAAetE,MAAe,OAAO,KAAKA,GAAY,GAAGH,CAAM,MAAM;AAChF,YAAAqd,IAAY5hB,EAAMiJ,CAAM;AAK5B,YAFY2Y,IAAAA,MAAc,KAAK,KAAOA,KAAa,IAE7C,OAAOA,KAAc,aAAcA,MAAc,QAAQ;AAEvD,gBAAAjyB,IAAM,OAAO,SAASiyB,CAAS;AACrC,UAAAA,IAAY,OAAO,MAAMjyB,CAAG,IAAI,IAAIA,GAExBiyB,IAAAA,IAAY,IAAIA,IAAY;AAAA,QAC1C;AAKA,eAAIA,MAGEld,MAAe,OACjB1gB,EAAO,OAAO49B,KAAc,YAAY,QAAQ,MAAM,IAAIA,IAE1D59B,EAAO0gB,MAAe,OAAOkd,KAAc,YAAY,QAAQ,OAAO,IAAIA,IAGvE59B;AAAA,MACT,GAAG,EAAE;AAAA,OAED8qB,IAAU7hB,EAAwB,IAAI,GAKtC60B,IAAwB,CAAC3uB,GAAyBgG,IAA0B,SAAS;AACzF,UAAIhlB,MAAc6rB,EAAM,YAAY8O,EAAQ,UAAU,MAAM;AAEpD,cAAAiT,IAASjT,EAAQ,MAAM,cAAc,IAAI,IAAI,OAAO9O,EAAM,QAAQ,CAAC,EAAE;AAC3E,YAAI+hB,GAAQ;AACV,gBAAMC,IAAO,oBACPC,KAAU9uB,KAAY,IAAI,MAAMqS,EAAc,GAC9C0c,KAAU/oB,KAAY,IAAI,MAAMqM,EAAc,GAI9C2c,KAAOJ,EAAO,aAAaC,CAAI,KAAK,IACvC,MAAMxc,EAAc,EACpB,OAAO,CAACyF,MAAO,CAACiX,EAAO,SAASjX,CAAE,CAAC,EACnC,OAAOgX,CAAM,EACb,OAAO,CAAChX,GAAI1b,GAAO4yB,MAAQA,EAAI,QAAQlX,CAAE,MAAM1b,CAAK,EACpD,OAAO,CAAC/V,MAAMA,CAAC,EACf,KAAK,GAAG,EACR;AAEH,UAAI2oC,IACKJ,EAAA,aAAaC,GAAMG,CAAG,IAE7BJ,EAAO,gBAAgBC,CAAI;AAAA,QAE/B;AAAA,MACF;AAAA,IAAA,GAGII,IAAkBtwC,EAAS,MAAM+vC,EAAY7hB,GAAO,SAAS,CAAC,GAC9DqiB,IAAoBvwC,EAAS,MAAM6vC,EAAgB3hB,GAAO,OAAO,CAAC,GAClEsiB,IAAgBxwC,EAAS,MAAM+vC,EAAY7hB,GAAO,OAAO,CAAC,GAC1DuiB,IAAezwC;AAAA,MACnB;AAAA;AAAA;AAAA,QAGE,OAAO,KAAKswC,EAAgB,KAAK,EAAE,SAAS,KAAK,OAAO,KAAKE,EAAc,KAAK,EAAE,SAAS;AAAA;AAAA,IAAA,GAGzF1X,IAAaJ,GAAc,MAAMxK,EAAM,KAAK,GAE5C+K,IAAsB94B;AAAA,MAC1B,MAAM+tB,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,IAAA;AAGd,WAAArS;AAAA,MACE,MAAM;AAAA,MACN,CAACwF,GAAyBgG,MAA4B;AACpD,QAAIhG,MAAagG,KACf2oB,EAAsB3uB,GAAUgG,CAAQ;AAAA,MAE5C;AAAA,IAAA,GAGF5F,GAAU,MAAM;AACd,MAAAC,GAAS,MAAM;AAGb,QAAAsuB,EAAsB,IAAe;AAAA,MAAA,CACtC;AAAA,IAAA,CACF,GAqBM;AAAA,MACL;AAAA,MACA,qBAAA/W;AAAA,MACA,iBAAAqX;AAAA,MACA,cAAAG;AAAA,MACA,mBAAAF;AAAA,MACA,eAAAC;AAAA,MACA,eA1BoB,CAACttC,MAAgC;AAEjD,YAAAgrB,EAAM,YAAY8O,EAAQ,UAAU;AAAM;AAExC,cAAA,EAAC,QAAAhjB,EAAU,IAAA9W,GACXwtC,IAAU12B,IAAUA,EAAuB,UAAU;AAIvD,YAAAg1B,GAA4B,QAAQ0B,CAAO,MAAM;AAAI;AAGnD,cAAAC,IAAS,CAAC,GAAG3T,EAAQ,MAAM,iBAAiB+R,EAAc,CAAC,EAAE,OAAOntC,EAAS,GAC7E,CAACgvC,CAAG,IAAID;AACd,QAAIA,EAAO,WAAW,KAAKC,aAAe,eACxCzvC,GAAayvC,CAAG;AAAA,MAClB;AAAA,MAWA,YAAA9X;AAAA,IAAA;AAAA,EAEJ;AAAA,EACA,SAAS;AACP,UAAM5K,IAAQ,KAAK,QACbtL,IAAQ,KAAK,QAEbuW,IAAK7J,MACLuhB,IAAa,CAAC3iB,EAAM;AAG1B,QAAI4iB,IAAc;AAClB,UAAMC,IAAepb,GAAcsZ,IAAiB,CAAI,GAAArsB,CAAK,KAAKsL,EAAM,OAClE8iB,IAAUD,IAAezhB,GAAM,QAAW,YAAY,EAAE,QAAQ;AAElE,QAAAyhB,KAAgB,KAAK,cAAc;AAC/B,YAAAE,IAA+BJ,IAAa,WAAW;AAC7D,UAAI3iB,EAAM;AACR,QAAI6iB,MACOD,IAAA7e;AAAA,UACPgf;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,IAAID;AAAA,YACJ,KAAK9iB,EAAM,YAAY;AAAA,UACzB;AAAA,UACA6iB;AAAA,QAAA,IAGA,KAAK,eACED,IAAA7e,GAAEsd,IAAM,KAAK,eAAe,EAAC,SAAS,MAAMuB,GAAO,IAE5DA,IAAS7e,GAAE,OAAO,CAAI,GAAA,CAAC6e,CAAM,CAAC;AAAA,WAE3B;AACL,cAAMI,IAAc;AAAA,UAClB,SAASL,IAAa,KAAK,gBAAgB;AAAA,UAC3C,GAAI,KAAK,eAAe,KAAK,gBAAgB,CAAC;AAAA,UAC9C,KAAK,KAAK,eAAeI,IAAW;AAAA,UACpC,IAAID;AAAA,UACJ,KAAK9iB,EAAM,YAAY;AAAA,UACvB,UAAU2iB,IAAa,OAAO;AAAA,UAC9B,OAAO;AAAA,YACL,KAAK,eAAe,mBAAmB;AAAA,YACvC;AAAA,cACE,oBAAoBA;AAAA,cACpB,kBAAkB,KAAK,gBAAgBA;AAAA,cACvC,QAAQ,CAAC,KAAK,gBAAgBA;AAAA,cAC9B,WAAW,CAAC,KAAK,gBAAgB,CAACA;AAAA,cAClC,CAAC,kBAAkB3iB,EAAM,SAAS,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,YACjD;AAAA,YACA,KAAK;AAAA,YACLA,EAAM;AAAA,UACR;AAAA,QAAA;AAEF,QAAI,KAAK,eACP4iB,IAAS7e,GAAEsd,IAAM2B,GAAa,EAAC,SAAS,MAAMH,GAAa,IAElDD,IAAA7e,GAAEgf,GAAUC,GAAaH,CAAY;AAAA,MAElD;AAAA,IACF;AAEA,QAAII,IAAmB;AACvB,UAAMC,IACJzb,GAAcuZ,IAA4B,CAAI,GAAAtsB,CAAK,KAAK,KAAK,iBACzDyuB,IAAoBD,IACtB9hB,GAAM,QAAW,uBAAuB,EAAE,QAC1C;AAEJ,IAAI8hB,MACiBD,IAAAlf;AAAA,MACjBud;AAAAA,MACA;AAAA,QACE,UAAUthB,EAAM;AAAA,QAChB,IAAImjB;AAAA,QACJ,OAAOnjB,EAAM;AAAA,QACb,SAASA,EAAM;AAAA,MACjB;AAAA,MACA,EAAC,SAAS,MAAMkjB,EAAsB;AAAA,IAAA;AAI1C,QAAIE,IAAiB;AACrB,UAAMC,IACJ5b,GAAcwZ,IAA0B,CAAI,GAAAvsB,CAAK,KAAK,KAAK,eACvD4uB,IAAkBD,IACpBjiB,GAAM,QAAW,qBAAqB,EAAE,QACxC;AAEJ,IAAIiiB,MACeD,IAAArf;AAAA,MACf0d;AAAAA,MACA;AAAA,QACE,UAAUzhB,EAAM;AAAA,QAChB,IAAIsjB;AAAA,QACJ,OAAOtjB,EAAM;AAAA,QACb,SAASA,EAAM;AAAA,MACjB;AAAA,MACA,EAAC,SAAS,MAAMqjB,EAAoB;AAAA;AAAA,IAAA;AAKxC,QAAIE,IAAe;AACnB,UAAMC,IAAqB/b,GAAcyZ,IAAuB,CAAI,GAAAxsB,CAAK,KAAK,KAAK,aAC7E+uB,IAAgBD,IAClBpiB,GAAM,QAAW,kBAAkB,EAAE,QACrC;AACJ,IAAIoiB,MACaD,IAAAxf;AAAA,MACbyd;AAAAA,MACA;AAAA,QACE,IAAIiC;AAAA,MACN;AAAA,MACA,EAAC,SAAS,MAAMD,EAAkB;AAAA,IAAA;AAQhC,UAAAE,IAAmB,KAAK,kBAC5B;AAAA,MACED;AAAA,MACAzjB,EAAM,UAAU,KAAQmjB,IAAoB;AAAA,MAC5CnjB,EAAM,UAAU,KAAOsjB,IAAkB;AAAA,IAAA,EAExC,OAAO,CAAC9pC,MAAMA,CAAC,EACf,KAAK,GAAG,KAAK,MAEZmqC,IAAgB;AAAA,MACpBlc,GAAc0Z,IAAmB,EAAC,iBAAAuC,GAAiB,eAAAD,GAAe,IAAAxY,GAAI,SAAA6X,EAAA,GAAUpuB,CAAK,KAAK;AAAA,MAC1FuuB;AAAA,MACAG;AAAA,MACAG;AAAA,IAAA;AAEE,IAAA,CAAC,KAAK,gBAAgBvjB,EAAM,YAAU2jB,EAAc,KAAKf,CAAM;AAEnE,QAAIgB,IAAW7f;AAAA,MACb;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,UACL;AAAA,YACE,iBAAiB,CAAC,KAAK,gBAAgB/D,EAAM;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAAA,MACA2jB;AAAA,IAAA;AAEF,IAAI,KAAK,iBACPC,IAAW7f,GAAEsd,IAAM,EAAC,KAAK,WAAW,GAAG,KAAK,gBAAkB,GAAA,EAAC,SAAS,MAAMsC,EAAc,CAAA;AAO9F,UAAME,IAAW;AAAA,MACf,OAAS;AAAA,QACP,KAAK;AAAA,QACL;AAAA,UACE,iBAAiB7jB,EAAM;AAAA,QACzB;AAAA,MACF;AAAA,MACA,IAAMoB,GAAM,MAAMpB,EAAM,EAAE,EAAE;AAAA,MAC5B,UAAY2iB,IAAa3iB,EAAM,WAAW;AAAA,MAC1C,MAAQ2iB,IAAa,OAAO;AAAA,MAC5B,gBAAgB,KAAK;AAAA;AAAA;AAAA,MAGrB,mBAAmBA,KAAc,KAAK,eAAeG,IAAU;AAAA,IAAA;AAG7D,WAAA,KAAK,gBAAgB,CAACH,IACjB5e,GAAEwd,IAAUsC,GAAU,EAAC,SAAS,MAAM,CAACjB,GAAQgB,CAAQ,EAAA,CAAE,IAG3D7f;AAAA,MACL4e,IAAa,aAAa;AAAA,MAC1BkB;AAAA,MACA,KAAK,gBAAgBlB,IACjB,CAAC5e,GAAEwd,IAAU,MAAM,EAAC,SAAS,MAAM,CAACqB,GAAQgB,CAAQ,EAAE,CAAA,CAAC,IACvD,KAAK,gBAAgB,CAAC5jB,EAAM,WAC1B,CAAC4iB,GAAQgB,CAAQ,IACjB,CAACA,CAAQ;AAAA,IAAA;AAAA,EAEnB;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7WD,UAAM5jB,IAAQY,GA+BRX,IAAOY,GAIP,EAAC,OAAA1rB,GAAO,YAAAgsB,GAAY,qBAAA4J,GAAqB,SAAA+Y,GAAS,UAAAtD,GAAU,QAAAuD,GAAQ,OAAAC,GAAO,MAAAC,EAAI,IACnF9Y,GAAanL,GAAOC,CAAI,GAEpB2K,IAAaJ,GAAc,MAAMxK,EAAM,KAAK,GAE5CkkB,IAAgBj3B,EAAI,EAAK,GAEzBsV,IAAkBzwB,EAAS,MAAM;AAC/B,YAAAqyC,IAAUnkB,EAAM,SAAS,SACzBokB,IAAUpkB,EAAM,SAAS;AACxB,aAAA;AAAA,QACL4K,EAAW;AAAA,QACX;AAAA,UACE,4BAA4BsZ,EAAc;AAAA,UAC1C,cAAcC;AAAA,UACd,gBAAgBC,KAAY,CAACpkB,EAAM,aAAa,CAACmkB;AAAA,UACjD,sBAAsBC;AAAA,UACtB,0BAA0BpkB,EAAM,aAAa,CAACmkB,KAAW,CAACC;AAAA,UAC1D,CAAC,gBAAgBpkB,EAAM,IAAI,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,QAC1C;AAAA,MAAA;AAAA,IACF,CACD;AAEY,WAAA6C,EAAA;AAAA,MACX,MAAAohB;AAAA,MACA,SAAS9uC;AAAA,MACT,OAAA6uC;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDD,UAAMhkB,IAAQY,GAoBRlM,IAAQ2f,MAKRvT,IAAaC,kBAElB,GAEKI,IAAaC,GAAM,MAAMpB,EAAM,IAAI,YAAY,GAE/CiS,IAAaxI,GAAO1C,IAAe,IAAI,GAEvC5xB,IAAQ8X,EAAwB,IAAI,GAEpC,EAAC,SAAA8O,EAAA,IAAWJ,GAASxmB,GAAO;AAAA,MAChC,cAAc6qB,EAAM;AAAA,IAAA,CACrB,GAEKkZ,IAAiBhnB,EAAM,MAAM,CAACze,GAAYihB,EAAM,OAAO,CAAC,GAExDmrB,IAAa/tC,EAAS;AAAA,MAC1B,KAAK,OAAMmgC,KAAA,gBAAAA,EAAY,WAAW,UAASnR,EAAW;AAAA,MACtD,KAAK,CAAC3N,MAAa;AACjB,YAAIA,MAAa,QACjB;AAAA,cAAI8e,MAAe,MAAM;AACvB,YAAAA,EAAW,WAAW,QAAQ9e;AAC9B;AAAA,UACF;AACA,UAAA2N,EAAW,QAAQ3N;AAAA;AAAA,MACrB;AAAA,IAAA,CACD,GAEK4sB,IAAmB7tB;AAAAA,MACvB,MAAM,CAAC,EAAE8N,EAAM,SAAQiS,KAAA,gBAAAA,EAAY,KAAK,YAAWjS,EAAM,aAAYiS,KAAA,gBAAAA,EAAY,SAAS;AAAA,IAAA,GAGtF+N,IAAgB9tB,EAAM,MAAM8N,EAAM,iBAAgBiS,KAAA,gBAAAA,EAAY,QAAQ,UAAS,GAAM,GAErFgO,IAAgBnuC,EAAS,OAAO;AAAA,MACpC,OAAOkuB,EAAM,WAAUiS,KAAA,gBAAAA,EAAY,MAAM,UAAS;AAAA,MAClD,QAAQjS,EAAM,YAAWiS,KAAA,gBAAAA,EAAY,QAAQ,UAAS;AAAA,MACtD,QAAQjS,EAAM,YAAWiS,KAAA,gBAAAA,EAAY,OAAO,UAAS;AAAA,MACrD,OAAOjS,EAAM,UAASiS,KAAA,gBAAAA,EAAY,MAAM;AAAA,MACxC,SAASjS,EAAM,aAAYiS,KAAA,gBAAAA,EAAY,QAAQ,UAAS;AAAA,MACxD,MAAMjS,EAAM,SAAQiS,KAAA,gBAAAA,EAAY,KAAK,UAAS;AAAA;AAAA,MAC9C,eAAejS,EAAM,kBAAiBiS,KAAA,gBAAAA,EAAY,cAAc,UAAS;AAAA;AAAA,MACzE,gBAAgBiH,EAAe;AAAA,IAC/B,EAAA,GACI3W,IAAkBkI,GAAWwV,CAAa,GAC1CC,IAAevV,GAAgBsV,CAAa,GAC5CE,IAAetV,GAAgBoV,CAAa;AAErC,WAAApd,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,SAAS5mB;AAAA,MACT,OAAO,MAAM;AACX,QAAA4mB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFD,UAAMiE,IAAQY,GA8BRE,IAAaC,kBAElB,GAEKI,IAAaC,GAAM,MAAMpB,EAAM,IAAI,OAAO,GAC1CogB,IAAehf,GAAM,MAAMpB,EAAM,MAAM,UAAU,GAEjDnsB,IAAUoZ,EAAwB,IAAI,GAEtC,EAAC,SAAA8O,EAAA,IAAWJ,GAAS9nB,GAAS;AAAA,MAClC,cAAcmsB,EAAM;AAAA,IAAA,CACrB;AAED,IAAAyS,GAAQ1L,IAAe;AAAA,MACrB,YAAAjG;AAAA,MACA,eAAe5O,EAAM,MAAM8N,EAAM,aAAa;AAAA,MAC9C,MAAM9N,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,MAAMogB;AAAA,MACN,SAASluB,EAAM,MAAM8N,EAAM,OAAO;AAAA,MAClC,OAAO9N,EAAM,MAAM8N,EAAM,KAAK;AAAA,MAC9B,OAAO9N,EAAM,MAAM8N,EAAM,KAAK;AAAA,MAC9B,MAAM9N,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,QAAQ9N,EAAM,MAAM,CAAC8N,EAAM,OAAO;AAAA,MAClC,SAAS9N,EAAM,MAAM8N,EAAM,OAAO;AAAA,MAClC,UAAU9N,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACpC,UAAU9N,EAAM,MAAM8N,EAAM,QAAQ;AAAA,IAAA,CACrC;AAED,UAAMqM,IAAmBv6B;AAAA,MAAS,MAChCkuB,EAAM,QAAQ;AAAA,QAAI,CAAC9sB,GAAImtC,MACrB,OAAOntC,KAAO,YAAY,OAAOA,KAAO,WACpC;AAAA,UACE,OAAOA;AAAA,UACP,UAAU8sB,EAAM;AAAA,UAChB,MAAM9sB,EAAG,SAAS;AAAA,UAClB,MAAM;AAAA,UACN,MAAM,OAAO,uBAAuBmtC,CAAG,EAAE;AAAA,QAAA,IAE3C;AAAA,UACE,OAAOntC,EAAG8sB,EAAM,UAAU;AAAA,UAC1B,UAAU9sB,EAAG8sB,EAAM,aAAa;AAAA,UAChC,GAAI9sB,EAAG,QAAQA,EAAG,QAAQ,CAAC;AAAA,UAC3B,MAAMA,EAAG8sB,EAAM,SAAS;AAAA,UACxB,MAAM9sB,EAAG8sB,EAAM,SAAS;AAAA,UACxB,MAAM,OAAO,uBAAuBqgB,CAAG,EAAE;AAAA,QAC3C;AAAA,MACN;AAAA,IAAA,GAGIJ,IAAgBnuC,EAAS,OAAO;AAAA,MACpC,UAAUkuB,EAAM;AAAA,MAChB,aAAaA,EAAM;AAAA,MACnB,OAAOA,EAAM;AAAA,MACb,WAAWA,EAAM;AAAA,MACjB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,MAAMA,EAAM;AAAA,IACZ,EAAA,GACIsgB,IAAgBxV,GAAamV,CAAa,GAC1C1d,IAAkByI,GAAgBiV,CAAa;AAExC,WAAApd,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,OAAO,MAAM;AACX,QAAAA,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HD,UAAMiE,IAAQY;;;;;;;;;;;;;;;;;;;ACiBd,UAAMZ,IAAQY,GAgBR,EAAC,mBAAAyjB,EAAiB,IAAItY,GAAc,MAAM/L,EAAM,SAASA,CAAK,GAE9DskB,IAAwBxyC,EAAS,MAAMuyC,EAAkB,KAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEzF,UAAMrkB,IAAQY,GA8BRE,IAAaC,GAAcH,GAAA,YAGhC,GAEKO,IAAaC,GAAM,MAAMpB,EAAM,IAAI,OAAO,GAE1CukB,IAAmBvwB,GAAY,MAAMgM,EAAM,UAAU,GAErD4K,IAAaJ,GAAc,MAAMxK,EAAM,KAAK,GAE5C7qB,IAAQ8X,EAAwB,IAAI,GAEpC,EAAC,SAAA8O,EAAA,IAAWJ,GAASxmB,GAAO;AAAA,MAChC,cAAc6qB,EAAM;AAAA,IAAA,CACrB,GAEKuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrC84B,EAAW;AAAA,MACX;AAAA,QACE,gBAAgB5K,EAAM;AAAA,QACtB,CAAC,gBAAgBA,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS,QAAQA,EAAM;AAAA,QAC7D,eAAe,CAACA,EAAM;AAAA,QACtB,CAAC,eAAeA,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS,QAAQ,CAACA,EAAM;AAAA,MAC/D;AAAA,IAAA,CACD,GAEKwkB,IAAqBtyB;AAAAA,MAAM,MAC/BqyB,EAAiB,SAASvkB,EAAM,QAAQukB,EAAiB,QAAQ;AAAA,IAAA,GAG7DxZ,IAAsB94B;AAAA,MAC1B,MAAM+tB,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,IAAA,GAGR,EAAC,mBAAAqkB,GAAmB,WAAArY,MAAaD,GAAc,MAAM/L,EAAM,SAASA,CAAK,GAEzEskB,IAAwBxyC;AAAA,MAC5B,MAAMuyC,EAAkB;AAAA,IAAA,GAGpBxE,IAAa/tC,EAAS;AAAA,MAC1B,KAAK,MAAMgvB,EAAW;AAAA,MACtB,KAAK,CAAC3N,MAAa;AACjB,QAAA2N,EAAW,QAAQ3N;AAAA,MACrB;AAAA,IAAA,CACD;AAEY,WAAA0P,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,SAAS5mB;AAAA,MACT,OAAO,MAAM;AACX,QAAA4mB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IClIY0oB,KAAY,aACZC,KAAW,OAGXC,KAAY,QAEZC,KAAgB,YAChBC,KAAc,UAGdC,KAAU,mOC0gBjBC,KAAgB;AAAA,EACpB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,kBAAkB;AACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAzcA,UAAMC,IAAY,CAACF,IAASL,IAAWE,IAAWD,IAAUG,IAAaD,EAAa,GAEhF5kB,IAAQY,GA4BRX,IAAOY,GAWPC,IAAaC,kBAElB,GAGKltB,IAAUoZ,EAAwB,IAAI,GAEtC,EAAC,SAAA8O,EAAA,IAAWJ,GAAS9nB,CAAO,GAE5BstB,IAAaC,GAAM,MAAMpB,EAAM,IAAI,YAAY,GAE/CuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,UAAYkuB,EAAM;AAAA,MAClB,UAAYA,EAAM;AAAA,MAClB,OAASjE,EAAQ;AAAA,MACjB,iBAAiBiE,EAAM,UAAUA,EAAM;AAAA,MACvC,UAAU,CAACA,EAAM,UAAU,CAACA,EAAM;AAAA,MAClC,uBAAuB,CAACA,EAAM;AAAA,MAC9B,eAAeA,EAAM;AAAA,MACrB,CAAC,gBAAgBA,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,IAC/C,EAAA,GAEIilB,IAAsBnzC,EAAS,OAAO;AAAA,MAC1C,UAAUkuB,EAAM;AAAA,MAChB,qBAAqB,CAACA,EAAM;AAAA,MAC5B,sBAAsBA,EAAM;AAAA,MAC5B,cAAcA,EAAM;AAAA,MACpB,iBAAiBA,EAAM;AAAA,MACvB,gBAAgB,CAACA,EAAM;AAAA,MACvB,cAAc,CAACA,EAAM;AAAA,IACrB,EAAA;AAGE,QAAAklB,GACAC,GACAC,IAAc;AAMlB,UAAMC,IAAarxB,GAAY,MAAMgM,EAAM,IAAI,GACzCslB,IAAepzB;AAAAA,MAAM,MACzB,OAAO,MAAMmzB,EAAW,KAAK,IAAIN,GAAc,OAAOM,EAAW;AAAA,IAAA,GAG7DE,IAAYvxB,GAAY,MAAMgM,EAAM,GAAG,GACvCwlB,IAActzB;AAAAA,MAAM,MACxB,OAAO,MAAMqzB,EAAU,KAAK,IAAIR,GAAc,MAAMQ,EAAU;AAAA,IAAA,GAG1DE,IAAYzxB,GAAY,MAAMgM,EAAM,GAAG,GACvC0lB,IAAcxzB,EAAM,MAAM;AAC9B,YAAMyzB,IAAOL,EAAa,OACpB7vC,KAAM+vC,EAAY;AACxB,aAAO,KAAK,OAAOC,EAAU,QAAQhwC,MAAOkwC,CAAI,IAAIA,IAAOlwC;AAAA,IAAA,CAC5D,GAEKmwC,IAAoB5xB,GAAY,MAAMgM,EAAM,aAAa;AAAA,MAC7D,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA,CACT,GACK6lB,IAAgB3zB;AAAAA,MAAM,MAC1B0zB,EAAkB,QAAQ,IAAIA,EAAkB,QAAQb,GAAc;AAAA,IAAA,GAGlEe,IAAuB9xB,GAAY,MAAMgM,EAAM,gBAAgB;AAAA,MACnE,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA,CACT,GACK+lB,IAAmB7zB;AAAAA,MAAM,MAC7B4zB,EAAqB,QAAQ,IAAIA,EAAqB,QAAQf,GAAc;AAAA,IAAA,GAGxEiB,IAAwBhyB,GAAY,MAAMgM,EAAM,iBAAiB;AAAA,MACrE,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA,CACT,GACKimB,IAAoB/zB;AAAAA,MAAM,MAC9B,KAAK;AAAA,QACH,OAAO,MAAM8zB,EAAsB,KAAK,IACpCjB,GAAc,kBACdiB,EAAsB;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA,GAGIE,IAA6BlyB,GAAY,MAAMgM,EAAM,sBAAsB;AAAA,MAC/E,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA,CACT,GACKmmB,IAAyBj0B;AAAAA,MAAM,MACnC,KAAK;AAAA,QACH,OAAO,MAAMg0B,EAA2B,KAAK,IACzCnB,GAAc,mBACdmB,EAA2B;AAAA,QAC/B;AAAA,MACF;AAAA,IAAA,GAGIE,IAAoBl0B,EAAM,MAAM;AACpC,YAAMyzB,IAAOL,EAAa;AAC1B,aAAO,KAAK,MAAMK,CAAI,MAAMA,IAAO,KAAKA,EAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AAAA,IAAA,CAC9E,GAEKU,KAAqBn0B,EAAM,MAAM,KAAK,IAAI,IAAIk0B,EAAkB,SAAS,CAAC,CAAC,GAE3EE,IAAep0B;AAAAA,MAAM,MACzB4O,EAAW,UAAU,OAAO,KAAKA,EAAW,MAAM,QAAQslB,EAAkB,KAAK;AAAA,IAAA,GAG7E,EAAC,OAAArO,GAAO,QAAQwO,MAAgBtY,GAAO,GAEvCuY,IAAiB10C,EAAS,MAAM;AAE9B,YAAA20C,KAAU,EADHzmB,EAAM,WAAUumB,KAAA,gBAAAA,EAAc,WAAU,QACjC;AAEb,aADI,IAAI,KAAK,aAAaE,EAAO,EAC9B,gBAAkB,EAAA;AAAA,IAAA,CAC7B,GAEKC,IAAmB,MACvB,IAAI,KAAK,aAAaF,EAAe,OAAO;AAAA,MAC1C,OAAO;AAAA,MACP,aAAa;AAAA,MACb,sBAAsB;AAAA,MACtB,uBAAuBJ,EAAkB;AAAA,MACzC,uBAAuBA,EAAkB;AAAA,MACzC,UAAU;AAAA,IACX,CAAA,EAAE,QAECO,IAAoBz0B,EAAM,MAAM8N,EAAM,eAAe0mB,GAAkB,GAEvEE,IAAY,CAAC7zC,MAAsB;AAGnC,UAAA,EAAC,OAAAhB,GAAS,IAAA+uB;AACd,UAAI,CAACd,EAAM,YAAYjuB,OAAU,MAAM;AAC/B,cAAA4zC,KAAOL,EAAa,QAAQvyC,GAC5B0C,KAAM+vC,EAAY,OAClB9vC,KAAMgwC,EAAY,OAClBmB,KAAaR,GAAmB,OAChC,EAAC,MAAAS,GAAQ,IAAA9mB;AAEf,QAAAjuB,KAAQ,KAAK,OAAOA,KAAQ0D,MAAOkwC,EAAI,IAAIA,KAAOlwC,KAAMkwC,IAExD5zC,KAAQ,KAAK,MAAMA,KAAQ80C,EAAU,IAAIA,IAE9B/lB,EAAA,QAAQ/uB,KAAQ2D,KAAOoxC,KAAOrxC,KAAMC,KAAO3D,KAAQ0D,KAAOqxC,KAAOpxC,KAAMD,KAAO1D;AAAA,MAC3F;AAAA,IAAA,GAGIg1C,IAAS,CAACF,IAAa,MAAM;AAC7B,UAAA/lB,EAAW,UAAU,MAAM;AAC7B,QAAAA,EAAW,QAAQ0kB,EAAY;AAC/B;AAAA,MACF;AACA,MAAAoB,EAAU,IAAKC,CAAU;AAAA,IAAA,GAGrBG,KAAW,CAACH,IAAa,MAAM;AAC/B,UAAA/lB,EAAW,UAAU,MAAM;AAC7B,QAAAA,EAAW,QAAQd,EAAM,OAAO0lB,EAAY,QAAQF,EAAY;AAChE;AAAA,MACF;AACA,MAAAoB,EAAU,KAAKC,CAAU;AAAA,IAAA,GAGrBI,IAAY,CAACjyC,MAA2B;AAC5C,MAAAA,EAAM,eAAe,GACrBA,EAAM,yBAAyB;AAAA,IAAA;AAGjC,IAAAwhB;AAAA,MACEwuB;AAAA,MACA,CAAChwC,MAAU;AACT,cAAM,EAAC,MAAAkyC,IAAM,QAAAC,IAAQ,SAAAC,IAAS,SAAAC,OAAWryC;AAEzC,YAAI,EAAAgrB,EAAM,YAAYA,EAAM,YAAYmnB,MAAUC,MAAWC,QAG7DJ,EAAUjyC,CAAK,GACX,CAAAowC,IAMJ;AAAA,cADYkC,MACR,CAACxC,IAASL,EAAS,EAAE,SAASyC,EAAI,GAAG;AAIvC,gBADc9B,IAAA,IACV8B,OAASpC,IAAS;AACpB,cAAAyC,GAAiBvyC,GAAO+xC,CAAM;AAC9B;AAAA,YACF;AACA,YAAIG,OAASzC,MACX8C,GAAiBvyC,GAAOgyC,EAAQ;AAElC;AAAA,UACF;AAEA,cAAIE,OAASrC,IAAa;AACxB,YAAAkC,EAAOZ,EAAuB,KAAK;AACnC;AAAA,UACF;AACA,cAAIe,OAAStC,IAAe;AAC1B,YAAAoC,GAASb,EAAuB,KAAK;AACrC;AAAA,UACF;AACA,cAAIe,OAASvC,IAAW;AACtB,YAAA7jB,EAAW,QAAQ0kB,EAAY;AAC/B;AAAA,UACF;AACA,UAAI0B,OAASxC,OACX5jB,EAAW,QAAQ4kB,EAAY;AAAA;AAAA,MAEnC;AAAA,MACA,EAAC,QAAQ7xC,GAAS,WAAW,UAAS;AAAA,IAAA,GAGxC2iB;AAAA,MACEwuB;AAAA,MACA,CAAChwC,MAAmC;AAGlC,cAAM,EAAC,QAAAmyC,IAAQ,SAAAC,IAAS,SAAAC,GAAA,IAAWryC;AAEnC,QAAIgrB,EAAM,YAAYA,EAAM,YAAYmnB,MAAUC,MAAWC,OAE7DJ,EAAUjyC,CAAK,GACHsyC,MACElC,IAAA,IACTnlB,EAAA,UAAUa,EAAW,KAAK;AAAA,MACjC;AAAA,MACA,EAAC,QAAQjtB,GAAS,WAAW,QAAO;AAAA,IAAA;AAIhC,UAAA0zC,KAAmB,CAACvyC,GAAwBwyC,OAAoC;AACpF,YAAM,EAAC,MAAA7uB,GAAA,IAAQ3jB,KAAS;AAExB,UAAI,CAACgrB,EAAM,YAAY,CAACA,EAAM,UAAU;AAClC,YAAAynB,GAAazyC,CAAK,KAEhB2jB,OAAS,eAAe3jB,EAAM;AAAQ;AAEhC,QAAAsyC,MAEZE,GAAQ,CAAC;AACT,cAAMj+B,KAAY08B,EAAkB,OAC9BY,KAAaV,EAAuB,OACpC7qB,KAAQuqB,EAAc,OACtBnyB,KAAWqyB,EAAiB;AAGlC,QAAAb,IAAmB,WAAW,MAAM;AAClC,cAAIwC,KAAQ;AACZ,UAAAvC,IAAoB,YAAY,MAAM;AAK5B,YAAAqC,GAAAE,KAAQn+B,KAAY,IAAIs9B,EAAU,GAC1Ca;AAAA,aACCh0B,EAAQ;AAAA,WACV4H,EAAK;AAAA,MACV;AAAA,IAAA,GAGImsB,KAAe,CAAC/b,MACpBA,EAAI,SAAS,aAAaA,EAAI,SAAS,aAEnCic,KAA2B,CAAC3yC,MAA2B;AAGvD,MAAAyyC,GAAazyC,CAAK,KAChBA,EAAM,SAAS,aAAaA,EAAM,WAMxCiyC,EAAUjyC,CAAK,GACHsyC,MACZM,GAAW,EAAK,GAEX3nB,EAAA,UAAUa,EAAW,KAAK;AAAA,IAAA,GAG3B8mB,KAAa,CAACjzC,MAAgB;AAG9B,UAAA;AACF,QAAAD,GAAWC,GAAI,CAAC,SAAS,MAAM,WAAWgzC,IAAW,EAAK,CAAC,GAC3DjzC,GAAWC,GAAI,CAAC,SAAS,MAAM,YAAYgzC,IAAW,EAAK,CAAC;AAAA,MAAA,QACtD;AAAA,MAER;AAAA,IAAA,GAEIL,KAAc,MAAM;AACxB,mBAAapC,CAAgB,GAC7B,cAAcC,CAAiB,GACZD,IAAA,QACCC,IAAA;AAAA,IAAA,GAGhB0C,IAAU/1C,EAAS,MAAM;AAC7B,YAAMg2C,IAAoB;AAAA,QACxB,KAAK;AAAA,UACH,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,QACA,MAAM;AAAA,UACJ,GAAG;AAAA,QACL;AAAA,MAAA,GAGIC,KAAoB;AAAA,QACxB,KAAK;AAAA,UACH,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,QACA,MAAM,EAAC,GAAG,4DAA2D;AAAA,MAAA,GAGjEC,KAAoB;AAAA,QACxB,OAAS,CAAC,EAAC,QAAQ,CAAChoB,EAAM,SAAW,GAAA,OAAO,UAAU,YAAY,WAAW;AAAA,QAC7E,UAAY;AAAA,QACZ,MAAQ;AAAA,QACR,UAAYA,EAAM,YAAYA,EAAM;AAAA,QACpC,iBAAiBA,EAAM,YAAYA,EAAM,WAAW,KAAO;AAAA,QAC3D,iBAAiBmB,EAAW;AAAA,MAAA,GAGxB8mB,KAAiB;AAAA,QACrB,eAAe;AAAA,QACf,OAASlsB,EAAQ,QAAQ,MAAM;AAAA,MAAA,GAG3BvnB,KAAU,CAACQ,IAAwBwyC,OAA2C;AAClF,QAAI,CAACxnB,EAAM,YAAY,CAACA,EAAM,aAC5BinB,EAAUjyC,EAAK,GACf4yC,GAAW,EAAI,GAGf7rB,EAAQ,QAAQ,IAChBwrB,GAAiBvyC,IAAOwyC,EAAO;AAAA,MACjC,GAGIU,KAAiB;AAAA,QACrB,QAAQ;AAAA,UACN,GAAGF;AAAA,UACH,cAAchoB,EAAM,kBAAkB;AAAA,UACtC,qBAAqB;AAAA,QACvB;AAAA,QACA,KAAK;AAAA,UACH,GAAGioB;AAAA,UACH,GAAGH,EAAkB;AAAA,QACvB;AAAA,QACA,MAAM;AAAA,UACJ,GAAGA,EAAkB;AAAA,QACvB;AAAA,QACA,MAAM;AAAA,UACJ,MAAM;AAAA,QACR;AAAA,QACA,SAAS,CAACt0C,OAAagB,GAAQhB,IAAGuzC,CAAM;AAAA,MAAA,GAGpCoB,KAAiB;AAAA,QACrB,QAAQ;AAAA,UACN,GAAGH;AAAA,UACH,cAAchoB,EAAM,kBAAkB;AAAA,UACtC,qBAAqB;AAAA,QACvB;AAAA,QACA,KAAK;AAAA,UACH,GAAGioB;AAAA,UACH,GAAGF,GAAkB;AAAA,QACvB;AAAA,QACA,MAAM;AAAA,UACJ,GAAGA,GAAkB;AAAA,QACvB;AAAA,QACA,MAAM;AAAA,UACJ,MAAM;AAAA,QACR;AAAA,QACA,SAAS,CAACv0C,OAAuBgB,GAAQhB,IAAGwzC,EAAQ;AAAA,MAAA;AAG/C,aAAA;AAAA,QACL,KAAK;AAAA,UACH,GAAIhnB,EAAM,WAAWkoB,KAAiBC;AAAA,QACxC;AAAA,QACA,QAAQ;AAAA,UACN,GAAKnoB,EAAM,WAA4BmoB,KAAjBD;AAAA,QACxB;AAAA,MAAA;AAAA,IACF,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrfD,UAAMloB,IAAQY,GAWRX,IAAOY,GAIPnM,IAAQ2f,MAKRlT,IAAaC,GAAM,MAAMpB,EAAM,EAAE,GAEjCooB,IAAUt2C;AAAA,MACd,MAAA;;AAAQ,mBAAAoe,IAAAwE,EAAM,YAAN,gBAAAxE,EAAA,KAAAwE,GAAgB,CAAA,GAAI,GAAG,aAAY,IAAI,SAAS,KAAKsL,EAAM,UAAU;AAAA;AAAA,IAAA,GAEzEqoB,IAAan2B,EAAM,MAAM,GAAGiP,EAAW,KAAK,YAAY,GAExDoB,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,WAAWkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAChD,gBAAgBA,EAAM;AAAA,MACtB,UAAYA,EAAM;AAAA,IAClB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgEF,UAAMA,IAAQY,GAiCRX,IAAOY,GAwBPC,IAAaC,kBAElB,GAEKI,IAAaC,MAEbknB,IAAct0B,GAAY,MAAMgM,EAAM,SAAS,GAAG,GAElD4K,IAAaJ,GAAc,MAAMxK,EAAM,KAAK,GAE5C7qB,IAAQ8X,EAA6B,IAAI,GAEzC,EAAC,SAAA8O,EAAA,IAAWJ,GAASxmB,GAAO;AAAA,MAChC,cAAc6qB,EAAM;AAAA,IAAA,CACrB,GAEKuoB,IAAWr2B,EAAM,MAAM8N,EAAM,WAAW,GAAGmB,EAAW,KAAK,SAAS,GACpEqnB,IAAOv7B,EAAc,CAAC,GAAG6T,EAAW,KAAK,CAAC,GAC1C2nB,IAAax7B,EAAY,EAAE,GAC3By7B,IAAuBz7B,EAAa6T,EAAW,MAAM,SAAS,CAAC,GAC/D6nB,IAAiB17B,EAAY,EAAE,GAC/B27B,IAAY37B,EAAc,CAAA,CAAE,GAC5B47B,IAAc57B,EAAc,CAAA,CAAE,GAC9B67B,IAAgB77B,EAAc,CAAA,CAAE;AAEtC,IAAA0F,GAAQmO,GAAY0nB,GAAM;AAAA,MACxB,WAAW;AAAA,MACX,WAAW;AAAA,QACT,KAAK,CAAC1yC,MAAM,CAAC,GAAGA,CAAC;AAAA,MACnB;AAAA,IAAA,CACD;AAEK,UAAAysB,IAAkBzwB,EAAS,MAAM;AAAA,MACrC84B,EAAW;AAAA,MACX;AAAA,QACE,CAAC,gBAAgB5K,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,QAC/C,UAAUA,EAAM;AAAA,QAChB,OAAOjE,EAAQ;AAAA,MACjB;AAAA,IAAA,CACD,GAEKgtB,IAAcj3C,EAAS,MAAM02C,EAAK,MAAM,SAASC,EAAW,KAAK,CAAC,GAClEO,IAAYl3C;AAAA,MAAS,MACzB22C,EAAW,UAAU,KAAK,KAAQ,CAACzoB,EAAM,aAAayoB,EAAW,KAAK;AAAA,IAAA,GAElEQ,IAAiB/2B,EAAM,MAAMs2B,EAAK,MAAM,WAAWF,EAAY,KAAK,GACpEY,IAAmBh3B,EAAM,MAAM,CAAC82B,EAAU,SAAS,CAACD,EAAY,KAAK,GAErEI,IAAYr3C,EAAS,OAAO;AAAA,MAChC,eAAekuB,EAAM;AAAA,MACrB,kBAAkBA,EAAM;AAAA,MACxB,QAAAopB;AAAA,MACA,kBAAkBF,EAAiB;AAAA,MACnC,UAAUlpB,EAAM;AAAA,MAChB,kBAAkBA,EAAM;AAAA,MACxB,eAAe8oB,EAAc;AAAA,MAC7B,MAAM9oB,EAAM;AAAA,MACZ,YAAY;AAAA,QACV,GAAGA,EAAM;AAAA,QACT,UAAUA,EAAM;AAAA,QAChB,MAAMA,EAAM;AAAA,QACZ,IAAIuoB;AAAA,QACJ,OAAOE;AAAA,MACT;AAAA,MACA,eAAe;AAAA,QACb,OAAO3E;AAAA,QACP,SAAShH;AAAA,QACT,QAAQ0D;AAAA,MACV;AAAA,MACA,SAAS+H;AAAA,MACT,WAAWvoB,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,aAAa6oB,EAAY;AAAA,MACzB,aAAaE,EAAY;AAAA,MACzB,WAAWC,EAAU;AAAA,MACrB,gBAAgBC,EAAe;AAAA,MAC/B,eAAejpB,EAAM;AAAA,MACrB,OAAOsoB,EAAY;AAAA,MACnB,aAAatoB,EAAM;AAAA,MACnB,aAAaA,EAAM;AAAA,MACnB,WAAAqpB;AAAA,MACA,UAAUrpB,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,MAAMA,EAAM;AAAA,MACZ,OAAOA,EAAM;AAAA,MACb,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,gBAAgBA,EAAM;AAAA,MACtB,YAAYA,EAAM;AAAA,MAClB,MAAMwoB,EAAK;AAAA,IACX,EAAA,GAEIc,IAAY,CAAC91C,MAAkC;AACnD,UAAIwsB,EAAM,UAAU;AAElB,QADexsB,EAAE,OACV,KAAK;AACZ;AAAA,MACF;AAEA,MAAAysB,EAAK,WAAWzsB,CAAC;AAAA,IAAA,GAGb+1C,IAAU,CAAC/1C,MAAkC;AAC7C,MAAAwsB,EAAM,YAAYA,EAAM,iBAI5BjE,EAAQ,QAAQ,IAChBkE,EAAK,SAASzsB,CAAC;AAAA,IAAA,GAGXuwC,IAAS,CAACvwC,MAAkC;AAChD,MAAAuoB,EAAQ,QAAQ,IAChBkE,EAAK,QAAQzsB,CAAC;AAAA,IAAA,GAGVswC,IAAU,CAACtwC,MAAsC;;AACrD,YAAMzB,IAAQ,OAAOyB,KAAM,WAAWA,IAAKA,EAAE,OAA4B;AAIrE,UAFJk1C,EAAqB,QAAQ,KAEzBx4B,IAAA8P,EAAM,cAAN,QAAA9P,EAAiB,SAASne,EAAM,OAAO,CAAC,MAAMA,EAAM,SAAS,GAAG;AAClE,QAAIoD,EAAM,UACRA,EAAM,MAAM,QAAQ;AAEtB;AAAA,MACF;AAII,UAFJszC,EAAW,QAAQ12C,IAEfoe,KAAA6P,EAAM,cAAN,QAAA7P,GAAiB,SAASpe,EAAM,OAAOA,EAAM,SAAS,CAAC,IAAI;AAC7D,QAAAq3C,EAAOr3C,EAAM,MAAM,GAAGA,EAAM,SAAS,CAAC,CAAC;AACvC;AAAA,MACF;AAEU,MAAA62C,EAAA,QAAQ5oB,EAAM,aAAajuB,CAAK,KAAK,CAACg3C,EAAY,QAAQ,CAACh3C,CAAK,IAAI,CAAA,GAClE82C,EAAA,QAAQ7oB,EAAM,aAAajuB,CAAK,IAAI,CAAC,IAAI,CAACA,CAAK,GAC3D+2C,EAAc,QAAQC,EAAY,QAAQ,CAACh3C,CAAK,IAAI,IAEpDkuB,EAAK,aAAa2oB,EAAU,OAAOC,EAAY,OAAOC,EAAc,KAAK;AAAA,IAAA,GAGrEtI,KAAW,CAAChtC,MAA6B;AAC7C,MAAIwsB,EAAM,gBACR8jB,EAAQtwC,CAAC,GAEJu1C,EAAY,SACfK,EAAOX,EAAW,KAAK;AAAA,IAE3B,GAGI3L,IAAY,CAACtpC,MAAqC;AACtD,UAAIA,EAAE,QAAQ,WAAW,CAACwsB,EAAM,cAAc;AAC5C,QAAAopB,EAAOX,EAAW,KAAK;AACvB;AAAA,MACF;AAEA,OACGj1C,EAAE,QAAQ,eAAeA,EAAE,QAAQ,aACpCwsB,EAAM,kBACNyoB,EAAW,UAAU,MACrBC,EAAqB,SACrBF,EAAK,MAAM,SAAS,IAEpBa,EAAUb,EAAK,MAAMA,EAAK,MAAM,SAAS,CAAC,CAAC,IAE3CE,EAAqB,QAAQ;AAAA,IAC/B;AAGF,IAAAlyB,GAAYsmB,GAAW,EAAC,QAAQ3nC,EAAM,CAAA;AAEhC,UAAAq0C,IAAY13C,EAAS,MAAM;AAC3B,UAACkuB,EAAM;AAIJ,eAAA,OAAOA,EAAM,aAAc,WAAWA,EAAM,YAAYA,EAAM,UAAU,KAAK,EAAE;AAAA,IAAA,CACvF,GAEKypB,IAAkB33C,EAAS,MAAM;AACjC,UAAC03C,EAAU;AAIf,eAAO,IAAI,OAAO,IAAIpjB,GAAkBojB,EAAU,KAAK,CAAC,IAAI;AAAA,IAAA,CAC7D,GAEKJ,IAAS,CAAC3X,MAAuB;AAC9B,MAAAA,KAAAA,KAAOgX,EAAW,OAAO,KAAK;AAErC,YAAMiB,IAAUD,EAAgB,QAC5BhY,EAAI,MAAMgY,EAAgB,KAAK,EAAE,IAAI,CAACE,MAAMA,EAAE,KAAA,CAAM,IACpD,CAAClY,CAAG,GACFmX,IAAsB,CAAA;AAE5B,iBAAWgB,KAAUF;AACf,YAAA,EAAAE,MAAW,MAAMb,EAAY,SAAS,CAAC/oB,EAAM,aAAa4pB,CAAM,IAIhE;AAAA,cAAAtB,EAAY,SAASW,EAAe;AACtC;AAGFL,UAAAA,EAAU,KAAKgB,CAAM;AAAA;AAGvB,YAAMz2B,KAAW,CAAC,GAAG2N,EAAW,OAAO,GAAG8nB,CAAS;AACnD,MAAAH,EAAW,QAAQ,IACnBC,EAAqB,QAAQ,IAC7B5nB,EAAW,QAAQ3N,IACnB4I,EAAQ,QAAQ;AAAA,IAAA,GAGZstB,IAAY,CAAC5X,MAAuB;AACxC,YAAMoY,IAAWrB,EAAK,MAAM,SAAQ/W,KAAA,gBAAAA,EAAK,eAAc,EAAE;AACzD,MAAIoY,MAAa,OACjBlB,EAAe,QAAQH,EAAK,MAAM,OAAOqB,GAAU,CAAC,EAAE,YACtD/oB,EAAW,QAAQ0nB,EAAK;AAAA,IAAA;AAIb,WAAA3lB,EAAA;AAAA,MACX,MAAM,MAAM;AACV,QAAA9G,EAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,SAAS5mB;AAAA,MACT,OAAO,MAAM;AACX,QAAA4mB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjYD,UAAMiE,IAAQY,GA8BRX,IAAOY,GAIP,EAAC,OAAA1rB,GAAO,YAAAgsB,GAAY,qBAAA4J,GAAqB,SAAA+Y,GAAS,UAAAtD,GAAU,QAAAuD,GAAQ,OAAAC,GAAO,MAAAC,EAAI,IACnF9Y,GAAanL,GAAOC,CAAI,GAEpB2K,IAAaJ,GAAc,MAAMxK,EAAM,KAAK,GAE5CuC,IAAkBzwB,EAAS,MAAM;AAAA,MACrC84B,EAAW;AAAA,MACX5K,EAAM,YAAY,2BAA2B;AAAA,MAC7C;AAAA,QACE,CAAC,gBAAgBA,EAAM,IAAI,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,MAC1C;AAAA,IAAA,CACD,GAEK8pB,IAAiBh4C,EAAwB,OAAO;AAAA,MACpD,QAAQkuB,EAAM,WAAW,SAAS;AAAA,IAClC,EAAA;AAEW,WAAA6C,EAAA;AAAA,MACX,MAAAohB;AAAA,MACA,SAAS9uC;AAAA,MACT,OAAA6uC;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5DD,UAAMhkB,IAAQY,GAmBR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,eAAekuB,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,IAC9C,EAAA,GACI+pB,IAAY73B,EAAM,MAAM,CAAC,CAAC8N,EAAM,UAAU,CAAC,CAACA,EAAM,UAAU,GAC5DgqB,IAAa93B,EAAM,MAAM,CAAC,CAAC8N,EAAM,WAAW,CAAC,CAACA,EAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCrE,UAAMA,IAAQY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAd,UAAMZ,IAAQY,GAYR2B,IAAkBzwB,EAAS,MAAM;AACrC,YAAMm4C,IAAajqB,EAAM,QAAQ,KAAQA,EAAM;AACxC,aAAA;AAAA,QACL,oBAAoBA,EAAM;AAAA,QAC1B,yBAAyBiqB,MAAe;AAAA,QACxC,CAAC,yBAAyBA,CAAU,EAAE,GAAG,OAAOA,KAAe;AAAA,QAC/D,uBAAuBjqB,EAAM;AAAA,MAAA;AAAA,IAC/B,CACD,GACK8S,IAAc5gB,EAAM,MAAO8N,EAAM,aAAa,KAAO,OAAOA,EAAM,GAAI;AAE5E,WAAAyS,GAAQ9L,IAAuB;AAAA,MAC7B,UAAUzU,EAAM,MAAM8N,EAAM,QAAQ;AAAA,IAAA,CACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbD,UAAMA,IAAQY,GAkCRhM,IAAQ0c,MAERW,IAAaxI,GAAO9C,IAAuB,IAAI,GAE/C,EAAC,cAAA2C,EAAA,IAAgBJ,GAAelJ,CAAK,GAErCuG,IAASrU,EAAM,MAAM,CAAC8N,EAAM,UAAUsJ,EAAa,KAAK,GACxD4gB,IAAch4B;AAAAA,MAAM,MACxB+f,KAAA,QAAAA,EAAY,SAAS,QAAQ,OAAOjS,EAAM,SAAS,WAAYuG,EAAO,QAAoBwM,KAAZ/S,EAAM;AAAA,IAAM,GAGtFmqB,IAAWr4C;AAAA,MACf,MACEkuB,EAAM,UACNuG,EAAO,SACPvG,EAAM,UACN,CAAC,KAAK,eAAe,UAAU,QAAQ,EAAE,SAASA,EAAM,GAAG;AAAA,IAAA,GAGzDuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,mBAAmBkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY,QAAQA,EAAM,YAAY;AAAA,MAClF,0BAA0BmqB,EAAS;AAAA,MACnC,QAAUnqB,EAAM;AAAA,MAChB,UAAYA,EAAM;AAAA,IAClB,EAAA,GAEIsgB,IAAgBxuC,EAAS,MAAM;AACnC,YAAMs4C,IAAa,CAAA;AACnB,aAAIpqB,EAAM,YACJ,CAACpL,KAAS,CAACA,EAAM,UAEnBw1B,EAAW,OAAO,WAEhBpqB,EAAM,aAERoqB,EAAW,WAAW,MAGnBA;AAAA,IAAA,CACR;;;;;;;;;;;;;;;;;;;;;;ACtDD,UAAMpqB,IAAQY,GAKR,EAAC,QAAA0W,GAAQ,QAAArD,GAAQ,MAAA/S,GAAM,SAAAyW,EAAA,IAAWlK,MAElC4c,IAAiB,CACrBC,MACGziB,GAAKyiB,GAAS,CAAC,YAAY,SAAS,cAAc,aAAa,CAAC;AAExD,WAAAznB,EAAA;AAAA,MACX,QAAAyU;AAAA,MACA,MAAApW;AAAA,MACA,SAAAyW;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9CD,UAAM3X,IAAQY,GAkBR3pB,IAAYrF,GAAa,MAAMouB,EAAM,KAAK,GAE1CuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,YAAYkuB,EAAM;AAAA,MAClB,aAAaA,EAAM,SAAS,CAACA,EAAM;AAAA,MACnC,oBAAoB,CAACA,EAAM,YAAYA,EAAM,cAAcA,EAAM;AAAA,MACjE,qBAAqB,CAACA,EAAM,YAAYA,EAAM,cAAcA,EAAM,SAAS,CAACA,EAAM;AAAA,MAClF,eAAeA,EAAM;AAAA,MACrB,YAAY,CAACA,EAAM,YAAYA,EAAM;AAAA,MACrC,iBAAiB,CAACA,EAAM,YAAYA,EAAM;AAAA,MAC1C,CAAC/oB,EAAU,KAAK,GAAG,CAAC+oB,EAAM,YAAYA,EAAM,UAAU;AAAA,MACtD,OAASA,EAAM;AAAA,MACf,iBAAiBA,EAAM;AAAA,IACvB,EAAA;;;;;;;;;;;;;;;;;;;;;;ACPF,UAAMC,IAAOY,GASP2e,IAAY,CAAChsC,MAAuB;AACxC,MAAAysB,EAAK,UAAUzsB,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBlB,UAAMwsB,IAAQY,GA2BRX,IAAOY,GAIP0I,IAAoBz3B;AAAA,MAAS,MACjCk2B,GAAKhI,GAAO;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAEH,WAAAuJ,EAAkB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CxB,UAAMvJ,IAAQY,GAwCRX,IAAOY,GAWPC,IAAaC,kBAAqC,GAUlDwpB,IAAWt9B,EAA2C,IAAI,GAE1DrO,IAAO,MAAM;;AACjB,OAAAsR,IAAAq6B,EAAS,UAAT,QAAAr6B,EAAgB;AAAA,IAAK,GAEjBgR,IAAO,MAAM;;AACjB,OAAAhR,IAAAq6B,EAAS,UAAT,QAAAr6B,EAAgB;AAAA,IAAK;AAMV,WAAA2S,EAAA;AAAA,MACX,MAAAjkB;AAAA,MACA,MAAAsiB;AAAA,MACA,QAPa,MAAM;;AACnB,SAAAhR,IAAAq6B,EAAS,UAAT,QAAAr6B,EAAgB;AAAA,MAAO;AAAA,IAMvB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjGD,UAAM8P,IAAQY,GAgBR4pB,IAAet4B,EAAM,MAAO8N,EAAM,QAAQ,QAAQ,SAAY,YAAa,GAE3EyqB,IAAiB7gB,GAAoB,MAAM5J,EAAM,SAAS,GAE1DuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,WAAWkuB,EAAM;AAAA,MACjB,CAAC,UAAUA,EAAM,MAAM,EAAE,GAAGA,EAAM,WAAW;AAAA,MAC7C,CAAC,MAAMA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC3C,CAAC,SAASA,EAAM,KAAK,EAAE,GAAGA,EAAM,UAAU;AAAA,MAC1C,iBAAiBA,EAAM,eAAe;AAAA,MACtC,CAAC,iBAAiBA,EAAM,UAAU,EAAE,GAAG,OAAOA,EAAM,cAAe;AAAA,IACnE,EAAA;AAEF,WAAAyS,GAAQvL,IAAoB;AAAA,MAC1B,KAAKhV,EAAM,MAAM8N,EAAM,GAAG;AAAA,MAC1B,WAAW9N,EAAM,MAAM8N,EAAM,SAAS;AAAA,IAAA,CACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BD,UAAMA,IAAQY,GA0BR,EAAC,cAAA0I,GAAc,mBAAAC,MAAqBL,GAAelJ,GAAO;AAAA,MAC9D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,GAEK8S,IAAc5gB,EAAM,MAAOoX,EAAa,QAAQyJ,KAAQ/S,EAAM,GAAI;;;;;;;;;;;;;;;;;;ACtDxE,UAAMA,IAAQY,GAaR3pB,IAAYrF,GAAa,MAAMouB,EAAM,KAAK,GAE1CuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,YAAYkuB,EAAM;AAAA,MAClB,iBAAiBA,EAAM;AAAA,MACvB,CAAC/oB,EAAU,KAAK,GAAG+oB,EAAM,UAAU;AAAA,MACnC,OAASA,EAAM;AAAA,IACf,EAAA;;;;;;;IC7BI0qB,KAAW,CAACx3C,GAA2BnB,MAC3CmB,EAAG,aAAa,iBAAiBnB,CAAK,GACzB44C,KAAA;AAAA,EACb,QAAQz3C,GAAI2wB,GAAiC;AAClC,IAAA6mB,GAAAx3C,GAAI2wB,EAAQ,KAAK;AAAA,EAC5B;AAAA,EACA,QAAQ3wB,GAAI2wB,GAAiC;AAClC,IAAA6mB,GAAAx3C,GAAI2wB,EAAQ,KAAK;AAAA,EAC5B;AACF,GCRM+mB,KAAa,CACjB/mB,GACA3wB,MACG;AACH,QAAM,EAAC,WAAA23C,GAAW,KAAAC,GAAK,OAAA/4C,EAAA,IAAS8xB,GAE1BjJ,IAAU,OAAO,KAAKiwB,KAAa,CAAE,CAAA,GAGrChL,IAAa,OAAO9tC,KAAU,WAAWA,EAAM,MAAMyzB,EAAc,IAAIzzB;AAG7E,MAAImB,EAAG,QAAQ,YAAY,MAAM,KAAK;AACpC,UAAM69B,IAAO79B,EAAG,aAAa,MAAM,KAAK;AACpC,IAAAwyB,GAAW,KAAKqL,CAAI,KACtBnW,EAAQ,KAAKmW,EAAK,QAAQtL,IAAS,EAAE,CAAC;AAAA,EAE1C;AAKA,eAAM,UAAU,OACb,MAAM,CAAA,GAAI,CAACqlB,GAAKjL,CAAU,CAAC,EAC3B,QAAQ,CAAC8J,MAAM,OAAOA,KAAM,YAAY/uB,EAAQ,KAAK+uB,CAAC,CAAC,GAGnD/uB,EAAQ,OAAO,CAAC+uB,GAAGp6B,GAAOF,MAAQs6B,KAAKt6B,EAAI,QAAQs6B,CAAC,MAAMp6B,CAAK;AACxE,GAEM6L,KAAS,CAAC2vB,GAA8B73C,MAA8B;AAChE,EAAA63C,EAAA,QAAQ,CAACC,MAAa;AACxB,UAAAl/B,IAAS,SAAS,eAAek/B,CAAQ;AAE/C,IAAIl/B,MAAW,QACbA,EAAO,cAAc,IAAI,MAAM,WAAW,CAAC;AAAA,EAC7C,CACD,GACD,WAAW,MAAMm/B,GAAgBF,GAAW73C,CAAE,GAAG,EAAE;AACrD,GAEM+3C,KAAkB,CAACF,GAA8B73C,MAA8B;AACnF,MAAIg4C,IAAU;AACJ,EAAAH,EAAA,QAAQ,CAACC,MAAa;AACxB,UAAAl/B,IAAS,SAAS,eAAek/B,CAAQ;AAE/C,IAAIl/B,KAAA,QAAAA,EAAQ,UAAU,SAAS,YACnBo/B,IAAA,KAERp/B,KAAA,QAAAA,EAAQ,UAAU,SAAS,eACnBo/B,IAAA;AAAA,EACZ,CACD,GACDh4C,EAAG,aAAa,iBAAiBg4C,IAAU,SAAS,OAAO,GAC3Dh4C,EAAG,UAAU,OAAOg4C,IAAU,cAAc,eAAe,GAC3Dh4C,EAAG,UAAU,IAAIg4C,IAAU,kBAAkB,WAAW;AAC1D,GAEMC,KAAe,CACnBj4C,GACA2wB,MACG;AAEG,QAAAjJ,IAAUgwB,GAAW/mB,GAAS3wB,CAAE;AACtC,EAAI0nB,EAAQ,WAAW,MAGnB1nB,EAAG,YACFA,EAAA,oBAAoB,SAASA,EAAG,QAAQ,GAE7CA,EAAG,WAAW,MAAMkoB,GAAOR,GAAS1nB,CAAE,GACnCA,EAAA,iBAAiB,SAASA,EAAG,QAAQ,GAGxCA,EAAG,aAAa,iBAAiB0nB,EAAQ,KAAK,GAAG,CAAC,GAClDqwB,GAAgBrwB,GAAS1nB,CAAE;AAC7B,GAMek4C,KAAA;AAAA,EACb,SAASD;AAAA,EACT,SAASA;AAAA,EACT,UAAUj4C,GAAsB;AAC3B,IAAAA,EAAA,oBAAoB,SAASA,EAAG,QAAQ,GAC3CA,EAAG,gBAAgB,eAAe,GAClCA,EAAG,gBAAgB,eAAe;AAAA,EACpC;AACF,GCnFe8wB,KAAA;AAAA,EACb,QAAQ9wB,GAAI2wB,GAAS;AAEnB,QAAI,CADaN,GAAoBM,EAAQ,KAAK;AACnC;AAEf,UAAMsI,IAAO1I,GAAeI,EAAQ,OAAO3wB,CAAE;AAE7C,IAAI,CAACi5B,EAAK,WAAW,CAACA,EAAK,SAC3BrJ,GAAK5vB,GAAI2wB,GAAS;AAAA,MAChB,GAAGD,GAAsBC,GAAS3wB,CAAE;AAAA,MACpC,GAAGi5B;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EACA,QAAQj5B,GAAI2wB,GAAS;AAEnB,QAAI,CADaN,GAAoBM,EAAQ,KAAK;AACnC;AAEf,UAAMsI,IAAO1I,GAAeI,EAAQ,OAAO3wB,CAAE;AAE7C,IAAI,CAACi5B,EAAK,WAAW,CAACA,EAAK,UAE3BlJ,GAAO/vB,CAAE,GACT4vB,GAAK5vB,GAAI2wB,GAAS;AAAA,MAChB,GAAGD,GAAsBC,GAAS3wB,CAAE;AAAA,MACpC,GAAGi5B;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EACA,cAAcj5B,GAAI;AAChB,IAAA+vB,GAAO/vB,CAAE;AAAA,EACX;AACF,GChCM4vB,KAAO,CAAC5vB,GAA0B2wB,MAAwC;AAC9E,EAAI3wB,EAAG,gBAAcA,EAAG,aAAa;AAC/B,QAAA,EAAC,KAAA43C,GAAK,OAAA/4C,EAAS,IAAA8xB,GACf/T,IAAW,OAAO/d,KAAU,YAAYA,MAAU,MAClD+8B,IAAUgc,MAEZ,OAAO/4C,KAAU,WACfA,IACA+d,IACE/d,EAAM,WAAWA,EAAM,UACvB;AACR,EAAAmB,EAAG,eAAe27B,GAAaC,GAAS57B,GAAI4c,IAAW+X,GAAK91B,GAAO,CAAC,WAAW,SAAS,CAAC,IAAI,CAAE,CAAA;AACjG,GAEes5C,KAAA;AAAA,EACb,SAASvoB;AAAA,EACT,SAASA;AAAA,EACT,cAAc5vB,GAAI;AAChB,IAAIA,EAAG,gBAAcA,EAAG,aAAa;EACvC;AACF,GClBeo4C,KAAA;AAAA,EACb,QAAQp4C,GAAI2wB,GAAS;AACb,UAAAvS,IAAWiS,GAAoBM,EAAQ,KAAK;AAClD,QAAI,CAACvS;AAAU;AAEf,UAAM6a,IAAO1I,GAAeI,EAAQ,OAAO3wB,CAAE;AAE7C,IAAI,CAACi5B,EAAK,WAAW,CAACA,EAAK,SAE3BrJ,GAAK5vB,GAAI2wB,GAAS;AAAA,MAChB,gBAAgB;AAAA,MAChB,GAAGD,GAAsBC,GAAS3wB,CAAE;AAAA,MACpC,OAAOi5B,EAAK,SAASA,EAAK,WAAW;AAAA,MACrC,SAAS7a;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EACA,QAAQpe,GAAI2wB,GAAS;AACb,UAAAvS,IAAWiS,GAAoBM,EAAQ,KAAK;AAClD,QAAI,CAACvS;AAAU;AAEf,UAAM6a,IAAO1I,GAAeI,EAAQ,OAAO3wB,CAAE;AAE7C,IAAI,CAACi5B,EAAK,WAAW,CAACA,EAAK,UAC3BlJ,GAAO/vB,CAAE,GAET4vB,GAAK5vB,GAAI2wB,GAAS;AAAA,MAChB,gBAAgB;AAAA,MAChB,GAAGD,GAAsBC,GAAS3wB,CAAE;AAAA,MACpC,OAAOi5B,EAAK,SAASA,EAAK,WAAW;AAAA,MACrC,SAAS7a;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EACA,cAAcpe,GAAI;AAChB,IAAA+vB,GAAO/vB,CAAE;AAAA,EACX;AACF;;;;;;;;;;;;;;;;;ACxBA,UAAM8sB,IAAQY,GAMRX,IAAOY,GAUP0B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,UAAUkuB,EAAM;AAAA,IAChB,EAAA,GAEIurB,IAAU,CAAC/3C,MAAkC;AAC7C,MAACwsB,EAAM,YACTC,EAAK,SAASzsB,CAAC;AAAA,IACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkDF,UAAMwsB,IAAQY,GA0BRX,IAAOY,GAiBPnM,IAAQ2f,MAeRvT,IAAaC,kBAElB,GAEKI,IAAaC,GAAM,MAAMpB,EAAM,IAAI,WAAW;AAClC,IAAAqO,GAAAvN,GAAY,MAAMd,EAAM,aAAa;AAEjD,UAAAnsB,IAAUoZ,EAAwB,IAAI;AAE5C,IAAAuJ;AAAA,MACE;AAAA,MACA,MAAM;AACJ,QAAA5X,EAAK,KAAK;AAAA,MACZ;AAAA,MACA,EAAC,QAAQ/K,EAAO;AAAA,IAAA;AAGlB,UAAM,EAAC,SAAAkoB,EAAA,IAAWJ,GAAS9nB,GAAS;AAAA,MAClC,cAAcitB,EAAW,SAASd,EAAM,YAAY;AAAA,IAAA,CACrD,GAEK1O,IAAWrE,EAAI6T,EAAW,KAAK,GAC/B6U,IAAoB1oB,EAAI,EAAK,GAE7Bu+B,IAAet5B,EAAM,MAAM8N,EAAM,aAAa,MAAQc,EAAW,UAAU,EAAI,GAE/EmV,IAAc/jB;AAAAA,MAClB,MACE8N,EAAM,SAAS,MACdA,EAAM,SAAS,MAAQ2V,EAAkB,UAAU,MACnD3V,EAAM,SAAS,MAAQc,EAAW,UAAU;AAAA,IAAA,GAG3CqV,IAAqBjkB,EAAM,MAAM,CAACze,GAAYihB,EAAM,cAAc,CAAC,CAAC,GACpE+2B,IAAqB35C,EAAS,MAAM;AAAA,MACxC,EAAC,cAAc,CAACqkC,EAAmB,MAAK;AAAA,MACxCnW,EAAM;AAAA,IAAA,CACP,GACKyW,IAAmB3kC,EAAS,OAAO;AAAA,MACvC,SAASqkC,EAAmB,QAAQnW,EAAM,qBAAqB;AAAA,MAC/D,OAAOyrB,EAAmB;AAAA,IAC1B,EAAA,GAEI5P,IAAgB3pB,EAAM,MAAM,CAACze,GAAYihB,EAAM,MAAM,CAAC,GACtD6N,IAAkBzwB,EAAS,MAAM;AAAA;AAAA,MAErC;AAAA;AAAA,MACA,aAAakuB,EAAM,SAAS;AAAA,MAC5B;AAAA,QACE,MAAMc,EAAW,SAASxP,EAAS,UAAU;AAAA,QAC7C,CAAC,UAAU0O,EAAM,MAAM,EAAE,GAAG,CAAC,CAACA,EAAM;AAAA,MACtC;AAAA,IAAA,CACD,GAEKoX,IAActlC,EAA0B,OAAO;AAAA,MACnD,SAASgvB,EAAW;AAAA,MACpB,WAAWd,EAAM;AAAA,MACjB,MAAAphB;AAAA,IACA,EAAA,GAEI8jB,IAAwB,CAC5B/J,GACAgK,KAAoC,CAAA,MAEpC,IAAI/vB,GAAmB+lB,GAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,QAAQ9kB,EAAQ,SAAS;AAAA,MACzB,eAAe;AAAA,MACf,SAAS;AAAA,MACT,GAAG8uB;AAAA,MACH,aAAaxB,EAAW;AAAA,IAAA,CACzB,GAEGviB,IAAO,CAAC2iB,IAAU,OAAO;AAC7B,UACGA,MAAY,cAAcvB,EAAM,qBAChCuB,MAAY,SAASvB,EAAM,cAC5B;AACA,QAAAC,EAAK,gBAAgB;AACrB;AAAA,MACF;AAEM,YAAAjrB,KAAQ0tB,EAAsB,QAAQ,EAAC,YAAYnB,MAAY,IAAI,SAAAA,GAAQ;AAUjF,UARIA,MAAY,WACdtB,EAAKsB,GAASvsB,EAAK,GAEjBusB,MAAY,SACdtB,EAAKsB,GAASvsB,EAAK,GAErBirB,EAAK,QAAQjrB,EAAK,GAEdA,GAAM,kBAAkB;AAC1B,QAAAirB,EAAK,gBAAgB;AACrB;AAAA,MACF;AAEA,MAAAa,EAAW,QAAQ;AAAA,IAAA,GAGfI,IAAO,MAAM;AACjB,YAAMlsB,IAAQ0tB,EAAsB,QAAQ,EAAC,YAAY,IAAK;AAE9D,UADAzC,EAAK,QAAQjrB,CAAK,GACdA,EAAM,kBAAkB;AAC1B,QAAA8rB,EAAW,QAAQ,IACnBb,EAAK,gBAAgB;AACrB;AAAA,MACF;AACA,MAAAa,EAAW,QAAQ;AAAA,IAAA,GAGfkjB,IAAQ,MAAM;AAClB,MAAAxwB,GAAS,MAAM;AACT,QAAAwM,EAAM,YAAY,OACpBjE,EAAQ,QAAQ;AAAA,MAClB,CACD;AAAA,IAAA,GAGG2vB,IAAgB,MAAMxqB,KACtByqB,IAAe,MAAM;AACzB,MAAAr6B,EAAS,QAAQ,IACX0yB,KACD/jB,EAAA,SAASyC,EAAsB,OAAO,CAAC,GACxC1C,EAAM,SAAS,OAAM2V,EAAkB,QAAQ;AAAA,IAAA,GAE/CqB,IAAU,MAAM;AACpB,MAAA1lB,EAAS,QAAQ;AAAA,IAAA,GAEbs6B,IAAe,MAAM;AACpB,MAAA3rB,EAAA,UAAUyC,EAAsB,QAAQ,CAAC,GAC1C1C,EAAM,SAAS,OAAM2V,EAAkB,QAAQ;AAAA,IAAA;AAEpC,WAAAtgB,GAAAxhB,GAAS,aAAa,MAAM;AAChC,MAAAitB,EAAA,QAAQliB,EAAK,IAAIsiB,EAAK;AAAA,IAAA,CAClC,GAEY2B,EAAA;AAAA,MACX,MAAAjkB;AAAA,MACA,MAAAsiB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CC8JK2qB,KAAmB,IACnBC,KAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AArY3B,UAAM9rB,IAAQY,GAgCRX,IAAOY,GAIPC,IAAaC,GAAmBH,GAAA,YAAa,GAE7C0nB,IAAct0B,GAAY,MAAMgM,EAAM,OAAO,EAAC,WAAW,IAAM,QAAQ,WAAA,CAAW,GAClF+rB,IAAgB/3B,GAAY,MAAMgM,EAAM,SAAS,EAAC,WAAW,IAAM,QAAQ,WAAA,CAAW,GACtFgsB,IAAkBh4B,GAAY,MAAMgM,EAAM,WAAW,EAAC,WAAW,IAAM,QAAQ,WAAA,CAAW,GAC1FisB,IAAmBj4B,GAAY8M,GAAY,EAAC,WAAW,IAAM,QAAQ,YAAW,GAEhForB,IAAmBh6B,EAAM,MAAM,KAAK,IAAI65B,EAAc,SAASF,IAAkB,CAAC,CAAC,GACnFM,IAAqBj6B,EAAM,MAAM,KAAK,IAAI85B,EAAgB,SAASF,IAAoB,CAAC,CAAC,GAEzFM,IAAgBl6B,EAAM,MAAM,KAAK,KAAKi6B,EAAmB,QAAQD,EAAiB,KAAK,CAAC,GACxFG,IAAen6B,EAAM,MAAM8N,EAAM,UAAU,MAAM,GAEjDssB,IAAep6B,EAAM,MAAO8N,EAAM,UAAU,SAAS,UAAUA,EAAM,KAAM,GAE3E/oB,IAAYrF,GAAa06C,CAAY,GAErCC,IAAe,CAACC,OAAuBA,OAAeP,EAAiB,OACvEQ,IAAc,CAACC,OAAiB1sB,EAAM,WAAW,OAAOusB,EAAaG,EAAG,IAAI,MAAM,MAElFC,IAAgB,CAACD,OACrB1sB,EAAM,YACNusB,EAAaG,EAAG,KAChBT,EAAiB,QAAQ;AAAA,IAEzBS,KAAM,KACNA,KAAMN,EAAc,OAEhBQ,IAAgB96C,EAAS,MAAM66C,EAAc,CAAC,CAAC,GAC/CE,IAAe/6C,EAAS,MAAM66C,EAAcV,EAAiB,QAAQ,CAAC,CAAC,GACvEa,IAAeh7C,EAAS,MAAM66C,EAAcP,EAAc,KAAK,CAAC,GAChEW,IAAej7C,EAAS,MAAM66C,EAAcV,EAAiB,QAAQ,CAAC,CAAC,GAEvEe,IAAqB,CAAC;AAAA,MAC1B,MAAAC;AAAA,MACA,UAAAC;AAAA,MACA,KAAAC;AAAA,MACA,UAAAC;AAAA,MACA,WAAAC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAr4C;AAAA,MACA,UAAAwY;AAAA,MACA,UAAA6D;AAAA,MACA,MAAAi8B;AAAA,MACA,QAAAlsB;AAAA,IAAA,OAaK;AAAA,MACL,IAAI;AAAA,QACF,OAAS;AAAA,UACP;AAAA,UACA;AAAA,YACE,QAAU/P;AAAA,YACV,UAAY67B;AAAA,YACZ,aAAad,EAAa;AAAA,YAC1B,UAAUA,EAAa,SAAS,CAACc;AAAA,UACnC;AAAA,UACAD;AAAA,QACF;AAAA,QACA,MAAAK;AAAA,QACA,eAAelsB;AAAA,MACjB;AAAA,MACA,QAAQ;AAAA,QACN,IAAM8rB,KAAM,SAAS;AAAA,QACrB,OAAS,CAAC,aAAa,EAAC,eAAe,CAACA,MAAOd,EAAa,OAAM;AAAA,QAClE,cAAcp3C;AAAA,QACd,iBAAiB+qB,EAAM,gBAAgB;AAAA,QACvC,iBAAiBmtB,KAAM,KAAO;AAAA,QAC9B,iBAAiB1/B;AAAA,QACjB,gBAAgBA,KAAW2+B,EAAc,QAAQ;AAAA,QACjD,MAAQ;AAAA,QACR,MAAQe,KAAM,SAAY;AAAA,QAC1B,UAAYA,KAAM,SAAYG;AAAA,MAChC;AAAA,MACA,MAAM;AAAA,QACJ,MAAMF;AAAA,QACN,QAAQ97B;AAAA,QACR,OAAO+7B,KAAaJ;AAAA,QACpB,MAAAA;AAAA,QACA,UAAUE;AAAA,QACV,OAAOF,KAAO;AAAA,QACd,SAASI,IAAY,SAAYJ;AAAA,MACnC;AAAA,MACA,cAAc,CAACz5C,OAA4Bg6C,GAAUh6C,IAAGy5C,EAAI;AAAA,IAAA,IAGxDQ,KAAiB,CAAC;AAAA,MACtB,MAAAR;AAAA,MACA,UAAAC;AAAA,MACA,KAAAC;AAAA,MACA,UAAAC;AAAA,MACA,WAAAC;AAAA,MACA,OAAAp4C;AAAA,IACF,MAOM+3C,EAAmB,EAAC,MAAAC,IAAM,UAAAC,IAAU,KAAAC,IAAK,UAAAC,GAAU,WAAAC,GAAW,OAAAp4C,IAAO,UAAU,KAAK,CAAA,GAEpFy4C,IAAqB,CAACT,OAC1BD,EAAmB;AAAA,MACjB,MAAAC;AAAA,MACA,KAAKjtB,EAAM;AAAA,MACX,UAAUA,EAAM;AAAA,MAChB,UAAU;AAAA,MACV,OAAOA,EAAM,YAAY,GAAGA,EAAM,SAAS,IAAIitB,EAAI,KAAK;AAAA,MACxD,UAAUR,EAAYQ,EAAI,KAAK;AAAA,MAC/B,UAAUA;AAAA,MACV,UAAUV,EAAaU,EAAI;AAAA,IAAA,CAC5B,GAEGU,IAAmB77C;AAAA,MAAS,MAChC27C,GAAe;AAAA,QACb,MAAM;AAAA,QACN,KAAKb,EAAc;AAAA,QACnB,UAAU5sB,EAAM;AAAA,QAChB,UAAU;AAAA,QACV,WAAWA,EAAM;AAAA,QACjB,OAAOA,EAAM;AAAA,MAAA,CACd;AAAA,IAAA,GAEG4tB,IAAkB97C;AAAA,MAAS,MAC/B27C,GAAe;AAAA,QACb,MAAM,KAAK,IAAIxB,EAAiB,QAAQ,GAAG,CAAC;AAAA,QAC5C,KAAKY,EAAa;AAAA,QAClB,UAAU7sB,EAAM;AAAA,QAChB,UAAU;AAAA,QACV,WAAWA,EAAM;AAAA,QACjB,OAAOA,EAAM;AAAA,MAAA,CACd;AAAA,IAAA,GAEG6tB,IAAkB/7C;AAAA,MAAS,MAC/B27C,GAAe;AAAA,QACb,MAAM,KAAK,IAAIxB,EAAiB,QAAQ,GAAGG,EAAc,KAAK;AAAA,QAC9D,KAAKW,EAAa;AAAA,QAClB,UAAU/sB,EAAM;AAAA,QAChB,UAAU;AAAA,QACV,WAAWA,EAAM;AAAA,QACjB,OAAOA,EAAM;AAAA,MAAA,CACd;AAAA,IAAA,GAEG8tB,IAAkBh8C;AAAA,MAAS,MAC/B27C,GAAe;AAAA,QACb,MAAMrB,EAAc;AAAA,QACpB,KAAKU,EAAa;AAAA,QAClB,UAAU9sB,EAAM;AAAA,QAChB,UAAU;AAAA,QACV,WAAWA,EAAM;AAAA,QACjB,OAAOA,EAAM;AAAA,MAAA,CACd;AAAA,IAAA,GAGG+tB,IAAiB15B,MACjB25B,IAAmB35B,MAEnB45B,IAAgBn8C,EAAS,OAAO;AAAA,MACpC,IAAI;AAAA,QACF,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACAu6C,EAAa,QAAQ,cAAc;AAAA,UACnCrsB,EAAM;AAAA,QACR;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,CAAC,WAAW;AAAA,MACrB;AAAA,IACA,EAAA,GAEIkuB,KAAyBp8C,EAAS,MAAM;AAAA,MAC5CmF,EAAU;AAAA,MACV;AAAA,QACE,CAAC,cAAc+oB,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,QAC7C,sBAAsBA,EAAM;AAAA,MAC9B;AAAA,IAAA,CACD,GAEKmuB,IAAar8C,EAAS,OAAO;AAAA,MACjC,UAAUo6C,EAAiB;AAAA,MAC3B,WAAWF,EAAgB;AAAA,MAC3B,eAAeI,EAAc;AAAA,IAC7B,EAAA,GAEIoB,KAAY,CAACx4C,IAA6Bw3C,OAAuB;AACrE,UAAIA,OAAeP,EAAiB;AAAO;AAErC,YAAAmC,KAAa,IAAI97C,GAAQ,cAAc;AAAA,QAC3C,YAAY;AAAA,QACZ,QAAQ0C,GAAM;AAAA,MAAA,CACf;AAGD,MAFKirB,EAAA,cAAcmuB,IAAY5B,EAAU,GAErC,CAAA4B,GAAW,qBAEfttB,EAAW,QAAQ0rB;AAAA,IAAA;AAWf,IAAA7+B,GAAAs+B,GAAkB,CAAC94B,OAAa;AAKpC,YAAMk7B,MAJsB,CAACt8C,GAAeq6C,MAA0B;AACpE,cAAMa,KAAOl7C,KAAS;AACtB,eAAOk7C,KAAOb,IAAgBA,IAAgBa,KAAO,IAAI,IAAIA;AAAA,MAAA,GAEnB95B,IAAUi5B,EAAc,KAAK;AACzE,MAAIiC,OAAoBvtB,EAAW,UACnCA,EAAW,QAAQutB;AAAA,IAAA,CACpB,GAEK1gC,GAAAwgC,GAAY,CAACh1B,IAAUhG,OAAa;AACxC,OAAIA,GAAS,aAAagG,GAAS,YAAYhG,GAAS,cAAcgG,GAAS,aAI7EhG,GAAS,kBAAkBgG,GAAS,iBACpC8yB,EAAiB,QAAQ94B,GAAS,mBAIlC2N,EAAW,QAAQ;AAAA,IACrB,CACD;AAEK,UAAA+mB,KAAU/1C,EAAS,MAAM;AAK7B,YAAMw8C,KAAQlC,EAAc,OACtB,EAAC,OAAAr6C,GAAS,IAAAk6C,GACVsC,KAAQjG,EAAY,OACpBkG,IAAYxuB,EAAM,cAAc,IAAI,GACpCyuB,IAAWzuB,EAAM,aAAa,IAAI,GAClC0uB,KAAe1uB,EAAM,gBAAgBuuB,MAAS,GAC9CI,KAAiB3uB,EAAM,qBAAqB,IAAI;AAMlD,UAAAsuB,KAAQC,KAAQC,IAAYC;AACvB,eAAA;AAAA,UACL,CAACD,KAAa,CAACG,KAAiB,KAAe;AAAA,UAC/C;AAAA,UACA,GAAG,MAAM,KAAK,EAAC,QAAQL,MAAQ,CAACx8B,IAAGvC,OAAUA,KAAQ,CAAC;AAAA,UACtD;AAAA,UACA,CAACk/B,KAAY,CAACE,KAAiB,KAAc;AAAA,QAC7C,EAAA,OAAO,CAACn1C,OAAMA,OAAM,IAAI;AAMtBquC,YAAAA,KAAU,MAAM,KAAK,EAAC,QAAQ0G,KAAQ,IAAII,KAAiB,EAAA,CAAE;AACnE,MAAKA,MAiBH9G,GAAQ,CAAC,IAAI,IACbA,GAAQA,GAAQ,SAAS,CAAC,IAAI,OAjBzB2G,KAIH3G,GAAQ,CAAC,IAAI,IACbA,GAAQ,CAAC,IAAI,MAJbA,GAAQ,CAAC,IAAI,IACbA,GAAQ,CAAC,IAAI,KAMV4G,KAIH5G,GAAQA,GAAQ,SAAS,CAAC,IAAI,IAC9BA,GAAQA,GAAQ,SAAS,CAAC,IAAIyG,OAJ9BzG,GAAQA,GAAQ,SAAS,CAAC,IAAI,IAC9BA,GAAQA,GAAQ,SAAS,CAAC,IAAI;AAalC,YAAM+G,KAAY,KAAK,MAAML,KAAQ,CAAC;AAClC,UAAAx8C,MAAS68C,KAAYJ,GAAW;AAClC,iBAASj/B,KAAQ,GAAGA,MAASg/B,IAAOh/B;AAClCs4B,UAAAA,GAAQt4B,KAAQ,IAAIo/B,EAAc,IAAIp/B,KAAQi/B;AAGhD,QAAKE,OACH7G,GAAQA,GAAQ,SAAS,CAAC,IAAI;AAAA,MAElC;AAKI,UAAA91C,KAAQu8C,KAAQM,KAAYH,GAAU;AAClC,cAAAv4C,KAAQo4C,MAASC,KAAQ,KAAKE;AACpC,iBAASl/B,KAAQ,GAAGA,KAAQg/B,IAAOh/B;AACjCs4B,UAAAA,GAAQt4B,KAAQ,IAAIo/B,EAAc,IAAIz4C,KAAQqZ;AAGhD,QAAKm/B,OACH7G,GAAQ,CAAC,IAAI;AAAA,MAEjB;AAGI,UAAA,CAACA,GAAQ,CAAC,GAAG;AAEf,cAAM3xC,KAAQnE,KAAQ,KAAK,MAAMw8C,KAAQ,CAAC;AAC1C,iBAASh/B,KAAQ,GAAGA,KAAQg/B,IAAOh/B;AACjCs4B,UAAAA,GAAQt4B,KAAQ,IAAIo/B,EAAc,IAAIz4C,KAAQqZ;AAGhD,QAAKm/B,OACH7G,GAAQ,CAAC,IAAI,IACbA,GAAQA,GAAQ,SAAS,CAAC,IAAI;AAAA,MAElC;AAWOA,aAAAA;AAAAA,IAAA,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1aD,UAAM7nB,IAAQY,GAURiuB,IAAc38B;AAAAA,MAAM,MACxB8N,EAAM,UAAU,SACZ,SACA,OAAOA,EAAM,SAAU,WACrBA,EAAM,MAAM,aACZA,EAAM,MAAM,QAAQ,KAAK,EAAE;AAAA,IAAA,GAG7B8uB,IAAa58B;AAAAA,MAAM,MACvB8N,EAAM,SAAS,SACX,SACA,OAAOA,EAAM,QAAS,WACpBA,EAAM,KAAK,aACXA,EAAM;AAAA,IAAA,GAGRuC,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,OAAOg9C,EAAW,KAAK,EAAE,GAAGA,EAAW,UAAU,UAAaD,EAAY,UAAU;AAAA,MACrF,CAAC,MAAM7uB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC3C,CAAC,eAAeA,EAAM,IAAI,EAAE,GAAGA,EAAM,SAAS;AAAA,IAC9C,EAAA,GAEI+uB,IAAiBj9C,EAAS,OAAO;AAAA,MACrC,CAAC,eAAekuB,EAAM,SAAS,EAAE,GAAGA,EAAM,cAAc;AAAA,IACxD,EAAA,GAEIpY,IAAgB9V,EAAwB,OAAO;AAAA,MACnD,OAAO+8C,EAAY,UAAU,SAAY,SAAY,GAAGA,EAAY,KAAK;AAAA,IACzE,EAAA;;;;;;;;;;;;;;;;;;;;;;;ACzCF,UAAM7uB,IAAQY,GAQR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,OAAOkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,IAC5C,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC4BF,UAAMA,IAAQY,GAiCRouB,IAAel9C,EAAS,OAAO;AAAA,MACnC,WAAWkuB,EAAM;AAAA,MACjB,MAAMA,EAAM;AAAA,MACZ,SAASA,EAAM;AAAA,IACf,EAAA,GAEIivB,IAAkB/8B,EAAM,MAAQ8N,EAAM,WAAgCkvB,KAArBC,EAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7EnFC,KAA4B;;;;;;;;;;;;;;;;;;;;;;;AAMlC,UAAMpvB,IAAQY,GA0BR2B,IAAkBzwB,EAAS,MAAM;AAAA,MACrCkuB,EAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,QACE,kBAAkBA,EAAM;AAAA,QACxB,oBAAoBA,EAAM;AAAA,QAC1B,CAAC,UAAUA,EAAM,aAAa,EAAE,GAAGA,EAAM,kBAAkB;AAAA,QAC3D,eAAeA,EAAM;AAAA,QACrB,cAAcA,EAAM;AAAA,QACpB,eAAeA,EAAM;AAAA,QACrB,mBAAmBA,EAAM,YAAY;AAAA,QACrC,CAAC,mBAAmBA,EAAM,OAAO,EAAE,GAAG,OAAOA,EAAM,WAAY;AAAA,QAC/D,iBAAiBA,EAAM;AAAA,QACvB,YAAYA,EAAM;AAAA,QAClB,CAAC,SAASA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,QAC9C,yBAAyBA,EAAM;AAAA,MACjC;AAAA,IAAA,CACD,GACKqvB,IAAav9C,EAAS,OAAO;AAAA,MACjC,IAAIkuB,EAAM;AAAA,MACV,OAAOuC,EAAgB;AAAA,IACvB,EAAA,GAEI+sB,IAAiB3hB;AAAA,MACrB77B;AAAA,QACE,OAAOkuB,EAAM,iBAAiB,KAAOovB,KAA4BpvB,EAAM,iBAAiB;AAAA,MAC1F;AAAA,IAAA,GAEIuvB,IAAgBz9C,EAAS,MAAMkuB,EAAM,iBAAiB,EAAK,GAE3DwvB,IAAe19C,EAAS,MAAMkuB,EAAM,eAAe,MAASuvB,EAAc,KAAK,GAC/EE,IAAmB39C;AAAA,MAAiC,MACxDy9C,EAAc,QAAQ,EAAC,WAAWD,EAAe,MAAS,IAAA;AAAA,IAAA,GAEtDI,IAAoB59C,EAAS,OAAO;AAAA,MACxC,oBAAoBkuB,EAAM,eAAe;AAAA,MACzC,CAAC,oBAAoBA,EAAM,UAAU,EAAE,GAAG,OAAOA,EAAM,cAAe;AAAA,MACtE,yBAAyBuvB,EAAc;AAAA,IACvC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCF,UAAMvvB,IAAQY,GA8BR+uB,IAAkB37B,GAAY,MAAMgM,EAAM,OAAO,GACjD4vB,IAAe57B,GAAY,MAAMgM,EAAM,IAAI,GAC3C6vB,IAAwB39B,EAAM,MAAM8N,EAAM,iBAAiB,GAAG,GAC9D8vB,IAAwB59B,EAAM,MAAM8N,EAAM,iBAAiB,GAAG,GAC9D+vB,IAAsB/7B,GAAY67B,CAAqB,GACvDG,IAAsBh8B,GAAY87B,CAAqB,GAEvDG,IAAgB/9B,EAAM,MAAMy9B,EAAgB,SAAS,CAAC,GACtDO,IAAah+B,EAAM,MAAM09B,EAAa,SAAS,CAAC,GAEhDO,IAA8Bj+B;AAAAA,MAAM,MACxC8N,EAAM,kBAAkB,SAAYiwB,EAAc,QAAQF,EAAoB;AAAA,IAAA,GAE1EK,IAA8Bl+B;AAAAA,MAAM,MACxC8N,EAAM,kBAAkB,SAAYiwB,EAAc,QAAQD,EAAoB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FhF,UAAMhwB,IAAQY;;;ICIRyvB,KAAe/rB,GAAmB,QAAQ,CAAC,EAAE,GAAG,EAAC,MAAM,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAK,CAAA,GAE7FgsB,KAAe77B,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EAGP,OAAO;AAAA,IACL,KAAK,EAAC,MAAM,QAAQ,SAAS,MAAK;AAAA,IAClC,SAAS,EAAC,MAAM,QAAQ,SAAS,KAAI;AAAA,IACrC,SAAS,EAAC,MAAM,QAAQ,SAAS,KAAI;AAAA,IACrC,WAAW,EAAC,MAAM,SAAS,SAAS,GAAK;AAAA,IACzC,QAAQ,EAAC,MAAM,QAAuC,SAAS,KAAI;AAAA,IACnE,QAAQ,EAAC,MAAM,QAA6C,SAAS,KAAI;AAAA,IACzE,cAAc,EAAC,MAAM,QAAsC,SAAS,KAAI;AAAA,IACxE,GAAG47B;AAAA,EACL;AAAA,EACA,MAAMrwB,GAAO;AACX,UAAM/oB,IAAYrF,GAAa,MAAMouB,EAAM,MAAM,GAE3CuwB,IAAiBz+C,EAAS,MAAM24B,GAAWzK,GAAOqwB,IAAc,QAAQ,UAAU,CAAC;AAclF,WAAA;AAAA,MACL,iBAbsBv+C,EAAS,MAAM;AAAA,QACrCy+C,EAAe;AAAA,QACf;AAAA,UACE,CAAC,MAAMvwB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,UAC3C,CAAC,MAAMA,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,UAC3C,OAAOA,EAAM;AAAA,UACb,CAAC,eAAeA,EAAM,MAAM,EAAE,GAAGA,EAAM,WAAW;AAAA,UAClD,CAAC/oB,EAAU,KAAK,GAAG+oB,EAAM,WAAW;AAAA,UACpC,CAAC,iBAAiBA,EAAM,YAAY,EAAE,GAAGA,EAAM,iBAAiB;AAAA,QAClE;AAAA,MAAA,CACD;AAAA,IAGC;AAAA,EAEJ;AACF,CAAC;AAjD2B,SAAA6d,GAD5BC,MAC2Cvb,GAAeyb,GAAAC,GAAAC,GAAA;;IAD1D,OAEYC,EAAA,CAAA,OAAAL,EAAA,eAAA,CAAA;AAAA,EAAA,GAAA;AAAA;MAFZM,EAAAN,EAAA,QAAA,SAAA;AAAA,IAAA,CAAA;AAAA;;;qDCSa0S,KAAc,CAACz+C,MAC1B,OAAOA,KAAU,YAAYA,MAAU,MAuD5B0+C,KAAe,CAAI1+C,MAC9B,OAAOA,KAAU,YAAYA,MAAU,QAAQ,SAASA;;;;;;ACxD1D,UAAMiuB,IAAQY,GASR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,IAC9C,EAAA;;;;;;;;;;;;;;;;;ACFF,UAAMA,IAAQY,GAaR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC9C,yBAAyBA,EAAM;AAAA,MAC/B,yBAAyBA,EAAM,gBAAgBA,EAAM,YAAY;AAAA,IACjE,EAAA,GAEI0H,IAAQxV,EAAM,MAAO8N,EAAM,UAAU,YAAYA,EAAM,UAAU,YAAY,KAAM;;;;;;;;;;;;;;;;;;;AC5BzF,UAAMA,IAAQY,GASR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,IAC9C,EAAA;;;;;;;;;;;;;;;;;ACFF,UAAMA,IAAQY,GAaR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,MAC9C,yBAAyBA,EAAM;AAAA,MAC/B,yBAAyBA,EAAM,gBAAgBA,EAAM,YAAY;AAAA,IACjE,EAAA,GAEI0H,IAAQxV,EAAM,MAAO8N,EAAM,UAAU,YAAYA,EAAM,UAAU,YAAY,KAAM;;;;;;;;;;;;;;;;;;;AC5BzF,UAAMA,IAAQY,GASR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,IAC9C,EAAA;;;;;;;;;;;;;ACXF,UAAMA,IAAQY,GASR2B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,CAAC,SAASkuB,EAAM,OAAO,EAAE,GAAGA,EAAM,YAAY;AAAA,IAC9C,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC+LF,UAAMA,IAAQY,GAgDRX,IAAOY,GAQP6vB,IAAsB,CAACxsB,MAAmD;AAAA,MAC9EA;AAAA,MACAA,EAAK;AAAA,IAAA,GAEDysB,IAAa1jC;AAAA,MACjB,IAAI;AAAA,QACF+S,EAAM,MAAM;AAAA,UACV,CAACzqB,GAAKrC,OACAs9C,GAAYt9C,CAAE,KACZqC,EAAA,KAAKm7C,EAAoBx9C,CAAE,CAAC,GAE3BqC;AAAA,UAET,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IAAA;AAEF,IAAAoY;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAACnF,MAAU;AACH,QAAAA,EAAA,QAAQ,CAACqJ,MAAS;AAClB,cAAA,CAACssB,GAAYtsB,CAAI;AAAG;AAClB,gBAAA0sB,IAAcF,EAAoBxsB,CAAI;AAC5C,UAAAysB,EAAW,MAAM,IAAIC,EAAY,CAAC,GAAGA,EAAY,CAAC,CAAC;AAAA,QAAA,CACpD;AAAA,MACH;AAAA,MACA,EAAC,MAAM,GAAI;AAAA,IAAA;AAGP,UAAAC,IAAuB/+C,EAAS,MAAM;AAAA,MAC1CkuB,EAAM;AAAA,MACN;AAAA,QACE,CAAC,SAASA,EAAM,KAAK,EAAE,GAAGA,EAAM,UAAU;AAAA,MAC5C;AAAA,IAAA,CACD,GAEK8wB,IAAiBh/C,EAA8C,MAAM;AACzE,UAAI,CAACkuB,EAAM,OAAO,UAAUA,EAAM,MAAM,QAAQ;AACxC,cAAA,CAAC+wB,CAAS,IAAI/wB,EAAM;AAC1B,eAAIwwB,GAAYO,CAAS,KAAK,MAAM,QAAQA,CAAS,IAC5C,OAAO,KAAKA,CAAS,EAAE,IAAI,CAACC,MAAM;AACjC,gBAAA/7C,IAAQ4wB,GAAUmrB,CAAC;AAClB,iBAAA;AAAA,YACL,KAAKA;AAAA,YACL,OAAA/7C;AAAA,YACA,QAAQ+qB,EAAM,YAAY,KAAO,EAAC,cAAc/qB,EAAS,IAAA;AAAA,UAAA;AAAA,QAC3D,CACD,IAII,CAAC,EAAC,KAAK,IAAI,WAAW,GAAK,CAAA;AAAA,MACpC;AAEA,aAAO+qB,EAAM,OAAO,IAAI,CAACixB,MAAM;AACzB,YAAAR,GAAaQ,CAAC;AACT,iBAAA;AAAA,YACL,GAAIA;AAAA,YACJ,QACEjxB,EAAM,YAAY,KACd,EAAC,cAAc6F,GAAUorB,EAAE,GAAa,GAAG,GAAGA,EAAE,WAChDA,EAAE;AAAA,UAAA;AAGN,cAAAh8C,IAAQ4wB,GAAUorB,CAAW;AAC5B,eAAA;AAAA,UACL,KAAKA;AAAA,UACL,OAAAh8C;AAAA,UACA,QAAQ+qB,EAAM,YAAY,KAAO,EAAC,cAAc/qB,EAAS,IAAA;AAAA,QAAA;AAAA,MAC3D,CACD;AAAA,IAAA,CACF,GACKi8C,IAAsBh/B,EAAM,MAAM4+B,EAAe,MAAM,MAAM,GAC7DK,IAAsBr/C,EAAS,MAI/B,EAAAg/C,EAAe,MAAM,SAAS,KAAKA,EAAe,MAAM,MAAM,CAAC59C,MAAOA,EAAG,cAAc,EAAI,EAGhG,GAEKk+C,IAAiB,CAACltB,GAASC,GAAkB6d,MAAwC;AACnF,YAAAryB,IAAM0U,GAAIH,GAAMC,CAAQ;AACvB,aAAA6d,KAAQ,OAAOA,KAAS,aAAaA,EAAKryB,GAAKwU,GAAUD,CAAI,IAAI8d;AAAA,IAAA,GAGpEqP,IAAgB,CAAC/qB,GAAsBtxB,GAA6Bs8C,IAAW,OAAU;AAC7F,MAAArxB,EAAK,gBAAgBqG,EAAM,KAAeA,GAAOtxB,GAAOs8C,CAAQ;AAAA,IAAA,GAG5DC,IAAmB,CAACC,MAAU;AAC9B,UAAAhB,GAAYgB,CAAE,GAAG;AACnB,cAAMC,IAAYd,EAAW,MAAM,IAAIa,CAAE;AACzC,QAAAb,EAAW,MAAM,IAAIa,GAAI,CAACC,CAAS;AAAA,MACrC;AAAA,IAAA,GAGIC,IAAwB,CAACprB,MAAsB;AAAA,MACnDA,EAAM;AAAA,MACNA,EAAM;AAAA,MACN;AAAA,QACE,yBAAyBA,EAAM;AAAA,MACjC;AAAA,MACAtG,EAAM,mBACF,OAAOA,EAAM,oBAAqB,aAChCA,EAAM,iBAAiBsG,CAAK,IAC5BtG,EAAM,mBACR;AAAA,IAAA,GAGA2xB,IAAqB,CAACrrB,GAA6BkrB,MAAU;;AAAA;AAAA,QACjElrB,EAAM;AAAA,QACNA,EAAM;AAAA,QACLkqB,GAAYgB,CAAE,MAAIthC,IAAAshC,EAAG,kBAAH,QAAAthC,EAAmBoW,EAAM,OACxC,UAAUnW,IAAAqhC,EAAiB,kBAAjB,gBAAArhC,EAAiCmW,EAAM,IAAc,KAC/D;AAAA,QACJ;AAAA,UACE,yBAAyBA,EAAM;AAAA,QACjC;AAAA,MAAA;AAAA,OAGIsrB,IAAgB,CAAC1tB,GAASvL,MAC9BqH,EAAM,eACF,OAAOA,EAAM,gBAAiB,aAC5BA,EAAM,aAAakE,GAAMvL,CAAI,IAC7BqH,EAAM,eACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxPN,UAAMA,IAAQY,GAsERX,IAAOY,GAcPgxB,IAAc9wB,GAAuCH,GAAC,QAE3D,GACKkxB,IAAY/wB,GAAoBH,GAAC,MAEtC,GACKmxB,IAAqBhxB,GAAgBH,GAAC,eAE3C,GAEKoxB,IAAqBlgD,EAAS;AAAA,MAClC,KAAK,MAAU,oBAAA,IAAI,CAAC,GAAGigD,EAAmB,KAAK,CAAC;AAAA,MAChD,KAAK,CAACpiC,MAAQ;AACO,QAAAoiC,EAAA,QAAQ,CAAC,GAAGpiC,CAAG;AAAA,MACpC;AAAA,IAAA,CACD,GAKKsiC,IAA4B;AAAA,MAChC,KAAK,CAAC/tB,MAAY;AAChB,cAAMnyB,IAAQ,IAAI,IAAIigD,EAAmB,KAAK;AAC9C,QAAAjgD,EAAM,IAAImyB,CAAI,GACd8tB,EAAmB,QAAQjgD,GAC3BkuB,EAAK,gBAAgBiE,CAAI;AAAA,MAC3B;AAAA,MACA,OAAO,MAAM;AACQ,QAAA8tB,EAAA,MAAM,QAAQ,CAAC9tB,MAAS;AACzC,UAAA+tB,EAA0B,OAAO/tB,CAAI;AAAA,QAAA,CACtC;AAAA,MACH;AAAA,MACA,QAAQ,CAACA,MAAY;AACnB,cAAMnyB,IAAQ,IAAI,IAAIigD,EAAmB,KAAK;AAC9C,QAAAjgD,EAAM,OAAOmyB,CAAI,GACjB8tB,EAAmB,QAAQjgD,GAC3BkuB,EAAK,kBAAkBiE,CAAI;AAAA,MAC7B;AAAA,MACA,KAAK,CAACrJ,MAAe;AACA,QAAAm3B,EAAA,QAAQ,IAAI,IAAIn3B,CAAK,GACrBm3B,EAAA,MAAM,QAAQ,CAAC9tB,MAAS;AACzC,UAAAjE,EAAK,kBAAkBiE,CAAI;AAAA,QAAA,CAC5B;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,KAAK,CAACA,MAAY;AAChB,YAAI,CAAClE,EAAM;AAAmB,iBAAAgyB,EAAmB,MAAM,IAAI9tB,CAAI;AAG/D,cAAMguB,IAAelyB,EAAM;AAChB,mBAAAmyB,KAAYH,EAAmB,OAAO;AACzC,gBAAAI,IAAc/tB,GAAI8tB,GAAUD,CAAI,GAChCG,IAAUhuB,GAAIH,GAAMguB,CAAI;AAE9B,cAAME,KAAiBC,KAAWD,MAAgBC;AAAgB,mBAAA;AAAA,QACpE;AACO,eAAA;AAAA,MACT;AAAA,IAAA,GAMIC,IAA0BrlC,EAAI,CAAA,CAAE,GAEhC8+B,IAAgB/3B,GAAY,MAAMgM,EAAM,SAAS,EAAC,QAAQ,YAAW,GACrEuyB,IAAoBv+B,GAAY,MAAMgM,EAAM,aAAa,EAAC,QAAQ,YAAW,GAE7EwyB,IAAoBtgC,EAAM,MAAM,CAAC,CAAC8N,EAAM,MAAM,GAC9CyyB,IAAevgC,EAAM,MAAM8N,EAAM,aAAa,MAAS,GACvD0yB,IAAcxgC,EAAM,MAAM8/B,EAAmB,MAAM,OAAO,CAAC,GAE3DW,IAAa7gD;AAAA,MACjB,MACE+/C,EAAY,UAAU,UACtB7xB,EAAM,OAAO;AAAA,QACX,CAACsG,MAAU,OAAOA,KAAU,YAAYA,MAAU,QAAQA,EAAM,aAAa;AAAA,MAC/E;AAAA,IAAA,GAGEwqB,IAAiBh/C;AAAA,MAA6B,MAClDkuB,EAAM,OAAO,IAAI,CAAC9sB,MAAO;;AACvB,YAAI,EAAE,OAAOA,KAAO,YAAYA,MAAO;AAAc,iBAAAA;AAE/C,cAAAnB,KAAQme,IAAA2hC,EAAY,UAAZ,gBAAA3hC,EAAmB,KAAK,CAAC0iC,MAAO1/C,EAAG,QAAQ0/C,EAAG,MACtDC,IACJF,EAAW,UAAU,KACjB,SACA5gD,MAAU,SACR,SACAA,EAAM,UAAU,SACd,eACA;AACH,eAAA;AAAA,UACL,GAAGmB;AAAA,UACH,QAAQ;AAAA,YACN,aAAa2/C;AAAA,YACb,GAAG3/C,EAAG;AAAA,UACR;AAAA,QAAA;AAAA,MACF,CACD;AAAA,IAAA,GAGG4/C,IAAehhD,EAAS,OAAO;AAAA,MACnC,gBAAgBggD,EAAU;AAAA,MAC1B,sBAAsB9xB,EAAM;AAAA,MAC5B,oBAAoBA,EAAM,cAAc0yB,EAAY;AAAA,IACpD,EAAA,GAEIK,IAAoBjhD,EAAS,MAAM;AAAA,MACvCkuB,EAAM,eACF,OAAOA,EAAM,gBAAiB,aAC5BA,EAAM,aAAa,MAAM,YAAY,IACrCA,EAAM,eACR;AAAA,IAAA,CACL,GACK0xB,IAAwB,CAACprB,MAAsB;AAAA,MACnD;AAAA,QACE,2BAA2BqsB,EAAW,SAASrsB,EAAM;AAAA,MACvD;AAAA,IAAA,GAMIsrB,IAAgB,CAAC1tB,GAASvL,MAAiB;AAAA,MAC/C;AAAA,QACE,CAAC,kBAAkBqH,EAAM,gBAAgB,EAAE,GACzCA,EAAM,cAAckE,KAAQ+tB,EAA0B,IAAI/tB,CAAI;AAAA,MAClE;AAAA,MACAlE,EAAM,eACF,OAAOA,EAAM,gBAAiB,aAC5BA,EAAM,aAAakE,GAAMvL,CAAI,IAC7BqH,EAAM,eACR;AAAA,IAAA,GAGAgzB,IAAgBlhD,EAAc,MAAM;AAClC,YAAAmhD,IAAY,CAACp4B,MAAe;;AAE1B,cAAAq4B,KAAchjC,IAAA2hC,EAAY,UAAZ,gBAAA3hC,EAAmB,OAAO,CAAChd,MAAO,CAAC,CAACA,EAAG;AAEvD,eAAA,CAACggD,KAAeA,EAAY,WAAW,IAAUr4B,IAG9C,CAAC,GAAGA,CAAK,EAAE,KAAK,CAACvd,GAAGC,OAAM;AAC/B,mBAAS1D,IAAI,GAAGA,KAAKq5C,EAAY,UAAU,IAAIr5C,KAAK;AAC5C,kBAAAs5C,KAAaD,EAAYr5C,CAAC,GAC1Bu5C,KAAU,CAACC,MAAkB;AAC7B,kBAAA,CAAC7C,GAAY6C,CAAE;AAAG,uBAAO,OAAOA,CAAE;AAEtC,oBAAMC,IAAYxC,EAAe,MAAM,KAAK,CAAC59C,OACvCu9C,GAAav9C,EAAE,IAAUA,GAAG,QAAQigD,GAAW,MAE5C,EACR,GACKxjC,KAAM0U,GAAIgvB,GAAIF,GAAW,GAAsB;AACrD,kBAAI1C,GAAa6C,CAAS,KAAOA,EAAU,iBAAiB;AAC1D,sBAAMlvB,KACJ,OAAOkvB,EAAU,mBAAoB,aACjCA,EAAU,kBACVA,EAAU;AAChB,oBAAIlvB;AACF,yBAAOH,GAAWovB,GAAI,OAAOC,EAAU,GAAG,GAAGlvB,EAAS;AAAA,cAE1D;AACO,qBAAA,OAAOzU,MAAQ,YAAYA,OAAQ,OACtC,KAAK,UAAUA,EAAG,KAClBA,MAAA,gBAAAA,GAAK,eAAc;AAAA,YAAA,GAGnB4jC,KAASH,GAAQ91C,CAAC,GAClBk2C,KAASJ,GAAQ71C,EAAC,GAClBk2C,KAAaN,GAAW,WAC1BA,GAAW,SAASI,IAAQC,EAAM,IAClCD,GAAO,cAAcC,IAAQ,QAAW,EAAC,SAAS,IAAK;AAE3D,gBAAIC,OAAe;AACjB,qBAAON,GAAW,UAAU,QAAQM,KAAa,CAACA;AAAA,UAEtD;AACO,iBAAA;AAAA,QAAA,CACR;AAAA,MAAA,GAGGC,IAAc,CAAC74B,MACnBA,EAAM;AAAA,QAAO,CAACqJ,MACZssB,GAAYtsB,CAAI,IACZ,OAAO,QAAQA,CAAI,EAAE,KAAK,CAAC,CAAClP,GAAKrF,CAAG,MAAM;;AACxC,iBACEA,KAAQ,QAERqF,EAAI,CAAC,MAAM,OACV,GAAC9E,IAAA8P,EAAM,eAAN,QAAA9P,EAAkB,SAAS8E,SAAU7E,KAAA6P,EAAM,eAAN,QAAA7P,GAAkB,UAElD,MAEP,OAAOR,KAAQ,WAAW,KAAK,UAAU,OAAO,OAAOA,CAAG,CAAC,IAAIA,EAAI,SAAS,GAC7D,cAAc,WAASuQ,KAAAF,EAAM,WAAN,gBAAAE,GAAc,kBAAiB,EAAE;AAAA,QAC1E,CAAA,IACD;AAAA,MAAA;AAGR,UAAIyzB,IAAclB,EAAa,QAAQH,EAAc,QAAStyB,EAAM;AACtD,aAAA2zB,IAAAA,EAAY,IAAI,CAACzvB,MAAS;AACtC,YACE,OAAOA,KAAS,YAChBA,MAAS,QACT,OAAO,KAAKA,CAAI,EAAE,KAAK,CAAClP,MAAQA,EAAI,SAAS,GAAG,CAAC,GACjD;AAIA,cAAI4+B,IAAe,CAAA;AACnB,qBAAW5+B,KAAOkP;AACZ,YAAAlP,EAAI,SAAS,GAAG,IAClB4+B,IAAUxrB,GAAIwrB,GAAS5+B,GAAKkP,EAAKlP,CAAG,CAAC,IAE7B4+B,EAAA5+B,CAAG,IAAIkP,EAAKlP,CAAG;AAGpB,iBAAA4+B;AAAA,QAET;AACO,eAAA1vB;AAAA,MAAA,CACR,IAGEsuB,EAAkB,UAAU,MAAQ,CAACC,EAAa,SAClDD,EAAkB,UAAU,MAAQC,EAAa,SAASzyB,EAAM,yBAEjE2zB,IAAcD,EAAYC,CAAW,KAIpChB,EAAW,UAAU,MAAQ,CAACF,EAAa,SAAS,CAACzyB,EAAM,kBAC3D2yB,EAAW,UAAU,MAAQF,EAAa,SAASzyB,EAAM,uBAE1D2zB,IAAcV,EAAUU,CAAW,IAG9BA;AAAA,IAAA,CACR,GAEKE,IAAuB/hD,EAAc,MACrC,OAAO,MAAMi6C,EAAc,KAAK,KAAM0G,EAAa,SAAS,CAACzyB,EAAM,mBAC9DgzB,EAAc,QAGhBA,EAAc,MAAM;AAAA,OACxBT,EAAkB,QAAQ,MAAMxG,EAAc,SAAS,OAAO;AAAA,MAC/DwG,EAAkB,SAASxG,EAAc,SAAS,OAAO;AAAA,IAAA,CAE5D;AAEK,IAAAp+B,GAAAkmC,GAAsB,CAAC/9C,MAAM;AACjC,MAAAmqB,EAAK,UAAUnqB,CAAC;AAAA,IAAA,CACjB;AAEK,UAAAg+C,IAAqB,CACzBC,GACAxkC,GACAykC,IAAe,IACfC,IAAc,IACdC,IAAc,OACX;AACH,UAAKl0B,EAAM,YAEX;AAAA,YAAIA,EAAM,eAAe,YAAYA,EAAM,eAAe,SAAS;AAEjE,cAAIg0B,KAAgBC;AAAa;AAE7B,UAAAhC,EAA0B,IAAI8B,CAAG,IACnC9B,EAA0B,OAAO8B,CAAG,IAEhC/zB,EAAM,eAAe,WACGiyB,EAAA,IAAI,CAAC8B,CAAG,CAAC,IAEnC9B,EAA0B,IAAI8B,CAAG;AAAA,QAErC,WAEIE,KAAeC;AAEb,UAAAjC,EAA0B,IAAI8B,CAAG,IACnC9B,EAA0B,OAAO8B,CAAG,IAGpC9B,EAA0B,IAAI8B,CAAG;AAAA,iBAG1BC,GAAc;AACvB,gBAAMG,IAAmB,CAAC,GAAGnC,EAAmB,KAAK,EAAE,IAAI,GACrDoC,IAAoBp0B,EAAM,MAAM,UAAU,CAACnmB,OAAMA,OAAMs6C,CAAgB,GACvEE,KAAmB,KAAK,IAAID,GAAmB7kC,CAAK,GACpD+kC,IAAiB,KAAK,IAAIF,GAAmB7kC,CAAK,GAClDsL,KAAQmF,EAAM,MAAM,MAAMq0B,IAAkBC,IAAiB,CAAC;AACpE,UAAArC,EAA0B,IAAIp3B,EAAK;AAAA,QAAA;AAGT,UAAAo3B,EAAA,IAAI,CAAC8B,CAAG,CAAC;AAIlB,QAAAQ;;IAAA,GAGjBC,IAAa,CAACT,GAAQxkC,GAAe/b,MAAkB;AACvD,MAAAwsB,EAAM,oBAAoB,MAC5B8zB,EAAmBC,GAAKxkC,GAAO/b,EAAE,UAAUA,EAAE,SAASA,EAAE,OAAO,GAE5DysB,EAAA,eAAe8zB,GAAKxkC,GAAO/b,CAAC;AAAA,IAAA,GAG7BihD,IAAqB,CAACnuB,MAAyB;;AACnD,UAAI,CAACqsB,EAAW;AAAO;AAEvB,YAAMxuB,IAAW,OAAOmC,KAAU,YAAYA,MAAU,OAAOA,EAAM,MAAMA,GACrEouB,IAAgB,OAAOpuB,KAAU,YAAYA,MAAU,OAAOA,EAAM,WAAW;AAIrF,UAAI,EAAEqsB,EAAW,UAAU,MAAQ+B,MAAkB;AAAO;AAEtD,YAAAC,IAAe,CAAChlC,OAA0D;AAC9E,YAAIA,OAAQ;AAAc,iBAAA;AAGxB,YAFEA,OAAQ,UAEVqQ,EAAM,aAAa,MAClB,MAAM,QAAQA,EAAM,QAAQ,KAAKA,EAAM,SAAS,SAASmE,CAAkB;AAErE,iBAAA;AAAA,MACF,GAGH5U,MAAQW,KAAA2hC,EAAY,UAAZ,gBAAA3hC,GAAmB,UAAU,CAAChd,OAAOA,GAAG,QAAQixB,OAAa,IACrEywB,KAAgBzkC,KAAA0hC,EAAY,UAAZ,gBAAA1hC,GAAoBZ,IACpCslC;AAAA;AAAA;AAAA,QAGJtlC,MAAU,MAAM,CAACqlC,IAAgB,EAAC,KAAKzwB,GAAoB,OAAO,UAAS,EAAC,GAAGywB,EAAa;AAAA,SAKxFE,KAAkB,MAAoB;;AAC1C,YAAInlC,KAAMklC;AACV,YAAItlC,MAAU;AACZ,UAAAsiC,EAAY,QAAQ,CAAC,GAAIA,EAAY,SAAS,CAAA,GAAKgD,CAAY;AAAA,aAC1D;AACC,gBAAAE,IAAQJ,EAAaE,EAAa,KAAK;AACvC,UAAAllC,KAAA,EAAC,GAAGklC,GAAc,OAAAE,KACZlD,EAAA,QAAQkD,KAChB7kC,KAAA2hC,EAAY,UAAZ,gBAAA3hC,GAAmB,IAAI,CAAChd,MAAQA,EAAG,QAAQyc,GAAI,MAAMA,KAAMzc,MAC3Did,KAAA0hC,EAAY,UAAZ,gBAAA1hC,GAAmB,OAAO,CAACjd,MAAOA,EAAG,QAAQyc,GAAI;AAAA,QACvD;AACO,eAAAA;AAAA,MAAA,GAMHqlC,IAAmB,MAAoB;AAC3C,cAAMrlC,KAAM;AAAA,UACV,GAAGklC;AAAA,UACH,OAAOtlC,MAAU,KAAKslC,EAAa,QAAQF,EAAaE,EAAa,KAAK;AAAA,QAAA;AAEhE,eAAAhD,EAAA,QAAQ,CAACliC,EAAG,GACjBA;AAAA,MAAA;AAIT,MAAAsQ,EAAK,UAAUD,EAAM,cAAc,KAAO80B,GAAgB,IAAIE,GAAkB;AAAA,IAAA,GAG5EC,IAAmB,CACvB9wB,GACAmC,GACAtxB,GACAs8C,IAAW,OACR;AACH,MAAArxB,EAAK,gBAAgBkE,GAAUmC,GAAOtxB,GAAOs8C,CAAQ,GACrDmD,EAAmBnuB,CAAK;AAAA,IAAA,GAGpB4uB,IAAoB,YAAY;AACpC,UAAI,CAACzC,EAAa,SAASzyB,EAAM,aAAa,UAAa8xB,EAAU;AAAO;AAC5E,MAAAA,EAAU,QAAQ;AACZ,YAAAqD,IAAWn1B,EAAM,SAAS;AAAA,QAC9B,aAAauyB,EAAkB;AAAA,QAC/B,QAAQvyB,EAAM;AAAA,QACd,QAAQ6xB,EAAY;AAAA,QACpB,SAAS9F,EAAc;AAAA,MAAA,CACxB;AACG,UAAA;AACF,cAAMlxB,IAAQs6B,aAAoB,UAAU,MAAMA,IAAWA;AAE7D,YAAIt6B,MAAU;AAAW;AACzB,QAAAy3B,EAAc,QAAQz3B;AAAA,MAAA,UACtB;AAIA,QAAAi3B,EAAU,QAAQ;AAAA,MACpB;AAAA,IAAA,GAGIyC,KAAuB,MAAM;AACjC,MAAKv0B,EAAM,cACXC,EAAK,aAAa,CAAC,GAAG+xB,EAAmB,KAAK,CAAC;AAAA,IAAA,GAG3CoD,IAAqB,OAAO1iD,GAAcid,GAAc0lC,MAAoB;AAChF,UAAI1lC,MAAQ0lC;AAAQ;AAGpB,YAAMC,IAAe,CAACtgC;;AAAyB,iBAAA9E,IAAA8P,EAAM,eAAN,gBAAA9P,EAAkB,SAAS8E,SAAS;AAAA,SAC7EugC,KACH7iD,MAAS,iBAAiBA,MAAS,eACnC4iD,EAAa,QAAQ,KAAKt1B,EAAM,qBAAqB,KAClDw1B,IACJ9iD,MAAS,aAAa4iD,EAAa,WAAW,KAAKt1B,EAAM,wBAAwB,KAC7Ey1B,KACH/iD,MAAS,YAAYA,MAAS,gBAC9B4iD,EAAa,SAAS,KAAKt1B,EAAM,sBAAsB;AAE1D,MAAIu1B,KAAuBC,KAA0BC,MAEjDhD,EAAa,UAAU,MACzB,MAAMyC,EAAkB,GAGpBxiD,MAAS,iBAAiBA,MAAS,aACvCutB,EAAK,YAAY,CAAC,GAAG+yB,EAAc,KAAK,CAAC;AAAA,IAC3C;AAGF,WAAArlC;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAAC3P,GAAQqlC,MAAc;AAGjB,QAFeN,EAAA,UAAU/kC,GAAQqlC,CAAS,GAE1C,EAAArlC,MAAWqlC,KAAajD,EAAa,WACpCpiC,KACH4P,EAAK,YAAY,CAAC,GAAG+yB,EAAc,KAAK,CAAC;AAAA,MAE7C;AAAA,IAAA,GAEIrlC,GAAA4kC,GAAmB,CAAC5iC,GAAK0lC,MAAW;AACrB,MAAAD,EAAA,eAAezlC,GAAK0lC,CAAM;AAAA,IAAA,CAC9C,GACK1nC,GAAAo+B,GAAe,CAACp8B,GAAK0lC,MAAW;AACjB,MAAAD,EAAA,WAAWzlC,GAAK0lC,CAAM;AAAA,IAAA,CAC1C,GACD1nC;AAAA,MACEkkC;AAAA,MACA,CAACliC,GAAK0lC,MAAW;AACI,QAAAD,EAAA,UAAUzlC,GAAK0lC,CAAM;AAAA,MAC1C;AAAA,MACA,EAAC,MAAM,GAAI;AAAA,IAAA,GAGb1nC;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAAC7M,MAAa;AAEZ,YAAIA,MAAa,QAAW;AAC1B,UAAAm/B,EAAc,QAAQ;AACtB;AAAA,QACF;AAEkB,QAAA4C;MACpB;AAAA,IAAA,GAGF3hC,GAAU2hC,CAAiB,GAEdryB,EAAA;AAAA;AAAA,MAEX,eAAe,MAAM;AACnB,QAAK7C,EAAM,eACXiyB,EAA0B,MAAM,GACXsC;MACvB;AAAA,MACA,SAASW;AAAA,MACT,eAAe,MAAM;AACnB,YAAI,CAACl1B,EAAM;AAAY;AACjB,cAAA21B,IAAoB3D,EAAmB,MAAM,OAAO,IAAI,CAAC,GAAGA,EAAmB,KAAK,IAAI;AAC9F,QAAAA,EAAmB,QAAY,oBAAA,IAAI,CAAC,GAAGgB,EAAc,KAAK,CAAC,GACxChB,EAAA,MAAM,QAAQ,CAAC9tB,MAAS;AACrC,UAAAyxB,EAAkB,SAASzxB,CAAI,KACnCjE,EAAK,gBAAgBiE,CAAI;AAAA,QAAA,CAC1B,GACoBqwB;MACvB;AAAA,MACA,WAAW,CAAChlC,MAAkB;AAC5B,YAAI,CAACyQ,EAAM;AAAY;AACjB,cAAAkE,IAAO8uB,EAAc,MAAMzjC,CAAK;AACtC,QAAI,CAAC2U,KAAQ+tB,EAA0B,IAAI/tB,CAAI,MAC/C+tB,EAA0B,IAAI/tB,CAAI,GACbqwB;MACvB;AAAA,MACA,aAAa,CAAChlC,MAAkB;AAC9B,YAAI,CAACyQ,EAAM;AAAY;AACjB,cAAAkE,IAAO8uB,EAAc,MAAMzjC,CAAK;AACtC,QAAI,CAAC2U,KAAQ,CAAC+tB,EAA0B,IAAI/tB,CAAI,MAChD+tB,EAA0B,OAAO/tB,CAAI,GAChBqwB;MACvB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACttBD,UAAMv0B,IAAQY,GAcRlM,IAAQ2f,MAWRuhB,IAAc70B,GAAqBH,GAAA,QAExC,GAEKqR,IAAaxI,GAAOhD,IAAkB,IAAI,GAC1CtF,IAAaC,GAAM,MAAMpB,EAAM,IAAI,SAAS,GAC5C61B,IAAWz0B,GAAM,MAAMpB,EAAM,UAAU,KAAK,GAE5C81B,IAAsB7oC,EAAI,EAAK,GAC/B/Z,IAAK+Z,EAAwB,IAAI,GAEjC,EAAC,SAAAs+B,GAAS,GAAG32B,MAAS0c,GAAS,GAE/BykB,IAAMjkD;AAAA,MACV,OACG;AAAA,QACC,IAAIqvB,EAAW;AAAA,QACf,UAAU00B,EAAS;AAAA,QACnB,UAAU71B,EAAM;AAAA,QAChB,OAAOA,EAAM;AAAA,QACb,gBAAgBtL,EAAM;AAAA,QACtB,gBAAgBsL,EAAM;AAAA,QACtB,gBAAgBA,EAAM;AAAA,QACtB,gBAAgBA,EAAM;AAAA,QACtB,SAAAurB;AAAA,QACA,IAAIr4C,EAAG;AAAA,MAAA;AAAA,IACT;AAGJ,IAAAqgB,GAAU,MAAM;AACd,MAAK0e,MACLA,EAAW,YAAY8jB,CAAG,GACtB/1B,EAAM,UACGiS,EAAA,YAAY9Q,EAAW,KAAK;AAAA,IACzC,CACD,GAED60B,GAAY,MAAM;AAChB,MAAK/jB,KACMA,EAAA,cAAc9Q,EAAW,KAAK;AAAA,IAAA,CAC1C;AAED,UAAM7P,IAAWY,EAAM,OAAM+f,KAAA,gBAAAA,EAAY,SAAS,WAAU9Q,EAAW,KAAK,GACtED,IAAOjU,EAAIqE,EAAS,KAAK,GAEzB2kC,IAAe/jC,EAAM,MAAM,CAAC,EAAE+f,KAAA,QAAAA,EAAY,KAAK,UAAUjS,EAAM,YAAYA,EAAM,MAAM,GACvFk2B,IAAmBhkC,EAAM,MAAM8N,EAAM,aAAa,MAAS,GAE3Dm2B,IAAiBjkC,EAAM,MAAMZ,EAAS,SAAS,CAAC0O,EAAM,QAAQ,GAC9Do2B,IAAWlkC;AAAAA,MACf,MACEikC,EAAe,SACf,CAACF,EAAa,SACbA,EAAa,SAASC,EAAiB,SAASJ,EAAoB;AAAA,IAAA;AAGnE,IAAAnoC,GAAA2D,GAAU,CAACutB,MAAW;AAC1B,UAAIA,GAAQ;AACV,QAAA+W,EAAY,QAAQ,IACpB,WAAW,MAAM;AACf,UAAA10B,EAAK,QAAQ;AAAA,WACZ,CAAC;AACJ;AAAA,MACF;AACA,MAAAA,EAAK,QAAQ,IACb00B,EAAY,QAAQ;AAAA,IAAA,CACrB,GACDjoC;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAAC6e,MAAW;AACV,YAAK5M,GACL;AAAA,cAAI,CAAC4M,GAAQ;AACX,YAAIvtB,EAAS,SACX2gB,EAAW,YAAY,MAAS;AAElC;AAAA,UACF;AACW,UAAAA,EAAA,YAAY9Q,EAAW,KAAK;AAAA;AAAA,MACzC;AAAA,IAAA;AAGI,UAAAoB,IAAkBzwB,EAAS,MAAM;AAAA,MACrC;AAAA,QACE,QAAUwf,EAAS;AAAA,QACnB,MAAQ4P,EAAK;AAAA,QACb,cAAa+Q,KAAA,gBAAAA,EAAY,KAAK,UAASjS,EAAM,WAAW;AAAA,QACxD,MAAQ,EAACiS,KAAA,QAAAA,EAAY,OAAO;AAAA,MAC9B;AAAA,MACA/Q,EAAK,QAAQ+Q,KAAA,gBAAAA,EAAY,iBAAiBA,KAAA,gBAAAA,EAAY;AAAA,MACtDA,KAAA,gBAAAA,EAAY;AAAA,IAAA,CACb;AAEK,WAAAtkB,GAAAyoC,GAAU,CAACC,MAAU;AACrB,MAAAA,KAAS,CAACP,EAAoB,UAAOA,EAAoB,QAAQ;AAAA,IAAA,CACtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzED,UAAM91B,IAAQY,GA0BRX,IAAOY,GAgBPC,IAAaC,GAAmBH,GAAA,YAErC,GACK01B,IAAWv1B,MAAgC,UAEhD,GAEKw1B,IAAmBliC,MAEnBmiC,IAAevpC,EAAoB,CAAA,CAAE,GAErCwpC,IAAO3kD;AAAA,MAAS,MACpB0kD,EAAa,MAAM,IAAI,CAACE,MAAS;AACzB,cAAAX,IAAM/pC,EAAM0qC,CAAI,GAChB7X,IAASkX,EAAI,OAAOO,EAAS;AAE5B,eAAA;AAAA,UACL,GAAGP;AAAA,UACH,QAAAlX;AAAA,UACA,gBAAgB;AAAA,YACd;AAAA,cACE,QAAAA;AAAA,cACA,UAAUkX,EAAI;AAAA,YAChB;AAAA,YACAlX,IAAS7e,EAAM,qBAAqBA,EAAM;AAAA,YAC1CA,EAAM;AAAA,YACN+1B,EAAI;AAAA,UACN;AAAA,QAAA;AAAA,MACF,CACD;AAAA,IAAA,GAGGY,IAAYzkC,EAAM,MAAM,EAAEukC,KAAA,QAAAA,EAAM,SAASA,EAAK,MAAM,SAAS,EAAE,GAE/Dl0B,IAAkBzwB,EAAS,OAAO;AAAA,MACtC,UAAUkuB,EAAM;AAAA,MAChB,qBAAqBA,EAAM;AAAA,IAC3B,EAAA,GAEI/oB,IAAYrF,GAAa,MAAMouB,EAAM,KAAK,GAE1C42B,IAAiB9kD,EAAS,OAAO;AAAA,MACrC,aAAakuB,EAAM;AAAA,MACnB,oBAAoBA,EAAM;AAAA,MAC1B,CAAC/oB,EAAU,KAAK,GAAG+oB,EAAM,UAAU;AAAA,MACnC,YAAYA,EAAM;AAAA,MAClB,oBAAoBA,EAAM;AAAA,MAC1B,iBAAiBA,EAAM;AAAA,MACvB,YAAY,CAACA,EAAM,cAAc,CAACA,EAAM;AAAA,MACxC,OAASA,EAAM;AAAA,IACf,EAAA,GAEI62B,IAAc,CAACtnC,MAAwB;;AAC3C,UAAIA,MAAU,QAAW;AACvB,cAAM0b,KAAK/a,IAAAumC,EAAK,MAAMlnC,CAAK,MAAhB,gBAAAW,EAAmB;AAE5B,YAAAX,IAAQ,MACRA,IAAQknC,EAAK,MAAM,UACnB,CAACA,EAAK,MAAMlnC,CAAK,EAAE,aAClBuR,EAAW,QAAQ,KAAKw1B,EAAS,UAAUrrB,KAAMnK,EAAW,UAAUvR,IACvE;AACA,gBAAMunC,IAAW,IAAIxkD,GAAQ,gBAAgB,EAAC,YAAY,IAAK;AAC/D,UAAA2tB,EAAK,gBAAgB1Q,GAAOuR,EAAW,OAAOg2B,CAAQ,GACjDA,EAAS,qBACRR,EAAS,UAAUrrB,MAAIqrB,EAAS,QAAQrrB,IACxCnK,EAAW,UAAUvR,MAAOuR,EAAW,QAAQvR;AAAA,QAEvD;AAAA,MACF;AAAA,IAAA,GAGIwnC,IAAc,CAAC/hD,GAA6Bua,MAAkB;;AAClE,MAAAsnC,EAAYtnC,CAAK,GAEfA,KAAS,KACT,CAACknC,EAAK,MAAMlnC,CAAK,EAAE,cACnBW,IAAAumC,EAAK,MAAMlnC,CAAK,MAAhB,QAAAW,EAAmB,YACnB,OAAOumC,EAAK,MAAMlnC,CAAK,EAAE,WAAY,gBAErC2Q,KAAA/P,IAAAsmC,EAAK,MAAMlnC,CAAK,GAAE,YAAlB,QAAA2Q,EAAA,KAAA/P,GAA4Bnb;AAAA,IAC9B,GAGI4pC,IAAS,CAAC7rC,MAAsB;;AAChC,MAAA0jD,EAAK,MAAM,UAAU,MACzB31B,EAAW,QAAQtiB,EAAUsiB,EAAW,QAAQ/tB,GAAWA,CAAS,IAC3Dod,IAAA,SAAA,gBAAeD,IAAAumC,EAAK,MAAM31B,EAAW,KAAK,MAA3B,gBAAA5Q,EAA8B,QAAQ,MAArD,QAAAC,EAAwD;AAAA,IAAM,GAGnE3R,IAAY,CAACtI,GAAenD,MAAsB;AACtD,UAAIwc,IAAQrZ,GACR8gD,IAAS,IACTC,IAAS;AAEb,eAASp9C,IAAI,GAAGA,IAAI48C,EAAK,MAAM,QAAQ58C;AACrC,QAAK48C,EAAK,MAAM58C,CAAC,EAAE,aACbm9C,MAAW,OAAaA,IAAAn9C,IACnBo9C,IAAAp9C;AAIN,aAAA0V,KAASynC,KAAUznC,KAAS0nC,KAAUR,EAAK,MAAMlnC,CAAK,EAAE;AACpD,QAAAA,KAAAxc;AAGX,aAAIwc,IAAQynC,MAAgBznC,IAAAynC,IACxBznC,IAAQ0nC,MAAgB1nC,IAAA0nC,IAErB1nC;AAAA,IAAA;AAGH,IAAA5B,GAAAmT,GAAY,CAAC3N,GAAUgG,MAAa;AAEpC,UADAhG,MAAagG,KACbs9B,EAAK,MAAM,UAAU;AACvB;AAGF,YAAMlnC,IAAQ/Q,EAAU2U,GAAUA,IAAWgG,IAAW,IAAI,EAAE;AAC9D,MAAA3F,GAAS,MAAM;AACb,QAAAqjC,EAAYtnC,CAAK;AAAA,MAAA,CAClB;AAAA,IAAA,CACF,GAEK5B,GAAA2oC,GAAU,CAACnjC,GAAUgG,MAAa;AAChC,YAAA5J,IAAQknC,EAAK,MAAM,UAAU,CAAC9M,MAAMA,EAAE,OAAOx2B,CAAQ;AAC3D,UAAIA,MAAagG,KACb,EAAAs9B,EAAK,MAAM,UAAU,IAGzB;AAAA,YAAIlnC,MAAU,IAAI;AACJ,UAAAsnC,EAAAr4C,EAAU,GAAG,CAAC,CAAC;AAC3B;AAAA,QACF;AACA,QAAAq4C,EAAYtnC,CAAK;AAAA;AAAA,IAAA,CAClB;AAEK,UAAA2nC,IAAc,CAACnB,MAAsB;AACzC,MAAKS,EAAa,MAAM,KAAK,CAAC7M,MAAMA,EAAE,MAAM,OAAOoM,EAAI,MAAM,EAAE,IAG7DS,EAAa,MAAMA,EAAa,MAAM,UAAU,CAAC7M,MAAMA,EAAE,MAAM,OAAOoM,EAAI,MAAM,EAAE,CAAC,IAAIA,IAF1ES,EAAA,MAAM,KAAKT,CAAG,GAI7BS,EAAa,MAAM,KAAK,CAACl5C,GAAGC,MAAM;AAC5B,YAAA,CAAC,QAAQ,CAACD,EAAE,MAAM,MAAM,CAACC,EAAE,MAAM;AAAW,iBAAA;AAChD,cAAMkQ,IAAWnQ,EAAE,MAAM,GAAG,wBAAwBC,EAAE,MAAM,EAAE;AAC9D,eAAIkQ,IAAW,KAAK,8BAAoC,KACpDA,IAAW,KAAK,8BAAoC,IACjD;AAAA,MAAA,CACR;AAAA,IAAA,GAEG0pC,IAAgB,CAAClsB,MAAe;AACvB,MAAAurB,EAAA,QAAQA,EAAa,MAAM,OAAO,CAAC7M,MAAMA,EAAE,MAAM,OAAO1e,CAAE;AAAA,IAAA;AAGzE,IAAAtd;AAAA,MACE6oC;AAAA,MACA,MAAM;AACO,QAAAY;MACb;AAAA,MACA,EAAC,MAAM,GAAI;AAAA,IAAA;AAGb,UAAMA,IAAa,MAAM;;AACnB,UAAAX,EAAK,MAAM,WAAW,GAAG;AAC3B,QAAA31B,EAAW,QAAQ,IACnBw1B,EAAS,QAAQ;AACjB;AAAA,MACF;AAII,UAHAx1B,EAAW,SAAS,KAAK,CAACw1B,EAAS,UACrCA,EAAS,SAAQpmC,IAAAumC,EAAK,MAAM31B,EAAW,KAAK,MAA3B,gBAAA5Q,EAA8B,KAE7CumC,EAAK,MAAM,KAAK,CAAC9M,MAAMA,EAAE,OAAO2M,EAAS,KAAK,GAAG;AACvC,QAAAO,EAAAJ,EAAK,MAAM,UAAU,CAAC9M,MAAMA,EAAE,OAAO2M,EAAS,KAAK,CAAC;AAChE;AAAA,MACF;AACY,MAAAO,EAAAJ,EAAK,MAAM,IAAI,CAACV,MAAQ,CAACA,EAAI,QAAQ,EAAE,QAAQ,EAAI,CAAC;AAAA,IAAA;AAGlE,WAAAtjB,GAAQhM,IAAkB;AAAA,MACxB,MAAMvU,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,MAAM9N,EAAM,MAAM8N,EAAM,IAAI;AAAA,MAC5B,QAAQ9N,EAAM,MAAM8N,EAAM,MAAM;AAAA,MAChC,gBAAgB9N,EAAM,MAAM8N,EAAM,cAAc;AAAA,MAChD,kBAAkB9N,EAAM,MAAM8N,EAAM,gBAAgB;AAAA,MACpD,UAAU9N,EAAM,MAAM8N,EAAM,QAAQ;AAAA,MACpC,aAAAk3B;AAAA,MACA,eAAAC;AAAA,MACA,UAAAb;AAAA,MACA,aAAa,CAACrrB,MAAO;AACb,cAAA8P,IAAM0b,EAAK,MAAM,UAAU,CAAC9M,MAAMA,EAAE,OAAO1e,CAAE;AAC/C,YAAAA,MAAO,UAAa8P,MAAQ,IAAI;AACtB,UAAA8b,EAAAr4C,EAAU,GAAG,CAAC,CAAC;AAC3B;AAAA,QACF;AACA,QAAAq4C,EAAY9b,CAAG;AAAA,MACjB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChRD,UAAM/a,IAAQY,GAMRy2B,IAAiB;AAAA,MACrB,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,aAAa;AAAA,MACb,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,IAAA,GAGZ,EAAC,QAAApjB,GAAQ,QAAAP,GAAQ,MAAAxS,GAAM,cAAA0S,EAAA,IAAgB5C;AAE7C,IAAArjB;AAAA,MACE,MAAMqS,EAAM;AAAA,MACZ,CAACjuB,MAAU;AACT,QAAA6hC,KAAA,QAAAA,EAAe7hC;AAAA,MACjB;AAAA,MACA,EAAC,WAAW,GAAI;AAAA,IAAA;AAGZ,UAAAulD,IAAiB,CACrBhN,MACGziB,GAAKyiB,GAAS,CAAC,eAAe,SAAS,KAAK,CAAC;AAErC,WAAAznB,EAAA;AAAA,MACX,QAAAoR;AAAA,MACA,MAAA/S;AAAA,MACA,QAAAwS;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDD,UAAM1T,IAAQY,GA8BRE,IAAaC,kBAAqD,GAElEw2B,IAAgBzlD,EAAwB,MAAM;AAClD,YAAM,EAAC,aAAA0lD,GAAa,gBAAAC,GAAgB,GAAGC,MAAQ13B;AACxC,aAAA,EAAC,gBAAgBy3B,MAAmB,SAAYA,IAAiB,CAACD,GAAa,GAAGE;IAAI,CAC9F,GAEKC,IAAU1qC,EAA0C,IAAI;AAEjD,WAAA4V,EAAA;AAAA,MACX,OAAM3S,IAAAynC,EAAQ,UAAR,gBAAAznC,EAAe;AAAA,MACrB,OAAMC,IAAAwnC,EAAQ,UAAR,gBAAAxnC,EAAe;AAAA,MACrB,SAAQ+P,IAAAy3B,EAAQ,UAAR,gBAAAz3B,EAAe;AAAA,IAAA,CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CCkEY03B,KAAkB,CAAC;AAAA,EAC9B,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa;AAAA,EACb,SAAAC,IAAU,CAAC;AACb,IAAyB,QAAgB;AAAA,EACvC,QAAQtkB,GAAK;AACX,UAAMukB,IAAqB,OAAOH,KAAe,YAAY,EAAC,KAAKA,EAAc,IAAAA,GAE3EI,IAAgB,OAAO,KAAKC,EAAU;AAC5C,IAAAvvB,GAAmBqvB,GAAoBC,CAAa,EAAE,QAAQ,CAACn+C,MAAS;AAChE,YAAAwzB,IAAY4qB,GAAWp+C,CAAI;AAC7B,MAAA25B,EAAA,UAAU35B,GAAMwzB,CAAS;AAAA,IAAA,CAC9B;AAED,UAAM6qB,IAAqB,OAAOL,KAAe,YAAY,EAAC,KAAKA,EAAc,IAAAA,GAE3EM,IAAgB,OAAO,KAAKC,EAAU,GACtCC,IAAY,CAAC3mC,MAAiBA,EAAI,YAAY,EAAE,WAAW,GAAG,IAAIA,EAAI,MAAM,CAAC,IAAIA;AACvF,IAAAgX,GAAmBwvB,GAAoBC,CAAa,EAAE,QAAQ,CAACt+C,MAAS;AAChE,YAAAy+C,IAAaD,EAAUx+C,CAAI,GAC3B0+C,IAAYH,GAAWv+C,CAAI;AAC7B,MAAA25B,EAAA,UAAU8kB,GAAYC,CAAS;AAAA,IAAA,CACpC,KAEGT,KAAA,gBAAAA,EAAS,eAAc,OACzBtkB,EAAI,IAAIU,EAAgB,MAErB4jB,KAAA,gBAAAA,EAAS,OAAM,OAAkB,OAAOA,EAAQ,MAAO,aACtDtkB,EAAA,IAAIW,IAAU2jB,CAAO,KAEvBA,KAAA,gBAAAA,EAAS,oBAAmB,OAC9BtkB,EAAI,IAAI4D,EAAqB,KAE3B0gB,KAAA,gBAAAA,EAAS,iBAAgB,OAC3BtkB,EAAI,IAAIjH,EAAkB,MAEvBurB,KAAA,gBAAAA,EAAS,QAAO,OAAkB,OAAOA,EAAQ,OAAQ,aACxDtkB,EAAA,IAAIvF,IAAW6pB,CAAO,KAExBA,KAAA,gBAAAA,EAAS,UAAS,OACpBtkB,EAAI,IAAID,EAAW;AAAA,EAEvB;AACF;","x_google_ignoreList":[8,9,10,11,12,14,15]}