{"ast":null,"code":"import { getBsVer } from 'ngx-bootstrap/utils';\nimport * as i0 from '@angular/core';\nimport { PLATFORM_ID, Injectable, Inject, ElementRef } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, fromEvent, animationFrameScheduler, of, merge } from 'rxjs';\nvar MapPlacementInToRL;\n(function (MapPlacementInToRL) {\n  MapPlacementInToRL[\"top\"] = \"top\";\n  MapPlacementInToRL[\"bottom\"] = \"bottom\";\n  MapPlacementInToRL[\"left\"] = \"left\";\n  MapPlacementInToRL[\"right\"] = \"right\";\n  MapPlacementInToRL[\"auto\"] = \"auto\";\n  MapPlacementInToRL[\"end\"] = \"right\";\n  MapPlacementInToRL[\"start\"] = \"left\";\n  MapPlacementInToRL[\"top left\"] = \"top left\";\n  MapPlacementInToRL[\"top right\"] = \"top right\";\n  MapPlacementInToRL[\"right top\"] = \"right top\";\n  MapPlacementInToRL[\"right bottom\"] = \"right bottom\";\n  MapPlacementInToRL[\"bottom right\"] = \"bottom right\";\n  MapPlacementInToRL[\"bottom left\"] = \"bottom left\";\n  MapPlacementInToRL[\"left bottom\"] = \"left bottom\";\n  MapPlacementInToRL[\"left top\"] = \"left top\";\n  MapPlacementInToRL[\"top start\"] = \"top left\";\n  MapPlacementInToRL[\"top end\"] = \"top right\";\n  MapPlacementInToRL[\"end top\"] = \"right top\";\n  MapPlacementInToRL[\"end bottom\"] = \"right bottom\";\n  MapPlacementInToRL[\"bottom end\"] = \"bottom right\";\n  MapPlacementInToRL[\"bottom start\"] = \"bottom left\";\n  MapPlacementInToRL[\"start bottom\"] = \"start bottom\";\n  MapPlacementInToRL[\"start top\"] = \"left top\";\n})(MapPlacementInToRL || (MapPlacementInToRL = {}));\nvar PlacementForBs5;\n(function (PlacementForBs5) {\n  PlacementForBs5[\"top\"] = \"top\";\n  PlacementForBs5[\"bottom\"] = \"bottom\";\n  PlacementForBs5[\"left\"] = \"start\";\n  PlacementForBs5[\"right\"] = \"end\";\n  PlacementForBs5[\"auto\"] = \"auto\";\n  PlacementForBs5[\"end\"] = \"end\";\n  PlacementForBs5[\"start\"] = \"start\";\n  PlacementForBs5[\"top left\"] = \"top start\";\n  PlacementForBs5[\"top right\"] = \"top end\";\n  PlacementForBs5[\"right top\"] = \"end top\";\n  PlacementForBs5[\"right bottom\"] = \"end bottom\";\n  PlacementForBs5[\"bottom right\"] = \"bottom end\";\n  PlacementForBs5[\"bottom left\"] = \"bottom start\";\n  PlacementForBs5[\"left bottom\"] = \"start bottom\";\n  PlacementForBs5[\"left top\"] = \"start top\";\n  PlacementForBs5[\"top start\"] = \"top start\";\n  PlacementForBs5[\"top end\"] = \"top end\";\n  PlacementForBs5[\"end top\"] = \"end top\";\n  PlacementForBs5[\"end bottom\"] = \"end bottom\";\n  PlacementForBs5[\"bottom end\"] = \"bottom end\";\n  PlacementForBs5[\"bottom start\"] = \"bottom start\";\n  PlacementForBs5[\"start bottom\"] = \"start bottom\";\n  PlacementForBs5[\"start top\"] = \"start top\";\n})(PlacementForBs5 || (PlacementForBs5 = {}));\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  const window = element.ownerDocument.defaultView;\n  const css = window?.getComputedStyle(element, null);\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  return property ? css && css[property] : css;\n}\n\n/**\n * Returns the offset parent of the given element\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n  const noOffsetParent = null;\n  // NOTE: 1 DOM access here\n  let offsetParent = element?.offsetParent;\n  // Skip hidden elements which don't have an offsetParent\n  let sibling = void 0;\n  while (offsetParent === noOffsetParent && element.nextElementSibling && sibling !== element.nextElementSibling) {\n    // todo: valorkin fix\n    sibling = element.nextElementSibling;\n    offsetParent = sibling.offsetParent;\n  }\n  const nodeName = offsetParent && offsetParent.nodeName;\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return sibling ? sibling.ownerDocument.documentElement : document.documentElement;\n  }\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  if (offsetParent && ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n  return offsetParent;\n}\n\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isOffsetContainer(element) {\n  const {\n    nodeName\n  } = element;\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  const start = order ? element1 : element2;\n  const end = order ? element2 : element1;\n  // Get common ancestor container\n  const range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  // todo: valorkin fix\n  const commonAncestorContainer = range.commonAncestorContainer;\n  // Both nodes are inside #document\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n    return getOffsetParent(commonAncestorContainer);\n  }\n  // one of the nodes is inside shadowDOM, find which one\n  const element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n */\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement) {\n    return document.documentElement;\n  }\n  let el = element.parentElement;\n  while (el?.parentElement && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Helper to detect borders of a given element\n */\nfunction getBordersSize(styles, axis) {\n  const sideA = axis === 'x' ? 'Left' : 'Top';\n  const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n  return parseFloat(styles[`border${sideA}Width`]) + parseFloat(styles[`border${sideB}Width`]);\n}\nfunction getSize(axis, body, html) {\n  const _body = body;\n  const _html = html;\n  return Math.max(_body[`offset${axis}`], _body[`scroll${axis}`], _html[`client${axis}`], _html[`offset${axis}`], _html[`scroll${axis}`], 0);\n}\nfunction getWindowSizes(document) {\n  const body = document.body;\n  const html = document.documentElement;\n  return {\n    height: getSize('Height', body, html),\n    width: getSize('Width', body, html)\n  };\n}\nfunction getClientRect(offsets) {\n  return {\n    ...offsets,\n    right: (offsets.left || 0) + offsets.width,\n    bottom: (offsets.top || 0) + offsets.height\n  };\n}\n\n/**\n * Tells if a given input is a number\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(Number(n));\n}\nfunction isNumber(value) {\n  return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\n}\n\n/**\n * Get bounding client rect of given element\n */\nfunction getBoundingClientRect(element) {\n  const rect = element.getBoundingClientRect();\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  // try {\n  //   if (isIE(10)) {\n  //     const scrollTop = getScroll(element, 'top');\n  //     const scrollLeft = getScroll(element, 'left');\n  //     if (rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right)) {\n  //       rect.top += scrollTop;\n  //       rect.left += scrollLeft;\n  //       rect.bottom += scrollTop;\n  //       rect.right += scrollLeft;\n  //     }\n  //   }\n  // } catch (e) {\n  //   return rect;\n  // }\n  if (!(rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right))) {\n    return rect;\n  }\n  const result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n  // subtract scrollbar size from sizes\n  const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : undefined;\n  const width = sizes?.width || element.clientWidth || isNumber(rect.right) && isNumber(result.left) && rect.right - result.left || 0;\n  const height = sizes?.height || element.clientHeight || isNumber(rect.bottom) && isNumber(result.top) && rect.bottom - result.top || 0;\n  let horizScrollbar = element.offsetWidth - width;\n  let vertScrollbar = element.offsetHeight - height;\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    const styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n  return getClientRect(result);\n}\nfunction getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n  const isHTML = parent.nodeName === 'HTML';\n  const childrenRect = getBoundingClientRect(children);\n  const parentRect = getBoundingClientRect(parent);\n  const styles = getStyleComputedProperty(parent);\n  const borderTopWidth = parseFloat(styles.borderTopWidth);\n  const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top ?? 0, 0);\n    parentRect.left = Math.max(parentRect.left ?? 0, 0);\n  }\n  const offsets = getClientRect({\n    top: (childrenRect.top ?? 0) - (parentRect.top ?? 0) - borderTopWidth,\n    left: (childrenRect.left ?? 0) - (parentRect.left ?? 0) - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (isHTML) {\n    const marginTop = parseFloat(styles.marginTop);\n    const marginLeft = parseFloat(styles.marginLeft);\n    if (isNumber(offsets.top)) {\n      offsets.top -= borderTopWidth - marginTop;\n    }\n    if (isNumber(offsets.bottom)) {\n      offsets.bottom -= borderTopWidth - marginTop;\n    }\n    if (isNumber(offsets.left)) {\n      offsets.left -= borderLeftWidth - marginLeft;\n    }\n    if (isNumber(offsets.right)) {\n      offsets.right -= borderLeftWidth - marginLeft;\n    }\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n  return offsets;\n}\n\n/**\n * Returns the parentNode or the host of the element\n */\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n */\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n    default:\n  }\n  // Firefox want us to check `-x` and `-y` variations as well\n  const {\n    overflow,\n    overflowX,\n    overflowY\n  } = getStyleComputedProperty(element);\n  if (/(auto|scroll|overlay)/.test(String(overflow) + String(overflowY) + String(overflowX))) {\n    return element;\n  }\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n */\nfunction getScroll(element, side = 'top') {\n  const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  const nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    const html = element.ownerDocument.documentElement;\n    const scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n  return element[upperSide];\n}\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n  const html = element.ownerDocument.documentElement;\n  const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  const width = Math.max(html.clientWidth, window.innerWidth || 0);\n  const height = Math.max(html.clientHeight, window.innerHeight || 0);\n  const scrollTop = !excludeScroll ? getScroll(html) : 0;\n  const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n  const offset = {\n    top: scrollTop - Number(relativeOffset?.top) + Number(relativeOffset?.marginTop),\n    left: scrollLeft - Number(relativeOffset?.left) + Number(relativeOffset?.marginLeft),\n    width,\n    height\n  };\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n */\nfunction isFixed(element) {\n  const nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  return isFixed(getParentNode(element));\n}\nfunction getBoundaries(target, host, padding = 0, boundariesElement, fixedPosition = false) {\n  // NOTE: 1 DOM access here\n  let boundaries = {\n    top: 0,\n    left: 0\n  };\n  const offsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host);\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    let boundariesNode;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(host));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = target.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = target.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n    const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n    // In case of HTML, we need a different computation\n    if (offsets && boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      const {\n        height,\n        width\n      } = getWindowSizes(target.ownerDocument);\n      if (isNumber(boundaries.top) && isNumber(offsets.top) && isNumber(offsets.marginTop)) {\n        boundaries.top += offsets.top - offsets.marginTop;\n      }\n      if (isNumber(boundaries.top)) {\n        boundaries.bottom = Number(height) + Number(offsets.top);\n      }\n      if (isNumber(boundaries.left) && isNumber(offsets.left) && isNumber(offsets.marginLeft)) {\n        boundaries.left += offsets.left - offsets.marginLeft;\n      }\n      if (isNumber(boundaries.top)) {\n        boundaries.right = Number(width) + Number(offsets.left);\n      }\n    } else if (offsets) {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n  // Add paddings\n  if (isNumber(boundaries.left)) {\n    boundaries.left += padding;\n  }\n  if (isNumber(boundaries.top)) {\n    boundaries.top += padding;\n  }\n  if (isNumber(boundaries.right)) {\n    boundaries.right -= padding;\n  }\n  if (isNumber(boundaries.bottom)) {\n    boundaries.bottom -= padding;\n  }\n  return boundaries;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n */\nfunction getArea({\n  width,\n  height\n}) {\n  return width * height;\n}\nfunction computeAutoPlacement(placement, refRect, target, host, allowedPositions = ['top', 'bottom', 'right', 'left'], boundariesElement = 'viewport', padding = 0) {\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n  const boundaries = getBoundaries(target, host, padding, boundariesElement);\n  const rects = {\n    top: {\n      width: boundaries?.width ?? 0,\n      height: (refRect?.top ?? 0) - (boundaries?.top ?? 0)\n    },\n    right: {\n      width: (boundaries?.right ?? 0) - (refRect?.right ?? 0),\n      height: boundaries?.height ?? 0\n    },\n    bottom: {\n      width: boundaries?.width ?? 0,\n      height: (boundaries?.bottom ?? 0) - (refRect?.bottom ?? 0)\n    },\n    left: {\n      width: (refRect.left ?? 0) - (boundaries?.left ?? 0),\n      height: boundaries?.height ?? 0\n    }\n  };\n  const sortedAreas = Object.keys(rects).map(key => ({\n    position: key,\n    ...rects[key],\n    area: getArea(rects[key])\n  })).sort((a, b) => b.area - a.area);\n  let filteredAreas = sortedAreas.filter(({\n    width,\n    height\n  }) => {\n    return width >= target.clientWidth && height >= target.clientHeight;\n  });\n  filteredAreas = filteredAreas.filter(({\n    position\n  }) => {\n    return allowedPositions.some(allowedPosition => {\n      return allowedPosition === position;\n    });\n  });\n  const computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].position : sortedAreas[0].position;\n  const variation = placement.split(' ')[1];\n  // for tooltip on auto position\n  target.className = target.className.replace(/bs-tooltip-auto/g, `bs-tooltip-${getBsVer().isBs5 ? PlacementForBs5[computedPlacement] : computedPlacement}`);\n  return computedPlacement + (variation ? `-${variation}` : '');\n}\nfunction getOffsets(data) {\n  return {\n    width: data.offsets.target.width,\n    height: data.offsets.target.height,\n    left: Math.floor(data.offsets.target.left ?? 0),\n    top: Math.round(data.offsets.target.top ?? 0),\n    bottom: Math.round(data.offsets.target.bottom ?? 0),\n    right: Math.floor(data.offsets.target.right ?? 0)\n  };\n}\n\n/**\n * Get the opposite placement of the given one\n */\nfunction getOppositePlacement(placement) {\n  const hash = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n\n/**\n * Get the opposite placement variation of the given one\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'right') {\n    return 'left';\n  } else if (variation === 'left') {\n    return 'right';\n  }\n  return variation;\n}\nconst parse = (value, def = 0) => value ? parseFloat(value) : def;\nfunction getOuterSizes(element) {\n  const window = element.ownerDocument.defaultView;\n  const styles = window?.getComputedStyle(element);\n  const x = parse(styles?.marginTop) + parse(styles?.marginBottom);\n  const y = parse(styles?.marginLeft) + parse(styles?.marginRight);\n  return {\n    width: Number(element.offsetWidth) + y,\n    height: Number(element.offsetHeight) + x\n  };\n}\n\n/**\n * Get offsets to the reference element\n */\nfunction getReferenceOffsets(target, host, fixedPosition) {\n  const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host);\n  return getOffsetRectRelativeToArbitraryNode(host, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get offsets to the target\n */\nfunction getTargetOffsets(target, hostOffsets, position) {\n  const placement = position.split(' ')[0];\n  // Get target node sizes\n  const targetRect = getOuterSizes(target);\n  // Add position, width and height to our offsets object\n  const targetOffsets = {\n    width: targetRect.width,\n    height: targetRect.height\n  };\n  // depending by the target placement we have to compute its offsets slightly differently\n  const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  const mainSide = isHoriz ? 'top' : 'left';\n  const secondarySide = isHoriz ? 'left' : 'top';\n  const measurement = isHoriz ? 'height' : 'width';\n  const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n  targetOffsets[mainSide] = (hostOffsets[mainSide] ?? 0) + hostOffsets[measurement] / 2 - targetRect[measurement] / 2;\n  targetOffsets[secondarySide] = placement === secondarySide ? (hostOffsets[secondarySide] ?? 0) - targetRect[secondaryMeasurement] : hostOffsets[getOppositePlacement(secondarySide)] ?? 0;\n  return targetOffsets;\n}\nfunction isModifierEnabled(options, modifierName) {\n  return !!options.modifiers[modifierName]?.enabled;\n}\nconst availablePositions = {\n  top: ['top', 'top start', 'top end'],\n  bottom: ['bottom', 'bottom start', 'bottom end'],\n  start: ['start', 'start top', 'start bottom'],\n  end: ['end', 'end top', 'end bottom']\n};\nfunction checkPopoverMargin(placement, checkPosition) {\n  if (!getBsVer().isBs5) {\n    return false;\n  }\n  return availablePositions[checkPosition].includes(placement);\n}\nfunction checkMargins(placement) {\n  if (!getBsVer().isBs5) {\n    return '';\n  }\n  if (checkPopoverMargin(placement, 'end')) {\n    return 'ms-2';\n  }\n  if (checkPopoverMargin(placement, 'start')) {\n    return 'me-2';\n  }\n  if (checkPopoverMargin(placement, 'top')) {\n    return 'mb-2';\n  }\n  if (checkPopoverMargin(placement, 'bottom')) {\n    return 'mt-2';\n  }\n  return '';\n}\nfunction updateContainerClass(data, renderer) {\n  const target = data.instance.target;\n  let containerClass = target.className;\n  const dataPlacement = getBsVer().isBs5 ? PlacementForBs5[data.placement] : data.placement;\n  if (data.placementAuto) {\n    containerClass = containerClass.replace(/bs-popover-auto/g, `bs-popover-${dataPlacement}`);\n    containerClass = containerClass.replace(/ms-2|me-2|mb-2|mt-2/g, '');\n    containerClass = containerClass.replace(/bs-tooltip-auto/g, `bs-tooltip-${dataPlacement}`);\n    containerClass = containerClass.replace(/\\sauto/g, ` ${dataPlacement}`);\n    if (containerClass.indexOf('popover') !== -1) {\n      containerClass = containerClass + ' ' + checkMargins(dataPlacement);\n    }\n    if (containerClass.indexOf('popover') !== -1 && containerClass.indexOf('popover-auto') === -1) {\n      containerClass += ' popover-auto';\n    }\n    if (containerClass.indexOf('tooltip') !== -1 && containerClass.indexOf('tooltip-auto') === -1) {\n      containerClass += ' tooltip-auto';\n    }\n  }\n  containerClass = containerClass.replace(/left|right|top|bottom|end|start/g, `${dataPlacement.split(' ')[0]}`);\n  if (renderer) {\n    renderer.setAttribute(target, 'class', containerClass);\n    return;\n  }\n  target.className = containerClass;\n}\nfunction setStyles(element, styles, renderer) {\n  if (!element || !styles) {\n    return;\n  }\n  Object.keys(styles).forEach(prop => {\n    let unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    if (renderer) {\n      renderer.setStyle(element, prop, `${String(styles[prop])}${unit}`);\n      return;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    element.style[prop] = String(styles[prop]) + unit;\n  });\n}\nfunction arrow(data) {\n  let targetOffsets = data.offsets.target;\n  // if arrowElement is a string, suppose it's a CSS selector\n  const arrowElement = data.instance.target.querySelector('.arrow');\n  // if arrowElement is not found, don't run the modifier\n  if (!arrowElement) {\n    return data;\n  }\n  const isVertical = ['left', 'right'].indexOf(data.placement.split(' ')[0]) !== -1;\n  const len = isVertical ? 'height' : 'width';\n  const sideCapitalized = isVertical ? 'Top' : 'Left';\n  const side = sideCapitalized.toLowerCase();\n  const altSide = isVertical ? 'left' : 'top';\n  const opSide = isVertical ? 'bottom' : 'right';\n  const arrowElementSize = getOuterSizes(arrowElement)[len];\n  const placementVariation = data.placement.split(' ')[1];\n  // top/left side\n  if ((data.offsets.host[opSide] ?? 0) - arrowElementSize < (targetOffsets[side] ?? 0)) {\n    targetOffsets[side] -= (targetOffsets[side] ?? 0) - ((data.offsets.host[opSide] ?? 0) - arrowElementSize);\n  }\n  // bottom/right side\n  if (Number(data.offsets.host[side]) + Number(arrowElementSize) > (targetOffsets[opSide] ?? 0)) {\n    targetOffsets[side] += Number(data.offsets.host[side]) + Number(arrowElementSize) - Number(targetOffsets[opSide]);\n  }\n  targetOffsets = getClientRect(targetOffsets);\n  // Compute the sideValue using the updated target offsets\n  // take target margin in account because we don't have this info available\n  const css = getStyleComputedProperty(data.instance.target);\n  const targetMarginSide = parseFloat(css[`margin${sideCapitalized}`]) || 0;\n  const targetBorderSide = parseFloat(css[`border${sideCapitalized}Width`]) || 0;\n  // compute center of the target\n  let center;\n  if (!placementVariation) {\n    center = Number(data.offsets.host[side]) + Number(data.offsets.host[len] / 2 - arrowElementSize / 2);\n  } else {\n    const targetBorderRadius = parseFloat(css[\"borderRadius\"]) || 0;\n    const targetSideArrowOffset = Number(targetMarginSide + targetBorderSide + targetBorderRadius);\n    center = side === placementVariation ? Number(data.offsets.host[side]) + targetSideArrowOffset : Number(data.offsets.host[side]) + Number(data.offsets.host[len] - targetSideArrowOffset);\n  }\n  let sideValue = center - (targetOffsets[side] ?? 0) - targetMarginSide - targetBorderSide;\n  // prevent arrowElement from being placed not contiguously to its target\n  sideValue = Math.max(Math.min(targetOffsets[len] - (arrowElementSize + 5), sideValue), 0);\n  data.offsets.arrow = {\n    [side]: Math.round(sideValue),\n    [altSide]: '' // make sure to unset any eventual altSide value from the DOM node\n  };\n  data.instance.arrow = arrowElement;\n  return data;\n}\nfunction flip(data) {\n  data.offsets.target = getClientRect(data.offsets.target);\n  if (!isModifierEnabled(data.options, 'flip')) {\n    data.offsets.target = {\n      ...data.offsets.target,\n      ...getTargetOffsets(data.instance.target, data.offsets.host, data.placement)\n    };\n    return data;\n  }\n  const boundaries = getBoundaries(data.instance.target, data.instance.host, 0,\n  // padding\n  'viewport', false // positionFixed\n  );\n  let placement = data.placement.split(' ')[0];\n  let variation = data.placement.split(' ')[1] || '';\n  const offsetsHost = data.offsets.host;\n  const target = data.instance.target;\n  const host = data.instance.host;\n  const adaptivePosition = computeAutoPlacement('auto', offsetsHost, target, host, data.options.allowedPositions);\n  const flipOrder = [placement, adaptivePosition];\n  flipOrder.forEach((step, index) => {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return;\n    }\n    placement = data.placement.split(' ')[0];\n    // using floor because the host offsets may contain decimals we are not going to consider here\n    const overlapsRef = placement === 'left' && Math.floor(data.offsets.target.right ?? 0) > Math.floor(data.offsets.host.left ?? 0) || placement === 'right' && Math.floor(data.offsets.target.left ?? 0) < Math.floor(data.offsets.host.right ?? 0) || placement === 'top' && Math.floor(data.offsets.target.bottom ?? 0) > Math.floor(data.offsets.host.top ?? 0) || placement === 'bottom' && Math.floor(data.offsets.target.top ?? 0) < Math.floor(data.offsets.host.bottom ?? 0);\n    const overflowsLeft = Math.floor(data.offsets.target.left ?? 0) < Math.floor(boundaries.left ?? 0);\n    const overflowsRight = Math.floor(data.offsets.target.right ?? 0) > Math.floor(boundaries.right ?? 0);\n    const overflowsTop = Math.floor(data.offsets.target.top ?? 0) < Math.floor(boundaries.top ?? 0);\n    const overflowsBottom = Math.floor(data.offsets.target.bottom ?? 0) > Math.floor(boundaries.bottom ?? 0);\n    const overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n    // flip the variation if required\n    const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    const flippedVariation = isVertical && variation === 'left' && overflowsLeft || isVertical && variation === 'right' && overflowsRight || !isVertical && variation === 'left' && overflowsTop || !isVertical && variation === 'right' && overflowsBottom;\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n      data.placement = placement + (variation ? ` ${variation}` : '');\n      data.offsets.target = {\n        ...data.offsets.target,\n        ...getTargetOffsets(data.instance.target, data.offsets.host, data.placement)\n      };\n    }\n  });\n  return data;\n}\nfunction initData(targetElement, hostElement, position, options) {\n  if (!targetElement || !hostElement) {\n    return;\n  }\n  const hostElPosition = getReferenceOffsets(targetElement, hostElement);\n  if (!position.match(/^(auto)*\\s*(left|right|top|bottom|start|end)*$/) && !position.match(/^(left|right|top|bottom|start|end)*(?: (left|right|top|bottom|start|end))*$/)) {\n    position = 'auto';\n  }\n  const placementAuto = !!position.match(/auto/g);\n  // support old placements 'auto left|right|top|bottom'\n  let placement = position.match(/auto\\s(left|right|top|bottom|start|end)/) ? position.split(' ')[1] || 'auto' : position;\n  // Normalize placements that have identical main placement and variation (\"right right\" => \"right\").\n  const matches = placement.match(/^(left|right|top|bottom|start|end)* ?(?!\\1)(left|right|top|bottom|start|end)?/);\n  if (matches) {\n    placement = matches[1] + (matches[2] ? ` ${matches[2]}` : '');\n  }\n  // \"left right\", \"top bottom\" etc. placements also considered incorrect.\n  if (['left right', 'right left', 'top bottom', 'bottom top'].indexOf(placement) !== -1) {\n    placement = 'auto';\n  }\n  placement = computeAutoPlacement(placement, hostElPosition, targetElement, hostElement, options ? options.allowedPositions : undefined);\n  const targetOffset = getTargetOffsets(targetElement, hostElPosition, placement);\n  return {\n    options: options || {\n      modifiers: {}\n    },\n    instance: {\n      target: targetElement,\n      host: hostElement,\n      arrow: void 0\n    },\n    offsets: {\n      target: targetOffset,\n      host: hostElPosition,\n      arrow: void 0\n    },\n    positionFixed: false,\n    placement,\n    placementAuto\n  };\n}\nfunction preventOverflow(data) {\n  if (!isModifierEnabled(data.options, 'preventOverflow')) {\n    return data;\n  }\n  // NOTE: DOM access here\n  // resets the target Offsets's position so that the document size can be calculated excluding\n  // the size of the targetOffsets element itself\n  const transformProp = 'transform';\n  const targetStyles = data.instance.target.style; // assignment to help minification\n  const {\n    top,\n    left,\n    [transformProp]: transform\n  } = targetStyles;\n  targetStyles.top = '';\n  targetStyles.left = '';\n  targetStyles[transformProp] = '';\n  const boundaries = getBoundaries(data.instance.target, data.instance.host, 0,\n  // padding\n  data.options.modifiers.preventOverflow?.boundariesElement || 'scrollParent', false // positionFixed\n  );\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  targetStyles.top = top;\n  targetStyles.left = left;\n  targetStyles[transformProp] = transform;\n  const order = ['left', 'right', 'top', 'bottom'];\n  const check = {\n    primary(placement) {\n      let value = data.offsets.target[placement];\n      // options.escapeWithReference\n      if ((data.offsets.target[placement] ?? 0) < (boundaries[placement] ?? 0)) {\n        value = Math.max(data.offsets.target[placement] ?? 0, boundaries[placement] ?? 0);\n      }\n      return {\n        [placement]: value\n      };\n    },\n    secondary(placement) {\n      const isPlacementHorizontal = placement === 'right';\n      const mainSide = isPlacementHorizontal ? 'left' : 'top';\n      const measurement = isPlacementHorizontal ? 'width' : 'height';\n      let value = data.offsets.target[mainSide];\n      // escapeWithReference\n      if ((data.offsets.target[placement] ?? 0) > (boundaries[placement] ?? 0)) {\n        value = Math.min(data.offsets.target[mainSide] ?? 0, (boundaries[placement] ?? 0) - data.offsets.target[measurement]);\n      }\n      return {\n        [mainSide]: value\n      };\n    }\n  };\n  order.forEach(placement => {\n    const side = ['left', 'top', 'start'].indexOf(placement) !== -1 ? check['primary'] : check['secondary'];\n    data.offsets.target = {\n      ...data.offsets.target,\n      ...side(placement)\n    };\n  });\n  return data;\n}\nfunction shift(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split(' ')[0];\n  const shiftVariation = placement.split(' ')[1];\n  if (shiftVariation) {\n    const {\n      host,\n      target\n    } = data.offsets;\n    const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    const side = isVertical ? 'left' : 'top';\n    const measurement = isVertical ? 'width' : 'height';\n    const shiftOffsets = {\n      start: {\n        [side]: host[side]\n      },\n      end: {\n        [side]: (host[side] ?? 0) + host[measurement] - target[measurement]\n      }\n    };\n    data.offsets.target = {\n      ...target,\n      ...{\n        [side]: side === shiftVariation ? shiftOffsets.start[side] : shiftOffsets.end[side]\n      }\n    };\n  }\n  return data;\n}\nclass Positioning {\n  position(hostElement, targetElement /*, round = true*/) {\n    return this.offset(hostElement, targetElement /*, false*/);\n  }\n  offset(hostElement, targetElement /*, round = true*/) {\n    return getReferenceOffsets(targetElement, hostElement);\n  }\n  positionElements(hostElement, targetElement, position, appendToBody, options) {\n    const chainOfModifiers = [flip, shift, preventOverflow, arrow];\n    const _position = MapPlacementInToRL[position];\n    const data = initData(targetElement, hostElement, _position, options);\n    if (!data) {\n      return;\n    }\n    return chainOfModifiers.reduce((modifiedData, modifier) => modifier(modifiedData), data);\n  }\n}\nconst positionService = new Positioning();\nfunction positionElements(hostElement, targetElement, placement, appendToBody, options, renderer) {\n  const data = positionService.positionElements(hostElement, targetElement, placement, appendToBody, options);\n  if (!data) {\n    return;\n  }\n  const offsets = getOffsets(data);\n  setStyles(targetElement, {\n    'will-change': 'transform',\n    top: '0px',\n    left: '0px',\n    transform: `translate3d(${offsets.left}px, ${offsets.top}px, 0px)`\n  }, renderer);\n  if (data.instance.arrow) {\n    setStyles(data.instance.arrow, data.offsets.arrow, renderer);\n  }\n  updateContainerClass(data, renderer);\n}\nclass PositioningService {\n  constructor(ngZone, rendererFactory, platformId) {\n    this.update$$ = new Subject();\n    this.positionElements = new Map();\n    this.isDisabled = false;\n    if (isPlatformBrowser(platformId)) {\n      ngZone.runOutsideAngular(() => {\n        this.triggerEvent$ = merge(fromEvent(window, 'scroll', {\n          passive: true\n        }), fromEvent(window, 'resize', {\n          passive: true\n        }), of(0, animationFrameScheduler), this.update$$);\n        this.triggerEvent$.subscribe(() => {\n          if (this.isDisabled) {\n            return;\n          }\n          this.positionElements\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          .forEach(positionElement => {\n            positionElements(_getHtmlElement(positionElement.target), _getHtmlElement(positionElement.element), positionElement.attachment, positionElement.appendToBody, this.options, rendererFactory.createRenderer(null, null));\n          });\n        });\n      });\n    }\n  }\n  position(options) {\n    this.addPositionElement(options);\n  }\n  get event$() {\n    return this.triggerEvent$;\n  }\n  disable() {\n    this.isDisabled = true;\n  }\n  enable() {\n    this.isDisabled = false;\n  }\n  addPositionElement(options) {\n    this.positionElements.set(_getHtmlElement(options.element), options);\n  }\n  calcPosition() {\n    this.update$$.next(null);\n  }\n  deletePositionElement(elRef) {\n    this.positionElements.delete(_getHtmlElement(elRef));\n  }\n  setOptions(options) {\n    this.options = options;\n  }\n  static #_ = this.ɵfac = function PositioningService_Factory(t) {\n    return new (t || PositioningService)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(PLATFORM_ID));\n  };\n  static #_2 = this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PositioningService,\n    factory: PositioningService.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PositioningService, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: i0.NgZone\n  }, {\n    type: i0.RendererFactory2\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }], null);\n})();\nfunction _getHtmlElement(element) {\n  // it means that we got a selector\n  if (typeof element === 'string') {\n    return document.querySelector(element);\n  }\n  if (element instanceof ElementRef) {\n    return element.nativeElement;\n  }\n  return element ?? null;\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PlacementForBs5, Positioning, PositioningService, checkMargins, positionElements };","map":{"version":3,"names":["getBsVer","i0","PLATFORM_ID","Injectable","Inject","ElementRef","isPlatformBrowser","Subject","fromEvent","animationFrameScheduler","of","merge","MapPlacementInToRL","PlacementForBs5","getStyleComputedProperty","element","property","nodeType","window","ownerDocument","defaultView","css","getComputedStyle","getOffsetParent","document","documentElement","noOffsetParent","offsetParent","sibling","nextElementSibling","nodeName","indexOf","isOffsetContainer","firstElementChild","getRoot","node","parentNode","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","host","getFixedPositionOffsetParent","parentElement","el","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","body","html","_body","_html","Math","max","getWindowSizes","height","width","getClientRect","offsets","right","left","bottom","top","isNumeric","n","isNaN","isFinite","Number","isNumber","value","Object","prototype","toString","call","getBoundingClientRect","rect","result","sizes","undefined","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getParentNode","getScrollParent","overflow","overflowX","overflowY","test","String","getScroll","side","upperSide","scrollingElement","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","scrollTop","scrollLeft","offset","isFixed","getBoundaries","target","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","allowedPositions","rects","sortedAreas","keys","map","key","position","area","sort","a","b","filteredAreas","filter","some","allowedPosition","computedPlacement","length","variation","split","className","replace","isBs5","getOffsets","data","floor","round","getOppositePlacement","hash","matched","getOppositeVariation","parse","def","getOuterSizes","x","marginBottom","y","marginRight","getReferenceOffsets","commonOffsetParent","getTargetOffsets","hostOffsets","targetRect","targetOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","isModifierEnabled","options","modifierName","modifiers","enabled","availablePositions","checkPopoverMargin","checkPosition","includes","checkMargins","updateContainerClass","renderer","instance","containerClass","dataPlacement","placementAuto","setAttribute","setStyles","forEach","prop","unit","setStyle","style","arrow","arrowElement","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","placementVariation","targetMarginSide","targetBorderSide","center","targetBorderRadius","targetSideArrowOffset","sideValue","min","flip","offsetsHost","adaptivePosition","flipOrder","step","index","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","initData","targetElement","hostElement","hostElPosition","match","matches","targetOffset","positionFixed","preventOverflow","transformProp","targetStyles","transform","check","primary","secondary","isPlacementHorizontal","shift","basePlacement","shiftVariation","shiftOffsets","Positioning","positionElements","appendToBody","chainOfModifiers","_position","reduce","modifiedData","modifier","positionService","PositioningService","constructor","ngZone","rendererFactory","platformId","update$$","Map","isDisabled","runOutsideAngular","triggerEvent$","passive","subscribe","positionElement","_getHtmlElement","attachment","createRenderer","addPositionElement","event$","disable","enable","set","calcPosition","next","deletePositionElement","elRef","delete","setOptions","_","ɵfac","PositioningService_Factory","t","ɵɵinject","NgZone","RendererFactory2","_2","ɵprov","ɵɵdefineInjectable","token","factory","providedIn","ngDevMode","ɵsetClassMetadata","type","args","decorators","nativeElement"],"sources":["C:/Users/fsengul/Desktop/MendereIT/InventoryManagement/InventryUI-Client/node_modules/ngx-bootstrap/positioning/fesm2022/ngx-bootstrap-positioning.mjs"],"sourcesContent":["import { getBsVer } from 'ngx-bootstrap/utils';\nimport * as i0 from '@angular/core';\nimport { PLATFORM_ID, Injectable, Inject, ElementRef } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, fromEvent, animationFrameScheduler, of, merge } from 'rxjs';\n\nvar MapPlacementInToRL;\n(function (MapPlacementInToRL) {\n    MapPlacementInToRL[\"top\"] = \"top\";\n    MapPlacementInToRL[\"bottom\"] = \"bottom\";\n    MapPlacementInToRL[\"left\"] = \"left\";\n    MapPlacementInToRL[\"right\"] = \"right\";\n    MapPlacementInToRL[\"auto\"] = \"auto\";\n    MapPlacementInToRL[\"end\"] = \"right\";\n    MapPlacementInToRL[\"start\"] = \"left\";\n    MapPlacementInToRL[\"top left\"] = \"top left\";\n    MapPlacementInToRL[\"top right\"] = \"top right\";\n    MapPlacementInToRL[\"right top\"] = \"right top\";\n    MapPlacementInToRL[\"right bottom\"] = \"right bottom\";\n    MapPlacementInToRL[\"bottom right\"] = \"bottom right\";\n    MapPlacementInToRL[\"bottom left\"] = \"bottom left\";\n    MapPlacementInToRL[\"left bottom\"] = \"left bottom\";\n    MapPlacementInToRL[\"left top\"] = \"left top\";\n    MapPlacementInToRL[\"top start\"] = \"top left\";\n    MapPlacementInToRL[\"top end\"] = \"top right\";\n    MapPlacementInToRL[\"end top\"] = \"right top\";\n    MapPlacementInToRL[\"end bottom\"] = \"right bottom\";\n    MapPlacementInToRL[\"bottom end\"] = \"bottom right\";\n    MapPlacementInToRL[\"bottom start\"] = \"bottom left\";\n    MapPlacementInToRL[\"start bottom\"] = \"start bottom\";\n    MapPlacementInToRL[\"start top\"] = \"left top\";\n})(MapPlacementInToRL || (MapPlacementInToRL = {}));\nvar PlacementForBs5;\n(function (PlacementForBs5) {\n    PlacementForBs5[\"top\"] = \"top\";\n    PlacementForBs5[\"bottom\"] = \"bottom\";\n    PlacementForBs5[\"left\"] = \"start\";\n    PlacementForBs5[\"right\"] = \"end\";\n    PlacementForBs5[\"auto\"] = \"auto\";\n    PlacementForBs5[\"end\"] = \"end\";\n    PlacementForBs5[\"start\"] = \"start\";\n    PlacementForBs5[\"top left\"] = \"top start\";\n    PlacementForBs5[\"top right\"] = \"top end\";\n    PlacementForBs5[\"right top\"] = \"end top\";\n    PlacementForBs5[\"right bottom\"] = \"end bottom\";\n    PlacementForBs5[\"bottom right\"] = \"bottom end\";\n    PlacementForBs5[\"bottom left\"] = \"bottom start\";\n    PlacementForBs5[\"left bottom\"] = \"start bottom\";\n    PlacementForBs5[\"left top\"] = \"start top\";\n    PlacementForBs5[\"top start\"] = \"top start\";\n    PlacementForBs5[\"top end\"] = \"top end\";\n    PlacementForBs5[\"end top\"] = \"end top\";\n    PlacementForBs5[\"end bottom\"] = \"end bottom\";\n    PlacementForBs5[\"bottom end\"] = \"bottom end\";\n    PlacementForBs5[\"bottom start\"] = \"bottom start\";\n    PlacementForBs5[\"start bottom\"] = \"start bottom\";\n    PlacementForBs5[\"start top\"] = \"start top\";\n})(PlacementForBs5 || (PlacementForBs5 = {}));\n\nfunction getStyleComputedProperty(element, property) {\n    if (element.nodeType !== 1) {\n        return [];\n    }\n    // NOTE: 1 DOM access here\n    const window = element.ownerDocument.defaultView;\n    const css = window?.getComputedStyle(element, null);\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    return property ? css && css[property] : css;\n}\n\n/**\n * Returns the offset parent of the given element\n */\nfunction getOffsetParent(element) {\n    if (!element) {\n        return document.documentElement;\n    }\n    const noOffsetParent = null;\n    // NOTE: 1 DOM access here\n    let offsetParent = element?.offsetParent;\n    // Skip hidden elements which don't have an offsetParent\n    let sibling = void 0;\n    while (offsetParent === noOffsetParent\n        && element.nextElementSibling\n        && sibling !== element.nextElementSibling) {\n        // todo: valorkin fix\n        sibling = element.nextElementSibling;\n        offsetParent = sibling.offsetParent;\n    }\n    const nodeName = offsetParent && offsetParent.nodeName;\n    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n        return sibling ? sibling.ownerDocument.documentElement : document.documentElement;\n    }\n    // .offsetParent will return the closest TH, TD or TABLE in case\n    if (offsetParent &&\n        ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n        getStyleComputedProperty(offsetParent, 'position') === 'static') {\n        return getOffsetParent(offsetParent);\n    }\n    return offsetParent;\n}\n\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isOffsetContainer(element) {\n    const { nodeName } = element;\n    if (nodeName === 'BODY') {\n        return false;\n    }\n    return (nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element);\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n */\nfunction getRoot(node) {\n    if (node.parentNode !== null) {\n        return getRoot(node.parentNode);\n    }\n    return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n */\nfunction findCommonOffsetParent(element1, element2) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n        return document.documentElement;\n    }\n    // Here we make sure to give as \"start\" the element that comes first in the DOM\n    const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n    const start = order ? element1 : element2;\n    const end = order ? element2 : element1;\n    // Get common ancestor container\n    const range = document.createRange();\n    range.setStart(start, 0);\n    range.setEnd(end, 0);\n    // todo: valorkin fix\n    const commonAncestorContainer = range.commonAncestorContainer;\n    // Both nodes are inside #document\n    if ((element1 !== commonAncestorContainer &&\n        element2 !== commonAncestorContainer) ||\n        start.contains(end)) {\n        if (isOffsetContainer(commonAncestorContainer)) {\n            return commonAncestorContainer;\n        }\n        return getOffsetParent(commonAncestorContainer);\n    }\n    // one of the nodes is inside shadowDOM, find which one\n    const element1root = getRoot(element1);\n    if (element1root.host) {\n        return findCommonOffsetParent(element1root.host, element2);\n    }\n    else {\n        return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n */\nfunction getFixedPositionOffsetParent(element) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element || !element.parentElement) {\n        return document.documentElement;\n    }\n    let el = element.parentElement;\n    while (el?.parentElement && getStyleComputedProperty(el, 'transform') === 'none') {\n        el = el.parentElement;\n    }\n    return el || document.documentElement;\n}\n\n/**\n * Helper to detect borders of a given element\n */\nfunction getBordersSize(styles, axis) {\n    const sideA = axis === 'x' ? 'Left' : 'Top';\n    const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n    return (parseFloat(styles[`border${sideA}Width`]) +\n        parseFloat(styles[`border${sideB}Width`]));\n}\n\nfunction getSize(axis, body, html) {\n    const _body = body;\n    const _html = html;\n    return Math.max(_body[`offset${axis}`], _body[`scroll${axis}`], _html[`client${axis}`], _html[`offset${axis}`], _html[`scroll${axis}`], 0);\n}\nfunction getWindowSizes(document) {\n    const body = document.body;\n    const html = document.documentElement;\n    return {\n        height: getSize('Height', body, html),\n        width: getSize('Width', body, html)\n    };\n}\n\nfunction getClientRect(offsets) {\n    return {\n        ...offsets,\n        right: (offsets.left || 0) + offsets.width,\n        bottom: (offsets.top || 0) + offsets.height\n    };\n}\n\n/**\n * Tells if a given input is a number\n */\nfunction isNumeric(n) {\n    return n !== '' && !isNaN(parseFloat(n)) && isFinite(Number(n));\n}\nfunction isNumber(value) {\n    return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\n}\n\n/**\n * Get bounding client rect of given element\n */\nfunction getBoundingClientRect(element) {\n    const rect = element.getBoundingClientRect();\n    // IE10 10 FIX: Please, don't ask, the element isn't\n    // considered in DOM in some circumstances...\n    // This isn't reproducible in IE10 compatibility mode of IE11\n    // try {\n    //   if (isIE(10)) {\n    //     const scrollTop = getScroll(element, 'top');\n    //     const scrollLeft = getScroll(element, 'left');\n    //     if (rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right)) {\n    //       rect.top += scrollTop;\n    //       rect.left += scrollLeft;\n    //       rect.bottom += scrollTop;\n    //       rect.right += scrollLeft;\n    //     }\n    //   }\n    // } catch (e) {\n    //   return rect;\n    // }\n    if (!(rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right))) {\n        return rect;\n    }\n    const result = {\n        left: rect.left,\n        top: rect.top,\n        width: rect.right - rect.left,\n        height: rect.bottom - rect.top\n    };\n    // subtract scrollbar size from sizes\n    const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : undefined;\n    const width = sizes?.width || element.clientWidth\n        || isNumber(rect.right) && isNumber(result.left) && rect.right - result.left || 0;\n    const height = sizes?.height || element.clientHeight\n        || isNumber(rect.bottom) && isNumber(result.top) && rect.bottom - result.top || 0;\n    let horizScrollbar = element.offsetWidth - width;\n    let vertScrollbar = element.offsetHeight - height;\n    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n    // we make this check conditional for performance reasons\n    if (horizScrollbar || vertScrollbar) {\n        const styles = getStyleComputedProperty(element);\n        horizScrollbar -= getBordersSize(styles, 'x');\n        vertScrollbar -= getBordersSize(styles, 'y');\n        result.width -= horizScrollbar;\n        result.height -= vertScrollbar;\n    }\n    return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n    const isHTML = parent.nodeName === 'HTML';\n    const childrenRect = getBoundingClientRect(children);\n    const parentRect = getBoundingClientRect(parent);\n    const styles = getStyleComputedProperty(parent);\n    const borderTopWidth = parseFloat(styles.borderTopWidth);\n    const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n    // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n    if (fixedPosition && isHTML) {\n        parentRect.top = Math.max(parentRect.top ?? 0, 0);\n        parentRect.left = Math.max(parentRect.left ?? 0, 0);\n    }\n    const offsets = getClientRect({\n        top: (childrenRect.top ?? 0) - (parentRect.top ?? 0) - borderTopWidth,\n        left: (childrenRect.left ?? 0) - (parentRect.left ?? 0) - borderLeftWidth,\n        width: childrenRect.width,\n        height: childrenRect.height\n    });\n    offsets.marginTop = 0;\n    offsets.marginLeft = 0;\n    // Subtract margins of documentElement in case it's being used as parent\n    // we do this only on HTML because it's the only element that behaves\n    // differently when margins are applied to it. The margins are included in\n    // the box of the documentElement, in the other cases not.\n    if (isHTML) {\n        const marginTop = parseFloat(styles.marginTop);\n        const marginLeft = parseFloat(styles.marginLeft);\n        if (isNumber(offsets.top)) {\n            offsets.top -= borderTopWidth - marginTop;\n        }\n        if (isNumber(offsets.bottom)) {\n            offsets.bottom -= borderTopWidth - marginTop;\n        }\n        if (isNumber(offsets.left)) {\n            offsets.left -= borderLeftWidth - marginLeft;\n        }\n        if (isNumber(offsets.right)) {\n            offsets.right -= borderLeftWidth - marginLeft;\n        }\n        // Attach marginTop and marginLeft because in some circumstances we may need them\n        offsets.marginTop = marginTop;\n        offsets.marginLeft = marginLeft;\n    }\n    return offsets;\n}\n\n/**\n * Returns the parentNode or the host of the element\n */\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getParentNode(element) {\n    if (element.nodeName === 'HTML') {\n        return element;\n    }\n    return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n */\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getScrollParent(element) {\n    // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n    if (!element) {\n        return document.body;\n    }\n    switch (element.nodeName) {\n        case 'HTML':\n        case 'BODY':\n            return element.ownerDocument.body;\n        case '#document':\n            return element.body;\n        default:\n    }\n    // Firefox want us to check `-x` and `-y` variations as well\n    const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n    if (/(auto|scroll|overlay)/.test(String(overflow) + String(overflowY) + String(overflowX))) {\n        return element;\n    }\n    return getScrollParent(getParentNode(element));\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n */\nfunction getScroll(element, side = 'top') {\n    const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n    const nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n        const html = element.ownerDocument.documentElement;\n        const scrollingElement = element.ownerDocument.scrollingElement || html;\n        return scrollingElement[upperSide];\n    }\n    return element[upperSide];\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n    const html = element.ownerDocument.documentElement;\n    const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n    const width = Math.max(html.clientWidth, window.innerWidth || 0);\n    const height = Math.max(html.clientHeight, window.innerHeight || 0);\n    const scrollTop = !excludeScroll ? getScroll(html) : 0;\n    const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n    const offset = {\n        top: scrollTop - Number(relativeOffset?.top) + Number(relativeOffset?.marginTop),\n        left: scrollLeft - Number(relativeOffset?.left) + Number(relativeOffset?.marginLeft),\n        width,\n        height\n    };\n    return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n */\nfunction isFixed(element) {\n    const nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n        return false;\n    }\n    if (getStyleComputedProperty(element, 'position') === 'fixed') {\n        return true;\n    }\n    return isFixed(getParentNode(element));\n}\n\nfunction getBoundaries(target, host, padding = 0, boundariesElement, fixedPosition = false) {\n    // NOTE: 1 DOM access here\n    let boundaries = { top: 0, left: 0 };\n    const offsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host);\n    // Handle viewport case\n    if (boundariesElement === 'viewport') {\n        boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n    }\n    else {\n        // Handle other cases based on DOM element used as boundaries\n        let boundariesNode;\n        if (boundariesElement === 'scrollParent') {\n            boundariesNode = getScrollParent(getParentNode(host));\n            if (boundariesNode.nodeName === 'BODY') {\n                boundariesNode = target.ownerDocument.documentElement;\n            }\n        }\n        else if (boundariesElement === 'window') {\n            boundariesNode = target.ownerDocument.documentElement;\n        }\n        else {\n            boundariesNode = boundariesElement;\n        }\n        const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n        // In case of HTML, we need a different computation\n        if (offsets && boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n            const { height, width } = getWindowSizes(target.ownerDocument);\n            if (isNumber(boundaries.top) && isNumber(offsets.top) && isNumber(offsets.marginTop)) {\n                boundaries.top += offsets.top - offsets.marginTop;\n            }\n            if (isNumber(boundaries.top)) {\n                boundaries.bottom = Number(height) + Number(offsets.top);\n            }\n            if (isNumber(boundaries.left) && isNumber(offsets.left) && isNumber(offsets.marginLeft)) {\n                boundaries.left += offsets.left - offsets.marginLeft;\n            }\n            if (isNumber(boundaries.top)) {\n                boundaries.right = Number(width) + Number(offsets.left);\n            }\n        }\n        else if (offsets) {\n            // for all the other DOM elements, this one is good\n            boundaries = offsets;\n        }\n    }\n    // Add paddings\n    if (isNumber(boundaries.left)) {\n        boundaries.left += padding;\n    }\n    if (isNumber(boundaries.top)) {\n        boundaries.top += padding;\n    }\n    if (isNumber(boundaries.right)) {\n        boundaries.right -= padding;\n    }\n    if (isNumber(boundaries.bottom)) {\n        boundaries.bottom -= padding;\n    }\n    return boundaries;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n */\nfunction getArea({ width, height }) {\n    return width * height;\n}\nfunction computeAutoPlacement(placement, refRect, target, host, allowedPositions = ['top', 'bottom', 'right', 'left'], boundariesElement = 'viewport', padding = 0) {\n    if (placement.indexOf('auto') === -1) {\n        return placement;\n    }\n    const boundaries = getBoundaries(target, host, padding, boundariesElement);\n    const rects = {\n        top: {\n            width: boundaries?.width ?? 0,\n            height: (refRect?.top ?? 0) - (boundaries?.top ?? 0)\n        },\n        right: {\n            width: (boundaries?.right ?? 0) - (refRect?.right ?? 0),\n            height: boundaries?.height ?? 0\n        },\n        bottom: {\n            width: boundaries?.width ?? 0,\n            height: (boundaries?.bottom ?? 0) - (refRect?.bottom ?? 0)\n        },\n        left: {\n            width: (refRect.left ?? 0) - (boundaries?.left ?? 0),\n            height: boundaries?.height ?? 0\n        }\n    };\n    const sortedAreas = Object.keys(rects)\n        .map((key) => ({\n        position: key,\n        ...rects[key],\n        area: getArea(rects[key])\n    }))\n        .sort((a, b) => b.area - a.area);\n    let filteredAreas = sortedAreas.filter(({ width, height }) => {\n        return width >= target.clientWidth && height >= target.clientHeight;\n    });\n    filteredAreas = filteredAreas.filter(({ position }) => {\n        return allowedPositions.some((allowedPosition) => {\n            return allowedPosition === position;\n        });\n    });\n    const computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].position : sortedAreas[0].position;\n    const variation = placement.split(' ')[1];\n    // for tooltip on auto position\n    target.className = target.className.replace(/bs-tooltip-auto/g, `bs-tooltip-${getBsVer().isBs5 ? PlacementForBs5[computedPlacement] : computedPlacement}`);\n    return computedPlacement + (variation ? `-${variation}` : '');\n}\n\nfunction getOffsets(data) {\n    return {\n        width: data.offsets.target.width,\n        height: data.offsets.target.height,\n        left: Math.floor(data.offsets.target.left ?? 0),\n        top: Math.round(data.offsets.target.top ?? 0),\n        bottom: Math.round(data.offsets.target.bottom ?? 0),\n        right: Math.floor(data.offsets.target.right ?? 0)\n    };\n}\n\n/**\n * Get the opposite placement of the given one\n */\nfunction getOppositePlacement(placement) {\n    const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n\n/**\n * Get the opposite placement variation of the given one\n */\nfunction getOppositeVariation(variation) {\n    if (variation === 'right') {\n        return 'left';\n    }\n    else if (variation === 'left') {\n        return 'right';\n    }\n    return variation;\n}\n\nconst parse = (value, def = 0) => value ? parseFloat(value) : def;\nfunction getOuterSizes(element) {\n    const window = element.ownerDocument.defaultView;\n    const styles = window?.getComputedStyle(element);\n    const x = parse(styles?.marginTop) + parse(styles?.marginBottom);\n    const y = parse(styles?.marginLeft) + parse(styles?.marginRight);\n    return {\n        width: Number(element.offsetWidth) + y,\n        height: Number(element.offsetHeight) + x\n    };\n}\n\n/**\n * Get offsets to the reference element\n */\nfunction getReferenceOffsets(target, host, fixedPosition) {\n    const commonOffsetParent = fixedPosition\n        ? getFixedPositionOffsetParent(target)\n        : findCommonOffsetParent(target, host);\n    return getOffsetRectRelativeToArbitraryNode(host, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get offsets to the target\n */\nfunction getTargetOffsets(target, hostOffsets, position) {\n    const placement = position.split(' ')[0];\n    // Get target node sizes\n    const targetRect = getOuterSizes(target);\n    // Add position, width and height to our offsets object\n    const targetOffsets = {\n        width: targetRect.width,\n        height: targetRect.height\n    };\n    // depending by the target placement we have to compute its offsets slightly differently\n    const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n    const mainSide = isHoriz ? 'top' : 'left';\n    const secondarySide = isHoriz ? 'left' : 'top';\n    const measurement = isHoriz ? 'height' : 'width';\n    const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n    targetOffsets[mainSide] =\n        (hostOffsets[mainSide] ?? 0) +\n            hostOffsets[measurement] / 2 -\n            targetRect[measurement] / 2;\n    targetOffsets[secondarySide] = placement === secondarySide\n        ? (hostOffsets[secondarySide] ?? 0) - targetRect[secondaryMeasurement]\n        : hostOffsets[getOppositePlacement(secondarySide)] ?? 0;\n    return targetOffsets;\n}\n\nfunction isModifierEnabled(options, modifierName) {\n    return !!options.modifiers[modifierName]?.enabled;\n}\n\nconst availablePositions = {\n    top: ['top', 'top start', 'top end'],\n    bottom: ['bottom', 'bottom start', 'bottom end'],\n    start: ['start', 'start top', 'start bottom'],\n    end: ['end', 'end top', 'end bottom']\n};\nfunction checkPopoverMargin(placement, checkPosition) {\n    if (!getBsVer().isBs5) {\n        return false;\n    }\n    return availablePositions[checkPosition].includes(placement);\n}\nfunction checkMargins(placement) {\n    if (!getBsVer().isBs5) {\n        return '';\n    }\n    if (checkPopoverMargin(placement, 'end')) {\n        return 'ms-2';\n    }\n    if (checkPopoverMargin(placement, 'start')) {\n        return 'me-2';\n    }\n    if (checkPopoverMargin(placement, 'top')) {\n        return 'mb-2';\n    }\n    if (checkPopoverMargin(placement, 'bottom')) {\n        return 'mt-2';\n    }\n    return '';\n}\n\nfunction updateContainerClass(data, renderer) {\n    const target = data.instance.target;\n    let containerClass = target.className;\n    const dataPlacement = getBsVer().isBs5\n        ? PlacementForBs5[data.placement]\n        : data.placement;\n    if (data.placementAuto) {\n        containerClass = containerClass.replace(/bs-popover-auto/g, `bs-popover-${dataPlacement}`);\n        containerClass = containerClass.replace(/ms-2|me-2|mb-2|mt-2/g, '');\n        containerClass = containerClass.replace(/bs-tooltip-auto/g, `bs-tooltip-${dataPlacement}`);\n        containerClass = containerClass.replace(/\\sauto/g, ` ${dataPlacement}`);\n        if (containerClass.indexOf('popover') !== -1) {\n            containerClass = containerClass + ' ' + checkMargins(dataPlacement);\n        }\n        if (containerClass.indexOf('popover') !== -1 && containerClass.indexOf('popover-auto') === -1) {\n            containerClass += ' popover-auto';\n        }\n        if (containerClass.indexOf('tooltip') !== -1 && containerClass.indexOf('tooltip-auto') === -1) {\n            containerClass += ' tooltip-auto';\n        }\n    }\n    containerClass = containerClass.replace(/left|right|top|bottom|end|start/g, `${dataPlacement.split(' ')[0]}`);\n    if (renderer) {\n        renderer.setAttribute(target, 'class', containerClass);\n        return;\n    }\n    target.className = containerClass;\n}\n\nfunction setStyles(element, styles, renderer) {\n    if (!element || !styles) {\n        return;\n    }\n    Object.keys(styles).forEach((prop) => {\n        let unit = '';\n        // add unit if the value is numeric and is one of the following\n        if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 &&\n            isNumeric(styles[prop])) {\n            unit = 'px';\n        }\n        if (renderer) {\n            renderer.setStyle(element, prop, `${String(styles[prop])}${unit}`);\n            return;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        element.style[prop] = String(styles[prop]) + unit;\n    });\n}\n\nfunction arrow(data) {\n    let targetOffsets = data.offsets.target;\n    // if arrowElement is a string, suppose it's a CSS selector\n    const arrowElement = data.instance.target.querySelector('.arrow');\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n        return data;\n    }\n    const isVertical = ['left', 'right'].indexOf(data.placement.split(' ')[0]) !== -1;\n    const len = isVertical ? 'height' : 'width';\n    const sideCapitalized = isVertical ? 'Top' : 'Left';\n    const side = sideCapitalized.toLowerCase();\n    const altSide = isVertical ? 'left' : 'top';\n    const opSide = isVertical ? 'bottom' : 'right';\n    const arrowElementSize = getOuterSizes(arrowElement)[len];\n    const placementVariation = data.placement.split(' ')[1];\n    // top/left side\n    if ((data.offsets.host[opSide] ?? 0) - arrowElementSize < (targetOffsets[side] ?? 0)) {\n        (targetOffsets)[side] -=\n            (targetOffsets[side] ?? 0) - ((data.offsets.host[opSide] ?? 0) - arrowElementSize);\n    }\n    // bottom/right side\n    if (Number((data).offsets.host[side]) + Number(arrowElementSize) > (targetOffsets[opSide] ?? 0)) {\n        (targetOffsets)[side] +=\n            Number((data).offsets.host[side]) + Number(arrowElementSize) - Number((targetOffsets)[opSide]);\n    }\n    targetOffsets = getClientRect(targetOffsets);\n    // Compute the sideValue using the updated target offsets\n    // take target margin in account because we don't have this info available\n    const css = getStyleComputedProperty(data.instance.target);\n    const targetMarginSide = parseFloat(css[`margin${sideCapitalized}`]) || 0;\n    const targetBorderSide = parseFloat(css[`border${sideCapitalized}Width`]) || 0;\n    // compute center of the target\n    let center;\n    if (!placementVariation) {\n        center = Number((data).offsets.host[side]) + Number(data.offsets.host[len] / 2 - arrowElementSize / 2);\n    }\n    else {\n        const targetBorderRadius = parseFloat(css[\"borderRadius\"]) || 0;\n        const targetSideArrowOffset = Number(targetMarginSide + targetBorderSide + targetBorderRadius);\n        center = side === placementVariation ?\n            Number((data).offsets.host[side]) + targetSideArrowOffset :\n            Number((data).offsets.host[side]) + Number(data.offsets.host[len] - targetSideArrowOffset);\n    }\n    let sideValue = center - (targetOffsets[side] ?? 0) - targetMarginSide - targetBorderSide;\n    // prevent arrowElement from being placed not contiguously to its target\n    sideValue = Math.max(Math.min(targetOffsets[len] - (arrowElementSize + 5), sideValue), 0);\n    data.offsets.arrow = {\n        [side]: Math.round(sideValue),\n        [altSide]: '' // make sure to unset any eventual altSide value from the DOM node\n    };\n    data.instance.arrow = arrowElement;\n    return data;\n}\n\nfunction flip(data) {\n    data.offsets.target = getClientRect(data.offsets.target);\n    if (!isModifierEnabled(data.options, 'flip')) {\n        data.offsets.target = {\n            ...data.offsets.target,\n            ...getTargetOffsets(data.instance.target, data.offsets.host, data.placement)\n        };\n        return data;\n    }\n    const boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding\n    'viewport', false // positionFixed\n    );\n    let placement = data.placement.split(' ')[0];\n    let variation = data.placement.split(' ')[1] || '';\n    const offsetsHost = data.offsets.host;\n    const target = data.instance.target;\n    const host = data.instance.host;\n    const adaptivePosition = computeAutoPlacement('auto', offsetsHost, target, host, data.options.allowedPositions);\n    const flipOrder = [placement, adaptivePosition];\n    flipOrder.forEach((step, index) => {\n        if (placement !== step || flipOrder.length === index + 1) {\n            return;\n        }\n        placement = data.placement.split(' ')[0];\n        // using floor because the host offsets may contain decimals we are not going to consider here\n        const overlapsRef = (placement === 'left' &&\n            Math.floor(data.offsets.target.right ?? 0) > Math.floor(data.offsets.host.left ?? 0)) ||\n            (placement === 'right' &&\n                Math.floor(data.offsets.target.left ?? 0) < Math.floor(data.offsets.host.right ?? 0)) ||\n            (placement === 'top' &&\n                Math.floor(data.offsets.target.bottom ?? 0) > Math.floor(data.offsets.host.top ?? 0)) ||\n            (placement === 'bottom' &&\n                Math.floor(data.offsets.target.top ?? 0) < Math.floor(data.offsets.host.bottom ?? 0));\n        const overflowsLeft = Math.floor(data.offsets.target.left ?? 0) < Math.floor(boundaries.left ?? 0);\n        const overflowsRight = Math.floor(data.offsets.target.right ?? 0) > Math.floor(boundaries.right ?? 0);\n        const overflowsTop = Math.floor(data.offsets.target.top ?? 0) < Math.floor(boundaries.top ?? 0);\n        const overflowsBottom = Math.floor(data.offsets.target.bottom ?? 0) > Math.floor(boundaries.bottom ?? 0);\n        const overflowsBoundaries = (placement === 'left' && overflowsLeft) ||\n            (placement === 'right' && overflowsRight) ||\n            (placement === 'top' && overflowsTop) ||\n            (placement === 'bottom' && overflowsBottom);\n        // flip the variation if required\n        const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n        const flippedVariation = ((isVertical && variation === 'left' && overflowsLeft) ||\n            (isVertical && variation === 'right' && overflowsRight) ||\n            (!isVertical && variation === 'left' && overflowsTop) ||\n            (!isVertical && variation === 'right' && overflowsBottom));\n        if (overlapsRef || overflowsBoundaries || flippedVariation) {\n            if (overlapsRef || overflowsBoundaries) {\n                placement = flipOrder[index + 1];\n            }\n            if (flippedVariation) {\n                variation = getOppositeVariation(variation);\n            }\n            data.placement = placement + (variation ? ` ${variation}` : '');\n            data.offsets.target = {\n                ...data.offsets.target,\n                ...getTargetOffsets(data.instance.target, data.offsets.host, data.placement)\n            };\n        }\n    });\n    return data;\n}\n\nfunction initData(targetElement, hostElement, position, options) {\n    if (!targetElement || !hostElement) {\n        return;\n    }\n    const hostElPosition = getReferenceOffsets(targetElement, hostElement);\n    if (!position.match(/^(auto)*\\s*(left|right|top|bottom|start|end)*$/)\n        && !position.match(/^(left|right|top|bottom|start|end)*(?: (left|right|top|bottom|start|end))*$/)) {\n        position = 'auto';\n    }\n    const placementAuto = !!position.match(/auto/g);\n    // support old placements 'auto left|right|top|bottom'\n    let placement = position.match(/auto\\s(left|right|top|bottom|start|end)/)\n        ? position.split(' ')[1] || 'auto'\n        : position;\n    // Normalize placements that have identical main placement and variation (\"right right\" => \"right\").\n    const matches = placement.match(/^(left|right|top|bottom|start|end)* ?(?!\\1)(left|right|top|bottom|start|end)?/);\n    if (matches) {\n        placement = matches[1] + (matches[2] ? ` ${matches[2]}` : '');\n    }\n    // \"left right\", \"top bottom\" etc. placements also considered incorrect.\n    if (['left right', 'right left', 'top bottom', 'bottom top'].indexOf(placement) !== -1) {\n        placement = 'auto';\n    }\n    placement = computeAutoPlacement(placement, hostElPosition, targetElement, hostElement, options ? options.allowedPositions : undefined);\n    const targetOffset = getTargetOffsets(targetElement, hostElPosition, placement);\n    return {\n        options: options || { modifiers: {} },\n        instance: {\n            target: targetElement,\n            host: hostElement,\n            arrow: void 0\n        },\n        offsets: {\n            target: targetOffset,\n            host: hostElPosition,\n            arrow: void 0\n        },\n        positionFixed: false,\n        placement,\n        placementAuto\n    };\n}\n\nfunction preventOverflow(data) {\n    if (!isModifierEnabled(data.options, 'preventOverflow')) {\n        return data;\n    }\n    // NOTE: DOM access here\n    // resets the target Offsets's position so that the document size can be calculated excluding\n    // the size of the targetOffsets element itself\n    const transformProp = 'transform';\n    const targetStyles = data.instance.target.style; // assignment to help minification\n    const { top, left, [transformProp]: transform } = targetStyles;\n    targetStyles.top = '';\n    targetStyles.left = '';\n    targetStyles[transformProp] = '';\n    const boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding\n    data.options.modifiers.preventOverflow?.boundariesElement || 'scrollParent', false // positionFixed\n    );\n    // NOTE: DOM access here\n    // restores the original style properties after the offsets have been computed\n    targetStyles.top = top;\n    targetStyles.left = left;\n    targetStyles[transformProp] = transform;\n    const order = ['left', 'right', 'top', 'bottom'];\n    const check = {\n        primary(placement) {\n            let value = data.offsets.target[placement];\n            // options.escapeWithReference\n            if ((data.offsets.target[placement] ?? 0) < (boundaries[placement] ?? 0)) {\n                value = Math.max(data.offsets.target[placement] ?? 0, boundaries[placement] ?? 0);\n            }\n            return { [placement]: value };\n        },\n        secondary(placement) {\n            const isPlacementHorizontal = placement === 'right';\n            const mainSide = isPlacementHorizontal ? 'left' : 'top';\n            const measurement = isPlacementHorizontal ? 'width' : 'height';\n            let value = data.offsets.target[mainSide];\n            // escapeWithReference\n            if ((data.offsets.target[placement] ?? 0) > (boundaries[placement] ?? 0)) {\n                value = Math.min(data.offsets.target[mainSide] ?? 0, (boundaries[placement] ?? 0) - data.offsets.target[measurement]);\n            }\n            return { [mainSide]: value };\n        }\n    };\n    order.forEach((placement) => {\n        const side = ['left', 'top', 'start'].indexOf(placement) !== -1 ? check['primary'] : check['secondary'];\n        data.offsets.target = {\n            ...data.offsets.target,\n            ...side(placement)\n        };\n    });\n    return data;\n}\n\nfunction shift(data) {\n    const placement = data.placement;\n    const basePlacement = placement.split(' ')[0];\n    const shiftVariation = placement.split(' ')[1];\n    if (shiftVariation) {\n        const { host, target } = data.offsets;\n        const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n        const side = isVertical ? 'left' : 'top';\n        const measurement = isVertical ? 'width' : 'height';\n        const shiftOffsets = {\n            start: { [side]: host[side] },\n            end: {\n                [side]: (host[side] ?? 0) + host[measurement] - target[measurement]\n            }\n        };\n        data.offsets.target = {\n            ...target, ...{\n                [side]: (side === shiftVariation ? shiftOffsets.start[side] : shiftOffsets.end[side])\n            }\n        };\n    }\n    return data;\n}\n\nclass Positioning {\n    position(hostElement, targetElement /*, round = true*/) {\n        return this.offset(hostElement, targetElement /*, false*/);\n    }\n    offset(hostElement, targetElement /*, round = true*/) {\n        return getReferenceOffsets(targetElement, hostElement);\n    }\n    positionElements(hostElement, targetElement, position, appendToBody, options) {\n        const chainOfModifiers = [flip, shift, preventOverflow, arrow];\n        const _position = MapPlacementInToRL[position];\n        const data = initData(targetElement, hostElement, _position, options);\n        if (!data) {\n            return;\n        }\n        return chainOfModifiers.reduce((modifiedData, modifier) => modifier(modifiedData), data);\n    }\n}\nconst positionService = new Positioning();\nfunction positionElements(hostElement, targetElement, placement, appendToBody, options, renderer) {\n    const data = positionService.positionElements(hostElement, targetElement, placement, appendToBody, options);\n    if (!data) {\n        return;\n    }\n    const offsets = getOffsets(data);\n    setStyles(targetElement, {\n        'will-change': 'transform',\n        top: '0px',\n        left: '0px',\n        transform: `translate3d(${offsets.left}px, ${offsets.top}px, 0px)`\n    }, renderer);\n    if (data.instance.arrow) {\n        setStyles(data.instance.arrow, data.offsets.arrow, renderer);\n    }\n    updateContainerClass(data, renderer);\n}\n\nclass PositioningService {\n    constructor(ngZone, rendererFactory, platformId) {\n        this.update$$ = new Subject();\n        this.positionElements = new Map();\n        this.isDisabled = false;\n        if (isPlatformBrowser(platformId)) {\n            ngZone.runOutsideAngular(() => {\n                this.triggerEvent$ = merge(fromEvent(window, 'scroll', { passive: true }), fromEvent(window, 'resize', { passive: true }), of(0, animationFrameScheduler), this.update$$);\n                this.triggerEvent$.subscribe(() => {\n                    if (this.isDisabled) {\n                        return;\n                    }\n                    this.positionElements\n                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                        .forEach((positionElement) => {\n                        positionElements(_getHtmlElement(positionElement.target), _getHtmlElement(positionElement.element), positionElement.attachment, positionElement.appendToBody, this.options, rendererFactory.createRenderer(null, null));\n                    });\n                });\n            });\n        }\n    }\n    position(options) {\n        this.addPositionElement(options);\n    }\n    get event$() {\n        return this.triggerEvent$;\n    }\n    disable() {\n        this.isDisabled = true;\n    }\n    enable() {\n        this.isDisabled = false;\n    }\n    addPositionElement(options) {\n        this.positionElements.set(_getHtmlElement(options.element), options);\n    }\n    calcPosition() {\n        this.update$$.next(null);\n    }\n    deletePositionElement(elRef) {\n        this.positionElements.delete(_getHtmlElement(elRef));\n    }\n    setOptions(options) {\n        this.options = options;\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.4\", ngImport: i0, type: PositioningService, deps: [{ token: i0.NgZone }, { token: i0.RendererFactory2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.4\", ngImport: i0, type: PositioningService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.4\", ngImport: i0, type: PositioningService, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.RendererFactory2 }, { type: undefined, decorators: [{\n                    type: Inject,\n                    args: [PLATFORM_ID]\n                }] }] });\nfunction _getHtmlElement(element) {\n    // it means that we got a selector\n    if (typeof element === 'string') {\n        return document.querySelector(element);\n    }\n    if (element instanceof ElementRef) {\n        return element.nativeElement;\n    }\n    return element ?? null;\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PlacementForBs5, Positioning, PositioningService, checkMargins, positionElements };\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,qBAAqB;AAC9C,OAAO,KAAKC,EAAE,MAAM,eAAe;AACnC,SAASC,WAAW,EAAEC,UAAU,EAAEC,MAAM,EAAEC,UAAU,QAAQ,eAAe;AAC3E,SAASC,iBAAiB,QAAQ,iBAAiB;AACnD,SAASC,OAAO,EAAEC,SAAS,EAAEC,uBAAuB,EAAEC,EAAE,EAAEC,KAAK,QAAQ,MAAM;AAE7E,IAAIC,kBAAkB;AACtB,CAAC,UAAUA,kBAAkB,EAAE;EAC3BA,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK;EACjCA,kBAAkB,CAAC,QAAQ,CAAC,GAAG,QAAQ;EACvCA,kBAAkB,CAAC,MAAM,CAAC,GAAG,MAAM;EACnCA,kBAAkB,CAAC,OAAO,CAAC,GAAG,OAAO;EACrCA,kBAAkB,CAAC,MAAM,CAAC,GAAG,MAAM;EACnCA,kBAAkB,CAAC,KAAK,CAAC,GAAG,OAAO;EACnCA,kBAAkB,CAAC,OAAO,CAAC,GAAG,MAAM;EACpCA,kBAAkB,CAAC,UAAU,CAAC,GAAG,UAAU;EAC3CA,kBAAkB,CAAC,WAAW,CAAC,GAAG,WAAW;EAC7CA,kBAAkB,CAAC,WAAW,CAAC,GAAG,WAAW;EAC7CA,kBAAkB,CAAC,cAAc,CAAC,GAAG,cAAc;EACnDA,kBAAkB,CAAC,cAAc,CAAC,GAAG,cAAc;EACnDA,kBAAkB,CAAC,aAAa,CAAC,GAAG,aAAa;EACjDA,kBAAkB,CAAC,aAAa,CAAC,GAAG,aAAa;EACjDA,kBAAkB,CAAC,UAAU,CAAC,GAAG,UAAU;EAC3CA,kBAAkB,CAAC,WAAW,CAAC,GAAG,UAAU;EAC5CA,kBAAkB,CAAC,SAAS,CAAC,GAAG,WAAW;EAC3CA,kBAAkB,CAAC,SAAS,CAAC,GAAG,WAAW;EAC3CA,kBAAkB,CAAC,YAAY,CAAC,GAAG,cAAc;EACjDA,kBAAkB,CAAC,YAAY,CAAC,GAAG,cAAc;EACjDA,kBAAkB,CAAC,cAAc,CAAC,GAAG,aAAa;EAClDA,kBAAkB,CAAC,cAAc,CAAC,GAAG,cAAc;EACnDA,kBAAkB,CAAC,WAAW,CAAC,GAAG,UAAU;AAChD,CAAC,EAAEA,kBAAkB,KAAKA,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,IAAIC,eAAe;AACnB,CAAC,UAAUA,eAAe,EAAE;EACxBA,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK;EAC9BA,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ;EACpCA,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO;EACjCA,eAAe,CAAC,OAAO,CAAC,GAAG,KAAK;EAChCA,eAAe,CAAC,MAAM,CAAC,GAAG,MAAM;EAChCA,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK;EAC9BA,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO;EAClCA,eAAe,CAAC,UAAU,CAAC,GAAG,WAAW;EACzCA,eAAe,CAAC,WAAW,CAAC,GAAG,SAAS;EACxCA,eAAe,CAAC,WAAW,CAAC,GAAG,SAAS;EACxCA,eAAe,CAAC,cAAc,CAAC,GAAG,YAAY;EAC9CA,eAAe,CAAC,cAAc,CAAC,GAAG,YAAY;EAC9CA,eAAe,CAAC,aAAa,CAAC,GAAG,cAAc;EAC/CA,eAAe,CAAC,aAAa,CAAC,GAAG,cAAc;EAC/CA,eAAe,CAAC,UAAU,CAAC,GAAG,WAAW;EACzCA,eAAe,CAAC,WAAW,CAAC,GAAG,WAAW;EAC1CA,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS;EACtCA,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS;EACtCA,eAAe,CAAC,YAAY,CAAC,GAAG,YAAY;EAC5CA,eAAe,CAAC,YAAY,CAAC,GAAG,YAAY;EAC5CA,eAAe,CAAC,cAAc,CAAC,GAAG,cAAc;EAChDA,eAAe,CAAC,cAAc,CAAC,GAAG,cAAc;EAChDA,eAAe,CAAC,WAAW,CAAC,GAAG,WAAW;AAC9C,CAAC,EAAEA,eAAe,KAAKA,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;AAE7C,SAASC,wBAAwBA,CAACC,OAAO,EAAEC,QAAQ,EAAE;EACjD,IAAID,OAAO,CAACE,QAAQ,KAAK,CAAC,EAAE;IACxB,OAAO,EAAE;EACb;EACA;EACA,MAAMC,MAAM,GAAGH,OAAO,CAACI,aAAa,CAACC,WAAW;EAChD,MAAMC,GAAG,GAAGH,MAAM,EAAEI,gBAAgB,CAACP,OAAO,EAAE,IAAI,CAAC;EACnD;EACA;EACA,OAAOC,QAAQ,GAAGK,GAAG,IAAIA,GAAG,CAACL,QAAQ,CAAC,GAAGK,GAAG;AAChD;;AAEA;AACA;AACA;AACA,SAASE,eAAeA,CAACR,OAAO,EAAE;EAC9B,IAAI,CAACA,OAAO,EAAE;IACV,OAAOS,QAAQ,CAACC,eAAe;EACnC;EACA,MAAMC,cAAc,GAAG,IAAI;EAC3B;EACA,IAAIC,YAAY,GAAGZ,OAAO,EAAEY,YAAY;EACxC;EACA,IAAIC,OAAO,GAAG,KAAK,CAAC;EACpB,OAAOD,YAAY,KAAKD,cAAc,IAC/BX,OAAO,CAACc,kBAAkB,IAC1BD,OAAO,KAAKb,OAAO,CAACc,kBAAkB,EAAE;IAC3C;IACAD,OAAO,GAAGb,OAAO,CAACc,kBAAkB;IACpCF,YAAY,GAAGC,OAAO,CAACD,YAAY;EACvC;EACA,MAAMG,QAAQ,GAAGH,YAAY,IAAIA,YAAY,CAACG,QAAQ;EACtD,IAAI,CAACA,QAAQ,IAAIA,QAAQ,KAAK,MAAM,IAAIA,QAAQ,KAAK,MAAM,EAAE;IACzD,OAAOF,OAAO,GAAGA,OAAO,CAACT,aAAa,CAACM,eAAe,GAAGD,QAAQ,CAACC,eAAe;EACrF;EACA;EACA,IAAIE,YAAY,IACZ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAACI,OAAO,CAACJ,YAAY,CAACG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAC3DhB,wBAAwB,CAACa,YAAY,EAAE,UAAU,CAAC,KAAK,QAAQ,EAAE;IACjE,OAAOJ,eAAe,CAACI,YAAY,CAAC;EACxC;EACA,OAAOA,YAAY;AACvB;;AAEA;AACA;AACA,SAASK,iBAAiBA,CAACjB,OAAO,EAAE;EAChC,MAAM;IAAEe;EAAS,CAAC,GAAGf,OAAO;EAC5B,IAAIe,QAAQ,KAAK,MAAM,EAAE;IACrB,OAAO,KAAK;EAChB;EACA,OAAQA,QAAQ,KAAK,MAAM,IAAIP,eAAe,CAACR,OAAO,CAACkB,iBAAiB,CAAC,KAAKlB,OAAO;AACzF;;AAEA;AACA;AACA;AACA,SAASmB,OAAOA,CAACC,IAAI,EAAE;EACnB,IAAIA,IAAI,CAACC,UAAU,KAAK,IAAI,EAAE;IAC1B,OAAOF,OAAO,CAACC,IAAI,CAACC,UAAU,CAAC;EACnC;EACA,OAAOD,IAAI;AACf;;AAEA;AACA;AACA;AACA,SAASE,sBAAsBA,CAACC,QAAQ,EAAEC,QAAQ,EAAE;EAChD;EACA,IAAI,CAACD,QAAQ,IAAI,CAACA,QAAQ,CAACrB,QAAQ,IAAI,CAACsB,QAAQ,IAAI,CAACA,QAAQ,CAACtB,QAAQ,EAAE;IACpE,OAAOO,QAAQ,CAACC,eAAe;EACnC;EACA;EACA,MAAMe,KAAK,GAAGF,QAAQ,CAACG,uBAAuB,CAACF,QAAQ,CAAC,GAAGG,IAAI,CAACC,2BAA2B;EAC3F,MAAMC,KAAK,GAAGJ,KAAK,GAAGF,QAAQ,GAAGC,QAAQ;EACzC,MAAMM,GAAG,GAAGL,KAAK,GAAGD,QAAQ,GAAGD,QAAQ;EACvC;EACA,MAAMQ,KAAK,GAAGtB,QAAQ,CAACuB,WAAW,CAAC,CAAC;EACpCD,KAAK,CAACE,QAAQ,CAACJ,KAAK,EAAE,CAAC,CAAC;EACxBE,KAAK,CAACG,MAAM,CAACJ,GAAG,EAAE,CAAC,CAAC;EACpB;EACA,MAAMK,uBAAuB,GAAGJ,KAAK,CAACI,uBAAuB;EAC7D;EACA,IAAKZ,QAAQ,KAAKY,uBAAuB,IACrCX,QAAQ,KAAKW,uBAAuB,IACpCN,KAAK,CAACO,QAAQ,CAACN,GAAG,CAAC,EAAE;IACrB,IAAIb,iBAAiB,CAACkB,uBAAuB,CAAC,EAAE;MAC5C,OAAOA,uBAAuB;IAClC;IACA,OAAO3B,eAAe,CAAC2B,uBAAuB,CAAC;EACnD;EACA;EACA,MAAME,YAAY,GAAGlB,OAAO,CAACI,QAAQ,CAAC;EACtC,IAAIc,YAAY,CAACC,IAAI,EAAE;IACnB,OAAOhB,sBAAsB,CAACe,YAAY,CAACC,IAAI,EAAEd,QAAQ,CAAC;EAC9D,CAAC,MACI;IACD,OAAOF,sBAAsB,CAACC,QAAQ,EAAEJ,OAAO,CAACK,QAAQ,CAAC,CAACc,IAAI,CAAC;EACnE;AACJ;;AAEA;AACA;AACA;AACA,SAASC,4BAA4BA,CAACvC,OAAO,EAAE;EAC3C;EACA,IAAI,CAACA,OAAO,IAAI,CAACA,OAAO,CAACwC,aAAa,EAAE;IACpC,OAAO/B,QAAQ,CAACC,eAAe;EACnC;EACA,IAAI+B,EAAE,GAAGzC,OAAO,CAACwC,aAAa;EAC9B,OAAOC,EAAE,EAAED,aAAa,IAAIzC,wBAAwB,CAAC0C,EAAE,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE;IAC9EA,EAAE,GAAGA,EAAE,CAACD,aAAa;EACzB;EACA,OAAOC,EAAE,IAAIhC,QAAQ,CAACC,eAAe;AACzC;;AAEA;AACA;AACA;AACA,SAASgC,cAAcA,CAACC,MAAM,EAAEC,IAAI,EAAE;EAClC,MAAMC,KAAK,GAAGD,IAAI,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK;EAC3C,MAAME,KAAK,GAAGD,KAAK,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ;EACnD,OAAQE,UAAU,CAACJ,MAAM,CAAE,SAAQE,KAAM,OAAM,CAAC,CAAC,GAC7CE,UAAU,CAACJ,MAAM,CAAE,SAAQG,KAAM,OAAM,CAAC,CAAC;AACjD;AAEA,SAASE,OAAOA,CAACJ,IAAI,EAAEK,IAAI,EAAEC,IAAI,EAAE;EAC/B,MAAMC,KAAK,GAAGF,IAAI;EAClB,MAAMG,KAAK,GAAGF,IAAI;EAClB,OAAOG,IAAI,CAACC,GAAG,CAACH,KAAK,CAAE,SAAQP,IAAK,EAAC,CAAC,EAAEO,KAAK,CAAE,SAAQP,IAAK,EAAC,CAAC,EAAEQ,KAAK,CAAE,SAAQR,IAAK,EAAC,CAAC,EAAEQ,KAAK,CAAE,SAAQR,IAAK,EAAC,CAAC,EAAEQ,KAAK,CAAE,SAAQR,IAAK,EAAC,CAAC,EAAE,CAAC,CAAC;AAC9I;AACA,SAASW,cAAcA,CAAC9C,QAAQ,EAAE;EAC9B,MAAMwC,IAAI,GAAGxC,QAAQ,CAACwC,IAAI;EAC1B,MAAMC,IAAI,GAAGzC,QAAQ,CAACC,eAAe;EACrC,OAAO;IACH8C,MAAM,EAAER,OAAO,CAAC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,CAAC;IACrCO,KAAK,EAAET,OAAO,CAAC,OAAO,EAAEC,IAAI,EAAEC,IAAI;EACtC,CAAC;AACL;AAEA,SAASQ,aAAaA,CAACC,OAAO,EAAE;EAC5B,OAAO;IACH,GAAGA,OAAO;IACVC,KAAK,EAAE,CAACD,OAAO,CAACE,IAAI,IAAI,CAAC,IAAIF,OAAO,CAACF,KAAK;IAC1CK,MAAM,EAAE,CAACH,OAAO,CAACI,GAAG,IAAI,CAAC,IAAIJ,OAAO,CAACH;EACzC,CAAC;AACL;;AAEA;AACA;AACA;AACA,SAASQ,SAASA,CAACC,CAAC,EAAE;EAClB,OAAOA,CAAC,KAAK,EAAE,IAAI,CAACC,KAAK,CAACnB,UAAU,CAACkB,CAAC,CAAC,CAAC,IAAIE,QAAQ,CAACC,MAAM,CAACH,CAAC,CAAC,CAAC;AACnE;AACA,SAASI,QAAQA,CAACC,KAAK,EAAE;EACrB,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,KAAK,CAAC,KAAK,iBAAiB;AACnG;;AAEA;AACA;AACA;AACA,SAASK,qBAAqBA,CAAC3E,OAAO,EAAE;EACpC,MAAM4E,IAAI,GAAG5E,OAAO,CAAC2E,qBAAqB,CAAC,CAAC;EAC5C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,EAAEC,IAAI,IAAIP,QAAQ,CAACO,IAAI,CAACb,GAAG,CAAC,IAAIM,QAAQ,CAACO,IAAI,CAACf,IAAI,CAAC,IAAIQ,QAAQ,CAACO,IAAI,CAACd,MAAM,CAAC,IAAIO,QAAQ,CAACO,IAAI,CAAChB,KAAK,CAAC,CAAC,EAAE;IACvG,OAAOgB,IAAI;EACf;EACA,MAAMC,MAAM,GAAG;IACXhB,IAAI,EAAEe,IAAI,CAACf,IAAI;IACfE,GAAG,EAAEa,IAAI,CAACb,GAAG;IACbN,KAAK,EAAEmB,IAAI,CAAChB,KAAK,GAAGgB,IAAI,CAACf,IAAI;IAC7BL,MAAM,EAAEoB,IAAI,CAACd,MAAM,GAAGc,IAAI,CAACb;EAC/B,CAAC;EACD;EACA,MAAMe,KAAK,GAAG9E,OAAO,CAACe,QAAQ,KAAK,MAAM,GAAGwC,cAAc,CAACvD,OAAO,CAACI,aAAa,CAAC,GAAG2E,SAAS;EAC7F,MAAMtB,KAAK,GAAGqB,KAAK,EAAErB,KAAK,IAAIzD,OAAO,CAACgF,WAAW,IAC1CX,QAAQ,CAACO,IAAI,CAAChB,KAAK,CAAC,IAAIS,QAAQ,CAACQ,MAAM,CAAChB,IAAI,CAAC,IAAIe,IAAI,CAAChB,KAAK,GAAGiB,MAAM,CAAChB,IAAI,IAAI,CAAC;EACrF,MAAML,MAAM,GAAGsB,KAAK,EAAEtB,MAAM,IAAIxD,OAAO,CAACiF,YAAY,IAC7CZ,QAAQ,CAACO,IAAI,CAACd,MAAM,CAAC,IAAIO,QAAQ,CAACQ,MAAM,CAACd,GAAG,CAAC,IAAIa,IAAI,CAACd,MAAM,GAAGe,MAAM,CAACd,GAAG,IAAI,CAAC;EACrF,IAAImB,cAAc,GAAGlF,OAAO,CAACmF,WAAW,GAAG1B,KAAK;EAChD,IAAI2B,aAAa,GAAGpF,OAAO,CAACqF,YAAY,GAAG7B,MAAM;EACjD;EACA;EACA,IAAI0B,cAAc,IAAIE,aAAa,EAAE;IACjC,MAAMzC,MAAM,GAAG5C,wBAAwB,CAACC,OAAO,CAAC;IAChDkF,cAAc,IAAIxC,cAAc,CAACC,MAAM,EAAE,GAAG,CAAC;IAC7CyC,aAAa,IAAI1C,cAAc,CAACC,MAAM,EAAE,GAAG,CAAC;IAC5CkC,MAAM,CAACpB,KAAK,IAAIyB,cAAc;IAC9BL,MAAM,CAACrB,MAAM,IAAI4B,aAAa;EAClC;EACA,OAAO1B,aAAa,CAACmB,MAAM,CAAC;AAChC;AAEA,SAASS,oCAAoCA,CAACC,QAAQ,EAAEC,MAAM,EAAEC,aAAa,GAAG,KAAK,EAAE;EACnF,MAAMC,MAAM,GAAGF,MAAM,CAACzE,QAAQ,KAAK,MAAM;EACzC,MAAM4E,YAAY,GAAGhB,qBAAqB,CAACY,QAAQ,CAAC;EACpD,MAAMK,UAAU,GAAGjB,qBAAqB,CAACa,MAAM,CAAC;EAChD,MAAM7C,MAAM,GAAG5C,wBAAwB,CAACyF,MAAM,CAAC;EAC/C,MAAMK,cAAc,GAAG9C,UAAU,CAACJ,MAAM,CAACkD,cAAc,CAAC;EACxD,MAAMC,eAAe,GAAG/C,UAAU,CAACJ,MAAM,CAACmD,eAAe,CAAC;EAC1D;EACA,IAAIL,aAAa,IAAIC,MAAM,EAAE;IACzBE,UAAU,CAAC7B,GAAG,GAAGV,IAAI,CAACC,GAAG,CAACsC,UAAU,CAAC7B,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD6B,UAAU,CAAC/B,IAAI,GAAGR,IAAI,CAACC,GAAG,CAACsC,UAAU,CAAC/B,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;EACvD;EACA,MAAMF,OAAO,GAAGD,aAAa,CAAC;IAC1BK,GAAG,EAAE,CAAC4B,YAAY,CAAC5B,GAAG,IAAI,CAAC,KAAK6B,UAAU,CAAC7B,GAAG,IAAI,CAAC,CAAC,GAAG8B,cAAc;IACrEhC,IAAI,EAAE,CAAC8B,YAAY,CAAC9B,IAAI,IAAI,CAAC,KAAK+B,UAAU,CAAC/B,IAAI,IAAI,CAAC,CAAC,GAAGiC,eAAe;IACzErC,KAAK,EAAEkC,YAAY,CAAClC,KAAK;IACzBD,MAAM,EAAEmC,YAAY,CAACnC;EACzB,CAAC,CAAC;EACFG,OAAO,CAACoC,SAAS,GAAG,CAAC;EACrBpC,OAAO,CAACqC,UAAU,GAAG,CAAC;EACtB;EACA;EACA;EACA;EACA,IAAIN,MAAM,EAAE;IACR,MAAMK,SAAS,GAAGhD,UAAU,CAACJ,MAAM,CAACoD,SAAS,CAAC;IAC9C,MAAMC,UAAU,GAAGjD,UAAU,CAACJ,MAAM,CAACqD,UAAU,CAAC;IAChD,IAAI3B,QAAQ,CAACV,OAAO,CAACI,GAAG,CAAC,EAAE;MACvBJ,OAAO,CAACI,GAAG,IAAI8B,cAAc,GAAGE,SAAS;IAC7C;IACA,IAAI1B,QAAQ,CAACV,OAAO,CAACG,MAAM,CAAC,EAAE;MAC1BH,OAAO,CAACG,MAAM,IAAI+B,cAAc,GAAGE,SAAS;IAChD;IACA,IAAI1B,QAAQ,CAACV,OAAO,CAACE,IAAI,CAAC,EAAE;MACxBF,OAAO,CAACE,IAAI,IAAIiC,eAAe,GAAGE,UAAU;IAChD;IACA,IAAI3B,QAAQ,CAACV,OAAO,CAACC,KAAK,CAAC,EAAE;MACzBD,OAAO,CAACC,KAAK,IAAIkC,eAAe,GAAGE,UAAU;IACjD;IACA;IACArC,OAAO,CAACoC,SAAS,GAAGA,SAAS;IAC7BpC,OAAO,CAACqC,UAAU,GAAGA,UAAU;EACnC;EACA,OAAOrC,OAAO;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASsC,aAAaA,CAACjG,OAAO,EAAE;EAC5B,IAAIA,OAAO,CAACe,QAAQ,KAAK,MAAM,EAAE;IAC7B,OAAOf,OAAO;EAClB;EACA,OAAOA,OAAO,CAACqB,UAAU,IAAIrB,OAAO,CAACsC,IAAI;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS4D,eAAeA,CAAClG,OAAO,EAAE;EAC9B;EACA,IAAI,CAACA,OAAO,EAAE;IACV,OAAOS,QAAQ,CAACwC,IAAI;EACxB;EACA,QAAQjD,OAAO,CAACe,QAAQ;IACpB,KAAK,MAAM;IACX,KAAK,MAAM;MACP,OAAOf,OAAO,CAACI,aAAa,CAAC6C,IAAI;IACrC,KAAK,WAAW;MACZ,OAAOjD,OAAO,CAACiD,IAAI;IACvB;EACJ;EACA;EACA,MAAM;IAAEkD,QAAQ;IAAEC,SAAS;IAAEC;EAAU,CAAC,GAAGtG,wBAAwB,CAACC,OAAO,CAAC;EAC5E,IAAI,uBAAuB,CAACsG,IAAI,CAACC,MAAM,CAACJ,QAAQ,CAAC,GAAGI,MAAM,CAACF,SAAS,CAAC,GAAGE,MAAM,CAACH,SAAS,CAAC,CAAC,EAAE;IACxF,OAAOpG,OAAO;EAClB;EACA,OAAOkG,eAAe,CAACD,aAAa,CAACjG,OAAO,CAAC,CAAC;AAClD;;AAEA;AACA;AACA;AACA,SAASwG,SAASA,CAACxG,OAAO,EAAEyG,IAAI,GAAG,KAAK,EAAE;EACtC,MAAMC,SAAS,GAAGD,IAAI,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;EAC7D,MAAM1F,QAAQ,GAAGf,OAAO,CAACe,QAAQ;EACjC,IAAIA,QAAQ,KAAK,MAAM,IAAIA,QAAQ,KAAK,MAAM,EAAE;IAC5C,MAAMmC,IAAI,GAAGlD,OAAO,CAACI,aAAa,CAACM,eAAe;IAClD,MAAMiG,gBAAgB,GAAG3G,OAAO,CAACI,aAAa,CAACuG,gBAAgB,IAAIzD,IAAI;IACvE,OAAOyD,gBAAgB,CAACD,SAAS,CAAC;EACtC;EACA,OAAO1G,OAAO,CAAC0G,SAAS,CAAC;AAC7B;AAEA,SAASE,6CAA6CA,CAAC5G,OAAO,EAAE6G,aAAa,GAAG,KAAK,EAAE;EACnF,MAAM3D,IAAI,GAAGlD,OAAO,CAACI,aAAa,CAACM,eAAe;EAClD,MAAMoG,cAAc,GAAGxB,oCAAoC,CAACtF,OAAO,EAAEkD,IAAI,CAAC;EAC1E,MAAMO,KAAK,GAAGJ,IAAI,CAACC,GAAG,CAACJ,IAAI,CAAC8B,WAAW,EAAE7E,MAAM,CAAC4G,UAAU,IAAI,CAAC,CAAC;EAChE,MAAMvD,MAAM,GAAGH,IAAI,CAACC,GAAG,CAACJ,IAAI,CAAC+B,YAAY,EAAE9E,MAAM,CAAC6G,WAAW,IAAI,CAAC,CAAC;EACnE,MAAMC,SAAS,GAAG,CAACJ,aAAa,GAAGL,SAAS,CAACtD,IAAI,CAAC,GAAG,CAAC;EACtD,MAAMgE,UAAU,GAAG,CAACL,aAAa,GAAGL,SAAS,CAACtD,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;EAC/D,MAAMiE,MAAM,GAAG;IACXpD,GAAG,EAAEkD,SAAS,GAAG7C,MAAM,CAAC0C,cAAc,EAAE/C,GAAG,CAAC,GAAGK,MAAM,CAAC0C,cAAc,EAAEf,SAAS,CAAC;IAChFlC,IAAI,EAAEqD,UAAU,GAAG9C,MAAM,CAAC0C,cAAc,EAAEjD,IAAI,CAAC,GAAGO,MAAM,CAAC0C,cAAc,EAAEd,UAAU,CAAC;IACpFvC,KAAK;IACLD;EACJ,CAAC;EACD,OAAOE,aAAa,CAACyD,MAAM,CAAC;AAChC;;AAEA;AACA;AACA;AACA,SAASC,OAAOA,CAACpH,OAAO,EAAE;EACtB,MAAMe,QAAQ,GAAGf,OAAO,CAACe,QAAQ;EACjC,IAAIA,QAAQ,KAAK,MAAM,IAAIA,QAAQ,KAAK,MAAM,EAAE;IAC5C,OAAO,KAAK;EAChB;EACA,IAAIhB,wBAAwB,CAACC,OAAO,EAAE,UAAU,CAAC,KAAK,OAAO,EAAE;IAC3D,OAAO,IAAI;EACf;EACA,OAAOoH,OAAO,CAACnB,aAAa,CAACjG,OAAO,CAAC,CAAC;AAC1C;AAEA,SAASqH,aAAaA,CAACC,MAAM,EAAEhF,IAAI,EAAEiF,OAAO,GAAG,CAAC,EAAEC,iBAAiB,EAAE/B,aAAa,GAAG,KAAK,EAAE;EACxF;EACA,IAAIgC,UAAU,GAAG;IAAE1D,GAAG,EAAE,CAAC;IAAEF,IAAI,EAAE;EAAE,CAAC;EACpC,MAAMjD,YAAY,GAAG6E,aAAa,GAAGlD,4BAA4B,CAAC+E,MAAM,CAAC,GAAGhG,sBAAsB,CAACgG,MAAM,EAAEhF,IAAI,CAAC;EAChH;EACA,IAAIkF,iBAAiB,KAAK,UAAU,EAAE;IAClCC,UAAU,GAAGb,6CAA6C,CAAChG,YAAY,EAAE6E,aAAa,CAAC;EAC3F,CAAC,MACI;IACD;IACA,IAAIiC,cAAc;IAClB,IAAIF,iBAAiB,KAAK,cAAc,EAAE;MACtCE,cAAc,GAAGxB,eAAe,CAACD,aAAa,CAAC3D,IAAI,CAAC,CAAC;MACrD,IAAIoF,cAAc,CAAC3G,QAAQ,KAAK,MAAM,EAAE;QACpC2G,cAAc,GAAGJ,MAAM,CAAClH,aAAa,CAACM,eAAe;MACzD;IACJ,CAAC,MACI,IAAI8G,iBAAiB,KAAK,QAAQ,EAAE;MACrCE,cAAc,GAAGJ,MAAM,CAAClH,aAAa,CAACM,eAAe;IACzD,CAAC,MACI;MACDgH,cAAc,GAAGF,iBAAiB;IACtC;IACA,MAAM7D,OAAO,GAAG2B,oCAAoC,CAACoC,cAAc,EAAE9G,YAAY,EAAE6E,aAAa,CAAC;IACjG;IACA,IAAI9B,OAAO,IAAI+D,cAAc,CAAC3G,QAAQ,KAAK,MAAM,IAAI,CAACqG,OAAO,CAACxG,YAAY,CAAC,EAAE;MACzE,MAAM;QAAE4C,MAAM;QAAEC;MAAM,CAAC,GAAGF,cAAc,CAAC+D,MAAM,CAAClH,aAAa,CAAC;MAC9D,IAAIiE,QAAQ,CAACoD,UAAU,CAAC1D,GAAG,CAAC,IAAIM,QAAQ,CAACV,OAAO,CAACI,GAAG,CAAC,IAAIM,QAAQ,CAACV,OAAO,CAACoC,SAAS,CAAC,EAAE;QAClF0B,UAAU,CAAC1D,GAAG,IAAIJ,OAAO,CAACI,GAAG,GAAGJ,OAAO,CAACoC,SAAS;MACrD;MACA,IAAI1B,QAAQ,CAACoD,UAAU,CAAC1D,GAAG,CAAC,EAAE;QAC1B0D,UAAU,CAAC3D,MAAM,GAAGM,MAAM,CAACZ,MAAM,CAAC,GAAGY,MAAM,CAACT,OAAO,CAACI,GAAG,CAAC;MAC5D;MACA,IAAIM,QAAQ,CAACoD,UAAU,CAAC5D,IAAI,CAAC,IAAIQ,QAAQ,CAACV,OAAO,CAACE,IAAI,CAAC,IAAIQ,QAAQ,CAACV,OAAO,CAACqC,UAAU,CAAC,EAAE;QACrFyB,UAAU,CAAC5D,IAAI,IAAIF,OAAO,CAACE,IAAI,GAAGF,OAAO,CAACqC,UAAU;MACxD;MACA,IAAI3B,QAAQ,CAACoD,UAAU,CAAC1D,GAAG,CAAC,EAAE;QAC1B0D,UAAU,CAAC7D,KAAK,GAAGQ,MAAM,CAACX,KAAK,CAAC,GAAGW,MAAM,CAACT,OAAO,CAACE,IAAI,CAAC;MAC3D;IACJ,CAAC,MACI,IAAIF,OAAO,EAAE;MACd;MACA8D,UAAU,GAAG9D,OAAO;IACxB;EACJ;EACA;EACA,IAAIU,QAAQ,CAACoD,UAAU,CAAC5D,IAAI,CAAC,EAAE;IAC3B4D,UAAU,CAAC5D,IAAI,IAAI0D,OAAO;EAC9B;EACA,IAAIlD,QAAQ,CAACoD,UAAU,CAAC1D,GAAG,CAAC,EAAE;IAC1B0D,UAAU,CAAC1D,GAAG,IAAIwD,OAAO;EAC7B;EACA,IAAIlD,QAAQ,CAACoD,UAAU,CAAC7D,KAAK,CAAC,EAAE;IAC5B6D,UAAU,CAAC7D,KAAK,IAAI2D,OAAO;EAC/B;EACA,IAAIlD,QAAQ,CAACoD,UAAU,CAAC3D,MAAM,CAAC,EAAE;IAC7B2D,UAAU,CAAC3D,MAAM,IAAIyD,OAAO;EAChC;EACA,OAAOE,UAAU;AACrB;;AAEA;AACA;AACA;AACA;AACA,SAASE,OAAOA,CAAC;EAAElE,KAAK;EAAED;AAAO,CAAC,EAAE;EAChC,OAAOC,KAAK,GAAGD,MAAM;AACzB;AACA,SAASoE,oBAAoBA,CAACC,SAAS,EAAEC,OAAO,EAAER,MAAM,EAAEhF,IAAI,EAAEyF,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAEP,iBAAiB,GAAG,UAAU,EAAED,OAAO,GAAG,CAAC,EAAE;EAChK,IAAIM,SAAS,CAAC7G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;IAClC,OAAO6G,SAAS;EACpB;EACA,MAAMJ,UAAU,GAAGJ,aAAa,CAACC,MAAM,EAAEhF,IAAI,EAAEiF,OAAO,EAAEC,iBAAiB,CAAC;EAC1E,MAAMQ,KAAK,GAAG;IACVjE,GAAG,EAAE;MACDN,KAAK,EAAEgE,UAAU,EAAEhE,KAAK,IAAI,CAAC;MAC7BD,MAAM,EAAE,CAACsE,OAAO,EAAE/D,GAAG,IAAI,CAAC,KAAK0D,UAAU,EAAE1D,GAAG,IAAI,CAAC;IACvD,CAAC;IACDH,KAAK,EAAE;MACHH,KAAK,EAAE,CAACgE,UAAU,EAAE7D,KAAK,IAAI,CAAC,KAAKkE,OAAO,EAAElE,KAAK,IAAI,CAAC,CAAC;MACvDJ,MAAM,EAAEiE,UAAU,EAAEjE,MAAM,IAAI;IAClC,CAAC;IACDM,MAAM,EAAE;MACJL,KAAK,EAAEgE,UAAU,EAAEhE,KAAK,IAAI,CAAC;MAC7BD,MAAM,EAAE,CAACiE,UAAU,EAAE3D,MAAM,IAAI,CAAC,KAAKgE,OAAO,EAAEhE,MAAM,IAAI,CAAC;IAC7D,CAAC;IACDD,IAAI,EAAE;MACFJ,KAAK,EAAE,CAACqE,OAAO,CAACjE,IAAI,IAAI,CAAC,KAAK4D,UAAU,EAAE5D,IAAI,IAAI,CAAC,CAAC;MACpDL,MAAM,EAAEiE,UAAU,EAAEjE,MAAM,IAAI;IAClC;EACJ,CAAC;EACD,MAAMyE,WAAW,GAAG1D,MAAM,CAAC2D,IAAI,CAACF,KAAK,CAAC,CACjCG,GAAG,CAAEC,GAAG,KAAM;IACfC,QAAQ,EAAED,GAAG;IACb,GAAGJ,KAAK,CAACI,GAAG,CAAC;IACbE,IAAI,EAAEX,OAAO,CAACK,KAAK,CAACI,GAAG,CAAC;EAC5B,CAAC,CAAC,CAAC,CACEG,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACH,IAAI,GAAGE,CAAC,CAACF,IAAI,CAAC;EACpC,IAAII,aAAa,GAAGT,WAAW,CAACU,MAAM,CAAC,CAAC;IAAElF,KAAK;IAAED;EAAO,CAAC,KAAK;IAC1D,OAAOC,KAAK,IAAI6D,MAAM,CAACtC,WAAW,IAAIxB,MAAM,IAAI8D,MAAM,CAACrC,YAAY;EACvE,CAAC,CAAC;EACFyD,aAAa,GAAGA,aAAa,CAACC,MAAM,CAAC,CAAC;IAAEN;EAAS,CAAC,KAAK;IACnD,OAAON,gBAAgB,CAACa,IAAI,CAAEC,eAAe,IAAK;MAC9C,OAAOA,eAAe,KAAKR,QAAQ;IACvC,CAAC,CAAC;EACN,CAAC,CAAC;EACF,MAAMS,iBAAiB,GAAGJ,aAAa,CAACK,MAAM,GAAG,CAAC,GAAGL,aAAa,CAAC,CAAC,CAAC,CAACL,QAAQ,GAAGJ,WAAW,CAAC,CAAC,CAAC,CAACI,QAAQ;EACxG,MAAMW,SAAS,GAAGnB,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACzC;EACA3B,MAAM,CAAC4B,SAAS,GAAG5B,MAAM,CAAC4B,SAAS,CAACC,OAAO,CAAC,kBAAkB,EAAG,cAAalK,QAAQ,CAAC,CAAC,CAACmK,KAAK,GAAGtJ,eAAe,CAACgJ,iBAAiB,CAAC,GAAGA,iBAAkB,EAAC,CAAC;EAC1J,OAAOA,iBAAiB,IAAIE,SAAS,GAAI,IAAGA,SAAU,EAAC,GAAG,EAAE,CAAC;AACjE;AAEA,SAASK,UAAUA,CAACC,IAAI,EAAE;EACtB,OAAO;IACH7F,KAAK,EAAE6F,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAAC7D,KAAK;IAChCD,MAAM,EAAE8F,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAAC9D,MAAM;IAClCK,IAAI,EAAER,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACzD,IAAI,IAAI,CAAC,CAAC;IAC/CE,GAAG,EAAEV,IAAI,CAACmG,KAAK,CAACF,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACvD,GAAG,IAAI,CAAC,CAAC;IAC7CD,MAAM,EAAET,IAAI,CAACmG,KAAK,CAACF,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACxD,MAAM,IAAI,CAAC,CAAC;IACnDF,KAAK,EAAEP,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAAC1D,KAAK,IAAI,CAAC;EACpD,CAAC;AACL;;AAEA;AACA;AACA;AACA,SAAS6F,oBAAoBA,CAAC5B,SAAS,EAAE;EACrC,MAAM6B,IAAI,GAAG;IAAE7F,IAAI,EAAE,OAAO;IAAED,KAAK,EAAE,MAAM;IAAEE,MAAM,EAAE,KAAK;IAAEC,GAAG,EAAE;EAAS,CAAC;EAC3E,OAAO8D,SAAS,CAACsB,OAAO,CAAC,wBAAwB,EAAEQ,OAAO,IAAID,IAAI,CAACC,OAAO,CAAC,CAAC;AAChF;;AAEA;AACA;AACA;AACA,SAASC,oBAAoBA,CAACZ,SAAS,EAAE;EACrC,IAAIA,SAAS,KAAK,OAAO,EAAE;IACvB,OAAO,MAAM;EACjB,CAAC,MACI,IAAIA,SAAS,KAAK,MAAM,EAAE;IAC3B,OAAO,OAAO;EAClB;EACA,OAAOA,SAAS;AACpB;AAEA,MAAMa,KAAK,GAAGA,CAACvF,KAAK,EAAEwF,GAAG,GAAG,CAAC,KAAKxF,KAAK,GAAGvB,UAAU,CAACuB,KAAK,CAAC,GAAGwF,GAAG;AACjE,SAASC,aAAaA,CAAC/J,OAAO,EAAE;EAC5B,MAAMG,MAAM,GAAGH,OAAO,CAACI,aAAa,CAACC,WAAW;EAChD,MAAMsC,MAAM,GAAGxC,MAAM,EAAEI,gBAAgB,CAACP,OAAO,CAAC;EAChD,MAAMgK,CAAC,GAAGH,KAAK,CAAClH,MAAM,EAAEoD,SAAS,CAAC,GAAG8D,KAAK,CAAClH,MAAM,EAAEsH,YAAY,CAAC;EAChE,MAAMC,CAAC,GAAGL,KAAK,CAAClH,MAAM,EAAEqD,UAAU,CAAC,GAAG6D,KAAK,CAAClH,MAAM,EAAEwH,WAAW,CAAC;EAChE,OAAO;IACH1G,KAAK,EAAEW,MAAM,CAACpE,OAAO,CAACmF,WAAW,CAAC,GAAG+E,CAAC;IACtC1G,MAAM,EAAEY,MAAM,CAACpE,OAAO,CAACqF,YAAY,CAAC,GAAG2E;EAC3C,CAAC;AACL;;AAEA;AACA;AACA;AACA,SAASI,mBAAmBA,CAAC9C,MAAM,EAAEhF,IAAI,EAAEmD,aAAa,EAAE;EACtD,MAAM4E,kBAAkB,GAAG5E,aAAa,GAClClD,4BAA4B,CAAC+E,MAAM,CAAC,GACpChG,sBAAsB,CAACgG,MAAM,EAAEhF,IAAI,CAAC;EAC1C,OAAOgD,oCAAoC,CAAChD,IAAI,EAAE+H,kBAAkB,EAAE5E,aAAa,CAAC;AACxF;;AAEA;AACA;AACA;AACA,SAAS6E,gBAAgBA,CAAChD,MAAM,EAAEiD,WAAW,EAAElC,QAAQ,EAAE;EACrD,MAAMR,SAAS,GAAGQ,QAAQ,CAACY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACxC;EACA,MAAMuB,UAAU,GAAGT,aAAa,CAACzC,MAAM,CAAC;EACxC;EACA,MAAMmD,aAAa,GAAG;IAClBhH,KAAK,EAAE+G,UAAU,CAAC/G,KAAK;IACvBD,MAAM,EAAEgH,UAAU,CAAChH;EACvB,CAAC;EACD;EACA,MAAMkH,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC1J,OAAO,CAAC6G,SAAS,CAAC,KAAK,CAAC,CAAC;EAC3D,MAAM8C,QAAQ,GAAGD,OAAO,GAAG,KAAK,GAAG,MAAM;EACzC,MAAME,aAAa,GAAGF,OAAO,GAAG,MAAM,GAAG,KAAK;EAC9C,MAAMG,WAAW,GAAGH,OAAO,GAAG,QAAQ,GAAG,OAAO;EAChD,MAAMI,oBAAoB,GAAG,CAACJ,OAAO,GAAG,QAAQ,GAAG,OAAO;EAC1DD,aAAa,CAACE,QAAQ,CAAC,GACnB,CAACJ,WAAW,CAACI,QAAQ,CAAC,IAAI,CAAC,IACvBJ,WAAW,CAACM,WAAW,CAAC,GAAG,CAAC,GAC5BL,UAAU,CAACK,WAAW,CAAC,GAAG,CAAC;EACnCJ,aAAa,CAACG,aAAa,CAAC,GAAG/C,SAAS,KAAK+C,aAAa,GACpD,CAACL,WAAW,CAACK,aAAa,CAAC,IAAI,CAAC,IAAIJ,UAAU,CAACM,oBAAoB,CAAC,GACpEP,WAAW,CAACd,oBAAoB,CAACmB,aAAa,CAAC,CAAC,IAAI,CAAC;EAC3D,OAAOH,aAAa;AACxB;AAEA,SAASM,iBAAiBA,CAACC,OAAO,EAAEC,YAAY,EAAE;EAC9C,OAAO,CAAC,CAACD,OAAO,CAACE,SAAS,CAACD,YAAY,CAAC,EAAEE,OAAO;AACrD;AAEA,MAAMC,kBAAkB,GAAG;EACvBrH,GAAG,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;EACpCD,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC;EAChDjC,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC;EAC7CC,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY;AACxC,CAAC;AACD,SAASuJ,kBAAkBA,CAACxD,SAAS,EAAEyD,aAAa,EAAE;EAClD,IAAI,CAACrM,QAAQ,CAAC,CAAC,CAACmK,KAAK,EAAE;IACnB,OAAO,KAAK;EAChB;EACA,OAAOgC,kBAAkB,CAACE,aAAa,CAAC,CAACC,QAAQ,CAAC1D,SAAS,CAAC;AAChE;AACA,SAAS2D,YAAYA,CAAC3D,SAAS,EAAE;EAC7B,IAAI,CAAC5I,QAAQ,CAAC,CAAC,CAACmK,KAAK,EAAE;IACnB,OAAO,EAAE;EACb;EACA,IAAIiC,kBAAkB,CAACxD,SAAS,EAAE,KAAK,CAAC,EAAE;IACtC,OAAO,MAAM;EACjB;EACA,IAAIwD,kBAAkB,CAACxD,SAAS,EAAE,OAAO,CAAC,EAAE;IACxC,OAAO,MAAM;EACjB;EACA,IAAIwD,kBAAkB,CAACxD,SAAS,EAAE,KAAK,CAAC,EAAE;IACtC,OAAO,MAAM;EACjB;EACA,IAAIwD,kBAAkB,CAACxD,SAAS,EAAE,QAAQ,CAAC,EAAE;IACzC,OAAO,MAAM;EACjB;EACA,OAAO,EAAE;AACb;AAEA,SAAS4D,oBAAoBA,CAACnC,IAAI,EAAEoC,QAAQ,EAAE;EAC1C,MAAMpE,MAAM,GAAGgC,IAAI,CAACqC,QAAQ,CAACrE,MAAM;EACnC,IAAIsE,cAAc,GAAGtE,MAAM,CAAC4B,SAAS;EACrC,MAAM2C,aAAa,GAAG5M,QAAQ,CAAC,CAAC,CAACmK,KAAK,GAChCtJ,eAAe,CAACwJ,IAAI,CAACzB,SAAS,CAAC,GAC/ByB,IAAI,CAACzB,SAAS;EACpB,IAAIyB,IAAI,CAACwC,aAAa,EAAE;IACpBF,cAAc,GAAGA,cAAc,CAACzC,OAAO,CAAC,kBAAkB,EAAG,cAAa0C,aAAc,EAAC,CAAC;IAC1FD,cAAc,GAAGA,cAAc,CAACzC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;IACnEyC,cAAc,GAAGA,cAAc,CAACzC,OAAO,CAAC,kBAAkB,EAAG,cAAa0C,aAAc,EAAC,CAAC;IAC1FD,cAAc,GAAGA,cAAc,CAACzC,OAAO,CAAC,SAAS,EAAG,IAAG0C,aAAc,EAAC,CAAC;IACvE,IAAID,cAAc,CAAC5K,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;MAC1C4K,cAAc,GAAGA,cAAc,GAAG,GAAG,GAAGJ,YAAY,CAACK,aAAa,CAAC;IACvE;IACA,IAAID,cAAc,CAAC5K,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI4K,cAAc,CAAC5K,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;MAC3F4K,cAAc,IAAI,eAAe;IACrC;IACA,IAAIA,cAAc,CAAC5K,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI4K,cAAc,CAAC5K,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;MAC3F4K,cAAc,IAAI,eAAe;IACrC;EACJ;EACAA,cAAc,GAAGA,cAAc,CAACzC,OAAO,CAAC,kCAAkC,EAAG,GAAE0C,aAAa,CAAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAC,CAAC;EAC7G,IAAIyC,QAAQ,EAAE;IACVA,QAAQ,CAACK,YAAY,CAACzE,MAAM,EAAE,OAAO,EAAEsE,cAAc,CAAC;IACtD;EACJ;EACAtE,MAAM,CAAC4B,SAAS,GAAG0C,cAAc;AACrC;AAEA,SAASI,SAASA,CAAChM,OAAO,EAAE2C,MAAM,EAAE+I,QAAQ,EAAE;EAC1C,IAAI,CAAC1L,OAAO,IAAI,CAAC2C,MAAM,EAAE;IACrB;EACJ;EACA4B,MAAM,CAAC2D,IAAI,CAACvF,MAAM,CAAC,CAACsJ,OAAO,CAAEC,IAAI,IAAK;IAClC,IAAIC,IAAI,GAAG,EAAE;IACb;IACA,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAACnL,OAAO,CAACkL,IAAI,CAAC,KAAK,CAAC,CAAC,IAC1ElI,SAAS,CAACrB,MAAM,CAACuJ,IAAI,CAAC,CAAC,EAAE;MACzBC,IAAI,GAAG,IAAI;IACf;IACA,IAAIT,QAAQ,EAAE;MACVA,QAAQ,CAACU,QAAQ,CAACpM,OAAO,EAAEkM,IAAI,EAAG,GAAE3F,MAAM,CAAC5D,MAAM,CAACuJ,IAAI,CAAC,CAAE,GAAEC,IAAK,EAAC,CAAC;MAClE;IACJ;IACA;IACAnM,OAAO,CAACqM,KAAK,CAACH,IAAI,CAAC,GAAG3F,MAAM,CAAC5D,MAAM,CAACuJ,IAAI,CAAC,CAAC,GAAGC,IAAI;EACrD,CAAC,CAAC;AACN;AAEA,SAASG,KAAKA,CAAChD,IAAI,EAAE;EACjB,IAAImB,aAAa,GAAGnB,IAAI,CAAC3F,OAAO,CAAC2D,MAAM;EACvC;EACA,MAAMiF,YAAY,GAAGjD,IAAI,CAACqC,QAAQ,CAACrE,MAAM,CAACkF,aAAa,CAAC,QAAQ,CAAC;EACjE;EACA,IAAI,CAACD,YAAY,EAAE;IACf,OAAOjD,IAAI;EACf;EACA,MAAMmD,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAACzL,OAAO,CAACsI,IAAI,CAACzB,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;EACjF,MAAMyD,GAAG,GAAGD,UAAU,GAAG,QAAQ,GAAG,OAAO;EAC3C,MAAME,eAAe,GAAGF,UAAU,GAAG,KAAK,GAAG,MAAM;EACnD,MAAMhG,IAAI,GAAGkG,eAAe,CAACC,WAAW,CAAC,CAAC;EAC1C,MAAMC,OAAO,GAAGJ,UAAU,GAAG,MAAM,GAAG,KAAK;EAC3C,MAAMK,MAAM,GAAGL,UAAU,GAAG,QAAQ,GAAG,OAAO;EAC9C,MAAMM,gBAAgB,GAAGhD,aAAa,CAACwC,YAAY,CAAC,CAACG,GAAG,CAAC;EACzD,MAAMM,kBAAkB,GAAG1D,IAAI,CAACzB,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACvD;EACA,IAAI,CAACK,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACwK,MAAM,CAAC,IAAI,CAAC,IAAIC,gBAAgB,IAAItC,aAAa,CAAChE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;IACjFgE,aAAa,CAAEhE,IAAI,CAAC,IACjB,CAACgE,aAAa,CAAChE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC6C,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACwK,MAAM,CAAC,IAAI,CAAC,IAAIC,gBAAgB,CAAC;EAC1F;EACA;EACA,IAAI3I,MAAM,CAAEkF,IAAI,CAAE3F,OAAO,CAACrB,IAAI,CAACmE,IAAI,CAAC,CAAC,GAAGrC,MAAM,CAAC2I,gBAAgB,CAAC,IAAItC,aAAa,CAACqC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;IAC5FrC,aAAa,CAAEhE,IAAI,CAAC,IACjBrC,MAAM,CAAEkF,IAAI,CAAE3F,OAAO,CAACrB,IAAI,CAACmE,IAAI,CAAC,CAAC,GAAGrC,MAAM,CAAC2I,gBAAgB,CAAC,GAAG3I,MAAM,CAAEqG,aAAa,CAAEqC,MAAM,CAAC,CAAC;EACtG;EACArC,aAAa,GAAG/G,aAAa,CAAC+G,aAAa,CAAC;EAC5C;EACA;EACA,MAAMnK,GAAG,GAAGP,wBAAwB,CAACuJ,IAAI,CAACqC,QAAQ,CAACrE,MAAM,CAAC;EAC1D,MAAM2F,gBAAgB,GAAGlK,UAAU,CAACzC,GAAG,CAAE,SAAQqM,eAAgB,EAAC,CAAC,CAAC,IAAI,CAAC;EACzE,MAAMO,gBAAgB,GAAGnK,UAAU,CAACzC,GAAG,CAAE,SAAQqM,eAAgB,OAAM,CAAC,CAAC,IAAI,CAAC;EAC9E;EACA,IAAIQ,MAAM;EACV,IAAI,CAACH,kBAAkB,EAAE;IACrBG,MAAM,GAAG/I,MAAM,CAAEkF,IAAI,CAAE3F,OAAO,CAACrB,IAAI,CAACmE,IAAI,CAAC,CAAC,GAAGrC,MAAM,CAACkF,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACoK,GAAG,CAAC,GAAG,CAAC,GAAGK,gBAAgB,GAAG,CAAC,CAAC;EAC1G,CAAC,MACI;IACD,MAAMK,kBAAkB,GAAGrK,UAAU,CAACzC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;IAC/D,MAAM+M,qBAAqB,GAAGjJ,MAAM,CAAC6I,gBAAgB,GAAGC,gBAAgB,GAAGE,kBAAkB,CAAC;IAC9FD,MAAM,GAAG1G,IAAI,KAAKuG,kBAAkB,GAChC5I,MAAM,CAAEkF,IAAI,CAAE3F,OAAO,CAACrB,IAAI,CAACmE,IAAI,CAAC,CAAC,GAAG4G,qBAAqB,GACzDjJ,MAAM,CAAEkF,IAAI,CAAE3F,OAAO,CAACrB,IAAI,CAACmE,IAAI,CAAC,CAAC,GAAGrC,MAAM,CAACkF,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACoK,GAAG,CAAC,GAAGW,qBAAqB,CAAC;EAClG;EACA,IAAIC,SAAS,GAAGH,MAAM,IAAI1C,aAAa,CAAChE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAGwG,gBAAgB,GAAGC,gBAAgB;EACzF;EACAI,SAAS,GAAGjK,IAAI,CAACC,GAAG,CAACD,IAAI,CAACkK,GAAG,CAAC9C,aAAa,CAACiC,GAAG,CAAC,IAAIK,gBAAgB,GAAG,CAAC,CAAC,EAAEO,SAAS,CAAC,EAAE,CAAC,CAAC;EACzFhE,IAAI,CAAC3F,OAAO,CAAC2I,KAAK,GAAG;IACjB,CAAC7F,IAAI,GAAGpD,IAAI,CAACmG,KAAK,CAAC8D,SAAS,CAAC;IAC7B,CAACT,OAAO,GAAG,EAAE,CAAC;EAClB,CAAC;EACDvD,IAAI,CAACqC,QAAQ,CAACW,KAAK,GAAGC,YAAY;EAClC,OAAOjD,IAAI;AACf;AAEA,SAASkE,IAAIA,CAAClE,IAAI,EAAE;EAChBA,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,GAAG5D,aAAa,CAAC4F,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAAC;EACxD,IAAI,CAACyD,iBAAiB,CAACzB,IAAI,CAAC0B,OAAO,EAAE,MAAM,CAAC,EAAE;IAC1C1B,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,GAAG;MAClB,GAAGgC,IAAI,CAAC3F,OAAO,CAAC2D,MAAM;MACtB,GAAGgD,gBAAgB,CAAChB,IAAI,CAACqC,QAAQ,CAACrE,MAAM,EAAEgC,IAAI,CAAC3F,OAAO,CAACrB,IAAI,EAAEgH,IAAI,CAACzB,SAAS;IAC/E,CAAC;IACD,OAAOyB,IAAI;EACf;EACA,MAAM7B,UAAU,GAAGJ,aAAa,CAACiC,IAAI,CAACqC,QAAQ,CAACrE,MAAM,EAAEgC,IAAI,CAACqC,QAAQ,CAACrJ,IAAI,EAAE,CAAC;EAAE;EAC9E,UAAU,EAAE,KAAK,CAAC;EAClB,CAAC;EACD,IAAIuF,SAAS,GAAGyB,IAAI,CAACzB,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5C,IAAID,SAAS,GAAGM,IAAI,CAACzB,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;EAClD,MAAMwE,WAAW,GAAGnE,IAAI,CAAC3F,OAAO,CAACrB,IAAI;EACrC,MAAMgF,MAAM,GAAGgC,IAAI,CAACqC,QAAQ,CAACrE,MAAM;EACnC,MAAMhF,IAAI,GAAGgH,IAAI,CAACqC,QAAQ,CAACrJ,IAAI;EAC/B,MAAMoL,gBAAgB,GAAG9F,oBAAoB,CAAC,MAAM,EAAE6F,WAAW,EAAEnG,MAAM,EAAEhF,IAAI,EAAEgH,IAAI,CAAC0B,OAAO,CAACjD,gBAAgB,CAAC;EAC/G,MAAM4F,SAAS,GAAG,CAAC9F,SAAS,EAAE6F,gBAAgB,CAAC;EAC/CC,SAAS,CAAC1B,OAAO,CAAC,CAAC2B,IAAI,EAAEC,KAAK,KAAK;IAC/B,IAAIhG,SAAS,KAAK+F,IAAI,IAAID,SAAS,CAAC5E,MAAM,KAAK8E,KAAK,GAAG,CAAC,EAAE;MACtD;IACJ;IACAhG,SAAS,GAAGyB,IAAI,CAACzB,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxC;IACA,MAAM6E,WAAW,GAAIjG,SAAS,KAAK,MAAM,IACrCxE,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAAC1D,KAAK,IAAI,CAAC,CAAC,GAAGP,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACuB,IAAI,IAAI,CAAC,CAAC,IACnFgE,SAAS,KAAK,OAAO,IAClBxE,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACzD,IAAI,IAAI,CAAC,CAAC,GAAGR,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACsB,KAAK,IAAI,CAAC,CAAE,IACxFiE,SAAS,KAAK,KAAK,IAChBxE,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACxD,MAAM,IAAI,CAAC,CAAC,GAAGT,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACyB,GAAG,IAAI,CAAC,CAAE,IACxF8D,SAAS,KAAK,QAAQ,IACnBxE,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACvD,GAAG,IAAI,CAAC,CAAC,GAAGV,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAACrB,IAAI,CAACwB,MAAM,IAAI,CAAC,CAAE;IAC7F,MAAMiK,aAAa,GAAG1K,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACzD,IAAI,IAAI,CAAC,CAAC,GAAGR,IAAI,CAACkG,KAAK,CAAC9B,UAAU,CAAC5D,IAAI,IAAI,CAAC,CAAC;IAClG,MAAMmK,cAAc,GAAG3K,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAAC1D,KAAK,IAAI,CAAC,CAAC,GAAGP,IAAI,CAACkG,KAAK,CAAC9B,UAAU,CAAC7D,KAAK,IAAI,CAAC,CAAC;IACrG,MAAMqK,YAAY,GAAG5K,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACvD,GAAG,IAAI,CAAC,CAAC,GAAGV,IAAI,CAACkG,KAAK,CAAC9B,UAAU,CAAC1D,GAAG,IAAI,CAAC,CAAC;IAC/F,MAAMmK,eAAe,GAAG7K,IAAI,CAACkG,KAAK,CAACD,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACxD,MAAM,IAAI,CAAC,CAAC,GAAGT,IAAI,CAACkG,KAAK,CAAC9B,UAAU,CAAC3D,MAAM,IAAI,CAAC,CAAC;IACxG,MAAMqK,mBAAmB,GAAItG,SAAS,KAAK,MAAM,IAAIkG,aAAa,IAC7DlG,SAAS,KAAK,OAAO,IAAImG,cAAe,IACxCnG,SAAS,KAAK,KAAK,IAAIoG,YAAa,IACpCpG,SAAS,KAAK,QAAQ,IAAIqG,eAAgB;IAC/C;IACA,MAAMzB,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAACzL,OAAO,CAAC6G,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAMuG,gBAAgB,GAAK3B,UAAU,IAAIzD,SAAS,KAAK,MAAM,IAAI+E,aAAa,IACzEtB,UAAU,IAAIzD,SAAS,KAAK,OAAO,IAAIgF,cAAe,IACtD,CAACvB,UAAU,IAAIzD,SAAS,KAAK,MAAM,IAAIiF,YAAa,IACpD,CAACxB,UAAU,IAAIzD,SAAS,KAAK,OAAO,IAAIkF,eAAiB;IAC9D,IAAIJ,WAAW,IAAIK,mBAAmB,IAAIC,gBAAgB,EAAE;MACxD,IAAIN,WAAW,IAAIK,mBAAmB,EAAE;QACpCtG,SAAS,GAAG8F,SAAS,CAACE,KAAK,GAAG,CAAC,CAAC;MACpC;MACA,IAAIO,gBAAgB,EAAE;QAClBpF,SAAS,GAAGY,oBAAoB,CAACZ,SAAS,CAAC;MAC/C;MACAM,IAAI,CAACzB,SAAS,GAAGA,SAAS,IAAImB,SAAS,GAAI,IAAGA,SAAU,EAAC,GAAG,EAAE,CAAC;MAC/DM,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,GAAG;QAClB,GAAGgC,IAAI,CAAC3F,OAAO,CAAC2D,MAAM;QACtB,GAAGgD,gBAAgB,CAAChB,IAAI,CAACqC,QAAQ,CAACrE,MAAM,EAAEgC,IAAI,CAAC3F,OAAO,CAACrB,IAAI,EAAEgH,IAAI,CAACzB,SAAS;MAC/E,CAAC;IACL;EACJ,CAAC,CAAC;EACF,OAAOyB,IAAI;AACf;AAEA,SAAS+E,QAAQA,CAACC,aAAa,EAAEC,WAAW,EAAElG,QAAQ,EAAE2C,OAAO,EAAE;EAC7D,IAAI,CAACsD,aAAa,IAAI,CAACC,WAAW,EAAE;IAChC;EACJ;EACA,MAAMC,cAAc,GAAGpE,mBAAmB,CAACkE,aAAa,EAAEC,WAAW,CAAC;EACtE,IAAI,CAAClG,QAAQ,CAACoG,KAAK,CAAC,gDAAgD,CAAC,IAC9D,CAACpG,QAAQ,CAACoG,KAAK,CAAC,6EAA6E,CAAC,EAAE;IACnGpG,QAAQ,GAAG,MAAM;EACrB;EACA,MAAMyD,aAAa,GAAG,CAAC,CAACzD,QAAQ,CAACoG,KAAK,CAAC,OAAO,CAAC;EAC/C;EACA,IAAI5G,SAAS,GAAGQ,QAAQ,CAACoG,KAAK,CAAC,yCAAyC,CAAC,GACnEpG,QAAQ,CAACY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,GAChCZ,QAAQ;EACd;EACA,MAAMqG,OAAO,GAAG7G,SAAS,CAAC4G,KAAK,CAAC,+EAA+E,CAAC;EAChH,IAAIC,OAAO,EAAE;IACT7G,SAAS,GAAG6G,OAAO,CAAC,CAAC,CAAC,IAAIA,OAAO,CAAC,CAAC,CAAC,GAAI,IAAGA,OAAO,CAAC,CAAC,CAAE,EAAC,GAAG,EAAE,CAAC;EACjE;EACA;EACA,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC1N,OAAO,CAAC6G,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;IACpFA,SAAS,GAAG,MAAM;EACtB;EACAA,SAAS,GAAGD,oBAAoB,CAACC,SAAS,EAAE2G,cAAc,EAAEF,aAAa,EAAEC,WAAW,EAAEvD,OAAO,GAAGA,OAAO,CAACjD,gBAAgB,GAAGhD,SAAS,CAAC;EACvI,MAAM4J,YAAY,GAAGrE,gBAAgB,CAACgE,aAAa,EAAEE,cAAc,EAAE3G,SAAS,CAAC;EAC/E,OAAO;IACHmD,OAAO,EAAEA,OAAO,IAAI;MAAEE,SAAS,EAAE,CAAC;IAAE,CAAC;IACrCS,QAAQ,EAAE;MACNrE,MAAM,EAAEgH,aAAa;MACrBhM,IAAI,EAAEiM,WAAW;MACjBjC,KAAK,EAAE,KAAK;IAChB,CAAC;IACD3I,OAAO,EAAE;MACL2D,MAAM,EAAEqH,YAAY;MACpBrM,IAAI,EAAEkM,cAAc;MACpBlC,KAAK,EAAE,KAAK;IAChB,CAAC;IACDsC,aAAa,EAAE,KAAK;IACpB/G,SAAS;IACTiE;EACJ,CAAC;AACL;AAEA,SAAS+C,eAAeA,CAACvF,IAAI,EAAE;EAC3B,IAAI,CAACyB,iBAAiB,CAACzB,IAAI,CAAC0B,OAAO,EAAE,iBAAiB,CAAC,EAAE;IACrD,OAAO1B,IAAI;EACf;EACA;EACA;EACA;EACA,MAAMwF,aAAa,GAAG,WAAW;EACjC,MAAMC,YAAY,GAAGzF,IAAI,CAACqC,QAAQ,CAACrE,MAAM,CAAC+E,KAAK,CAAC,CAAC;EACjD,MAAM;IAAEtI,GAAG;IAAEF,IAAI;IAAE,CAACiL,aAAa,GAAGE;EAAU,CAAC,GAAGD,YAAY;EAC9DA,YAAY,CAAChL,GAAG,GAAG,EAAE;EACrBgL,YAAY,CAAClL,IAAI,GAAG,EAAE;EACtBkL,YAAY,CAACD,aAAa,CAAC,GAAG,EAAE;EAChC,MAAMrH,UAAU,GAAGJ,aAAa,CAACiC,IAAI,CAACqC,QAAQ,CAACrE,MAAM,EAAEgC,IAAI,CAACqC,QAAQ,CAACrJ,IAAI,EAAE,CAAC;EAAE;EAC9EgH,IAAI,CAAC0B,OAAO,CAACE,SAAS,CAAC2D,eAAe,EAAErH,iBAAiB,IAAI,cAAc,EAAE,KAAK,CAAC;EACnF,CAAC;EACD;EACA;EACAuH,YAAY,CAAChL,GAAG,GAAGA,GAAG;EACtBgL,YAAY,CAAClL,IAAI,GAAGA,IAAI;EACxBkL,YAAY,CAACD,aAAa,CAAC,GAAGE,SAAS;EACvC,MAAMvN,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;EAChD,MAAMwN,KAAK,GAAG;IACVC,OAAOA,CAACrH,SAAS,EAAE;MACf,IAAIvD,KAAK,GAAGgF,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACO,SAAS,CAAC;MAC1C;MACA,IAAI,CAACyB,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACO,SAAS,CAAC,IAAI,CAAC,KAAKJ,UAAU,CAACI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;QACtEvD,KAAK,GAAGjB,IAAI,CAACC,GAAG,CAACgG,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACO,SAAS,CAAC,IAAI,CAAC,EAAEJ,UAAU,CAACI,SAAS,CAAC,IAAI,CAAC,CAAC;MACrF;MACA,OAAO;QAAE,CAACA,SAAS,GAAGvD;MAAM,CAAC;IACjC,CAAC;IACD6K,SAASA,CAACtH,SAAS,EAAE;MACjB,MAAMuH,qBAAqB,GAAGvH,SAAS,KAAK,OAAO;MACnD,MAAM8C,QAAQ,GAAGyE,qBAAqB,GAAG,MAAM,GAAG,KAAK;MACvD,MAAMvE,WAAW,GAAGuE,qBAAqB,GAAG,OAAO,GAAG,QAAQ;MAC9D,IAAI9K,KAAK,GAAGgF,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACqD,QAAQ,CAAC;MACzC;MACA,IAAI,CAACrB,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACO,SAAS,CAAC,IAAI,CAAC,KAAKJ,UAAU,CAACI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;QACtEvD,KAAK,GAAGjB,IAAI,CAACkK,GAAG,CAACjE,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACqD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAClD,UAAU,CAACI,SAAS,CAAC,IAAI,CAAC,IAAIyB,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,CAACuD,WAAW,CAAC,CAAC;MACzH;MACA,OAAO;QAAE,CAACF,QAAQ,GAAGrG;MAAM,CAAC;IAChC;EACJ,CAAC;EACD7C,KAAK,CAACwK,OAAO,CAAEpE,SAAS,IAAK;IACzB,MAAMpB,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAACzF,OAAO,CAAC6G,SAAS,CAAC,KAAK,CAAC,CAAC,GAAGoH,KAAK,CAAC,SAAS,CAAC,GAAGA,KAAK,CAAC,WAAW,CAAC;IACvG3F,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,GAAG;MAClB,GAAGgC,IAAI,CAAC3F,OAAO,CAAC2D,MAAM;MACtB,GAAGb,IAAI,CAACoB,SAAS;IACrB,CAAC;EACL,CAAC,CAAC;EACF,OAAOyB,IAAI;AACf;AAEA,SAAS+F,KAAKA,CAAC/F,IAAI,EAAE;EACjB,MAAMzB,SAAS,GAAGyB,IAAI,CAACzB,SAAS;EAChC,MAAMyH,aAAa,GAAGzH,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC7C,MAAMsG,cAAc,GAAG1H,SAAS,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9C,IAAIsG,cAAc,EAAE;IAChB,MAAM;MAAEjN,IAAI;MAAEgF;IAAO,CAAC,GAAGgC,IAAI,CAAC3F,OAAO;IACrC,MAAM8I,UAAU,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAACzL,OAAO,CAACsO,aAAa,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM7I,IAAI,GAAGgG,UAAU,GAAG,MAAM,GAAG,KAAK;IACxC,MAAM5B,WAAW,GAAG4B,UAAU,GAAG,OAAO,GAAG,QAAQ;IACnD,MAAM+C,YAAY,GAAG;MACjB3N,KAAK,EAAE;QAAE,CAAC4E,IAAI,GAAGnE,IAAI,CAACmE,IAAI;MAAE,CAAC;MAC7B3E,GAAG,EAAE;QACD,CAAC2E,IAAI,GAAG,CAACnE,IAAI,CAACmE,IAAI,CAAC,IAAI,CAAC,IAAInE,IAAI,CAACuI,WAAW,CAAC,GAAGvD,MAAM,CAACuD,WAAW;MACtE;IACJ,CAAC;IACDvB,IAAI,CAAC3F,OAAO,CAAC2D,MAAM,GAAG;MAClB,GAAGA,MAAM;MAAE,GAAG;QACV,CAACb,IAAI,GAAIA,IAAI,KAAK8I,cAAc,GAAGC,YAAY,CAAC3N,KAAK,CAAC4E,IAAI,CAAC,GAAG+I,YAAY,CAAC1N,GAAG,CAAC2E,IAAI;MACvF;IACJ,CAAC;EACL;EACA,OAAO6C,IAAI;AACf;AAEA,MAAMmG,WAAW,CAAC;EACdpH,QAAQA,CAACkG,WAAW,EAAED,aAAa,CAAC,oBAAoB;IACpD,OAAO,IAAI,CAACnH,MAAM,CAACoH,WAAW,EAAED,aAAa,CAAC,WAAW,CAAC;EAC9D;EACAnH,MAAMA,CAACoH,WAAW,EAAED,aAAa,CAAC,oBAAoB;IAClD,OAAOlE,mBAAmB,CAACkE,aAAa,EAAEC,WAAW,CAAC;EAC1D;EACAmB,gBAAgBA,CAACnB,WAAW,EAAED,aAAa,EAAEjG,QAAQ,EAAEsH,YAAY,EAAE3E,OAAO,EAAE;IAC1E,MAAM4E,gBAAgB,GAAG,CAACpC,IAAI,EAAE6B,KAAK,EAAER,eAAe,EAAEvC,KAAK,CAAC;IAC9D,MAAMuD,SAAS,GAAGhQ,kBAAkB,CAACwI,QAAQ,CAAC;IAC9C,MAAMiB,IAAI,GAAG+E,QAAQ,CAACC,aAAa,EAAEC,WAAW,EAAEsB,SAAS,EAAE7E,OAAO,CAAC;IACrE,IAAI,CAAC1B,IAAI,EAAE;MACP;IACJ;IACA,OAAOsG,gBAAgB,CAACE,MAAM,CAAC,CAACC,YAAY,EAAEC,QAAQ,KAAKA,QAAQ,CAACD,YAAY,CAAC,EAAEzG,IAAI,CAAC;EAC5F;AACJ;AACA,MAAM2G,eAAe,GAAG,IAAIR,WAAW,CAAC,CAAC;AACzC,SAASC,gBAAgBA,CAACnB,WAAW,EAAED,aAAa,EAAEzG,SAAS,EAAE8H,YAAY,EAAE3E,OAAO,EAAEU,QAAQ,EAAE;EAC9F,MAAMpC,IAAI,GAAG2G,eAAe,CAACP,gBAAgB,CAACnB,WAAW,EAAED,aAAa,EAAEzG,SAAS,EAAE8H,YAAY,EAAE3E,OAAO,CAAC;EAC3G,IAAI,CAAC1B,IAAI,EAAE;IACP;EACJ;EACA,MAAM3F,OAAO,GAAG0F,UAAU,CAACC,IAAI,CAAC;EAChC0C,SAAS,CAACsC,aAAa,EAAE;IACrB,aAAa,EAAE,WAAW;IAC1BvK,GAAG,EAAE,KAAK;IACVF,IAAI,EAAE,KAAK;IACXmL,SAAS,EAAG,eAAcrL,OAAO,CAACE,IAAK,OAAMF,OAAO,CAACI,GAAI;EAC7D,CAAC,EAAE2H,QAAQ,CAAC;EACZ,IAAIpC,IAAI,CAACqC,QAAQ,CAACW,KAAK,EAAE;IACrBN,SAAS,CAAC1C,IAAI,CAACqC,QAAQ,CAACW,KAAK,EAAEhD,IAAI,CAAC3F,OAAO,CAAC2I,KAAK,EAAEZ,QAAQ,CAAC;EAChE;EACAD,oBAAoB,CAACnC,IAAI,EAAEoC,QAAQ,CAAC;AACxC;AAEA,MAAMwE,kBAAkB,CAAC;EACrBC,WAAWA,CAACC,MAAM,EAAEC,eAAe,EAAEC,UAAU,EAAE;IAC7C,IAAI,CAACC,QAAQ,GAAG,IAAI/Q,OAAO,CAAC,CAAC;IAC7B,IAAI,CAACkQ,gBAAgB,GAAG,IAAIc,GAAG,CAAC,CAAC;IACjC,IAAI,CAACC,UAAU,GAAG,KAAK;IACvB,IAAIlR,iBAAiB,CAAC+Q,UAAU,CAAC,EAAE;MAC/BF,MAAM,CAACM,iBAAiB,CAAC,MAAM;QAC3B,IAAI,CAACC,aAAa,GAAG/Q,KAAK,CAACH,SAAS,CAACU,MAAM,EAAE,QAAQ,EAAE;UAAEyQ,OAAO,EAAE;QAAK,CAAC,CAAC,EAAEnR,SAAS,CAACU,MAAM,EAAE,QAAQ,EAAE;UAAEyQ,OAAO,EAAE;QAAK,CAAC,CAAC,EAAEjR,EAAE,CAAC,CAAC,EAAED,uBAAuB,CAAC,EAAE,IAAI,CAAC6Q,QAAQ,CAAC;QACzK,IAAI,CAACI,aAAa,CAACE,SAAS,CAAC,MAAM;UAC/B,IAAI,IAAI,CAACJ,UAAU,EAAE;YACjB;UACJ;UACA,IAAI,CAACf;UACD;UAAA,CACCzD,OAAO,CAAE6E,eAAe,IAAK;YAC9BpB,gBAAgB,CAACqB,eAAe,CAACD,eAAe,CAACxJ,MAAM,CAAC,EAAEyJ,eAAe,CAACD,eAAe,CAAC9Q,OAAO,CAAC,EAAE8Q,eAAe,CAACE,UAAU,EAAEF,eAAe,CAACnB,YAAY,EAAE,IAAI,CAAC3E,OAAO,EAAEqF,eAAe,CAACY,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;UAC3N,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC;IACN;EACJ;EACA5I,QAAQA,CAAC2C,OAAO,EAAE;IACd,IAAI,CAACkG,kBAAkB,CAAClG,OAAO,CAAC;EACpC;EACA,IAAImG,MAAMA,CAAA,EAAG;IACT,OAAO,IAAI,CAACR,aAAa;EAC7B;EACAS,OAAOA,CAAA,EAAG;IACN,IAAI,CAACX,UAAU,GAAG,IAAI;EAC1B;EACAY,MAAMA,CAAA,EAAG;IACL,IAAI,CAACZ,UAAU,GAAG,KAAK;EAC3B;EACAS,kBAAkBA,CAAClG,OAAO,EAAE;IACxB,IAAI,CAAC0E,gBAAgB,CAAC4B,GAAG,CAACP,eAAe,CAAC/F,OAAO,CAAChL,OAAO,CAAC,EAAEgL,OAAO,CAAC;EACxE;EACAuG,YAAYA,CAAA,EAAG;IACX,IAAI,CAAChB,QAAQ,CAACiB,IAAI,CAAC,IAAI,CAAC;EAC5B;EACAC,qBAAqBA,CAACC,KAAK,EAAE;IACzB,IAAI,CAAChC,gBAAgB,CAACiC,MAAM,CAACZ,eAAe,CAACW,KAAK,CAAC,CAAC;EACxD;EACAE,UAAUA,CAAC5G,OAAO,EAAE;IAChB,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAAC,QAAA6G,CAAA,GACQ,IAAI,CAACC,IAAI,YAAAC,2BAAAC,CAAA;IAAA,YAAAA,CAAA,IAAwF9B,kBAAkB,EAA5BhR,EAAE,CAAA+S,QAAA,CAA4C/S,EAAE,CAACgT,MAAM,GAAvDhT,EAAE,CAAA+S,QAAA,CAAkE/S,EAAE,CAACiT,gBAAgB,GAAvFjT,EAAE,CAAA+S,QAAA,CAAkG9S,WAAW;EAAA,CAA6C;EAAA,QAAAiT,EAAA,GACnP,IAAI,CAACC,KAAK,kBAD6EnT,EAAE,CAAAoT,kBAAA;IAAAC,KAAA,EACYrC,kBAAkB;IAAAsC,OAAA,EAAlBtC,kBAAkB,CAAA4B,IAAA;IAAAW,UAAA,EAAc;EAAM,EAAG;AAC3J;AACA;EAAA,QAAAC,SAAA,oBAAAA,SAAA,KAHoGxT,EAAE,CAAAyT,iBAAA,CAGXzC,kBAAkB,EAAc,CAAC;IAChH0C,IAAI,EAAExT,UAAU;IAChByT,IAAI,EAAE,CAAC;MAAEJ,UAAU,EAAE;IAAO,CAAC;EACjC,CAAC,CAAC,EAAkB,MAAM,CAAC;IAAEG,IAAI,EAAE1T,EAAE,CAACgT;EAAO,CAAC,EAAE;IAAEU,IAAI,EAAE1T,EAAE,CAACiT;EAAiB,CAAC,EAAE;IAAES,IAAI,EAAE7N,SAAS;IAAE+N,UAAU,EAAE,CAAC;MACnGF,IAAI,EAAEvT,MAAM;MACZwT,IAAI,EAAE,CAAC1T,WAAW;IACtB,CAAC;EAAE,CAAC,CAAC;AAAA;AACrB,SAAS4R,eAAeA,CAAC/Q,OAAO,EAAE;EAC9B;EACA,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC7B,OAAOS,QAAQ,CAAC+L,aAAa,CAACxM,OAAO,CAAC;EAC1C;EACA,IAAIA,OAAO,YAAYV,UAAU,EAAE;IAC/B,OAAOU,OAAO,CAAC+S,aAAa;EAChC;EACA,OAAO/S,OAAO,IAAI,IAAI;AAC1B;;AAEA;AACA;AACA;;AAEA,SAASF,eAAe,EAAE2P,WAAW,EAAES,kBAAkB,EAAE1E,YAAY,EAAEkE,gBAAgB","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}