{"version":3,"file":"voice-widget.umd.cjs","sources":["../../../node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/index.js","../../../node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/cjs/scheduler.production.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/index.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom.production.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom-client.production.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/client.js","../src/constants.ts","../src/components/ErrorBoundary.tsx","../src/i18n/index.ts","../src/i18n/I18nContext.tsx","../../../node_modules/.pnpm/livekit-client@2.20.0_@types+dom-mediacapture-record@1.0.22/node_modules/livekit-client/dist/livekit-client.esm.mjs","../../../node_modules/.pnpm/@livekit+components-react@2.9.17_livekit-client@2.20.0_@types+dom-mediacapture-record@1_cf96463f930f604bd9429216dc3181c3/node_modules/@livekit/components-react/dist/contexts-CsO1QZ3r.mjs","../../../node_modules/.pnpm/@livekit+components-react@2.9.17_livekit-client@2.20.0_@types+dom-mediacapture-record@1_cf96463f930f604bd9429216dc3181c3/node_modules/@livekit/components-react/dist/room-Bb6uLxS5.mjs","../../../node_modules/.pnpm/@livekit+components-react@2.9.17_livekit-client@2.20.0_@types+dom-mediacapture-record@1_cf96463f930f604bd9429216dc3181c3/node_modules/@livekit/components-react/dist/hooks-yU-srrIO.mjs","../../../node_modules/.pnpm/@livekit+components-react@2.9.17_livekit-client@2.20.0_@types+dom-mediacapture-record@1_cf96463f930f604bd9429216dc3181c3/node_modules/@livekit/components-react/dist/components-DuRBtGp8.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/use-constant.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/is-browser.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/array.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/clamp.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/format-error-message.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/errors.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/global-config.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/is-numerical-string.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/is-object.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/is-zero-value-string.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/memo.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/noop.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/pipe.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/progress.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/subscription-manager.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/time-conversion.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/velocity-per-second.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/modifiers/mirror.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/modifiers/reverse.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/back.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/anticipate.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/circ.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/ease.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/utils/map.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/frameloop/order.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/frameloop/batcher.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/frameloop/render-step.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/frameloop/frame.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/numbers/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/sanitize.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/float-regex.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/color/utils.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/color/hex.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/numbers/units.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/color/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/color-regex.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/complex/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/mix/immediate.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/mix/number.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/mix/color.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/mix/visibility.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/mix/complex.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/mix/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/spring.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/interpolate.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs","../../../node_modules/.pnpm/motion-utils@12.36.0/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/dom/style-set.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/dom/is-css-var.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/supports/flags.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/supports/memo.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/is-animatable.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/keys-position.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/setters.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/utils/is-motion-value.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/will-change/add-will-change.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/will-change/is.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/auto.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/test.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/dimensions.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/complex/filter.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/complex/mask.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/int.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/maps/number.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/maps/transform.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/maps/defaults.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/is-html-element.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/frameloop/microtask.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/hover.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/press/utils/state.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/press/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/is-svg-element.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/resize/handle-element.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/resize/handle-window.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/resize/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/types/utils/find.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/models.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/store.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/is-variant-label.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/variant-props.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/VisualElement.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/motion-values.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/Feature.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/conversion.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/utils/measure.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/html/utils/build-styles.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/html/utils/render.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/utils/path.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/svg/utils/render.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/get-variant-context.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/shallow-compare.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/copy.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/geometry/utils.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/utils/each-axis.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/events/add-dom-event.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/utils/flat-tree.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/shared/stack.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/node/state.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/delay.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/styles/transform.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/node/group.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/DeprecatedLayoutGroupContext.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/use-force-update.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/use-is-mounted.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/LayoutGroup/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/LazyContext.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/MotionConfig/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/html/use-props.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/animations.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/events/event-info.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/utils/distance.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../../../node_modules/.pnpm/motion-dom@12.38.0/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/drag.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/hover.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/press.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/gestures/focus.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs","../../../node_modules/.pnpm/framer-motion@12.38.0_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/motion/features/layout.mjs","../../../packages/widget-ui/src/chatbot-logo.ts","../../../packages/widget-ui/src/assets/chatbot/chatbot_logo_happy_black.svg","../../../packages/widget-ui/src/assets/chatbot/chatbot_logo_happy_white.svg","../../../packages/widget-ui/src/assets/chatbot/chatbot_logo_happy_color.svg","../../../packages/widget-ui/src/assets/chatbot/chatbot_logo_sleepy_black.svg","../../../packages/widget-ui/src/assets/chatbot/chatbot_logo_sleepy_white.svg","../../../packages/widget-ui/src/assets/chatbot/chatbot_logo_sleepy_color.svg","../../../packages/widget-ui/src/chat/ChatHeader.tsx","../../../packages/widget-ui/src/chat/markdown.ts","../../../packages/widget-ui/src/chat/MarkdownBody.tsx","../../../packages/widget-ui/src/chat/ChatSurface.tsx","../../../packages/widget-ui/src/chat/LiveKitChatBridge.tsx","../../../packages/widget-ui/src/chat/PreConnectChatPane.tsx","../../../packages/widget-ui/src/chat/FrozenChatPane.tsx","../src/components/ModalHeader.tsx","../../../packages/widget-ui/src/OverviewScreen.tsx","../src/components/VerbuMark.tsx","../src/components/PoweredByFooter.tsx","../src/components/StarRating.tsx","../src/components/RatingScreen.tsx","../../../node_modules/.pnpm/tabbable@6.4.0/node_modules/tabbable/dist/index.esm.js","../../../node_modules/.pnpm/focus-trap@8.1.0/node_modules/focus-trap/dist/focus-trap.esm.js","../../../node_modules/.pnpm/focus-trap-react@12.0.0_@types+react-dom@19.1.5_@types+react@19.1.5__@types+react@19.1._632583389eb3be3721d3b9a69bd39847/node_modules/focus-trap-react/dist/focus-trap-react.js","../src/components/Stage.tsx","../src/components/Trigger.tsx","../src/utils/color.ts","../src/components/visualizer/AgentGridVisualizer.tsx","../../../node_modules/.pnpm/react-shaders@0.0.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/react-shaders/dist/index.mjs","../src/components/VoicePane.tsx","../src/hooks/useIdleTimeout.ts","../src/utils/retry.ts","../src/Widget.tsx","../src/hooks/useViewport.ts","../src/hooks/useBodyScrollLock.ts","../src/main.tsx"],"sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop$1, noop$1)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction noop() {}\nexports.Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key,\n    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    ReactSharedInternals.T = prevTransition;\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, createDeps, update) {\n  var dispatcher = ReactSharedInternals.H;\n  if (\"function\" === typeof update)\n    throw Error(\n      \"useEffect CRUD overload is not enabled in this build of React.\"\n    );\n  return dispatcher.useEffect(create, createDeps);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.1.0\";\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionLane = 256,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 4194048;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$5 = 31 - clz32(remainingLanes),\n      lane = 1 << index$5;\n    entanglements[index$5] = 0;\n    expirationTimes[index$5] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$5];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$5] = null, index$5 = 0;\n        index$5 < hiddenUpdatesForLane.length;\n        index$5++\n      ) {\n        var update = hiddenUpdatesForLane[index$5];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 4194090);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$6 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$6;\n    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&\n      (root[index$6] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$8 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$8 && \"aria-\" !== prefix$8) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$9) {\n                control = x$9;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$10) {\n              control = x$10;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(workInProgress)),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    )\n      return;\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$282;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_417 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_417) {\n      var element$jscomp$inline_418 = document.createElement(\"div\");\n      element$jscomp$inline_418.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_417 =\n        \"function\" === typeof element$jscomp$inline_418.oninput;\n    }\n    JSCompiler_inline_result$jscomp$282 = isSupported$jscomp$inline_417;\n  } else JSCompiler_inline_result$jscomp$282 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$282 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(formatProdErrorMessage(418, \"\"));\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      track(instance);\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children),\n        track(instance);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (tag = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === tag) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            tag--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              tag++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter$1 = 0,\n  thenableState$1 = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter$1 = 0;\n  thenableState$1 = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n    thenableIndexCounter$1 = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter$1 = localIdCounter = 0;\n  thenableState$1 = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  thenable = trackUsedThenable(thenableState$1, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$32 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$32 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$32 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$32 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n  updateEffectImpl(2048, 8, create, [subscribe]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 124) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$38) {\n      onActionError(actionQueue, node, error$38);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, createDeps) {\n  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((createDeps = create.next),\n      (create.next = tag),\n      (tag.next = createDeps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction createEffectInstance() {\n  return { destroy: void 0, resource: void 0 };\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n  var hook = mountWorkInProgressHook();\n  createDeps = void 0 === createDeps ? null : createDeps;\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    createEffectInstance(),\n    create,\n    createDeps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, createDeps) {\n  mountEffectImpl(8390656, 8, create, createDeps);\n}\nfunction updateEffect(create, createDeps) {\n  updateEffectImpl(2048, 8, create, createDeps);\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop$2\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$41 = enqueueUpdate(provider, fiber, lane);\n        null !== root$41 &&\n          (scheduleUpdateOnFiber(root$41, provider, lane),\n          entangleTransitions(root$41, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n    readContext: readContext,\n    use: use,\n    useCallback: throwInvalidHookError,\n    useContext: throwInvalidHookError,\n    useEffect: throwInvalidHookError,\n    useImperativeHandle: throwInvalidHookError,\n    useLayoutEffect: throwInvalidHookError,\n    useInsertionEffect: throwInvalidHookError,\n    useMemo: throwInvalidHookError,\n    useReducer: throwInvalidHookError,\n    useRef: throwInvalidHookError,\n    useState: throwInvalidHookError,\n    useDebugValue: throwInvalidHookError,\n    useDeferredValue: throwInvalidHookError,\n    useTransition: throwInvalidHookError,\n    useSyncExternalStore: throwInvalidHookError,\n    useId: throwInvalidHookError,\n    useHostTransitionStatus: throwInvalidHookError,\n    useFormState: throwInvalidHookError,\n    useActionState: throwInvalidHookError,\n    useOptimistic: throwInvalidHookError,\n    useMemoCache: throwInvalidHookError,\n    useCacheRefresh: throwInvalidHookError\n  },\n  HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        createEffectInstance(),\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"\\u00ab\" + identifierPrefix + \"R\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"\\u00bb\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"\\u00ab\" +\n            identifierPrefix +\n            \"r\" +\n            JSCompiler_inline_result.toString(32) +\n            \"\\u00bb\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  HooksDispatcherOnRerender = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: rerenderReducer,\n    useRef: updateRef,\n    useState: function () {\n      return rerenderReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    },\n    useTransition: function () {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: rerenderActionState,\n    useActionState: rerenderActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  thenableState = null,\n  thenableIndexCounter = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  return trackUsedThenable(thenableState, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          \"$?\" === state.data ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (prevState = 0; null !== nextChildren; )\n          (prevState =\n            prevState | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = prevState & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912,\n                hydrationErrors: null\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          isSuspenseInstanceFallback(nextInstance)\n            ? (workInProgress.lanes = 32)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextInstance))\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = renderLanes & -renderLanes),\n        (nextProps =\n          0 !== (nextProps & 42)\n            ? 1\n            : getBumpedLaneForHydrationByLane(nextProps)),\n        (nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps),\n        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n      )\n        throw (\n          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      nextProps\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  offscreenProps.stateNode = {\n    _visibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null\n  };\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (null !== current && 0 !== (current.flags & 128))\n      a: for (current = workInProgress.child; null !== current; ) {\n        if (13 === current.tag)\n          null !== current.memoizedState &&\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (19 === current.tag)\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (null !== current.child) {\n          current.child.return = current;\n          current = current.child;\n          continue;\n        }\n        if (current === workInProgress) break a;\n        for (; null === current.sibling; ) {\n          if (null === current.return || current.return === workInProgress)\n            break a;\n          current = current.return;\n        }\n        current.sibling.return = current.return;\n        current = current.sibling;\n      }\n    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode\n      );\n      break;\n    case \"backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        lazyComponent = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        init = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        lazyComponent = nextState.cache;\n        pushProvider(workInProgress, CacheContext, lazyComponent);\n        lazyComponent !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        lazyComponent = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: lazyComponent,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else if (lazyComponent !== init) {\n            init = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(init);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (lazyComponent === init) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(\n            current,\n            workInProgress,\n            lazyComponent,\n            renderLanes\n          );\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (init = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = init),\n              (nextHydratableInstance = getNextHydratable(\n                lazyComponent.firstChild\n              )))\n            : (nextHydratableInstance = init)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = prevState.children;\n      shouldSetTextContent(init, prevState)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        (renderLanes = workInProgress.mode),\n        (lazyComponent = {\n          mode: lazyComponent.mode,\n          children: lazyComponent.children\n        }),\n        null === current\n          ? ((renderLanes = mountWorkInProgressOffscreenFiber(\n              lazyComponent,\n              renderLanes\n            )),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes))\n          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes)),\n        workInProgress\n      );\n    case 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (prevState = createCache()),\n              (init.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && (init.pooledCacheLanes |= renderLanes),\n              (init = prevState)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = prevState.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {\n    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194048) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\n  }\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$113 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$113 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$113\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$113.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags & 65011712),\n        (subtreeFlags |= child$114.flags & 65011712),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  else\n    for (child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags),\n        (subtreeFlags |= child$114.flags),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 31:\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      renderLanes = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      if (renderLanes) {\n        newProps = workInProgress.child;\n        type = null;\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool);\n        var cache$127 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$127 = newProps.memoizedState.cachePool.pool);\n        cache$127 !== type && (newProps.flags |= 2048);\n      }\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$127 = type.rendering;\n      if (null === cache$127)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$127 = findFirstSuspended(current);\n              if (null !== cache$127) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$127.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$127)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$127.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$127.sibling = workInProgress.child),\n            (workInProgress.child = cache$127))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$127)\n              : (workInProgress.child = cache$127),\n            (type.last = cache$127));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$143) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$143);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset,\n                  JSCompiler_temp.elementType === JSCompiler_temp.type\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$142) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$142\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearSuspenseBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13878)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$144 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$144, \"\"), (hostParentFiber.flags &= -33));\n          var before$145 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$145, parent$144);\n          break;\n        case 3:\n        case 4:\n          var parent$146 = hostParentFiber.stateNode.containerInfo,\n            before$147 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$147,\n            parent$146\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 124) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              2,\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  )\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (suspendedCommitReason = waitForCommitToBeReady()),\n      null !== suspendedCommitReason)\n    ) {\n      root.cancelPendingCommit = suspendedCommitReason(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$4 = 31 - clz32(lanes),\n      lane = 1 << index$4;\n    didAttemptEntireTree[index$4] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState = null),\n        (thenableIndexCounter = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$2 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$2;\n      lanes |= root[index$2];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (resource ? preloadResource(resource) : 1) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$169) {\n      handleThrow(root, thrownValue$169);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState = null;\n  thenableIndexCounter = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects(!0);\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects(wasDelayedCommit) {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects(wasDelayedCommit);\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$174 = firstScheduledRoot; null !== root$174; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$174.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$174.suspendedLanes,\n                pingedLanes = root$174.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$174,\n                root$174 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$174.cancelPendingCommit ||\n                  -1 !== root$174.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$174, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n        root$174 = root$174.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$3 = 31 - clz32(lanes),\n      lane = 1 << index$3,\n      expirationTime = expirationTimes[index$3];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1528 = 0;\n  i$jscomp$inline_1528 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1528++\n) {\n  var eventName$jscomp$inline_1529 =\n      simpleEventPluginEvents[i$jscomp$inline_1528],\n    domEventName$jscomp$inline_1530 =\n      eventName$jscomp$inline_1529.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1531 =\n      eventName$jscomp$inline_1529[0].toUpperCase() +\n      eventName$jscomp$inline_1529.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1530,\n    \"on\" + capitalizedEvent$jscomp$inline_1531\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction noop$1() {}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$188 = props[hasSrc];\n          if (null != propValue$188)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$188;\n                break;\n              case \"type\":\n                propValue = propValue$188;\n                break;\n              case \"checked\":\n                checked = propValue$188;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$188;\n                break;\n              case \"value\":\n                propKey = propValue$188;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$188;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$188)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$188, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      track(domElement);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$188 in props)\n          props.hasOwnProperty(propValue$188) &&\n            ((hasSrc = props[propValue$188]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$188,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$205 in nextProps) {\n        var propKey = nextProps[propKey$205];\n        lastProp = lastProps[propKey$205];\n        if (\n          nextProps.hasOwnProperty(propKey$205) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$205) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$205,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$205 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$205 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$205\n        ? updateOptions(domElement, !!lastProps, propKey$205, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$205 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$205 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$205, propKey);\n      return;\n    case \"option\":\n      for (var propKey$221 in lastProps)\n        if (\n          ((propKey$205 = lastProps[propKey$221]),\n          lastProps.hasOwnProperty(propKey$221) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$221))\n        )\n          switch (propKey$221) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$221,\n                null,\n                nextProps,\n                propKey$205\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$205 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$205 &&\n                \"function\" !== typeof propKey$205 &&\n                \"symbol\" !== typeof propKey$205;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$226 in lastProps)\n        (propKey$205 = lastProps[propKey$226]),\n          lastProps.hasOwnProperty(propKey$226) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$226) &&\n            setProp(domElement, tag, propKey$226, null, nextProps, propKey$205);\n      for (checked in nextProps)\n        if (\n          ((propKey$205 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$205)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$231 in lastProps)\n          (propKey$205 = lastProps[propKey$231]),\n            lastProps.hasOwnProperty(propKey$231) &&\n              void 0 !== propKey$205 &&\n              !nextProps.hasOwnProperty(propKey$231) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$231,\n                void 0,\n                nextProps,\n                propKey$205\n              );\n        for (defaultChecked in nextProps)\n          (propKey$205 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$205 === propKey ||\n              (void 0 === propKey$205 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$236 in lastProps)\n    (propKey$205 = lastProps[propKey$236]),\n      lastProps.hasOwnProperty(propKey$236) &&\n        null != propKey$205 &&\n        !nextProps.hasOwnProperty(propKey$236) &&\n        setProp(domElement, tag, propKey$236, null, nextProps, propKey$205);\n  for (lastProp in nextProps)\n    (propKey$205 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$205 === propKey ||\n        (null == propKey$205 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$205, nextProps, propKey);\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\n    possiblePreambleContribution = 0,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node)) {\n        if (\n          0 < possiblePreambleContribution &&\n          8 > possiblePreambleContribution\n        ) {\n          node = possiblePreambleContribution;\n          var ownerDocument = parentInstance.ownerDocument;\n          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);\n          node & 2 && releaseSingletonInstance(ownerDocument.body);\n          if (node & 4)\n            for (\n              node = ownerDocument.head,\n                releaseSingletonInstance(node),\n                ownerDocument = node.firstChild;\n              ownerDocument;\n\n            ) {\n              var nextNode$jscomp$0 = ownerDocument.nextSibling,\n                nodeName = ownerDocument.nodeName;\n              ownerDocument[internalHoistableMarker] ||\n                \"SCRIPT\" === nodeName ||\n                \"STYLE\" === nodeName ||\n                (\"LINK\" === nodeName &&\n                  \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n                node.removeChild(ownerDocument);\n              ownerDocument = nextNode$jscomp$0;\n            }\n        }\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else\n        \"$\" === node || \"$?\" === node || \"$!\" === node\n          ? depth++\n          : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n    else possiblePreambleContribution = 0;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"complete\" === instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$?\" !== instance.data || \"complete\" === ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === data && depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$244 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$245 = styles$244.get(type);\n        resource$245 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$245 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$244.set(type, resource$245),\n          (styles$244 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$244._p &&\n            ((resource$245.instance = styles$244),\n            (resource$245.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$244 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$245.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$245;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$250 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$250)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$250),\n            markNodeAsHoistable(instance$250),\n            instance$250\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$250 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$250);\n        var linkInstance = instance$250;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$250, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$250, props.precedence, hoistableRoot);\n        return (resource.instance = instance$250);\n      case \"script\":\n        instance$250 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$250)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$250)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane();\n              lane = getBumpedLaneForHydrationByLane(lane);\n              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1785 = React.version;\nif (\n  \"19.1.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1785\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1785,\n      \"19.1.0\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2256 = {\n  bundleType: 0,\n  version: \"19.1.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.1.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2257 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2257.isDisabled &&\n    hook$jscomp$inline_2257.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2257.inject(\n        internals$jscomp$inline_2256\n      )),\n        (injectedHook = hook$jscomp$inline_2257);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","/**\n * Widget constants\n * Centralized to avoid duplication and ease future extraction to shared package\n */\n\nimport type { UIConfig } from \"./types\";\n\n/** Default brand color (warm taupe) used when a widget has no primary_color set */\nexport const DEFAULT_PRIMARY_COLOR = \"#978A84\";\n\n/** Default z-index for widget overlay */\nexport const DEFAULT_Z_INDEX = 9999;\n\n/** Default widget position */\nexport const DEFAULT_POSITION = \"bottom-right\" as const;\n\n/** Default offset from corner in pixels */\nexport const DEFAULT_OFFSET = { x: 20, y: 20 };\n\n/** Mobile breakpoint in pixels (matches Tailwind md: breakpoint) */\nexport const MOBILE_BREAKPOINT = 768;\n\n/** Avatar sizes in pixels */\nexport const AVATAR_SIZES = {\n  small: 100,\n  medium: 140,\n  large: 180,\n} as const;\n\n/** Trigger variant — closed-state widget shape. Bar = pill. Badge = rounded except top-right. */\nexport type TriggerVariant = \"bar\" | \"badge\";\n\n/** Visualizer pixel sizes for the two contexts it appears in */\nexport const VISUALIZER_SIZE = {\n  header: 44,\n  voice: 200,\n} as const;\n\n/** Shared spring config for the trigger ↔ stage layout morph. Single source so\n *  framer-motion picks the same destination spring on enter and exit. */\nexport const STAGE_SPRING = { type: \"spring\" as const, stiffness: 360, damping: 30 };\n\n/** Default UI configuration */\nexport const DEFAULT_UI_CONFIG: UIConfig = {\n  collapsed: {\n    style: \"pill\",\n    showLogo: true,\n    showTitle: true,\n    title: undefined,\n    cta: undefined,\n  },\n  expanded: {\n    width: 380,\n    height: 520,\n    showHeader: true,\n    showAvatar: true,\n    showPoweredBy: true,\n  },\n  chat: {\n    welcomeMessage: undefined,\n    inputPlaceholder: undefined,\n    showTimestamps: false,\n  },\n  voice: {\n    showTranscript: false,\n    avatarSize: \"medium\",\n  },\n  feedback: {\n    enabled: true,\n    collectTextFeedback: true,\n  },\n};\n\n/** Merge partial UI config with defaults */\nexport function mergeUIConfig(partial?: Partial<UIConfig>): UIConfig {\n  if (!partial) return DEFAULT_UI_CONFIG;\n\n  return {\n    collapsed: { ...DEFAULT_UI_CONFIG.collapsed, ...partial.collapsed },\n    expanded: { ...DEFAULT_UI_CONFIG.expanded, ...partial.expanded },\n    chat: { ...DEFAULT_UI_CONFIG.chat, ...partial.chat },\n    voice: { ...DEFAULT_UI_CONFIG.voice, ...partial.voice },\n    feedback: { ...DEFAULT_UI_CONFIG.feedback, ...partial.feedback },\n  };\n}\n","import { Component, type ErrorInfo, type ReactNode } from \"react\";\nimport { DEFAULT_PRIMARY_COLOR } from \"../constants\";\n\ninterface ErrorBoundaryProps {\n  children: ReactNode;\n  onError?: (error: Error, errorInfo: ErrorInfo) => void;\n  fallback?: ReactNode;\n  primaryColor?: string;\n}\n\ninterface ErrorBoundaryState {\n  hasError: boolean;\n  error: Error | null;\n}\n\n/**\n * Error boundary that catches React errors and displays a fallback UI.\n * Prevents the entire widget from crashing silently.\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n  constructor(props: ErrorBoundaryProps) {\n    super(props);\n    this.state = { hasError: false, error: null };\n  }\n\n  static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n    return { hasError: true, error };\n  }\n\n  componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n    // Log to console for debugging\n    console.error(\"[VoiceWidget] Error caught by boundary:\", error);\n    console.error(\"[VoiceWidget] Component stack:\", errorInfo.componentStack);\n\n    // Call optional error handler\n    this.props.onError?.(error, errorInfo);\n  }\n\n  handleRetry = (): void => {\n    this.setState({ hasError: false, error: null });\n  };\n\n  render(): ReactNode {\n    if (this.state.hasError) {\n      // Custom fallback if provided\n      if (this.props.fallback) {\n        return this.props.fallback;\n      }\n\n      // Default fallback UI\n      const primaryColor = this.props.primaryColor || DEFAULT_PRIMARY_COLOR;\n\n      return (\n        <div className=\"voice-widget-error-boundary\">\n          <div className=\"voice-widget-error-icon\">\n            <svg aria-hidden=\"true\" fill=\"none\" height=\"32\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\" width=\"32\">\n              <title>Error</title>\n              <circle cx=\"12\" cy=\"12\" r=\"10\" />\n              <line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" />\n              <line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />\n            </svg>\n          </div>\n          <p className=\"voice-widget-error-title\">Something went wrong</p>\n          <p className=\"voice-widget-error-message\">The voice assistant encountered an error.</p>\n          <button className=\"voice-widget-error-retry\" onClick={this.handleRetry} style={{ backgroundColor: primaryColor }} type=\"button\">\n            Try again\n          </button>\n        </div>\n      );\n    }\n\n    return this.props.children;\n  }\n}\n","/**\n * Widget Internationalization\n *\n * Lightweight i18n for the standalone widget bundle.\n * Supports locale detection from:\n * 1. Widget config (locale parameter)\n * 2. Browser navigator.language\n * 3. Fallback to 'en'\n */\n\nimport da from \"./da.json\";\nimport de from \"./de.json\";\nimport en from \"./en.json\";\nimport es from \"./es.json\";\nimport fr from \"./fr.json\";\nimport it from \"./it.json\";\nimport nl from \"./nl.json\";\nimport pl from \"./pl.json\";\nimport pt from \"./pt.json\";\nimport sv from \"./sv.json\";\n\nexport type WidgetDictionary = typeof en;\nexport type SupportedLocale = \"en\" | \"da\" | \"de\" | \"es\" | \"fr\" | \"it\" | \"nl\" | \"pt\" | \"pl\" | \"sv\";\n\nconst dictionaries: Record<SupportedLocale, WidgetDictionary> = {\n  en,\n  da,\n  de,\n  es,\n  fr,\n  it,\n  nl,\n  pt,\n  pl,\n  sv,\n};\n\n/**\n * Detect the best locale from browser settings\n */\nexport function detectLocale(): SupportedLocale {\n  if (typeof navigator === \"undefined\") return \"en\";\n\n  const browserLang = navigator.language.split(\"-\")[0].toLowerCase();\n\n  if (browserLang in dictionaries) {\n    return browserLang as SupportedLocale;\n  }\n\n  return \"en\";\n}\n\n/**\n * Get dictionary for a specific locale\n */\nexport function getDictionary(locale: SupportedLocale): WidgetDictionary {\n  return dictionaries[locale] || dictionaries.en;\n}\n\n/**\n * Check if a locale is supported\n */\nexport function isValidLocale(locale: string): locale is SupportedLocale {\n  return locale in dictionaries;\n}\n","import { createContext, type ReactNode, useCallback, useContext, useMemo, useState } from \"react\";\nimport { detectLocale, getDictionary, isValidLocale, type SupportedLocale, type WidgetDictionary } from \"./index\";\n\nconst LOCALE_STORAGE_KEY = \"voice-widget-locale\";\n\ninterface I18nContextValue {\n  locale: SupportedLocale;\n  t: WidgetDictionary;\n  setLocale: (locale: SupportedLocale) => void;\n}\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\ninterface I18nProviderProps {\n  locale?: string;\n  children: ReactNode;\n}\n\nfunction getInitialLocale(localeProp?: string): SupportedLocale {\n  // 1. Use provided locale if valid\n  if (localeProp && isValidLocale(localeProp)) {\n    return localeProp;\n  }\n\n  // 2. Check localStorage for saved preference\n  if (typeof window !== \"undefined\") {\n    const saved = localStorage.getItem(LOCALE_STORAGE_KEY);\n    if (saved && isValidLocale(saved)) {\n      return saved;\n    }\n  }\n\n  // 3. Detect from browser\n  return detectLocale();\n}\n\nexport function I18nProvider({ locale: localeProp, children }: I18nProviderProps) {\n  const [locale, setLocaleState] = useState<SupportedLocale>(() => getInitialLocale(localeProp));\n\n  const setLocale = useCallback((newLocale: SupportedLocale) => {\n    setLocaleState(newLocale);\n    // Persist to localStorage\n    if (typeof window !== \"undefined\") {\n      localStorage.setItem(LOCALE_STORAGE_KEY, newLocale);\n    }\n  }, []);\n\n  const value = useMemo(\n    () => ({\n      locale,\n      t: getDictionary(locale),\n      setLocale,\n    }),\n    [locale, setLocale]\n  );\n\n  return <I18nContext value={value}>{children}</I18nContext>;\n}\n\nexport function useTranslations(): WidgetDictionary {\n  const context = useContext(I18nContext);\n  if (!context) {\n    throw new Error(\"useTranslations must be used within an I18nProvider\");\n  }\n  return context.t;\n}\n\nexport function useLocale(): SupportedLocale {\n  const context = useContext(I18nContext);\n  if (!context) {\n    throw new Error(\"useLocale must be used within an I18nProvider\");\n  }\n  return context.locale;\n}\n\nexport function useI18n(): I18nContextValue {\n  const context = useContext(I18nContext);\n  if (!context) {\n    throw new Error(\"useI18n must be used within an I18nProvider\");\n  }\n  return context;\n}\n","function _mergeNamespaces(n, m){m.forEach(function(e){e&&typeof e!=='string'&&!Array.isArray(e)&&Object.keys(e).forEach(function(k){if(k!=='default'&&!(k in n)){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})});return Object.freeze(n);}var e = Object.defineProperty;\nvar h = (i, s, t) => s in i ? e(i, s, {\n  enumerable: true,\n  configurable: true,\n  writable: true,\n  value: t\n}) : i[s] = t;\nvar o = (i, s, t) => h(i, typeof s != \"symbol\" ? s + \"\" : s, t);\nclass _ {\n  constructor() {\n    o(this, \"_locking\");\n    o(this, \"_locks\");\n    this._locking = Promise.resolve(), this._locks = 0;\n  }\n  isLocked() {\n    return this._locks > 0;\n  }\n  lock() {\n    this._locks += 1;\n    let s;\n    const t = new Promise(l => s = () => {\n        this._locks -= 1, l();\n      }),\n      c = this._locking.then(() => s);\n    return this._locking = this._locking.then(() => t), c;\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Assert that condition is truthy or throw error (with message)\n */\nfunction assert(condition, msg) {\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean\n  if (!condition) {\n    throw new Error(msg);\n  }\n}\nconst FLOAT32_MAX = 3.4028234663852886e38,\n  FLOAT32_MIN = -34028234663852886e22,\n  UINT32_MAX = 0xffffffff,\n  INT32_MAX = 0x7fffffff,\n  INT32_MIN = -2147483648;\n/**\n * Assert a valid signed protobuf 32-bit integer.\n */\nfunction assertInt32(arg) {\n  if (typeof arg !== \"number\") throw new Error(\"invalid int 32: \" + typeof arg);\n  if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN) throw new Error(\"invalid int 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer.\n */\nfunction assertUInt32(arg) {\n  if (typeof arg !== \"number\") throw new Error(\"invalid uint 32: \" + typeof arg);\n  if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0) throw new Error(\"invalid uint 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}\n/**\n * Assert a valid protobuf float value.\n */\nfunction assertFloat32(arg) {\n  if (typeof arg !== \"number\") throw new Error(\"invalid float 32: \" + typeof arg);\n  if (!Number.isFinite(arg)) return;\n  if (arg > FLOAT32_MAX || arg < FLOAT32_MIN) throw new Error(\"invalid float 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nconst enumTypeSymbol = Symbol(\"@bufbuild/protobuf/enum-type\");\n/**\n * Get reflection information from a generated enum.\n * If this function is called on something other than a generated\n * enum, it raises an error.\n */\nfunction getEnumType(enumObject) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-explicit-any\n  const t = enumObject[enumTypeSymbol];\n  assert(t, \"missing enum type on enum object\");\n  return t; // eslint-disable-line @typescript-eslint/no-unsafe-return\n}\n/**\n * Sets reflection information on a generated enum.\n */\nfunction setEnumType(enumObject, typeName, values, opt) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n  enumObject[enumTypeSymbol] = makeEnumType(typeName, values.map(v => ({\n    no: v.no,\n    name: v.name,\n    localName: enumObject[v.no]\n  })));\n}\n/**\n * Create a new EnumType with the given values.\n */\nfunction makeEnumType(typeName, values,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_opt) {\n  const names = Object.create(null);\n  const numbers = Object.create(null);\n  const normalValues = [];\n  for (const value of values) {\n    // We do not surface options at this time\n    // const value: EnumValueInfo = {...v, options: v.options ?? emptyReadonlyObject};\n    const n = normalizeEnumValue(value);\n    normalValues.push(n);\n    names[value.name] = n;\n    numbers[value.no] = n;\n  }\n  return {\n    typeName,\n    values: normalValues,\n    // We do not surface options at this time\n    // options: opt?.options ?? Object.create(null),\n    findName(name) {\n      return names[name];\n    },\n    findNumber(no) {\n      return numbers[no];\n    }\n  };\n}\n/**\n * Create a new enum object with the given values.\n * Sets reflection information.\n */\nfunction makeEnum(typeName, values, opt) {\n  const enumObject = {};\n  for (const value of values) {\n    const n = normalizeEnumValue(value);\n    enumObject[n.localName] = n.no;\n    enumObject[n.no] = n.localName;\n  }\n  setEnumType(enumObject, typeName, values);\n  return enumObject;\n}\nfunction normalizeEnumValue(value) {\n  if (\"localName\" in value) {\n    return value;\n  }\n  return Object.assign(Object.assign({}, value), {\n    localName: value.name\n  });\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Message is the base class of every message, generated, or created at\n * runtime.\n *\n * It is _not_ safe to extend this class. If you want to create a message at\n * run time, use proto3.makeMessageType().\n */\nclass Message {\n  /**\n   * Compare with a message of the same type.\n   * Note that this function disregards extensions and unknown fields.\n   */\n  equals(other) {\n    return this.getType().runtime.util.equals(this.getType(), this, other);\n  }\n  /**\n   * Create a deep copy.\n   */\n  clone() {\n    return this.getType().runtime.util.clone(this);\n  }\n  /**\n   * Parse from binary data, merging fields.\n   *\n   * Repeated fields are appended. Map entries are added, overwriting\n   * existing keys.\n   *\n   * If a message field is already present, it will be merged with the\n   * new data.\n   */\n  fromBinary(bytes, options) {\n    const type = this.getType(),\n      format = type.runtime.bin,\n      opt = format.makeReadOptions(options);\n    format.readMessage(this, opt.readerFactory(bytes), bytes.byteLength, opt);\n    return this;\n  }\n  /**\n   * Parse a message from a JSON value.\n   */\n  fromJson(jsonValue, options) {\n    const type = this.getType(),\n      format = type.runtime.json,\n      opt = format.makeReadOptions(options);\n    format.readMessage(type, jsonValue, opt, this);\n    return this;\n  }\n  /**\n   * Parse a message from a JSON string.\n   */\n  fromJsonString(jsonString, options) {\n    let json;\n    try {\n      json = JSON.parse(jsonString);\n    } catch (e) {\n      throw new Error(\"cannot decode \".concat(this.getType().typeName, \" from JSON: \").concat(e instanceof Error ? e.message : String(e)));\n    }\n    return this.fromJson(json, options);\n  }\n  /**\n   * Serialize the message to binary data.\n   */\n  toBinary(options) {\n    const type = this.getType(),\n      bin = type.runtime.bin,\n      opt = bin.makeWriteOptions(options),\n      writer = opt.writerFactory();\n    bin.writeMessage(this, writer, opt);\n    return writer.finish();\n  }\n  /**\n   * Serialize the message to a JSON value, a JavaScript value that can be\n   * passed to JSON.stringify().\n   */\n  toJson(options) {\n    const type = this.getType(),\n      json = type.runtime.json,\n      opt = json.makeWriteOptions(options);\n    return json.writeMessage(this, opt);\n  }\n  /**\n   * Serialize the message to a JSON string.\n   */\n  toJsonString(options) {\n    var _a;\n    const value = this.toJson(options);\n    return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);\n  }\n  /**\n   * Override for serialization behavior. This will be invoked when calling\n   * JSON.stringify on this message (i.e. JSON.stringify(msg)).\n   *\n   * Note that this will not serialize google.protobuf.Any with a packed\n   * message because the protobuf JSON format specifies that it needs to be\n   * unpacked, and this is only possible with a type registry to look up the\n   * message type.  As a result, attempting to serialize a message with this\n   * type will throw an Error.\n   *\n   * This method is protected because you should not need to invoke it\n   * directly -- instead use JSON.stringify or toJsonString for\n   * stringified JSON.  Alternatively, if actual JSON is desired, you should\n   * use toJson.\n   */\n  toJSON() {\n    return this.toJson({\n      emitDefaultValues: true\n    });\n  }\n  /**\n   * Retrieve the MessageType of this message - a singleton that represents\n   * the protobuf message declaration and provides metadata for reflection-\n   * based operations.\n   */\n  getType() {\n    // Any class that extends Message _must_ provide a complete static\n    // implementation of MessageType.\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return\n    return Object.getPrototypeOf(this).constructor;\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Create a new message type using the given runtime.\n */\nfunction makeMessageType(runtime, typeName, fields, opt) {\n  var _a;\n  const localName = (_a = opt === null || opt === void 0 ? void 0 : opt.localName) !== null && _a !== void 0 ? _a : typeName.substring(typeName.lastIndexOf(\".\") + 1);\n  const type = {\n    [localName]: function (data) {\n      runtime.util.initFields(this);\n      runtime.util.initPartial(data, this);\n    }\n  }[localName];\n  Object.setPrototypeOf(type.prototype, new Message());\n  Object.assign(type, {\n    runtime,\n    typeName,\n    fields: runtime.util.newFieldList(fields),\n    fromBinary(bytes, options) {\n      return new type().fromBinary(bytes, options);\n    },\n    fromJson(jsonValue, options) {\n      return new type().fromJson(jsonValue, options);\n    },\n    fromJsonString(jsonString, options) {\n      return new type().fromJsonString(jsonString, options);\n    },\n    equals(a, b) {\n      return runtime.util.equals(type, a, b);\n    }\n  });\n  return type;\n}// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it.  This code is not\n// standalone and requires a support library to be linked with it.  This\n// support library is itself covered by the above license.\n/* eslint-disable prefer-const,@typescript-eslint/restrict-plus-operands */\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nfunction varint64read() {\n  let lowBits = 0;\n  let highBits = 0;\n  for (let shift = 0; shift < 28; shift += 7) {\n    let b = this.buf[this.pos++];\n    lowBits |= (b & 0x7f) << shift;\n    if ((b & 0x80) == 0) {\n      this.assertBounds();\n      return [lowBits, highBits];\n    }\n  }\n  let middleByte = this.buf[this.pos++];\n  // last four bits of the first 32 bit number\n  lowBits |= (middleByte & 0x0f) << 28;\n  // 3 upper bits are part of the next 32 bit number\n  highBits = (middleByte & 0x70) >> 4;\n  if ((middleByte & 0x80) == 0) {\n    this.assertBounds();\n    return [lowBits, highBits];\n  }\n  for (let shift = 3; shift <= 31; shift += 7) {\n    let b = this.buf[this.pos++];\n    highBits |= (b & 0x7f) << shift;\n    if ((b & 0x80) == 0) {\n      this.assertBounds();\n      return [lowBits, highBits];\n    }\n  }\n  throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nfunction varint64write(lo, hi, bytes) {\n  for (let i = 0; i < 28; i = i + 7) {\n    const shift = lo >>> i;\n    const hasNext = !(shift >>> 7 == 0 && hi == 0);\n    const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n    bytes.push(byte);\n    if (!hasNext) {\n      return;\n    }\n  }\n  const splitBits = lo >>> 28 & 0x0f | (hi & 0x07) << 4;\n  const hasMoreBits = !(hi >> 3 == 0);\n  bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n  if (!hasMoreBits) {\n    return;\n  }\n  for (let i = 3; i < 31; i = i + 7) {\n    const shift = hi >>> i;\n    const hasNext = !(shift >>> 7 == 0);\n    const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n    bytes.push(byte);\n    if (!hasNext) {\n      return;\n    }\n  }\n  bytes.push(hi >>> 31 & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction int64FromString(dec) {\n  // Check for minus sign.\n  const minus = dec[0] === \"-\";\n  if (minus) {\n    dec = dec.slice(1);\n  }\n  // Work 6 decimal digits at a time, acting like we're converting base 1e6\n  // digits to binary. This is safe to do with floating point math because\n  // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n  const base = 1e6;\n  let lowBits = 0;\n  let highBits = 0;\n  function add1e6digit(begin, end) {\n    // Note: Number('') is 0.\n    const digit1e6 = Number(dec.slice(begin, end));\n    highBits *= base;\n    lowBits = lowBits * base + digit1e6;\n    // Carry bits from lowBits to\n    if (lowBits >= TWO_PWR_32_DBL) {\n      highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);\n      lowBits = lowBits % TWO_PWR_32_DBL;\n    }\n  }\n  add1e6digit(-24, -18);\n  add1e6digit(-18, -12);\n  add1e6digit(-12, -6);\n  add1e6digit(-6);\n  return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction int64ToString(lo, hi) {\n  let bits = newBits(lo, hi);\n  // If we're treating the input as a signed value and the high bit is set, do\n  // a manual two's complement conversion before the decimal conversion.\n  const negative = bits.hi & 0x80000000;\n  if (negative) {\n    bits = negate(bits.lo, bits.hi);\n  }\n  const result = uInt64ToString(bits.lo, bits.hi);\n  return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction uInt64ToString(lo, hi) {\n  // Skip the expensive conversion if the number is small enough to use the\n  // built-in conversions.\n  // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n  // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n  // integer precision.\n  // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n  var _toUnsigned = toUnsigned(lo, hi);\n  lo = _toUnsigned.lo;\n  hi = _toUnsigned.hi;\n  if (hi <= 0x1FFFFF) {\n    return String(TWO_PWR_32_DBL * hi + lo);\n  }\n  // What this code is doing is essentially converting the input number from\n  // base-2 to base-1e7, which allows us to represent the 64-bit range with\n  // only 3 (very large) digits. Those digits are then trivial to convert to\n  // a base-10 string.\n  // The magic numbers used here are -\n  // 2^24 = 16777216 = (1,6777216) in base-1e7.\n  // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n  // Split 32:32 representation into 16:24:24 representation so our\n  // intermediate digits don't overflow.\n  const low = lo & 0xFFFFFF;\n  const mid = (lo >>> 24 | hi << 8) & 0xFFFFFF;\n  const high = hi >> 16 & 0xFFFF;\n  // Assemble our three base-1e7 digits, ignoring carries. The maximum\n  // value in a digit at this step is representable as a 48-bit integer, which\n  // can be stored in a 64-bit floating point number.\n  let digitA = low + mid * 6777216 + high * 6710656;\n  let digitB = mid + high * 8147497;\n  let digitC = high * 2;\n  // Apply carries from A to B and from B to C.\n  const base = 10000000;\n  if (digitA >= base) {\n    digitB += Math.floor(digitA / base);\n    digitA %= base;\n  }\n  if (digitB >= base) {\n    digitC += Math.floor(digitB / base);\n    digitB %= base;\n  }\n  // If digitC is 0, then we should have returned in the trivial code path\n  // at the top for non-safe integers. Given this, we can assume both digitB\n  // and digitA need leading zeros.\n  return digitC.toString() + decimalFrom1e7WithLeadingZeros(digitB) + decimalFrom1e7WithLeadingZeros(digitA);\n}\nfunction toUnsigned(lo, hi) {\n  return {\n    lo: lo >>> 0,\n    hi: hi >>> 0\n  };\n}\nfunction newBits(lo, hi) {\n  return {\n    lo: lo | 0,\n    hi: hi | 0\n  };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n  highBits = ~highBits;\n  if (lowBits) {\n    lowBits = ~lowBits + 1;\n  } else {\n    // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n    // adding 1 to that, results in 0x100000000, which leaves\n    // the low bits 0x0 and simply adds one to the high bits.\n    highBits += 1;\n  }\n  return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = digit1e7 => {\n  const partial = String(digit1e7);\n  return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nfunction varint32write(value, bytes) {\n  if (value >= 0) {\n    // write value as varint 32\n    while (value > 0x7f) {\n      bytes.push(value & 0x7f | 0x80);\n      value = value >>> 7;\n    }\n    bytes.push(value);\n  } else {\n    for (let i = 0; i < 9; i++) {\n      bytes.push(value & 127 | 128);\n      value = value >> 7;\n    }\n    bytes.push(1);\n  }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nfunction varint32read() {\n  let b = this.buf[this.pos++];\n  let result = b & 0x7f;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  b = this.buf[this.pos++];\n  result |= (b & 0x7f) << 7;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  b = this.buf[this.pos++];\n  result |= (b & 0x7f) << 14;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  b = this.buf[this.pos++];\n  result |= (b & 0x7f) << 21;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  // Extract only last 4 bits\n  b = this.buf[this.pos++];\n  result |= (b & 0x0f) << 28;\n  for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++) b = this.buf[this.pos++];\n  if ((b & 0x80) != 0) throw new Error(\"invalid varint\");\n  this.assertBounds();\n  // Result can have 32 bits, convert it to unsigned\n  return result >>> 0;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nfunction makeInt64Support() {\n  const dv = new DataView(new ArrayBuffer(8));\n  // note that Safari 14 implements BigInt, but not the DataView methods\n  const ok = typeof BigInt === \"function\" && typeof dv.getBigInt64 === \"function\" && typeof dv.getBigUint64 === \"function\" && typeof dv.setBigInt64 === \"function\" && typeof dv.setBigUint64 === \"function\" && (typeof process != \"object\" || typeof process.env != \"object\" || process.env.BUF_BIGINT_DISABLE !== \"1\");\n  if (ok) {\n    const MIN = BigInt(\"-9223372036854775808\"),\n      MAX = BigInt(\"9223372036854775807\"),\n      UMIN = BigInt(\"0\"),\n      UMAX = BigInt(\"18446744073709551615\");\n    return {\n      zero: BigInt(0),\n      supported: true,\n      parse(value) {\n        const bi = typeof value == \"bigint\" ? value : BigInt(value);\n        if (bi > MAX || bi < MIN) {\n          throw new Error(\"int64 invalid: \".concat(value));\n        }\n        return bi;\n      },\n      uParse(value) {\n        const bi = typeof value == \"bigint\" ? value : BigInt(value);\n        if (bi > UMAX || bi < UMIN) {\n          throw new Error(\"uint64 invalid: \".concat(value));\n        }\n        return bi;\n      },\n      enc(value) {\n        dv.setBigInt64(0, this.parse(value), true);\n        return {\n          lo: dv.getInt32(0, true),\n          hi: dv.getInt32(4, true)\n        };\n      },\n      uEnc(value) {\n        dv.setBigInt64(0, this.uParse(value), true);\n        return {\n          lo: dv.getInt32(0, true),\n          hi: dv.getInt32(4, true)\n        };\n      },\n      dec(lo, hi) {\n        dv.setInt32(0, lo, true);\n        dv.setInt32(4, hi, true);\n        return dv.getBigInt64(0, true);\n      },\n      uDec(lo, hi) {\n        dv.setInt32(0, lo, true);\n        dv.setInt32(4, hi, true);\n        return dv.getBigUint64(0, true);\n      }\n    };\n  }\n  const assertInt64String = value => assert(/^-?[0-9]+$/.test(value), \"int64 invalid: \".concat(value));\n  const assertUInt64String = value => assert(/^[0-9]+$/.test(value), \"uint64 invalid: \".concat(value));\n  return {\n    zero: \"0\",\n    supported: false,\n    parse(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertInt64String(value);\n      return value;\n    },\n    uParse(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertUInt64String(value);\n      return value;\n    },\n    enc(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertInt64String(value);\n      return int64FromString(value);\n    },\n    uEnc(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertUInt64String(value);\n      return int64FromString(value);\n    },\n    dec(lo, hi) {\n      return int64ToString(lo, hi);\n    },\n    uDec(lo, hi) {\n      return uInt64ToString(lo, hi);\n    }\n  };\n}\nconst protoInt64 = makeInt64Support();// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Scalar value types. This is a subset of field types declared by protobuf\n * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE\n * are omitted, but the numerical values are identical.\n */\nvar ScalarType;\n(function (ScalarType) {\n  // 0 is reserved for errors.\n  // Order is weird for historical reasons.\n  ScalarType[ScalarType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n  ScalarType[ScalarType[\"FLOAT\"] = 2] = \"FLOAT\";\n  // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if\n  // negative values are likely.\n  ScalarType[ScalarType[\"INT64\"] = 3] = \"INT64\";\n  ScalarType[ScalarType[\"UINT64\"] = 4] = \"UINT64\";\n  // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if\n  // negative values are likely.\n  ScalarType[ScalarType[\"INT32\"] = 5] = \"INT32\";\n  ScalarType[ScalarType[\"FIXED64\"] = 6] = \"FIXED64\";\n  ScalarType[ScalarType[\"FIXED32\"] = 7] = \"FIXED32\";\n  ScalarType[ScalarType[\"BOOL\"] = 8] = \"BOOL\";\n  ScalarType[ScalarType[\"STRING\"] = 9] = \"STRING\";\n  // Tag-delimited aggregate.\n  // Group type is deprecated and not supported in proto3. However, Proto3\n  // implementations should still be able to parse the group wire format and\n  // treat group fields as unknown fields.\n  // TYPE_GROUP = 10,\n  // TYPE_MESSAGE = 11,  // Length-delimited aggregate.\n  // New in version 2.\n  ScalarType[ScalarType[\"BYTES\"] = 12] = \"BYTES\";\n  ScalarType[ScalarType[\"UINT32\"] = 13] = \"UINT32\";\n  // TYPE_ENUM = 14,\n  ScalarType[ScalarType[\"SFIXED32\"] = 15] = \"SFIXED32\";\n  ScalarType[ScalarType[\"SFIXED64\"] = 16] = \"SFIXED64\";\n  ScalarType[ScalarType[\"SINT32\"] = 17] = \"SINT32\";\n  ScalarType[ScalarType[\"SINT64\"] = 18] = \"SINT64\";\n})(ScalarType || (ScalarType = {}));\n/**\n * JavaScript representation of fields with 64 bit integral types (int64, uint64,\n * sint64, fixed64, sfixed64).\n *\n * This is a subset of google.protobuf.FieldOptions.JSType, which defines JS_NORMAL,\n * JS_STRING, and JS_NUMBER. Protobuf-ES uses BigInt by default, but will use\n * String if `[jstype = JS_STRING]` is specified.\n *\n * ```protobuf\n * uint64 field_a = 1; // BigInt\n * uint64 field_b = 2 [jstype = JS_NORMAL]; // BigInt\n * uint64 field_b = 2 [jstype = JS_NUMBER]; // BigInt\n * uint64 field_b = 2 [jstype = JS_STRING]; // String\n * ```\n */\nvar LongType;\n(function (LongType) {\n  /**\n   * Use JavaScript BigInt.\n   */\n  LongType[LongType[\"BIGINT\"] = 0] = \"BIGINT\";\n  /**\n   * Use JavaScript String.\n   *\n   * Field option `[jstype = JS_STRING]`.\n   */\n  LongType[LongType[\"STRING\"] = 1] = \"STRING\";\n})(LongType || (LongType = {}));// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns true if both scalar values are equal.\n */\nfunction scalarEquals(type, a, b) {\n  if (a === b) {\n    // This correctly matches equal values except BYTES and (possibly) 64-bit integers.\n    return true;\n  }\n  // Special case BYTES - we need to compare each byte individually\n  if (type == ScalarType.BYTES) {\n    if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) {\n      return false;\n    }\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  // Special case 64-bit integers - we support number, string and bigint representation.\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n  switch (type) {\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      // Loose comparison will match between 0n, 0 and \"0\".\n      return a == b;\n  }\n  // Anything that hasn't been caught by strict comparison or special cased\n  // BYTES and 64-bit integers is not equal.\n  return false;\n}\n/**\n * Returns the zero value for the given scalar type.\n */\nfunction scalarZeroValue(type, longType) {\n  switch (type) {\n    case ScalarType.BOOL:\n      return false;\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- acceptable since it's covered by tests\n      return longType == 0 ? protoInt64.zero : \"0\";\n    case ScalarType.DOUBLE:\n    case ScalarType.FLOAT:\n      return 0.0;\n    case ScalarType.BYTES:\n      return new Uint8Array(0);\n    case ScalarType.STRING:\n      return \"\";\n    default:\n      // Handles INT32, UINT32, SINT32, FIXED32, SFIXED32.\n      // We do not use individual cases to save a few bytes code size.\n      return 0;\n  }\n}\n/**\n * Returns true for a zero-value. For example, an integer has the zero-value `0`,\n * a boolean is `false`, a string is `\"\"`, and bytes is an empty Uint8Array.\n *\n * In proto3, zero-values are not written to the wire, unless the field is\n * optional or repeated.\n */\nfunction isScalarZeroValue(type, value) {\n  switch (type) {\n    case ScalarType.BOOL:\n      return value === false;\n    case ScalarType.STRING:\n      return value === \"\";\n    case ScalarType.BYTES:\n      return value instanceof Uint8Array && !value.byteLength;\n    default:\n      return value == 0;\n    // Loose comparison matches 0n, 0 and \"0\"\n  }\n}function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/restrict-plus-operands */\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nvar WireType;\n(function (WireType) {\n  /**\n   * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n   */\n  WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n  /**\n   * Used for fixed64, sfixed64, double.\n   * Always 8 bytes with little-endian byte order.\n   */\n  WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n  /**\n   * Used for string, bytes, embedded messages, packed repeated fields\n   *\n   * Only repeated numeric types (types which use the varint, 32-bit,\n   * or 64-bit wire types) can be packed. In proto3, such fields are\n   * packed by default.\n   */\n  WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n  /**\n   * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n   * in editions with message_encoding = DELIMITED.\n   */\n  WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n  /**\n   * End of a tag-delimited aggregate.\n   */\n  WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n  /**\n   * Used for fixed32, sfixed32, float.\n   * Always 4 bytes with little-endian byte order.\n   */\n  WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\nclass BinaryWriter {\n  constructor(textEncoder) {\n    /**\n     * Previous fork states.\n     */\n    this.stack = [];\n    this.textEncoder = textEncoder !== null && textEncoder !== void 0 ? textEncoder : new TextEncoder();\n    this.chunks = [];\n    this.buf = [];\n  }\n  /**\n   * Return all bytes written and reset this writer.\n   */\n  finish() {\n    this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n    let len = 0;\n    for (let i = 0; i < this.chunks.length; i++) len += this.chunks[i].length;\n    let bytes = new Uint8Array(len);\n    let offset = 0;\n    for (let i = 0; i < this.chunks.length; i++) {\n      bytes.set(this.chunks[i], offset);\n      offset += this.chunks[i].length;\n    }\n    this.chunks = [];\n    return bytes;\n  }\n  /**\n   * Start a new fork for length-delimited data like a message\n   * or a packed repeated field.\n   *\n   * Must be joined later with `join()`.\n   */\n  fork() {\n    this.stack.push({\n      chunks: this.chunks,\n      buf: this.buf\n    });\n    this.chunks = [];\n    this.buf = [];\n    return this;\n  }\n  /**\n   * Join the last fork. Write its length and bytes, then\n   * return to the previous state.\n   */\n  join() {\n    // get chunk of fork\n    let chunk = this.finish();\n    // restore previous state\n    let prev = this.stack.pop();\n    if (!prev) throw new Error(\"invalid state, fork stack empty\");\n    this.chunks = prev.chunks;\n    this.buf = prev.buf;\n    // write length of chunk as varint\n    this.uint32(chunk.byteLength);\n    return this.raw(chunk);\n  }\n  /**\n   * Writes a tag (field number and wire type).\n   *\n   * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n   *\n   * Generated code should compute the tag ahead of time and call `uint32()`.\n   */\n  tag(fieldNo, type) {\n    return this.uint32((fieldNo << 3 | type) >>> 0);\n  }\n  /**\n   * Write a chunk of raw bytes.\n   */\n  raw(chunk) {\n    if (this.buf.length) {\n      this.chunks.push(new Uint8Array(this.buf));\n      this.buf = [];\n    }\n    this.chunks.push(chunk);\n    return this;\n  }\n  /**\n   * Write a `uint32` value, an unsigned 32 bit varint.\n   */\n  uint32(value) {\n    assertUInt32(value);\n    // write value as varint 32, inlined for speed\n    while (value > 0x7f) {\n      this.buf.push(value & 0x7f | 0x80);\n      value = value >>> 7;\n    }\n    this.buf.push(value);\n    return this;\n  }\n  /**\n   * Write a `int32` value, a signed 32 bit varint.\n   */\n  int32(value) {\n    assertInt32(value);\n    varint32write(value, this.buf);\n    return this;\n  }\n  /**\n   * Write a `bool` value, a variant.\n   */\n  bool(value) {\n    this.buf.push(value ? 1 : 0);\n    return this;\n  }\n  /**\n   * Write a `bytes` value, length-delimited arbitrary data.\n   */\n  bytes(value) {\n    this.uint32(value.byteLength); // write length of chunk as varint\n    return this.raw(value);\n  }\n  /**\n   * Write a `string` value, length-delimited data converted to UTF-8 text.\n   */\n  string(value) {\n    let chunk = this.textEncoder.encode(value);\n    this.uint32(chunk.byteLength); // write length of chunk as varint\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `float` value, 32-bit floating point number.\n   */\n  float(value) {\n    assertFloat32(value);\n    let chunk = new Uint8Array(4);\n    new DataView(chunk.buffer).setFloat32(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `double` value, a 64-bit floating point number.\n   */\n  double(value) {\n    let chunk = new Uint8Array(8);\n    new DataView(chunk.buffer).setFloat64(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n   */\n  fixed32(value) {\n    assertUInt32(value);\n    let chunk = new Uint8Array(4);\n    new DataView(chunk.buffer).setUint32(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n   */\n  sfixed32(value) {\n    assertInt32(value);\n    let chunk = new Uint8Array(4);\n    new DataView(chunk.buffer).setInt32(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n   */\n  sint32(value) {\n    assertInt32(value);\n    // zigzag encode\n    value = (value << 1 ^ value >> 31) >>> 0;\n    varint32write(value, this.buf);\n    return this;\n  }\n  /**\n   * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n   */\n  sfixed64(value) {\n    let chunk = new Uint8Array(8),\n      view = new DataView(chunk.buffer),\n      tc = protoInt64.enc(value);\n    view.setInt32(0, tc.lo, true);\n    view.setInt32(4, tc.hi, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n   */\n  fixed64(value) {\n    let chunk = new Uint8Array(8),\n      view = new DataView(chunk.buffer),\n      tc = protoInt64.uEnc(value);\n    view.setInt32(0, tc.lo, true);\n    view.setInt32(4, tc.hi, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `int64` value, a signed 64-bit varint.\n   */\n  int64(value) {\n    let tc = protoInt64.enc(value);\n    varint64write(tc.lo, tc.hi, this.buf);\n    return this;\n  }\n  /**\n   * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n   */\n  sint64(value) {\n    let tc = protoInt64.enc(value),\n      // zigzag encode\n      sign = tc.hi >> 31,\n      lo = tc.lo << 1 ^ sign,\n      hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;\n    varint64write(lo, hi, this.buf);\n    return this;\n  }\n  /**\n   * Write a `uint64` value, an unsigned 64-bit varint.\n   */\n  uint64(value) {\n    let tc = protoInt64.uEnc(value);\n    varint64write(tc.lo, tc.hi, this.buf);\n    return this;\n  }\n}\nclass BinaryReader {\n  constructor(buf, textDecoder) {\n    this.varint64 = varint64read; // dirty cast for `this`\n    /**\n     * Read a `uint32` field, an unsigned 32 bit varint.\n     */\n    this.uint32 = varint32read; // dirty cast for `this` and access to protected `buf`\n    this.buf = buf;\n    this.len = buf.length;\n    this.pos = 0;\n    this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n    this.textDecoder = textDecoder !== null && textDecoder !== void 0 ? textDecoder : new TextDecoder();\n  }\n  /**\n   * Reads a tag - field number and wire type.\n   */\n  tag() {\n    let tag = this.uint32(),\n      fieldNo = tag >>> 3,\n      wireType = tag & 7;\n    if (fieldNo <= 0 || wireType < 0 || wireType > 5) throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n    return [fieldNo, wireType];\n  }\n  /**\n   * Skip one element and return the skipped data.\n   *\n   * When skipping StartGroup, provide the tags field number to check for\n   * matching field number in the EndGroup tag.\n   */\n  skip(wireType, fieldNo) {\n    let start = this.pos;\n    switch (wireType) {\n      case WireType.Varint:\n        while (this.buf[this.pos++] & 0x80) {\n          // ignore\n        }\n        break;\n      // eslint-disable-next-line\n      // @ts-ignore TS7029: Fallthrough case in switch\n      case WireType.Bit64:\n        this.pos += 4;\n      // eslint-disable-next-line\n      // @ts-ignore TS7029: Fallthrough case in switch\n      case WireType.Bit32:\n        this.pos += 4;\n        break;\n      case WireType.LengthDelimited:\n        let len = this.uint32();\n        this.pos += len;\n        break;\n      case WireType.StartGroup:\n        for (;;) {\n          const _this$tag = this.tag(),\n            _this$tag2 = _slicedToArray(_this$tag, 2),\n            fn = _this$tag2[0],\n            wt = _this$tag2[1];\n          if (wt === WireType.EndGroup) {\n            if (fieldNo !== undefined && fn !== fieldNo) {\n              throw new Error(\"invalid end group tag\");\n            }\n            break;\n          }\n          this.skip(wt, fn);\n        }\n        break;\n      default:\n        throw new Error(\"cant skip wire type \" + wireType);\n    }\n    this.assertBounds();\n    return this.buf.subarray(start, this.pos);\n  }\n  /**\n   * Throws error if position in byte array is out of range.\n   */\n  assertBounds() {\n    if (this.pos > this.len) throw new RangeError(\"premature EOF\");\n  }\n  /**\n   * Read a `int32` field, a signed 32 bit varint.\n   */\n  int32() {\n    return this.uint32() | 0;\n  }\n  /**\n   * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n   */\n  sint32() {\n    let zze = this.uint32();\n    // decode zigzag\n    return zze >>> 1 ^ -(zze & 1);\n  }\n  /**\n   * Read a `int64` field, a signed 64-bit varint.\n   */\n  int64() {\n    return protoInt64.dec(...this.varint64());\n  }\n  /**\n   * Read a `uint64` field, an unsigned 64-bit varint.\n   */\n  uint64() {\n    return protoInt64.uDec(...this.varint64());\n  }\n  /**\n   * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n   */\n  sint64() {\n    let _this$varint = this.varint64(),\n      _this$varint2 = _slicedToArray(_this$varint, 2),\n      lo = _this$varint2[0],\n      hi = _this$varint2[1];\n    // decode zig zag\n    let s = -(lo & 1);\n    lo = (lo >>> 1 | (hi & 1) << 31) ^ s;\n    hi = hi >>> 1 ^ s;\n    return protoInt64.dec(lo, hi);\n  }\n  /**\n   * Read a `bool` field, a variant.\n   */\n  bool() {\n    let _this$varint3 = this.varint64(),\n      _this$varint4 = _slicedToArray(_this$varint3, 2),\n      lo = _this$varint4[0],\n      hi = _this$varint4[1];\n    return lo !== 0 || hi !== 0;\n  }\n  /**\n   * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n   */\n  fixed32() {\n    return this.view.getUint32((this.pos += 4) - 4, true);\n  }\n  /**\n   * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n   */\n  sfixed32() {\n    return this.view.getInt32((this.pos += 4) - 4, true);\n  }\n  /**\n   * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n   */\n  fixed64() {\n    return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n  }\n  /**\n   * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n   */\n  sfixed64() {\n    return protoInt64.dec(this.sfixed32(), this.sfixed32());\n  }\n  /**\n   * Read a `float` field, 32-bit floating point number.\n   */\n  float() {\n    return this.view.getFloat32((this.pos += 4) - 4, true);\n  }\n  /**\n   * Read a `double` field, a 64-bit floating point number.\n   */\n  double() {\n    return this.view.getFloat64((this.pos += 8) - 8, true);\n  }\n  /**\n   * Read a `bytes` field, length-delimited arbitrary data.\n   */\n  bytes() {\n    let len = this.uint32(),\n      start = this.pos;\n    this.pos += len;\n    this.assertBounds();\n    return this.buf.subarray(start, start + len);\n  }\n  /**\n   * Read a `string` field, length-delimited data converted to UTF-8 text.\n   */\n  string() {\n    return this.textDecoder.decode(this.bytes());\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Create a new extension using the given runtime.\n */\nfunction makeExtension(runtime, typeName, extendee, field) {\n  let fi;\n  return {\n    typeName,\n    extendee,\n    get field() {\n      if (!fi) {\n        const i = typeof field == \"function\" ? field() : field;\n        i.name = typeName.split(\".\").pop();\n        i.jsonName = \"[\".concat(typeName, \"]\");\n        fi = runtime.util.newFieldList([i]).list()[0];\n      }\n      return fi;\n    },\n    runtime\n  };\n}\n/**\n * Create a container that allows us to read extension fields into it with the\n * same logic as regular fields.\n */\nfunction createExtensionContainer(extension) {\n  const localName = extension.field.localName;\n  const container = Object.create(null);\n  container[localName] = initExtensionField(extension);\n  return [container, () => container[localName]];\n}\nfunction initExtensionField(ext) {\n  const field = ext.field;\n  if (field.repeated) {\n    return [];\n  }\n  if (field.default !== undefined) {\n    return field.default;\n  }\n  switch (field.kind) {\n    case \"enum\":\n      return field.T.values[0].no;\n    case \"scalar\":\n      return scalarZeroValue(field.T, field.L);\n    case \"message\":\n      // eslint-disable-next-line no-case-declarations\n      const T = field.T,\n        value = new T();\n      return T.fieldWrapper ? T.fieldWrapper.unwrapField(value) : value;\n    case \"map\":\n      throw \"map fields are not allowed to be extensions\";\n  }\n}\n/**\n * Helper to filter unknown fields, optimized based on field type.\n */\nfunction filterUnknownFields(unknownFields, field) {\n  if (!field.repeated && (field.kind == \"enum\" || field.kind == \"scalar\")) {\n    // singular scalar fields do not merge, we pick the last\n    for (let i = unknownFields.length - 1; i >= 0; --i) {\n      if (unknownFields[i].no == field.no) {\n        return [unknownFields[i]];\n      }\n    }\n    return [];\n  }\n  return unknownFields.filter(uf => uf.no === field.no);\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unnecessary-condition, prefer-const */\n// lookup table from base64 character to byte\nlet encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\n// lookup table from base64 character *code* to byte because lookup by number is fast\nlet decTable = [];\nfor (let i = 0; i < encTable.length; i++) decTable[encTable[i].charCodeAt(0)] = i;\n// support base64url variants\ndecTable[\"-\".charCodeAt(0)] = encTable.indexOf(\"+\");\ndecTable[\"_\".charCodeAt(0)] = encTable.indexOf(\"/\");\nconst protoBase64 = {\n  /**\n   * Decodes a base64 string to a byte array.\n   *\n   * - ignores white-space, including line breaks and tabs\n   * - allows inner padding (can decode concatenated base64 strings)\n   * - does not require padding\n   * - understands base64url encoding:\n   *   \"-\" instead of \"+\",\n   *   \"_\" instead of \"/\",\n   *   no padding\n   */\n  dec(base64Str) {\n    // estimate byte size, not accounting for inner padding and whitespace\n    let es = base64Str.length * 3 / 4;\n    if (base64Str[base64Str.length - 2] == \"=\") es -= 2;else if (base64Str[base64Str.length - 1] == \"=\") es -= 1;\n    let bytes = new Uint8Array(es),\n      bytePos = 0,\n      // position in byte array\n      groupPos = 0,\n      // position in base64 group\n      b,\n      // current byte\n      p = 0; // previous byte\n    for (let i = 0; i < base64Str.length; i++) {\n      b = decTable[base64Str.charCodeAt(i)];\n      if (b === undefined) {\n        switch (base64Str[i]) {\n          // @ts-ignore TS7029: Fallthrough case in switch\n          case \"=\":\n            groupPos = 0;\n          // reset state when padding found\n          // @ts-ignore TS7029: Fallthrough case in switch\n          case \"\\n\":\n          case \"\\r\":\n          case \"\\t\":\n          case \" \":\n            continue;\n          // skip white-space, and padding\n          default:\n            throw Error(\"invalid base64 string.\");\n        }\n      }\n      switch (groupPos) {\n        case 0:\n          p = b;\n          groupPos = 1;\n          break;\n        case 1:\n          bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n          p = b;\n          groupPos = 2;\n          break;\n        case 2:\n          bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n          p = b;\n          groupPos = 3;\n          break;\n        case 3:\n          bytes[bytePos++] = (p & 3) << 6 | b;\n          groupPos = 0;\n          break;\n      }\n    }\n    if (groupPos == 1) throw Error(\"invalid base64 string.\");\n    return bytes.subarray(0, bytePos);\n  },\n  /**\n   * Encode a byte array to a base64 string.\n   */\n  enc(bytes) {\n    let base64 = \"\",\n      groupPos = 0,\n      // position in base64 group\n      b,\n      // current byte\n      p = 0; // carry over from previous byte\n    for (let i = 0; i < bytes.length; i++) {\n      b = bytes[i];\n      switch (groupPos) {\n        case 0:\n          base64 += encTable[b >> 2];\n          p = (b & 3) << 4;\n          groupPos = 1;\n          break;\n        case 1:\n          base64 += encTable[p | b >> 4];\n          p = (b & 15) << 2;\n          groupPos = 2;\n          break;\n        case 2:\n          base64 += encTable[p | b >> 6];\n          base64 += encTable[b & 63];\n          groupPos = 0;\n          break;\n      }\n    }\n    // add output padding\n    if (groupPos) {\n      base64 += encTable[p];\n      base64 += \"=\";\n      if (groupPos == 1) base64 += \"=\";\n    }\n    return base64;\n  }\n};/**\n * Retrieve an extension value from a message.\n *\n * The function never returns undefined. Use hasExtension() to check whether an\n * extension is set. If the extension is not set, this function returns the\n * default value (if one was specified in the protobuf source), or the zero value\n * (for example `0` for numeric types, `[]` for repeated extension fields, and\n * an empty message instance for message fields).\n *\n * Extensions are stored as unknown fields on a message. To mutate an extension\n * value, make sure to store the new value with setExtension() after mutating.\n *\n * If the extension does not extend the given message, an error is raised.\n */\nfunction getExtension(message, extension, options) {\n  assertExtendee(extension, message);\n  const opt = extension.runtime.bin.makeReadOptions(options);\n  const ufs = filterUnknownFields(message.getType().runtime.bin.listUnknownFields(message), extension.field);\n  const _createExtensionConta = createExtensionContainer(extension),\n    _createExtensionConta2 = _slicedToArray(_createExtensionConta, 2),\n    container = _createExtensionConta2[0],\n    get = _createExtensionConta2[1];\n  for (const uf of ufs) {\n    extension.runtime.bin.readField(container, opt.readerFactory(uf.data), extension.field, uf.wireType, opt);\n  }\n  return get();\n}\n/**\n * Set an extension value on a message. If the message already has a value for\n * this extension, the value is replaced.\n *\n * If the extension does not extend the given message, an error is raised.\n */\nfunction setExtension(message, extension, value, options) {\n  assertExtendee(extension, message);\n  const readOpt = extension.runtime.bin.makeReadOptions(options);\n  const writeOpt = extension.runtime.bin.makeWriteOptions(options);\n  if (hasExtension(message, extension)) {\n    const ufs = message.getType().runtime.bin.listUnknownFields(message).filter(uf => uf.no != extension.field.no);\n    message.getType().runtime.bin.discardUnknownFields(message);\n    for (const uf of ufs) {\n      message.getType().runtime.bin.onUnknownField(message, uf.no, uf.wireType, uf.data);\n    }\n  }\n  const writer = writeOpt.writerFactory();\n  let f = extension.field;\n  // Implicit presence does not apply to extensions, see https://github.com/protocolbuffers/protobuf/issues/8234\n  // We patch the field info to use explicit presence:\n  if (!f.opt && !f.repeated && (f.kind == \"enum\" || f.kind == \"scalar\")) {\n    f = Object.assign(Object.assign({}, extension.field), {\n      opt: true\n    });\n  }\n  extension.runtime.bin.writeField(f, value, writer, writeOpt);\n  const reader = readOpt.readerFactory(writer.finish());\n  while (reader.pos < reader.len) {\n    const _reader$tag = reader.tag(),\n      _reader$tag2 = _slicedToArray(_reader$tag, 2),\n      no = _reader$tag2[0],\n      wireType = _reader$tag2[1];\n    const data = reader.skip(wireType, no);\n    message.getType().runtime.bin.onUnknownField(message, no, wireType, data);\n  }\n}\n/**\n * Check whether an extension is set on a message.\n */\nfunction hasExtension(message, extension) {\n  const messageType = message.getType();\n  return extension.extendee.typeName === messageType.typeName && !!messageType.runtime.bin.listUnknownFields(message).find(uf => uf.no == extension.field.no);\n}\nfunction assertExtendee(extension, message) {\n  assert(extension.extendee.typeName == message.getType().typeName, \"extension \".concat(extension.typeName, \" can only be applied to message \").concat(extension.extendee.typeName));\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns true if the field is set.\n */\nfunction isFieldSet(field, target) {\n  const localName = field.localName;\n  if (field.repeated) {\n    return target[localName].length > 0;\n  }\n  if (field.oneof) {\n    return target[field.oneof.localName].case === localName; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n  }\n  switch (field.kind) {\n    case \"enum\":\n    case \"scalar\":\n      if (field.opt || field.req) {\n        // explicit presence\n        return target[localName] !== undefined;\n      }\n      // implicit presence\n      if (field.kind == \"enum\") {\n        return target[localName] !== field.T.values[0].no;\n      }\n      return !isScalarZeroValue(field.T, target[localName]);\n    case \"message\":\n      return target[localName] !== undefined;\n    case \"map\":\n      return Object.keys(target[localName]).length > 0;\n    // eslint-disable-line @typescript-eslint/no-unsafe-argument\n  }\n}\n/**\n * Resets the field, so that isFieldSet() will return false.\n */\nfunction clearField(field, target) {\n  const localName = field.localName;\n  const implicitPresence = !field.opt && !field.req;\n  if (field.repeated) {\n    target[localName] = [];\n  } else if (field.oneof) {\n    target[field.oneof.localName] = {\n      case: undefined\n    };\n  } else {\n    switch (field.kind) {\n      case \"map\":\n        target[localName] = {};\n        break;\n      case \"enum\":\n        target[localName] = implicitPresence ? field.T.values[0].no : undefined;\n        break;\n      case \"scalar\":\n        target[localName] = implicitPresence ? scalarZeroValue(field.T, field.L) : undefined;\n        break;\n      case \"message\":\n        target[localName] = undefined;\n        break;\n    }\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Check whether the given object is any subtype of Message or is a specific\n * Message by passing the type.\n *\n * Just like `instanceof`, `isMessage` narrows the type. The advantage of\n * `isMessage` is that it compares identity by the message type name, not by\n * class identity. This makes it robust against the dual package hazard and\n * similar situations, where the same message is duplicated.\n *\n * This function is _mostly_ equivalent to the `instanceof` operator. For\n * example, `isMessage(foo, MyMessage)` is the same as `foo instanceof MyMessage`,\n * and `isMessage(foo)` is the same as `foo instanceof Message`. In most cases,\n * `isMessage` should be preferred over `instanceof`.\n *\n * However, due to the fact that `isMessage` does not use class identity, there\n * are subtle differences between this function and `instanceof`. Notably,\n * calling `isMessage` on an explicit type of Message will return false.\n */\nfunction isMessage(arg, type) {\n  if (arg === null || typeof arg != \"object\") {\n    return false;\n  }\n  if (!Object.getOwnPropertyNames(Message.prototype).every(m => m in arg && typeof arg[m] == \"function\")) {\n    return false;\n  }\n  const actualType = arg.getType();\n  if (actualType === null || typeof actualType != \"function\" || !(\"typeName\" in actualType) || typeof actualType.typeName != \"string\") {\n    return false;\n  }\n  return type === undefined ? true : actualType.typeName == type.typeName;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Wrap a primitive message field value in its corresponding wrapper\n * message. This function is idempotent.\n */\nfunction wrapField(type, value) {\n  if (isMessage(value) || !type.fieldWrapper) {\n    return value;\n  }\n  return type.fieldWrapper.wrapField(value);\n}\n({\n  \"google.protobuf.DoubleValue\": ScalarType.DOUBLE,\n  \"google.protobuf.FloatValue\": ScalarType.FLOAT,\n  \"google.protobuf.Int64Value\": ScalarType.INT64,\n  \"google.protobuf.UInt64Value\": ScalarType.UINT64,\n  \"google.protobuf.Int32Value\": ScalarType.INT32,\n  \"google.protobuf.UInt32Value\": ScalarType.UINT32,\n  \"google.protobuf.BoolValue\": ScalarType.BOOL,\n  \"google.protobuf.StringValue\": ScalarType.STRING,\n  \"google.protobuf.BytesValue\": ScalarType.BYTES\n});/* eslint-disable no-case-declarations,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call */\n// Default options for parsing JSON.\nconst jsonReadDefaults = {\n  ignoreUnknownFields: false\n};\n// Default options for serializing to JSON.\nconst jsonWriteDefaults = {\n  emitDefaultValues: false,\n  enumAsInteger: false,\n  useProtoFieldName: false,\n  prettySpaces: 0\n};\nfunction makeReadOptions$1(options) {\n  return options ? Object.assign(Object.assign({}, jsonReadDefaults), options) : jsonReadDefaults;\n}\nfunction makeWriteOptions$1(options) {\n  return options ? Object.assign(Object.assign({}, jsonWriteDefaults), options) : jsonWriteDefaults;\n}\nconst tokenNull = Symbol();\nconst tokenIgnoredUnknownEnum = Symbol();\nfunction makeJsonFormat() {\n  return {\n    makeReadOptions: makeReadOptions$1,\n    makeWriteOptions: makeWriteOptions$1,\n    readMessage(type, json, options, message) {\n      if (json == null || Array.isArray(json) || typeof json != \"object\") {\n        throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: \").concat(debugJsonValue(json)));\n      }\n      message = message !== null && message !== void 0 ? message : new type();\n      const oneofSeen = new Map();\n      const registry = options.typeRegistry;\n      for (const _ref of Object.entries(json)) {\n        var _ref2 = _slicedToArray(_ref, 2);\n        const jsonKey = _ref2[0];\n        const jsonValue = _ref2[1];\n        const field = type.fields.findJsonName(jsonKey);\n        if (field) {\n          if (field.oneof) {\n            if (jsonValue === null && field.kind == \"scalar\") {\n              // see conformance test Required.Proto3.JsonInput.OneofFieldNull{First,Second}\n              continue;\n            }\n            const seen = oneofSeen.get(field.oneof);\n            if (seen !== undefined) {\n              throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: multiple keys for oneof \\\"\").concat(field.oneof.name, \"\\\" present: \\\"\").concat(seen, \"\\\", \\\"\").concat(jsonKey, \"\\\"\"));\n            }\n            oneofSeen.set(field.oneof, jsonKey);\n          }\n          readField$1(message, jsonValue, field, options, type);\n        } else {\n          let found = false;\n          if ((registry === null || registry === void 0 ? void 0 : registry.findExtension) && jsonKey.startsWith(\"[\") && jsonKey.endsWith(\"]\")) {\n            const ext = registry.findExtension(jsonKey.substring(1, jsonKey.length - 1));\n            if (ext && ext.extendee.typeName == type.typeName) {\n              found = true;\n              const _createExtensionConta = createExtensionContainer(ext),\n                _createExtensionConta2 = _slicedToArray(_createExtensionConta, 2),\n                container = _createExtensionConta2[0],\n                get = _createExtensionConta2[1];\n              readField$1(container, jsonValue, ext.field, options, ext);\n              // We pass on the options as BinaryReadOptions/BinaryWriteOptions,\n              // so that users can bring their own binary reader and writer factories\n              // if necessary.\n              setExtension(message, ext, get(), options);\n            }\n          }\n          if (!found && !options.ignoreUnknownFields) {\n            throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: key \\\"\").concat(jsonKey, \"\\\" is unknown\"));\n          }\n        }\n      }\n      return message;\n    },\n    writeMessage(message, options) {\n      const type = message.getType();\n      const json = {};\n      let field;\n      try {\n        for (field of type.fields.byNumber()) {\n          if (!isFieldSet(field, message)) {\n            // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n            if (field.req) {\n              throw \"required field not set\";\n            }\n            if (!options.emitDefaultValues) {\n              continue;\n            }\n            if (!canEmitFieldDefaultValue(field)) {\n              continue;\n            }\n          }\n          const value = field.oneof ? message[field.oneof.localName].value : message[field.localName];\n          const jsonValue = writeField$1(field, value, options);\n          if (jsonValue !== undefined) {\n            json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n          }\n        }\n        const registry = options.typeRegistry;\n        if (registry === null || registry === void 0 ? void 0 : registry.findExtensionFor) {\n          for (const uf of type.runtime.bin.listUnknownFields(message)) {\n            const ext = registry.findExtensionFor(type.typeName, uf.no);\n            if (ext && hasExtension(message, ext)) {\n              // We pass on the options as BinaryReadOptions, so that users can bring their own\n              // binary reader factory if necessary.\n              const value = getExtension(message, ext, options);\n              const jsonValue = writeField$1(ext.field, value, options);\n              if (jsonValue !== undefined) {\n                json[ext.field.jsonName] = jsonValue;\n              }\n            }\n          }\n        }\n      } catch (e) {\n        const m = field ? \"cannot encode field \".concat(type.typeName, \".\").concat(field.name, \" to JSON\") : \"cannot encode message \".concat(type.typeName, \" to JSON\");\n        const r = e instanceof Error ? e.message : String(e);\n        throw new Error(m + (r.length > 0 ? \": \".concat(r) : \"\"));\n      }\n      return json;\n    },\n    readScalar(type, json, longType) {\n      // The signature of our internal function has changed. For backwards-\n      // compatibility, we support the old form that is part of the public API\n      // through the interface JsonFormat.\n      return readScalar$1(type, json, longType !== null && longType !== void 0 ? longType : LongType.BIGINT, true);\n    },\n    writeScalar(type, value, emitDefaultValues) {\n      // The signature of our internal function has changed. For backwards-\n      // compatibility, we support the old form that is part of the public API\n      // through the interface JsonFormat.\n      if (value === undefined) {\n        return undefined;\n      }\n      if (emitDefaultValues || isScalarZeroValue(type, value)) {\n        return writeScalar$1(type, value);\n      }\n      return undefined;\n    },\n    debug: debugJsonValue\n  };\n}\nfunction debugJsonValue(json) {\n  if (json === null) {\n    return \"null\";\n  }\n  switch (typeof json) {\n    case \"object\":\n      return Array.isArray(json) ? \"array\" : \"object\";\n    case \"string\":\n      return json.length > 100 ? \"string\" : \"\\\"\".concat(json.split('\"').join('\\\\\"'), \"\\\"\");\n    default:\n      return String(json);\n  }\n}\n// Read a JSON value for a field.\n// The \"parentType\" argument is only used to provide context in errors.\nfunction readField$1(target, jsonValue, field, options, parentType) {\n  let localName = field.localName;\n  if (field.repeated) {\n    assert(field.kind != \"map\");\n    if (jsonValue === null) {\n      return;\n    }\n    if (!Array.isArray(jsonValue)) {\n      throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue)));\n    }\n    const targetArray = target[localName];\n    for (const jsonItem of jsonValue) {\n      if (jsonItem === null) {\n        throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonItem)));\n      }\n      switch (field.kind) {\n        case \"message\":\n          targetArray.push(field.T.fromJson(jsonItem, options));\n          break;\n        case \"enum\":\n          const enumValue = readEnum(field.T, jsonItem, options.ignoreUnknownFields, true);\n          if (enumValue !== tokenIgnoredUnknownEnum) {\n            targetArray.push(enumValue);\n          }\n          break;\n        case \"scalar\":\n          try {\n            targetArray.push(readScalar$1(field.T, jsonItem, field.L, true));\n          } catch (e) {\n            let m = \"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonItem));\n            if (e instanceof Error && e.message.length > 0) {\n              m += \": \".concat(e.message);\n            }\n            throw new Error(m);\n          }\n          break;\n      }\n    }\n  } else if (field.kind == \"map\") {\n    if (jsonValue === null) {\n      return;\n    }\n    if (typeof jsonValue != \"object\" || Array.isArray(jsonValue)) {\n      throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue)));\n    }\n    const targetMap = target[localName];\n    for (const _ref3 of Object.entries(jsonValue)) {\n      var _ref4 = _slicedToArray(_ref3, 2);\n      const jsonMapKey = _ref4[0];\n      const jsonMapValue = _ref4[1];\n      if (jsonMapValue === null) {\n        throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: map value null\"));\n      }\n      let key;\n      try {\n        key = readMapKey(field.K, jsonMapKey);\n      } catch (e) {\n        let m = \"cannot decode map key for field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n        if (e instanceof Error && e.message.length > 0) {\n          m += \": \".concat(e.message);\n        }\n        throw new Error(m);\n      }\n      switch (field.V.kind) {\n        case \"message\":\n          targetMap[key] = field.V.T.fromJson(jsonMapValue, options);\n          break;\n        case \"enum\":\n          const enumValue = readEnum(field.V.T, jsonMapValue, options.ignoreUnknownFields, true);\n          if (enumValue !== tokenIgnoredUnknownEnum) {\n            targetMap[key] = enumValue;\n          }\n          break;\n        case \"scalar\":\n          try {\n            targetMap[key] = readScalar$1(field.V.T, jsonMapValue, LongType.BIGINT, true);\n          } catch (e) {\n            let m = \"cannot decode map value for field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n            if (e instanceof Error && e.message.length > 0) {\n              m += \": \".concat(e.message);\n            }\n            throw new Error(m);\n          }\n          break;\n      }\n    }\n  } else {\n    if (field.oneof) {\n      target = target[field.oneof.localName] = {\n        case: localName\n      };\n      localName = \"value\";\n    }\n    switch (field.kind) {\n      case \"message\":\n        const messageType = field.T;\n        if (jsonValue === null && messageType.typeName != \"google.protobuf.Value\") {\n          return;\n        }\n        let currentValue = target[localName];\n        if (isMessage(currentValue)) {\n          currentValue.fromJson(jsonValue, options);\n        } else {\n          target[localName] = currentValue = messageType.fromJson(jsonValue, options);\n          if (messageType.fieldWrapper && !field.oneof) {\n            target[localName] = messageType.fieldWrapper.unwrapField(currentValue);\n          }\n        }\n        break;\n      case \"enum\":\n        const enumValue = readEnum(field.T, jsonValue, options.ignoreUnknownFields, false);\n        switch (enumValue) {\n          case tokenNull:\n            clearField(field, target);\n            break;\n          case tokenIgnoredUnknownEnum:\n            break;\n          default:\n            target[localName] = enumValue;\n            break;\n        }\n        break;\n      case \"scalar\":\n        try {\n          const scalarValue = readScalar$1(field.T, jsonValue, field.L, false);\n          switch (scalarValue) {\n            case tokenNull:\n              clearField(field, target);\n              break;\n            default:\n              target[localName] = scalarValue;\n              break;\n          }\n        } catch (e) {\n          let m = \"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n          if (e instanceof Error && e.message.length > 0) {\n            m += \": \".concat(e.message);\n          }\n          throw new Error(m);\n        }\n        break;\n    }\n  }\n}\nfunction readMapKey(type, json) {\n  if (type === ScalarType.BOOL) {\n    // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n    switch (json) {\n      case \"true\":\n        json = true;\n        break;\n      case \"false\":\n        json = false;\n        break;\n    }\n  }\n  return readScalar$1(type, json, LongType.BIGINT, true).toString();\n}\nfunction readScalar$1(type, json, longType, nullAsZeroValue) {\n  if (json === null) {\n    if (nullAsZeroValue) {\n      return scalarZeroValue(type, longType);\n    }\n    return tokenNull;\n  }\n  // every valid case in the switch below returns, and every fall\n  // through is regarded as a failure.\n  switch (type) {\n    // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n    // Either numbers or strings are accepted. Exponent notation is also accepted.\n    case ScalarType.DOUBLE:\n    case ScalarType.FLOAT:\n      if (json === \"NaN\") return Number.NaN;\n      if (json === \"Infinity\") return Number.POSITIVE_INFINITY;\n      if (json === \"-Infinity\") return Number.NEGATIVE_INFINITY;\n      if (json === \"\") {\n        // empty string is not a number\n        break;\n      }\n      if (typeof json == \"string\" && json.trim().length !== json.length) {\n        // extra whitespace\n        break;\n      }\n      if (typeof json != \"string\" && typeof json != \"number\") {\n        break;\n      }\n      const float = Number(json);\n      if (Number.isNaN(float)) {\n        // not a number\n        break;\n      }\n      if (!Number.isFinite(float)) {\n        // infinity and -infinity are handled by string representation above, so this is an error\n        break;\n      }\n      if (type == ScalarType.FLOAT) assertFloat32(float);\n      return float;\n    // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n    case ScalarType.INT32:\n    case ScalarType.FIXED32:\n    case ScalarType.SFIXED32:\n    case ScalarType.SINT32:\n    case ScalarType.UINT32:\n      let int32;\n      if (typeof json == \"number\") int32 = json;else if (typeof json == \"string\" && json.length > 0) {\n        if (json.trim().length === json.length) int32 = Number(json);\n      }\n      if (int32 === undefined) break;\n      if (type == ScalarType.UINT32 || type == ScalarType.FIXED32) assertUInt32(int32);else assertInt32(int32);\n      return int32;\n    // int64, fixed64, uint64: JSON value will be a decimal string. Either numbers or strings are accepted.\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      if (typeof json != \"number\" && typeof json != \"string\") break;\n      const long = protoInt64.parse(json);\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      return longType ? long.toString() : long;\n    case ScalarType.FIXED64:\n    case ScalarType.UINT64:\n      if (typeof json != \"number\" && typeof json != \"string\") break;\n      const uLong = protoInt64.uParse(json);\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      return longType ? uLong.toString() : uLong;\n    // bool:\n    case ScalarType.BOOL:\n      if (typeof json !== \"boolean\") break;\n      return json;\n    // string:\n    case ScalarType.STRING:\n      if (typeof json !== \"string\") {\n        break;\n      }\n      // A string must always contain UTF-8 encoded or 7-bit ASCII.\n      // We validate with encodeURIComponent, which appears to be the fastest widely available option.\n      try {\n        encodeURIComponent(json);\n      } catch (e) {\n        throw new Error(\"invalid UTF8\");\n      }\n      return json;\n    // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n    // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n    case ScalarType.BYTES:\n      if (json === \"\") return new Uint8Array(0);\n      if (typeof json !== \"string\") break;\n      return protoBase64.dec(json);\n  }\n  throw new Error();\n}\nfunction readEnum(type, json, ignoreUnknownFields, nullAsZeroValue) {\n  if (json === null) {\n    if (type.typeName == \"google.protobuf.NullValue\") {\n      return 0; // google.protobuf.NullValue.NULL_VALUE = 0\n    }\n    return nullAsZeroValue ? type.values[0].no : tokenNull;\n  }\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n  switch (typeof json) {\n    case \"number\":\n      if (Number.isInteger(json)) {\n        return json;\n      }\n      break;\n    case \"string\":\n      const value = type.findName(json);\n      if (value !== undefined) {\n        return value.no;\n      }\n      if (ignoreUnknownFields) {\n        return tokenIgnoredUnknownEnum;\n      }\n      break;\n  }\n  throw new Error(\"cannot decode enum \".concat(type.typeName, \" from JSON: \").concat(debugJsonValue(json)));\n}\n// Decide whether an unset field should be emitted with JSON write option `emitDefaultValues`\nfunction canEmitFieldDefaultValue(field) {\n  if (field.repeated || field.kind == \"map\") {\n    // maps are {}, repeated fields are []\n    return true;\n  }\n  if (field.oneof) {\n    // oneof fields are never emitted\n    return false;\n  }\n  if (field.kind == \"message\") {\n    // singular message field are allowed to emit JSON null, but we do not\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n  if (field.opt || field.req) {\n    // the field uses explicit presence, so we cannot emit a zero value\n    return false;\n  }\n  return true;\n}\nfunction writeField$1(field, value, options) {\n  if (field.kind == \"map\") {\n    assert(typeof value == \"object\" && value != null);\n    const jsonObj = {};\n    const entries = Object.entries(value);\n    switch (field.V.kind) {\n      case \"scalar\":\n        for (const _ref5 of entries) {\n          var _ref6 = _slicedToArray(_ref5, 2);\n          const entryKey = _ref6[0];\n          const entryValue = _ref6[1];\n          jsonObj[entryKey.toString()] = writeScalar$1(field.V.T, entryValue); // JSON standard allows only (double quoted) string as property key\n        }\n        break;\n      case \"message\":\n        for (const _ref7 of entries) {\n          var _ref8 = _slicedToArray(_ref7, 2);\n          const entryKey = _ref8[0];\n          const entryValue = _ref8[1];\n          // JSON standard allows only (double quoted) string as property key\n          jsonObj[entryKey.toString()] = entryValue.toJson(options);\n        }\n        break;\n      case \"enum\":\n        const enumType = field.V.T;\n        for (const _ref9 of entries) {\n          var _ref0 = _slicedToArray(_ref9, 2);\n          const entryKey = _ref0[0];\n          const entryValue = _ref0[1];\n          // JSON standard allows only (double quoted) string as property key\n          jsonObj[entryKey.toString()] = writeEnum(enumType, entryValue, options.enumAsInteger);\n        }\n        break;\n    }\n    return options.emitDefaultValues || entries.length > 0 ? jsonObj : undefined;\n  }\n  if (field.repeated) {\n    assert(Array.isArray(value));\n    const jsonArr = [];\n    switch (field.kind) {\n      case \"scalar\":\n        for (let i = 0; i < value.length; i++) {\n          jsonArr.push(writeScalar$1(field.T, value[i]));\n        }\n        break;\n      case \"enum\":\n        for (let i = 0; i < value.length; i++) {\n          jsonArr.push(writeEnum(field.T, value[i], options.enumAsInteger));\n        }\n        break;\n      case \"message\":\n        for (let i = 0; i < value.length; i++) {\n          jsonArr.push(value[i].toJson(options));\n        }\n        break;\n    }\n    return options.emitDefaultValues || jsonArr.length > 0 ? jsonArr : undefined;\n  }\n  switch (field.kind) {\n    case \"scalar\":\n      return writeScalar$1(field.T, value);\n    case \"enum\":\n      return writeEnum(field.T, value, options.enumAsInteger);\n    case \"message\":\n      return wrapField(field.T, value).toJson(options);\n  }\n}\nfunction writeEnum(type, value, enumAsInteger) {\n  var _a;\n  assert(typeof value == \"number\");\n  if (type.typeName == \"google.protobuf.NullValue\") {\n    return null;\n  }\n  if (enumAsInteger) {\n    return value;\n  }\n  const val = type.findNumber(value);\n  return (_a = val === null || val === void 0 ? void 0 : val.name) !== null && _a !== void 0 ? _a : value; // if we don't know the enum value, just return the number\n}\nfunction writeScalar$1(type, value) {\n  switch (type) {\n    // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n    case ScalarType.INT32:\n    case ScalarType.SFIXED32:\n    case ScalarType.SINT32:\n    case ScalarType.FIXED32:\n    case ScalarType.UINT32:\n      assert(typeof value == \"number\");\n      return value;\n    // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n    // Either numbers or strings are accepted. Exponent notation is also accepted.\n    case ScalarType.FLOAT:\n    // assertFloat32(value);\n    case ScalarType.DOUBLE:\n      // eslint-disable-line no-fallthrough\n      assert(typeof value == \"number\");\n      if (Number.isNaN(value)) return \"NaN\";\n      if (value === Number.POSITIVE_INFINITY) return \"Infinity\";\n      if (value === Number.NEGATIVE_INFINITY) return \"-Infinity\";\n      return value;\n    // string:\n    case ScalarType.STRING:\n      assert(typeof value == \"string\");\n      return value;\n    // bool:\n    case ScalarType.BOOL:\n      assert(typeof value == \"boolean\");\n      return value;\n    // JSON value will be a decimal string. Either numbers or strings are accepted.\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      assert(typeof value == \"bigint\" || typeof value == \"string\" || typeof value == \"number\");\n      return value.toString();\n    // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n    // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n    case ScalarType.BYTES:\n      assert(value instanceof Uint8Array);\n      return protoBase64.enc(value);\n  }\n}/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return */\nconst unknownFieldsSymbol = Symbol(\"@bufbuild/protobuf/unknown-fields\");\n// Default options for parsing binary data.\nconst readDefaults = {\n  readUnknownFields: true,\n  readerFactory: bytes => new BinaryReader(bytes)\n};\n// Default options for serializing binary data.\nconst writeDefaults = {\n  writeUnknownFields: true,\n  writerFactory: () => new BinaryWriter()\n};\nfunction makeReadOptions(options) {\n  return options ? Object.assign(Object.assign({}, readDefaults), options) : readDefaults;\n}\nfunction makeWriteOptions(options) {\n  return options ? Object.assign(Object.assign({}, writeDefaults), options) : writeDefaults;\n}\nfunction makeBinaryFormat() {\n  return {\n    makeReadOptions,\n    makeWriteOptions,\n    listUnknownFields(message) {\n      var _a;\n      return (_a = message[unknownFieldsSymbol]) !== null && _a !== void 0 ? _a : [];\n    },\n    discardUnknownFields(message) {\n      delete message[unknownFieldsSymbol];\n    },\n    writeUnknownFields(message, writer) {\n      const m = message;\n      const c = m[unknownFieldsSymbol];\n      if (c) {\n        for (const f of c) {\n          writer.tag(f.no, f.wireType).raw(f.data);\n        }\n      }\n    },\n    onUnknownField(message, no, wireType, data) {\n      const m = message;\n      if (!Array.isArray(m[unknownFieldsSymbol])) {\n        m[unknownFieldsSymbol] = [];\n      }\n      m[unknownFieldsSymbol].push({\n        no,\n        wireType,\n        data\n      });\n    },\n    readMessage(message, reader, lengthOrEndTagFieldNo, options, delimitedMessageEncoding) {\n      const type = message.getType();\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      const end = delimitedMessageEncoding ? reader.len : reader.pos + lengthOrEndTagFieldNo;\n      let fieldNo, wireType;\n      while (reader.pos < end) {\n        var _reader$tag = reader.tag();\n        var _reader$tag2 = _slicedToArray(_reader$tag, 2);\n        fieldNo = _reader$tag2[0];\n        wireType = _reader$tag2[1];\n        if (delimitedMessageEncoding === true && wireType == WireType.EndGroup) {\n          break;\n        }\n        const field = type.fields.find(fieldNo);\n        if (!field) {\n          const data = reader.skip(wireType, fieldNo);\n          if (options.readUnknownFields) {\n            this.onUnknownField(message, fieldNo, wireType, data);\n          }\n          continue;\n        }\n        readField(message, reader, field, wireType, options);\n      }\n      if (delimitedMessageEncoding && (\n      // eslint-disable-line @typescript-eslint/strict-boolean-expressions\n      wireType != WireType.EndGroup || fieldNo !== lengthOrEndTagFieldNo)) {\n        throw new Error(\"invalid end group tag\");\n      }\n    },\n    readField,\n    writeMessage(message, writer, options) {\n      const type = message.getType();\n      for (const field of type.fields.byNumber()) {\n        if (!isFieldSet(field, message)) {\n          if (field.req) {\n            throw new Error(\"cannot encode field \".concat(type.typeName, \".\").concat(field.name, \" to binary: required field not set\"));\n          }\n          continue;\n        }\n        const value = field.oneof ? message[field.oneof.localName].value : message[field.localName];\n        writeField(field, value, writer, options);\n      }\n      if (options.writeUnknownFields) {\n        this.writeUnknownFields(message, writer);\n      }\n      return writer;\n    },\n    writeField(field, value, writer, options) {\n      // The behavior of our internal function has changed, it does no longer\n      // accept `undefined` values for singular scalar and map.\n      // For backwards-compatibility, we support the old form that is part of\n      // the public API through the interface BinaryFormat.\n      if (value === undefined) {\n        return undefined;\n      }\n      writeField(field, value, writer, options);\n    }\n  };\n}\nfunction readField(target,\n// eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access\nreader, field, wireType, options) {\n  let repeated = field.repeated,\n    localName = field.localName;\n  if (field.oneof) {\n    target = target[field.oneof.localName];\n    if (target.case != localName) {\n      delete target.value;\n    }\n    target.case = localName;\n    localName = \"value\";\n  }\n  switch (field.kind) {\n    case \"scalar\":\n    case \"enum\":\n      const scalarType = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n      let read = readScalar;\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- acceptable since it's covered by tests\n      if (field.kind == \"scalar\" && field.L > 0) {\n        read = readScalarLTString;\n      }\n      if (repeated) {\n        let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n        const isPacked = wireType == WireType.LengthDelimited && scalarType != ScalarType.STRING && scalarType != ScalarType.BYTES;\n        if (isPacked) {\n          let e = reader.uint32() + reader.pos;\n          while (reader.pos < e) {\n            arr.push(read(reader, scalarType));\n          }\n        } else {\n          arr.push(read(reader, scalarType));\n        }\n      } else {\n        target[localName] = read(reader, scalarType);\n      }\n      break;\n    case \"message\":\n      const messageType = field.T;\n      if (repeated) {\n        // safe to assume presence of array, oneof cannot contain repeated values\n        target[localName].push(readMessageField(reader, new messageType(), options, field));\n      } else {\n        if (isMessage(target[localName])) {\n          readMessageField(reader, target[localName], options, field);\n        } else {\n          target[localName] = readMessageField(reader, new messageType(), options, field);\n          if (messageType.fieldWrapper && !field.oneof && !field.repeated) {\n            target[localName] = messageType.fieldWrapper.unwrapField(target[localName]);\n          }\n        }\n      }\n      break;\n    case \"map\":\n      let _readMapEntry = readMapEntry(field, reader, options),\n        _readMapEntry2 = _slicedToArray(_readMapEntry, 2),\n        mapKey = _readMapEntry2[0],\n        mapVal = _readMapEntry2[1];\n      // safe to assume presence of map object, oneof cannot contain repeated values\n      target[localName][mapKey] = mapVal;\n      break;\n  }\n}\n// Read a message, avoiding MessageType.fromBinary() to re-use the\n// BinaryReadOptions and the IBinaryReader.\nfunction readMessageField(reader, message, options, field) {\n  const format = message.getType().runtime.bin;\n  const delimited = field === null || field === void 0 ? void 0 : field.delimited;\n  format.readMessage(message, reader, delimited ? field.no : reader.uint32(),\n  // eslint-disable-line @typescript-eslint/strict-boolean-expressions\n  options, delimited);\n  return message;\n}\n// Read a map field, expecting key field = 1, value field = 2\nfunction readMapEntry(field, reader, options) {\n  const length = reader.uint32(),\n    end = reader.pos + length;\n  let key, val;\n  while (reader.pos < end) {\n    const _reader$tag3 = reader.tag(),\n      _reader$tag4 = _slicedToArray(_reader$tag3, 1),\n      fieldNo = _reader$tag4[0];\n    switch (fieldNo) {\n      case 1:\n        key = readScalar(reader, field.K);\n        break;\n      case 2:\n        switch (field.V.kind) {\n          case \"scalar\":\n            val = readScalar(reader, field.V.T);\n            break;\n          case \"enum\":\n            val = reader.int32();\n            break;\n          case \"message\":\n            val = readMessageField(reader, new field.V.T(), options, undefined);\n            break;\n        }\n        break;\n    }\n  }\n  if (key === undefined) {\n    key = scalarZeroValue(field.K, LongType.BIGINT);\n  }\n  if (typeof key != \"string\" && typeof key != \"number\") {\n    key = key.toString();\n  }\n  if (val === undefined) {\n    switch (field.V.kind) {\n      case \"scalar\":\n        val = scalarZeroValue(field.V.T, LongType.BIGINT);\n        break;\n      case \"enum\":\n        val = field.V.T.values[0].no;\n        break;\n      case \"message\":\n        val = new field.V.T();\n        break;\n    }\n  }\n  return [key, val];\n}\n// Read a scalar value, but return 64 bit integral types (int64, uint64,\n// sint64, fixed64, sfixed64) as string instead of bigint.\nfunction readScalarLTString(reader, type) {\n  const v = readScalar(reader, type);\n  return typeof v == \"bigint\" ? v.toString() : v;\n}\n// Does not use scalarTypeInfo() for better performance.\nfunction readScalar(reader, type) {\n  switch (type) {\n    case ScalarType.STRING:\n      return reader.string();\n    case ScalarType.BOOL:\n      return reader.bool();\n    case ScalarType.DOUBLE:\n      return reader.double();\n    case ScalarType.FLOAT:\n      return reader.float();\n    case ScalarType.INT32:\n      return reader.int32();\n    case ScalarType.INT64:\n      return reader.int64();\n    case ScalarType.UINT64:\n      return reader.uint64();\n    case ScalarType.FIXED64:\n      return reader.fixed64();\n    case ScalarType.BYTES:\n      return reader.bytes();\n    case ScalarType.FIXED32:\n      return reader.fixed32();\n    case ScalarType.SFIXED32:\n      return reader.sfixed32();\n    case ScalarType.SFIXED64:\n      return reader.sfixed64();\n    case ScalarType.SINT64:\n      return reader.sint64();\n    case ScalarType.UINT32:\n      return reader.uint32();\n    case ScalarType.SINT32:\n      return reader.sint32();\n  }\n}\nfunction writeField(field, value, writer, options) {\n  assert(value !== undefined);\n  const repeated = field.repeated;\n  switch (field.kind) {\n    case \"scalar\":\n    case \"enum\":\n      let scalarType = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n      if (repeated) {\n        assert(Array.isArray(value));\n        if (field.packed) {\n          writePacked(writer, scalarType, field.no, value);\n        } else {\n          for (const item of value) {\n            writeScalar(writer, scalarType, field.no, item);\n          }\n        }\n      } else {\n        writeScalar(writer, scalarType, field.no, value);\n      }\n      break;\n    case \"message\":\n      if (repeated) {\n        assert(Array.isArray(value));\n        for (const item of value) {\n          writeMessageField(writer, options, field, item);\n        }\n      } else {\n        writeMessageField(writer, options, field, value);\n      }\n      break;\n    case \"map\":\n      assert(typeof value == \"object\" && value != null);\n      for (const _ref of Object.entries(value)) {\n        var _ref2 = _slicedToArray(_ref, 2);\n        const key = _ref2[0];\n        const val = _ref2[1];\n        writeMapEntry(writer, options, field, key, val);\n      }\n      break;\n  }\n}\nfunction writeMapEntry(writer, options, field, key, value) {\n  writer.tag(field.no, WireType.LengthDelimited);\n  writer.fork();\n  // javascript only allows number or string for object properties\n  // we convert from our representation to the protobuf type\n  let keyValue = key;\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- we deliberately handle just the special cases for map keys\n  switch (field.K) {\n    case ScalarType.INT32:\n    case ScalarType.FIXED32:\n    case ScalarType.UINT32:\n    case ScalarType.SFIXED32:\n    case ScalarType.SINT32:\n      keyValue = Number.parseInt(key);\n      break;\n    case ScalarType.BOOL:\n      assert(key == \"true\" || key == \"false\");\n      keyValue = key == \"true\";\n      break;\n  }\n  // write key, expecting key field number = 1\n  writeScalar(writer, field.K, 1, keyValue);\n  // write value, expecting value field number = 2\n  switch (field.V.kind) {\n    case \"scalar\":\n      writeScalar(writer, field.V.T, 2, value);\n      break;\n    case \"enum\":\n      writeScalar(writer, ScalarType.INT32, 2, value);\n      break;\n    case \"message\":\n      assert(value !== undefined);\n      writer.tag(2, WireType.LengthDelimited).bytes(value.toBinary(options));\n      break;\n  }\n  writer.join();\n}\n// Value must not be undefined\nfunction writeMessageField(writer, options, field, value) {\n  const message = wrapField(field.T, value);\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n  if (field.delimited) writer.tag(field.no, WireType.StartGroup).raw(message.toBinary(options)).tag(field.no, WireType.EndGroup);else writer.tag(field.no, WireType.LengthDelimited).bytes(message.toBinary(options));\n}\nfunction writeScalar(writer, type, fieldNo, value) {\n  assert(value !== undefined);\n  let _scalarTypeInfo = scalarTypeInfo(type),\n    _scalarTypeInfo2 = _slicedToArray(_scalarTypeInfo, 2),\n    wireType = _scalarTypeInfo2[0],\n    method = _scalarTypeInfo2[1];\n  writer.tag(fieldNo, wireType)[method](value);\n}\nfunction writePacked(writer, type, fieldNo, value) {\n  if (!value.length) {\n    return;\n  }\n  writer.tag(fieldNo, WireType.LengthDelimited).fork();\n  let _scalarTypeInfo3 = scalarTypeInfo(type),\n    _scalarTypeInfo4 = _slicedToArray(_scalarTypeInfo3, 2),\n    method = _scalarTypeInfo4[1];\n  for (let i = 0; i < value.length; i++) {\n    writer[method](value[i]);\n  }\n  writer.join();\n}\n/**\n * Get information for writing a scalar value.\n *\n * Returns tuple:\n * [0]: appropriate WireType\n * [1]: name of the appropriate method of IBinaryWriter\n * [2]: whether the given value is a default value for proto3 semantics\n *\n * If argument `value` is omitted, [2] is always false.\n */\n// TODO replace call-sites writeScalar() and writePacked(), then remove\nfunction scalarTypeInfo(type) {\n  let wireType = WireType.Varint;\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- INT32, UINT32, SINT32 are covered by the defaults\n  switch (type) {\n    case ScalarType.BYTES:\n    case ScalarType.STRING:\n      wireType = WireType.LengthDelimited;\n      break;\n    case ScalarType.DOUBLE:\n    case ScalarType.FIXED64:\n    case ScalarType.SFIXED64:\n      wireType = WireType.Bit64;\n      break;\n    case ScalarType.FIXED32:\n    case ScalarType.SFIXED32:\n    case ScalarType.FLOAT:\n      wireType = WireType.Bit32;\n      break;\n  }\n  const method = ScalarType[type].toLowerCase();\n  return [wireType, method];\n}/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-argument,no-case-declarations */\nfunction makeUtilCommon() {\n  return {\n    setEnumType,\n    initPartial(source, target) {\n      if (source === undefined) {\n        return;\n      }\n      const type = target.getType();\n      for (const member of type.fields.byMember()) {\n        const localName = member.localName,\n          t = target,\n          s = source;\n        if (s[localName] == null) {\n          // TODO if source is a Message instance, we should use isFieldSet() here to support future field presence\n          continue;\n        }\n        switch (member.kind) {\n          case \"oneof\":\n            const sk = s[localName].case;\n            if (sk === undefined) {\n              continue;\n            }\n            const sourceField = member.findField(sk);\n            let val = s[localName].value;\n            if (sourceField && sourceField.kind == \"message\" && !isMessage(val, sourceField.T)) {\n              val = new sourceField.T(val);\n            } else if (sourceField && sourceField.kind === \"scalar\" && sourceField.T === ScalarType.BYTES) {\n              val = toU8Arr(val);\n            }\n            t[localName] = {\n              case: sk,\n              value: val\n            };\n            break;\n          case \"scalar\":\n          case \"enum\":\n            let copy = s[localName];\n            if (member.T === ScalarType.BYTES) {\n              copy = member.repeated ? copy.map(toU8Arr) : toU8Arr(copy);\n            }\n            t[localName] = copy;\n            break;\n          case \"map\":\n            switch (member.V.kind) {\n              case \"scalar\":\n              case \"enum\":\n                if (member.V.T === ScalarType.BYTES) {\n                  for (const _ref of Object.entries(s[localName])) {\n                    var _ref2 = _slicedToArray(_ref, 2);\n                    const k = _ref2[0];\n                    const v = _ref2[1];\n                    t[localName][k] = toU8Arr(v);\n                  }\n                } else {\n                  Object.assign(t[localName], s[localName]);\n                }\n                break;\n              case \"message\":\n                const messageType = member.V.T;\n                for (const k of Object.keys(s[localName])) {\n                  let val = s[localName][k];\n                  if (!messageType.fieldWrapper) {\n                    // We only take partial input for messages that are not a wrapper type.\n                    // For those messages, we recursively normalize the partial input.\n                    val = new messageType(val);\n                  }\n                  t[localName][k] = val;\n                }\n                break;\n            }\n            break;\n          case \"message\":\n            const mt = member.T;\n            if (member.repeated) {\n              t[localName] = s[localName].map(val => isMessage(val, mt) ? val : new mt(val));\n            } else {\n              const val = s[localName];\n              if (mt.fieldWrapper) {\n                if (\n                // We can't use BytesValue.typeName as that will create a circular import\n                mt.typeName === \"google.protobuf.BytesValue\") {\n                  t[localName] = toU8Arr(val);\n                } else {\n                  t[localName] = val;\n                }\n              } else {\n                t[localName] = isMessage(val, mt) ? val : new mt(val);\n              }\n            }\n            break;\n        }\n      }\n    },\n    // TODO use isFieldSet() here to support future field presence\n    equals(type, a, b) {\n      if (a === b) {\n        return true;\n      }\n      if (!a || !b) {\n        return false;\n      }\n      return type.fields.byMember().every(m => {\n        const va = a[m.localName];\n        const vb = b[m.localName];\n        if (m.repeated) {\n          if (va.length !== vb.length) {\n            return false;\n          }\n          // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- repeated fields are never \"map\"\n          switch (m.kind) {\n            case \"message\":\n              return va.every((a, i) => m.T.equals(a, vb[i]));\n            case \"scalar\":\n              return va.every((a, i) => scalarEquals(m.T, a, vb[i]));\n            case \"enum\":\n              return va.every((a, i) => scalarEquals(ScalarType.INT32, a, vb[i]));\n          }\n          throw new Error(\"repeated cannot contain \".concat(m.kind));\n        }\n        switch (m.kind) {\n          case \"message\":\n            let a = va;\n            let b = vb;\n            if (m.T.fieldWrapper) {\n              if (a !== undefined && !isMessage(a)) {\n                a = m.T.fieldWrapper.wrapField(a);\n              }\n              if (b !== undefined && !isMessage(b)) {\n                b = m.T.fieldWrapper.wrapField(b);\n              }\n            }\n            return m.T.equals(a, b);\n          case \"enum\":\n            return scalarEquals(ScalarType.INT32, va, vb);\n          case \"scalar\":\n            return scalarEquals(m.T, va, vb);\n          case \"oneof\":\n            if (va.case !== vb.case) {\n              return false;\n            }\n            const s = m.findField(va.case);\n            if (s === undefined) {\n              return true;\n            }\n            // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- oneof fields are never \"map\"\n            switch (s.kind) {\n              case \"message\":\n                return s.T.equals(va.value, vb.value);\n              case \"enum\":\n                return scalarEquals(ScalarType.INT32, va.value, vb.value);\n              case \"scalar\":\n                return scalarEquals(s.T, va.value, vb.value);\n            }\n            throw new Error(\"oneof cannot contain \".concat(s.kind));\n          case \"map\":\n            const keys = Object.keys(va).concat(Object.keys(vb));\n            switch (m.V.kind) {\n              case \"message\":\n                const messageType = m.V.T;\n                return keys.every(k => messageType.equals(va[k], vb[k]));\n              case \"enum\":\n                return keys.every(k => scalarEquals(ScalarType.INT32, va[k], vb[k]));\n              case \"scalar\":\n                const scalarType = m.V.T;\n                return keys.every(k => scalarEquals(scalarType, va[k], vb[k]));\n            }\n            break;\n        }\n      });\n    },\n    // TODO use isFieldSet() here to support future field presence\n    clone(message) {\n      const type = message.getType(),\n        target = new type(),\n        any = target;\n      for (const member of type.fields.byMember()) {\n        const source = message[member.localName];\n        let copy;\n        if (member.repeated) {\n          copy = source.map(cloneSingularField);\n        } else if (member.kind == \"map\") {\n          copy = any[member.localName];\n          for (const _ref3 of Object.entries(source)) {\n            var _ref4 = _slicedToArray(_ref3, 2);\n            const key = _ref4[0];\n            const v = _ref4[1];\n            copy[key] = cloneSingularField(v);\n          }\n        } else if (member.kind == \"oneof\") {\n          const f = member.findField(source.case);\n          copy = f ? {\n            case: source.case,\n            value: cloneSingularField(source.value)\n          } : {\n            case: undefined\n          };\n        } else {\n          copy = cloneSingularField(source);\n        }\n        any[member.localName] = copy;\n      }\n      for (const uf of type.runtime.bin.listUnknownFields(message)) {\n        type.runtime.bin.onUnknownField(any, uf.no, uf.wireType, uf.data);\n      }\n      return target;\n    }\n  };\n}\n// clone a single field value - i.e. the element type of repeated fields, the value type of maps\nfunction cloneSingularField(value) {\n  if (value === undefined) {\n    return value;\n  }\n  if (isMessage(value)) {\n    return value.clone();\n  }\n  if (value instanceof Uint8Array) {\n    const c = new Uint8Array(value.byteLength);\n    c.set(value);\n    return c;\n  }\n  return value;\n}\n// converts any ArrayLike<number> to Uint8Array if necessary.\nfunction toU8Arr(input) {\n  return input instanceof Uint8Array ? input : new Uint8Array(input);\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nfunction makeProtoRuntime(syntax, newFieldList, initFields) {\n  return {\n    syntax,\n    json: makeJsonFormat(),\n    bin: makeBinaryFormat(),\n    util: Object.assign(Object.assign({}, makeUtilCommon()), {\n      newFieldList,\n      initFields\n    }),\n    makeMessageType(typeName, fields, opt) {\n      return makeMessageType(this, typeName, fields, opt);\n    },\n    makeEnum,\n    makeEnumType,\n    getEnumType,\n    makeExtension(typeName, extendee, field) {\n      return makeExtension(this, typeName, extendee, field);\n    }\n  };\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass InternalFieldList {\n  constructor(fields, normalizer) {\n    this._fields = fields;\n    this._normalizer = normalizer;\n  }\n  findJsonName(jsonName) {\n    if (!this.jsonNames) {\n      const t = {};\n      for (const f of this.list()) {\n        t[f.jsonName] = t[f.name] = f;\n      }\n      this.jsonNames = t;\n    }\n    return this.jsonNames[jsonName];\n  }\n  find(fieldNo) {\n    if (!this.numbers) {\n      const t = {};\n      for (const f of this.list()) {\n        t[f.no] = f;\n      }\n      this.numbers = t;\n    }\n    return this.numbers[fieldNo];\n  }\n  list() {\n    if (!this.all) {\n      this.all = this._normalizer(this._fields);\n    }\n    return this.all;\n  }\n  byNumber() {\n    if (!this.numbersAsc) {\n      this.numbersAsc = this.list().concat().sort((a, b) => a.no - b.no);\n    }\n    return this.numbersAsc;\n  }\n  byMember() {\n    if (!this.members) {\n      this.members = [];\n      const a = this.members;\n      let o;\n      for (const f of this.list()) {\n        if (f.oneof) {\n          if (f.oneof !== o) {\n            o = f.oneof;\n            a.push(o);\n          }\n        } else {\n          a.push(f);\n        }\n      }\n    }\n    return this.members;\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns the name of a protobuf element in generated code.\n *\n * Field names - including oneofs - are converted to lowerCamelCase. For\n * messages, enumerations and services, the package name is stripped from\n * the type name. For nested messages and enumerations, the names are joined\n * with an underscore. For methods, the first character is made lowercase.\n */\n/**\n * Returns the name of a field in generated code.\n */\nfunction localFieldName(protoName, inOneof) {\n  const name = protoCamelCase(protoName);\n  if (inOneof) {\n    // oneof member names are not properties, but values of the `case` property.\n    return name;\n  }\n  return safeObjectProperty(safeMessageProperty(name));\n}\n/**\n * Returns the name of a oneof group in generated code.\n */\nfunction localOneofName(protoName) {\n  return localFieldName(protoName, false);\n}\n/**\n * Returns the JSON name for a protobuf field, exactly like protoc does.\n */\nconst fieldJsonName = protoCamelCase;\n/**\n * Converts snake_case to protoCamelCase according to the convention\n * used by protoc to convert a field name to a JSON name.\n */\nfunction protoCamelCase(snakeCase) {\n  let capNext = false;\n  const b = [];\n  for (let i = 0; i < snakeCase.length; i++) {\n    let c = snakeCase.charAt(i);\n    switch (c) {\n      case \"_\":\n        capNext = true;\n        break;\n      case \"0\":\n      case \"1\":\n      case \"2\":\n      case \"3\":\n      case \"4\":\n      case \"5\":\n      case \"6\":\n      case \"7\":\n      case \"8\":\n      case \"9\":\n        b.push(c);\n        capNext = false;\n        break;\n      default:\n        if (capNext) {\n          capNext = false;\n          c = c.toUpperCase();\n        }\n        b.push(c);\n        break;\n    }\n  }\n  return b.join(\"\");\n}\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst reservedObjectProperties = new Set([\n// names reserved by JavaScript\n\"constructor\", \"toString\", \"toJSON\", \"valueOf\"]);\n/**\n * Names that cannot be used for object properties because they are reserved\n * by the runtime.\n */\nconst reservedMessageProperties = new Set([\n// names reserved by the runtime\n\"getType\", \"clone\", \"equals\", \"fromBinary\", \"fromJson\", \"fromJsonString\", \"toBinary\", \"toJson\", \"toJsonString\",\n// names reserved by the runtime for the future\n\"toObject\"]);\nconst fallback = name => \"\".concat(name, \"$\");\n/**\n * Will wrap names that are Object prototype properties or names reserved\n * for `Message`s.\n */\nconst safeMessageProperty = name => {\n  if (reservedMessageProperties.has(name)) {\n    return fallback(name);\n  }\n  return name;\n};\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst safeObjectProperty = name => {\n  if (reservedObjectProperties.has(name)) {\n    return fallback(name);\n  }\n  return name;\n};// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass InternalOneofInfo {\n  constructor(name) {\n    this.kind = \"oneof\";\n    this.repeated = false;\n    this.packed = false;\n    this.opt = false;\n    this.req = false;\n    this.default = undefined;\n    this.fields = [];\n    this.name = name;\n    this.localName = localOneofName(name);\n  }\n  addField(field) {\n    assert(field.oneof === this, \"field \".concat(field.name, \" not one of \").concat(this.name));\n    this.fields.push(field);\n  }\n  findField(localName) {\n    if (!this._lookup) {\n      this._lookup = Object.create(null);\n      for (let i = 0; i < this.fields.length; i++) {\n        this._lookup[this.fields[i].localName] = this.fields[i];\n      }\n    }\n    return this._lookup[localName];\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Convert a collection of field info to an array of normalized FieldInfo.\n *\n * The argument `packedByDefault` specifies whether fields that do not specify\n * `packed` should be packed (proto3) or unpacked (proto2).\n */\nfunction normalizeFieldInfos(fieldInfos, packedByDefault) {\n  var _a, _b, _c, _d, _e, _f;\n  const r = [];\n  let o;\n  for (const field of typeof fieldInfos == \"function\" ? fieldInfos() : fieldInfos) {\n    const f = field;\n    f.localName = localFieldName(field.name, field.oneof !== undefined);\n    f.jsonName = (_a = field.jsonName) !== null && _a !== void 0 ? _a : fieldJsonName(field.name);\n    f.repeated = (_b = field.repeated) !== null && _b !== void 0 ? _b : false;\n    if (field.kind == \"scalar\") {\n      f.L = (_c = field.L) !== null && _c !== void 0 ? _c : LongType.BIGINT;\n    }\n    f.delimited = (_d = field.delimited) !== null && _d !== void 0 ? _d : false;\n    f.req = (_e = field.req) !== null && _e !== void 0 ? _e : false;\n    f.opt = (_f = field.opt) !== null && _f !== void 0 ? _f : false;\n    if (field.packed === undefined) {\n      {\n        f.packed = field.kind == \"enum\" || field.kind == \"scalar\" && field.T != ScalarType.BYTES && field.T != ScalarType.STRING;\n      }\n    }\n    // We do not surface options at this time\n    // f.options = field.options ?? emptyReadonlyObject;\n    if (field.oneof !== undefined) {\n      const ooname = typeof field.oneof == \"string\" ? field.oneof : field.oneof.name;\n      if (!o || o.name != ooname) {\n        o = new InternalOneofInfo(ooname);\n      }\n      f.oneof = o;\n      o.addField(f);\n    }\n    r.push(f);\n  }\n  return r;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Provides functionality for messages defined with the proto3 syntax.\n */\nconst proto3 = makeProtoRuntime(\"proto3\", fields => {\n  return new InternalFieldList(fields, source => normalizeFieldInfos(source));\n},\n// TODO merge with proto2 and initExtensionField, also see initPartial, equals, clone\ntarget => {\n  for (const member of target.getType().fields.byMember()) {\n    if (member.opt) {\n      continue;\n    }\n    const name = member.localName,\n      t = target;\n    if (member.repeated) {\n      t[name] = [];\n      continue;\n    }\n    switch (member.kind) {\n      case \"oneof\":\n        t[name] = {\n          case: undefined\n        };\n        break;\n      case \"enum\":\n        t[name] = 0;\n        break;\n      case \"map\":\n        t[name] = {};\n        break;\n      case \"scalar\":\n        t[name] = scalarZeroValue(member.T, member.L);\n        break;\n    }\n  }\n});// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n *     Timestamp timestamp;\n *     timestamp.set_seconds(time(NULL));\n *     timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n *     struct timeval tv;\n *     gettimeofday(&tv, NULL);\n *\n *     Timestamp timestamp;\n *     timestamp.set_seconds(tv.tv_sec);\n *     timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n *     FILETIME ft;\n *     GetSystemTimeAsFileTime(&ft);\n *     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n *     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n *     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n *     Timestamp timestamp;\n *     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n *     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n *     long millis = System.currentTimeMillis();\n *\n *     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n *         .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n *     Instant now = Instant.now();\n *\n *     Timestamp timestamp =\n *         Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n *             .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n *     timestamp = Timestamp()\n *     timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from message google.protobuf.Timestamp\n */\nclass Timestamp extends Message {\n  constructor(data) {\n    super();\n    /**\n     * Represents seconds of UTC time since Unix epoch\n     * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n     * 9999-12-31T23:59:59Z inclusive.\n     *\n     * @generated from field: int64 seconds = 1;\n     */\n    this.seconds = protoInt64.zero;\n    /**\n     * Non-negative fractions of a second at nanosecond resolution. Negative\n     * second values with fractions must still have non-negative nanos values\n     * that count forward in time. Must be from 0 to 999,999,999\n     * inclusive.\n     *\n     * @generated from field: int32 nanos = 2;\n     */\n    this.nanos = 0;\n    proto3.util.initPartial(data, this);\n  }\n  fromJson(json, options) {\n    if (typeof json !== \"string\") {\n      throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: \".concat(proto3.json.debug(json)));\n    }\n    const matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n    if (!matches) {\n      throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string\");\n    }\n    const ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n    if (Number.isNaN(ms)) {\n      throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string\");\n    }\n    if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\")) {\n      throw new Error(\"cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive\");\n    }\n    this.seconds = protoInt64.parse(ms / 1000);\n    this.nanos = 0;\n    if (matches[7]) {\n      this.nanos = parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000;\n    }\n    return this;\n  }\n  toJson(options) {\n    const ms = Number(this.seconds) * 1000;\n    if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\")) {\n      throw new Error(\"cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive\");\n    }\n    if (this.nanos < 0) {\n      throw new Error(\"cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative\");\n    }\n    let z = \"Z\";\n    if (this.nanos > 0) {\n      const nanosStr = (this.nanos + 1000000000).toString().substring(1);\n      if (nanosStr.substring(3) === \"000000\") {\n        z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n      } else if (nanosStr.substring(6) === \"000\") {\n        z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n      } else {\n        z = \".\" + nanosStr + \"Z\";\n      }\n    }\n    return new Date(ms).toISOString().replace(\".000Z\", z);\n  }\n  toDate() {\n    return new Date(Number(this.seconds) * 1000 + Math.ceil(this.nanos / 1000000));\n  }\n  static now() {\n    return Timestamp.fromDate(new Date());\n  }\n  static fromDate(date) {\n    const ms = date.getTime();\n    return new Timestamp({\n      seconds: protoInt64.parse(Math.floor(ms / 1000)),\n      nanos: ms % 1000 * 1000000\n    });\n  }\n  static fromBinary(bytes, options) {\n    return new Timestamp().fromBinary(bytes, options);\n  }\n  static fromJson(jsonValue, options) {\n    return new Timestamp().fromJson(jsonValue, options);\n  }\n  static fromJsonString(jsonString, options) {\n    return new Timestamp().fromJsonString(jsonString, options);\n  }\n  static equals(a, b) {\n    return proto3.util.equals(Timestamp, a, b);\n  }\n}\nTimestamp.runtime = proto3;\nTimestamp.typeName = \"google.protobuf.Timestamp\";\nTimestamp.fields = proto3.util.newFieldList(() => [{\n  no: 1,\n  name: \"seconds\",\n  kind: \"scalar\",\n  T: 3 /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"nanos\",\n  kind: \"scalar\",\n  T: 5 /* ScalarType.INT32 */\n}]);const MetricsBatch = /* @__PURE__ */proto3.makeMessageType(\"livekit.MetricsBatch\", () => [{\n  no: 1,\n  name: \"timestamp_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"normalized_timestamp\",\n  kind: \"message\",\n  T: Timestamp\n}, {\n  no: 3,\n  name: \"str_data\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 4,\n  name: \"time_series\",\n  kind: \"message\",\n  T: TimeSeriesMetric,\n  repeated: true\n}, {\n  no: 5,\n  name: \"events\",\n  kind: \"message\",\n  T: EventMetric,\n  repeated: true\n}]);\nconst TimeSeriesMetric = /* @__PURE__ */proto3.makeMessageType(\"livekit.TimeSeriesMetric\", () => [{\n  no: 1,\n  name: \"label\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"samples\",\n  kind: \"message\",\n  T: MetricSample,\n  repeated: true\n}, {\n  no: 5,\n  name: \"rid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst MetricSample = /* @__PURE__ */proto3.makeMessageType(\"livekit.MetricSample\", () => [{\n  no: 1,\n  name: \"timestamp_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"normalized_timestamp\",\n  kind: \"message\",\n  T: Timestamp\n}, {\n  no: 3,\n  name: \"value\",\n  kind: \"scalar\",\n  T: 2\n  /* ScalarType.FLOAT */\n}]);\nconst EventMetric = /* @__PURE__ */proto3.makeMessageType(\"livekit.EventMetric\", () => [{\n  no: 1,\n  name: \"label\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"start_timestamp_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 5,\n  name: \"end_timestamp_ms\",\n  kind: \"scalar\",\n  T: 3,\n  opt: true\n}, {\n  no: 6,\n  name: \"normalized_start_timestamp\",\n  kind: \"message\",\n  T: Timestamp\n}, {\n  no: 7,\n  name: \"normalized_end_timestamp\",\n  kind: \"message\",\n  T: Timestamp,\n  opt: true\n}, {\n  no: 8,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"rid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst AudioCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioCodec\", [{\n  no: 0,\n  name: \"DEFAULT_AC\"\n}, {\n  no: 1,\n  name: \"OPUS\"\n}, {\n  no: 2,\n  name: \"AAC\"\n}, {\n  no: 3,\n  name: \"AC_MP3\"\n}]);\nconst VideoCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoCodec\", [{\n  no: 0,\n  name: \"DEFAULT_VC\"\n}, {\n  no: 1,\n  name: \"H264_BASELINE\"\n}, {\n  no: 2,\n  name: \"H264_MAIN\"\n}, {\n  no: 3,\n  name: \"H264_HIGH\"\n}, {\n  no: 4,\n  name: \"VP8\"\n}]);\nconst ImageCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.ImageCodec\", [{\n  no: 0,\n  name: \"IC_DEFAULT\"\n}, {\n  no: 1,\n  name: \"IC_JPEG\"\n}]);\nconst BackupCodecPolicy$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.BackupCodecPolicy\", [{\n  no: 0,\n  name: \"PREFER_REGRESSION\"\n}, {\n  no: 1,\n  name: \"SIMULCAST\"\n}, {\n  no: 2,\n  name: \"REGRESSION\"\n}]);\nconst TrackType = /* @__PURE__ */proto3.makeEnum(\"livekit.TrackType\", [{\n  no: 0,\n  name: \"AUDIO\"\n}, {\n  no: 1,\n  name: \"VIDEO\"\n}, {\n  no: 2,\n  name: \"DATA\"\n}]);\nconst TrackSource = /* @__PURE__ */proto3.makeEnum(\"livekit.TrackSource\", [{\n  no: 0,\n  name: \"UNKNOWN\"\n}, {\n  no: 1,\n  name: \"CAMERA\"\n}, {\n  no: 2,\n  name: \"MICROPHONE\"\n}, {\n  no: 3,\n  name: \"SCREEN_SHARE\"\n}, {\n  no: 4,\n  name: \"SCREEN_SHARE_AUDIO\"\n}]);\nconst VideoQuality$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoQuality\", [{\n  no: 0,\n  name: \"LOW\"\n}, {\n  no: 1,\n  name: \"MEDIUM\"\n}, {\n  no: 2,\n  name: \"HIGH\"\n}, {\n  no: 3,\n  name: \"OFF\"\n}]);\nconst ConnectionQuality$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.ConnectionQuality\", [{\n  no: 0,\n  name: \"POOR\"\n}, {\n  no: 1,\n  name: \"GOOD\"\n}, {\n  no: 2,\n  name: \"EXCELLENT\"\n}, {\n  no: 3,\n  name: \"LOST\"\n}]);\nconst ClientConfigSetting = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientConfigSetting\", [{\n  no: 0,\n  name: \"UNSET\"\n}, {\n  no: 1,\n  name: \"DISABLED\"\n}, {\n  no: 2,\n  name: \"ENABLED\"\n}]);\nconst DisconnectReason = /* @__PURE__ */proto3.makeEnum(\"livekit.DisconnectReason\", [{\n  no: 0,\n  name: \"UNKNOWN_REASON\"\n}, {\n  no: 1,\n  name: \"CLIENT_INITIATED\"\n}, {\n  no: 2,\n  name: \"DUPLICATE_IDENTITY\"\n}, {\n  no: 3,\n  name: \"SERVER_SHUTDOWN\"\n}, {\n  no: 4,\n  name: \"PARTICIPANT_REMOVED\"\n}, {\n  no: 5,\n  name: \"ROOM_DELETED\"\n}, {\n  no: 6,\n  name: \"STATE_MISMATCH\"\n}, {\n  no: 7,\n  name: \"JOIN_FAILURE\"\n}, {\n  no: 8,\n  name: \"MIGRATION\"\n}, {\n  no: 9,\n  name: \"SIGNAL_CLOSE\"\n}, {\n  no: 10,\n  name: \"ROOM_CLOSED\"\n}, {\n  no: 11,\n  name: \"USER_UNAVAILABLE\"\n}, {\n  no: 12,\n  name: \"USER_REJECTED\"\n}, {\n  no: 13,\n  name: \"SIP_TRUNK_FAILURE\"\n}, {\n  no: 14,\n  name: \"CONNECTION_TIMEOUT\"\n}, {\n  no: 15,\n  name: \"MEDIA_FAILURE\"\n}, {\n  no: 16,\n  name: \"AGENT_ERROR\"\n}]);\nconst ReconnectReason = /* @__PURE__ */proto3.makeEnum(\"livekit.ReconnectReason\", [{\n  no: 0,\n  name: \"RR_UNKNOWN\"\n}, {\n  no: 1,\n  name: \"RR_SIGNAL_DISCONNECTED\"\n}, {\n  no: 2,\n  name: \"RR_PUBLISHER_FAILED\"\n}, {\n  no: 3,\n  name: \"RR_SUBSCRIBER_FAILED\"\n}, {\n  no: 4,\n  name: \"RR_SWITCH_CANDIDATE\"\n}]);\nconst SubscriptionError = /* @__PURE__ */proto3.makeEnum(\"livekit.SubscriptionError\", [{\n  no: 0,\n  name: \"SE_UNKNOWN\"\n}, {\n  no: 1,\n  name: \"SE_CODEC_UNSUPPORTED\"\n}, {\n  no: 2,\n  name: \"SE_TRACK_NOTFOUND\"\n}]);\nconst AudioTrackFeature = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioTrackFeature\", [{\n  no: 0,\n  name: \"TF_STEREO\"\n}, {\n  no: 1,\n  name: \"TF_NO_DTX\"\n}, {\n  no: 2,\n  name: \"TF_AUTO_GAIN_CONTROL\"\n}, {\n  no: 3,\n  name: \"TF_ECHO_CANCELLATION\"\n}, {\n  no: 4,\n  name: \"TF_NOISE_SUPPRESSION\"\n}, {\n  no: 5,\n  name: \"TF_ENHANCED_NOISE_CANCELLATION\"\n}, {\n  no: 6,\n  name: \"TF_PRECONNECT_BUFFER\"\n}]);\nconst PacketTrailerFeature = /* @__PURE__ */proto3.makeEnum(\"livekit.PacketTrailerFeature\", [{\n  no: 0,\n  name: \"PTF_USER_TIMESTAMP\"\n}, {\n  no: 1,\n  name: \"PTF_FRAME_ID\"\n}]);\nconst Room$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.Room\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"empty_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 14,\n  name: \"departure_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"max_participants\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"creation_time\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 15,\n  name: \"creation_time_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 6,\n  name: \"turn_password\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 7,\n  name: \"enabled_codecs\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}, {\n  no: 8,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"num_participants\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 11,\n  name: \"num_publishers\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 10,\n  name: \"active_recording\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 13,\n  name: \"version\",\n  kind: \"message\",\n  T: TimedVersion\n}]);\nconst Codec = /* @__PURE__ */proto3.makeMessageType(\"livekit.Codec\", () => [{\n  no: 1,\n  name: \"mime\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"fmtp_line\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ParticipantPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantPermission\", () => [{\n  no: 1,\n  name: \"can_subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"can_publish\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"can_publish_data\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 9,\n  name: \"can_publish_sources\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackSource),\n  repeated: true\n}, {\n  no: 7,\n  name: \"hidden\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"recorder\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 10,\n  name: \"can_update_metadata\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 11,\n  name: \"agent\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 12,\n  name: \"can_subscribe_metrics\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 13,\n  name: \"can_manage_agent_session\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst ParticipantInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantInfo\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"state\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ParticipantInfo_State)\n}, {\n  no: 4,\n  name: \"tracks\",\n  kind: \"message\",\n  T: TrackInfo,\n  repeated: true\n}, {\n  no: 5,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"joined_at\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 17,\n  name: \"joined_at_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 9,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 11,\n  name: \"permission\",\n  kind: \"message\",\n  T: ParticipantPermission\n}, {\n  no: 12,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 13,\n  name: \"is_publisher\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 14,\n  name: \"kind\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ParticipantInfo_Kind)\n}, {\n  no: 15,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 16,\n  name: \"disconnect_reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DisconnectReason)\n}, {\n  no: 18,\n  name: \"kind_details\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ParticipantInfo_KindDetail),\n  repeated: true\n}, {\n  no: 19,\n  name: \"data_tracks\",\n  kind: \"message\",\n  T: DataTrackInfo$1,\n  repeated: true\n}, {\n  no: 20,\n  name: \"client_protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}]);\nconst ParticipantInfo_State = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.State\", [{\n  no: 0,\n  name: \"JOINING\"\n}, {\n  no: 1,\n  name: \"JOINED\"\n}, {\n  no: 2,\n  name: \"ACTIVE\"\n}, {\n  no: 3,\n  name: \"DISCONNECTED\"\n}]);\nconst ParticipantInfo_Kind = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.Kind\", [{\n  no: 0,\n  name: \"STANDARD\"\n}, {\n  no: 1,\n  name: \"INGRESS\"\n}, {\n  no: 2,\n  name: \"EGRESS\"\n}, {\n  no: 3,\n  name: \"SIP\"\n}, {\n  no: 4,\n  name: \"AGENT\"\n}, {\n  no: 7,\n  name: \"CONNECTOR\"\n}, {\n  no: 8,\n  name: \"BRIDGE\"\n}]);\nconst ParticipantInfo_KindDetail = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.KindDetail\", [{\n  no: 0,\n  name: \"CLOUD_AGENT\"\n}, {\n  no: 1,\n  name: \"FORWARDED\"\n}, {\n  no: 2,\n  name: \"CONNECTOR_WHATSAPP\"\n}, {\n  no: 3,\n  name: \"CONNECTOR_TWILIO\"\n}, {\n  no: 4,\n  name: \"BRIDGE_RTSP\"\n}]);\nconst Encryption_Type = /* @__PURE__ */proto3.makeEnum(\"livekit.Encryption.Type\", [{\n  no: 0,\n  name: \"NONE\"\n}, {\n  no: 1,\n  name: \"GCM\"\n}, {\n  no: 2,\n  name: \"CUSTOM\"\n}]);\nconst SimulcastCodecInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulcastCodecInfo\", () => [{\n  no: 1,\n  name: \"mime_type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"mid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 5,\n  name: \"video_layer_mode\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoLayer_Mode)\n}, {\n  no: 6,\n  name: \"sdp_cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst TrackInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackInfo\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackType)\n}, {\n  no: 3,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"muted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 7,\n  name: \"simulcast\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"disable_dtx\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 9,\n  name: \"source\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackSource)\n}, {\n  no: 10,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 11,\n  name: \"mime_type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"mid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 13,\n  name: \"codecs\",\n  kind: \"message\",\n  T: SimulcastCodecInfo,\n  repeated: true\n}, {\n  no: 14,\n  name: \"stereo\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 15,\n  name: \"disable_red\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 16,\n  name: \"encryption\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 17,\n  name: \"stream\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 18,\n  name: \"version\",\n  kind: \"message\",\n  T: TimedVersion\n}, {\n  no: 19,\n  name: \"audio_features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioTrackFeature),\n  repeated: true\n}, {\n  no: 20,\n  name: \"backup_codec_policy\",\n  kind: \"enum\",\n  T: proto3.getEnumType(BackupCodecPolicy$1)\n}, {\n  no: 21,\n  name: \"packet_trailer_features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(PacketTrailerFeature),\n  repeated: true\n}]);\nconst DataTrackInfo$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackInfo\", () => [{\n  no: 1,\n  name: \"pub_handle\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"encryption\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}]);\nconst DataTrackSubscriptionOptions = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackSubscriptionOptions\", () => [{\n  no: 1,\n  name: \"target_fps\",\n  kind: \"scalar\",\n  T: 13,\n  opt: true\n}]);\nconst VideoLayer = /* @__PURE__ */proto3.makeMessageType(\"livekit.VideoLayer\", () => [{\n  no: 1,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoQuality$1)\n}, {\n  no: 2,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"bitrate\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"ssrc\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"spatial_layer\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 7,\n  name: \"rid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 8,\n  name: \"repair_ssrc\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst VideoLayer_Mode = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoLayer.Mode\", [{\n  no: 0,\n  name: \"MODE_UNUSED\"\n}, {\n  no: 1,\n  name: \"ONE_SPATIAL_LAYER_PER_STREAM\"\n}, {\n  no: 2,\n  name: \"MULTIPLE_SPATIAL_LAYERS_PER_STREAM\"\n}, {\n  no: 3,\n  name: \"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR\"\n}]);\nconst DataPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataPacket\", () => [{\n  no: 1,\n  name: \"kind\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DataPacket_Kind)\n}, {\n  no: 4,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"destination_identities\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"user\",\n  kind: \"message\",\n  T: UserPacket,\n  oneof: \"value\"\n}, {\n  no: 3,\n  name: \"speaker\",\n  kind: \"message\",\n  T: ActiveSpeakerUpdate,\n  oneof: \"value\"\n}, {\n  no: 6,\n  name: \"sip_dtmf\",\n  kind: \"message\",\n  T: SipDTMF,\n  oneof: \"value\"\n}, {\n  no: 7,\n  name: \"transcription\",\n  kind: \"message\",\n  T: Transcription,\n  oneof: \"value\"\n}, {\n  no: 8,\n  name: \"metrics\",\n  kind: \"message\",\n  T: MetricsBatch,\n  oneof: \"value\"\n}, {\n  no: 9,\n  name: \"chat_message\",\n  kind: \"message\",\n  T: ChatMessage,\n  oneof: \"value\"\n}, {\n  no: 10,\n  name: \"rpc_request\",\n  kind: \"message\",\n  T: RpcRequest,\n  oneof: \"value\"\n}, {\n  no: 11,\n  name: \"rpc_ack\",\n  kind: \"message\",\n  T: RpcAck,\n  oneof: \"value\"\n}, {\n  no: 12,\n  name: \"rpc_response\",\n  kind: \"message\",\n  T: RpcResponse,\n  oneof: \"value\"\n}, {\n  no: 13,\n  name: \"stream_header\",\n  kind: \"message\",\n  T: DataStream_Header,\n  oneof: \"value\"\n}, {\n  no: 14,\n  name: \"stream_chunk\",\n  kind: \"message\",\n  T: DataStream_Chunk,\n  oneof: \"value\"\n}, {\n  no: 15,\n  name: \"stream_trailer\",\n  kind: \"message\",\n  T: DataStream_Trailer,\n  oneof: \"value\"\n}, {\n  no: 18,\n  name: \"encrypted_packet\",\n  kind: \"message\",\n  T: EncryptedPacket,\n  oneof: \"value\"\n}, {\n  no: 16,\n  name: \"sequence\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 17,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst DataPacket_Kind = /* @__PURE__ */proto3.makeEnum(\"livekit.DataPacket.Kind\", [{\n  no: 0,\n  name: \"RELIABLE\"\n}, {\n  no: 1,\n  name: \"LOSSY\"\n}]);\nconst EncryptedPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncryptedPacket\", () => [{\n  no: 1,\n  name: \"encryption_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 2,\n  name: \"iv\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 3,\n  name: \"key_index\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"encrypted_value\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst EncryptedPacketPayload = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncryptedPacketPayload\", () => [{\n  no: 1,\n  name: \"user\",\n  kind: \"message\",\n  T: UserPacket,\n  oneof: \"value\"\n}, {\n  no: 3,\n  name: \"chat_message\",\n  kind: \"message\",\n  T: ChatMessage,\n  oneof: \"value\"\n}, {\n  no: 4,\n  name: \"rpc_request\",\n  kind: \"message\",\n  T: RpcRequest,\n  oneof: \"value\"\n}, {\n  no: 5,\n  name: \"rpc_ack\",\n  kind: \"message\",\n  T: RpcAck,\n  oneof: \"value\"\n}, {\n  no: 6,\n  name: \"rpc_response\",\n  kind: \"message\",\n  T: RpcResponse,\n  oneof: \"value\"\n}, {\n  no: 7,\n  name: \"stream_header\",\n  kind: \"message\",\n  T: DataStream_Header,\n  oneof: \"value\"\n}, {\n  no: 8,\n  name: \"stream_chunk\",\n  kind: \"message\",\n  T: DataStream_Chunk,\n  oneof: \"value\"\n}, {\n  no: 9,\n  name: \"stream_trailer\",\n  kind: \"message\",\n  T: DataStream_Trailer,\n  oneof: \"value\"\n}]);\nconst ActiveSpeakerUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ActiveSpeakerUpdate\", () => [{\n  no: 1,\n  name: \"speakers\",\n  kind: \"message\",\n  T: SpeakerInfo,\n  repeated: true\n}]);\nconst SpeakerInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.SpeakerInfo\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"level\",\n  kind: \"scalar\",\n  T: 2\n  /* ScalarType.FLOAT */\n}, {\n  no: 3,\n  name: \"active\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst UserPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.UserPacket\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"payload\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 3,\n  name: \"destination_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 6,\n  name: \"destination_identities\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 4,\n  name: \"topic\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 8,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 9,\n  name: \"start_time\",\n  kind: \"scalar\",\n  T: 4,\n  opt: true\n}, {\n  no: 10,\n  name: \"end_time\",\n  kind: \"scalar\",\n  T: 4,\n  opt: true\n}, {\n  no: 11,\n  name: \"nonce\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst SipDTMF = /* @__PURE__ */proto3.makeMessageType(\"livekit.SipDTMF\", () => [{\n  no: 3,\n  name: \"code\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"digit\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst Transcription = /* @__PURE__ */proto3.makeMessageType(\"livekit.Transcription\", () => [{\n  no: 2,\n  name: \"transcribed_participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"track_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"segments\",\n  kind: \"message\",\n  T: TranscriptionSegment,\n  repeated: true\n}]);\nconst TranscriptionSegment = /* @__PURE__ */proto3.makeMessageType(\"livekit.TranscriptionSegment\", () => [{\n  no: 1,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"text\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"start_time\",\n  kind: \"scalar\",\n  T: 4\n  /* ScalarType.UINT64 */\n}, {\n  no: 4,\n  name: \"end_time\",\n  kind: \"scalar\",\n  T: 4\n  /* ScalarType.UINT64 */\n}, {\n  no: 5,\n  name: \"final\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 6,\n  name: \"language\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ChatMessage = /* @__PURE__ */proto3.makeMessageType(\"livekit.ChatMessage\", () => [{\n  no: 1,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 3,\n  name: \"edit_timestamp\",\n  kind: \"scalar\",\n  T: 3,\n  opt: true\n}, {\n  no: 4,\n  name: \"message\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"deleted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 6,\n  name: \"generated\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst RpcRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcRequest\", () => [{\n  no: 1,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"method\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"payload\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"response_timeout_ms\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"compressed_payload\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst RpcAck = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcAck\", () => [{\n  no: 1,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst RpcResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcResponse\", () => [{\n  no: 1,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"payload\",\n  kind: \"scalar\",\n  T: 9,\n  oneof: \"value\"\n}, {\n  no: 3,\n  name: \"error\",\n  kind: \"message\",\n  T: RpcError$1,\n  oneof: \"value\"\n}, {\n  no: 4,\n  name: \"compressed_payload\",\n  kind: \"scalar\",\n  T: 12,\n  oneof: \"value\"\n}]);\nconst RpcError$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcError\", () => [{\n  no: 1,\n  name: \"code\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"message\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"data\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ParticipantTracks = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantTracks\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}]);\nconst ServerInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ServerInfo\", () => [{\n  no: 1,\n  name: \"edition\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ServerInfo_Edition)\n}, {\n  no: 2,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"node_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"debug_info\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 7,\n  name: \"agent_protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}]);\nconst ServerInfo_Edition = /* @__PURE__ */proto3.makeEnum(\"livekit.ServerInfo.Edition\", [{\n  no: 0,\n  name: \"Standard\"\n}, {\n  no: 1,\n  name: \"Cloud\"\n}]);\nconst ClientInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ClientInfo\", () => [{\n  no: 1,\n  name: \"sdk\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientInfo_SDK)\n}, {\n  no: 2,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"os\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"os_version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"device_model\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 7,\n  name: \"browser\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 8,\n  name: \"browser_version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"address\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"network\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 11,\n  name: \"other_sdks\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"client_protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 13,\n  name: \"capabilities\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientInfo_Capability),\n  repeated: true\n}]);\nconst ClientInfo_SDK = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientInfo.SDK\", [{\n  no: 0,\n  name: \"UNKNOWN\"\n}, {\n  no: 1,\n  name: \"JS\"\n}, {\n  no: 2,\n  name: \"SWIFT\"\n}, {\n  no: 3,\n  name: \"ANDROID\"\n}, {\n  no: 4,\n  name: \"FLUTTER\"\n}, {\n  no: 5,\n  name: \"GO\"\n}, {\n  no: 6,\n  name: \"UNITY\"\n}, {\n  no: 7,\n  name: \"REACT_NATIVE\"\n}, {\n  no: 8,\n  name: \"RUST\"\n}, {\n  no: 9,\n  name: \"PYTHON\"\n}, {\n  no: 10,\n  name: \"CPP\"\n}, {\n  no: 11,\n  name: \"UNITY_WEB\"\n}, {\n  no: 12,\n  name: \"NODE\"\n}, {\n  no: 13,\n  name: \"UNREAL\"\n}, {\n  no: 14,\n  name: \"ESP32\"\n}]);\nconst ClientInfo_Capability = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientInfo.Capability\", [{\n  no: 0,\n  name: \"CAP_UNUSED\"\n}, {\n  no: 1,\n  name: \"CAP_PACKET_TRAILER\"\n}]);\nconst ClientConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.ClientConfiguration\", () => [{\n  no: 1,\n  name: \"video\",\n  kind: \"message\",\n  T: VideoConfiguration\n}, {\n  no: 2,\n  name: \"screen\",\n  kind: \"message\",\n  T: VideoConfiguration\n}, {\n  no: 3,\n  name: \"resume_connection\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientConfigSetting)\n}, {\n  no: 4,\n  name: \"disabled_codecs\",\n  kind: \"message\",\n  T: DisabledCodecs\n}, {\n  no: 5,\n  name: \"force_relay\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientConfigSetting)\n}]);\nconst VideoConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.VideoConfiguration\", () => [{\n  no: 1,\n  name: \"hardware_encoder\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientConfigSetting)\n}]);\nconst DisabledCodecs = /* @__PURE__ */proto3.makeMessageType(\"livekit.DisabledCodecs\", () => [{\n  no: 1,\n  name: \"codecs\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}, {\n  no: 2,\n  name: \"publish\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}]);\nconst TimedVersion = /* @__PURE__ */proto3.makeMessageType(\"livekit.TimedVersion\", () => [{\n  no: 1,\n  name: \"unix_micro\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"ticks\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}]);\nconst DataStream_OperationType = /* @__PURE__ */proto3.makeEnum(\"livekit.DataStream.OperationType\", [{\n  no: 0,\n  name: \"CREATE\"\n}, {\n  no: 1,\n  name: \"UPDATE\"\n}, {\n  no: 2,\n  name: \"DELETE\"\n}, {\n  no: 3,\n  name: \"REACTION\"\n}]);\nconst DataStream_TextHeader = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.TextHeader\", () => [{\n  no: 1,\n  name: \"operation_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DataStream_OperationType)\n}, {\n  no: 2,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 3,\n  name: \"reply_to_stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"attached_stream_ids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 5,\n  name: \"generated\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}], {\n  localName: \"DataStream_TextHeader\"\n});\nconst DataStream_ByteHeader = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.ByteHeader\", () => [{\n  no: 1,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}], {\n  localName: \"DataStream_ByteHeader\"\n});\nconst DataStream_Header = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Header\", () => [{\n  no: 1,\n  name: \"stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 3,\n  name: \"topic\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"mime_type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"total_length\",\n  kind: \"scalar\",\n  T: 4,\n  opt: true\n}, {\n  no: 7,\n  name: \"encryption_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 8,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 9,\n  name: \"text_header\",\n  kind: \"message\",\n  T: DataStream_TextHeader,\n  oneof: \"content_header\"\n}, {\n  no: 10,\n  name: \"byte_header\",\n  kind: \"message\",\n  T: DataStream_ByteHeader,\n  oneof: \"content_header\"\n}], {\n  localName: \"DataStream_Header\"\n});\nconst DataStream_Chunk = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Chunk\", () => [{\n  no: 1,\n  name: \"stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"chunk_index\",\n  kind: \"scalar\",\n  T: 4\n  /* ScalarType.UINT64 */\n}, {\n  no: 3,\n  name: \"content\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 4,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 5,\n  name: \"iv\",\n  kind: \"scalar\",\n  T: 12,\n  opt: true\n}], {\n  localName: \"DataStream_Chunk\"\n});\nconst DataStream_Trailer = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Trailer\", () => [{\n  no: 1,\n  name: \"stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"reason\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}], {\n  localName: \"DataStream_Trailer\"\n});\nconst FilterParams = /* @__PURE__ */proto3.makeMessageType(\"livekit.FilterParams\", () => [{\n  no: 1,\n  name: \"include_events\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"exclude_events\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}]);\nconst WebhookConfig = /* @__PURE__ */proto3.makeMessageType(\"livekit.WebhookConfig\", () => [{\n  no: 1,\n  name: \"url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"signing_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"filter_params\",\n  kind: \"message\",\n  T: FilterParams\n}]);\nconst SubscribedAudioCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedAudioCodec\", () => [{\n  no: 1,\n  name: \"codec\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"enabled\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst JobRestartPolicy = /* @__PURE__ */proto3.makeEnum(\"livekit.JobRestartPolicy\", [{\n  no: 0,\n  name: \"JRP_ON_FAILURE\"\n}, {\n  no: 1,\n  name: \"JRP_NEVER\"\n}]);\nconst RoomAgentDispatch = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomAgentDispatch\", () => [{\n  no: 1,\n  name: \"agent_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"restart_policy\",\n  kind: \"enum\",\n  T: proto3.getEnumType(JobRestartPolicy)\n}, {\n  no: 4,\n  name: \"deployment\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst EncodingOptionsPreset = /* @__PURE__ */proto3.makeEnum(\"livekit.EncodingOptionsPreset\", [{\n  no: 0,\n  name: \"H264_720P_30\"\n}, {\n  no: 1,\n  name: \"H264_720P_60\"\n}, {\n  no: 2,\n  name: \"H264_1080P_30\"\n}, {\n  no: 3,\n  name: \"H264_1080P_60\"\n}, {\n  no: 4,\n  name: \"PORTRAIT_H264_720P_30\"\n}, {\n  no: 5,\n  name: \"PORTRAIT_H264_720P_60\"\n}, {\n  no: 6,\n  name: \"PORTRAIT_H264_1080P_30\"\n}, {\n  no: 7,\n  name: \"PORTRAIT_H264_1080P_60\"\n}]);\nconst EncodedFileType = /* @__PURE__ */proto3.makeEnum(\"livekit.EncodedFileType\", [{\n  no: 0,\n  name: \"DEFAULT_FILETYPE\"\n}, {\n  no: 1,\n  name: \"MP4\"\n}, {\n  no: 2,\n  name: \"OGG\"\n}, {\n  no: 3,\n  name: \"MP3\"\n}]);\nconst StreamProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.StreamProtocol\", [{\n  no: 0,\n  name: \"DEFAULT_PROTOCOL\"\n}, {\n  no: 1,\n  name: \"RTMP\"\n}, {\n  no: 2,\n  name: \"SRT\"\n}, {\n  no: 3,\n  name: \"WEBSOCKET\"\n}]);\nconst SegmentedFileProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.SegmentedFileProtocol\", [{\n  no: 0,\n  name: \"DEFAULT_SEGMENTED_FILE_PROTOCOL\"\n}, {\n  no: 1,\n  name: \"HLS_PROTOCOL\"\n}]);\nconst SegmentedFileSuffix = /* @__PURE__ */proto3.makeEnum(\"livekit.SegmentedFileSuffix\", [{\n  no: 0,\n  name: \"INDEX\"\n}, {\n  no: 1,\n  name: \"TIMESTAMP\"\n}]);\nconst ImageFileSuffix = /* @__PURE__ */proto3.makeEnum(\"livekit.ImageFileSuffix\", [{\n  no: 0,\n  name: \"IMAGE_SUFFIX_INDEX\"\n}, {\n  no: 1,\n  name: \"IMAGE_SUFFIX_TIMESTAMP\"\n}, {\n  no: 2,\n  name: \"IMAGE_SUFFIX_NONE_OVERWRITE\"\n}]);\nconst AudioMixing = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioMixing\", [{\n  no: 0,\n  name: \"DEFAULT_MIXING\"\n}, {\n  no: 1,\n  name: \"DUAL_CHANNEL_AGENT\"\n}, {\n  no: 2,\n  name: \"DUAL_CHANNEL_ALTERNATE\"\n}]);\nconst EncodingOptions = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncodingOptions\", () => [{\n  no: 1,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 2,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 3,\n  name: \"depth\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"framerate\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 5,\n  name: \"audio_codec\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioCodec)\n}, {\n  no: 6,\n  name: \"audio_bitrate\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 7,\n  name: \"audio_frequency\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 8,\n  name: \"video_codec\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoCodec)\n}, {\n  no: 9,\n  name: \"video_bitrate\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 10,\n  name: \"key_frame_interval\",\n  kind: \"scalar\",\n  T: 1\n  /* ScalarType.DOUBLE */\n}, {\n  no: 11,\n  name: \"audio_quality\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 12,\n  name: \"video_quality\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}]);\nconst StreamOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamOutput\", () => [{\n  no: 1,\n  name: \"protocol\",\n  kind: \"enum\",\n  T: proto3.getEnumType(StreamProtocol)\n}, {\n  no: 2,\n  name: \"urls\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}]);\nconst SegmentedFileOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.SegmentedFileOutput\", () => [{\n  no: 1,\n  name: \"protocol\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SegmentedFileProtocol)\n}, {\n  no: 2,\n  name: \"filename_prefix\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"playlist_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 11,\n  name: \"live_playlist_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"segment_duration\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 10,\n  name: \"filename_suffix\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SegmentedFileSuffix)\n}, {\n  no: 8,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 6,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 7,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 9,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst ImageOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.ImageOutput\", () => [{\n  no: 1,\n  name: \"capture_interval\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 3,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"filename_prefix\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"filename_suffix\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ImageFileSuffix)\n}, {\n  no: 6,\n  name: \"image_codec\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ImageCodec)\n}, {\n  no: 7,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 9,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 10,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 11,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst S3Upload = /* @__PURE__ */proto3.makeMessageType(\"livekit.S3Upload\", () => [{\n  no: 1,\n  name: \"access_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"secret\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 11,\n  name: \"session_token\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"assume_role_arn\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 13,\n  name: \"assume_role_external_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"endpoint\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"bucket\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"force_path_style\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 7,\n  name: \"metadata\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 8,\n  name: \"tagging\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"content_disposition\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"proxy\",\n  kind: \"message\",\n  T: ProxyConfig\n}]);\nconst GCPUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.GCPUpload\", () => [{\n  no: 1,\n  name: \"credentials\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"bucket\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"proxy\",\n  kind: \"message\",\n  T: ProxyConfig\n}]);\nconst AzureBlobUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.AzureBlobUpload\", () => [{\n  no: 1,\n  name: \"account_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"account_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"container_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst AliOSSUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.AliOSSUpload\", () => [{\n  no: 1,\n  name: \"access_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"secret\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"endpoint\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"bucket\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ProxyConfig = /* @__PURE__ */proto3.makeMessageType(\"livekit.ProxyConfig\", () => [{\n  no: 1,\n  name: \"url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"username\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"password\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst AutoParticipantEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.AutoParticipantEgress\", () => [{\n  no: 1,\n  name: \"preset\",\n  kind: \"enum\",\n  T: proto3.getEnumType(EncodingOptionsPreset),\n  oneof: \"options\"\n}, {\n  no: 2,\n  name: \"advanced\",\n  kind: \"message\",\n  T: EncodingOptions,\n  oneof: \"options\"\n}, {\n  no: 3,\n  name: \"file_outputs\",\n  kind: \"message\",\n  T: EncodedFileOutput,\n  repeated: true\n}, {\n  no: 4,\n  name: \"segment_outputs\",\n  kind: \"message\",\n  T: SegmentedFileOutput,\n  repeated: true\n}]);\nconst AutoTrackEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.AutoTrackEgress\", () => [{\n  no: 1,\n  name: \"filepath\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 3,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 4,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 6,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst RoomCompositeEgressRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomCompositeEgressRequest\", () => [{\n  no: 1,\n  name: \"room_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"layout\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"audio_only\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 15,\n  name: \"audio_mixing\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioMixing)\n}, {\n  no: 4,\n  name: \"video_only\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"custom_base_url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"file\",\n  kind: \"message\",\n  T: EncodedFileOutput,\n  oneof: \"output\"\n}, {\n  no: 7,\n  name: \"stream\",\n  kind: \"message\",\n  T: StreamOutput,\n  oneof: \"output\"\n}, {\n  no: 10,\n  name: \"segments\",\n  kind: \"message\",\n  T: SegmentedFileOutput,\n  oneof: \"output\"\n}, {\n  no: 8,\n  name: \"preset\",\n  kind: \"enum\",\n  T: proto3.getEnumType(EncodingOptionsPreset),\n  oneof: \"options\"\n}, {\n  no: 9,\n  name: \"advanced\",\n  kind: \"message\",\n  T: EncodingOptions,\n  oneof: \"options\"\n}, {\n  no: 11,\n  name: \"file_outputs\",\n  kind: \"message\",\n  T: EncodedFileOutput,\n  repeated: true\n}, {\n  no: 12,\n  name: \"stream_outputs\",\n  kind: \"message\",\n  T: StreamOutput,\n  repeated: true\n}, {\n  no: 13,\n  name: \"segment_outputs\",\n  kind: \"message\",\n  T: SegmentedFileOutput,\n  repeated: true\n}, {\n  no: 14,\n  name: \"image_outputs\",\n  kind: \"message\",\n  T: ImageOutput,\n  repeated: true\n}, {\n  no: 16,\n  name: \"webhooks\",\n  kind: \"message\",\n  T: WebhookConfig,\n  repeated: true\n}]);\nconst EncodedFileOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncodedFileOutput\", () => [{\n  no: 1,\n  name: \"file_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(EncodedFileType)\n}, {\n  no: 2,\n  name: \"filepath\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 4,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 5,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 7,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst RoomEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomEgress\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: RoomCompositeEgressRequest\n}, {\n  no: 3,\n  name: \"participant\",\n  kind: \"message\",\n  T: AutoParticipantEgress\n}, {\n  no: 2,\n  name: \"tracks\",\n  kind: \"message\",\n  T: AutoTrackEgress\n}]);\nconst RoomConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomConfiguration\", () => [{\n  no: 1,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"empty_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"departure_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"max_participants\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 11,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"egress\",\n  kind: \"message\",\n  T: RoomEgress\n}, {\n  no: 7,\n  name: \"min_playout_delay\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 8,\n  name: \"max_playout_delay\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 9,\n  name: \"sync_streams\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 10,\n  name: \"agents\",\n  kind: \"message\",\n  T: RoomAgentDispatch,\n  repeated: true\n}, {\n  no: 12,\n  name: \"tags\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}]);\nconst SignalTarget = /* @__PURE__ */proto3.makeEnum(\"livekit.SignalTarget\", [{\n  no: 0,\n  name: \"PUBLISHER\"\n}, {\n  no: 1,\n  name: \"SUBSCRIBER\"\n}]);\nconst StreamState = /* @__PURE__ */proto3.makeEnum(\"livekit.StreamState\", [{\n  no: 0,\n  name: \"ACTIVE\"\n}, {\n  no: 1,\n  name: \"PAUSED\"\n}]);\nconst CandidateProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.CandidateProtocol\", [{\n  no: 0,\n  name: \"UDP\"\n}, {\n  no: 1,\n  name: \"TCP\"\n}, {\n  no: 2,\n  name: \"TLS\"\n}]);\nconst SignalRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.SignalRequest\", () => [{\n  no: 1,\n  name: \"offer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 2,\n  name: \"answer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 3,\n  name: \"trickle\",\n  kind: \"message\",\n  T: TrickleRequest,\n  oneof: \"message\"\n}, {\n  no: 4,\n  name: \"add_track\",\n  kind: \"message\",\n  T: AddTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 5,\n  name: \"mute\",\n  kind: \"message\",\n  T: MuteTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 6,\n  name: \"subscription\",\n  kind: \"message\",\n  T: UpdateSubscription,\n  oneof: \"message\"\n}, {\n  no: 7,\n  name: \"track_setting\",\n  kind: \"message\",\n  T: UpdateTrackSettings,\n  oneof: \"message\"\n}, {\n  no: 8,\n  name: \"leave\",\n  kind: \"message\",\n  T: LeaveRequest,\n  oneof: \"message\"\n}, {\n  no: 10,\n  name: \"update_layers\",\n  kind: \"message\",\n  T: UpdateVideoLayers,\n  oneof: \"message\"\n}, {\n  no: 11,\n  name: \"subscription_permission\",\n  kind: \"message\",\n  T: SubscriptionPermission,\n  oneof: \"message\"\n}, {\n  no: 12,\n  name: \"sync_state\",\n  kind: \"message\",\n  T: SyncState,\n  oneof: \"message\"\n}, {\n  no: 13,\n  name: \"simulate\",\n  kind: \"message\",\n  T: SimulateScenario,\n  oneof: \"message\"\n}, {\n  no: 14,\n  name: \"ping\",\n  kind: \"scalar\",\n  T: 3,\n  oneof: \"message\"\n}, {\n  no: 15,\n  name: \"update_metadata\",\n  kind: \"message\",\n  T: UpdateParticipantMetadata,\n  oneof: \"message\"\n}, {\n  no: 16,\n  name: \"ping_req\",\n  kind: \"message\",\n  T: Ping,\n  oneof: \"message\"\n}, {\n  no: 17,\n  name: \"update_audio_track\",\n  kind: \"message\",\n  T: UpdateLocalAudioTrack,\n  oneof: \"message\"\n}, {\n  no: 18,\n  name: \"update_video_track\",\n  kind: \"message\",\n  T: UpdateLocalVideoTrack,\n  oneof: \"message\"\n}, {\n  no: 19,\n  name: \"publish_data_track_request\",\n  kind: \"message\",\n  T: PublishDataTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 20,\n  name: \"unpublish_data_track_request\",\n  kind: \"message\",\n  T: UnpublishDataTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 21,\n  name: \"update_data_subscription\",\n  kind: \"message\",\n  T: UpdateDataSubscription,\n  oneof: \"message\"\n}]);\nconst SignalResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.SignalResponse\", () => [{\n  no: 1,\n  name: \"join\",\n  kind: \"message\",\n  T: JoinResponse,\n  oneof: \"message\"\n}, {\n  no: 2,\n  name: \"answer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 3,\n  name: \"offer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 4,\n  name: \"trickle\",\n  kind: \"message\",\n  T: TrickleRequest,\n  oneof: \"message\"\n}, {\n  no: 5,\n  name: \"update\",\n  kind: \"message\",\n  T: ParticipantUpdate,\n  oneof: \"message\"\n}, {\n  no: 6,\n  name: \"track_published\",\n  kind: \"message\",\n  T: TrackPublishedResponse,\n  oneof: \"message\"\n}, {\n  no: 8,\n  name: \"leave\",\n  kind: \"message\",\n  T: LeaveRequest,\n  oneof: \"message\"\n}, {\n  no: 9,\n  name: \"mute\",\n  kind: \"message\",\n  T: MuteTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 10,\n  name: \"speakers_changed\",\n  kind: \"message\",\n  T: SpeakersChanged,\n  oneof: \"message\"\n}, {\n  no: 11,\n  name: \"room_update\",\n  kind: \"message\",\n  T: RoomUpdate,\n  oneof: \"message\"\n}, {\n  no: 12,\n  name: \"connection_quality\",\n  kind: \"message\",\n  T: ConnectionQualityUpdate,\n  oneof: \"message\"\n}, {\n  no: 13,\n  name: \"stream_state_update\",\n  kind: \"message\",\n  T: StreamStateUpdate,\n  oneof: \"message\"\n}, {\n  no: 14,\n  name: \"subscribed_quality_update\",\n  kind: \"message\",\n  T: SubscribedQualityUpdate,\n  oneof: \"message\"\n}, {\n  no: 15,\n  name: \"subscription_permission_update\",\n  kind: \"message\",\n  T: SubscriptionPermissionUpdate,\n  oneof: \"message\"\n}, {\n  no: 16,\n  name: \"refresh_token\",\n  kind: \"scalar\",\n  T: 9,\n  oneof: \"message\"\n}, {\n  no: 17,\n  name: \"track_unpublished\",\n  kind: \"message\",\n  T: TrackUnpublishedResponse,\n  oneof: \"message\"\n}, {\n  no: 18,\n  name: \"pong\",\n  kind: \"scalar\",\n  T: 3,\n  oneof: \"message\"\n}, {\n  no: 19,\n  name: \"reconnect\",\n  kind: \"message\",\n  T: ReconnectResponse,\n  oneof: \"message\"\n}, {\n  no: 20,\n  name: \"pong_resp\",\n  kind: \"message\",\n  T: Pong,\n  oneof: \"message\"\n}, {\n  no: 21,\n  name: \"subscription_response\",\n  kind: \"message\",\n  T: SubscriptionResponse,\n  oneof: \"message\"\n}, {\n  no: 22,\n  name: \"request_response\",\n  kind: \"message\",\n  T: RequestResponse,\n  oneof: \"message\"\n}, {\n  no: 23,\n  name: \"track_subscribed\",\n  kind: \"message\",\n  T: TrackSubscribed,\n  oneof: \"message\"\n}, {\n  no: 24,\n  name: \"room_moved\",\n  kind: \"message\",\n  T: RoomMovedResponse,\n  oneof: \"message\"\n}, {\n  no: 25,\n  name: \"media_sections_requirement\",\n  kind: \"message\",\n  T: MediaSectionsRequirement,\n  oneof: \"message\"\n}, {\n  no: 26,\n  name: \"subscribed_audio_codec_update\",\n  kind: \"message\",\n  T: SubscribedAudioCodecUpdate,\n  oneof: \"message\"\n}, {\n  no: 27,\n  name: \"publish_data_track_response\",\n  kind: \"message\",\n  T: PublishDataTrackResponse,\n  oneof: \"message\"\n}, {\n  no: 28,\n  name: \"unpublish_data_track_response\",\n  kind: \"message\",\n  T: UnpublishDataTrackResponse,\n  oneof: \"message\"\n}, {\n  no: 29,\n  name: \"data_track_subscriber_handles\",\n  kind: \"message\",\n  T: DataTrackSubscriberHandles,\n  oneof: \"message\"\n}]);\nconst SimulcastCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulcastCodec\", () => [{\n  no: 1,\n  name: \"codec\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 5,\n  name: \"video_layer_mode\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoLayer_Mode)\n}]);\nconst AddTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.AddTrackRequest\", () => [{\n  no: 1,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackType)\n}, {\n  no: 4,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"muted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 7,\n  name: \"disable_dtx\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"source\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackSource)\n}, {\n  no: 9,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 10,\n  name: \"simulcast_codecs\",\n  kind: \"message\",\n  T: SimulcastCodec,\n  repeated: true\n}, {\n  no: 11,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"stereo\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 13,\n  name: \"disable_red\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 14,\n  name: \"encryption\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 15,\n  name: \"stream\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 16,\n  name: \"backup_codec_policy\",\n  kind: \"enum\",\n  T: proto3.getEnumType(BackupCodecPolicy$1)\n}, {\n  no: 17,\n  name: \"audio_features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioTrackFeature),\n  repeated: true\n}, {\n  no: 18,\n  name: \"packet_trailer_features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(PacketTrailerFeature),\n  repeated: true\n}]);\nconst PublishDataTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.PublishDataTrackRequest\", () => [{\n  no: 1,\n  name: \"pub_handle\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"encryption\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}]);\nconst PublishDataTrackResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.PublishDataTrackResponse\", () => [{\n  no: 1,\n  name: \"info\",\n  kind: \"message\",\n  T: DataTrackInfo$1\n}]);\nconst UnpublishDataTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.UnpublishDataTrackRequest\", () => [{\n  no: 1,\n  name: \"pub_handle\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst UnpublishDataTrackResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.UnpublishDataTrackResponse\", () => [{\n  no: 1,\n  name: \"info\",\n  kind: \"message\",\n  T: DataTrackInfo$1\n}]);\nconst DataTrackSubscriberHandles = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackSubscriberHandles\", () => [{\n  no: 1,\n  name: \"sub_handles\",\n  kind: \"map\",\n  K: 13,\n  V: {\n    kind: \"message\",\n    T: DataTrackSubscriberHandles_PublishedDataTrack\n  }\n}]);\nconst DataTrackSubscriberHandles_PublishedDataTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackSubscriberHandles.PublishedDataTrack\", () => [{\n  no: 1,\n  name: \"publisher_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"publisher_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}], {\n  localName: \"DataTrackSubscriberHandles_PublishedDataTrack\"\n});\nconst TrickleRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrickleRequest\", () => [{\n  no: 1,\n  name: \"candidateInit\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"target\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SignalTarget)\n}, {\n  no: 3,\n  name: \"final\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst MuteTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.MuteTrackRequest\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"muted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst JoinResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.JoinResponse\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: Room$1\n}, {\n  no: 2,\n  name: \"participant\",\n  kind: \"message\",\n  T: ParticipantInfo\n}, {\n  no: 3,\n  name: \"other_participants\",\n  kind: \"message\",\n  T: ParticipantInfo,\n  repeated: true\n}, {\n  no: 4,\n  name: \"server_version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"ice_servers\",\n  kind: \"message\",\n  T: ICEServer,\n  repeated: true\n}, {\n  no: 6,\n  name: \"subscriber_primary\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 7,\n  name: \"alternative_url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 8,\n  name: \"client_configuration\",\n  kind: \"message\",\n  T: ClientConfiguration\n}, {\n  no: 9,\n  name: \"server_region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"ping_timeout\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 11,\n  name: \"ping_interval\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 12,\n  name: \"server_info\",\n  kind: \"message\",\n  T: ServerInfo\n}, {\n  no: 13,\n  name: \"sif_trailer\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 14,\n  name: \"enabled_publish_codecs\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}, {\n  no: 15,\n  name: \"fast_publish\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst ReconnectResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.ReconnectResponse\", () => [{\n  no: 1,\n  name: \"ice_servers\",\n  kind: \"message\",\n  T: ICEServer,\n  repeated: true\n}, {\n  no: 2,\n  name: \"client_configuration\",\n  kind: \"message\",\n  T: ClientConfiguration\n}, {\n  no: 3,\n  name: \"server_info\",\n  kind: \"message\",\n  T: ServerInfo\n}, {\n  no: 4,\n  name: \"last_message_seq\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst TrackPublishedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackPublishedResponse\", () => [{\n  no: 1,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track\",\n  kind: \"message\",\n  T: TrackInfo\n}]);\nconst TrackUnpublishedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackUnpublishedResponse\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst SessionDescription = /* @__PURE__ */proto3.makeMessageType(\"livekit.SessionDescription\", () => [{\n  no: 1,\n  name: \"type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"sdp\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"mid_to_track_id\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}]);\nconst ParticipantUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantUpdate\", () => [{\n  no: 1,\n  name: \"participants\",\n  kind: \"message\",\n  T: ParticipantInfo,\n  repeated: true\n}]);\nconst UpdateSubscription = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateSubscription\", () => [{\n  no: 1,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"participant_tracks\",\n  kind: \"message\",\n  T: ParticipantTracks,\n  repeated: true\n}]);\nconst UpdateDataSubscription = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateDataSubscription\", () => [{\n  no: 1,\n  name: \"updates\",\n  kind: \"message\",\n  T: UpdateDataSubscription_Update,\n  repeated: true\n}]);\nconst UpdateDataSubscription_Update = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateDataSubscription.Update\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"options\",\n  kind: \"message\",\n  T: DataTrackSubscriptionOptions\n}], {\n  localName: \"UpdateDataSubscription_Update\"\n});\nconst UpdateTrackSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateTrackSettings\", () => [{\n  no: 1,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 3,\n  name: \"disabled\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 4,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoQuality$1)\n}, {\n  no: 5,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 7,\n  name: \"fps\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 8,\n  name: \"priority\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst UpdateLocalAudioTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateLocalAudioTrack\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioTrackFeature),\n  repeated: true\n}]);\nconst UpdateLocalVideoTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateLocalVideoTrack\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst LeaveRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.LeaveRequest\", () => [{\n  no: 1,\n  name: \"can_reconnect\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DisconnectReason)\n}, {\n  no: 3,\n  name: \"action\",\n  kind: \"enum\",\n  T: proto3.getEnumType(LeaveRequest_Action)\n}, {\n  no: 4,\n  name: \"regions\",\n  kind: \"message\",\n  T: RegionSettings\n}]);\nconst LeaveRequest_Action = /* @__PURE__ */proto3.makeEnum(\"livekit.LeaveRequest.Action\", [{\n  no: 0,\n  name: \"DISCONNECT\"\n}, {\n  no: 1,\n  name: \"RESUME\"\n}, {\n  no: 2,\n  name: \"RECONNECT\"\n}]);\nconst UpdateVideoLayers = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateVideoLayers\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}]);\nconst UpdateParticipantMetadata = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateParticipantMetadata\", () => [{\n  no: 1,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 4,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst ICEServer = /* @__PURE__ */proto3.makeMessageType(\"livekit.ICEServer\", () => [{\n  no: 1,\n  name: \"urls\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"username\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"credential\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst SpeakersChanged = /* @__PURE__ */proto3.makeMessageType(\"livekit.SpeakersChanged\", () => [{\n  no: 1,\n  name: \"speakers\",\n  kind: \"message\",\n  T: SpeakerInfo,\n  repeated: true\n}]);\nconst RoomUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomUpdate\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: Room$1\n}]);\nconst ConnectionQualityInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionQualityInfo\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ConnectionQuality$1)\n}, {\n  no: 3,\n  name: \"score\",\n  kind: \"scalar\",\n  T: 2\n  /* ScalarType.FLOAT */\n}]);\nconst ConnectionQualityUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionQualityUpdate\", () => [{\n  no: 1,\n  name: \"updates\",\n  kind: \"message\",\n  T: ConnectionQualityInfo,\n  repeated: true\n}]);\nconst StreamStateInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamStateInfo\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"state\",\n  kind: \"enum\",\n  T: proto3.getEnumType(StreamState)\n}]);\nconst StreamStateUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamStateUpdate\", () => [{\n  no: 1,\n  name: \"stream_states\",\n  kind: \"message\",\n  T: StreamStateInfo,\n  repeated: true\n}]);\nconst SubscribedQuality = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedQuality\", () => [{\n  no: 1,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoQuality$1)\n}, {\n  no: 2,\n  name: \"enabled\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst SubscribedCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedCodec\", () => [{\n  no: 1,\n  name: \"codec\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"qualities\",\n  kind: \"message\",\n  T: SubscribedQuality,\n  repeated: true\n}]);\nconst SubscribedQualityUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedQualityUpdate\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"subscribed_qualities\",\n  kind: \"message\",\n  T: SubscribedQuality,\n  repeated: true\n}, {\n  no: 3,\n  name: \"subscribed_codecs\",\n  kind: \"message\",\n  T: SubscribedCodec,\n  repeated: true\n}]);\nconst SubscribedAudioCodecUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedAudioCodecUpdate\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"subscribed_audio_codecs\",\n  kind: \"message\",\n  T: SubscribedAudioCodec,\n  repeated: true\n}]);\nconst TrackPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackPermission\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"all_tracks\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 4,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst SubscriptionPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionPermission\", () => [{\n  no: 1,\n  name: \"all_participants\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"track_permissions\",\n  kind: \"message\",\n  T: TrackPermission,\n  repeated: true\n}]);\nconst SubscriptionPermissionUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionPermissionUpdate\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"allowed\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst RoomMovedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomMovedResponse\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: Room$1\n}, {\n  no: 2,\n  name: \"token\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"participant\",\n  kind: \"message\",\n  T: ParticipantInfo\n}, {\n  no: 4,\n  name: \"other_participants\",\n  kind: \"message\",\n  T: ParticipantInfo,\n  repeated: true\n}]);\nconst SyncState = /* @__PURE__ */proto3.makeMessageType(\"livekit.SyncState\", () => [{\n  no: 1,\n  name: \"answer\",\n  kind: \"message\",\n  T: SessionDescription\n}, {\n  no: 2,\n  name: \"subscription\",\n  kind: \"message\",\n  T: UpdateSubscription\n}, {\n  no: 3,\n  name: \"publish_tracks\",\n  kind: \"message\",\n  T: TrackPublishedResponse,\n  repeated: true\n}, {\n  no: 4,\n  name: \"data_channels\",\n  kind: \"message\",\n  T: DataChannelInfo,\n  repeated: true\n}, {\n  no: 5,\n  name: \"offer\",\n  kind: \"message\",\n  T: SessionDescription\n}, {\n  no: 6,\n  name: \"track_sids_disabled\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 7,\n  name: \"datachannel_receive_states\",\n  kind: \"message\",\n  T: DataChannelReceiveState,\n  repeated: true\n}, {\n  no: 8,\n  name: \"publish_data_tracks\",\n  kind: \"message\",\n  T: PublishDataTrackResponse,\n  repeated: true\n}]);\nconst DataChannelReceiveState = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataChannelReceiveState\", () => [{\n  no: 1,\n  name: \"publisher_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"last_seq\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst DataChannelInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataChannelInfo\", () => [{\n  no: 1,\n  name: \"label\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"target\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SignalTarget)\n}]);\nconst SimulateScenario = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulateScenario\", () => [{\n  no: 1,\n  name: \"speaker_update\",\n  kind: \"scalar\",\n  T: 5,\n  oneof: \"scenario\"\n}, {\n  no: 2,\n  name: \"node_failure\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 3,\n  name: \"migration\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 4,\n  name: \"server_leave\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 5,\n  name: \"switch_candidate_protocol\",\n  kind: \"enum\",\n  T: proto3.getEnumType(CandidateProtocol),\n  oneof: \"scenario\"\n}, {\n  no: 6,\n  name: \"subscriber_bandwidth\",\n  kind: \"scalar\",\n  T: 3,\n  oneof: \"scenario\"\n}, {\n  no: 7,\n  name: \"disconnect_signal_on_resume\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 8,\n  name: \"disconnect_signal_on_resume_no_messages\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 9,\n  name: \"leave_request_full_reconnect\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}]);\nconst Ping = /* @__PURE__ */proto3.makeMessageType(\"livekit.Ping\", () => [{\n  no: 1,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"rtt\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}]);\nconst Pong = /* @__PURE__ */proto3.makeMessageType(\"livekit.Pong\", () => [{\n  no: 1,\n  name: \"last_ping_timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}]);\nconst RegionSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.RegionSettings\", () => [{\n  no: 1,\n  name: \"regions\",\n  kind: \"message\",\n  T: RegionInfo,\n  repeated: true\n}]);\nconst RegionInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.RegionInfo\", () => [{\n  no: 1,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"distance\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}]);\nconst SubscriptionResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionResponse\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"err\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SubscriptionError)\n}]);\nconst RequestResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RequestResponse\", () => [{\n  no: 1,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(RequestResponse_Reason)\n}, {\n  no: 3,\n  name: \"message\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"trickle\",\n  kind: \"message\",\n  T: TrickleRequest,\n  oneof: \"request\"\n}, {\n  no: 5,\n  name: \"add_track\",\n  kind: \"message\",\n  T: AddTrackRequest,\n  oneof: \"request\"\n}, {\n  no: 6,\n  name: \"mute\",\n  kind: \"message\",\n  T: MuteTrackRequest,\n  oneof: \"request\"\n}, {\n  no: 7,\n  name: \"update_metadata\",\n  kind: \"message\",\n  T: UpdateParticipantMetadata,\n  oneof: \"request\"\n}, {\n  no: 8,\n  name: \"update_audio_track\",\n  kind: \"message\",\n  T: UpdateLocalAudioTrack,\n  oneof: \"request\"\n}, {\n  no: 9,\n  name: \"update_video_track\",\n  kind: \"message\",\n  T: UpdateLocalVideoTrack,\n  oneof: \"request\"\n}, {\n  no: 10,\n  name: \"publish_data_track\",\n  kind: \"message\",\n  T: PublishDataTrackRequest,\n  oneof: \"request\"\n}, {\n  no: 11,\n  name: \"unpublish_data_track\",\n  kind: \"message\",\n  T: UnpublishDataTrackRequest,\n  oneof: \"request\"\n}]);\nconst RequestResponse_Reason = /* @__PURE__ */proto3.makeEnum(\"livekit.RequestResponse.Reason\", [{\n  no: 0,\n  name: \"OK\"\n}, {\n  no: 1,\n  name: \"NOT_FOUND\"\n}, {\n  no: 2,\n  name: \"NOT_ALLOWED\"\n}, {\n  no: 3,\n  name: \"LIMIT_EXCEEDED\"\n}, {\n  no: 4,\n  name: \"QUEUED\"\n}, {\n  no: 5,\n  name: \"UNSUPPORTED_TYPE\"\n}, {\n  no: 6,\n  name: \"UNCLASSIFIED_ERROR\"\n}, {\n  no: 7,\n  name: \"INVALID_HANDLE\"\n}, {\n  no: 8,\n  name: \"INVALID_NAME\"\n}, {\n  no: 9,\n  name: \"DUPLICATE_HANDLE\"\n}, {\n  no: 10,\n  name: \"DUPLICATE_NAME\"\n}]);\nconst TrackSubscribed = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackSubscribed\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ConnectionSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionSettings\", () => [{\n  no: 1,\n  name: \"auto_subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"adaptive_stream\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"subscriber_allow_pause\",\n  kind: \"scalar\",\n  T: 8,\n  opt: true\n}, {\n  no: 4,\n  name: \"disable_ice_lite\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"auto_subscribe_data_track\",\n  kind: \"scalar\",\n  T: 8,\n  opt: true\n}]);\nconst JoinRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.JoinRequest\", () => [{\n  no: 1,\n  name: \"client_info\",\n  kind: \"message\",\n  T: ClientInfo\n}, {\n  no: 2,\n  name: \"connection_settings\",\n  kind: \"message\",\n  T: ConnectionSettings\n}, {\n  no: 3,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"participant_attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 5,\n  name: \"add_track_requests\",\n  kind: \"message\",\n  T: AddTrackRequest,\n  repeated: true\n}, {\n  no: 6,\n  name: \"publisher_offer\",\n  kind: \"message\",\n  T: SessionDescription\n}, {\n  no: 7,\n  name: \"reconnect\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"reconnect_reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ReconnectReason)\n}, {\n  no: 9,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"sync_state\",\n  kind: \"message\",\n  T: SyncState\n}]);\nconst WrappedJoinRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.WrappedJoinRequest\", () => [{\n  no: 1,\n  name: \"compression\",\n  kind: \"enum\",\n  T: proto3.getEnumType(WrappedJoinRequest_Compression)\n}, {\n  no: 2,\n  name: \"join_request\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst WrappedJoinRequest_Compression = /* @__PURE__ */proto3.makeEnum(\"livekit.WrappedJoinRequest.Compression\", [{\n  no: 0,\n  name: \"NONE\"\n}, {\n  no: 1,\n  name: \"GZIP\"\n}]);\nconst MediaSectionsRequirement = /* @__PURE__ */proto3.makeMessageType(\"livekit.MediaSectionsRequirement\", () => [{\n  no: 1,\n  name: \"num_audios\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"num_videos\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst TokenSourceRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.TokenSourceRequest\", () => [{\n  no: 1,\n  name: \"room_name\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 2,\n  name: \"participant_name\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 3,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 4,\n  name: \"participant_metadata\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 5,\n  name: \"participant_attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 6,\n  name: \"room_config\",\n  kind: \"message\",\n  T: RoomConfiguration,\n  opt: true\n}]);\nconst TokenSourceResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TokenSourceResponse\", () => [{\n  no: 1,\n  name: \"server_url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"participant_token\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}var loglevel$1 = {exports: {}};/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\nvar loglevel = loglevel$1.exports;\nvar hasRequiredLoglevel;\nfunction requireLoglevel() {\n  if (hasRequiredLoglevel) return loglevel$1.exports;\n  hasRequiredLoglevel = 1;\n  (function (module) {\n    (function (root, definition) {\n\n      if (module.exports) {\n        module.exports = definition();\n      } else {\n        root.log = definition();\n      }\n    })(loglevel, function () {\n\n      // Slightly dubious tricks to cut down minimized file size\n      var noop = function () {};\n      var undefinedType = \"undefined\";\n      var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\\/|MSIE /.test(window.navigator.userAgent);\n      var logMethods = [\"trace\", \"debug\", \"info\", \"warn\", \"error\"];\n      var _loggersByName = {};\n      var defaultLogger = null;\n\n      // Cross-browser bind equivalent that works at least back to IE6\n      function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === 'function') {\n          return method.bind(obj);\n        } else {\n          try {\n            return Function.prototype.bind.call(method, obj);\n          } catch (e) {\n            // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n            return function () {\n              return Function.prototype.apply.apply(method, [obj, arguments]);\n            };\n          }\n        }\n      }\n\n      // Trace() doesn't print the message in IE, so for that case we need to wrap it\n      function traceForIE() {\n        if (console.log) {\n          if (console.log.apply) {\n            console.log.apply(console, arguments);\n          } else {\n            // In old IE, native console methods themselves don't have apply().\n            Function.prototype.apply.apply(console.log, [console, arguments]);\n          }\n        }\n        if (console.trace) console.trace();\n      }\n\n      // Build the best logging method possible for this env\n      // Wherever possible we want to bind, not wrap, to preserve stack traces\n      function realMethod(methodName) {\n        if (methodName === 'debug') {\n          methodName = 'log';\n        }\n        if (typeof console === undefinedType) {\n          return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n        } else if (methodName === 'trace' && isIE) {\n          return traceForIE;\n        } else if (console[methodName] !== undefined) {\n          return bindMethod(console, methodName);\n        } else if (console.log !== undefined) {\n          return bindMethod(console, 'log');\n        } else {\n          return noop;\n        }\n      }\n\n      // These private functions always need `this` to be set properly\n\n      function replaceLoggingMethods() {\n        /*jshint validthis:true */\n        var level = this.getLevel();\n\n        // Replace the actual methods.\n        for (var i = 0; i < logMethods.length; i++) {\n          var methodName = logMethods[i];\n          this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);\n        }\n\n        // Define log.log as an alias for log.debug\n        this.log = this.debug;\n\n        // Return any important warnings.\n        if (typeof console === undefinedType && level < this.levels.SILENT) {\n          return \"No console available for logging\";\n        }\n      }\n\n      // In old IE versions, the console isn't present until you first open it.\n      // We build realMethod() replacements here that regenerate logging methods\n      function enableLoggingWhenConsoleArrives(methodName) {\n        return function () {\n          if (typeof console !== undefinedType) {\n            replaceLoggingMethods.call(this);\n            this[methodName].apply(this, arguments);\n          }\n        };\n      }\n\n      // By default, we use closely bound real methods wherever possible, and\n      // otherwise we wait for a console to appear, and then try again.\n      function defaultMethodFactory(methodName, _level, _loggerName) {\n        /*jshint validthis:true */\n        return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);\n      }\n      function Logger(name, factory) {\n        // Private instance variables.\n        var self = this;\n        /**\n         * The level inherited from a parent logger (or a global default). We\n         * cache this here rather than delegating to the parent so that it stays\n         * in sync with the actual logging methods that we have installed (the\n         * parent could change levels but we might not have rebuilt the loggers\n         * in this child yet).\n         * @type {number}\n         */\n        var inheritedLevel;\n        /**\n         * The default level for this logger, if any. If set, this overrides\n         * `inheritedLevel`.\n         * @type {number|null}\n         */\n        var defaultLevel;\n        /**\n         * A user-specific level for this logger. If set, this overrides\n         * `defaultLevel`.\n         * @type {number|null}\n         */\n        var userLevel;\n        var storageKey = \"loglevel\";\n        if (typeof name === \"string\") {\n          storageKey += \":\" + name;\n        } else if (typeof name === \"symbol\") {\n          storageKey = undefined;\n        }\n        function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n            window.localStorage[storageKey] = levelName;\n            return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n            window.document.cookie = encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {}\n        }\n        function getPersistedLevel() {\n          var storedLevel;\n          if (typeof window === undefinedType || !storageKey) return;\n          try {\n            storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {}\n\n          // Fallback to cookies if local storage gives us nothing\n          if (typeof storedLevel === undefinedType) {\n            try {\n              var cookie = window.document.cookie;\n              var cookieName = encodeURIComponent(storageKey);\n              var location = cookie.indexOf(cookieName + \"=\");\n              if (location !== -1) {\n                storedLevel = /^([^;]+)/.exec(cookie.slice(location + cookieName.length + 1))[1];\n              }\n            } catch (ignore) {}\n          }\n\n          // If the stored level is not valid, treat it as if nothing was stored.\n          if (self.levels[storedLevel] === undefined) {\n            storedLevel = undefined;\n          }\n          return storedLevel;\n        }\n        function clearPersistedLevel() {\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n            window.localStorage.removeItem(storageKey);\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n            window.document.cookie = encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n          } catch (ignore) {}\n        }\n        function normalizeLevel(input) {\n          var level = input;\n          if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n            level = self.levels[level.toUpperCase()];\n          }\n          if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n            return level;\n          } else {\n            throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n          }\n        }\n\n        /*\n         *\n         * Public logger API - see https://github.com/pimterry/loglevel for details\n         *\n         */\n\n        self.name = name;\n        self.levels = {\n          \"TRACE\": 0,\n          \"DEBUG\": 1,\n          \"INFO\": 2,\n          \"WARN\": 3,\n          \"ERROR\": 4,\n          \"SILENT\": 5\n        };\n        self.methodFactory = factory || defaultMethodFactory;\n        self.getLevel = function () {\n          if (userLevel != null) {\n            return userLevel;\n          } else if (defaultLevel != null) {\n            return defaultLevel;\n          } else {\n            return inheritedLevel;\n          }\n        };\n        self.setLevel = function (level, persist) {\n          userLevel = normalizeLevel(level);\n          if (persist !== false) {\n            // defaults to true\n            persistLevelIfPossible(userLevel);\n          }\n\n          // NOTE: in v2, this should call rebuild(), which updates children.\n          return replaceLoggingMethods.call(self);\n        };\n        self.setDefaultLevel = function (level) {\n          defaultLevel = normalizeLevel(level);\n          if (!getPersistedLevel()) {\n            self.setLevel(level, false);\n          }\n        };\n        self.resetLevel = function () {\n          userLevel = null;\n          clearPersistedLevel();\n          replaceLoggingMethods.call(self);\n        };\n        self.enableAll = function (persist) {\n          self.setLevel(self.levels.TRACE, persist);\n        };\n        self.disableAll = function (persist) {\n          self.setLevel(self.levels.SILENT, persist);\n        };\n        self.rebuild = function () {\n          if (defaultLogger !== self) {\n            inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n          }\n          replaceLoggingMethods.call(self);\n          if (defaultLogger === self) {\n            for (var childName in _loggersByName) {\n              _loggersByName[childName].rebuild();\n            }\n          }\n        };\n\n        // Initialize all the internal levels.\n        inheritedLevel = normalizeLevel(defaultLogger ? defaultLogger.getLevel() : \"WARN\");\n        var initialLevel = getPersistedLevel();\n        if (initialLevel != null) {\n          userLevel = normalizeLevel(initialLevel);\n        }\n        replaceLoggingMethods.call(self);\n      }\n\n      /*\n       *\n       * Top-level API\n       *\n       */\n\n      defaultLogger = new Logger();\n      defaultLogger.getLogger = function getLogger(name) {\n        if (typeof name !== \"symbol\" && typeof name !== \"string\" || name === \"\") {\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n        var logger = _loggersByName[name];\n        if (!logger) {\n          logger = _loggersByName[name] = new Logger(name, defaultLogger.methodFactory);\n        }\n        return logger;\n      };\n\n      // Grab the current global log variable in case of overwrite\n      var _log = typeof window !== undefinedType ? window.log : undefined;\n      defaultLogger.noConflict = function () {\n        if (typeof window !== undefinedType && window.log === defaultLogger) {\n          window.log = _log;\n        }\n        return defaultLogger;\n      };\n      defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n      };\n\n      // ES6 default export, for compatibility\n      defaultLogger['default'] = defaultLogger;\n      return defaultLogger;\n    });\n  })(loglevel$1);\n  return loglevel$1.exports;\n}var loglevelExports = requireLoglevel();var LogLevel;\n(function (LogLevel) {\n  LogLevel[LogLevel[\"trace\"] = 0] = \"trace\";\n  LogLevel[LogLevel[\"debug\"] = 1] = \"debug\";\n  LogLevel[LogLevel[\"info\"] = 2] = \"info\";\n  LogLevel[LogLevel[\"warn\"] = 3] = \"warn\";\n  LogLevel[LogLevel[\"error\"] = 4] = \"error\";\n  LogLevel[LogLevel[\"silent\"] = 5] = \"silent\";\n})(LogLevel || (LogLevel = {}));\nvar LoggerNames;\n(function (LoggerNames) {\n  LoggerNames[\"Default\"] = \"livekit\";\n  LoggerNames[\"Room\"] = \"livekit-room\";\n  LoggerNames[\"TokenSource\"] = \"livekit-token-source\";\n  LoggerNames[\"Participant\"] = \"livekit-participant\";\n  LoggerNames[\"Track\"] = \"livekit-track\";\n  LoggerNames[\"Publication\"] = \"livekit-track-publication\";\n  LoggerNames[\"Engine\"] = \"livekit-engine\";\n  LoggerNames[\"Signal\"] = \"livekit-signal\";\n  LoggerNames[\"PCManager\"] = \"livekit-pc-manager\";\n  LoggerNames[\"PCTransport\"] = \"livekit-pc-transport\";\n  LoggerNames[\"E2EE\"] = \"lk-e2ee\";\n  LoggerNames[\"DataTracks\"] = \"livekit-data-tracks\";\n})(LoggerNames || (LoggerNames = {}));\nlet livekitLogger = loglevelExports.getLogger(LoggerNames.Default);\nconst livekitLoggers = Object.values(LoggerNames).map(name => loglevelExports.getLogger(name));\nlivekitLogger.setDefaultLevel(LogLevel.info);\n/**\n * @internal\n *\n * Get a named logger. When `ctxFn` is supplied, every log call\n * automatically:\n * 1. prepends a `[key=value ...]` prefix derived from `ctxFn()` to the\n *    message string, so identifiers are visible in browser devtools\n *    without expanding the structured context object, and\n * 2. merges `ctxFn()` into the structured context passed to any\n *    `setLogExtension` consumer, so ingestion pipelines continue to\n *    receive the full metadata unchanged.\n */\nfunction getLogger(name, ctxFn) {\n  const logger = loglevelExports.getLogger(name);\n  logger.setDefaultLevel(livekitLogger.getLevel());\n  if (!ctxFn) {\n    return logger;\n  }\n  return wrapWithContext(logger, ctxFn);\n}\nfunction wrapWithContext(base, ctxFn) {\n  // Resolve the underlying method on every call so that later\n  // setLogExtension installations (which replace the base logger's\n  // methods via loglevel's methodFactory) are picked up.\n  const wrap = method => (msg, extra) => {\n    const ctx = ctxFn();\n    const merged = ctx || extra ? Object.assign(Object.assign({}, ctx), extra) : undefined;\n    base[method](msg, merged);\n  };\n  const proxy = Object.create(base);\n  proxy.trace = wrap('trace');\n  proxy.debug = wrap('debug');\n  proxy.info = wrap('info');\n  proxy.warn = wrap('warn');\n  proxy.error = wrap('error');\n  return proxy;\n}\nfunction setLogLevel(level, loggerName) {\n  if (loggerName) {\n    loglevelExports.getLogger(loggerName).setLevel(level);\n  } else {\n    for (const logger of livekitLoggers) {\n      logger.setLevel(level);\n    }\n  }\n}\n/**\n * use this to hook into the logging function to allow sending internal livekit logs to third party services\n * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)\n */\nfunction setLogExtension(extension, logger) {\n  const loggers = logger ? [logger] : livekitLoggers;\n  loggers.forEach(logR => {\n    const originalFactory = logR.methodFactory;\n    logR.methodFactory = (methodName, configLevel, loggerName) => {\n      const rawMethod = originalFactory(methodName, configLevel, loggerName);\n      const logLevel = LogLevel[methodName];\n      const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;\n      return (msg, context) => {\n        if (context) rawMethod(msg, context);else rawMethod(msg);\n        if (needLog) {\n          extension(logLevel, msg, context);\n        }\n      };\n    };\n    logR.setLevel(logR.getLevel());\n  });\n}\nconst workerLogger = loglevelExports.getLogger(LoggerNames.E2EE);const maxRetryDelay = 7000;\nconst DEFAULT_RETRY_DELAYS_IN_MS = [0, 300, 2 * 2 * 300, 3 * 3 * 300, 4 * 4 * 300, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay];\nclass DefaultReconnectPolicy {\n  constructor(retryDelays) {\n    this._retryDelays = retryDelays !== undefined ? [...retryDelays] : DEFAULT_RETRY_DELAYS_IN_MS;\n  }\n  nextRetryDelayInMs(context) {\n    if (context.retryCount >= this._retryDelays.length) return null;\n    const retryDelay = this._retryDelays[context.retryCount];\n    if (context.retryCount <= 1) return retryDelay;\n    return retryDelay + Math.random() * 1000;\n  }\n}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};var events = {exports: {}};var hasRequiredEvents;\nfunction requireEvents() {\n  if (hasRequiredEvents) return events.exports;\n  hasRequiredEvents = 1;\n  var R = typeof Reflect === 'object' ? Reflect : null;\n  var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  };\n  var ReflectOwnKeys;\n  if (R && typeof R.ownKeys === 'function') {\n    ReflectOwnKeys = R.ownKeys;\n  } else if (Object.getOwnPropertySymbols) {\n    ReflectOwnKeys = function ReflectOwnKeys(target) {\n      return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n    };\n  } else {\n    ReflectOwnKeys = function ReflectOwnKeys(target) {\n      return Object.getOwnPropertyNames(target);\n    };\n  }\n  function ProcessEmitWarning(warning) {\n    if (console && console.warn) console.warn(warning);\n  }\n  var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n    return value !== value;\n  };\n  function EventEmitter() {\n    EventEmitter.init.call(this);\n  }\n  events.exports = EventEmitter;\n  events.exports.once = once;\n\n  // Backwards-compat with node 0.10.x\n  EventEmitter.EventEmitter = EventEmitter;\n  EventEmitter.prototype._events = undefined;\n  EventEmitter.prototype._eventsCount = 0;\n  EventEmitter.prototype._maxListeners = undefined;\n\n  // By default EventEmitters will print a warning if more than 10 listeners are\n  // added to it. This is a useful default which helps finding memory leaks.\n  var defaultMaxListeners = 10;\n  function checkListener(listener) {\n    if (typeof listener !== 'function') {\n      throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n    }\n  }\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function () {\n      return defaultMaxListeners;\n    },\n    set: function (arg) {\n      if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n        throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n      }\n      defaultMaxListeners = arg;\n    }\n  });\n  EventEmitter.init = function () {\n    if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n    }\n    this._maxListeners = this._maxListeners || undefined;\n  };\n\n  // Obviously not all Emitters should be limited to 10. This function allows\n  // that to be increased. Set to zero for unlimited.\n  EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n    if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n      throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n    }\n    this._maxListeners = n;\n    return this;\n  };\n  function _getMaxListeners(that) {\n    if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n    return that._maxListeners;\n  }\n  EventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n    return _getMaxListeners(this);\n  };\n  EventEmitter.prototype.emit = function emit(type) {\n    var args = [];\n    for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n    var doError = type === 'error';\n    var events = this._events;\n    if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;\n\n    // If there is no 'error' event listener then throw.\n    if (doError) {\n      var er;\n      if (args.length > 0) er = args[0];\n      if (er instanceof Error) {\n        // Note: The comments on the `throw` lines are intentional, they show\n        // up in Node's output if this results in an unhandled exception.\n        throw er; // Unhandled 'error' event\n      }\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n      err.context = er;\n      throw err; // Unhandled 'error' event\n    }\n    var handler = events[type];\n    if (handler === undefined) return false;\n    if (typeof handler === 'function') {\n      ReflectApply(handler, this, args);\n    } else {\n      var len = handler.length;\n      var listeners = arrayClone(handler, len);\n      for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n    }\n    return true;\n  };\n  function _addListener(target, type, listener, prepend) {\n    var m;\n    var events;\n    var existing;\n    checkListener(listener);\n    events = target._events;\n    if (events === undefined) {\n      events = target._events = Object.create(null);\n      target._eventsCount = 0;\n    } else {\n      // To avoid recursion in the case that type === \"newListener\"! Before\n      // adding it to the listeners, first emit \"newListener\".\n      if (events.newListener !== undefined) {\n        target.emit('newListener', type, listener.listener ? listener.listener : listener);\n\n        // Re-assign `events` because a newListener handler could have caused the\n        // this._events to be assigned to a new object\n        events = target._events;\n      }\n      existing = events[type];\n    }\n    if (existing === undefined) {\n      // Optimize the case of one listener. Don't need the extra array object.\n      existing = events[type] = listener;\n      ++target._eventsCount;\n    } else {\n      if (typeof existing === 'function') {\n        // Adding the second element, need to change to array.\n        existing = events[type] = prepend ? [listener, existing] : [existing, listener];\n        // If we've already got an array, just append.\n      } else if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n\n      // Check for listener leak\n      m = _getMaxListeners(target);\n      if (m > 0 && existing.length > m && !existing.warned) {\n        existing.warned = true;\n        // No error code for this since it is a Warning\n        // eslint-disable-next-line no-restricted-syntax\n        var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        ProcessEmitWarning(w);\n      }\n    }\n    return target;\n  }\n  EventEmitter.prototype.addListener = function addListener(type, listener) {\n    return _addListener(this, type, listener, false);\n  };\n  EventEmitter.prototype.on = EventEmitter.prototype.addListener;\n  EventEmitter.prototype.prependListener = function prependListener(type, listener) {\n    return _addListener(this, type, listener, true);\n  };\n  function onceWrapper() {\n    if (!this.fired) {\n      this.target.removeListener(this.type, this.wrapFn);\n      this.fired = true;\n      if (arguments.length === 0) return this.listener.call(this.target);\n      return this.listener.apply(this.target, arguments);\n    }\n  }\n  function _onceWrap(target, type, listener) {\n    var state = {\n      fired: false,\n      wrapFn: undefined,\n      target: target,\n      type: type,\n      listener: listener\n    };\n    var wrapped = onceWrapper.bind(state);\n    wrapped.listener = listener;\n    state.wrapFn = wrapped;\n    return wrapped;\n  }\n  EventEmitter.prototype.once = function once(type, listener) {\n    checkListener(listener);\n    this.on(type, _onceWrap(this, type, listener));\n    return this;\n  };\n  EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n    checkListener(listener);\n    this.prependListener(type, _onceWrap(this, type, listener));\n    return this;\n  };\n\n  // Emits a 'removeListener' event if and only if the listener was removed.\n  EventEmitter.prototype.removeListener = function removeListener(type, listener) {\n    var list, events, position, i, originalListener;\n    checkListener(listener);\n    events = this._events;\n    if (events === undefined) return this;\n    list = events[type];\n    if (list === undefined) return this;\n    if (list === listener || list.listener === listener) {\n      if (--this._eventsCount === 0) this._events = Object.create(null);else {\n        delete events[type];\n        if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n      }\n    } else if (typeof list !== 'function') {\n      position = -1;\n      for (i = list.length - 1; i >= 0; i--) {\n        if (list[i] === listener || list[i].listener === listener) {\n          originalListener = list[i].listener;\n          position = i;\n          break;\n        }\n      }\n      if (position < 0) return this;\n      if (position === 0) list.shift();else {\n        spliceOne(list, position);\n      }\n      if (list.length === 1) events[type] = list[0];\n      if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n    }\n    return this;\n  };\n  EventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n  EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n    var listeners, events, i;\n    events = this._events;\n    if (events === undefined) return this;\n\n    // not listening for removeListener, no need to emit\n    if (events.removeListener === undefined) {\n      if (arguments.length === 0) {\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n      } else if (events[type] !== undefined) {\n        if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n      }\n      return this;\n    }\n\n    // emit removeListener for all listeners on all events\n    if (arguments.length === 0) {\n      var keys = Object.keys(events);\n      var key;\n      for (i = 0; i < keys.length; ++i) {\n        key = keys[i];\n        if (key === 'removeListener') continue;\n        this.removeAllListeners(key);\n      }\n      this.removeAllListeners('removeListener');\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n      return this;\n    }\n    listeners = events[type];\n    if (typeof listeners === 'function') {\n      this.removeListener(type, listeners);\n    } else if (listeners !== undefined) {\n      // LIFO order\n      for (i = listeners.length - 1; i >= 0; i--) {\n        this.removeListener(type, listeners[i]);\n      }\n    }\n    return this;\n  };\n  function _listeners(target, type, unwrap) {\n    var events = target._events;\n    if (events === undefined) return [];\n    var evlistener = events[type];\n    if (evlistener === undefined) return [];\n    if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n    return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n  }\n  EventEmitter.prototype.listeners = function listeners(type) {\n    return _listeners(this, type, true);\n  };\n  EventEmitter.prototype.rawListeners = function rawListeners(type) {\n    return _listeners(this, type, false);\n  };\n  EventEmitter.listenerCount = function (emitter, type) {\n    if (typeof emitter.listenerCount === 'function') {\n      return emitter.listenerCount(type);\n    } else {\n      return listenerCount.call(emitter, type);\n    }\n  };\n  EventEmitter.prototype.listenerCount = listenerCount;\n  function listenerCount(type) {\n    var events = this._events;\n    if (events !== undefined) {\n      var evlistener = events[type];\n      if (typeof evlistener === 'function') {\n        return 1;\n      } else if (evlistener !== undefined) {\n        return evlistener.length;\n      }\n    }\n    return 0;\n  }\n  EventEmitter.prototype.eventNames = function eventNames() {\n    return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n  };\n  function arrayClone(arr, n) {\n    var copy = new Array(n);\n    for (var i = 0; i < n; ++i) copy[i] = arr[i];\n    return copy;\n  }\n  function spliceOne(list, index) {\n    for (; index + 1 < list.length; index++) list[index] = list[index + 1];\n    list.pop();\n  }\n  function unwrapListeners(arr) {\n    var ret = new Array(arr.length);\n    for (var i = 0; i < ret.length; ++i) {\n      ret[i] = arr[i].listener || arr[i];\n    }\n    return ret;\n  }\n  function once(emitter, name) {\n    return new Promise(function (resolve, reject) {\n      function errorListener(err) {\n        emitter.removeListener(name, resolver);\n        reject(err);\n      }\n      function resolver() {\n        if (typeof emitter.removeListener === 'function') {\n          emitter.removeListener('error', errorListener);\n        }\n        resolve([].slice.call(arguments));\n      }\n      eventTargetAgnosticAddListener(emitter, name, resolver, {\n        once: true\n      });\n      if (name !== 'error') {\n        addErrorHandlerIfEventEmitter(emitter, errorListener, {\n          once: true\n        });\n      }\n    });\n  }\n  function addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n    if (typeof emitter.on === 'function') {\n      eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n    }\n  }\n  function eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n    if (typeof emitter.on === 'function') {\n      if (flags.once) {\n        emitter.once(name, listener);\n      } else {\n        emitter.on(name, listener);\n      }\n    } else if (typeof emitter.addEventListener === 'function') {\n      // EventTarget does not have `error` event semantics like Node\n      // EventEmitters, we do not listen for `error` events here.\n      emitter.addEventListener(name, function wrapListener(arg) {\n        // IE does not have builtin `{ once: true }` support so we\n        // have to do it manually.\n        if (flags.once) {\n          emitter.removeEventListener(name, wrapListener);\n        }\n        listener(arg);\n      });\n    } else {\n      throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n    }\n  }\n  return events.exports;\n}var eventsExports = requireEvents();/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n  const match = uastring.match(expr);\n  return match && match.length >= pos && parseFloat(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  const addEventListener = Object.getOwnPropertyDescriptor(EventTarget.prototype, 'addEventListener');\n  if (!addEventListener.writable) {\n    log$4('Unable to polyfill events');\n    return;\n  }\n  const proto = window.RTCPeerConnection.prototype;\n  const nativeAddEventListener = proto.addEventListener;\n  proto.addEventListener = function (nativeEventName, cb) {\n    if (nativeEventName !== eventNameToWrap) {\n      return nativeAddEventListener.apply(this, arguments);\n    }\n    const wrappedCallback = e => {\n      const modifiedEvent = wrapper(e);\n      if (modifiedEvent) {\n        if (cb.handleEvent) {\n          cb.handleEvent(modifiedEvent);\n        } else {\n          cb(modifiedEvent);\n        }\n      }\n    };\n    this._eventMap = this._eventMap || {};\n    if (!this._eventMap[eventNameToWrap]) {\n      this._eventMap[eventNameToWrap] = new Map();\n    }\n    this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n    return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n  };\n  const nativeRemoveEventListener = proto.removeEventListener;\n  proto.removeEventListener = function (nativeEventName, cb) {\n    if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n      return nativeRemoveEventListener.apply(this, arguments);\n    }\n    if (!this._eventMap[eventNameToWrap].has(cb)) {\n      return nativeRemoveEventListener.apply(this, arguments);\n    }\n    const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n    this._eventMap[eventNameToWrap].delete(cb);\n    if (this._eventMap[eventNameToWrap].size === 0) {\n      delete this._eventMap[eventNameToWrap];\n    }\n    if (Object.keys(this._eventMap).length === 0) {\n      delete this._eventMap;\n    }\n    return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n  };\n  Object.defineProperty(proto, 'on' + eventNameToWrap, {\n    get() {\n      return this['_on' + eventNameToWrap];\n    },\n    set(cb) {\n      if (this['_on' + eventNameToWrap]) {\n        this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n        delete this['_on' + eventNameToWrap];\n      }\n      if (cb) {\n        this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n      }\n    },\n    enumerable: true,\n    configurable: true\n  });\n}\nfunction disableLog(bool) {\n  if (typeof bool !== 'boolean') {\n    return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n  }\n  logDisabled_ = bool;\n  return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n  if (typeof bool !== 'boolean') {\n    return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n  }\n  deprecationWarnings_ = !bool;\n  return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log$4() {\n  if (typeof window === 'object') {\n    if (logDisabled_) {\n      return;\n    }\n    if (typeof console !== 'undefined' && typeof console.log === 'function') {\n      console.log.apply(console, arguments);\n    }\n  }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n  if (!deprecationWarnings_) {\n    return;\n  }\n  console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n *     properties.\n */\nfunction detectBrowser(window) {\n  // Returned result object.\n  const result = {\n    browser: null,\n    version: null\n  };\n\n  // Fail early if it's not a browser\n  if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) {\n    result.browser = 'Not a browser.';\n    return result;\n  }\n  const navigator = window.navigator;\n\n  // Prefer navigator.userAgentData.\n  if (navigator.userAgentData && navigator.userAgentData.brands) {\n    const chromium = navigator.userAgentData.brands.find(brand => {\n      return brand.brand === 'Chromium';\n    });\n    if (chromium) {\n      return {\n        browser: 'chrome',\n        version: parseInt(chromium.version, 10)\n      };\n    }\n  }\n  if (navigator.mozGetUserMedia) {\n    // Firefox.\n    result.browser = 'firefox';\n    result.version = parseInt(extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1));\n  } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n    // Chrome, Chromium, Webview, Opera.\n    // Version matches Chrome/WebRTC version.\n    // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n    // more complicated fallback to webkitRTCPeerConnection.\n    result.browser = 'chrome';\n    result.version = parseInt(extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2)) || null;\n  } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n    // Safari.\n    result.browser = 'safari';\n    result.version = parseInt(extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1));\n    result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n    // Only for internal usage.\n    result._safariVersion = extractVersion(navigator.userAgent, /Version\\/(\\d+(\\.?\\d+))/, 1);\n  } else {\n    // Default fallthrough: not supported.\n    result.browser = 'Not a supported browser.';\n    return result;\n  }\n  return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject$1(val) {\n  return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n  if (!isObject$1(data)) {\n    return data;\n  }\n  return Object.keys(data).reduce(function (accumulator, key) {\n    const isObj = isObject$1(data[key]);\n    const value = isObj ? compactObject(data[key]) : data[key];\n    const isEmptyObject = isObj && !Object.keys(value).length;\n    if (value === undefined || isEmptyObject) {\n      return accumulator;\n    }\n    return Object.assign(accumulator, {\n      [key]: value\n    });\n  }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n  if (!base || resultSet.has(base.id)) {\n    return;\n  }\n  resultSet.set(base.id, base);\n  Object.keys(base).forEach(name => {\n    if (name.endsWith('Id')) {\n      walkStats(stats, stats.get(base[name]), resultSet);\n    } else if (name.endsWith('Ids')) {\n      base[name].forEach(id => {\n        walkStats(stats, stats.get(id), resultSet);\n      });\n    }\n  });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n  const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n  const filteredResult = new Map();\n  if (track === null) {\n    return filteredResult;\n  }\n  const trackStats = [];\n  result.forEach(value => {\n    if (value.type === 'track' && value.trackIdentifier === track.id) {\n      trackStats.push(value);\n    }\n  });\n  trackStats.forEach(trackStat => {\n    result.forEach(stats => {\n      if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n        walkStats(result, stats, filteredResult);\n      }\n    });\n  });\n  return filteredResult;\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nconst logging = log$4;\nfunction shimGetUserMedia$2(window, browserDetails) {\n  const navigator = window && window.navigator;\n  if (!navigator.mediaDevices) {\n    return;\n  }\n  const constraintsToChrome_ = function (c) {\n    if (typeof c !== 'object' || c.mandatory || c.optional) {\n      return c;\n    }\n    const cc = {};\n    Object.keys(c).forEach(key => {\n      if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n        return;\n      }\n      const r = typeof c[key] === 'object' ? c[key] : {\n        ideal: c[key]\n      };\n      if (r.exact !== undefined && typeof r.exact === 'number') {\n        r.min = r.max = r.exact;\n      }\n      const oldname_ = function (prefix, name) {\n        if (prefix) {\n          return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n        }\n        return name === 'deviceId' ? 'sourceId' : name;\n      };\n      if (r.ideal !== undefined) {\n        cc.optional = cc.optional || [];\n        let oc = {};\n        if (typeof r.ideal === 'number') {\n          oc[oldname_('min', key)] = r.ideal;\n          cc.optional.push(oc);\n          oc = {};\n          oc[oldname_('max', key)] = r.ideal;\n          cc.optional.push(oc);\n        } else {\n          oc[oldname_('', key)] = r.ideal;\n          cc.optional.push(oc);\n        }\n      }\n      if (r.exact !== undefined && typeof r.exact !== 'number') {\n        cc.mandatory = cc.mandatory || {};\n        cc.mandatory[oldname_('', key)] = r.exact;\n      } else {\n        ['min', 'max'].forEach(mix => {\n          if (r[mix] !== undefined) {\n            cc.mandatory = cc.mandatory || {};\n            cc.mandatory[oldname_(mix, key)] = r[mix];\n          }\n        });\n      }\n    });\n    if (c.advanced) {\n      cc.optional = (cc.optional || []).concat(c.advanced);\n    }\n    return cc;\n  };\n  const shimConstraints_ = function (constraints, func) {\n    if (browserDetails.version >= 61) {\n      return func(constraints);\n    }\n    constraints = JSON.parse(JSON.stringify(constraints));\n    if (constraints && typeof constraints.audio === 'object') {\n      const remap = function (obj, a, b) {\n        if (a in obj && !(b in obj)) {\n          obj[b] = obj[a];\n          delete obj[a];\n        }\n      };\n      constraints = JSON.parse(JSON.stringify(constraints));\n      remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n      remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n      constraints.audio = constraintsToChrome_(constraints.audio);\n    }\n    if (constraints && typeof constraints.video === 'object') {\n      // Shim facingMode for mobile & surface pro.\n      let face = constraints.video.facingMode;\n      face = face && (typeof face === 'object' ? face : {\n        ideal: face\n      });\n      const getSupportedFacingModeLies = browserDetails.version < 66;\n      if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n        delete constraints.video.facingMode;\n        let matches;\n        if (face.exact === 'environment' || face.ideal === 'environment') {\n          matches = ['back', 'rear'];\n        } else if (face.exact === 'user' || face.ideal === 'user') {\n          matches = ['front'];\n        }\n        if (matches) {\n          // Look for matches in label, or use last cam for back (typical).\n          return navigator.mediaDevices.enumerateDevices().then(devices => {\n            devices = devices.filter(d => d.kind === 'videoinput');\n            let dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));\n            if (!dev && devices.length && matches.includes('back')) {\n              dev = devices[devices.length - 1]; // more likely the back cam\n            }\n            if (dev) {\n              constraints.video.deviceId = face.exact ? {\n                exact: dev.deviceId\n              } : {\n                ideal: dev.deviceId\n              };\n            }\n            constraints.video = constraintsToChrome_(constraints.video);\n            logging('chrome: ' + JSON.stringify(constraints));\n            return func(constraints);\n          });\n        }\n      }\n      constraints.video = constraintsToChrome_(constraints.video);\n    }\n    logging('chrome: ' + JSON.stringify(constraints));\n    return func(constraints);\n  };\n  const shimError_ = function (e) {\n    if (browserDetails.version >= 64) {\n      return e;\n    }\n    return {\n      name: {\n        PermissionDeniedError: 'NotAllowedError',\n        PermissionDismissedError: 'NotAllowedError',\n        InvalidStateError: 'NotAllowedError',\n        DevicesNotFoundError: 'NotFoundError',\n        ConstraintNotSatisfiedError: 'OverconstrainedError',\n        TrackStartError: 'NotReadableError',\n        MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n        MediaDeviceKillSwitchOn: 'NotAllowedError',\n        TabCaptureError: 'AbortError',\n        ScreenCaptureError: 'AbortError',\n        DeviceCaptureError: 'AbortError'\n      }[e.name] || e.name,\n      message: e.message,\n      constraint: e.constraint || e.constraintName,\n      toString() {\n        return this.name + (this.message && ': ') + this.message;\n      }\n    };\n  };\n  const getUserMedia_ = function (constraints, onSuccess, onError) {\n    shimConstraints_(constraints, c => {\n      navigator.webkitGetUserMedia(c, onSuccess, e => {\n        if (onError) {\n          onError(shimError_(e));\n        }\n      });\n    });\n  };\n  navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n  // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n  // function which returns a Promise, it does not accept spec-style\n  // constraints.\n  if (navigator.mediaDevices.getUserMedia) {\n    const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (cs) {\n      return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n        if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n          stream.getTracks().forEach(track => {\n            track.stop();\n          });\n          throw new DOMException('', 'NotFoundError');\n        }\n        return stream;\n      }, e => Promise.reject(shimError_(e))));\n    };\n  }\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimMediaStream(window) {\n  window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack$1(window, browserDetails) {\n  if (browserDetails.version > 102) {\n    // Unified plan is supported so no need to do anything.\n    return;\n  }\n  if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n      get() {\n        return this._ontrack;\n      },\n      set(f) {\n        if (this._ontrack) {\n          this.removeEventListener('track', this._ontrack);\n        }\n        this.addEventListener('track', this._ontrack = f);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n    window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n      if (!this._ontrackpoly) {\n        this._ontrackpoly = e => {\n          // onaddstream does not fire when a track is added to an existing\n          // stream. But stream.onaddtrack is implemented so we use that.\n          e.stream.addEventListener('addtrack', te => {\n            let receiver;\n            if (window.RTCPeerConnection.prototype.getReceivers) {\n              receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);\n            } else {\n              receiver = {\n                track: te.track\n              };\n            }\n            const event = new Event('track');\n            event.track = te.track;\n            event.receiver = receiver;\n            event.transceiver = {\n              receiver\n            };\n            event.streams = [e.stream];\n            this.dispatchEvent(event);\n          });\n          e.stream.getTracks().forEach(track => {\n            let receiver;\n            if (window.RTCPeerConnection.prototype.getReceivers) {\n              receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);\n            } else {\n              receiver = {\n                track\n              };\n            }\n            const event = new Event('track');\n            event.track = track;\n            event.receiver = receiver;\n            event.transceiver = {\n              receiver\n            };\n            event.streams = [e.stream];\n            this.dispatchEvent(event);\n          });\n        };\n        this.addEventListener('addstream', this._ontrackpoly);\n      }\n      return origSetRemoteDescription.apply(this, arguments);\n    };\n  } else {\n    // even if RTCRtpTransceiver is in window, it is only used and\n    // emitted in unified-plan. Unfortunately this means we need\n    // to unconditionally wrap the event.\n    wrapPeerConnectionEvent(window, 'track', e => {\n      if (!e.transceiver) {\n        Object.defineProperty(e, 'transceiver', {\n          value: {\n            receiver: e.receiver\n          }\n        });\n      }\n      return e;\n    });\n  }\n}\nfunction shimGetSendersWithDtmf(window) {\n  // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n  if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n    const shimSenderWithDtmf = function (pc, track) {\n      return {\n        track,\n        get dtmf() {\n          if (this._dtmf === undefined) {\n            if (track.kind === 'audio') {\n              this._dtmf = pc.createDTMFSender(track);\n            } else {\n              this._dtmf = null;\n            }\n          }\n          return this._dtmf;\n        },\n        _pc: pc\n      };\n    };\n\n    // augment addTrack when getSenders is not available.\n    if (!window.RTCPeerConnection.prototype.getSenders) {\n      window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n        this._senders = this._senders || [];\n        return this._senders.slice(); // return a copy of the internal state.\n      };\n      const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n      window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n        let sender = origAddTrack.apply(this, arguments);\n        if (!sender) {\n          sender = shimSenderWithDtmf(this, track);\n          this._senders.push(sender);\n        }\n        return sender;\n      };\n      const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n      window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n        origRemoveTrack.apply(this, arguments);\n        const idx = this._senders.indexOf(sender);\n        if (idx !== -1) {\n          this._senders.splice(idx, 1);\n        }\n      };\n    }\n    const origAddStream = window.RTCPeerConnection.prototype.addStream;\n    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n      this._senders = this._senders || [];\n      origAddStream.apply(this, [stream]);\n      stream.getTracks().forEach(track => {\n        this._senders.push(shimSenderWithDtmf(this, track));\n      });\n    };\n    const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n    window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n      this._senders = this._senders || [];\n      origRemoveStream.apply(this, [stream]);\n      stream.getTracks().forEach(track => {\n        const sender = this._senders.find(s => s.track === track);\n        if (sender) {\n          // remove sender\n          this._senders.splice(this._senders.indexOf(sender), 1);\n        }\n      });\n    };\n  } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n    const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n    window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n      const senders = origGetSenders.apply(this, []);\n      senders.forEach(sender => sender._pc = this);\n      return senders;\n    };\n    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n      get() {\n        if (this._dtmf === undefined) {\n          if (this.track.kind === 'audio') {\n            this._dtmf = this._pc.createDTMFSender(this.track);\n          } else {\n            this._dtmf = null;\n          }\n        }\n        return this._dtmf;\n      }\n    });\n  }\n}\nfunction shimSenderReceiverGetStats(window, browserDetails) {\n  if (browserDetails.version >= 67) {\n    return;\n  }\n  if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n    return;\n  }\n\n  // shim sender stats.\n  if (!('getStats' in window.RTCRtpSender.prototype)) {\n    const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n    if (origGetSenders) {\n      window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n        const senders = origGetSenders.apply(this, []);\n        senders.forEach(sender => sender._pc = this);\n        return senders;\n      };\n    }\n    const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n    if (origAddTrack) {\n      window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n        const sender = origAddTrack.apply(this, arguments);\n        sender._pc = this;\n        return sender;\n      };\n    }\n    window.RTCRtpSender.prototype.getStats = function getStats() {\n      const sender = this;\n      return this._pc.getStats().then(result =>\n      /* Note: this will include stats of all senders that\n       *   send a track with the same id as sender.track as\n       *   it is not possible to identify the RTCRtpSender.\n       */\n      filterStats(result, sender.track, true));\n    };\n  }\n\n  // shim receiver stats.\n  if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n    const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n    if (origGetReceivers) {\n      window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n        const receivers = origGetReceivers.apply(this, []);\n        receivers.forEach(receiver => receiver._pc = this);\n        return receivers;\n      };\n    }\n    wrapPeerConnectionEvent(window, 'track', e => {\n      e.receiver._pc = e.srcElement;\n      return e;\n    });\n    window.RTCRtpReceiver.prototype.getStats = function getStats() {\n      const receiver = this;\n      return this._pc.getStats().then(result => filterStats(result, receiver.track, false));\n    };\n  }\n  if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n    return;\n  }\n\n  // shim RTCPeerConnection.getStats(track).\n  const origGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n      const track = arguments[0];\n      let sender;\n      let receiver;\n      let err;\n      this.getSenders().forEach(s => {\n        if (s.track === track) {\n          if (sender) {\n            err = true;\n          } else {\n            sender = s;\n          }\n        }\n      });\n      this.getReceivers().forEach(r => {\n        if (r.track === track) {\n          if (receiver) {\n            err = true;\n          } else {\n            receiver = r;\n          }\n        }\n        return r.track === track;\n      });\n      if (err || sender && receiver) {\n        return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n      } else if (sender) {\n        return sender.getStats();\n      } else if (receiver) {\n        return receiver.getStats();\n      }\n      return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n    }\n    return origGetStats.apply(this, arguments);\n  };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n  // shim addTrack/removeTrack with native variants in order to make\n  // the interactions with legacy getLocalStreams behave as in other browsers.\n  // Keeps a mapping stream.id => [stream, rtpsenders...]\n  window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);\n  };\n  const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n  window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n    if (!stream) {\n      return origAddTrack.apply(this, arguments);\n    }\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    const sender = origAddTrack.apply(this, arguments);\n    if (!this._shimmedLocalStreams[stream.id]) {\n      this._shimmedLocalStreams[stream.id] = [stream, sender];\n    } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n      this._shimmedLocalStreams[stream.id].push(sender);\n    }\n    return sender;\n  };\n  const origAddStream = window.RTCPeerConnection.prototype.addStream;\n  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    stream.getTracks().forEach(track => {\n      const alreadyExists = this.getSenders().find(s => s.track === track);\n      if (alreadyExists) {\n        throw new DOMException('Track already exists.', 'InvalidAccessError');\n      }\n    });\n    const existingSenders = this.getSenders();\n    origAddStream.apply(this, arguments);\n    const newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);\n    this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n  };\n  const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    delete this._shimmedLocalStreams[stream.id];\n    return origRemoveStream.apply(this, arguments);\n  };\n  const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n  window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    if (sender) {\n      Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n        const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n        if (idx !== -1) {\n          this._shimmedLocalStreams[streamId].splice(idx, 1);\n        }\n        if (this._shimmedLocalStreams[streamId].length === 1) {\n          delete this._shimmedLocalStreams[streamId];\n        }\n      });\n    }\n    return origRemoveTrack.apply(this, arguments);\n  };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  // shim addTrack and removeTrack.\n  if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n    return shimAddTrackRemoveTrackWithNative(window);\n  }\n\n  // also shim pc.getLocalStreams when addTrack is shimmed\n  // to return the original streams.\n  const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n  window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n    const nativeStreams = origGetLocalStreams.apply(this);\n    this._reverseStreams = this._reverseStreams || {};\n    return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n  };\n  const origAddStream = window.RTCPeerConnection.prototype.addStream;\n  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    stream.getTracks().forEach(track => {\n      const alreadyExists = this.getSenders().find(s => s.track === track);\n      if (alreadyExists) {\n        throw new DOMException('Track already exists.', 'InvalidAccessError');\n      }\n    });\n    // Add identity mapping for consistency with addTrack.\n    // Unless this is being used with a stream from addTrack.\n    if (!this._reverseStreams[stream.id]) {\n      const newStream = new window.MediaStream(stream.getTracks());\n      this._streams[stream.id] = newStream;\n      this._reverseStreams[newStream.id] = stream;\n      stream = newStream;\n    }\n    origAddStream.apply(this, [stream]);\n  };\n  const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n    delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n    delete this._streams[stream.id];\n  };\n  window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n    if (this.signalingState === 'closed') {\n      throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n    }\n    const streams = [].slice.call(arguments, 1);\n    if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {\n      // this is not fully correct but all we can manage without\n      // [[associated MediaStreams]] internal slot.\n      throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n    }\n    const alreadyExists = this.getSenders().find(s => s.track === track);\n    if (alreadyExists) {\n      throw new DOMException('Track already exists.', 'InvalidAccessError');\n    }\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    const oldStream = this._streams[stream.id];\n    if (oldStream) {\n      // this is using odd Chrome behaviour, use with caution:\n      // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n      // Note: we rely on the high-level addTrack/dtmf shim to\n      // create the sender with a dtmf sender.\n      oldStream.addTrack(track);\n\n      // Trigger ONN async.\n      Promise.resolve().then(() => {\n        this.dispatchEvent(new Event('negotiationneeded'));\n      });\n    } else {\n      const newStream = new window.MediaStream([track]);\n      this._streams[stream.id] = newStream;\n      this._reverseStreams[newStream.id] = stream;\n      this.addStream(newStream);\n    }\n    return this.getSenders().find(s => s.track === track);\n  };\n\n  // replace the internal stream id with the external one and\n  // vice versa.\n  function replaceInternalStreamId(pc, description) {\n    let sdp = description.sdp;\n    Object.keys(pc._reverseStreams || []).forEach(internalId => {\n      const externalStream = pc._reverseStreams[internalId];\n      const internalStream = pc._streams[externalStream.id];\n      sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n    });\n    return new RTCSessionDescription({\n      type: description.type,\n      sdp\n    });\n  }\n  function replaceExternalStreamId(pc, description) {\n    let sdp = description.sdp;\n    Object.keys(pc._reverseStreams || []).forEach(internalId => {\n      const externalStream = pc._reverseStreams[internalId];\n      const internalStream = pc._streams[externalStream.id];\n      sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n    });\n    return new RTCSessionDescription({\n      type: description.type,\n      sdp\n    });\n  }\n  ['createOffer', 'createAnswer'].forEach(function (method) {\n    const nativeMethod = window.RTCPeerConnection.prototype[method];\n    const methodObj = {\n      [method]() {\n        const args = arguments;\n        const isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n        if (isLegacyCall) {\n          return nativeMethod.apply(this, [description => {\n            const desc = replaceInternalStreamId(this, description);\n            args[0].apply(null, [desc]);\n          }, err => {\n            if (args[1]) {\n              args[1].apply(null, err);\n            }\n          }, arguments[2]]);\n        }\n        return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));\n      }\n    };\n    window.RTCPeerConnection.prototype[method] = methodObj[method];\n  });\n  const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n  window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n    if (!arguments.length || !arguments[0].type) {\n      return origSetLocalDescription.apply(this, arguments);\n    }\n    arguments[0] = replaceExternalStreamId(this, arguments[0]);\n    return origSetLocalDescription.apply(this, arguments);\n  };\n\n  // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n  const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n  Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n    get() {\n      const description = origLocalDescription.get.apply(this);\n      if (description.type === '') {\n        return description;\n      }\n      return replaceInternalStreamId(this, description);\n    }\n  });\n  window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n    if (this.signalingState === 'closed') {\n      throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n    }\n    // We can not yet check for sender instanceof RTCRtpSender\n    // since we shim RTPSender. So we check if sender._pc is set.\n    if (!sender._pc) {\n      throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n    }\n    const isLocal = sender._pc === this;\n    if (!isLocal) {\n      throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n    }\n\n    // Search for the native stream the senders track belongs to.\n    this._streams = this._streams || {};\n    let stream;\n    Object.keys(this._streams).forEach(streamid => {\n      const hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);\n      if (hasTrack) {\n        stream = this._streams[streamid];\n      }\n    });\n    if (stream) {\n      if (stream.getTracks().length === 1) {\n        // if this is the last track of the stream, remove the stream. This\n        // takes care of any shimmed _senders.\n        this.removeStream(this._reverseStreams[stream.id]);\n      } else {\n        // relying on the same odd chrome behaviour as above.\n        stream.removeTrack(sender.track);\n      }\n      this.dispatchEvent(new Event('negotiationneeded'));\n    }\n  };\n}\nfunction shimPeerConnection$1(window, browserDetails) {\n  if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n    // very basic support for old versions.\n    window.RTCPeerConnection = window.webkitRTCPeerConnection;\n  }\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n\n  // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n  if (browserDetails.version < 53) {\n    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n      const nativeMethod = window.RTCPeerConnection.prototype[method];\n      const methodObj = {\n        [method]() {\n          arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n          return nativeMethod.apply(this, arguments);\n        }\n      };\n      window.RTCPeerConnection.prototype[method] = methodObj[method];\n    });\n  }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n  if (browserDetails.version > 102) {\n    // Plan-B is no longer supported.\n    return;\n  }\n  wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n    const pc = e.target;\n    if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n      if (pc.signalingState !== 'stable') {\n        return;\n      }\n    }\n    return e;\n  });\n}var chromeShim=/*#__PURE__*/Object.freeze({__proto__:null,fixNegotiationNeeded:fixNegotiationNeeded,shimAddTrackRemoveTrack:shimAddTrackRemoveTrack,shimAddTrackRemoveTrackWithNative:shimAddTrackRemoveTrackWithNative,shimGetSendersWithDtmf:shimGetSendersWithDtmf,shimGetUserMedia:shimGetUserMedia$2,shimMediaStream:shimMediaStream,shimOnTrack:shimOnTrack$1,shimPeerConnection:shimPeerConnection$1,shimSenderReceiverGetStats:shimSenderReceiverGetStats});/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimGetUserMedia$1(window, browserDetails) {\n  const navigator = window && window.navigator;\n  const MediaStreamTrack = window && window.MediaStreamTrack;\n  navigator.getUserMedia = function (constraints, onSuccess, onError) {\n    // Replace Firefox 44+'s deprecation warning with unprefixed version.\n    deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n    navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n  };\n  if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n    const remap = function (obj, a, b) {\n      if (a in obj && !(b in obj)) {\n        obj[b] = obj[a];\n        delete obj[a];\n      }\n    };\n    const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (c) {\n      if (typeof c === 'object' && typeof c.audio === 'object') {\n        c = JSON.parse(JSON.stringify(c));\n        remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n        remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n      }\n      return nativeGetUserMedia(c);\n    };\n    if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n      const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n      MediaStreamTrack.prototype.getSettings = function () {\n        const obj = nativeGetSettings.apply(this, arguments);\n        remap(obj, 'mozAutoGainControl', 'autoGainControl');\n        remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n        return obj;\n      };\n    }\n    if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n      const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n      MediaStreamTrack.prototype.applyConstraints = function (c) {\n        if (this.kind === 'audio' && typeof c === 'object') {\n          c = JSON.parse(JSON.stringify(c));\n          remap(c, 'autoGainControl', 'mozAutoGainControl');\n          remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n        }\n        return nativeApplyConstraints.apply(this, [c]);\n      };\n    }\n  }\n}/*\n *  Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n  if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n    return;\n  }\n  if (!window.navigator.mediaDevices) {\n    return;\n  }\n  window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n    if (!(constraints && constraints.video)) {\n      const err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n      err.name = 'NotFoundError';\n      // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n      err.code = 8;\n      return Promise.reject(err);\n    }\n    if (constraints.video === true) {\n      constraints.video = {\n        mediaSource: preferredMediaSource\n      };\n    } else {\n      constraints.video.mediaSource = preferredMediaSource;\n    }\n    return window.navigator.mediaDevices.getUserMedia(constraints);\n  };\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimOnTrack(window) {\n  if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n      get() {\n        return {\n          receiver: this.receiver\n        };\n      }\n    });\n  }\n}\nfunction shimPeerConnection(window, browserDetails) {\n  if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n    return; // probably media.peerconnection.enabled=false in about:config\n  }\n  if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n    // very basic support for old versions.\n    window.RTCPeerConnection = window.mozRTCPeerConnection;\n  }\n  if (browserDetails.version < 53) {\n    // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n      const nativeMethod = window.RTCPeerConnection.prototype[method];\n      const methodObj = {\n        [method]() {\n          arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n          return nativeMethod.apply(this, arguments);\n        }\n      };\n      window.RTCPeerConnection.prototype[method] = methodObj[method];\n    });\n  }\n}\nfunction shimGetStats(window, browserDetails) {\n  if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n    return; // probably media.peerconnection.enabled=false in about:config\n  }\n  if (browserDetails.version >= 151) {\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1056433\n    return;\n  }\n  const modernStatsTypes = {\n    inboundrtp: 'inbound-rtp',\n    outboundrtp: 'outbound-rtp',\n    candidatepair: 'candidate-pair',\n    localcandidate: 'local-candidate',\n    remotecandidate: 'remote-candidate'\n  };\n  const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    const _arguments = Array.prototype.slice.call(arguments),\n      selector = _arguments[0],\n      onSucc = _arguments[1],\n      onErr = _arguments[2];\n    if (this.signalingState === 'closed') {\n      // No longer required in FF151+\n      return Promise.resolve(new Map());\n    }\n    return nativeGetStats.apply(this, [selector || null]).then(stats => {\n      if (browserDetails.version < 53 && !onSucc) {\n        // Shim only promise getStats with spec-hyphens in type names\n        // Leave callback version alone; misc old uses of forEach before Map\n        try {\n          stats.forEach(stat => {\n            stat.type = modernStatsTypes[stat.type] || stat.type;\n          });\n        } catch (e) {\n          if (e.name !== 'TypeError') {\n            throw e;\n          }\n          // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n          stats.forEach((stat, i) => {\n            stats.set(i, Object.assign({}, stat, {\n              type: modernStatsTypes[stat.type] || stat.type\n            }));\n          });\n        }\n      }\n      return stats;\n    }).then(onSucc, onErr);\n  };\n}\nfunction shimSenderGetStats(window) {\n  if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n    return;\n  }\n  if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n    return;\n  }\n  const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n  if (origGetSenders) {\n    window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n      const senders = origGetSenders.apply(this, []);\n      senders.forEach(sender => sender._pc = this);\n      return senders;\n    };\n  }\n  const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n  if (origAddTrack) {\n    window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n      const sender = origAddTrack.apply(this, arguments);\n      sender._pc = this;\n      return sender;\n    };\n  }\n  window.RTCRtpSender.prototype.getStats = function getStats() {\n    return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n  };\n}\nfunction shimReceiverGetStats(window) {\n  if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n    return;\n  }\n  if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n    return;\n  }\n  const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n  if (origGetReceivers) {\n    window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n      const receivers = origGetReceivers.apply(this, []);\n      receivers.forEach(receiver => receiver._pc = this);\n      return receivers;\n    };\n  }\n  wrapPeerConnectionEvent(window, 'track', e => {\n    e.receiver._pc = e.srcElement;\n    return e;\n  });\n  window.RTCRtpReceiver.prototype.getStats = function getStats() {\n    return this._pc.getStats(this.track);\n  };\n}\nfunction shimRemoveStream(window) {\n  if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    deprecated('removeStream', 'removeTrack');\n    this.getSenders().forEach(sender => {\n      if (sender.track && stream.getTracks().includes(sender.track)) {\n        this.removeTrack(sender);\n      }\n    });\n  };\n}\nfunction shimRTCDataChannel(window) {\n  // rename DataChannel to RTCDataChannel (native fix in FF60):\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n  if (window.DataChannel && !window.RTCDataChannel) {\n    window.RTCDataChannel = window.DataChannel;\n  }\n}\nfunction shimAddTransceiver(window) {\n  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n  // Firefox ignores the init sendEncodings options passed to addTransceiver\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n  if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n  if (origAddTransceiver) {\n    window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n      this.setParametersPromises = [];\n      // WebIDL input coercion and validation\n      let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n      if (sendEncodings === undefined) {\n        sendEncodings = [];\n      }\n      sendEncodings = [...sendEncodings];\n      const shouldPerformCheck = sendEncodings.length > 0;\n      if (shouldPerformCheck) {\n        // If sendEncodings params are provided, validate grammar\n        sendEncodings.forEach(encodingParam => {\n          if ('rid' in encodingParam) {\n            const ridRegex = /^[a-z0-9]{0,16}$/i;\n            if (!ridRegex.test(encodingParam.rid)) {\n              throw new TypeError('Invalid RID value provided.');\n            }\n          }\n          if ('scaleResolutionDownBy' in encodingParam) {\n            if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n              throw new RangeError('scale_resolution_down_by must be >= 1.0');\n            }\n          }\n          if ('maxFramerate' in encodingParam) {\n            if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n              throw new RangeError('max_framerate must be >= 0.0');\n            }\n          }\n        });\n      }\n      const transceiver = origAddTransceiver.apply(this, arguments);\n      if (shouldPerformCheck) {\n        // Check if the init options were applied. If not we do this in an\n        // asynchronous way and save the promise reference in a global object.\n        // This is an ugly hack, but at the same time is way more robust than\n        // checking the sender parameters before and after the createOffer\n        // Also note that after the createoffer we are not 100% sure that\n        // the params were asynchronously applied so we might miss the\n        // opportunity to recreate offer.\n        const sender = transceiver.sender;\n        const params = sender.getParameters();\n        if (!('encodings' in params) ||\n        // Avoid being fooled by patched getParameters() below.\n        params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n          params.encodings = sendEncodings;\n          sender.sendEncodings = sendEncodings;\n          this.setParametersPromises.push(sender.setParameters(params).then(() => {\n            delete sender.sendEncodings;\n          }).catch(() => {\n            delete sender.sendEncodings;\n          }));\n        }\n      }\n      return transceiver;\n    };\n  }\n}\nfunction shimGetParameters(window) {\n  if (!(typeof window === 'object' && window.RTCRtpSender)) {\n    return;\n  }\n  const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n  if (origGetParameters) {\n    window.RTCRtpSender.prototype.getParameters = function getParameters() {\n      const params = origGetParameters.apply(this, arguments);\n      if (!('encodings' in params)) {\n        params.encodings = [].concat(this.sendEncodings || [{}]);\n      }\n      return params;\n    };\n  }\n}\nfunction shimCreateOffer(window) {\n  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n  // Firefox ignores the init sendEncodings options passed to addTransceiver\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n  if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n  window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n    if (this.setParametersPromises && this.setParametersPromises.length) {\n      return Promise.all(this.setParametersPromises).then(() => {\n        return origCreateOffer.apply(this, arguments);\n      }).finally(() => {\n        this.setParametersPromises = [];\n      });\n    }\n    return origCreateOffer.apply(this, arguments);\n  };\n}\nfunction shimCreateAnswer(window) {\n  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n  // Firefox ignores the init sendEncodings options passed to addTransceiver\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n  if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n  window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n    if (this.setParametersPromises && this.setParametersPromises.length) {\n      return Promise.all(this.setParametersPromises).then(() => {\n        return origCreateAnswer.apply(this, arguments);\n      }).finally(() => {\n        this.setParametersPromises = [];\n      });\n    }\n    return origCreateAnswer.apply(this, arguments);\n  };\n}var firefoxShim=/*#__PURE__*/Object.freeze({__proto__:null,shimAddTransceiver:shimAddTransceiver,shimCreateAnswer:shimCreateAnswer,shimCreateOffer:shimCreateOffer,shimGetDisplayMedia:shimGetDisplayMedia,shimGetParameters:shimGetParameters,shimGetStats:shimGetStats,shimGetUserMedia:shimGetUserMedia$1,shimOnTrack:shimOnTrack,shimPeerConnection:shimPeerConnection,shimRTCDataChannel:shimRTCDataChannel,shimReceiverGetStats:shimReceiverGetStats,shimRemoveStream:shimRemoveStream,shimSenderGetStats:shimSenderGetStats});/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\nfunction shimLocalStreamsAPI(window) {\n  if (typeof window !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      return this._localStreams;\n    };\n  }\n  if (!('addStream' in window.RTCPeerConnection.prototype)) {\n    const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      if (!this._localStreams.includes(stream)) {\n        this._localStreams.push(stream);\n      }\n      // Try to emulate Chrome's behaviour of adding in audio-video order.\n      // Safari orders by track id.\n      stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));\n      stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));\n    };\n    window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n      for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        streams[_key - 1] = arguments[_key];\n      }\n      if (streams) {\n        streams.forEach(stream => {\n          if (!this._localStreams) {\n            this._localStreams = [stream];\n          } else if (!this._localStreams.includes(stream)) {\n            this._localStreams.push(stream);\n          }\n        });\n      }\n      return _addTrack.apply(this, arguments);\n    };\n  }\n  if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      const index = this._localStreams.indexOf(stream);\n      if (index === -1) {\n        return;\n      }\n      this._localStreams.splice(index, 1);\n      const tracks = stream.getTracks();\n      this.getSenders().forEach(sender => {\n        if (tracks.includes(sender.track)) {\n          this.removeTrack(sender);\n        }\n      });\n    };\n  }\n}\nfunction shimRemoteStreamsAPI(window) {\n  if (typeof window !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n      return this._remoteStreams ? this._remoteStreams : [];\n    };\n  }\n  if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n      get() {\n        return this._onaddstream;\n      },\n      set(f) {\n        if (this._onaddstream) {\n          this.removeEventListener('addstream', this._onaddstream);\n          this.removeEventListener('track', this._onaddstreampoly);\n        }\n        this.addEventListener('addstream', this._onaddstream = f);\n        this.addEventListener('track', this._onaddstreampoly = e => {\n          e.streams.forEach(stream => {\n            if (!this._remoteStreams) {\n              this._remoteStreams = [];\n            }\n            if (this._remoteStreams.includes(stream)) {\n              return;\n            }\n            this._remoteStreams.push(stream);\n            const event = new Event('addstream');\n            event.stream = stream;\n            this.dispatchEvent(event);\n          });\n        });\n      }\n    });\n    const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n    window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n      const pc = this;\n      if (!this._onaddstreampoly) {\n        this.addEventListener('track', this._onaddstreampoly = function (e) {\n          e.streams.forEach(stream => {\n            if (!pc._remoteStreams) {\n              pc._remoteStreams = [];\n            }\n            if (pc._remoteStreams.indexOf(stream) >= 0) {\n              return;\n            }\n            pc._remoteStreams.push(stream);\n            const event = new Event('addstream');\n            event.stream = stream;\n            pc.dispatchEvent(event);\n          });\n        });\n      }\n      return origSetRemoteDescription.apply(pc, arguments);\n    };\n  }\n}\nfunction shimCallbacksAPI(window) {\n  if (typeof window !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  const prototype = window.RTCPeerConnection.prototype;\n  const origCreateOffer = prototype.createOffer;\n  const origCreateAnswer = prototype.createAnswer;\n  const setLocalDescription = prototype.setLocalDescription;\n  const setRemoteDescription = prototype.setRemoteDescription;\n  const addIceCandidate = prototype.addIceCandidate;\n  prototype.createOffer = function createOffer(successCallback, failureCallback) {\n    const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n    const promise = origCreateOffer.apply(this, [options]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n    const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n    const promise = origCreateAnswer.apply(this, [options]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  let withCallback = function (description, successCallback, failureCallback) {\n    const promise = setLocalDescription.apply(this, [description]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.setLocalDescription = withCallback;\n  withCallback = function (description, successCallback, failureCallback) {\n    const promise = setRemoteDescription.apply(this, [description]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.setRemoteDescription = withCallback;\n  withCallback = function (candidate, successCallback, failureCallback) {\n    const promise = addIceCandidate.apply(this, [candidate]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n  const navigator = window && window.navigator;\n  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    // shim not needed in Safari 12.1\n    const mediaDevices = navigator.mediaDevices;\n    const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n    navigator.mediaDevices.getUserMedia = constraints => {\n      return _getUserMedia(shimConstraints(constraints));\n    };\n  }\n  if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n      navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n    }.bind(navigator);\n  }\n}\nfunction shimConstraints(constraints) {\n  if (constraints && constraints.video !== undefined) {\n    return Object.assign({}, constraints, {\n      video: compactObject(constraints.video)\n    });\n  }\n  return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n  const OrigPeerConnection = window.RTCPeerConnection;\n  window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n    if (pcConfig && pcConfig.iceServers) {\n      const newIceServers = [];\n      for (let i = 0; i < pcConfig.iceServers.length; i++) {\n        let server = pcConfig.iceServers[i];\n        if (server.urls === undefined && server.url) {\n          deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n          server = JSON.parse(JSON.stringify(server));\n          server.urls = server.url;\n          delete server.url;\n          newIceServers.push(server);\n        } else {\n          newIceServers.push(pcConfig.iceServers[i]);\n        }\n      }\n      pcConfig.iceServers = newIceServers;\n    }\n    return new OrigPeerConnection(pcConfig, pcConstraints);\n  };\n  window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n  // wrap static methods. Currently just generateCertificate.\n  if ('generateCertificate' in OrigPeerConnection) {\n    Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n      get() {\n        return OrigPeerConnection.generateCertificate;\n      }\n    });\n  }\n}\nfunction shimTrackEventTransceiver(window) {\n  // Add event.transceiver member over deprecated event.receiver\n  if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n      get() {\n        return {\n          receiver: this.receiver\n        };\n      }\n    });\n  }\n}\nfunction shimCreateOfferLegacy(window) {\n  const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n  window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n    if (offerOptions) {\n      if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n        // support bit values\n        offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n      }\n      const audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');\n      if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n        if (audioTransceiver.direction === 'sendrecv') {\n          if (audioTransceiver.setDirection) {\n            audioTransceiver.setDirection('sendonly');\n          } else {\n            audioTransceiver.direction = 'sendonly';\n          }\n        } else if (audioTransceiver.direction === 'recvonly') {\n          if (audioTransceiver.setDirection) {\n            audioTransceiver.setDirection('inactive');\n          } else {\n            audioTransceiver.direction = 'inactive';\n          }\n        }\n      } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n        this.addTransceiver('audio', {\n          direction: 'recvonly'\n        });\n      }\n      if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n        // support bit values\n        offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n      }\n      const videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');\n      if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n        if (videoTransceiver.direction === 'sendrecv') {\n          if (videoTransceiver.setDirection) {\n            videoTransceiver.setDirection('sendonly');\n          } else {\n            videoTransceiver.direction = 'sendonly';\n          }\n        } else if (videoTransceiver.direction === 'recvonly') {\n          if (videoTransceiver.setDirection) {\n            videoTransceiver.setDirection('inactive');\n          } else {\n            videoTransceiver.direction = 'inactive';\n          }\n        }\n      } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n        this.addTransceiver('video', {\n          direction: 'recvonly'\n        });\n      }\n    }\n    return origCreateOffer.apply(this, arguments);\n  };\n}\nfunction shimAudioContext(window) {\n  if (typeof window !== 'object' || window.AudioContext) {\n    return;\n  }\n  window.AudioContext = window.webkitAudioContext;\n}var safariShim=/*#__PURE__*/Object.freeze({__proto__:null,shimAudioContext:shimAudioContext,shimCallbacksAPI:shimCallbacksAPI,shimConstraints:shimConstraints,shimCreateOfferLegacy:shimCreateOfferLegacy,shimGetUserMedia:shimGetUserMedia,shimLocalStreamsAPI:shimLocalStreamsAPI,shimRTCIceServerUrls:shimRTCIceServerUrls,shimRemoteStreamsAPI:shimRemoteStreamsAPI,shimTrackEventTransceiver:shimTrackEventTransceiver});var sdp$1 = {exports: {}};/* eslint-env node */\nvar hasRequiredSdp;\nfunction requireSdp() {\n  if (hasRequiredSdp) return sdp$1.exports;\n  hasRequiredSdp = 1;\n  (function (module) {\n\n    // SDP helpers.\n    const SDPUtils = {};\n\n    // Generate an alphanumeric identifier for cname or mids.\n    // TODO: use UUIDs instead? https://gist.github.com/jed/982883\n    SDPUtils.generateIdentifier = function () {\n      return Math.random().toString(36).substring(2, 12);\n    };\n\n    // The RTCP CNAME used by all peerconnections from the same JS.\n    SDPUtils.localCName = SDPUtils.generateIdentifier();\n\n    // Splits SDP into lines, dealing with both CRLF and LF.\n    SDPUtils.splitLines = function (blob) {\n      return blob.trim().split('\\n').map(line => line.trim());\n    };\n    // Splits SDP into sessionpart and mediasections. Ensures CRLF.\n    SDPUtils.splitSections = function (blob) {\n      const parts = blob.split('\\nm=');\n      return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n    };\n\n    // Returns the session description.\n    SDPUtils.getDescription = function (blob) {\n      const sections = SDPUtils.splitSections(blob);\n      return sections && sections[0];\n    };\n\n    // Returns the individual media sections.\n    SDPUtils.getMediaSections = function (blob) {\n      const sections = SDPUtils.splitSections(blob);\n      sections.shift();\n      return sections;\n    };\n\n    // Returns lines that start with a certain prefix.\n    SDPUtils.matchPrefix = function (blob, prefix) {\n      return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n    };\n\n    // Parses an ICE candidate line. Sample input:\n    // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n    // rport 55996\"\n    // Input can be prefixed with a=.\n    SDPUtils.parseCandidate = function (line) {\n      let parts;\n      // Parse both variants.\n      if (line.indexOf('a=candidate:') === 0) {\n        parts = line.substring(12).split(' ');\n      } else {\n        parts = line.substring(10).split(' ');\n      }\n      const candidate = {\n        foundation: parts[0],\n        component: {\n          1: 'rtp',\n          2: 'rtcp'\n        }[parts[1]] || parts[1],\n        protocol: parts[2].toLowerCase(),\n        priority: parseInt(parts[3], 10),\n        ip: parts[4],\n        address: parts[4],\n        // address is an alias for ip.\n        port: parseInt(parts[5], 10),\n        // skip parts[6] == 'typ'\n        type: parts[7]\n      };\n      for (let i = 8; i < parts.length; i += 2) {\n        switch (parts[i]) {\n          case 'raddr':\n            candidate.relatedAddress = parts[i + 1];\n            break;\n          case 'rport':\n            candidate.relatedPort = parseInt(parts[i + 1], 10);\n            break;\n          case 'tcptype':\n            candidate.tcpType = parts[i + 1];\n            break;\n          case 'ufrag':\n            candidate.ufrag = parts[i + 1]; // for backward compatibility.\n            candidate.usernameFragment = parts[i + 1];\n            break;\n          default:\n            // extension handling, in particular ufrag. Don't overwrite.\n            if (candidate[parts[i]] === undefined) {\n              candidate[parts[i]] = parts[i + 1];\n            }\n            break;\n        }\n      }\n      return candidate;\n    };\n\n    // Translates a candidate object into SDP candidate attribute.\n    // This does not include the a= prefix!\n    SDPUtils.writeCandidate = function (candidate) {\n      const sdp = [];\n      sdp.push(candidate.foundation);\n      const component = candidate.component;\n      if (component === 'rtp') {\n        sdp.push(1);\n      } else if (component === 'rtcp') {\n        sdp.push(2);\n      } else {\n        sdp.push(component);\n      }\n      sdp.push(candidate.protocol.toUpperCase());\n      sdp.push(candidate.priority);\n      sdp.push(candidate.address || candidate.ip);\n      sdp.push(candidate.port);\n      const type = candidate.type;\n      sdp.push('typ');\n      sdp.push(type);\n      if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort !== undefined) {\n        sdp.push('raddr');\n        sdp.push(candidate.relatedAddress);\n        sdp.push('rport');\n        sdp.push(candidate.relatedPort);\n      }\n      if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n        sdp.push('tcptype');\n        sdp.push(candidate.tcpType);\n      }\n      if (candidate.usernameFragment || candidate.ufrag) {\n        sdp.push('ufrag');\n        sdp.push(candidate.usernameFragment || candidate.ufrag);\n      }\n      return 'candidate:' + sdp.join(' ');\n    };\n\n    // Parses an ice-options line, returns an array of option tags.\n    // Sample input:\n    // a=ice-options:foo bar\n    SDPUtils.parseIceOptions = function (line) {\n      return line.substring(14).split(' ');\n    };\n\n    // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n    // a=rtpmap:111 opus/48000/2\n    SDPUtils.parseRtpMap = function (line) {\n      let parts = line.substring(9).split(' ');\n      const parsed = {\n        payloadType: parseInt(parts.shift(), 10) // was: id\n      };\n      parts = parts[0].split('/');\n      parsed.name = parts[0];\n      parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n      parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n      // legacy alias, got renamed back to channels in ORTC.\n      parsed.numChannels = parsed.channels;\n      return parsed;\n    };\n\n    // Generates a rtpmap line from RTCRtpCodecCapability or\n    // RTCRtpCodecParameters.\n    SDPUtils.writeRtpMap = function (codec) {\n      let pt = codec.payloadType;\n      if (codec.preferredPayloadType !== undefined) {\n        pt = codec.preferredPayloadType;\n      }\n      const channels = codec.channels || codec.numChannels || 1;\n      return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n    };\n\n    // Parses a extmap line (headerextension from RFC 5285). Sample input:\n    // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n    // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n    SDPUtils.parseExtmap = function (line) {\n      const parts = line.substring(9).split(' ');\n      return {\n        id: parseInt(parts[0], 10),\n        direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n        uri: parts[1],\n        attributes: parts.slice(2).join(' ')\n      };\n    };\n\n    // Generates an extmap line from RTCRtpHeaderExtensionParameters or\n    // RTCRtpHeaderExtension.\n    SDPUtils.writeExtmap = function (headerExtension) {\n      return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\\r\\n';\n    };\n\n    // Parses a fmtp line, returns dictionary. Sample input:\n    // a=fmtp:96 vbr=on;cng=on\n    // Also deals with vbr=on; cng=on\n    // Non-key-value such as telephone-events `0-15` get parsed as\n    // {`0-15`:undefined}\n    SDPUtils.parseFmtp = function (line) {\n      const parsed = {};\n      let kv;\n      const parts = line.substring(line.indexOf(' ') + 1).split(';');\n      for (let j = 0; j < parts.length; j++) {\n        kv = parts[j].trim().split('=');\n        parsed[kv[0].trim()] = kv[1];\n      }\n      return parsed;\n    };\n\n    // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n    SDPUtils.writeFmtp = function (codec) {\n      let line = '';\n      let pt = codec.payloadType;\n      if (codec.preferredPayloadType !== undefined) {\n        pt = codec.preferredPayloadType;\n      }\n      if (codec.parameters && Object.keys(codec.parameters).length) {\n        const params = [];\n        Object.keys(codec.parameters).forEach(param => {\n          if (codec.parameters[param] !== undefined) {\n            params.push(param + '=' + codec.parameters[param]);\n          } else {\n            params.push(param);\n          }\n        });\n        line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n      }\n      return line;\n    };\n\n    // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n    // a=rtcp-fb:98 nack rpsi\n    SDPUtils.parseRtcpFb = function (line) {\n      const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n      return {\n        type: parts.shift(),\n        parameter: parts.join(' ')\n      };\n    };\n\n    // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n    SDPUtils.writeRtcpFb = function (codec) {\n      let lines = '';\n      let pt = codec.payloadType;\n      if (codec.preferredPayloadType !== undefined) {\n        pt = codec.preferredPayloadType;\n      }\n      if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n        // FIXME: special handling for trr-int?\n        codec.rtcpFeedback.forEach(fb => {\n          lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n        });\n      }\n      return lines;\n    };\n\n    // Parses a RFC 5576 ssrc media attribute. Sample input:\n    // a=ssrc:3735928559 cname:something\n    SDPUtils.parseSsrcMedia = function (line) {\n      const sp = line.indexOf(' ');\n      const parts = {\n        ssrc: parseInt(line.substring(7, sp), 10)\n      };\n      const colon = line.indexOf(':', sp);\n      if (colon > -1) {\n        parts.attribute = line.substring(sp + 1, colon);\n        parts.value = line.substring(colon + 1);\n      } else {\n        parts.attribute = line.substring(sp + 1);\n      }\n      return parts;\n    };\n\n    // Parse a ssrc-group line (see RFC 5576). Sample input:\n    // a=ssrc-group:semantics 12 34\n    SDPUtils.parseSsrcGroup = function (line) {\n      const parts = line.substring(13).split(' ');\n      return {\n        semantics: parts.shift(),\n        ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n      };\n    };\n\n    // Extracts the MID (RFC 5888) from a media section.\n    // Returns the MID or undefined if no mid line was found.\n    SDPUtils.getMid = function (mediaSection) {\n      const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n      if (mid) {\n        return mid.substring(6);\n      }\n    };\n\n    // Parses a fingerprint line for DTLS-SRTP.\n    SDPUtils.parseFingerprint = function (line) {\n      const parts = line.substring(14).split(' ');\n      return {\n        algorithm: parts[0].toLowerCase(),\n        // algorithm is case-sensitive in Edge.\n        value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n      };\n    };\n\n    // Extracts DTLS parameters from SDP media section or sessionpart.\n    // FIXME: for consistency with other functions this should only\n    //   get the fingerprint line as input. See also getIceParameters.\n    SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n      const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n      // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n      return {\n        role: 'auto',\n        fingerprints: lines.map(SDPUtils.parseFingerprint)\n      };\n    };\n\n    // Serializes DTLS parameters to SDP.\n    SDPUtils.writeDtlsParameters = function (params, setupType) {\n      let sdp = 'a=setup:' + setupType + '\\r\\n';\n      params.fingerprints.forEach(fp => {\n        sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n      });\n      return sdp;\n    };\n\n    // Parses a=crypto lines into\n    //   https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n    SDPUtils.parseCryptoLine = function (line) {\n      const parts = line.substring(9).split(' ');\n      return {\n        tag: parseInt(parts[0], 10),\n        cryptoSuite: parts[1],\n        keyParams: parts[2],\n        sessionParams: parts.slice(3)\n      };\n    };\n    SDPUtils.writeCryptoLine = function (parameters) {\n      return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n    };\n\n    // Parses the crypto key parameters into\n    //   https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n    SDPUtils.parseCryptoKeyParams = function (keyParams) {\n      if (keyParams.indexOf('inline:') !== 0) {\n        return null;\n      }\n      const parts = keyParams.substring(7).split('|');\n      return {\n        keyMethod: 'inline',\n        keySalt: parts[0],\n        lifeTime: parts[1],\n        mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n        mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n      };\n    };\n    SDPUtils.writeCryptoKeyParams = function (keyParams) {\n      return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n    };\n\n    // Extracts all SDES parameters.\n    SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n      const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n      return lines.map(SDPUtils.parseCryptoLine);\n    };\n\n    // Parses ICE information from SDP media section or sessionpart.\n    // FIXME: for consistency with other functions this should only\n    //   get the ice-ufrag and ice-pwd lines as input.\n    SDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n      const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n      const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n      if (!(ufrag && pwd)) {\n        return null;\n      }\n      return {\n        usernameFragment: ufrag.substring(12),\n        password: pwd.substring(10)\n      };\n    };\n\n    // Serializes ICE parameters to SDP.\n    SDPUtils.writeIceParameters = function (params) {\n      let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n      if (params.iceLite) {\n        sdp += 'a=ice-lite\\r\\n';\n      }\n      return sdp;\n    };\n\n    // Parses the SDP media section and returns RTCRtpParameters.\n    SDPUtils.parseRtpParameters = function (mediaSection) {\n      const description = {\n        codecs: [],\n        headerExtensions: [],\n        fecMechanisms: [],\n        rtcp: []\n      };\n      const lines = SDPUtils.splitLines(mediaSection);\n      const mline = lines[0].split(' ');\n      description.profile = mline[2];\n      for (let i = 3; i < mline.length; i++) {\n        // find all codecs from mline[3..]\n        const pt = mline[i];\n        const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n        if (rtpmapline) {\n          const codec = SDPUtils.parseRtpMap(rtpmapline);\n          const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n          // Only the first a=fmtp:<pt> is considered.\n          codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n          codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n          description.codecs.push(codec);\n          // parse FEC mechanisms from rtpmap lines.\n          switch (codec.name.toUpperCase()) {\n            case 'RED':\n            case 'ULPFEC':\n              description.fecMechanisms.push(codec.name.toUpperCase());\n              break;\n          }\n        }\n      }\n      SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n        description.headerExtensions.push(SDPUtils.parseExtmap(line));\n      });\n      const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb);\n      description.codecs.forEach(codec => {\n        wildcardRtcpFb.forEach(fb => {\n          const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n            return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n          });\n          if (!duplicate) {\n            codec.rtcpFeedback.push(fb);\n          }\n        });\n      });\n      // FIXME: parse rtcp.\n      return description;\n    };\n\n    // Generates parts of the SDP media section describing the capabilities /\n    // parameters.\n    SDPUtils.writeRtpDescription = function (kind, caps) {\n      let sdp = '';\n\n      // Build the mline.\n      sdp += 'm=' + kind + ' ';\n      sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n      sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n      sdp += caps.codecs.map(codec => {\n        if (codec.preferredPayloadType !== undefined) {\n          return codec.preferredPayloadType;\n        }\n        return codec.payloadType;\n      }).join(' ') + '\\r\\n';\n      sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n      sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n      // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n      caps.codecs.forEach(codec => {\n        sdp += SDPUtils.writeRtpMap(codec);\n        sdp += SDPUtils.writeFmtp(codec);\n        sdp += SDPUtils.writeRtcpFb(codec);\n      });\n      let maxptime = 0;\n      caps.codecs.forEach(codec => {\n        if (codec.maxptime > maxptime) {\n          maxptime = codec.maxptime;\n        }\n      });\n      if (maxptime > 0) {\n        sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n      }\n      if (caps.headerExtensions) {\n        caps.headerExtensions.forEach(extension => {\n          sdp += SDPUtils.writeExtmap(extension);\n        });\n      }\n      // FIXME: write fecMechanisms.\n      return sdp;\n    };\n\n    // Parses the SDP media section and returns an array of\n    // RTCRtpEncodingParameters.\n    SDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n      const encodingParameters = [];\n      const description = SDPUtils.parseRtpParameters(mediaSection);\n      const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n      const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n      // filter a=ssrc:... cname:, ignore PlanB-msid\n      const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n      const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n      let secondarySsrc;\n      const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n        const parts = line.substring(17).split(' ');\n        return parts.map(part => parseInt(part, 10));\n      });\n      if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n        secondarySsrc = flows[0][1];\n      }\n      description.codecs.forEach(codec => {\n        if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n          let encParam = {\n            ssrc: primarySsrc,\n            codecPayloadType: parseInt(codec.parameters.apt, 10)\n          };\n          if (primarySsrc && secondarySsrc) {\n            encParam.rtx = {\n              ssrc: secondarySsrc\n            };\n          }\n          encodingParameters.push(encParam);\n          if (hasRed) {\n            encParam = JSON.parse(JSON.stringify(encParam));\n            encParam.fec = {\n              ssrc: primarySsrc,\n              mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n            };\n            encodingParameters.push(encParam);\n          }\n        }\n      });\n      if (encodingParameters.length === 0 && primarySsrc) {\n        encodingParameters.push({\n          ssrc: primarySsrc\n        });\n      }\n\n      // we support both b=AS and b=TIAS but interpret AS as TIAS.\n      let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n      if (bandwidth.length) {\n        if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n          bandwidth = parseInt(bandwidth[0].substring(7), 10);\n        } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n          // use formula from JSEP to convert b=AS to TIAS value.\n          bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n        } else {\n          bandwidth = undefined;\n        }\n        encodingParameters.forEach(params => {\n          params.maxBitrate = bandwidth;\n        });\n      }\n      return encodingParameters;\n    };\n\n    // parses http://draft.ortc.org/#rtcrtcpparameters*\n    SDPUtils.parseRtcpParameters = function (mediaSection) {\n      const rtcpParameters = {};\n\n      // Gets the first SSRC. Note that with RTX there might be multiple\n      // SSRCs.\n      const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n      if (remoteSsrc) {\n        rtcpParameters.cname = remoteSsrc.value;\n        rtcpParameters.ssrc = remoteSsrc.ssrc;\n      }\n\n      // Edge uses the compound attribute instead of reducedSize\n      // compound is !reducedSize\n      const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n      rtcpParameters.reducedSize = rsize.length > 0;\n      rtcpParameters.compound = rsize.length === 0;\n\n      // parses the rtcp-mux attrіbute.\n      // Note that Edge does not support unmuxed RTCP.\n      const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n      rtcpParameters.mux = mux.length > 0;\n      return rtcpParameters;\n    };\n    SDPUtils.writeRtcpParameters = function (rtcpParameters) {\n      let sdp = '';\n      if (rtcpParameters.reducedSize) {\n        sdp += 'a=rtcp-rsize\\r\\n';\n      }\n      if (rtcpParameters.mux) {\n        sdp += 'a=rtcp-mux\\r\\n';\n      }\n      if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n        sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n      }\n      return sdp;\n    };\n\n    // parses either a=msid: or a=ssrc:... msid lines and returns\n    // the id of the MediaStream and MediaStreamTrack.\n    SDPUtils.parseMsid = function (mediaSection) {\n      let parts;\n      const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n      if (spec.length === 1) {\n        parts = spec[0].substring(7).split(' ');\n        return {\n          stream: parts[0],\n          track: parts[1]\n        };\n      }\n      const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n      if (planB.length > 0) {\n        parts = planB[0].value.split(' ');\n        return {\n          stream: parts[0],\n          track: parts[1]\n        };\n      }\n    };\n\n    // SCTP\n    // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n    // to draft-ietf-mmusic-sctp-sdp-05\n    SDPUtils.parseSctpDescription = function (mediaSection) {\n      const mline = SDPUtils.parseMLine(mediaSection);\n      const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n      let maxMessageSize;\n      if (maxSizeLine.length > 0) {\n        maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n      }\n      if (isNaN(maxMessageSize)) {\n        maxMessageSize = 65536;\n      }\n      const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n      if (sctpPort.length > 0) {\n        return {\n          port: parseInt(sctpPort[0].substring(12), 10),\n          protocol: mline.fmt,\n          maxMessageSize\n        };\n      }\n      const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n      if (sctpMapLines.length > 0) {\n        const parts = sctpMapLines[0].substring(10).split(' ');\n        return {\n          port: parseInt(parts[0], 10),\n          protocol: parts[1],\n          maxMessageSize\n        };\n      }\n    };\n\n    // SCTP\n    // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n    // support by now receiving in this format, unless we originally parsed\n    // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n    // protocol of DTLS/SCTP -- without UDP/ or TCP/)\n    SDPUtils.writeSctpDescription = function (media, sctp) {\n      let output = [];\n      if (media.protocol !== 'DTLS/SCTP') {\n        output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n      } else {\n        output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n      }\n      if (sctp.maxMessageSize !== undefined) {\n        output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n      }\n      return output.join('');\n    };\n\n    // Generate a session ID for SDP.\n    // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n    // recommends using a cryptographically random +ve 64-bit value\n    // but right now this should be acceptable and within the right range\n    SDPUtils.generateSessionId = function () {\n      return Math.random().toString().substr(2, 22);\n    };\n\n    // Write boiler plate for start of SDP\n    // sessId argument is optional - if not supplied it will\n    // be generated randomly\n    // sessVersion is optional and defaults to 2\n    // sessUser is optional and defaults to 'thisisadapterortc'\n    SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n      let sessionId;\n      const version = sessVer !== undefined ? sessVer : 2;\n      if (sessId) {\n        sessionId = sessId;\n      } else {\n        sessionId = SDPUtils.generateSessionId();\n      }\n      const user = sessUser || 'thisisadapterortc';\n      // FIXME: sess-id should be an NTP timestamp.\n      return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n    };\n\n    // Gets the direction from the mediaSection or the sessionpart.\n    SDPUtils.getDirection = function (mediaSection, sessionpart) {\n      // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n      const lines = SDPUtils.splitLines(mediaSection);\n      for (let i = 0; i < lines.length; i++) {\n        switch (lines[i]) {\n          case 'a=sendrecv':\n          case 'a=sendonly':\n          case 'a=recvonly':\n          case 'a=inactive':\n            return lines[i].substring(2);\n          // FIXME: What should happen here?\n        }\n      }\n      if (sessionpart) {\n        return SDPUtils.getDirection(sessionpart);\n      }\n      return 'sendrecv';\n    };\n    SDPUtils.getKind = function (mediaSection) {\n      const lines = SDPUtils.splitLines(mediaSection);\n      const mline = lines[0].split(' ');\n      return mline[0].substring(2);\n    };\n    SDPUtils.isRejected = function (mediaSection) {\n      return mediaSection.split(' ', 2)[1] === '0';\n    };\n    SDPUtils.parseMLine = function (mediaSection) {\n      const lines = SDPUtils.splitLines(mediaSection);\n      const parts = lines[0].substring(2).split(' ');\n      return {\n        kind: parts[0],\n        port: parseInt(parts[1], 10),\n        protocol: parts[2],\n        fmt: parts.slice(3).join(' ')\n      };\n    };\n    SDPUtils.parseOLine = function (mediaSection) {\n      const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n      const parts = line.substring(2).split(' ');\n      return {\n        username: parts[0],\n        sessionId: parts[1],\n        sessionVersion: parseInt(parts[2], 10),\n        netType: parts[3],\n        addressType: parts[4],\n        address: parts[5]\n      };\n    };\n\n    // a very naive interpretation of a valid SDP.\n    SDPUtils.isValidSDP = function (blob) {\n      if (typeof blob !== 'string' || blob.length === 0) {\n        return false;\n      }\n      const lines = SDPUtils.splitLines(blob);\n      for (let i = 0; i < lines.length; i++) {\n        if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n          return false;\n        }\n        // TODO: check the modifier a bit more.\n      }\n      return true;\n    };\n\n    // Expose public methods.\n    {\n      module.exports = SDPUtils;\n    }\n  })(sdp$1);\n  return sdp$1.exports;\n}var sdpExports = requireSdp();\nvar SDPUtils = /*@__PURE__*/getDefaultExportFromCjs(sdpExports);var sdp=/*#__PURE__*/_mergeNamespaces({__proto__:null,default:SDPUtils},[sdpExports]);/*\n *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimRTCIceCandidate(window) {\n  // foundation is arbitrarily chosen as an indicator for full support for\n  // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n  if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n    return;\n  }\n  const NativeRTCIceCandidate = window.RTCIceCandidate;\n  window.RTCIceCandidate = function RTCIceCandidate(args) {\n    // Remove the a= which shouldn't be part of the candidate string.\n    if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n      args = JSON.parse(JSON.stringify(args));\n      args.candidate = args.candidate.substring(2);\n    }\n    if (args.candidate && args.candidate.length) {\n      // Augment the native candidate with the parsed fields.\n      const nativeCandidate = new NativeRTCIceCandidate(args);\n      const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n      for (const key in parsedCandidate) {\n        if (!(key in nativeCandidate)) {\n          Object.defineProperty(nativeCandidate, key, {\n            value: parsedCandidate[key]\n          });\n        }\n      }\n\n      // Override serializer to not serialize the extra attributes.\n      nativeCandidate.toJSON = function toJSON() {\n        return {\n          candidate: nativeCandidate.candidate,\n          sdpMid: nativeCandidate.sdpMid,\n          sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n          usernameFragment: nativeCandidate.usernameFragment\n        };\n      };\n      return nativeCandidate;\n    }\n    return new NativeRTCIceCandidate(args);\n  };\n  window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n  // Hook up the augmented candidate in onicecandidate and\n  // addEventListener('icecandidate', ...)\n  wrapPeerConnectionEvent(window, 'icecandidate', e => {\n    if (e.candidate) {\n      Object.defineProperty(e, 'candidate', {\n        value: new window.RTCIceCandidate(e.candidate),\n        writable: 'false'\n      });\n    }\n    return e;\n  });\n}\nfunction shimRTCIceCandidateRelayProtocol(window) {\n  if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) {\n    return;\n  }\n\n  // Hook up the augmented candidate in onicecandidate and\n  // addEventListener('icecandidate', ...)\n  wrapPeerConnectionEvent(window, 'icecandidate', e => {\n    if (e.candidate) {\n      const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n      if (parsedCandidate.type === 'relay') {\n        // This is a libwebrtc-specific mapping of local type preference\n        // to relayProtocol.\n        e.candidate.relayProtocol = {\n          0: 'tls',\n          1: 'tcp',\n          2: 'udp'\n        }[parsedCandidate.priority >> 24];\n      }\n    }\n    return e;\n  });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  if (!('sctp' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n      get() {\n        return typeof this._sctp === 'undefined' ? null : this._sctp;\n      }\n    });\n  }\n  const sctpInDescription = function (description) {\n    if (!description || !description.sdp) {\n      return false;\n    }\n    const sections = SDPUtils.splitSections(description.sdp);\n    sections.shift();\n    return sections.some(mediaSection => {\n      const mLine = SDPUtils.parseMLine(mediaSection);\n      return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n    });\n  };\n  const getRemoteFirefoxVersion = function (description) {\n    // TODO: Is there a better solution for detecting Firefox?\n    const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n    if (match === null || match.length < 2) {\n      return -1;\n    }\n    const version = parseInt(match[1], 10);\n    // Test for NaN (yes, this is ugly)\n    return version !== version ? -1 : version;\n  };\n  const getCanSendMaxMessageSize = function (remoteIsFirefox) {\n    // Every implementation we know can send at least 64 KiB.\n    // Note: Although Chrome is technically able to send up to 256 KiB, the\n    //       data does not reach the other peer reliably.\n    //       See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n    let canSendMaxMessageSize = 65536;\n    if (browserDetails.browser === 'firefox') {\n      if (browserDetails.version < 57) {\n        if (remoteIsFirefox === -1) {\n          // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n          // fragmentation.\n          canSendMaxMessageSize = 16384;\n        } else {\n          // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n          // messages. Thus, supporting ~2 GiB when sending.\n          canSendMaxMessageSize = 2147483637;\n        }\n      } else if (browserDetails.version < 60) {\n        // Currently, all FF >= 57 will reset the remote maximum message size\n        // to the default value when a data channel is created at a later\n        // stage. :(\n        // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n        canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n      } else {\n        // FF >= 60 supports sending ~2 GiB\n        canSendMaxMessageSize = 2147483637;\n      }\n    }\n    return canSendMaxMessageSize;\n  };\n  const getMaxMessageSize = function (description, remoteIsFirefox) {\n    // Note: 65536 bytes is the default value from the SDP spec. Also,\n    //       every implementation we know supports receiving 65536 bytes.\n    let maxMessageSize = 65536;\n\n    // FF 57 has a slightly incorrect default remote max message size, so\n    // we need to adjust it here to avoid a failure when sending.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n    if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n      maxMessageSize = 65535;\n    }\n    const match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');\n    if (match.length > 0) {\n      maxMessageSize = parseInt(match[0].substring(19), 10);\n    } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n      // If the maximum message size is not present in the remote SDP and\n      // both local and remote are Firefox, the remote peer can receive\n      // ~2 GiB.\n      maxMessageSize = 2147483637;\n    }\n    return maxMessageSize;\n  };\n  const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n  window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n    this._sctp = null;\n    // Chrome decided to not expose .sctp in plan-b mode.\n    // As usual, adapter.js has to do an 'ugly worakaround'\n    // to cover up the mess.\n    if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n      const _this$getConfiguratio = this.getConfiguration(),\n        sdpSemantics = _this$getConfiguratio.sdpSemantics;\n      if (sdpSemantics === 'plan-b') {\n        Object.defineProperty(this, 'sctp', {\n          get() {\n            return typeof this._sctp === 'undefined' ? null : this._sctp;\n          },\n          enumerable: true,\n          configurable: true\n        });\n      }\n    }\n    if (sctpInDescription(arguments[0])) {\n      // Check if the remote is FF.\n      const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n      // Get the maximum message size the local peer is capable of sending\n      const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n      // Get the maximum message size of the remote peer.\n      const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n      // Determine final maximum message size\n      let maxMessageSize;\n      if (canSendMMS === 0 && remoteMMS === 0) {\n        maxMessageSize = Number.POSITIVE_INFINITY;\n      } else if (canSendMMS === 0 || remoteMMS === 0) {\n        maxMessageSize = Math.max(canSendMMS, remoteMMS);\n      } else {\n        maxMessageSize = Math.min(canSendMMS, remoteMMS);\n      }\n\n      // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n      // attribute.\n      const sctp = {};\n      Object.defineProperty(sctp, 'maxMessageSize', {\n        get() {\n          return maxMessageSize;\n        }\n      });\n      this._sctp = sctp;\n    }\n    return origSetRemoteDescription.apply(this, arguments);\n  };\n}\nfunction shimSendThrowTypeError(window, browserDetails) {\n  if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n    return;\n  }\n  if (browserDetails.browser === 'chrome' && browserDetails.version > 149) {\n    // Fixed by https://issues.chromium.org/issues/490588131\n    return;\n  }\n\n  // Note: Although Firefox >= 57 has a native implementation, the maximum\n  //       message size can be reset for all data channels at a later stage.\n  //       See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n  if (browserDetails.browser === 'firefox' && browserDetails.version > 60) {\n    return;\n  }\n  function wrapDcSend(dc, pc) {\n    const origDataChannelSend = dc.send;\n    dc.send = function send() {\n      const data = arguments[0];\n      const length = data.length || data.size || data.byteLength;\n      if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n        throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n      }\n      return origDataChannelSend.apply(dc, arguments);\n    };\n  }\n  const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n  window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n    const dataChannel = origCreateDataChannel.apply(this, arguments);\n    wrapDcSend(dataChannel, this);\n    return dataChannel;\n  };\n  wrapPeerConnectionEvent(window, 'datachannel', e => {\n    wrapDcSend(e.channel, e.target);\n    return e;\n  });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n  if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n    return;\n  }\n  const proto = window.RTCPeerConnection.prototype;\n  Object.defineProperty(proto, 'connectionState', {\n    get() {\n      return {\n        completed: 'connected',\n        checking: 'connecting'\n      }[this.iceConnectionState] || this.iceConnectionState;\n    },\n    enumerable: true,\n    configurable: true\n  });\n  Object.defineProperty(proto, 'onconnectionstatechange', {\n    get() {\n      return this._onconnectionstatechange || null;\n    },\n    set(cb) {\n      if (this._onconnectionstatechange) {\n        this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n        delete this._onconnectionstatechange;\n      }\n      if (cb) {\n        this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n      }\n    },\n    enumerable: true,\n    configurable: true\n  });\n  ['setLocalDescription', 'setRemoteDescription'].forEach(method => {\n    const origMethod = proto[method];\n    proto[method] = function () {\n      if (!this._connectionstatechangepoly) {\n        this._connectionstatechangepoly = e => {\n          const pc = e.target;\n          if (pc._lastConnectionState !== pc.connectionState) {\n            pc._lastConnectionState = pc.connectionState;\n            const newEvent = new Event('connectionstatechange', e);\n            pc.dispatchEvent(newEvent);\n          }\n          return e;\n        };\n        this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n      }\n      return origMethod.apply(this, arguments);\n    };\n  });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n  /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n    return;\n  }\n  if (browserDetails.browser === 'safari' && browserDetails._safariVersion >= 13.1) {\n    return;\n  }\n  const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n  window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n    if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n      const sdp = desc.sdp.split('\\n').filter(line => {\n        return line.trim() !== 'a=extmap-allow-mixed';\n      }).join('\\n');\n      // Safari enforces read-only-ness of RTCSessionDescription fields.\n      if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n        arguments[0] = new window.RTCSessionDescription({\n          type: desc.type,\n          sdp\n        });\n      } else {\n        desc.sdp = sdp;\n      }\n    }\n    return nativeSRD.apply(this, arguments);\n  };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n  // Support for addIceCandidate(null or undefined)\n  // as well as addIceCandidate({candidate: \"\", ...})\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n  // Note: must be called before other polyfills which change the signature.\n  if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n    return;\n  }\n  const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n  if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n    if (!arguments[0]) {\n      if (arguments[1]) {\n        arguments[1].apply(null);\n      }\n      return Promise.resolve();\n    }\n    // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n    // in older versions.\n    // Native support for ignoring exists for Chrome M77+.\n    // Safari ignores as well, exact version unknown but works in the same\n    // version that also ignores addIceCandidate(null).\n    if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n      return Promise.resolve();\n    }\n    return nativeAddIceCandidate.apply(this, arguments);\n  };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n  if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n    return;\n  }\n  const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n  if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n    let desc = arguments[0] || {};\n    if (typeof desc !== 'object' || desc.type && desc.sdp) {\n      return nativeSetLocalDescription.apply(this, arguments);\n    }\n    // The remaining steps should technically happen when SLD comes off the\n    // RTCPeerConnection's operations chain (not ahead of going on it), but\n    // this is too difficult to shim. Instead, this shim only covers the\n    // common case where the operations chain is empty. This is imperfect, but\n    // should cover many cases. Rationale: Even if we can't reduce the glare\n    // window to zero on imperfect implementations, there's value in tapping\n    // into the perfect negotiation pattern that several browsers support.\n    desc = {\n      type: desc.type,\n      sdp: desc.sdp\n    };\n    if (!desc.type) {\n      switch (this.signalingState) {\n        case 'stable':\n        case 'have-local-offer':\n        case 'have-remote-pranswer':\n          desc.type = 'offer';\n          break;\n        default:\n          desc.type = 'answer';\n          break;\n      }\n    }\n    if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n      return nativeSetLocalDescription.apply(this, [desc]);\n    }\n    const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n    return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));\n  };\n}var commonShim=/*#__PURE__*/Object.freeze({__proto__:null,removeExtmapAllowMixed:removeExtmapAllowMixed,shimAddIceCandidateNullOrEmpty:shimAddIceCandidateNullOrEmpty,shimConnectionState:shimConnectionState,shimMaxMessageSize:shimMaxMessageSize,shimParameterlessSetLocalDescription:shimParameterlessSetLocalDescription,shimRTCIceCandidate:shimRTCIceCandidate,shimRTCIceCandidateRelayProtocol:shimRTCIceCandidateRelayProtocol,shimSendThrowTypeError:shimSendThrowTypeError});/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory() {\n  let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n    window = _ref.window;\n  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    shimChrome: true,\n    shimFirefox: true,\n    shimSafari: true\n  };\n  // Utils.\n  const logging = log$4;\n  const browserDetails = detectBrowser(window);\n  const adapter = {\n    browserDetails,\n    commonShim,\n    extractVersion: extractVersion,\n    disableLog: disableLog,\n    disableWarnings: disableWarnings,\n    // Expose sdp as a convenience. For production apps include directly.\n    sdp\n  };\n\n  // Shim browser if found.\n  switch (browserDetails.browser) {\n    case 'chrome':\n      if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {\n        logging('Chrome shim is not included in this adapter release.');\n        return adapter;\n      }\n      if (browserDetails.version === null) {\n        logging('Chrome shim can not determine version, not shimming.');\n        return adapter;\n      }\n      logging('adapter.js shimming chrome.');\n      // Export to the adapter global object visible in the browser.\n      adapter.browserShim = chromeShim;\n\n      // Must be called before shimPeerConnection.\n      shimAddIceCandidateNullOrEmpty(window, browserDetails);\n      shimParameterlessSetLocalDescription(window);\n      shimGetUserMedia$2(window, browserDetails);\n      shimMediaStream(window);\n      shimPeerConnection$1(window, browserDetails);\n      shimOnTrack$1(window, browserDetails);\n      shimAddTrackRemoveTrack(window, browserDetails);\n      shimGetSendersWithDtmf(window);\n      shimSenderReceiverGetStats(window, browserDetails);\n      fixNegotiationNeeded(window, browserDetails);\n      shimRTCIceCandidate(window);\n      shimRTCIceCandidateRelayProtocol(window);\n      shimConnectionState(window);\n      shimMaxMessageSize(window, browserDetails);\n      shimSendThrowTypeError(window, browserDetails);\n      removeExtmapAllowMixed(window, browserDetails);\n      break;\n    case 'firefox':\n      if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {\n        logging('Firefox shim is not included in this adapter release.');\n        return adapter;\n      }\n      logging('adapter.js shimming firefox.');\n      // Export to the adapter global object visible in the browser.\n      adapter.browserShim = firefoxShim;\n\n      // Must be called before shimPeerConnection.\n      shimAddIceCandidateNullOrEmpty(window, browserDetails);\n      shimParameterlessSetLocalDescription(window);\n      shimGetUserMedia$1(window, browserDetails);\n      shimPeerConnection(window, browserDetails);\n      shimGetStats(window, browserDetails);\n      shimOnTrack(window);\n      shimRemoveStream(window);\n      shimSenderGetStats(window);\n      shimReceiverGetStats(window);\n      shimRTCDataChannel(window);\n      shimAddTransceiver(window);\n      shimGetParameters(window);\n      shimCreateOffer(window);\n      shimCreateAnswer(window);\n      shimRTCIceCandidate(window);\n      shimConnectionState(window);\n      shimMaxMessageSize(window, browserDetails);\n      shimSendThrowTypeError(window, browserDetails);\n      break;\n    case 'safari':\n      if (!safariShim || !options.shimSafari) {\n        logging('Safari shim is not included in this adapter release.');\n        return adapter;\n      }\n      logging('adapter.js shimming safari.');\n      // Export to the adapter global object visible in the browser.\n      adapter.browserShim = safariShim;\n\n      // Must be called before shimCallbackAPI.\n      shimAddIceCandidateNullOrEmpty(window, browserDetails);\n      shimParameterlessSetLocalDescription(window);\n      shimRTCIceServerUrls(window);\n      shimCreateOfferLegacy(window);\n      shimCallbacksAPI(window);\n      shimLocalStreamsAPI(window);\n      shimRemoteStreamsAPI(window);\n      shimTrackEventTransceiver(window);\n      shimGetUserMedia(window);\n      shimAudioContext(window);\n      shimRTCIceCandidate(window);\n      shimRTCIceCandidateRelayProtocol(window);\n      shimMaxMessageSize(window, browserDetails);\n      shimSendThrowTypeError(window, browserDetails);\n      removeExtmapAllowMixed(window, browserDetails);\n      break;\n    default:\n      logging('Unsupported browser!');\n      break;\n  }\n  return adapter;\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\n\nadapterFactory({\n  window: typeof window === 'undefined' ? undefined : window\n});var _a, _b;\nclass TypedPromise extends (_b = Promise) {\n  // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n  constructor(executor) {\n    super(executor);\n  }\n  catch(onrejected) {\n    return super.catch(onrejected);\n  }\n  static reject(reason) {\n    return super.reject(reason);\n  }\n  static all(values) {\n    return super.all(values);\n  }\n  static race(values) {\n    return super.race(values);\n  }\n}\n_a = TypedPromise;\nTypedPromise.resolve = value => {\n  return Reflect.get(_b, \"resolve\", _a).call(_a, value);\n};// tiny, simplified version of https://github.com/lancedikson/bowser/blob/master/src/parser-browsers.js\n// reduced to only differentiate Chrome(ium) based browsers / Firefox / Safari\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\nlet browserDetails;\n/**\n * @internal\n */\nfunction getBrowser(userAgent) {\n  let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  if (typeof userAgent === 'undefined' && typeof navigator === 'undefined') {\n    return;\n  }\n  const ua = (userAgent !== null && userAgent !== void 0 ? userAgent : navigator.userAgent).toLowerCase();\n  if (browserDetails === undefined || force) {\n    const browser = browsersList.find(_ref => {\n      let test = _ref.test;\n      return test.test(ua);\n    });\n    browserDetails = browser === null || browser === void 0 ? void 0 : browser.describe(ua);\n  }\n  return browserDetails;\n}\nconst browsersList = [{\n  test: /firefox|iceweasel|fxios/i,\n  describe(ua) {\n    const browser = {\n      name: 'Firefox',\n      version: getMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua),\n      os: ua.toLowerCase().includes('fxios') ? 'iOS' : undefined,\n      osVersion: getOSVersion(ua)\n    };\n    return browser;\n  }\n}, {\n  test: /chrom|crios|crmo/i,\n  describe(ua) {\n    const browser = {\n      name: 'Chrome',\n      version: getMatch(/(?:chrome|chromium|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua),\n      os: ua.toLowerCase().includes('crios') ? 'iOS' : undefined,\n      osVersion: getOSVersion(ua)\n    };\n    return browser;\n  }\n}, /* Safari */\n{\n  test: /safari|applewebkit/i,\n  describe(ua) {\n    const browser = {\n      name: 'Safari',\n      version: getMatch(commonVersionIdentifier, ua),\n      os: ua.includes('mobile/') ? 'iOS' : 'macOS',\n      osVersion: getOSVersion(ua)\n    };\n    return browser;\n  }\n}];\nfunction getMatch(exp, ua) {\n  let id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n  const match = ua.match(exp);\n  return match && match.length >= id && match[id] || '';\n}\nfunction getOSVersion(ua) {\n  return ua.includes('mac os') ? getMatch(/\\(.+?(\\d+_\\d+(:?_\\d+)?)/, ua, 1).replace(/_/g, '.') : undefined;\n}var version$1 = \"2.20.0\";const version = version$1;\nconst protocolVersion = 17;\n/** Initial client protocol. */\nconst CLIENT_PROTOCOL_DEFAULT = 0;\n/** Replaces RPC v1 protocol with a v2 data streams based one to support unlimited request /\n * response payload length. */\nconst CLIENT_PROTOCOL_DATA_STREAM_RPC = 1;\n/** The client protocol version indicates what level of support that the client has for\n * client <-> client api interactions. */\nconst clientProtocol = CLIENT_PROTOCOL_DATA_STREAM_RPC;/** Base error that all LiveKit specific custom errors inherit from. */\nclass LivekitError extends Error {\n  constructor(code, message, options) {\n    super(message || 'an error has occurred');\n    this.name = 'LiveKitError';\n    this.code = code;\n    if (typeof (options === null || options === void 0 ? void 0 : options.cause) !== 'undefined') {\n      this.cause = options === null || options === void 0 ? void 0 : options.cause;\n    }\n  }\n}\n/**\n * LiveKit specific error type representing an error with an associated set of reasons.\n * Use this to represent an error with multiple different but contextually related variants.\n * */\nclass LivekitReasonedError extends LivekitError {}\nclass SimulatedError extends LivekitError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Simulated failure';\n    super(-1, message);\n    this.name = 'simulated';\n  }\n}\nvar ConnectionErrorReason;\n(function (ConnectionErrorReason) {\n  ConnectionErrorReason[ConnectionErrorReason[\"NotAllowed\"] = 0] = \"NotAllowed\";\n  ConnectionErrorReason[ConnectionErrorReason[\"ServerUnreachable\"] = 1] = \"ServerUnreachable\";\n  ConnectionErrorReason[ConnectionErrorReason[\"InternalError\"] = 2] = \"InternalError\";\n  ConnectionErrorReason[ConnectionErrorReason[\"Cancelled\"] = 3] = \"Cancelled\";\n  ConnectionErrorReason[ConnectionErrorReason[\"LeaveRequest\"] = 4] = \"LeaveRequest\";\n  ConnectionErrorReason[ConnectionErrorReason[\"Timeout\"] = 5] = \"Timeout\";\n  ConnectionErrorReason[ConnectionErrorReason[\"WebSocket\"] = 6] = \"WebSocket\";\n  ConnectionErrorReason[ConnectionErrorReason[\"ServiceNotFound\"] = 7] = \"ServiceNotFound\";\n})(ConnectionErrorReason || (ConnectionErrorReason = {}));\nclass ConnectionError extends LivekitReasonedError {\n  constructor(message, reason, status, context) {\n    super(1, message);\n    this.name = 'ConnectionError';\n    this.status = status;\n    this.reason = reason;\n    this.context = context;\n    this.reasonName = ConnectionErrorReason[reason];\n  }\n  static notAllowed(message, status, context) {\n    return new ConnectionError(message, ConnectionErrorReason.NotAllowed, status, context);\n  }\n  static timeout(message) {\n    return new ConnectionError(message, ConnectionErrorReason.Timeout);\n  }\n  static leaveRequest(message, context) {\n    return new ConnectionError(message, ConnectionErrorReason.LeaveRequest, undefined, context);\n  }\n  static internal(message, context) {\n    return new ConnectionError(message, ConnectionErrorReason.InternalError, undefined, context);\n  }\n  static cancelled(message) {\n    return new ConnectionError(message, ConnectionErrorReason.Cancelled);\n  }\n  static serverUnreachable(message, status) {\n    return new ConnectionError(message, ConnectionErrorReason.ServerUnreachable, status);\n  }\n  static websocket(message, status, reason) {\n    return new ConnectionError(message, ConnectionErrorReason.WebSocket, status, reason);\n  }\n  static serviceNotFound(message, serviceName) {\n    return new ConnectionError(message, ConnectionErrorReason.ServiceNotFound, undefined, serviceName);\n  }\n}\nclass DeviceUnsupportedError extends LivekitError {\n  constructor(message) {\n    super(21, message !== null && message !== void 0 ? message : 'device is unsupported');\n    this.name = 'DeviceUnsupportedError';\n  }\n}\nclass TrackInvalidError extends LivekitError {\n  constructor(message) {\n    super(20, message !== null && message !== void 0 ? message : 'track is invalid');\n    this.name = 'TrackInvalidError';\n  }\n}\nclass UnsupportedServer extends LivekitError {\n  constructor(message) {\n    super(10, message !== null && message !== void 0 ? message : 'unsupported server');\n    this.name = 'UnsupportedServer';\n  }\n}\nclass UnexpectedConnectionState extends LivekitError {\n  constructor(message) {\n    super(12, message !== null && message !== void 0 ? message : 'unexpected connection state');\n    this.name = 'UnexpectedConnectionState';\n  }\n}\nclass NegotiationError extends LivekitError {\n  constructor(message) {\n    super(13, message !== null && message !== void 0 ? message : 'unable to negotiate');\n    this.name = 'NegotiationError';\n  }\n}\nclass PublishDataError extends LivekitError {\n  constructor(message) {\n    super(14, message !== null && message !== void 0 ? message : 'unable to publish data');\n    this.name = 'PublishDataError';\n  }\n}\nclass PublishTrackError extends LivekitError {\n  constructor(message, status) {\n    super(15, message);\n    this.name = 'PublishTrackError';\n    this.status = status;\n  }\n}\nclass SignalRequestError extends LivekitReasonedError {\n  constructor(message, reason) {\n    super(15, message);\n    this.name = 'SignalRequestError';\n    this.reason = reason;\n    this.reasonName = typeof reason === 'string' ? reason : RequestResponse_Reason[reason];\n  }\n}\n// NOTE: matches with https://github.com/livekit/client-sdk-swift/blob/f37bbd260d61e165084962db822c79f995f1a113/Sources/LiveKit/DataStream/StreamError.swift#L17\nvar DataStreamErrorReason;\n(function (DataStreamErrorReason) {\n  // Unable to open a stream with the same ID more than once.\n  DataStreamErrorReason[DataStreamErrorReason[\"AlreadyOpened\"] = 0] = \"AlreadyOpened\";\n  // Stream closed abnormally by remote participant.\n  DataStreamErrorReason[DataStreamErrorReason[\"AbnormalEnd\"] = 1] = \"AbnormalEnd\";\n  // Incoming chunk data could not be decoded.\n  DataStreamErrorReason[DataStreamErrorReason[\"DecodeFailed\"] = 2] = \"DecodeFailed\";\n  // Read length exceeded total length specified in stream header.\n  DataStreamErrorReason[DataStreamErrorReason[\"LengthExceeded\"] = 3] = \"LengthExceeded\";\n  // Read length less than total length specified in stream header.\n  DataStreamErrorReason[DataStreamErrorReason[\"Incomplete\"] = 4] = \"Incomplete\";\n  // Unable to register a stream handler more than once.\n  DataStreamErrorReason[DataStreamErrorReason[\"HandlerAlreadyRegistered\"] = 7] = \"HandlerAlreadyRegistered\";\n  // Encryption type mismatch.\n  DataStreamErrorReason[DataStreamErrorReason[\"EncryptionTypeMismatch\"] = 8] = \"EncryptionTypeMismatch\";\n})(DataStreamErrorReason || (DataStreamErrorReason = {}));\nclass DataStreamError extends LivekitReasonedError {\n  constructor(message, reason) {\n    super(16, message);\n    this.name = 'DataStreamError';\n    this.reason = reason;\n    this.reasonName = DataStreamErrorReason[reason];\n  }\n}\nclass SignalReconnectError extends LivekitError {\n  constructor(message) {\n    super(18, message);\n    this.name = 'SignalReconnectError';\n  }\n}\nvar MediaDeviceFailure;\n(function (MediaDeviceFailure) {\n  // user rejected permissions\n  MediaDeviceFailure[\"PermissionDenied\"] = \"PermissionDenied\";\n  // device is not available\n  MediaDeviceFailure[\"NotFound\"] = \"NotFound\";\n  // device is in use. On Windows, only a single tab may get access to a device at a time.\n  MediaDeviceFailure[\"DeviceInUse\"] = \"DeviceInUse\";\n  MediaDeviceFailure[\"Other\"] = \"Other\";\n})(MediaDeviceFailure || (MediaDeviceFailure = {}));\n(function (MediaDeviceFailure) {\n  function getFailure(error) {\n    if (error && 'name' in error) {\n      if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {\n        return MediaDeviceFailure.NotFound;\n      }\n      if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {\n        return MediaDeviceFailure.PermissionDenied;\n      }\n      if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {\n        return MediaDeviceFailure.DeviceInUse;\n      }\n      return MediaDeviceFailure.Other;\n    }\n  }\n  MediaDeviceFailure.getFailure = getFailure;\n})(MediaDeviceFailure || (MediaDeviceFailure = {}));/**\n * Timers that can be overridden with platform specific implementations\n * that ensure that they are fired. These should be used when it is critical\n * that the timer fires on time.\n */\nclass CriticalTimers {}\nCriticalTimers.setTimeout = function () {\n  return setTimeout(...arguments);\n};\nCriticalTimers.setInterval =\n// eslint-disable-next-line @typescript-eslint/no-implied-eval\nfunction () {\n  return setInterval(...arguments);\n};\nCriticalTimers.clearTimeout = function () {\n  return clearTimeout(...arguments);\n};\nCriticalTimers.clearInterval = function () {\n  return clearInterval(...arguments);\n};/**\n * Events are the primary way LiveKit notifies your application of changes.\n *\n * The following are events emitted by [[Room]], listen to room events like\n *\n * ```typescript\n * room.on(RoomEvent.TrackPublished, (track, publication, participant) => {})\n * ```\n */\nvar RoomEvent;\n(function (RoomEvent) {\n  /**\n   * When the connection to the server has been established\n   */\n  RoomEvent[\"Connected\"] = \"connected\";\n  /**\n   * When the connection to the server has been interrupted and it's attempting\n   * to reconnect.\n   */\n  RoomEvent[\"Reconnecting\"] = \"reconnecting\";\n  /**\n   * When the signal connection to the server has been interrupted. This isn't noticeable to users most of the time.\n   * It will resolve with a `RoomEvent.Reconnected` once the signal connection has been re-established.\n   * If media fails additionally it an additional `RoomEvent.Reconnecting` will be emitted.\n   */\n  RoomEvent[\"SignalReconnecting\"] = \"signalReconnecting\";\n  /**\n   * Fires when a reconnection has been successful.\n   */\n  RoomEvent[\"Reconnected\"] = \"reconnected\";\n  /**\n   * When disconnected from room. This fires when room.disconnect() is called or\n   * when an unrecoverable connection issue had occurred.\n   *\n   * DisconnectReason can be used to determine why the participant was disconnected. Notable reasons are\n   * - DUPLICATE_IDENTITY: another client with the same identity has joined the room\n   * - PARTICIPANT_REMOVED: participant was removed by RemoveParticipant API\n   * - ROOM_DELETED: the room has ended via DeleteRoom API\n   *\n   * args: ([[DisconnectReason]])\n   */\n  RoomEvent[\"Disconnected\"] = \"disconnected\";\n  /**\n   * Whenever the connection state of the room changes\n   *\n   * args: ([[ConnectionState]])\n   */\n  RoomEvent[\"ConnectionStateChanged\"] = \"connectionStateChanged\";\n  /**\n   * When participant has been moved to a different room by the service request.\n   * The behavior looks like the participant has been disconnected and reconnected to a different room\n   * seamlessly without connection state transition.\n   * A new token will be provided for reconnecting to the new room if needed.\n   *\n   * args: ([[room: string, token: string]])\n   */\n  RoomEvent[\"Moved\"] = \"moved\";\n  /**\n   * When input or output devices on the machine have changed.\n   */\n  RoomEvent[\"MediaDevicesChanged\"] = \"mediaDevicesChanged\";\n  /**\n   * When a [[RemoteParticipant]] joins *after* the local\n   * participant. It will not emit events for participants that are already\n   * in the room\n   *\n   * args: ([[RemoteParticipant]])\n   */\n  RoomEvent[\"ParticipantConnected\"] = \"participantConnected\";\n  /**\n   * When a [[RemoteParticipant]] leaves *after* the local\n   * participant has joined.\n   *\n   * args: ([[RemoteParticipant]])\n   */\n  RoomEvent[\"ParticipantDisconnected\"] = \"participantDisconnected\";\n  /**\n   * When a new track is published to room *after* the local\n   * participant has joined. It will not fire for tracks that are already published.\n   *\n   * A track published doesn't mean the participant has subscribed to it. It's\n   * simply reflecting the state of the room.\n   *\n   * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackPublished\"] = \"trackPublished\";\n  /**\n   * The [[LocalParticipant]] has subscribed to a new track. This event will **always**\n   * fire as long as new tracks are ready for use.\n   *\n   * args: ([[RemoteTrack]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscribed\"] = \"trackSubscribed\";\n  /**\n   * Could not subscribe to a track\n   *\n   * args: (track sid, [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscriptionFailed\"] = \"trackSubscriptionFailed\";\n  /**\n   * A [[RemoteParticipant]] has unpublished a track\n   *\n   * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackUnpublished\"] = \"trackUnpublished\";\n  /**\n   * A subscribed track is no longer available. Clients should listen to this\n   * event and ensure they detach tracks.\n   *\n   * args: ([[Track]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackUnsubscribed\"] = \"trackUnsubscribed\";\n  /**\n   * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]], [[Participant]])\n   */\n  RoomEvent[\"TrackMuted\"] = \"trackMuted\";\n  /**\n   * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]], [[Participant]])\n   */\n  RoomEvent[\"TrackUnmuted\"] = \"trackUnmuted\";\n  /**\n   * A local track was published successfully. This event is helpful to know\n   * when to update your local UI with the newly published track.\n   *\n   * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n   */\n  RoomEvent[\"LocalTrackPublished\"] = \"localTrackPublished\";\n  /**\n   * A local track was unpublished. This event is helpful to know when to remove\n   * the local track from your UI.\n   *\n   * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n   * this event will also fire.\n   *\n   * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n   */\n  RoomEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n  /**\n   * When a local audio track is published the SDK checks whether there is complete silence\n   * on that track and emits the LocalAudioSilenceDetected event in that case.\n   * This allows for applications to show UI informing users that they might have to\n   * reset their audio hardware or check for proper device connectivity.\n   */\n  RoomEvent[\"LocalAudioSilenceDetected\"] = \"localAudioSilenceDetected\";\n  /**\n   * Active speakers changed. List of speakers are ordered by their audio level.\n   * loudest speakers first. This will include the LocalParticipant too.\n   *\n   * Speaker updates are sent only to the publishing participant and their subscribers.\n   *\n   * args: (Array<[[Participant]]>)\n   */\n  RoomEvent[\"ActiveSpeakersChanged\"] = \"activeSpeakersChanged\";\n  /**\n   * Participant metadata is a simple way for app-specific state to be pushed to\n   * all users.\n   * When RoomService.UpdateParticipantMetadata is called to change a participant's\n   * state, *all*  participants in the room will fire this event.\n   *\n   * args: (prevMetadata: string, [[Participant]])\n   *\n   */\n  RoomEvent[\"ParticipantMetadataChanged\"] = \"participantMetadataChanged\";\n  /**\n   * Participant's display name changed\n   *\n   * args: (name: string, [[Participant]])\n   *\n   */\n  RoomEvent[\"ParticipantNameChanged\"] = \"participantNameChanged\";\n  /**\n   * Participant attributes is an app-specific key value state to be pushed to\n   * all users.\n   * When a participant's attributes changed, this event will be emitted with the changed attributes and the participant\n   * args: (changedAttributes: [[Record<string, string]], participant: [[Participant]])\n   */\n  RoomEvent[\"ParticipantAttributesChanged\"] = \"participantAttributesChanged\";\n  /**\n   * Emitted when the participant's state changes to ACTIVE and is ready to send/receive data messages\n   *\n   * args: (participant: [[Participant]])\n   */\n  RoomEvent[\"ParticipantActive\"] = \"participantActive\";\n  /**\n   * Room metadata is a simple way for app-specific state to be pushed to\n   * all users.\n   * When RoomService.UpdateRoomMetadata is called to change a room's state,\n   * *all*  participants in the room will fire this event.\n   *\n   * args: (string)\n   */\n  RoomEvent[\"RoomMetadataChanged\"] = \"roomMetadataChanged\";\n  /**\n   * Data received from another participant.\n   * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n   * All participants in the room will receive the messages sent to the room.\n   *\n   * args: (payload: NonSharedUint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]], topic?: string)\n   */\n  RoomEvent[\"DataReceived\"] = \"dataReceived\";\n  /**\n   * SIP DTMF tones received from another participant.\n   *\n   * args: (participant: [[Participant]], dtmf: [[DataPacket_Kind]])\n   */\n  RoomEvent[\"SipDTMFReceived\"] = \"sipDTMFReceived\";\n  /**\n   * Transcription received from a participant's track.\n   * @beta\n   */\n  RoomEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n  /**\n   * Connection quality was changed for a Participant. It'll receive updates\n   * from the local participant, as well as any [[RemoteParticipant]]s that we are\n   * subscribed to.\n   *\n   * args: (connectionQuality: [[ConnectionQuality]], participant: [[Participant]])\n   */\n  RoomEvent[\"ConnectionQualityChanged\"] = \"connectionQualityChanged\";\n  /**\n   * StreamState indicates if a subscribed (remote) track has been paused by the SFU\n   * (typically this happens because of subscriber's bandwidth constraints)\n   *\n   * When bandwidth conditions allow, the track will be resumed automatically.\n   * TrackStreamStateChanged will also be emitted when that happens.\n   *\n   * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]],\n   *        participant: [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackStreamStateChanged\"] = \"trackStreamStateChanged\";\n  /**\n   * One of subscribed tracks have changed its permissions for the current\n   * participant. If permission was revoked, then the track will no longer\n   * be subscribed. If permission was granted, a TrackSubscribed event will\n   * be emitted.\n   *\n   * args: (pub: [[RemoteTrackPublication]],\n   *        status: [[TrackPublication.PermissionStatus]],\n   *        participant: [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscriptionPermissionChanged\"] = \"trackSubscriptionPermissionChanged\";\n  /**\n   * One of subscribed tracks have changed its status for the current\n   * participant.\n   *\n   * args: (pub: [[RemoteTrackPublication]],\n   *        status: [[TrackPublication.SubscriptionStatus]],\n   *        participant: [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscriptionStatusChanged\"] = \"trackSubscriptionStatusChanged\";\n  /**\n   * LiveKit will attempt to autoplay all audio tracks when you attach them to\n   * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.\n   * `Room.canPlaybackAudio` will indicate if audio playback is permitted.\n   */\n  RoomEvent[\"AudioPlaybackStatusChanged\"] = \"audioPlaybackChanged\";\n  /**\n   * LiveKit will attempt to autoplay all video tracks when you attach them to\n   * a video element. However, if that fails, we'll notify you via VideoPlaybackStatusChanged.\n   * Calling `room.startVideo()` in a user gesture event handler will resume the video playback.\n   */\n  RoomEvent[\"VideoPlaybackStatusChanged\"] = \"videoPlaybackChanged\";\n  /**\n   * When we have encountered an error while attempting to create a track.\n   * The errors take place in getUserMedia().\n   * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.\n   * [[LocalParticipant.lastCameraError]] and [[LocalParticipant.lastMicrophoneError]]\n   * will indicate if it had an error while creating the audio or video track respectively.\n   *\n   * args: (error: Error)\n   */\n  RoomEvent[\"MediaDevicesError\"] = \"mediaDevicesError\";\n  /**\n   * A participant's permission has changed.\n   * args: (prevPermissions: [[ParticipantPermission]], participant: [[Participant]])\n   */\n  RoomEvent[\"ParticipantPermissionsChanged\"] = \"participantPermissionsChanged\";\n  /**\n   * Signal connected, can publish tracks.\n   */\n  RoomEvent[\"SignalConnected\"] = \"signalConnected\";\n  /**\n   * Recording of a room has started/stopped. Room.isRecording will be updated too.\n   * args: (isRecording: boolean)\n   */\n  RoomEvent[\"RecordingStatusChanged\"] = \"recordingStatusChanged\";\n  RoomEvent[\"ParticipantEncryptionStatusChanged\"] = \"participantEncryptionStatusChanged\";\n  RoomEvent[\"EncryptionError\"] = \"encryptionError\";\n  /**\n   * Emits whenever the current buffer status of a data channel changes\n   * args: (isLow: boolean, kind: [[DataChannelKind]])\n   */\n  RoomEvent[\"DCBufferStatusChanged\"] = \"dcBufferStatusChanged\";\n  /**\n   * Triggered by a call to room.switchActiveDevice\n   * args: (kind: MediaDeviceKind, deviceId: string)\n   */\n  RoomEvent[\"ActiveDeviceChanged\"] = \"activeDeviceChanged\";\n  RoomEvent[\"ChatMessage\"] = \"chatMessage\";\n  /**\n   * fired when the first remote participant has subscribed to the localParticipant's track\n   */\n  RoomEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n  /**\n   * fired when the client receives connection metrics from other participants\n   */\n  RoomEvent[\"MetricsReceived\"] = \"metricsReceived\";\n  /**\n   * Emits when a new data track has been published by a downstream participant.\n   */\n  RoomEvent[\"DataTrackPublished\"] = \"dataTrackPublished\";\n  /**\n   * Emits when a new data track has been unpublished by a downstream participant.\n   */\n  RoomEvent[\"DataTrackUnpublished\"] = \"dataTrackUnpublished\";\n  /**\n   * Emits when a new data track has been published locally.\n   */\n  RoomEvent[\"LocalDataTrackPublished\"] = \"localDataTrackPublished\";\n  /**\n   * Emits when a new data track has been unpublished locally.\n   */\n  RoomEvent[\"LocalDataTrackUnpublished\"] = \"localDataTrackUnpublished\";\n})(RoomEvent || (RoomEvent = {}));\nvar ParticipantEvent;\n(function (ParticipantEvent) {\n  /**\n   * When a new track is published to room *after* the local\n   * participant has joined. It will not fire for tracks that are already published.\n   *\n   * A track published doesn't mean the participant has subscribed to it. It's\n   * simply reflecting the state of the room.\n   *\n   * args: ([[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackPublished\"] = \"trackPublished\";\n  /**\n   * Successfully subscribed to the [[RemoteParticipant]]'s track.\n   * This event will **always** fire as long as new tracks are ready for use.\n   *\n   * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackSubscribed\"] = \"trackSubscribed\";\n  /**\n   * Could not subscribe to a track\n   *\n   * args: (track sid)\n   */\n  ParticipantEvent[\"TrackSubscriptionFailed\"] = \"trackSubscriptionFailed\";\n  /**\n   * A [[RemoteParticipant]] has unpublished a track\n   *\n   * args: ([[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackUnpublished\"] = \"trackUnpublished\";\n  /**\n   * A subscribed track is no longer available. Clients should listen to this\n   * event and ensure they detach tracks.\n   *\n   * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackUnsubscribed\"] = \"trackUnsubscribed\";\n  /**\n   * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]])\n   */\n  ParticipantEvent[\"TrackMuted\"] = \"trackMuted\";\n  /**\n   * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]])\n   */\n  ParticipantEvent[\"TrackUnmuted\"] = \"trackUnmuted\";\n  /**\n   * A local track was published successfully. This event is helpful to know\n   * when to update your local UI with the newly published track.\n   *\n   * args: ([[LocalTrackPublication]])\n   */\n  ParticipantEvent[\"LocalTrackPublished\"] = \"localTrackPublished\";\n  /**\n   * A local track was unpublished. This event is helpful to know when to remove\n   * the local track from your UI.\n   *\n   * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n   * this event will also fire.\n   *\n   * args: ([[LocalTrackPublication]])\n   */\n  ParticipantEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n  /**\n   * A local track has been constrained by cpu.\n   * This event is useful to know when to reduce the capture resolution of the track.\n   *\n   * This event is emitted on the local participant.\n   *\n   * args: ([[LocalVideoTrack]], [[LocalTrackPublication]])\n   */\n  ParticipantEvent[\"LocalTrackCpuConstrained\"] = \"localTrackCpuConstrained\";\n  /**\n   * @internal\n   */\n  ParticipantEvent[\"LocalSenderCreated\"] = \"localSenderCreated\";\n  /**\n   * Participant metadata is a simple way for app-specific state to be pushed to\n   * all users.\n   * When RoomService.UpdateParticipantMetadata is called to change a participant's\n   * state, *all*  participants in the room will fire this event.\n   * To access the current metadata, see [[Participant.metadata]].\n   *\n   * args: (prevMetadata: string)\n   *\n   */\n  ParticipantEvent[\"ParticipantMetadataChanged\"] = \"participantMetadataChanged\";\n  /**\n   * Participant's display name changed\n   *\n   * args: (name: string, [[Participant]])\n   *\n   */\n  ParticipantEvent[\"ParticipantNameChanged\"] = \"participantNameChanged\";\n  /**\n   * Data received from this participant as sender.\n   * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n   * All participants in the room will receive the messages sent to the room.\n   *\n   * args: (payload: NonSharedUint8Array, kind: [[DataPacket_Kind]])\n   */\n  ParticipantEvent[\"DataReceived\"] = \"dataReceived\";\n  /**\n   * SIP DTMF tones received from this participant as sender.\n   *\n   * args: (dtmf: [[DataPacket_Kind]])\n   */\n  ParticipantEvent[\"SipDTMFReceived\"] = \"sipDTMFReceived\";\n  /**\n   * Transcription received from this participant as data source.\n   * @beta\n   */\n  ParticipantEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n  /**\n   * Has speaking status changed for the current participant\n   *\n   * args: (speaking: boolean)\n   */\n  ParticipantEvent[\"IsSpeakingChanged\"] = \"isSpeakingChanged\";\n  /**\n   * Connection quality was changed for a Participant. It'll receive updates\n   * from the local participant, as well as any [[RemoteParticipant]]s that we are\n   * subscribed to.\n   *\n   * args: (connectionQuality: [[ConnectionQuality]])\n   */\n  ParticipantEvent[\"ConnectionQualityChanged\"] = \"connectionQualityChanged\";\n  /**\n   * StreamState indicates if a subscribed track has been paused by the SFU\n   * (typically this happens because of subscriber's bandwidth constraints)\n   *\n   * When bandwidth conditions allow, the track will be resumed automatically.\n   * TrackStreamStateChanged will also be emitted when that happens.\n   *\n   * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]])\n   */\n  ParticipantEvent[\"TrackStreamStateChanged\"] = \"trackStreamStateChanged\";\n  /**\n   * One of subscribed tracks have changed its permissions for the current\n   * participant. If permission was revoked, then the track will no longer\n   * be subscribed. If permission was granted, a TrackSubscribed event will\n   * be emitted.\n   *\n   * args: (pub: [[RemoteTrackPublication]],\n   *        status: [[TrackPublication.SubscriptionStatus]])\n   */\n  ParticipantEvent[\"TrackSubscriptionPermissionChanged\"] = \"trackSubscriptionPermissionChanged\";\n  /**\n   * One of the remote participants publications has changed its subscription status.\n   *\n   */\n  ParticipantEvent[\"TrackSubscriptionStatusChanged\"] = \"trackSubscriptionStatusChanged\";\n  /**\n   * a local track has been constrained by cpu\n   */\n  ParticipantEvent[\"TrackCpuConstrained\"] = \"trackCpuConstrained\";\n  // fired only on LocalParticipant\n  /** @internal */\n  ParticipantEvent[\"MediaDevicesError\"] = \"mediaDevicesError\";\n  // fired only on LocalParticipant\n  /** @internal */\n  ParticipantEvent[\"AudioStreamAcquired\"] = \"audioStreamAcquired\";\n  /**\n   * A participant's permission has changed.\n   * args: (prevPermissions: [[ParticipantPermission]])\n   */\n  ParticipantEvent[\"ParticipantPermissionsChanged\"] = \"participantPermissionsChanged\";\n  /** @internal */\n  ParticipantEvent[\"PCTrackAdded\"] = \"pcTrackAdded\";\n  /**\n   * Participant attributes is an app-specific key value state to be pushed to\n   * all users.\n   * When a participant's attributes changed, this event will be emitted with the changed attributes\n   * args: (changedAttributes: [[Record<string, string]])\n   */\n  ParticipantEvent[\"AttributesChanged\"] = \"attributesChanged\";\n  /**\n   * fired on local participant only, when the first remote participant has subscribed to the track specified in the payload\n   */\n  ParticipantEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n  /** only emitted on local participant */\n  ParticipantEvent[\"ChatMessage\"] = \"chatMessage\";\n  /**\n   * Emitted when the participant's state changes to ACTIVE and is ready to send/receive data messages\n   */\n  ParticipantEvent[\"Active\"] = \"active\";\n})(ParticipantEvent || (ParticipantEvent = {}));\n/** @internal */\nvar EngineEvent;\n(function (EngineEvent) {\n  EngineEvent[\"TransportsCreated\"] = \"transportsCreated\";\n  EngineEvent[\"Connected\"] = \"connected\";\n  EngineEvent[\"Disconnected\"] = \"disconnected\";\n  EngineEvent[\"Resuming\"] = \"resuming\";\n  EngineEvent[\"Resumed\"] = \"resumed\";\n  EngineEvent[\"Restarting\"] = \"restarting\";\n  EngineEvent[\"Restarted\"] = \"restarted\";\n  EngineEvent[\"SignalResumed\"] = \"signalResumed\";\n  EngineEvent[\"SignalRestarted\"] = \"signalRestarted\";\n  EngineEvent[\"Closing\"] = \"closing\";\n  EngineEvent[\"MediaTrackAdded\"] = \"mediaTrackAdded\";\n  EngineEvent[\"ActiveSpeakersUpdate\"] = \"activeSpeakersUpdate\";\n  EngineEvent[\"DataPacketReceived\"] = \"dataPacketReceived\";\n  EngineEvent[\"RTPVideoMapUpdate\"] = \"rtpVideoMapUpdate\";\n  EngineEvent[\"DCBufferStatusChanged\"] = \"dcBufferStatusChanged\";\n  EngineEvent[\"ParticipantUpdate\"] = \"participantUpdate\";\n  EngineEvent[\"RoomUpdate\"] = \"roomUpdate\";\n  EngineEvent[\"SpeakersChanged\"] = \"speakersChanged\";\n  EngineEvent[\"StreamStateChanged\"] = \"streamStateChanged\";\n  EngineEvent[\"ConnectionQualityUpdate\"] = \"connectionQualityUpdate\";\n  EngineEvent[\"SubscriptionError\"] = \"subscriptionError\";\n  EngineEvent[\"SubscriptionPermissionUpdate\"] = \"subscriptionPermissionUpdate\";\n  EngineEvent[\"RemoteMute\"] = \"remoteMute\";\n  EngineEvent[\"SubscribedQualityUpdate\"] = \"subscribedQualityUpdate\";\n  EngineEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n  EngineEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n  EngineEvent[\"Offline\"] = \"offline\";\n  EngineEvent[\"SignalRequestResponse\"] = \"signalRequestResponse\";\n  EngineEvent[\"SignalConnected\"] = \"signalConnected\";\n  EngineEvent[\"RoomMoved\"] = \"roomMoved\";\n  EngineEvent[\"PublishDataTrackResponse\"] = \"publishDataTrackResponse\";\n  EngineEvent[\"UnPublishDataTrackResponse\"] = \"unPublishDataTrackResponse\";\n  EngineEvent[\"DataTrackSubscriberHandles\"] = \"dataTrackSubscriberHandles\";\n  EngineEvent[\"DataTrackPacketReceived\"] = \"dataTrackPacketReceived\";\n  EngineEvent[\"Joined\"] = \"joined\";\n  EngineEvent[\"TokenRefreshed\"] = \"tokenRefreshed\";\n  EngineEvent[\"ServerRegionsReported\"] = \"serverRegionsReported\";\n})(EngineEvent || (EngineEvent = {}));\nvar TrackEvent;\n(function (TrackEvent) {\n  TrackEvent[\"Message\"] = \"message\";\n  TrackEvent[\"Muted\"] = \"muted\";\n  TrackEvent[\"Unmuted\"] = \"unmuted\";\n  /**\n   * Only fires on LocalTracks\n   */\n  TrackEvent[\"Restarted\"] = \"restarted\";\n  TrackEvent[\"Ended\"] = \"ended\";\n  TrackEvent[\"Subscribed\"] = \"subscribed\";\n  TrackEvent[\"Unsubscribed\"] = \"unsubscribed\";\n  TrackEvent[\"CpuConstrained\"] = \"cpuConstrained\";\n  /** @internal */\n  TrackEvent[\"UpdateSettings\"] = \"updateSettings\";\n  /** @internal */\n  TrackEvent[\"UpdateSubscription\"] = \"updateSubscription\";\n  /** @internal */\n  TrackEvent[\"AudioPlaybackStarted\"] = \"audioPlaybackStarted\";\n  /** @internal */\n  TrackEvent[\"AudioPlaybackFailed\"] = \"audioPlaybackFailed\";\n  /**\n   * @internal\n   * Only fires on LocalAudioTrack instances\n   */\n  TrackEvent[\"AudioSilenceDetected\"] = \"audioSilenceDetected\";\n  /** @internal */\n  TrackEvent[\"VisibilityChanged\"] = \"visibilityChanged\";\n  /** @internal */\n  TrackEvent[\"VideoDimensionsChanged\"] = \"videoDimensionsChanged\";\n  /** @internal */\n  TrackEvent[\"VideoPlaybackStarted\"] = \"videoPlaybackStarted\";\n  /** @internal */\n  TrackEvent[\"VideoPlaybackFailed\"] = \"videoPlaybackFailed\";\n  /** @internal */\n  TrackEvent[\"ElementAttached\"] = \"elementAttached\";\n  /** @internal */\n  TrackEvent[\"ElementDetached\"] = \"elementDetached\";\n  /**\n   * @internal\n   * Only fires on LocalTracks\n   */\n  TrackEvent[\"UpstreamPaused\"] = \"upstreamPaused\";\n  /**\n   * @internal\n   * Only fires on LocalTracks\n   */\n  TrackEvent[\"UpstreamResumed\"] = \"upstreamResumed\";\n  /**\n   * @internal\n   * Fires on RemoteTrackPublication\n   */\n  TrackEvent[\"SubscriptionPermissionChanged\"] = \"subscriptionPermissionChanged\";\n  /**\n   * Fires on RemoteTrackPublication\n   */\n  TrackEvent[\"SubscriptionStatusChanged\"] = \"subscriptionStatusChanged\";\n  /**\n   * Fires on RemoteTrackPublication\n   */\n  TrackEvent[\"SubscriptionFailed\"] = \"subscriptionFailed\";\n  /**\n   * @internal\n   */\n  TrackEvent[\"TrackProcessorUpdate\"] = \"trackProcessorUpdate\";\n  /**\n   * @internal\n   */\n  TrackEvent[\"AudioTrackFeatureUpdate\"] = \"audioTrackFeatureUpdate\";\n  /**\n   * @beta\n   */\n  TrackEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n  /**\n   * @experimental\n   */\n  TrackEvent[\"TimeSyncUpdate\"] = \"timeSyncUpdate\";\n  /**\n   * @internal\n   */\n  TrackEvent[\"PreConnectBufferFlushed\"] = \"preConnectBufferFlushed\";\n})(TrackEvent || (TrackEvent = {}));function cloneDeep(value) {\n  if (typeof value === 'undefined') {\n    return value;\n  }\n  if (typeof structuredClone === 'function') {\n    if (typeof value === 'object' && value !== null) {\n      // ensure that the value is not a proxy by spreading it\n      return structuredClone(Object.assign({}, value));\n    }\n    return structuredClone(value);\n  } else {\n    return JSON.parse(JSON.stringify(value));\n  }\n}class VideoPreset {\n  constructor(widthOrOptions, height, maxBitrate, maxFramerate, priority) {\n    if (typeof widthOrOptions === 'object') {\n      this.width = widthOrOptions.width;\n      this.height = widthOrOptions.height;\n      this.aspectRatio = widthOrOptions.aspectRatio;\n      this.encoding = {\n        maxBitrate: widthOrOptions.maxBitrate,\n        maxFramerate: widthOrOptions.maxFramerate,\n        priority: widthOrOptions.priority\n      };\n    } else if (height !== undefined && maxBitrate !== undefined) {\n      this.width = widthOrOptions;\n      this.height = height;\n      this.aspectRatio = widthOrOptions / height;\n      this.encoding = {\n        maxBitrate,\n        maxFramerate,\n        priority\n      };\n    } else {\n      throw new TypeError('Unsupported options: provide at least width, height and maxBitrate');\n    }\n  }\n  get resolution() {\n    return {\n      width: this.width,\n      height: this.height,\n      frameRate: this.encoding.maxFramerate,\n      aspectRatio: this.aspectRatio\n    };\n  }\n}\n// `red` is not technically a codec, but treated as one in signalling protocol\nconst audioCodecs = ['opus', 'red'];\nconst backupVideoCodecs = ['vp8', 'h264'];\nconst videoCodecs = ['vp8', 'h264', 'vp9', 'av1', 'h265'];\nfunction isBackupVideoCodec(codec) {\n  return !!backupVideoCodecs.find(backup => backup === codec);\n}\n/** @deprecated Use {@link isBackupVideoCodec} instead */\nconst isBackupCodec = isBackupVideoCodec;\nvar BackupCodecPolicy;\n(function (BackupCodecPolicy) {\n  // codec regression is preferred, the sfu will try to regress codec if possible but not guaranteed\n  BackupCodecPolicy[BackupCodecPolicy[\"PREFER_REGRESSION\"] = 0] = \"PREFER_REGRESSION\";\n  // multi-codec simulcast, publish both primary and backup codec at the same time\n  BackupCodecPolicy[BackupCodecPolicy[\"SIMULCAST\"] = 1] = \"SIMULCAST\";\n  // always use backup codec only\n  BackupCodecPolicy[BackupCodecPolicy[\"REGRESSION\"] = 2] = \"REGRESSION\";\n})(BackupCodecPolicy || (BackupCodecPolicy = {}));\nvar AudioPresets;\n(function (AudioPresets) {\n  AudioPresets.telephone = {\n    maxBitrate: 12000\n  };\n  AudioPresets.speech = {\n    maxBitrate: 24000\n  };\n  AudioPresets.music = {\n    maxBitrate: 48000\n  };\n  AudioPresets.musicStereo = {\n    maxBitrate: 64000\n  };\n  AudioPresets.musicHighQuality = {\n    maxBitrate: 96000\n  };\n  AudioPresets.musicHighQualityStereo = {\n    maxBitrate: 128000\n  };\n})(AudioPresets || (AudioPresets = {}));\n/**\n * Sane presets for video resolution/encoding\n */\nconst VideoPresets = {\n  h90: new VideoPreset(160, 90, 90000, 20),\n  h180: new VideoPreset(320, 180, 160000, 20),\n  h216: new VideoPreset(384, 216, 180000, 20),\n  h360: new VideoPreset(640, 360, 450000, 20),\n  h540: new VideoPreset(960, 540, 800000, 25),\n  h720: new VideoPreset(1280, 720, 1700000, 30),\n  h1080: new VideoPreset(1920, 1080, 3000000, 30),\n  h1440: new VideoPreset(2560, 1440, 5000000, 30),\n  h2160: new VideoPreset(3840, 2160, 8000000, 30)\n};\n/**\n * Four by three presets\n */\nconst VideoPresets43 = {\n  h120: new VideoPreset(160, 120, 70000, 20),\n  h180: new VideoPreset(240, 180, 125000, 20),\n  h240: new VideoPreset(320, 240, 140000, 20),\n  h360: new VideoPreset(480, 360, 330000, 20),\n  h480: new VideoPreset(640, 480, 500000, 20),\n  h540: new VideoPreset(720, 540, 600000, 25),\n  h720: new VideoPreset(960, 720, 1300000, 30),\n  h1080: new VideoPreset(1440, 1080, 2300000, 30),\n  h1440: new VideoPreset(1920, 1440, 3800000, 30)\n};\nconst ScreenSharePresets = {\n  h360fps3: new VideoPreset(640, 360, 200000, 3, 'medium'),\n  h360fps15: new VideoPreset(640, 360, 400000, 15, 'medium'),\n  h720fps5: new VideoPreset(1280, 720, 800000, 5, 'medium'),\n  h720fps15: new VideoPreset(1280, 720, 1500000, 15, 'medium'),\n  h720fps30: new VideoPreset(1280, 720, 2000000, 30, 'medium'),\n  h1080fps15: new VideoPreset(1920, 1080, 2500000, 15, 'medium'),\n  h1080fps30: new VideoPreset(1920, 1080, 5000000, 30, 'medium'),\n  // original resolution, without resizing\n  original: new VideoPreset(0, 0, 7000000, 30, 'medium')\n};function mergeDefaultOptions(options, audioDefaults, videoDefaults) {\n  var _a, _b;\n  var _c, _d;\n  const _extractProcessorsFro = extractProcessorsFromOptions(options !== null && options !== void 0 ? options : {}),\n    optionsWithoutProcessor = _extractProcessorsFro.optionsWithoutProcessor,\n    audioProcessor = _extractProcessorsFro.audioProcessor,\n    videoProcessor = _extractProcessorsFro.videoProcessor;\n  const defaultAudioProcessor = audioDefaults === null || audioDefaults === void 0 ? void 0 : audioDefaults.processor;\n  const defaultVideoProcessor = videoDefaults === null || videoDefaults === void 0 ? void 0 : videoDefaults.processor;\n  const clonedOptions = optionsWithoutProcessor !== null && optionsWithoutProcessor !== void 0 ? optionsWithoutProcessor : {};\n  if (clonedOptions.audio === true) clonedOptions.audio = {};\n  if (clonedOptions.video === true) clonedOptions.video = {};\n  // use defaults\n  if (clonedOptions.audio) {\n    mergeObjectWithoutOverwriting(clonedOptions.audio, audioDefaults);\n    (_a = (_c = clonedOptions.audio).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {\n      ideal: 'default'\n    };\n    if (audioProcessor || defaultAudioProcessor) {\n      clonedOptions.audio.processor = audioProcessor !== null && audioProcessor !== void 0 ? audioProcessor : defaultAudioProcessor;\n    }\n  }\n  if (clonedOptions.video) {\n    mergeObjectWithoutOverwriting(clonedOptions.video, videoDefaults);\n    (_b = (_d = clonedOptions.video).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {\n      ideal: 'default'\n    };\n    if (videoProcessor || defaultVideoProcessor) {\n      clonedOptions.video.processor = videoProcessor !== null && videoProcessor !== void 0 ? videoProcessor : defaultVideoProcessor;\n    }\n  }\n  return clonedOptions;\n}\nfunction mergeObjectWithoutOverwriting(mainObject, objectToMerge) {\n  Object.keys(objectToMerge).forEach(key => {\n    if (mainObject[key] === undefined) mainObject[key] = objectToMerge[key];\n  });\n  return mainObject;\n}\nfunction constraintsForOptions(options) {\n  var _a, _b;\n  var _c, _d;\n  const constraints = {};\n  if (options.video) {\n    // default video options\n    if (typeof options.video === 'object') {\n      const videoOptions = {};\n      const target = videoOptions;\n      const source = options.video;\n      Object.keys(source).forEach(key => {\n        switch (key) {\n          case 'resolution':\n            // flatten VideoResolution fields\n            mergeObjectWithoutOverwriting(target, source.resolution);\n            break;\n          default:\n            target[key] = source[key];\n        }\n      });\n      constraints.video = videoOptions;\n      (_a = (_c = constraints.video).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {\n        ideal: 'default'\n      };\n    } else {\n      constraints.video = options.video ? {\n        deviceId: {\n          ideal: 'default'\n        }\n      } : false;\n    }\n  } else {\n    constraints.video = false;\n  }\n  if (options.audio) {\n    if (typeof options.audio === 'object') {\n      constraints.audio = options.audio;\n      (_b = (_d = constraints.audio).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {\n        ideal: 'default'\n      };\n    } else {\n      constraints.audio = {\n        deviceId: {\n          ideal: 'default'\n        }\n      };\n    }\n  } else {\n    constraints.audio = false;\n  }\n  return constraints;\n}\n/**\n * This function detects silence on a given [[Track]] instance.\n * Returns true if the track seems to be entirely silent.\n */\nfunction detectSilence(track_1) {\n  return __awaiter(this, arguments, void 0, function (track) {\n    let timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n    return function* () {\n      const ctx = getNewAudioContext();\n      if (ctx) {\n        const analyser = ctx.createAnalyser();\n        analyser.fftSize = 2048;\n        const bufferLength = analyser.frequencyBinCount;\n        const dataArray = new Uint8Array(bufferLength);\n        const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));\n        source.connect(analyser);\n        yield sleep(timeOffset);\n        analyser.getByteTimeDomainData(dataArray);\n        const someNoise = dataArray.some(sample => sample !== 128 && sample !== 0);\n        ctx.close();\n        return !someNoise;\n      }\n      return false;\n    }();\n  });\n}\n/**\n * @internal\n */\nfunction getNewAudioContext() {\n  var _a;\n  const AudioContext =\n  // @ts-ignore\n  typeof window !== 'undefined' && (window.AudioContext || window.webkitAudioContext);\n  if (AudioContext) {\n    const audioContext = new AudioContext({\n      latencyHint: 'interactive'\n    });\n    // If the audio context is suspended, we need to resume it when the user clicks on the page\n    if (audioContext.state === 'suspended' && typeof window !== 'undefined' && ((_a = window.document) === null || _a === void 0 ? void 0 : _a.body)) {\n      const handleResume = () => __awaiter(this, void 0, void 0, function* () {\n        var _a;\n        try {\n          if (audioContext.state === 'suspended') {\n            yield audioContext.resume();\n          }\n        } catch (e) {\n          console.warn('Error trying to auto-resume audio context', e);\n        } finally {\n          (_a = window.document.body) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleResume);\n        }\n      });\n      // https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/statechange_event\n      audioContext.addEventListener('statechange', () => {\n        var _a;\n        if (audioContext.state === 'closed') {\n          (_a = window.document.body) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleResume);\n        }\n      });\n      window.document.body.addEventListener('click', handleResume);\n    }\n    return audioContext;\n  }\n}\n/**\n * @internal\n */\nfunction kindToSource(kind) {\n  if (kind === 'audioinput') {\n    return Track.Source.Microphone;\n  } else if (kind === 'videoinput') {\n    return Track.Source.Camera;\n  } else {\n    return Track.Source.Unknown;\n  }\n}\n/**\n * @internal\n */\nfunction sourceToKind(source) {\n  if (source === Track.Source.Microphone) {\n    return 'audioinput';\n  } else if (source === Track.Source.Camera) {\n    return 'videoinput';\n  } else {\n    return undefined;\n  }\n}\n/**\n * @internal\n */\nfunction screenCaptureToDisplayMediaStreamOptions(options) {\n  var _a, _b;\n  let videoConstraints = (_a = options.video) !== null && _a !== void 0 ? _a : true;\n  // treat 0 as uncapped\n  if (options.resolution && options.resolution.width > 0 && options.resolution.height > 0) {\n    videoConstraints = typeof videoConstraints === 'boolean' ? {} : videoConstraints;\n    if (isSafari()) {\n      videoConstraints = Object.assign(Object.assign({}, videoConstraints), {\n        width: {\n          max: options.resolution.width\n        },\n        height: {\n          max: options.resolution.height\n        },\n        frameRate: options.resolution.frameRate\n      });\n    } else {\n      videoConstraints = Object.assign(Object.assign({}, videoConstraints), {\n        width: {\n          ideal: options.resolution.width\n        },\n        height: {\n          ideal: options.resolution.height\n        },\n        frameRate: options.resolution.frameRate\n      });\n    }\n  }\n  return {\n    audio: (_b = options.audio) !== null && _b !== void 0 ? _b : false,\n    video: videoConstraints,\n    // @ts-expect-error support for experimental display media features\n    controller: options.controller,\n    selfBrowserSurface: options.selfBrowserSurface,\n    surfaceSwitching: options.surfaceSwitching,\n    systemAudio: options.systemAudio,\n    preferCurrentTab: options.preferCurrentTab\n  };\n}\nfunction mimeTypeToVideoCodecString(mimeType) {\n  return mimeType.split('/')[1].toLowerCase();\n}\nfunction getTrackPublicationInfo(tracks) {\n  const infos = [];\n  tracks.forEach(track => {\n    if (track.track !== undefined) {\n      infos.push(new TrackPublishedResponse({\n        cid: track.track.mediaStreamID,\n        track: track.trackInfo\n      }));\n    }\n  });\n  return infos;\n}\nfunction getLogContextFromTrack(track) {\n  if ('mediaStreamTrack' in track) {\n    return {\n      trackID: track.sid,\n      source: track.source,\n      muted: track.isMuted,\n      enabled: track.mediaStreamTrack.enabled,\n      kind: track.kind,\n      streamID: track.mediaStreamID,\n      streamTrackID: track.mediaStreamTrack.id\n    };\n  } else {\n    return {\n      trackID: track.trackSid,\n      enabled: track.isEnabled,\n      muted: track.isMuted,\n      trackInfo: Object.assign({\n        mimeType: track.mimeType,\n        name: track.trackName,\n        encrypted: track.isEncrypted,\n        kind: track.kind,\n        source: track.source\n      }, track.track ? getLogContextFromTrack(track.track) : {})\n    };\n  }\n}\nfunction supportsSynchronizationSources() {\n  return typeof RTCRtpReceiver !== 'undefined' && typeof RTCRtpReceiver.prototype.getSynchronizationSources === 'function';\n}\nfunction diffAttributes(oldValues, newValues) {\n  var _a;\n  if (oldValues === undefined) {\n    oldValues = {};\n  }\n  if (newValues === undefined) {\n    newValues = {};\n  }\n  const allKeys = [...Object.keys(newValues), ...Object.keys(oldValues)];\n  const diff = {};\n  for (const key of allKeys) {\n    if (oldValues[key] !== newValues[key]) {\n      diff[key] = (_a = newValues[key]) !== null && _a !== void 0 ? _a : '';\n    }\n  }\n  return diff;\n}\n/** @internal */\nfunction extractProcessorsFromOptions(options) {\n  const newOptions = Object.assign({}, options);\n  let audioProcessor;\n  let videoProcessor;\n  if (typeof newOptions.audio === 'object' && newOptions.audio.processor) {\n    audioProcessor = newOptions.audio.processor;\n    newOptions.audio = Object.assign(Object.assign({}, newOptions.audio), {\n      processor: undefined\n    });\n  }\n  if (typeof newOptions.video === 'object' && newOptions.video.processor) {\n    videoProcessor = newOptions.video.processor;\n    newOptions.video = Object.assign(Object.assign({}, newOptions.video), {\n      processor: undefined\n    });\n  }\n  return {\n    audioProcessor,\n    videoProcessor,\n    optionsWithoutProcessor: cloneDeep(newOptions)\n  };\n}\nfunction getTrackSourceFromProto(source) {\n  switch (source) {\n    case TrackSource.CAMERA:\n      return Track.Source.Camera;\n    case TrackSource.MICROPHONE:\n      return Track.Source.Microphone;\n    case TrackSource.SCREEN_SHARE:\n      return Track.Source.ScreenShare;\n    case TrackSource.SCREEN_SHARE_AUDIO:\n      return Track.Source.ScreenShareAudio;\n    default:\n      return Track.Source.Unknown;\n  }\n}\nfunction areDimensionsSmaller(a, b) {\n  return a.width * a.height < b.width * b.height;\n}\nfunction layerDimensionsFor(trackInfo, quality) {\n  var _a;\n  return (_a = trackInfo.layers) === null || _a === void 0 ? void 0 : _a.find(l => l.quality === quality);\n}const BACKGROUND_REACTION_DELAY = 5000;\n// keep old audio elements when detached, we would re-use them since on iOS\n// Safari tracks which audio elements have been \"blessed\" by the user.\nconst recycledElements = [];\nvar VideoQuality;\n(function (VideoQuality) {\n  VideoQuality[VideoQuality[\"LOW\"] = 0] = \"LOW\";\n  VideoQuality[VideoQuality[\"MEDIUM\"] = 1] = \"MEDIUM\";\n  VideoQuality[VideoQuality[\"HIGH\"] = 2] = \"HIGH\";\n})(VideoQuality || (VideoQuality = {}));\nclass Track extends eventsExports.EventEmitter {\n  /**\n   * indicates current state of stream, it'll indicate `paused` if the track\n   * has been paused by congestion controller\n   */\n  get streamState() {\n    return this._streamState;\n  }\n  /** @internal */\n  setStreamState(value) {\n    this._streamState = value;\n  }\n  constructor(mediaTrack, kind) {\n    let loggerOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _a;\n    super();\n    this.attachedElements = [];\n    this.isMuted = false;\n    this._streamState = Track.StreamState.Active;\n    this.isInBackground = false;\n    this._currentBitrate = 0;\n    this.log = livekitLogger;\n    this.appVisibilityChangedListener = () => {\n      if (this.backgroundTimeout) {\n        clearTimeout(this.backgroundTimeout);\n      }\n      // delay app visibility update if it goes to hidden\n      // update immediately if it comes back to focus\n      if (document.visibilityState === 'hidden') {\n        this.backgroundTimeout = setTimeout(() => this.handleAppVisibilityChanged(), BACKGROUND_REACTION_DELAY);\n      } else {\n        this.handleAppVisibilityChanged();\n      }\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Track);\n    this.loggerContextCb = loggerOptions.loggerContextCb;\n    this.setMaxListeners(100);\n    this.kind = kind;\n    this._mediaStreamTrack = mediaTrack;\n    this._mediaStreamID = mediaTrack.id;\n    this.source = Track.Source.Unknown;\n  }\n  get logContext() {\n    var _a;\n    return Object.assign(Object.assign({}, (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)), getLogContextFromTrack(this));\n  }\n  /** current receive bits per second */\n  get currentBitrate() {\n    return this._currentBitrate;\n  }\n  get mediaStreamTrack() {\n    return this._mediaStreamTrack;\n  }\n  /**\n   * @internal\n   * used for keep mediaStream's first id, since it's id might change\n   * if we disable/enable a track\n   */\n  get mediaStreamID() {\n    return this._mediaStreamID;\n  }\n  attach(element) {\n    let elementType = 'audio';\n    if (this.kind === Track.Kind.Video) {\n      elementType = 'video';\n    }\n    if (this.attachedElements.length === 0 && this.kind === Track.Kind.Video) {\n      this.addAppVisibilityListener();\n    }\n    if (!element) {\n      if (elementType === 'audio') {\n        recycledElements.forEach(e => {\n          if (e.parentElement === null && !element) {\n            element = e;\n          }\n        });\n        if (element) {\n          // remove it from pool\n          recycledElements.splice(recycledElements.indexOf(element), 1);\n        }\n      }\n      if (!element) {\n        element = document.createElement(elementType);\n      }\n    }\n    if (!this.attachedElements.includes(element)) {\n      this.attachedElements.push(element);\n    }\n    // even if we believe it's already attached to the element, it's possible\n    // the element's srcObject was set to something else out of band.\n    // we'll want to re-attach it in that case\n    attachToElement(this.mediaStreamTrack, element);\n    // handle auto playback failures\n    const allMediaStreamTracks = element.srcObject.getTracks();\n    const hasAudio = allMediaStreamTracks.some(tr => tr.kind === 'audio');\n    // manually play media to detect auto playback status\n    element.play().then(() => {\n      this.emit(hasAudio ? TrackEvent.AudioPlaybackStarted : TrackEvent.VideoPlaybackStarted);\n    }).catch(e => {\n      if (e.name === 'NotAllowedError') {\n        this.emit(hasAudio ? TrackEvent.AudioPlaybackFailed : TrackEvent.VideoPlaybackFailed, e);\n      } else if (e.name === 'AbortError') {\n        // commonly triggered by another `play` request, only log for debugging purposes\n        livekitLogger.debug(\"\".concat(hasAudio ? 'audio' : 'video', \" playback aborted, likely due to new play request\"));\n      } else {\n        livekitLogger.warn(\"could not playback \".concat(hasAudio ? 'audio' : 'video'), e);\n      }\n      // If audio playback isn't allowed make sure we still play back the video\n      if (hasAudio && element && allMediaStreamTracks.some(tr => tr.kind === 'video') && e.name === 'NotAllowedError') {\n        element.muted = true;\n        element.play().catch(() => {\n          // catch for Safari, exceeded options at this point to automatically play the media element\n        });\n      }\n    });\n    this.emit(TrackEvent.ElementAttached, element);\n    return element;\n  }\n  detach(element) {\n    try {\n      // detach from a single element\n      if (element) {\n        detachTrack(this.mediaStreamTrack, element);\n        const idx = this.attachedElements.indexOf(element);\n        if (idx >= 0) {\n          this.attachedElements.splice(idx, 1);\n          this.recycleElement(element);\n          this.emit(TrackEvent.ElementDetached, element);\n        }\n        return element;\n      }\n      const detached = [];\n      this.attachedElements.forEach(elm => {\n        detachTrack(this.mediaStreamTrack, elm);\n        detached.push(elm);\n        this.recycleElement(elm);\n        this.emit(TrackEvent.ElementDetached, elm);\n      });\n      // remove all tracks\n      this.attachedElements = [];\n      return detached;\n    } finally {\n      if (this.attachedElements.length === 0) {\n        this.removeAppVisibilityListener();\n      }\n    }\n  }\n  stop() {\n    this.stopMonitor();\n    this._mediaStreamTrack.stop();\n  }\n  enable() {\n    this._mediaStreamTrack.enabled = true;\n  }\n  disable() {\n    this._mediaStreamTrack.enabled = false;\n  }\n  /* @internal */\n  stopMonitor() {\n    if (this.monitorInterval) {\n      clearInterval(this.monitorInterval);\n    }\n    if (this.timeSyncHandle) {\n      cancelAnimationFrame(this.timeSyncHandle);\n    }\n  }\n  /** @internal */\n  updateLoggerOptions(loggerOptions) {\n    if (loggerOptions.loggerName) {\n      this.log = getLogger(loggerOptions.loggerName);\n    }\n    if (loggerOptions.loggerContextCb) {\n      this.loggerContextCb = loggerOptions.loggerContextCb;\n    }\n  }\n  recycleElement(element) {\n    if (element instanceof HTMLAudioElement) {\n      // we only need to re-use a single element\n      let shouldCache = true;\n      element.pause();\n      recycledElements.forEach(e => {\n        if (!e.parentElement) {\n          shouldCache = false;\n        }\n      });\n      if (shouldCache) {\n        recycledElements.push(element);\n      }\n    }\n  }\n  handleAppVisibilityChanged() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.isInBackground = document.visibilityState === 'hidden';\n      if (!this.isInBackground && this.kind === Track.Kind.Video) {\n        setTimeout(() => this.attachedElements.forEach(el => el.play().catch(() => {\n          /** catch clause necessary for Safari */\n        })), 0);\n      }\n    });\n  }\n  addAppVisibilityListener() {\n    if (isWeb()) {\n      this.isInBackground = document.visibilityState === 'hidden';\n      document.addEventListener('visibilitychange', this.appVisibilityChangedListener);\n    } else {\n      this.isInBackground = false;\n    }\n  }\n  removeAppVisibilityListener() {\n    if (isWeb()) {\n      document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);\n    }\n  }\n}\nfunction attachToElement(track, element) {\n  let mediaStream;\n  if (element.srcObject instanceof MediaStream) {\n    mediaStream = element.srcObject;\n  } else {\n    mediaStream = new MediaStream();\n  }\n  // check if track matches existing track\n  let existingTracks;\n  if (track.kind === 'audio') {\n    existingTracks = mediaStream.getAudioTracks();\n  } else {\n    existingTracks = mediaStream.getVideoTracks();\n  }\n  if (!existingTracks.includes(track)) {\n    existingTracks.forEach(et => {\n      mediaStream.removeTrack(et);\n    });\n    mediaStream.addTrack(track);\n  }\n  if (!isSafari() || !(element instanceof HTMLVideoElement)) {\n    // when in low power mode (applies to both macOS and iOS), Safari will show a play/pause overlay\n    // when a video starts that has the `autoplay` attribute is set.\n    // we work around this by _not_ setting the autoplay attribute on safari and instead call `setTimeout(() => el.play(),0)` further down\n    element.autoplay = true;\n  }\n  // In case there are no audio tracks present on the mediastream, we set the element as muted to ensure autoplay works\n  element.muted = mediaStream.getAudioTracks().length === 0;\n  if (element instanceof HTMLVideoElement) {\n    element.playsInline = true;\n  }\n  // avoid flicker\n  if (element.srcObject !== mediaStream) {\n    element.srcObject = mediaStream;\n    if ((isSafari() || isFireFox()) && element instanceof HTMLVideoElement) {\n      // Firefox also has a timing issue where video doesn't actually get attached unless\n      // performed out-of-band\n      // Safari 15 has a bug where in certain layouts, video element renders\n      // black until the page is resized or other changes take place.\n      // Resetting the src triggers it to render.\n      // https://developer.apple.com/forums/thread/690523\n      setTimeout(() => {\n        element.srcObject = mediaStream;\n        // Safari 15 sometimes fails to start a video\n        // when the window is backgrounded before the first frame is drawn\n        // manually calling play here seems to fix that\n        element.play().catch(() => {\n          /** do nothing */\n        });\n      }, 0);\n    }\n  }\n}\n/** @internal */\nfunction detachTrack(track, element) {\n  if (element.srcObject instanceof MediaStream) {\n    const mediaStream = element.srcObject;\n    mediaStream.removeTrack(track);\n    if (mediaStream.getTracks().length > 0) {\n      element.srcObject = mediaStream;\n    } else {\n      element.srcObject = null;\n    }\n  }\n}\n(function (Track) {\n  let Kind;\n  (function (Kind) {\n    Kind[\"Audio\"] = \"audio\";\n    Kind[\"Video\"] = \"video\";\n    Kind[\"Unknown\"] = \"unknown\";\n  })(Kind = Track.Kind || (Track.Kind = {}));\n  let Source;\n  (function (Source) {\n    Source[\"Camera\"] = \"camera\";\n    Source[\"Microphone\"] = \"microphone\";\n    Source[\"ScreenShare\"] = \"screen_share\";\n    Source[\"ScreenShareAudio\"] = \"screen_share_audio\";\n    Source[\"Unknown\"] = \"unknown\";\n  })(Source = Track.Source || (Track.Source = {}));\n  let StreamState$1;\n  (function (StreamState) {\n    StreamState[\"Active\"] = \"active\";\n    StreamState[\"Paused\"] = \"paused\";\n    StreamState[\"Unknown\"] = \"unknown\";\n  })(StreamState$1 = Track.StreamState || (Track.StreamState = {}));\n  /** @internal */\n  function kindToProto(k) {\n    switch (k) {\n      case Kind.Audio:\n        return TrackType.AUDIO;\n      case Kind.Video:\n        return TrackType.VIDEO;\n      default:\n        // FIXME this was UNRECOGNIZED before\n        return TrackType.DATA;\n    }\n  }\n  Track.kindToProto = kindToProto;\n  /** @internal */\n  function kindFromProto(t) {\n    switch (t) {\n      case TrackType.AUDIO:\n        return Kind.Audio;\n      case TrackType.VIDEO:\n        return Kind.Video;\n      default:\n        return Kind.Unknown;\n    }\n  }\n  Track.kindFromProto = kindFromProto;\n  /** @internal */\n  function sourceToProto(s) {\n    switch (s) {\n      case Source.Camera:\n        return TrackSource.CAMERA;\n      case Source.Microphone:\n        return TrackSource.MICROPHONE;\n      case Source.ScreenShare:\n        return TrackSource.SCREEN_SHARE;\n      case Source.ScreenShareAudio:\n        return TrackSource.SCREEN_SHARE_AUDIO;\n      default:\n        return TrackSource.UNKNOWN;\n    }\n  }\n  Track.sourceToProto = sourceToProto;\n  /** @internal */\n  function sourceFromProto(s) {\n    switch (s) {\n      case TrackSource.CAMERA:\n        return Source.Camera;\n      case TrackSource.MICROPHONE:\n        return Source.Microphone;\n      case TrackSource.SCREEN_SHARE:\n        return Source.ScreenShare;\n      case TrackSource.SCREEN_SHARE_AUDIO:\n        return Source.ScreenShareAudio;\n      default:\n        return Source.Unknown;\n    }\n  }\n  Track.sourceFromProto = sourceFromProto;\n  /** @internal */\n  function streamStateFromProto(s) {\n    switch (s) {\n      case StreamState.ACTIVE:\n        return StreamState$1.Active;\n      case StreamState.PAUSED:\n        return StreamState$1.Paused;\n      default:\n        return StreamState$1.Unknown;\n    }\n  }\n  Track.streamStateFromProto = streamStateFromProto;\n})(Track || (Track = {}));const separator = '|';\nconst ddExtensionURI = 'https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension';\nfunction unpackStreamId(packed) {\n  const parts = packed.split(separator);\n  if (parts.length > 1) {\n    return [parts[0], packed.substr(parts[0].length + 1)];\n  }\n  return [packed, ''];\n}\nfunction sleep(duration) {\n  return new TypedPromise(resolve => CriticalTimers.setTimeout(resolve, duration));\n}\n/** @internal */\nfunction supportsTransceiver() {\n  return 'addTransceiver' in RTCPeerConnection.prototype;\n}\n/** @internal */\nfunction supportsAddTrack() {\n  return 'addTrack' in RTCPeerConnection.prototype;\n}\nfunction supportsAdaptiveStream() {\n  return typeof ResizeObserver !== undefined && typeof IntersectionObserver !== undefined;\n}\nfunction supportsDynacast() {\n  return supportsTransceiver();\n}\nfunction supportsAV1() {\n  if (!('getCapabilities' in RTCRtpSender)) {\n    return false;\n  }\n  if (isSafari() || isFireFox()) {\n    // Safari 17 on iPhone14 reports AV1 capability, but does not actually support it\n    // Firefox does support AV1, but SVC publishing is not supported\n    return false;\n  }\n  const capabilities = RTCRtpSender.getCapabilities('video');\n  let hasAV1 = false;\n  if (capabilities) {\n    for (const codec of capabilities.codecs) {\n      if (codec.mimeType.toLowerCase() === 'video/av1') {\n        hasAV1 = true;\n        break;\n      }\n    }\n  }\n  return hasAV1;\n}\nfunction supportsVP9() {\n  if (!('getCapabilities' in RTCRtpSender)) {\n    return false;\n  }\n  if (isFireFox()) {\n    // technically speaking FireFox supports VP9, but SVC publishing is broken\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1633876\n    return false;\n  }\n  if (isSafari()) {\n    const browser = getBrowser();\n    if ((browser === null || browser === void 0 ? void 0 : browser.version) && compareVersions(browser.version, '16') < 0) {\n      // Safari 16 and below does not support VP9\n      return false;\n    }\n    if ((browser === null || browser === void 0 ? void 0 : browser.os) === 'iOS' && (browser === null || browser === void 0 ? void 0 : browser.osVersion) && compareVersions(browser.osVersion, '16') < 0) {\n      // Safari 16 and below on iOS does not support VP9 we need the iOS check to account for other browsers running webkit under the hood\n      return false;\n    }\n  }\n  const capabilities = RTCRtpSender.getCapabilities('video');\n  let hasVP9 = false;\n  if (capabilities) {\n    for (const codec of capabilities.codecs) {\n      if (codec.mimeType.toLowerCase() === 'video/vp9') {\n        hasVP9 = true;\n        break;\n      }\n    }\n  }\n  return hasVP9;\n}\nfunction isSVCCodec(codec) {\n  return codec === 'av1' || codec === 'vp9';\n}\nfunction supportsSetSinkId(elm) {\n  if (!document || isSafariBased()) {\n    return false;\n  }\n  if (!elm) {\n    elm = document.createElement('audio');\n  }\n  return 'setSinkId' in elm;\n}\n/**\n * Checks whether or not setting an audio output via {@link Room#setActiveDevice}\n * is supported for the current browser.\n */\nfunction supportsAudioOutputSelection() {\n  // Note: this is method publicly exported under a user friendly name and currently only proxying `supportsSetSinkId`\n  return supportsSetSinkId();\n}\nfunction isBrowserSupported() {\n  if (typeof RTCPeerConnection === 'undefined') {\n    return false;\n  }\n  return supportsTransceiver() || supportsAddTrack();\n}\nfunction isFireFox() {\n  var _a;\n  return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Firefox';\n}\nfunction isChromiumBased() {\n  const browser = getBrowser();\n  return !!browser && browser.name === 'Chrome' && browser.os !== 'iOS';\n}\nfunction isScriptTransformSupportedForWorker() {\n  // Chrome occasionally throws an `InvalidState` error when using script transforms directly after introducing this API in 141.\n  // Disabling it for Chrome based browsers until the API has stabilized.\n  // @ts-ignore\n  return typeof window !== 'undefined' &&\n  // @ts-ignore\n  typeof window.RTCRtpScriptTransform !== 'undefined' && !isChromiumBased();\n}\nfunction isSafari() {\n  var _a;\n  return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Safari';\n}\nfunction isSafariBased() {\n  const b = getBrowser();\n  return (b === null || b === void 0 ? void 0 : b.name) === 'Safari' || (b === null || b === void 0 ? void 0 : b.os) === 'iOS';\n}\nfunction isSafari17Based() {\n  const b = getBrowser();\n  return (b === null || b === void 0 ? void 0 : b.name) === 'Safari' && b.version.startsWith('17.') || (b === null || b === void 0 ? void 0 : b.os) === 'iOS' && !!(b === null || b === void 0 ? void 0 : b.osVersion) && compareVersions(b.osVersion, '17') >= 0;\n}\nfunction isSafariSvcApi(browser) {\n  if (!browser) {\n    browser = getBrowser();\n  }\n  // Safari 18.4 requires legacy svc api and scaleResolutionDown to be set\n  return (browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '18.3') > 0 || (browser === null || browser === void 0 ? void 0 : browser.os) === 'iOS' && !!(browser === null || browser === void 0 ? void 0 : browser.osVersion) && compareVersions(browser.osVersion, '18.3') > 0;\n}\nfunction isMobile() {\n  var _a, _b;\n  if (!isWeb()) return false;\n  return (\n    // @ts-expect-error `userAgentData` is not yet part of typescript\n    (_b = (_a = navigator.userAgentData) === null || _a === void 0 ? void 0 : _a.mobile) !== null && _b !== void 0 ? _b : /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent)\n  );\n}\nfunction isE2EESimulcastSupported() {\n  const browser = getBrowser();\n  const supportedSafariVersion = '17.2'; // see https://bugs.webkit.org/show_bug.cgi?id=257803\n  if (browser) {\n    if (browser.name !== 'Safari' && browser.os !== 'iOS') {\n      return true;\n    } else if (browser.os === 'iOS' && browser.osVersion && compareVersions(browser.osVersion, supportedSafariVersion) >= 0) {\n      return true;\n    } else if (browser.name === 'Safari' && compareVersions(browser.version, supportedSafariVersion) >= 0) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\nfunction isWeb() {\n  return typeof document !== 'undefined';\n}\nfunction isReactNative() {\n  // navigator.product is deprecated on browsers, but will be set appropriately for react-native.\n  return navigator.product == 'ReactNative';\n}\nfunction isCloud(serverUrl) {\n  return serverUrl.hostname.endsWith('.livekit.cloud') || serverUrl.hostname.endsWith('.livekit.run');\n}\nfunction extractProjectFromUrl(serverUrl) {\n  if (!isCloud(serverUrl)) {\n    return null;\n  }\n  return serverUrl.hostname.split('.')[0];\n}\nfunction getLKReactNativeInfo() {\n  // global defined only for ReactNative.\n  // @ts-ignore\n  if (global && global.LiveKitReactNativeGlobal) {\n    // @ts-ignore\n    return global.LiveKitReactNativeGlobal;\n  }\n  return undefined;\n}\nfunction getReactNativeOs() {\n  if (!isReactNative()) {\n    return undefined;\n  }\n  let info = getLKReactNativeInfo();\n  if (info) {\n    return info.platform;\n  }\n  return undefined;\n}\nfunction getDevicePixelRatio() {\n  if (isWeb()) {\n    return window.devicePixelRatio;\n  }\n  if (isReactNative()) {\n    let info = getLKReactNativeInfo();\n    if (info) {\n      return info.devicePixelRatio;\n    }\n  }\n  return 1;\n}\n/**\n * @param v1 - The first version string to compare.\n * @param v2 - The second version string to compare.\n * @returns A number indicating the order of the versions:\n *   - 1 if v1 is greater than v2\n *   - -1 if v1 is less than v2\n *   - 0 if v1 and v2 are equal\n */\nfunction compareVersions(v1, v2) {\n  const parts1 = v1.split('.');\n  const parts2 = v2.split('.');\n  const k = Math.min(parts1.length, parts2.length);\n  for (let i = 0; i < k; ++i) {\n    const p1 = parseInt(parts1[i], 10);\n    const p2 = parseInt(parts2[i], 10);\n    if (p1 > p2) return 1;\n    if (p1 < p2) return -1;\n    if (i === k - 1 && p1 === p2) return 0;\n  }\n  if (v1 === '' && v2 !== '') {\n    return -1;\n  } else if (v2 === '') {\n    return 1;\n  }\n  return parts1.length == parts2.length ? 0 : parts1.length < parts2.length ? -1 : 1;\n}\nfunction roDispatchCallback(entries) {\n  for (const entry of entries) {\n    entry.target.handleResize(entry);\n  }\n}\nfunction ioDispatchCallback(entries) {\n  for (const entry of entries) {\n    entry.target.handleVisibilityChanged(entry);\n  }\n}\nlet resizeObserver = null;\nconst getResizeObserver = () => {\n  if (!resizeObserver) resizeObserver = new ResizeObserver(roDispatchCallback);\n  return resizeObserver;\n};\nlet intersectionObserver = null;\nconst getIntersectionObserver = () => {\n  if (!intersectionObserver) {\n    intersectionObserver = new IntersectionObserver(ioDispatchCallback, {\n      root: null,\n      rootMargin: '0px'\n    });\n  }\n  return intersectionObserver;\n};\nfunction getClientInfo(capabilities) {\n  var _a;\n  const info = new ClientInfo({\n    capabilities,\n    sdk: ClientInfo_SDK.JS,\n    protocol: protocolVersion,\n    clientProtocol,\n    version\n  });\n  if (isReactNative()) {\n    info.os = (_a = getReactNativeOs()) !== null && _a !== void 0 ? _a : '';\n  }\n  return info;\n}\nlet emptyVideoStreamTrack;\nfunction getEmptyVideoStreamTrack() {\n  if (!emptyVideoStreamTrack) {\n    emptyVideoStreamTrack = createDummyVideoStreamTrack();\n  }\n  return emptyVideoStreamTrack.clone();\n}\nfunction createDummyVideoStreamTrack() {\n  let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;\n  let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n  let enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  let paintContent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  const canvas = document.createElement('canvas');\n  // the canvas size is set to 16 by default, because electron apps seem to fail with smaller values\n  canvas.width = width;\n  canvas.height = height;\n  const ctx = canvas.getContext('2d');\n  ctx === null || ctx === void 0 ? void 0 : ctx.fillRect(0, 0, canvas.width, canvas.height);\n  if (paintContent && ctx) {\n    ctx.beginPath();\n    ctx.arc(width / 2, height / 2, 50, 0, Math.PI * 2, true);\n    ctx.closePath();\n    ctx.fillStyle = 'grey';\n    ctx.fill();\n  }\n  // @ts-ignore\n  const dummyStream = canvas.captureStream();\n  const _dummyStream$getTrack = dummyStream.getTracks(),\n    _dummyStream$getTrack2 = _slicedToArray(_dummyStream$getTrack, 1),\n    dummyTrack = _dummyStream$getTrack2[0];\n  if (!dummyTrack) {\n    throw Error('Could not get empty media stream video track');\n  }\n  dummyTrack.enabled = enabled;\n  return dummyTrack;\n}\nlet emptyAudioStreamTrack;\nfunction getEmptyAudioStreamTrack() {\n  if (!emptyAudioStreamTrack) {\n    // implementation adapted from https://blog.mozilla.org/webrtc/warm-up-with-replacetrack/\n    const ctx = new AudioContext();\n    const oscillator = ctx.createOscillator();\n    const gain = ctx.createGain();\n    gain.gain.setValueAtTime(0, 0);\n    const dst = ctx.createMediaStreamDestination();\n    oscillator.connect(gain);\n    gain.connect(dst);\n    oscillator.start();\n    var _dst$stream$getAudioT = dst.stream.getAudioTracks();\n    var _dst$stream$getAudioT2 = _slicedToArray(_dst$stream$getAudioT, 1);\n    emptyAudioStreamTrack = _dst$stream$getAudioT2[0];\n    if (!emptyAudioStreamTrack) {\n      throw Error('Could not get empty media stream audio track');\n    }\n    emptyAudioStreamTrack.enabled = false;\n  }\n  return emptyAudioStreamTrack.clone();\n}\n/** An object that represents a serialized version of a `new Promise((resolve, reject) => {})`\n * constructor. Wait for a promise resolution with `await future.promise` and explicitly resolve or\n * reject the inner promise with `future.resolve(...)` or `future.reject(...)`.\n */\nclass Future {\n  get isResolved() {\n    return this._isResolved;\n  }\n  constructor(futureBase, onFinally) {\n    this._isResolved = false;\n    this.onFinally = onFinally;\n    this.promise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n      this.resolve = resolve;\n      this.reject = reject;\n      if (futureBase) {\n        yield futureBase(resolve, reject);\n      }\n    })).finally(() => {\n      var _a;\n      this._isResolved = true;\n      (_a = this.onFinally) === null || _a === void 0 ? void 0 : _a.call(this);\n    });\n  }\n}\n/**\n * Creates and returns an analyser web audio node that is attached to the provided track.\n * Additionally returns a convenience method `calculateVolume` to perform instant volume readings on that track.\n * Call the returned `cleanup` function to close the audioContext that has been created for the instance of this helper\n */\nfunction createAudioAnalyser(track, options) {\n  const opts = Object.assign({\n    cloneTrack: false,\n    fftSize: 2048,\n    smoothingTimeConstant: 0.8,\n    minDecibels: -100,\n    maxDecibels: -80\n  }, options);\n  const audioContext = getNewAudioContext();\n  if (!audioContext) {\n    throw new Error('Audio Context not supported on this browser');\n  }\n  const streamTrack = opts.cloneTrack ? track.mediaStreamTrack.clone() : track.mediaStreamTrack;\n  const mediaStreamSource = audioContext.createMediaStreamSource(new MediaStream([streamTrack]));\n  const analyser = audioContext.createAnalyser();\n  analyser.minDecibels = opts.minDecibels;\n  analyser.maxDecibels = opts.maxDecibels;\n  analyser.fftSize = opts.fftSize;\n  analyser.smoothingTimeConstant = opts.smoothingTimeConstant;\n  mediaStreamSource.connect(analyser);\n  const dataArray = new Uint8Array(analyser.frequencyBinCount);\n  /**\n   * Calculates the current volume of the track in the range from 0 to 1\n   */\n  const calculateVolume = () => {\n    analyser.getByteFrequencyData(dataArray);\n    let sum = 0;\n    for (const amplitude of dataArray) {\n      sum += Math.pow(amplitude / 255, 2);\n    }\n    const volume = Math.sqrt(sum / dataArray.length);\n    return volume;\n  };\n  const cleanup = () => __awaiter(this, void 0, void 0, function* () {\n    yield audioContext.close();\n    if (opts.cloneTrack) {\n      streamTrack.stop();\n    }\n  });\n  return {\n    calculateVolume,\n    analyser,\n    cleanup\n  };\n}\nfunction isAudioCodec(maybeCodec) {\n  return audioCodecs.includes(maybeCodec);\n}\nfunction isVideoCodec(maybeCodec) {\n  return videoCodecs.includes(maybeCodec);\n}\nfunction unwrapConstraint(constraint) {\n  if (typeof constraint === 'string' || typeof constraint === 'number') {\n    return constraint;\n  }\n  if (Array.isArray(constraint)) {\n    return constraint[0];\n  }\n  if (constraint.exact !== undefined) {\n    if (Array.isArray(constraint.exact)) {\n      return constraint.exact[0];\n    }\n    return constraint.exact;\n  }\n  if (constraint.ideal !== undefined) {\n    if (Array.isArray(constraint.ideal)) {\n      return constraint.ideal[0];\n    }\n    return constraint.ideal;\n  }\n  throw Error('could not unwrap constraint');\n}\nfunction toWebsocketUrl(url) {\n  if (url.startsWith('http')) {\n    return url.replace(/^(http)/, 'ws');\n  }\n  return url;\n}\nfunction toHttpUrl(url) {\n  if (url.startsWith('ws')) {\n    return url.replace(/^(ws)/, 'http');\n  }\n  return url;\n}\nfunction extractTranscriptionSegments(transcription, firstReceivedTimesMap) {\n  return transcription.segments.map(_ref => {\n    let id = _ref.id,\n      text = _ref.text,\n      language = _ref.language,\n      startTime = _ref.startTime,\n      endTime = _ref.endTime,\n      final = _ref.final;\n    var _a;\n    const firstReceivedTime = (_a = firstReceivedTimesMap.get(id)) !== null && _a !== void 0 ? _a : Date.now();\n    const lastReceivedTime = Date.now();\n    if (final) {\n      firstReceivedTimesMap.delete(id);\n    } else {\n      firstReceivedTimesMap.set(id, firstReceivedTime);\n    }\n    return {\n      id,\n      text,\n      startTime: Number.parseInt(startTime.toString()),\n      endTime: Number.parseInt(endTime.toString()),\n      final,\n      language,\n      firstReceivedTime,\n      lastReceivedTime\n    };\n  });\n}\nfunction extractChatMessage(msg) {\n  const id = msg.id,\n    timestamp = msg.timestamp,\n    message = msg.message,\n    editTimestamp = msg.editTimestamp;\n  return {\n    id,\n    timestamp: Number.parseInt(timestamp.toString()),\n    editTimestamp: editTimestamp ? Number.parseInt(editTimestamp.toString()) : undefined,\n    message\n  };\n}\nfunction getDisconnectReasonFromConnectionError(e) {\n  switch (e.reason) {\n    case ConnectionErrorReason.LeaveRequest:\n      return e.context;\n    case ConnectionErrorReason.Cancelled:\n      return DisconnectReason.CLIENT_INITIATED;\n    case ConnectionErrorReason.NotAllowed:\n      return DisconnectReason.USER_REJECTED;\n    case ConnectionErrorReason.ServerUnreachable:\n      return DisconnectReason.JOIN_FAILURE;\n    default:\n      return DisconnectReason.UNKNOWN_REASON;\n  }\n}\n/** convert bigints to numbers preserving undefined values */\nfunction bigIntToNumber(value) {\n  return value !== undefined ? Number(value) : undefined;\n}\n/** convert numbers to bigints preserving undefined values */\nfunction numberToBigInt(value) {\n  return value !== undefined ? BigInt(value) : undefined;\n}\nfunction isLocalTrack(track) {\n  return !!track && !(track instanceof MediaStreamTrack) && track.isLocal;\n}\nfunction isAudioTrack(track) {\n  return !!track && track.kind == Track.Kind.Audio;\n}\nfunction isVideoTrack(track) {\n  return !!track && track.kind == Track.Kind.Video;\n}\nfunction isLocalVideoTrack(track) {\n  return isLocalTrack(track) && isVideoTrack(track);\n}\nfunction isLocalAudioTrack(track) {\n  return isLocalTrack(track) && isAudioTrack(track);\n}\nfunction isRemoteTrack(track) {\n  return !!track && !track.isLocal;\n}\nfunction isRemotePub(pub) {\n  return !!pub && !pub.isLocal;\n}\nfunction isRemoteVideoTrack(track) {\n  return isRemoteTrack(track) && isVideoTrack(track);\n}\nfunction isLocalParticipant(p) {\n  return p.isLocal;\n}\nfunction isRemoteParticipant(p) {\n  return !p.isLocal;\n}\nfunction splitUtf8(s, n) {\n  // adapted from https://stackoverflow.com/a/6043797\n  const result = [];\n  let encoded = new TextEncoder().encode(s);\n  while (encoded.length > n) {\n    let k = n;\n    while (k > 0) {\n      const byte = encoded[k];\n      if (byte !== undefined && (byte & 0xc0) !== 0x80) {\n        break;\n      }\n      k--;\n    }\n    result.push(encoded.slice(0, k));\n    encoded = encoded.slice(k);\n  }\n  if (encoded.length > 0) {\n    result.push(encoded);\n  }\n  return result;\n}\nfunction extractMaxAgeFromRequestHeaders(headers) {\n  var _a;\n  const cacheControl = headers.get('Cache-Control');\n  if (cacheControl) {\n    const maxAge = (_a = cacheControl.match(/(?:^|[,\\s])max-age=(\\d+)/)) === null || _a === void 0 ? void 0 : _a[1];\n    if (maxAge) {\n      return parseInt(maxAge, 10);\n    }\n  }\n  return undefined;\n}\nfunction isCompressionStreamSupported() {\n  return typeof CompressionStream !== 'undefined';\n}\nfunction isPublisherOfferWithJoinSupported() {\n  // we have connectivity issue about publisher offer with join on firefox #1919\n  return isCompressionStreamSupported() && !isFireFox();\n}function createRtcUrl(url, searchParams) {\n  let useV0Path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  const v0Url = createV0RtcUrl(url, searchParams);\n  if (useV0Path) {\n    return v0Url;\n  } else {\n    return appendUrlPath(v0Url, 'v1');\n  }\n}\nfunction createV0RtcUrl(url, searchParams) {\n  const urlObj = new URL(toWebsocketUrl(url));\n  searchParams.forEach((value, key) => {\n    urlObj.searchParams.set(key, value);\n  });\n  return appendUrlPath(urlObj, 'rtc');\n}\nfunction createValidateUrl(rtcWsUrl) {\n  const urlObj = new URL(toHttpUrl(rtcWsUrl));\n  return appendUrlPath(urlObj, 'validate');\n}\nfunction ensureTrailingSlash(path) {\n  return path.endsWith('/') ? path : \"\".concat(path, \"/\");\n}\nfunction appendUrlPath(urlObj, path) {\n  urlObj.pathname = \"\".concat(ensureTrailingSlash(urlObj.pathname)).concat(path);\n  return urlObj;\n}\nfunction parseSignalResponse(value) {\n  if (typeof value === 'string') {\n    return SignalResponse.fromJson(JSON.parse(value), {\n      ignoreUnknownFields: true\n    });\n  } else if (value instanceof ArrayBuffer) {\n    return SignalResponse.fromBinary(new Uint8Array(value));\n  }\n  throw new Error(\"could not decode websocket message: \".concat(typeof value));\n}\nfunction getAbortReasonAsString(signal) {\n  let defaultMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Unknown reason';\n  if (!(signal instanceof AbortSignal)) {\n    return defaultMessage;\n  }\n  const reason = signal.reason;\n  switch (typeof reason) {\n    case 'string':\n      return reason;\n    case 'object':\n      return reason instanceof Error ? reason.message : defaultMessage;\n    default:\n      return 'toString' in reason ? reason.toString() : defaultMessage;\n  }\n}const ENCRYPTION_ALGORITHM = 'AES-GCM';\n// How many consecutive frames can fail decrypting before a particular key gets marked as invalid\nconst DECRYPTION_FAILURE_TOLERANCE = 10;\n// flag set to indicate that e2ee has been setup for sender/receiver;\nconst E2EE_FLAG = 'lk_e2ee';\nconst SALT = 'LKFrameEncryptionKey';\nconst KEY_PROVIDER_DEFAULTS = {\n  sharedKey: false,\n  ratchetSalt: SALT,\n  ratchetWindowSize: 8,\n  failureTolerance: DECRYPTION_FAILURE_TOLERANCE,\n  keyringSize: 16,\n  keySize: 128\n};var KeyProviderEvent;\n(function (KeyProviderEvent) {\n  KeyProviderEvent[\"SetKey\"] = \"setKey\";\n  /** Event for requesting to ratchet the key used to encrypt the stream */\n  KeyProviderEvent[\"RatchetRequest\"] = \"ratchetRequest\";\n  /** Emitted when a key is ratcheted. Could be after auto-ratcheting on decryption failure or\n   *  following a `RatchetRequest`, will contain the ratcheted key material */\n  KeyProviderEvent[\"KeyRatcheted\"] = \"keyRatcheted\";\n})(KeyProviderEvent || (KeyProviderEvent = {}));\nvar KeyHandlerEvent;\n(function (KeyHandlerEvent) {\n  /** Emitted when a key has been ratcheted. Is emitted when any key has been ratcheted\n   * i.e. when the FrameCryptor tried to ratchet when decryption is failing  */\n  KeyHandlerEvent[\"KeyRatcheted\"] = \"keyRatcheted\";\n})(KeyHandlerEvent || (KeyHandlerEvent = {}));\nvar EncryptionEvent;\n(function (EncryptionEvent) {\n  EncryptionEvent[\"ParticipantEncryptionStatusChanged\"] = \"participantEncryptionStatusChanged\";\n  EncryptionEvent[\"EncryptionError\"] = \"encryptionError\";\n})(EncryptionEvent || (EncryptionEvent = {}));\nvar CryptorEvent;\n(function (CryptorEvent) {\n  CryptorEvent[\"Error\"] = \"cryptorError\";\n})(CryptorEvent || (CryptorEvent = {}));function isE2EESupported() {\n  return isInsertableStreamSupported() || isScriptTransformSupported();\n}\nfunction isScriptTransformSupported() {\n  // @ts-ignore\n  return typeof window !== 'undefined' && typeof window.RTCRtpScriptTransform !== 'undefined';\n}\nfunction isInsertableStreamSupported() {\n  return typeof window !== 'undefined' && typeof window.RTCRtpSender !== 'undefined' &&\n  // @ts-ignore\n  typeof window.RTCRtpSender.prototype.createEncodedStreams !== 'undefined';\n}\nfunction isVideoFrame(frame) {\n  return 'type' in frame;\n}\nfunction importKey(keyBytes_1) {\n  return __awaiter(this, arguments, void 0, function (keyBytes) {\n    let algorithm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      name: ENCRYPTION_ALGORITHM\n    };\n    let usage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'encrypt';\n    return function* () {\n      // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey\n      return crypto.subtle.importKey('raw', keyBytes, algorithm, false, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt']);\n    }();\n  });\n}\nfunction createKeyMaterialFromString(password) {\n  return __awaiter(this, void 0, void 0, function* () {\n    let enc = new TextEncoder();\n    const keyMaterial = yield crypto.subtle.importKey('raw', enc.encode(password), {\n      name: 'PBKDF2'\n    }, false, ['deriveBits', 'deriveKey']);\n    return keyMaterial;\n  });\n}\nfunction createKeyMaterialFromBuffer(cryptoBuffer) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const keyMaterial = yield crypto.subtle.importKey('raw', cryptoBuffer, 'HKDF', false, ['deriveBits', 'deriveKey']);\n    return keyMaterial;\n  });\n}\nfunction getAlgoOptions(algorithmName, salt) {\n  const textEncoder = new TextEncoder();\n  const encodedSalt = textEncoder.encode(salt);\n  switch (algorithmName) {\n    case 'HKDF':\n      return {\n        name: 'HKDF',\n        salt: encodedSalt,\n        hash: 'SHA-256',\n        info: new ArrayBuffer(128)\n      };\n    case 'PBKDF2':\n      {\n        return {\n          name: 'PBKDF2',\n          salt: encodedSalt,\n          hash: 'SHA-256',\n          iterations: 100000\n        };\n      }\n    default:\n      throw new Error(\"algorithm \".concat(algorithmName, \" is currently unsupported\"));\n  }\n}\n/**\n * Derives a set of keys from the master key.\n * See https://tools.ietf.org/html/draft-omara-sframe-00#section-4.3.1\n */\nfunction deriveKeys(material, options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const algorithmOptions = getAlgoOptions(material.algorithm.name, options.ratchetSalt);\n    // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#HKDF\n    // https://developer.mozilla.org/en-US/docs/Web/API/HkdfParams\n    const encryptionKey = yield crypto.subtle.deriveKey(algorithmOptions, material, {\n      name: ENCRYPTION_ALGORITHM,\n      length: options.keySize\n    }, false, ['encrypt', 'decrypt']);\n    return {\n      material,\n      encryptionKey\n    };\n  });\n}\nfunction createE2EEKey() {\n  return window.crypto.getRandomValues(new Uint8Array(32));\n}\n/**\n * Ratchets a key. See\n * https://tools.ietf.org/html/draft-omara-sframe-00#section-4.3.5.1\n */\nfunction ratchet(material, salt) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const algorithmOptions = getAlgoOptions(material.algorithm.name, salt);\n    // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveBits\n    return crypto.subtle.deriveBits(algorithmOptions, material, 256);\n  });\n}\nfunction needsRbspUnescaping(frameData) {\n  for (var i = 0; i < frameData.length - 3; i++) {\n    if (frameData[i] == 0 && frameData[i + 1] == 0 && frameData[i + 2] == 3) return true;\n  }\n  return false;\n}\nfunction parseRbsp(stream) {\n  const dataOut = [];\n  var length = stream.length;\n  for (var i = 0; i < stream.length;) {\n    // Be careful about over/underflow here. byte_length_ - 3 can underflow, and\n    // i + 3 can overflow, but byte_length_ - i can't, because i < byte_length_\n    // above, and that expression will produce the number of bytes left in\n    // the stream including the byte at i.\n    if (length - i >= 3 && !stream[i] && !stream[i + 1] && stream[i + 2] == 3) {\n      // Two rbsp bytes.\n      dataOut.push(stream[i++]);\n      dataOut.push(stream[i++]);\n      // Skip the emulation byte.\n      i++;\n    } else {\n      // Single rbsp byte.\n      dataOut.push(stream[i++]);\n    }\n  }\n  return new Uint8Array(dataOut);\n}\nconst kZerosInStartSequence = 2;\nconst kEmulationByte = 3;\nfunction writeRbsp(data_in) {\n  const dataOut = [];\n  var numConsecutiveZeros = 0;\n  for (var i = 0; i < data_in.length; ++i) {\n    var byte = data_in[i];\n    if (byte <= kEmulationByte && numConsecutiveZeros >= kZerosInStartSequence) {\n      // Need to escape.\n      dataOut.push(kEmulationByte);\n      numConsecutiveZeros = 0;\n    }\n    dataOut.push(byte);\n    if (byte == 0) {\n      ++numConsecutiveZeros;\n    } else {\n      numConsecutiveZeros = 0;\n    }\n  }\n  return new Uint8Array(dataOut);\n}\nfunction asEncryptablePacket(packet) {\n  var _a, _b, _c, _d, _e;\n  if (((_a = packet.value) === null || _a === void 0 ? void 0 : _a.case) !== 'sipDtmf' && ((_b = packet.value) === null || _b === void 0 ? void 0 : _b.case) !== 'metrics' && ((_c = packet.value) === null || _c === void 0 ? void 0 : _c.case) !== 'speaker' && ((_d = packet.value) === null || _d === void 0 ? void 0 : _d.case) !== 'transcription' && ((_e = packet.value) === null || _e === void 0 ? void 0 : _e.case) !== 'encryptedPacket') {\n    return new EncryptedPacketPayload({\n      value: packet.value\n    });\n  }\n  return undefined;\n}/**\n * @experimental\n */\nclass BaseKeyProvider extends eventsExports.EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    super();\n    this.latestManuallySetKeyIndex = 0;\n    /**\n     * Callback being invoked after a key has been ratcheted.\n     * Can happen when:\n     * - A decryption failure occurs and the key is auto-ratcheted\n     * - A ratchet request is sent (see {@link ratchetKey()})\n     * @param ratchetResult Contains the ratcheted chain key (exportable to other participants) and the derived new key material.\n     * @param participantId\n     * @param keyIndex\n     */\n    this.onKeyRatcheted = (ratchetResult, participantId, keyIndex) => {\n      livekitLogger.debug('key ratcheted event received', {\n        ratchetResult,\n        participantId,\n        keyIndex\n      });\n    };\n    this.keyInfoMap = new Map();\n    this.options = Object.assign(Object.assign({}, KEY_PROVIDER_DEFAULTS), options);\n    this.on(KeyProviderEvent.KeyRatcheted, this.onKeyRatcheted);\n  }\n  /**\n   * callback to invoke once a key has been set for a participant\n   * @param key\n   * @param participantIdentity\n   * @param keyIndex\n   */\n  onSetEncryptionKey(key, participantIdentity, keyIndex) {\n    const keyInfo = {\n      key,\n      participantIdentity,\n      keyIndex\n    };\n    if (!this.options.sharedKey && !participantIdentity) {\n      throw new Error('participant identity needs to be passed for encryption key if sharedKey option is false');\n    }\n    this.keyInfoMap.set(\"\".concat(participantIdentity !== null && participantIdentity !== void 0 ? participantIdentity : 'shared', \"-\").concat(keyIndex !== null && keyIndex !== void 0 ? keyIndex : 0), keyInfo);\n    if (keyIndex !== undefined) {\n      this.latestManuallySetKeyIndex = keyIndex;\n    }\n    this.emit(KeyProviderEvent.SetKey, keyInfo, keyIndex !== undefined);\n  }\n  getKeys() {\n    return Array.from(this.keyInfoMap.values());\n  }\n  getLatestManuallySetKeyIndex() {\n    return this.latestManuallySetKeyIndex;\n  }\n  getOptions() {\n    return this.options;\n  }\n  ratchetKey(participantIdentity, keyIndex) {\n    this.emit(KeyProviderEvent.RatchetRequest, participantIdentity, keyIndex);\n  }\n}\n/**\n * A basic KeyProvider implementation intended for a single shared\n * passphrase between all participants\n * @experimental\n */\nclass ExternalE2EEKeyProvider extends BaseKeyProvider {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const opts = Object.assign(Object.assign({}, options), {\n      sharedKey: true,\n      // for a shared key provider failing to decrypt for a specific participant\n      // should not mark the key as invalid, so we accept wrong keys forever\n      // and won't try to auto-ratchet\n      ratchetWindowSize: 0,\n      failureTolerance: -1\n    });\n    super(opts);\n  }\n  /**\n   * Accepts a passphrase that's used to create the crypto keys.\n   * When passing in a string, PBKDF2 is used. (recommended for maximum compatibility across SDKs)\n   * When passing in an ArrayBuffer of cryptographically random numbers, HKDF is used.\n   *\n   * Note: Not all client SDKS support HKDF.\n   * @param key\n   */\n  setKey(key) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const derivedKey = typeof key === 'string' ? yield createKeyMaterialFromString(key) : yield createKeyMaterialFromBuffer(key);\n      this.onSetEncryptionKey(derivedKey);\n    });\n  }\n}var CryptorErrorReason;\n(function (CryptorErrorReason) {\n  CryptorErrorReason[CryptorErrorReason[\"InvalidKey\"] = 0] = \"InvalidKey\";\n  CryptorErrorReason[CryptorErrorReason[\"MissingKey\"] = 1] = \"MissingKey\";\n  CryptorErrorReason[CryptorErrorReason[\"InternalError\"] = 2] = \"InternalError\";\n})(CryptorErrorReason || (CryptorErrorReason = {}));\nclass CryptorError extends LivekitError {\n  constructor(message) {\n    let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CryptorErrorReason.InternalError;\n    let participantIdentity = arguments.length > 2 ? arguments[2] : undefined;\n    super(40, message);\n    this.reason = reason;\n    this.participantIdentity = participantIdentity;\n  }\n}function shouldUseFrameMetadataScriptTransform() {\n  return isScriptTransformSupportedForWorker();\n}\nfunction isFrameMetadataSupported(options) {\n  return !!(options === null || options === void 0 ? void 0 : options.worker) && (isInsertableStreamSupported() || shouldUseFrameMetadataScriptTransform());\n}\nfunction hasFrameMetadataPublishOptions(options) {\n  return !!((options === null || options === void 0 ? void 0 : options.timestamp) || (options === null || options === void 0 ? void 0 : options.frameId));\n}\nfunction getFrameMetadataFeatures(options) {\n  const features = [];\n  if (options === null || options === void 0 ? void 0 : options.timestamp) {\n    features.push(PacketTrailerFeature.PTF_USER_TIMESTAMP);\n  }\n  if (options === null || options === void 0 ? void 0 : options.frameId) {\n    features.push(PacketTrailerFeature.PTF_FRAME_ID);\n  }\n  return features;\n}\nfunction getFrameMetadataPublishOptions(features) {\n  if (!features || features.length === 0) {\n    return undefined;\n  }\n  const options = {};\n  if (features.includes(PacketTrailerFeature.PTF_USER_TIMESTAMP)) {\n    options.timestamp = true;\n  }\n  if (features.includes(PacketTrailerFeature.PTF_FRAME_ID)) {\n    options.frameId = true;\n  }\n  return options.timestamp || options.frameId ? options : undefined;\n}/**\n * Originally from ts-debounce (https://github.com/chodorowicz/ts-debounce)\n * with the following license:\n *\n * MIT License\n *\n * Copyright (c) 2017 Jakub Chodorowicz\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * Modified to use CriticalTimers for reliable timer execution.\n */\n/* eslint-disable @typescript-eslint/no-this-alias, @typescript-eslint/no-unused-expressions, @typescript-eslint/no-shadow */\nfunction debounce(func) {\n  let waitMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;\n  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var _a, _b;\n  let timeoutId;\n  const isImmediate = (_a = options.isImmediate) !== null && _a !== void 0 ? _a : false;\n  const callback = (_b = options.callback) !== null && _b !== void 0 ? _b : false;\n  const maxWait = options.maxWait;\n  let lastInvokeTime = Date.now();\n  let promises = [];\n  function nextInvokeTimeout() {\n    if (maxWait !== undefined) {\n      const timeSinceLastInvocation = Date.now() - lastInvokeTime;\n      if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\n        return maxWait - timeSinceLastInvocation;\n      }\n    }\n    return waitMilliseconds;\n  }\n  const debouncedFunction = function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    const context = this;\n    return new Promise((resolve, reject) => {\n      const invokeFunction = function () {\n        timeoutId = undefined;\n        lastInvokeTime = Date.now();\n        if (!isImmediate) {\n          const result = func.apply(context, args);\n          callback && callback(result);\n          // biome-ignore lint/suspicious/useIterableCallbackReturn: vendored code\n          promises.forEach(_ref => {\n            let resolve = _ref.resolve;\n            return resolve(result);\n          });\n          promises = [];\n        }\n      };\n      const shouldCallNow = isImmediate && timeoutId === undefined;\n      if (timeoutId !== undefined) {\n        CriticalTimers.clearTimeout(timeoutId);\n      }\n      timeoutId = CriticalTimers.setTimeout(invokeFunction, nextInvokeTimeout());\n      if (shouldCallNow) {\n        const result = func.apply(context, args);\n        callback && callback(result);\n        return resolve(result);\n      }\n      promises.push({\n        resolve,\n        reject\n      });\n    });\n  };\n  debouncedFunction.cancel = function (reason) {\n    if (timeoutId !== undefined) {\n      CriticalTimers.clearTimeout(timeoutId);\n    }\n    // biome-ignore lint/suspicious/useIterableCallbackReturn: vendored code\n    promises.forEach(_ref2 => {\n      let reject = _ref2.reject;\n      return reject(reason);\n    });\n    promises = [];\n  };\n  return debouncedFunction;\n}const monitorFrequency = 2000;\nfunction computeBitrate(currentStats, prevStats) {\n  if (!prevStats) {\n    return 0;\n  }\n  let bytesNow;\n  let bytesPrev;\n  if ('bytesReceived' in currentStats) {\n    bytesNow = currentStats.bytesReceived;\n    bytesPrev = prevStats.bytesReceived;\n  } else if ('bytesSent' in currentStats) {\n    bytesNow = currentStats.bytesSent;\n    bytesPrev = prevStats.bytesSent;\n  }\n  if (bytesNow === undefined || bytesPrev === undefined || currentStats.timestamp === undefined || prevStats.timestamp === undefined) {\n    return 0;\n  }\n  return (bytesNow - bytesPrev) * 8 * 1000 / (currentStats.timestamp - prevStats.timestamp);\n}class RemoteTrack extends Track {\n  constructor(mediaTrack, sid, kind, receiver, loggerOptions) {\n    super(mediaTrack, kind, loggerOptions);\n    this.sid = sid;\n    this.receiver = receiver;\n  }\n  get isLocal() {\n    return false;\n  }\n  /** @internal */\n  setMuted(muted) {\n    if (this.isMuted !== muted) {\n      this.isMuted = muted;\n      this._mediaStreamTrack.enabled = !muted;\n      this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n    }\n  }\n  /** @internal */\n  setMediaStream(stream) {\n    // this is needed to determine when the track is finished\n    this.mediaStream = stream;\n    const onRemoveTrack = event => {\n      if (event.track === this._mediaStreamTrack) {\n        stream.removeEventListener('removetrack', onRemoveTrack);\n        if (this.receiver && 'playoutDelayHint' in this.receiver) {\n          this.receiver.playoutDelayHint = undefined;\n        }\n        this.receiver = undefined;\n        this._currentBitrate = 0;\n        this.emit(TrackEvent.Ended, this);\n      }\n    };\n    stream.addEventListener('removetrack', onRemoveTrack);\n  }\n  start() {\n    this.startMonitor();\n    // use `enabled` of track to enable re-use of transceiver\n    super.enable();\n  }\n  stop() {\n    this.stopMonitor();\n    // use `enabled` of track to enable re-use of transceiver\n    super.disable();\n  }\n  /**\n   * Gets the RTCStatsReport for the RemoteTrack's underlying RTCRtpReceiver\n   * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport\n   *\n   * @returns Promise<RTCStatsReport> | undefined\n   */\n  getRTCStatsReport() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return;\n      }\n      const statsReport = yield this.receiver.getStats();\n      return statsReport;\n    });\n  }\n  /**\n   * Allows to set a playout delay (in seconds) for this track.\n   * A higher value allows for more buffering of the track in the browser\n   * and will result in a delay of media being played back of `delayInSeconds`\n   */\n  setPlayoutDelay(delayInSeconds) {\n    if (this.receiver) {\n      if ('playoutDelayHint' in this.receiver) {\n        this.receiver.playoutDelayHint = delayInSeconds;\n      } else {\n        this.log.warn('Playout delay not supported in this browser');\n      }\n    } else {\n      this.log.warn('Cannot set playout delay, track already ended');\n    }\n  }\n  /**\n   * Returns the current playout delay (in seconds) of this track.\n   */\n  getPlayoutDelay() {\n    if (this.receiver) {\n      if ('playoutDelayHint' in this.receiver) {\n        return this.receiver.playoutDelayHint;\n      } else {\n        this.log.warn('Playout delay not supported in this browser');\n      }\n    } else {\n      this.log.warn('Cannot get playout delay, track already ended');\n    }\n    return 0;\n  }\n  /* @internal */\n  startMonitor() {\n    if (!this.monitorInterval) {\n      this.monitorInterval = setInterval(() => this.monitorReceiver(), monitorFrequency);\n    }\n    if (supportsSynchronizationSources()) {\n      this.registerTimeSyncUpdate();\n    }\n  }\n  registerTimeSyncUpdate() {\n    const loop = () => {\n      var _a;\n      this.timeSyncHandle = requestAnimationFrame(() => loop());\n      const sources = (_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getSynchronizationSources()[0];\n      if (sources) {\n        const timestamp = sources.timestamp,\n          rtpTimestamp = sources.rtpTimestamp;\n        if (rtpTimestamp && this.rtpTimestamp !== rtpTimestamp) {\n          this.emit(TrackEvent.TimeSyncUpdate, {\n            timestamp,\n            rtpTimestamp\n          });\n          this.rtpTimestamp = rtpTimestamp;\n        }\n      }\n    };\n    loop();\n  }\n}const REACTION_DELAY = 100;\nclass RemoteVideoTrack extends RemoteTrack {\n  constructor(mediaTrack, sid, receiver, adaptiveStreamSettings, loggerOptions) {\n    super(mediaTrack, sid, Track.Kind.Video, receiver, loggerOptions);\n    this.elementInfos = [];\n    this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver) {\n        this._currentBitrate = 0;\n        return;\n      }\n      const stats = yield this.getReceiverStats();\n      if (stats && this.prevStats && this.receiver) {\n        this._currentBitrate = computeBitrate(stats, this.prevStats);\n      }\n      this.prevStats = stats;\n    });\n    this.debouncedHandleResize = debounce(() => {\n      this.updateDimensions();\n    }, REACTION_DELAY);\n    this.adaptiveStreamSettings = adaptiveStreamSettings;\n  }\n  get isAdaptiveStream() {\n    return this.adaptiveStreamSettings !== undefined;\n  }\n  /**\n   * Look up frame-level metadata for a given RTP timestamp.\n   * Use with the `TrackEvent.TimeSyncUpdate` event to correlate displayed frames\n   * with their capture-time metadata.\n   *\n   * Requires the room to be configured with the `frameMetadata` worker option\n   * and the publishing track to have frame metadata features enabled.\n   *\n   */\n  lookupFrameMetadata(_ref) {\n    let rtpTimestamp = _ref.rtpTimestamp;\n    var _a;\n    return (_a = this.frameMetadataExtractor) === null || _a === void 0 ? void 0 : _a.lookupMetadata(rtpTimestamp);\n  }\n  setStreamState(value) {\n    super.setStreamState(value);\n    this.log.debug('setStreamState', value);\n    if (this.isAdaptiveStream && value === Track.StreamState.Active) {\n      // update visibility for adaptive stream tracks when stream state received from server is active\n      // this is needed to ensure the track is stopped when there's no element attached to it at all\n      this.updateVisibility();\n    }\n  }\n  /**\n   * Note: When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start\n   */\n  get mediaStreamTrack() {\n    return this._mediaStreamTrack;\n  }\n  /** @internal */\n  setMuted(muted) {\n    super.setMuted(muted);\n    this.attachedElements.forEach(element => {\n      // detach or attach\n      if (muted) {\n        detachTrack(this._mediaStreamTrack, element);\n      } else {\n        attachToElement(this._mediaStreamTrack, element);\n      }\n    });\n  }\n  attach(element) {\n    if (!element) {\n      element = super.attach();\n    } else {\n      super.attach(element);\n    }\n    // It's possible attach is called multiple times on an element. When that's\n    // the case, we'd want to avoid adding duplicate elementInfos\n    if (this.adaptiveStreamSettings && this.elementInfos.find(info => info.element === element) === undefined) {\n      const elementInfo = new HTMLElementInfo(element);\n      this.observeElementInfo(elementInfo);\n    }\n    return element;\n  }\n  /**\n   * Observe an ElementInfo for changes when adaptive streaming.\n   * @param elementInfo\n   * @internal\n   */\n  observeElementInfo(elementInfo) {\n    if (this.adaptiveStreamSettings && this.elementInfos.find(info => info === elementInfo) === undefined) {\n      elementInfo.handleResize = () => {\n        this.debouncedHandleResize();\n      };\n      elementInfo.handleVisibilityChanged = () => {\n        this.updateVisibility();\n      };\n      this.elementInfos.push(elementInfo);\n      elementInfo.observe();\n      // trigger the first resize update cycle\n      // if the tab is backgrounded, the initial resize event does not fire until\n      // the tab comes into focus for the first time.\n      this.debouncedHandleResize();\n      this.updateVisibility();\n    } else {\n      this.log.warn('visibility resize observer not triggered', this.logContext);\n    }\n  }\n  /**\n   * Stop observing an ElementInfo for changes.\n   * @param elementInfo\n   * @internal\n   */\n  stopObservingElementInfo(elementInfo) {\n    if (!this.isAdaptiveStream) {\n      this.log.warn('stopObservingElementInfo ignored', this.logContext);\n      return;\n    }\n    const stopElementInfos = this.elementInfos.filter(info => info === elementInfo);\n    for (const info of stopElementInfos) {\n      info.stopObserving();\n    }\n    this.elementInfos = this.elementInfos.filter(info => info !== elementInfo);\n    this.updateVisibility();\n    this.debouncedHandleResize();\n  }\n  detach(element) {\n    if (element) {\n      this.stopObservingElement(element);\n      return super.detach(element);\n    }\n    const detachedElements = super.detach();\n    for (const e of detachedElements) {\n      this.stopObservingElement(e);\n    }\n    return detachedElements;\n  }\n  /** @internal */\n  getDecoderImplementation() {\n    var _a;\n    return (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.decoderImplementation;\n  }\n  getReceiverStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver || !this.receiver.getStats) {\n        return;\n      }\n      const stats = yield this.receiver.getStats();\n      let receiverStats;\n      let codecID = '';\n      let codecs = new Map();\n      stats.forEach(v => {\n        if (v.type === 'inbound-rtp') {\n          codecID = v.codecId;\n          receiverStats = {\n            type: 'video',\n            streamId: v.id,\n            framesDecoded: v.framesDecoded,\n            framesDropped: v.framesDropped,\n            framesReceived: v.framesReceived,\n            packetsReceived: v.packetsReceived,\n            packetsLost: v.packetsLost,\n            frameWidth: v.frameWidth,\n            frameHeight: v.frameHeight,\n            pliCount: v.pliCount,\n            firCount: v.firCount,\n            nackCount: v.nackCount,\n            jitter: v.jitter,\n            timestamp: v.timestamp,\n            bytesReceived: v.bytesReceived,\n            decoderImplementation: v.decoderImplementation\n          };\n        } else if (v.type === 'codec') {\n          codecs.set(v.id, v);\n        }\n      });\n      if (receiverStats && codecID !== '' && codecs.get(codecID)) {\n        receiverStats.mimeType = codecs.get(codecID).mimeType;\n      }\n      return receiverStats;\n    });\n  }\n  stopObservingElement(element) {\n    const stopElementInfos = this.elementInfos.filter(info => info.element === element);\n    for (const info of stopElementInfos) {\n      this.stopObservingElementInfo(info);\n    }\n  }\n  handleAppVisibilityChanged() {\n    const _super = Object.create(null, {\n      handleAppVisibilityChanged: {\n        get: () => super.handleAppVisibilityChanged\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      yield _super.handleAppVisibilityChanged.call(this);\n      if (!this.isAdaptiveStream) return;\n      this.updateVisibility();\n    });\n  }\n  updateVisibility(forceEmit) {\n    var _a, _b;\n    const lastVisibilityChange = this.elementInfos.reduce((prev, info) => Math.max(prev, info.visibilityChangedAt || 0), 0);\n    const backgroundPause = ((_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pauseVideoInBackground) !== null && _b !== void 0 ? _b : true // default to true\n    ) ? this.isInBackground : false;\n    const isPiPMode = this.elementInfos.some(info => info.pictureInPicture);\n    const isVisible = this.elementInfos.some(info => info.visible) && !backgroundPause || isPiPMode;\n    if (this.lastVisible === isVisible && !forceEmit) {\n      return;\n    }\n    if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {\n      // delay hidden events\n      CriticalTimers.setTimeout(() => {\n        this.updateVisibility();\n      }, REACTION_DELAY);\n      return;\n    }\n    this.lastVisible = isVisible;\n    this.emit(TrackEvent.VisibilityChanged, isVisible, this);\n  }\n  updateDimensions() {\n    var _a, _b;\n    let maxWidth = 0;\n    let maxHeight = 0;\n    const pixelDensity = this.getPixelDensity();\n    for (const info of this.elementInfos) {\n      const currentElementWidth = info.width() * pixelDensity;\n      const currentElementHeight = info.height() * pixelDensity;\n      if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {\n        maxWidth = currentElementWidth;\n        maxHeight = currentElementHeight;\n      }\n    }\n    if (((_a = this.lastDimensions) === null || _a === void 0 ? void 0 : _a.width) === maxWidth && ((_b = this.lastDimensions) === null || _b === void 0 ? void 0 : _b.height) === maxHeight) {\n      return;\n    }\n    this.lastDimensions = {\n      width: maxWidth,\n      height: maxHeight\n    };\n    this.emit(TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);\n  }\n  getPixelDensity() {\n    var _a;\n    const pixelDensity = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pixelDensity;\n    if (pixelDensity === 'screen') {\n      return getDevicePixelRatio();\n    } else if (!pixelDensity) {\n      // when unset, we'll pick a sane default here.\n      // for higher pixel density devices (mobile phones, etc), we'll use 2\n      // otherwise it defaults to 1\n      const devicePixelRatio = getDevicePixelRatio();\n      if (devicePixelRatio > 2) {\n        return 2;\n      } else {\n        return 1;\n      }\n    }\n    return pixelDensity;\n  }\n}\nclass HTMLElementInfo {\n  get visible() {\n    return this.isPiP || this.isIntersecting;\n  }\n  get pictureInPicture() {\n    return this.isPiP;\n  }\n  constructor(element, visible) {\n    this.onVisibilityChanged = entry => {\n      var _a;\n      const target = entry.target,\n        isIntersecting = entry.isIntersecting;\n      if (target === this.element) {\n        this.isIntersecting = isIntersecting;\n        this.isPiP = isElementInPiP(this.element);\n        this.visibilityChangedAt = Date.now();\n        (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n      }\n    };\n    this.onEnterPiP = () => {\n      var _a, _b;\n      (_b = (_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.addEventListener('pagehide', this.onLeavePiP);\n      // Document PiP: the browser may fire 'enter' before the app has appended its subtree into\n      // documentPictureInPicture.window. Defer so pipWin.document.contains(video) is reliable.\n      queueMicrotask(() => {\n        requestAnimationFrame(() => {\n          var _a;\n          this.isPiP = isElementInPiP(this.element);\n          (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n        });\n      });\n    };\n    this.onLeavePiP = () => {\n      var _a;\n      this.isPiP = isElementInPiP(this.element);\n      (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n    };\n    this.element = element;\n    this.isIntersecting = visible !== null && visible !== void 0 ? visible : isElementInViewport(element);\n    this.isPiP = isWeb() && isElementInPiP(element);\n    this.visibilityChangedAt = 0;\n  }\n  width() {\n    return this.element.clientWidth;\n  }\n  height() {\n    return this.element.clientHeight;\n  }\n  observe() {\n    var _a, _b, _c;\n    // make sure we update the current visible state once we start to observe\n    this.isIntersecting = isElementInViewport(this.element);\n    this.isPiP = isElementInPiP(this.element);\n    this.element.handleResize = () => {\n      var _a;\n      (_a = this.handleResize) === null || _a === void 0 ? void 0 : _a.call(this);\n    };\n    this.element.handleVisibilityChanged = this.onVisibilityChanged;\n    getIntersectionObserver().observe(this.element);\n    getResizeObserver().observe(this.element);\n    this.element.addEventListener('enterpictureinpicture', this.onEnterPiP);\n    this.element.addEventListener('leavepictureinpicture', this.onLeavePiP);\n    (_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.addEventListener('enter', this.onEnterPiP);\n    (_c = (_b = window.documentPictureInPicture) === null || _b === void 0 ? void 0 : _b.window) === null || _c === void 0 ? void 0 : _c.addEventListener('pagehide', this.onLeavePiP);\n  }\n  stopObserving() {\n    var _a, _b, _c, _d, _e;\n    (_a = getIntersectionObserver()) === null || _a === void 0 ? void 0 : _a.unobserve(this.element);\n    (_b = getResizeObserver()) === null || _b === void 0 ? void 0 : _b.unobserve(this.element);\n    this.element.removeEventListener('enterpictureinpicture', this.onEnterPiP);\n    this.element.removeEventListener('leavepictureinpicture', this.onLeavePiP);\n    (_c = window.documentPictureInPicture) === null || _c === void 0 ? void 0 : _c.removeEventListener('enter', this.onEnterPiP);\n    (_e = (_d = window.documentPictureInPicture) === null || _d === void 0 ? void 0 : _d.window) === null || _e === void 0 ? void 0 : _e.removeEventListener('pagehide', this.onLeavePiP);\n  }\n}\nfunction isElementInPiP(el) {\n  var _a, _b;\n  // Simple video PiP\n  if (document.pictureInPictureElement === el) return true;\n  // Document PiP\n  if ((_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.window) return isElementInViewport(el, (_b = window.documentPictureInPicture) === null || _b === void 0 ? void 0 : _b.window);\n  return false;\n}\n// does not account for occlusion by other elements or opacity property\nfunction isElementInViewport(el, win) {\n  const viewportWindow = win || window;\n  let top = el.offsetTop;\n  let left = el.offsetLeft;\n  const width = el.offsetWidth;\n  const height = el.offsetHeight;\n  const _el = el,\n    hidden = _el.hidden;\n  const _getComputedStyle = getComputedStyle(el),\n    display = _getComputedStyle.display;\n  while (el.offsetParent) {\n    el = el.offsetParent;\n    top += el.offsetTop;\n    left += el.offsetLeft;\n  }\n  return top < viewportWindow.pageYOffset + viewportWindow.innerHeight && left < viewportWindow.pageXOffset + viewportWindow.innerWidth && top + height > viewportWindow.pageYOffset && left + width > viewportWindow.pageXOffset && !hidden && display !== 'none';\n}/**\n * @experimental\n */\nclass E2EEManager extends eventsExports.EventEmitter {\n  constructor(options, dcEncryptionEnabled) {\n    super();\n    this.decryptDataRequests = new Map();\n    this.encryptDataRequests = new Map();\n    this.onWorkerMessage = ev => {\n      var _a, _b;\n      const _ev$data = ev.data,\n        kind = _ev$data.kind,\n        data = _ev$data.data;\n      switch (kind) {\n        case 'error':\n          livekitLogger.error(data.error.message);\n          // If error has uuid, it's from an async operation (encrypt/decrypt)\n          // Reject the corresponding future\n          if (data.uuid) {\n            const decryptFuture = this.decryptDataRequests.get(data.uuid);\n            if (decryptFuture === null || decryptFuture === void 0 ? void 0 : decryptFuture.reject) {\n              decryptFuture.reject(data.error);\n              break; // Don't emit general error if it's handled by future\n            }\n            const encryptFuture = this.encryptDataRequests.get(data.uuid);\n            if (encryptFuture === null || encryptFuture === void 0 ? void 0 : encryptFuture.reject) {\n              encryptFuture.reject(data.error);\n              break; // Don't emit general error if it's handled by future\n            }\n          }\n          // Emit general error event for unhandled errors\n          this.emit(EncryptionEvent.EncryptionError, data.error, data.participantIdentity);\n          break;\n        case 'initAck':\n          if (data.enabled) {\n            this.keyProvider.getKeys().forEach(keyInfo => {\n              this.postKey(keyInfo, false);\n            });\n          }\n          break;\n        case 'enable':\n          if (data.enabled) {\n            this.keyProvider.getKeys().forEach(keyInfo => {\n              this.postKey(keyInfo, false);\n            });\n          }\n          if (this.encryptionEnabled !== data.enabled && data.participantIdentity === ((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity)) {\n            this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, data.enabled, this.room.localParticipant);\n            this.encryptionEnabled = data.enabled;\n          } else if (data.participantIdentity) {\n            const participant = (_b = this.room) === null || _b === void 0 ? void 0 : _b.getParticipantByIdentity(data.participantIdentity);\n            if (!participant) {\n              throw TypeError(\"couldn't set encryption status, participant not found\".concat(data.participantIdentity));\n            }\n            this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, data.enabled, participant);\n          }\n          break;\n        case 'ratchetKey':\n          this.keyProvider.emit(KeyProviderEvent.KeyRatcheted, data.ratchetResult, data.participantIdentity, data.keyIndex);\n          break;\n        case 'decryptDataResponse':\n          const decryptFuture = this.decryptDataRequests.get(data.uuid);\n          if (decryptFuture === null || decryptFuture === void 0 ? void 0 : decryptFuture.resolve) {\n            decryptFuture.resolve(data);\n          }\n          break;\n        case 'encryptDataResponse':\n          const encryptFuture = this.encryptDataRequests.get(data.uuid);\n          if (encryptFuture === null || encryptFuture === void 0 ? void 0 : encryptFuture.resolve) {\n            encryptFuture.resolve(data);\n          }\n          break;\n        case 'packetTrailerMetadata':\n          this.handleFrameMetadata(data.trackId, data.rtpTimestamp, data.ssrc, data.metadata);\n          break;\n      }\n    };\n    this.onWorkerError = ev => {\n      livekitLogger.error('e2ee worker encountered an error:', {\n        error: ev.error\n      });\n      this.emit(EncryptionEvent.EncryptionError, ev.error, undefined);\n    };\n    this.keyProvider = options.keyProvider;\n    this.worker = options.worker;\n    this.encryptionEnabled = false;\n    this.dataChannelEncryptionEnabled = dcEncryptionEnabled;\n  }\n  get isEnabled() {\n    return this.encryptionEnabled;\n  }\n  get isDataChannelEncryptionEnabled() {\n    return this.isEnabled && this.dataChannelEncryptionEnabled;\n  }\n  /**\n   * @internal\n   */\n  setup(room) {\n    if (!isE2EESupported()) {\n      throw new DeviceUnsupportedError('tried to setup end-to-end encryption on an unsupported browser');\n    }\n    livekitLogger.info('setting up e2ee');\n    if (room !== this.room) {\n      this.room = room;\n      this.setupEventListeners(room, this.keyProvider);\n      // this.worker = new Worker('');\n      const msg = {\n        kind: 'init',\n        data: {\n          keyProviderOptions: this.keyProvider.getOptions(),\n          loglevel: workerLogger.getLevel()\n        }\n      };\n      if (this.worker) {\n        livekitLogger.info(\"initializing worker\", {\n          worker: this.worker\n        });\n        this.worker.onmessage = this.onWorkerMessage;\n        this.worker.onerror = this.onWorkerError;\n        this.worker.postMessage(msg);\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  setParticipantCryptorEnabled(enabled, participantIdentity) {\n    livekitLogger.debug(\"set e2ee to \".concat(enabled, \" for participant \").concat(participantIdentity));\n    this.postEnable(enabled, participantIdentity);\n  }\n  /**\n   * @internal\n   */\n  setSifTrailer(trailer) {\n    if (!trailer || trailer.length === 0) {\n      livekitLogger.warn(\"ignoring server sent trailer as it's empty\");\n    } else {\n      this.postSifTrailer(trailer);\n    }\n  }\n  handleFrameMetadata(trackId, rtpTimestamp, ssrc, metadata) {\n    if (!this.room) {\n      return;\n    }\n    for (const participant of [this.room.localParticipant, ...this.room.remoteParticipants.values()]) {\n      for (const pub of participant.trackPublications.values()) {\n        if (pub.track && pub.track.mediaStreamID === trackId && pub.track instanceof RemoteVideoTrack && pub.track.frameMetadataExtractor) {\n          pub.track.frameMetadataExtractor.storeMetadata(rtpTimestamp, ssrc, metadata);\n          return;\n        }\n      }\n    }\n  }\n  setupEngine(engine) {\n    engine.on(EngineEvent.RTPVideoMapUpdate, rtpMap => {\n      this.postRTPMap(rtpMap);\n    });\n  }\n  setupEventListeners(room, keyProvider) {\n    room.on(RoomEvent.TrackPublished, (pub, participant) => this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participant.identity));\n    room.on(RoomEvent.ConnectionStateChanged, state => {\n      if (state === ConnectionState.Connected) {\n        room.remoteParticipants.forEach(participant => {\n          participant.trackPublications.forEach(pub => {\n            this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participant.identity);\n          });\n        });\n      }\n    }).on(RoomEvent.TrackUnsubscribed, (track, _, participant) => {\n      var _a;\n      const msg = {\n        kind: 'removeTransform',\n        data: {\n          participantIdentity: participant.identity,\n          trackId: track.mediaStreamID\n        }\n      };\n      (_a = this.worker) === null || _a === void 0 ? void 0 : _a.postMessage(msg);\n    }).on(RoomEvent.TrackSubscribed, (track, pub, participant) => {\n      this.setupE2EEReceiver(track, participant.identity, pub.trackInfo);\n    }).on(RoomEvent.SignalConnected, () => {\n      if (!this.room) {\n        throw new TypeError(\"expected room to be present on signal connect\");\n      }\n      const latestKeyIndex = keyProvider.getLatestManuallySetKeyIndex();\n      keyProvider.getKeys().forEach(keyInfo => {\n        var _a;\n        this.postKey(keyInfo, latestKeyIndex === ((_a = keyInfo.keyIndex) !== null && _a !== void 0 ? _a : 0));\n      });\n      this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled, this.room.localParticipant.identity);\n    });\n    room.localParticipant.on(ParticipantEvent.LocalSenderCreated, (sender, track) => __awaiter(this, void 0, void 0, function* () {\n      this.setupE2EESender(track, sender);\n    }));\n    room.localParticipant.on(ParticipantEvent.LocalTrackPublished, publication => {\n      // Safari doesn't support retrieving payload information on RTCEncodedVideoFrame, so we need to update the codec manually once we have the trackInfo from the server\n      if (!isVideoTrack(publication.track) || !isSafariBased()) {\n        return;\n      }\n      const msg = {\n        kind: 'updateCodec',\n        data: {\n          trackId: publication.track.mediaStreamID,\n          codec: mimeTypeToVideoCodecString(publication.trackInfo.codecs[0].mimeType),\n          participantIdentity: this.room.localParticipant.identity,\n          hasPacketTrailer: false\n        }\n      };\n      this.worker.postMessage(msg);\n    });\n    keyProvider.on(KeyProviderEvent.SetKey, (keyInfo, updateCurrentKeyIndex) => this.postKey(keyInfo, updateCurrentKeyIndex !== null && updateCurrentKeyIndex !== void 0 ? updateCurrentKeyIndex : true)).on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) => this.postRatchetRequest(participantId, keyIndex));\n  }\n  encryptData(data) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.worker) {\n        throw Error('could not encrypt data, worker is missing');\n      }\n      const uuid = crypto.randomUUID();\n      const msg = {\n        kind: 'encryptDataRequest',\n        data: {\n          uuid,\n          payload: data,\n          participantIdentity: this.room.localParticipant.identity\n        }\n      };\n      const future = new Future();\n      future.onFinally = () => {\n        this.encryptDataRequests.delete(uuid);\n      };\n      this.encryptDataRequests.set(uuid, future);\n      this.worker.postMessage(msg);\n      return future.promise;\n    });\n  }\n  handleEncryptedData(payload, iv, participantIdentity, keyIndex) {\n    if (!this.worker) {\n      throw Error('could not handle encrypted data, worker is missing');\n    }\n    const uuid = crypto.randomUUID();\n    const msg = {\n      kind: 'decryptDataRequest',\n      data: {\n        uuid,\n        payload,\n        iv,\n        participantIdentity,\n        keyIndex\n      }\n    };\n    const future = new Future();\n    future.onFinally = () => {\n      this.decryptDataRequests.delete(uuid);\n    };\n    this.decryptDataRequests.set(uuid, future);\n    this.worker.postMessage(msg);\n    return future.promise;\n  }\n  postRatchetRequest(participantIdentity, keyIndex) {\n    if (!this.worker) {\n      throw Error('could not ratchet key, worker is missing');\n    }\n    const msg = {\n      kind: 'ratchetRequest',\n      data: {\n        participantIdentity: participantIdentity,\n        keyIndex\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  postKey(_ref, updateCurrentKeyIndex) {\n    let key = _ref.key,\n      participantIdentity = _ref.participantIdentity,\n      keyIndex = _ref.keyIndex;\n    var _a;\n    if (!this.worker) {\n      throw Error('could not set key, worker is missing');\n    }\n    const msg = {\n      kind: 'setKey',\n      data: {\n        participantIdentity: participantIdentity,\n        isPublisher: participantIdentity === ((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity),\n        key,\n        keyIndex,\n        updateCurrentKeyIndex\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  postEnable(enabled, participantIdentity) {\n    if (this.worker) {\n      const enableMsg = {\n        kind: 'enable',\n        data: {\n          enabled,\n          participantIdentity\n        }\n      };\n      this.worker.postMessage(enableMsg);\n    } else {\n      throw new ReferenceError('failed to enable e2ee, worker is not ready');\n    }\n  }\n  postRTPMap(map) {\n    var _a;\n    if (!this.worker) {\n      throw TypeError('could not post rtp map, worker is missing');\n    }\n    if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity)) {\n      throw TypeError('could not post rtp map, local participant identity is missing');\n    }\n    const msg = {\n      kind: 'setRTPMap',\n      data: {\n        map,\n        participantIdentity: this.room.localParticipant.identity\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  postSifTrailer(trailer) {\n    if (!this.worker) {\n      throw Error('could not post SIF trailer, worker is missing');\n    }\n    const msg = {\n      kind: 'setSifTrailer',\n      data: {\n        trailer\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  setupE2EEReceiver(track, remoteId, trackInfo) {\n    if (!track.receiver) {\n      return;\n    }\n    if (!(trackInfo === null || trackInfo === void 0 ? void 0 : trackInfo.mimeType) || trackInfo.mimeType === '') {\n      throw new TypeError('MimeType missing from trackInfo, cannot set up E2EE cryptor');\n    }\n    const hasPacketTrailer = track.kind === 'video' && !!trackInfo.packetTrailerFeatures && trackInfo.packetTrailerFeatures.length > 0;\n    this.handleReceiver(track.receiver, track.mediaStreamID, remoteId, track.kind === 'video' ? mimeTypeToVideoCodecString(trackInfo.mimeType) : undefined, hasPacketTrailer);\n  }\n  setupE2EESender(track, sender) {\n    var _a, _b, _c;\n    if (!isLocalTrack(track) || !sender) {\n      if (!sender) livekitLogger.warn('early return because sender is not ready');\n      return;\n    }\n    this.handleSender(sender, track.mediaStreamID, undefined, isVideoTrack(track) ? (_b = (_a = track.publishOptions) === null || _a === void 0 ? void 0 : _a.frameMetadata) !== null && _b !== void 0 ? _b : (_c = track.publishOptions) === null || _c === void 0 ? void 0 : _c.packetTrailer : undefined);\n  }\n  /**\n   * Handles the given {@code RTCRtpReceiver} by creating a {@code TransformStream} which will inject\n   * a frame decoder.\n   *\n   */\n  handleReceiver(receiver, trackId, participantIdentity, codec, hasPacketTrailer) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.worker) {\n        return;\n      }\n      if (isScriptTransformSupportedForWorker()) {\n        const options = {\n          kind: 'decode',\n          participantIdentity,\n          trackId,\n          codec,\n          hasPacketTrailer\n        };\n        // @ts-ignore\n        receiver.transform = new RTCRtpScriptTransform(this.worker, options);\n      } else {\n        if (E2EE_FLAG in receiver && codec) {\n          // update track-specific state when the transceiver is reused\n          const msg = {\n            kind: 'updateCodec',\n            data: {\n              trackId,\n              codec,\n              participantIdentity,\n              hasPacketTrailer\n            }\n          };\n          this.worker.postMessage(msg);\n          return;\n        }\n        // @ts-ignore\n        let writable = receiver.writableStream;\n        // @ts-ignore\n        let readable = receiver.readableStream;\n        if (!writable || !readable) {\n          // @ts-ignore\n          const receiverStreams = receiver.createEncodedStreams();\n          // @ts-ignore\n          receiver.writableStream = receiverStreams.writable;\n          writable = receiverStreams.writable;\n          // @ts-ignore\n          receiver.readableStream = receiverStreams.readable;\n          readable = receiverStreams.readable;\n        }\n        const msg = {\n          kind: 'decode',\n          data: {\n            readableStream: readable,\n            writableStream: writable,\n            trackId: trackId,\n            codec,\n            participantIdentity: participantIdentity,\n            isReuse: E2EE_FLAG in receiver,\n            hasPacketTrailer\n          }\n        };\n        this.worker.postMessage(msg, [readable, writable]);\n      }\n      // @ts-ignore\n      receiver[E2EE_FLAG] = true;\n    });\n  }\n  /**\n   * Handles the given {@code RTCRtpSender} by creating a {@code TransformStream} which will inject\n   * a frame encoder.\n   *\n   */\n  handleSender(sender, trackId, codec, frameMetadata) {\n    var _a;\n    if (E2EE_FLAG in sender || !this.worker) {\n      return;\n    }\n    if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity) || this.room.localParticipant.identity === '') {\n      throw TypeError('local identity needs to be known in order to set up encrypted sender');\n    }\n    if (isScriptTransformSupportedForWorker()) {\n      livekitLogger.info('initialize script transform');\n      const options = {\n        kind: 'encode',\n        participantIdentity: this.room.localParticipant.identity,\n        trackId,\n        codec,\n        hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata),\n        packetTrailer: frameMetadata\n      };\n      // @ts-ignore\n      sender.transform = new RTCRtpScriptTransform(this.worker, options);\n    } else {\n      livekitLogger.info('initialize encoded streams');\n      // @ts-ignore\n      const senderStreams = sender.createEncodedStreams();\n      const msg = {\n        kind: 'encode',\n        data: {\n          readableStream: senderStreams.readable,\n          writableStream: senderStreams.writable,\n          codec,\n          trackId,\n          participantIdentity: this.room.localParticipant.identity,\n          isReuse: false,\n          hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata),\n          packetTrailer: frameMetadata\n        }\n      };\n      this.worker.postMessage(msg, [senderStreams.readable, senderStreams.writable]);\n    }\n    // @ts-ignore\n    sender[E2EE_FLAG] = true;\n  }\n}const MAX_ENTRIES = 300;\n/**\n * Caches frame metadata extracted from received video frames,\n * keyed by RTP timestamp so it can be looked up when the frame is displayed.\n *\n * Metadata is populated either by the frame metadata worker managed by\n * `FrameMetadataManager` (non-E2EE) or by the E2EE FrameCryptor worker\n * after decryption (E2EE).\n *\n * @experimental\n */\nclass FrameMetadataExtractor {\n  constructor() {\n    this.metadataMap = new Map();\n    this.activeSsrc = 0;\n  }\n  storeMetadata(rtpTimestamp, ssrc, metadata) {\n    // Simulcast layer switch: SSRC changed, flush stale entries from old layer.\n    if (this.activeSsrc !== 0 && this.activeSsrc !== ssrc) {\n      this.metadataMap.clear();\n    }\n    this.activeSsrc = ssrc;\n    while (this.metadataMap.size >= MAX_ENTRIES) {\n      const evicted = this.metadataMap.keys().next().value;\n      this.metadataMap.delete(evicted);\n    }\n    this.metadataMap.set(rtpTimestamp, metadata);\n  }\n  lookupMetadata(rtpTimestamp) {\n    return this.metadataMap.get(rtpTimestamp);\n  }\n  dispose() {\n    this.metadataMap.clear();\n    this.activeSsrc = 0;\n  }\n}/**\n * Manages packet trailer extraction for received video tracks.\n *\n * When a track's TrackInfo indicates packet trailer features, the manager\n * wires up an encoded frame transform to strip the trailer from encoded frames\n * and cache the metadata for lookup.\n *\n * Packet trailer extraction is worker-only. If no worker is configured, the\n * SDK does not advertise packet trailer support and skips extraction.\n *\n * When E2EE is active, the E2EE FrameCryptor worker handles trailer\n * extraction directly (before decryption), so this manager only creates\n * the extractor/metadata cache — no separate pipeline is installed.\n *\n * @experimental\n */\nclass FrameMetadataManager {\n  constructor(options) {\n    this.extractors = new Map();\n    /**\n     * Tracks the trackId associated with each receiver that has had its\n     * encoded streams handed off to the worker. Used to detect receiver\n     * reuse (transceiver recycling) so we can remap trackIds instead of\n     * re-transferring already-consumed streams.\n     */\n    this.workerPipelines = new Map();\n    this.onWorkerMessage = ev => {\n      const msg = ev.data;\n      if (msg.kind === 'metadata') {\n        const extractor = this.extractors.get(msg.data.trackId);\n        if (extractor) {\n          extractor.storeMetadata(msg.data.rtpTimestamp, msg.data.ssrc, msg.data.metadata);\n        }\n      }\n    };\n    this.onWorkerError = ev => {\n      livekitLogger.error('frame metadata worker encountered an error:', {\n        error: ev.error\n      });\n    };\n    this.worker = options === null || options === void 0 ? void 0 : options.worker;\n  }\n  /** @internal */\n  setup(room) {\n    if (room === this.room) {\n      return;\n    }\n    this.room = room;\n    if (this.worker) {\n      this.worker.onmessage = this.onWorkerMessage;\n      this.worker.onerror = this.onWorkerError;\n      this.worker.postMessage({\n        kind: 'init'\n      });\n    }\n    room.on(RoomEvent.TrackSubscribed, (track, pub, _participant) => {\n      if (track.kind !== 'video') {\n        return;\n      }\n      this.setupReceiver(track, pub.trackInfo);\n    }).on(RoomEvent.TrackUnsubscribed, track => {\n      this.teardownTrack(track);\n    }).on(RoomEvent.Disconnected, () => {\n      this.cleanup();\n    });\n  }\n  setupReceiver(track, trackInfo) {\n    var _a, _b, _c;\n    const receiver = track.receiver;\n    if (!receiver) {\n      return;\n    }\n    // Only install a pipeline for tracks that actually advertise packet\n    // trailer features. This keeps us out of the way for tracks published by\n    // clients on older protocols or that don't opt into the feature.\n    const hasFeatures = !!(trackInfo === null || trackInfo === void 0 ? void 0 : trackInfo.packetTrailerFeatures) && trackInfo.packetTrailerFeatures.length > 0;\n    if (!hasFeatures) {\n      if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.hasE2EESetup)) {\n        this.setupPassthroughReceiver(receiver, track.mediaStreamID);\n      }\n      return;\n    }\n    if (!isFrameMetadataSupported(this.worker ? {\n      worker: this.worker\n    } : undefined) && !((_b = this.room) === null || _b === void 0 ? void 0 : _b.hasE2EESetup)) {\n      livekitLogger.warn('frame metadata transform not supported; skipping extraction');\n      return;\n    }\n    const extractor = new FrameMetadataExtractor();\n    const trackId = track.mediaStreamID;\n    this.extractors.set(trackId, extractor);\n    track.frameMetadataExtractor = extractor;\n    if ((_c = this.room) === null || _c === void 0 ? void 0 : _c.hasE2EESetup) {\n      // E2EE worker strips the trailer and injects metadata directly into\n      // the extractor via E2eeManager; no pipeline is needed here.\n      return;\n    }\n    this.setupWorkerReceiver(receiver, trackId, true);\n  }\n  setupPassthroughReceiver(receiver, trackId) {\n    if (shouldUseFrameMetadataScriptTransform()) {\n      if ('transform' in receiver) {\n        // @ts-ignore\n        receiver.transform = null;\n      }\n      return;\n    }\n    if (this.worker && isFrameMetadataSupported({\n      worker: this.worker\n    }) && !this.workerPipelines.has(receiver)) {\n      this.setupWorkerReceiver(receiver, trackId, false);\n      return;\n    }\n    if (this.worker && this.workerPipelines.has(receiver)) {\n      this.setupWorkerReceiver(receiver, trackId, false);\n    }\n  }\n  setupWorkerReceiver(receiver, newTrackId) {\n    let hasPacketTrailer = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    const worker = this.worker;\n    if (!worker) {\n      return;\n    }\n    if (shouldUseFrameMetadataScriptTransform()) {\n      // @ts-ignore\n      receiver.transform = new RTCRtpScriptTransform(worker, {\n        kind: 'decode',\n        trackId: newTrackId\n      });\n      return;\n    }\n    const existingTrackId = this.workerPipelines.get(receiver);\n    if (existingTrackId) {\n      // Receiver is reused (transceiver recycled). The worker already owns\n      // the encoded streams — just remap the trackId so metadata is keyed\n      // correctly and re-activate processing.\n      const msg = {\n        kind: 'updateTrackId',\n        data: {\n          oldTrackId: existingTrackId,\n          newTrackId,\n          hasPacketTrailer\n        }\n      };\n      worker.postMessage(msg);\n      this.workerPipelines.set(receiver, newTrackId);\n      return;\n    }\n    if (!('createEncodedStreams' in receiver)) {\n      livekitLogger.warn('createEncodedStreams not supported');\n      return;\n    }\n    let streams;\n    try {\n      // @ts-ignore — createEncodedStreams is not in standard typings\n      streams = receiver.createEncodedStreams();\n    } catch (err) {\n      livekitLogger.warn('failed to create encoded streams', {\n        error: err\n      });\n      return;\n    }\n    const msg = {\n      kind: 'decode',\n      data: {\n        readableStream: streams.readable,\n        writableStream: streams.writable,\n        trackId: newTrackId,\n        hasPacketTrailer\n      }\n    };\n    worker.postMessage(msg, [streams.readable, streams.writable]);\n    this.workerPipelines.set(receiver, newTrackId);\n  }\n  teardownTrack(track) {\n    const trackId = track.mediaStreamID;\n    const extractor = this.extractors.get(trackId);\n    if (extractor) {\n      extractor.dispose();\n      this.extractors.delete(trackId);\n    }\n    if (track instanceof RemoteVideoTrack) {\n      track.frameMetadataExtractor = undefined;\n    }\n    // The receiver pipeline is intentionally left running. If the receiver is\n    // reused for a new track, `setupReceiver` will remap it. If the room\n    // disconnects, `cleanup` drops all state. Any metadata produced in the\n    // meantime is harmless — the extractor above has already been disposed and\n    // is no longer reachable from any track.\n  }\n  cleanup() {\n    var _a;\n    for (const extractor of this.extractors.values()) {\n      extractor.dispose();\n    }\n    this.extractors.clear();\n    this.workerPipelines.clear();\n    (_a = this.worker) === null || _a === void 0 ? void 0 : _a.terminate();\n  }\n}\n/** @deprecated Use {@link FrameMetadataManager} instead. */\nconst PacketTrailerManager = FrameMetadataManager;const CONNECTION_BACKOFF_MIN_MS = 500;\nconst CONNECTION_BACKOFF_MAX_MS = 15000;\n/**\n * BackOffStrategy implements exponential backoff for connection failures.\n *\n * When severe connection failures occur (e.g., network issues, server unavailability),\n * this strategy introduces increasing delays between reconnection attempts to avoid\n * overwhelming the server and to give transient issues time to resolve.\n *\n * This strategy is only applied to LiveKit Cloud projects. It identifies\n * projects by extracting the project name from the connection URL and tracks failures\n * per project. Self-hosted deployments (URLs without a project identifier) are not\n * subject to backoff delays.\n *\n * The class is implemented as a singleton to maintain consistent backoff state across\n * the entire application lifecycle instead of room instance lifecycle.\n */\nclass BackOffStrategy {\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  constructor() {\n    this.failedConnectionAttempts = new Map();\n    this.backOffPromises = new Map();\n  }\n  static getInstance() {\n    if (!this._instance) {\n      this._instance = new BackOffStrategy();\n    }\n    return this._instance;\n  }\n  addFailedConnectionAttempt(urlString) {\n    var _a;\n    const url = new URL(urlString);\n    const projectName = extractProjectFromUrl(url);\n    if (!projectName) {\n      return;\n    }\n    let failureCount = (_a = this.failedConnectionAttempts.get(projectName)) !== null && _a !== void 0 ? _a : 0;\n    this.failedConnectionAttempts.set(projectName, failureCount + 1);\n    this.backOffPromises.set(projectName, sleep(Math.min(CONNECTION_BACKOFF_MIN_MS * Math.pow(2, failureCount), CONNECTION_BACKOFF_MAX_MS)));\n  }\n  getBackOffPromise(urlString) {\n    const url = new URL(urlString);\n    const projectName = url && extractProjectFromUrl(url);\n    const backoffPromise = projectName && this.backOffPromises.get(projectName);\n    return backoffPromise || Promise.resolve();\n  }\n  resetFailedConnectionAttempts(urlString) {\n    const url = new URL(urlString);\n    const projectName = url && extractProjectFromUrl(url);\n    if (projectName) {\n      this.failedConnectionAttempts.set(projectName, 0);\n      this.backOffPromises.set(projectName, Promise.resolve());\n    }\n  }\n  resetAll() {\n    this.backOffPromises.clear();\n    this.failedConnectionAttempts.clear();\n  }\n}\nBackOffStrategy._instance = null;const defaultId = 'default';\nclass DeviceManager {\n  constructor() {\n    this._previousDevices = [];\n  }\n  static getInstance() {\n    if (this.instance === undefined) {\n      this.instance = new DeviceManager();\n    }\n    return this.instance;\n  }\n  get previousDevices() {\n    return this._previousDevices;\n  }\n  getDevices(kind_1) {\n    return __awaiter(this, arguments, void 0, function (kind) {\n      var _this = this;\n      let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        var _a;\n        if (((_a = DeviceManager.userMediaPromiseMap) === null || _a === void 0 ? void 0 : _a.size) > 0) {\n          livekitLogger.debug('awaiting getUserMedia promise');\n          try {\n            if (kind) {\n              yield DeviceManager.userMediaPromiseMap.get(kind);\n            } else {\n              yield Promise.all(DeviceManager.userMediaPromiseMap.values());\n            }\n          } catch (e) {\n            livekitLogger.warn('error waiting for media permissons');\n          }\n        }\n        let devices = yield navigator.mediaDevices.enumerateDevices();\n        if (requestPermissions &&\n        // for safari we need to skip this check, as otherwise it will re-acquire user media and fail on iOS https://bugs.webkit.org/show_bug.cgi?id=179363\n        !(isSafari() && _this.hasDeviceInUse(kind))) {\n          const isDummyDeviceOrEmpty = devices.filter(d => d.kind === kind).length === 0 || devices.some(device => {\n            const noLabel = device.label === '';\n            const isRelevant = kind ? device.kind === kind : true;\n            return noLabel && isRelevant;\n          });\n          if (isDummyDeviceOrEmpty) {\n            const permissionsToAcquire = {\n              video: kind !== 'audioinput' && kind !== 'audiooutput',\n              audio: kind !== 'videoinput' && {\n                deviceId: {\n                  ideal: 'default'\n                }\n              }\n            };\n            const stream = yield navigator.mediaDevices.getUserMedia(permissionsToAcquire);\n            devices = yield navigator.mediaDevices.enumerateDevices();\n            stream.getTracks().forEach(track => {\n              track.stop();\n            });\n          }\n        }\n        _this._previousDevices = devices;\n        if (kind) {\n          devices = devices.filter(device => device.kind === kind);\n        }\n        return devices;\n      }();\n    });\n  }\n  normalizeDeviceId(kind, deviceId, groupId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (deviceId !== defaultId) {\n        return deviceId;\n      }\n      // resolve actual device id if it's 'default': Chrome returns it when no\n      // device has been chosen\n      const devices = yield this.getDevices(kind);\n      const defaultDevice = devices.find(d => d.deviceId === defaultId);\n      if (!defaultDevice) {\n        livekitLogger.warn('could not reliably determine default device');\n        return undefined;\n      }\n      const device = devices.find(d => d.deviceId !== defaultId && d.groupId === (groupId !== null && groupId !== void 0 ? groupId : defaultDevice.groupId));\n      if (!device) {\n        livekitLogger.warn('could not reliably determine default device');\n        return undefined;\n      }\n      return device === null || device === void 0 ? void 0 : device.deviceId;\n    });\n  }\n  hasDeviceInUse(kind) {\n    return kind ? DeviceManager.userMediaPromiseMap.has(kind) : DeviceManager.userMediaPromiseMap.size > 0;\n  }\n}\nDeviceManager.mediaDeviceKinds = ['audioinput', 'audiooutput', 'videoinput'];\nDeviceManager.userMediaPromiseMap = new Map();const U16_MAX_SIZE = 0xffff;\nconst U32_MAX_SIZE = 0xffffffff;\n/**\n * A number of fields withing the data tracks packet specification assume wrap around behavior when\n * an unsigned type is incremented beyond its max size (ie, the packet `sequence` field). This\n * wrapper type manually reimplements this wrap around behavior given javascript's lack of fixed\n * size integer types.\n */\nclass WrapAroundUnsignedInt {\n  static u16(raw) {\n    return new WrapAroundUnsignedInt(raw, U16_MAX_SIZE);\n  }\n  static u32(raw) {\n    return new WrapAroundUnsignedInt(raw, U32_MAX_SIZE);\n  }\n  constructor(raw, maxSize) {\n    this.value = raw;\n    if (raw < 0) {\n      throw new Error('WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0');\n    }\n    if (maxSize > Number.MAX_SAFE_INTEGER) {\n      throw new Error('WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.');\n    }\n    this.maxSize = maxSize;\n    this.clamp();\n  }\n  /** Manually clamp the given containing value according to the wrap around max size bounds. Use\n   * this after out of bounds modification to the contained value by external code. */\n  clamp() {\n    while (this.value > this.maxSize) {\n      this.value -= this.maxSize + 1;\n    }\n    while (this.value < 0) {\n      this.value += this.maxSize + 1;\n    }\n  }\n  clone() {\n    return new WrapAroundUnsignedInt(this.value, this.maxSize);\n  }\n  /** When called, maps the containing value to a new containing value. After mapping, the wrap\n   * around external max size bounds are applied. Note that this is a mutative operation. */\n  update(updateFn) {\n    this.value = updateFn(this.value);\n    this.clamp();\n  }\n  /** Increments the given `n` to the inner value. Note that this is a mutative operation. */\n  increment() {\n    let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    this.update(value => value + n);\n  }\n  /** Decrements the given `n` from the inner value. Note that this is a mutative operation. */\n  decrement() {\n    let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    this.update(value => value - n);\n  }\n  getThenIncrement() {\n    const previousValue = this.value;\n    this.increment();\n    return new WrapAroundUnsignedInt(previousValue, this.maxSize);\n  }\n  /** Returns true if {@link this} is before the passed other {@link WrapAroundUnsignedInt}. */\n  isBefore(other) {\n    const a = this.value >>> 0;\n    const b = other.value >>> 0;\n    const diff = b - a >>> 0;\n    return diff !== 0 && diff < this.maxSize + 1;\n  }\n}\nclass DataTrackTimestamp {\n  static fromRtpTicks(rtpTicks) {\n    return new DataTrackTimestamp(rtpTicks, 90000);\n  }\n  /** Generates a timestamp initialized to a non cryptographically secure random value, so that\n   * different streams are more difficult to correlate in packet capture. */\n  static rtpRandom() {\n    const randomValue = Math.round(Math.random() * U32_MAX_SIZE);\n    return DataTrackTimestamp.fromRtpTicks(randomValue);\n  }\n  constructor(raw, rateInHz) {\n    this.timestamp = WrapAroundUnsignedInt.u32(raw);\n    this.rateInHz = rateInHz;\n  }\n  asTicks() {\n    return this.timestamp.value;\n  }\n  clone() {\n    return new DataTrackTimestamp(this.timestamp.value, this.rateInHz);\n  }\n  wrappingAdd(n) {\n    this.timestamp.increment(n);\n  }\n  /** Returns true if {@link this} is before the passed other {@link DataTrackTimestamp}. */\n  isBefore(other) {\n    return this.timestamp.isBefore(other.timestamp);\n  }\n}\nclass DataTrackClock {\n  constructor(rateInHz, epoch, base) {\n    this.epoch = epoch;\n    this.base = base;\n    this.previous = base.clone();\n    this.rateInHz = rateInHz;\n  }\n  static startingNow(base, rateInHz) {\n    return new DataTrackClock(rateInHz, new Date(), base);\n  }\n  static startingAtTime(epoch, base, rateInHz) {\n    return new DataTrackClock(rateInHz, epoch, base);\n  }\n  static rtpStartingNow(base) {\n    return DataTrackClock.startingNow(base, 90000);\n  }\n  static rtpStartingAtTime(epoch, base) {\n    return DataTrackClock.startingAtTime(epoch, base, 90000);\n  }\n  now() {\n    return this.at(new Date());\n  }\n  at(timestamp) {\n    let elapsedMs = timestamp.getTime() - this.epoch.getTime();\n    let durationTicks = DataTrackClock.durationInMsToTicks(elapsedMs, this.rateInHz);\n    let result = this.base.clone();\n    result.wrappingAdd(durationTicks);\n    // Enforce monotonicity in RTP wraparound space\n    if (result.isBefore(this.previous)) {\n      result = this.previous;\n    }\n    this.previous = result.clone();\n    return result.clone();\n  }\n  /** Convert a duration since the epoch into clock ticks. */\n  static durationInMsToTicks(durationMilliseconds, rateInHz) {\n    // round(nanos * rate_hz / 1e9)\n    let durationNanoseconds = durationMilliseconds * 1e6;\n    let ticks = (durationNanoseconds * rateInHz + 500000000) / 1000000000;\n    return Math.round(ticks);\n  }\n}\nfunction coerceToDataView(input) {\n  if (input instanceof DataView) {\n    return input;\n  } else if (input instanceof ArrayBuffer) {\n    return new DataView(input);\n  } else if (input instanceof Uint8Array) {\n    return new DataView(input.buffer, input.byteOffset, input.byteLength);\n  } else {\n    throw new Error(\"Error coercing \".concat(input, \" to DataView - input was not DataView, ArrayBuffer, or Uint8Array.\"));\n  }\n}var DataTrackHandleErrorReason;\n(function (DataTrackHandleErrorReason) {\n  DataTrackHandleErrorReason[DataTrackHandleErrorReason[\"Reserved\"] = 0] = \"Reserved\";\n  DataTrackHandleErrorReason[DataTrackHandleErrorReason[\"TooLarge\"] = 1] = \"TooLarge\";\n})(DataTrackHandleErrorReason || (DataTrackHandleErrorReason = {}));\nclass DataTrackHandleError extends LivekitReasonedError {\n  constructor(message, reason) {\n    super(19, message);\n    this.name = 'DataTrackHandleError';\n    this.reason = reason;\n    this.reasonName = DataTrackHandleErrorReason[reason];\n  }\n  isReason(reason) {\n    return this.reason === reason;\n  }\n  static tooLarge() {\n    return new DataTrackHandleError('Value too large to be a valid track handle', DataTrackHandleErrorReason.TooLarge);\n  }\n  static reserved(value) {\n    return new DataTrackHandleError(\"0x\".concat(value.toString(16), \" is a reserved value.\"), DataTrackHandleErrorReason.Reserved);\n  }\n}\nconst DataTrackHandle = {\n  fromNumber(raw) {\n    if (raw === 0) {\n      throw DataTrackHandleError.reserved(raw);\n    }\n    if (raw > U16_MAX_SIZE) {\n      throw DataTrackHandleError.tooLarge();\n    }\n    return raw;\n  }\n};\n/** Manage allocating new handles which don't conflict over the lifetime of the client. */\nclass DataTrackHandleAllocator {\n  constructor() {\n    this.value = 0;\n  }\n  /** Returns a unique track handle for the next publication, if one can be obtained. */\n  get() {\n    this.value += 1;\n    if (this.value > U16_MAX_SIZE) {\n      return null;\n    }\n    return this.value;\n  }\n  reset() {\n    this.value = 0;\n  }\n}const DataTrackInfo = {\n  from(protocolInfo) {\n    return {\n      sid: protocolInfo.sid,\n      pubHandle: protocolInfo.pubHandle,\n      name: protocolInfo.name,\n      usesE2ee: protocolInfo.encryption !== Encryption_Type.NONE\n    };\n  },\n  toProtobuf(info) {\n    return new DataTrackInfo$1({\n      sid: info.sid,\n      pubHandle: info.pubHandle,\n      name: info.name,\n      encryption: info.usesE2ee ? Encryption_Type.GCM : Encryption_Type.NONE\n    });\n  }\n};var QueueTaskStatus;\n(function (QueueTaskStatus) {\n  QueueTaskStatus[QueueTaskStatus[\"WAITING\"] = 0] = \"WAITING\";\n  QueueTaskStatus[QueueTaskStatus[\"RUNNING\"] = 1] = \"RUNNING\";\n  QueueTaskStatus[QueueTaskStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\n})(QueueTaskStatus || (QueueTaskStatus = {}));\nclass AsyncQueue {\n  constructor() {\n    this.pendingTasks = new Map();\n    this.taskMutex = new _();\n    this.nextTaskIndex = 0;\n  }\n  run(task) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const taskInfo = {\n        id: this.nextTaskIndex++,\n        enqueuedAt: Date.now(),\n        status: QueueTaskStatus.WAITING\n      };\n      this.pendingTasks.set(taskInfo.id, taskInfo);\n      const unlock = yield this.taskMutex.lock();\n      try {\n        taskInfo.executedAt = Date.now();\n        taskInfo.status = QueueTaskStatus.RUNNING;\n        return yield task();\n      } finally {\n        taskInfo.status = QueueTaskStatus.COMPLETED;\n        this.pendingTasks.delete(taskInfo.id);\n        unlock();\n      }\n    });\n  }\n  flush() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.run(() => __awaiter(this, void 0, void 0, function* () {}));\n    });\n  }\n  snapshot() {\n    return Array.from(this.pendingTasks.values());\n  }\n}/**\n * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)\n *\n * @see https://web.dev/websocketstream/\n */\nclass WebSocketStream {\n  get readyState() {\n    return this.ws.readyState;\n  }\n  constructor(url) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a, _b;\n    if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n      throw new DOMException('This operation was aborted', 'AbortError');\n    }\n    this.url = url;\n    const ws = new WebSocket(url, (_b = options.protocols) !== null && _b !== void 0 ? _b : []);\n    ws.binaryType = 'arraybuffer';\n    this.ws = ws;\n    const closeWithInfo = function () {\n      let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        code = _ref.closeCode,\n        reason = _ref.reason;\n      return ws.close(code, reason);\n    };\n    this.opened = new TypedPromise((resolve, reject) => {\n      const rejectHandler = () => {\n        reject(ConnectionError.websocket('Encountered websocket error during connection establishment'));\n      };\n      ws.onopen = () => {\n        resolve({\n          readable: new ReadableStream({\n            start(controller) {\n              ws.onmessage = _ref2 => {\n                let data = _ref2.data;\n                return controller.enqueue(data);\n              };\n              ws.onerror = e => controller.error(e);\n            },\n            cancel: closeWithInfo\n          }),\n          writable: new WritableStream({\n            write(chunk) {\n              ws.send(chunk);\n            },\n            abort() {\n              ws.close();\n            },\n            close: closeWithInfo\n          }),\n          protocol: ws.protocol,\n          extensions: ws.extensions\n        });\n        ws.removeEventListener('error', rejectHandler);\n      };\n      ws.addEventListener('error', rejectHandler);\n    });\n    this.closed = new TypedPromise((resolve, reject) => {\n      const rejectHandler = () => __awaiter(this, void 0, void 0, function* () {\n        const closePromise = new TypedPromise(res => {\n          if (ws.readyState === WebSocket.CLOSED) return;else {\n            ws.addEventListener('close', closeEv => {\n              res(closeEv);\n            }, {\n              once: true\n            });\n          }\n        });\n        const reason = yield TypedPromise.race([sleep(250), closePromise]);\n        if (!reason) {\n          reject(ConnectionError.websocket('Encountered unspecified websocket error without a timely close event'));\n        } else {\n          // if we can infer the close reason from the close event then resolve the promise, we don't need to throw\n          resolve(reason);\n        }\n      });\n      ws.onclose = _ref3 => {\n        let code = _ref3.code,\n          reason = _ref3.reason;\n        resolve({\n          closeCode: code,\n          reason\n        });\n        ws.removeEventListener('error', rejectHandler);\n      };\n      ws.addEventListener('error', rejectHandler);\n    });\n    if (options.signal) {\n      options.signal.onabort = () => ws.close();\n    }\n    this.close = closeWithInfo;\n  }\n}const passThroughQueueSignals = ['syncState', 'trickle', 'offer', 'answer', 'simulate', 'leave'];\nfunction canPassThroughQueue(req) {\n  const canPass = passThroughQueueSignals.indexOf(req.case) >= 0;\n  livekitLogger.trace('request allowed to bypass queue:', {\n    canPass,\n    req\n  });\n  return canPass;\n}\nvar SignalConnectionState;\n(function (SignalConnectionState) {\n  SignalConnectionState[SignalConnectionState[\"CONNECTING\"] = 0] = \"CONNECTING\";\n  SignalConnectionState[SignalConnectionState[\"CONNECTED\"] = 1] = \"CONNECTED\";\n  SignalConnectionState[SignalConnectionState[\"RECONNECTING\"] = 2] = \"RECONNECTING\";\n  SignalConnectionState[SignalConnectionState[\"DISCONNECTING\"] = 3] = \"DISCONNECTING\";\n  SignalConnectionState[SignalConnectionState[\"DISCONNECTED\"] = 4] = \"DISCONNECTED\";\n})(SignalConnectionState || (SignalConnectionState = {}));\n/** specifies how much time (in ms) we allow for the ws to close its connection gracefully before continuing */\nconst MAX_WS_CLOSE_TIME = 250;\n/** @internal */\nclass SignalClient {\n  get currentState() {\n    return this.state;\n  }\n  get isDisconnected() {\n    return this.state === SignalConnectionState.DISCONNECTING || this.state === SignalConnectionState.DISCONNECTED;\n  }\n  get isEstablishingConnection() {\n    return this.state === SignalConnectionState.CONNECTING || this.state === SignalConnectionState.RECONNECTING;\n  }\n  getNextRequestId() {\n    this._requestId += 1;\n    return this._requestId;\n  }\n  constructor() {\n    let useJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    let loggerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a;\n    /** signal rtt in milliseconds */\n    this.rtt = 0;\n    this.state = SignalConnectionState.DISCONNECTED;\n    this.log = livekitLogger;\n    this._requestId = 0;\n    this.useV0SignalPath = false;\n    /** @internal */\n    this.resetCallbacks = () => {\n      this.onAnswer = undefined;\n      this.onLeave = undefined;\n      this.onLocalTrackPublished = undefined;\n      this.onLocalTrackUnpublished = undefined;\n      this.onNegotiateRequested = undefined;\n      this.onOffer = undefined;\n      this.onRemoteMuteChanged = undefined;\n      this.onSubscribedQualityUpdate = undefined;\n      this.onTokenRefresh = undefined;\n      this.onTrickle = undefined;\n      this.onClose = undefined;\n      this.onMediaSectionsRequirement = undefined;\n    };\n    this.loggerContextCb = loggerOptions.loggerContextCb;\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Signal, () => this.logContext);\n    this.useJSON = useJSON;\n    this.requestQueue = new AsyncQueue();\n    this.queuedRequests = [];\n    this.closingLock = new _();\n    this.connectionLock = new _();\n    this.state = SignalConnectionState.DISCONNECTED;\n  }\n  get logContext() {\n    var _a, _b;\n    return (_b = (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)) !== null && _b !== void 0 ? _b : {};\n  }\n  join(url_1, token_1, opts_1, abortSignal_1) {\n    return __awaiter(this, arguments, void 0, function (url, token, opts, abortSignal) {\n      var _this = this;\n      let useV0Path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      let publisherOffer = arguments.length > 5 ? arguments[5] : undefined;\n      return function* () {\n        // during a full reconnect, we'd want to start the sequence even if currently\n        // connected\n        _this.state = SignalConnectionState.CONNECTING;\n        _this.options = opts;\n        const res = yield _this.connect(url, token, opts, abortSignal, useV0Path, publisherOffer);\n        return res;\n      }();\n    });\n  }\n  reconnect(url, token, sid, reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.options) {\n        this.log.warn('attempted to reconnect without signal options being set, ignoring');\n        return;\n      }\n      this.state = SignalConnectionState.RECONNECTING;\n      // clear ping interval and restart it once reconnected\n      this.clearPingInterval();\n      const res = yield this.connect(url, token, Object.assign(Object.assign({}, this.options), {\n        reconnect: true,\n        sid,\n        reconnectReason: reason\n      }), undefined, this.useV0SignalPath);\n      return res;\n    });\n  }\n  connect(url_1, token_1, opts_1, abortSignal_1) {\n    return __awaiter(this, arguments, void 0, function (url, token, opts, abortSignal) {\n      var _this2 = this;\n      let useV0Path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      let publisherOffer = arguments.length > 5 ? arguments[5] : undefined;\n      return function* () {\n        const unlock = yield _this2.connectionLock.lock();\n        _this2.connectOptions = opts;\n        _this2.useV0SignalPath = useV0Path;\n        const clientInfo = getClientInfo(opts.clientInfoCapabilities);\n        const params = useV0Path ? createConnectionParams(token, clientInfo, opts) : yield createJoinRequestConnectionParams(token, clientInfo, opts, publisherOffer);\n        const rtcUrl = createRtcUrl(url, params, useV0Path).toString();\n        const validateUrl = createValidateUrl(rtcUrl).toString();\n        return new Promise((resolve, reject) => __awaiter(_this2, void 0, void 0, function* () {\n          var _a, _b;\n          try {\n            let alreadyAborted = false;\n            const abortHandler = eventOrError => __awaiter(this, void 0, void 0, function* () {\n              if (alreadyAborted) {\n                return;\n              }\n              alreadyAborted = true;\n              const target = eventOrError instanceof Event ? eventOrError.currentTarget : eventOrError;\n              const reason = getAbortReasonAsString(target, 'Abort handler called');\n              // send leave if we have an active stream writer (connection is open)\n              if (this.streamWriter && !this.isDisconnected) {\n                this.sendLeave().then(() => this.close(reason)).catch(e => {\n                  this.log.error(e);\n                  this.close();\n                });\n              } else {\n                this.close();\n              }\n              cleanupAbortHandlers();\n              reject(ConnectionError.cancelled(reason));\n            });\n            abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);\n            const cleanupAbortHandlers = () => {\n              clearTimeout(wsTimeout);\n              abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);\n            };\n            const wsTimeout = setTimeout(() => {\n              abortHandler(ConnectionError.timeout('room connection has timed out (signal)'));\n            }, opts.websocketTimeout);\n            const handleSignalConnected = (connection, firstMessage) => {\n              this.handleSignalConnected(connection, wsTimeout, firstMessage);\n            };\n            const redactedUrl = new URL(rtcUrl);\n            if (redactedUrl.searchParams.has('access_token')) {\n              redactedUrl.searchParams.set('access_token', '<redacted>');\n            }\n            if (this.ws) {\n              const startClose = performance.now();\n              yield this.close(false);\n              this.log.debug(\"closed previous ws connection in \".concat(performance.now() - startClose, \"ms\"));\n            }\n            this.log.info(\"signal connecting to \".concat(redactedUrl), {\n              reconnect: opts.reconnect,\n              reconnectReason: opts.reconnectReason\n            });\n            this.ws = new WebSocketStream(rtcUrl);\n            try {\n              this.ws.closed.then(closeInfo => {\n                var _a;\n                if (this.isEstablishingConnection) {\n                  reject(ConnectionError.internal(\"Websocket got closed during a (re)connection attempt: \".concat(closeInfo.reason)));\n                }\n                if (closeInfo.closeCode !== 1000) {\n                  this.log.warn(\"websocket closed\", {\n                    reason: closeInfo.reason,\n                    code: closeInfo.closeCode,\n                    wasClean: closeInfo.closeCode === 1000,\n                    state: this.state\n                  });\n                  if (this.state === SignalConnectionState.CONNECTED) {\n                    this.handleOnClose((_a = closeInfo.reason) !== null && _a !== void 0 ? _a : 'Unexpected WS error');\n                  }\n                }\n                return;\n              }).catch(reason => {\n                if (this.isEstablishingConnection) {\n                  reject(ConnectionError.internal(\"Websocket error during a (re)connection attempt: \".concat(reason)));\n                }\n              });\n              const connection = yield this.ws.opened.catch(reason => __awaiter(this, void 0, void 0, function* () {\n                if (this.state !== SignalConnectionState.CONNECTED) {\n                  this.state = SignalConnectionState.DISCONNECTED;\n                  clearTimeout(wsTimeout);\n                  const error = yield this.handleConnectionError(reason, validateUrl);\n                  reject(error);\n                  return;\n                }\n                // other errors, handle\n                this.handleWSError(reason);\n                reject(reason);\n                return;\n              }));\n              clearTimeout(wsTimeout);\n              if (!connection) {\n                return;\n              }\n              const signalReader = connection.readable.getReader();\n              this.streamWriter = connection.writable.getWriter();\n              const firstMessage = yield signalReader.read();\n              signalReader.releaseLock();\n              if (!firstMessage.value) {\n                throw ConnectionError.internal('no message received as first message');\n              }\n              const firstSignalResponse = parseSignalResponse(firstMessage.value);\n              // Validate the first message\n              const validation = this.validateFirstMessage(firstSignalResponse, (_a = opts.reconnect) !== null && _a !== void 0 ? _a : false);\n              if (!validation.isValid) {\n                reject(validation.error);\n                return;\n              }\n              // Handle join response\n              if (((_b = firstSignalResponse.message) === null || _b === void 0 ? void 0 : _b.case) === 'join') {\n                // Set up ping configuration\n                this.pingTimeoutDuration = firstSignalResponse.message.value.pingTimeout;\n                this.pingIntervalDuration = firstSignalResponse.message.value.pingInterval;\n                if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) {\n                  this.log.debug('ping config', {\n                    timeout: this.pingTimeoutDuration,\n                    interval: this.pingIntervalDuration\n                  });\n                }\n                if (this.onJoined) {\n                  this.onJoined(firstSignalResponse.message.value);\n                }\n              }\n              // Handle successful connection\n              const firstMessageToProcess = validation.shouldProcessFirstMessage ? firstSignalResponse : undefined;\n              handleSignalConnected(connection, firstMessageToProcess);\n              resolve(validation.response);\n            } catch (e) {\n              reject(e);\n            } finally {\n              cleanupAbortHandlers();\n            }\n          } finally {\n            unlock();\n          }\n        }));\n      }();\n    });\n  }\n  startReadingLoop(signalReader, firstMessage) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (firstMessage) {\n        this.handleSignalResponse(firstMessage);\n      }\n      while (true) {\n        if (this.signalLatency) {\n          yield sleep(this.signalLatency);\n        }\n        const _yield$signalReader$r = yield signalReader.read(),\n          done = _yield$signalReader$r.done,\n          value = _yield$signalReader$r.value;\n        if (done) {\n          break;\n        }\n        const resp = parseSignalResponse(value);\n        this.handleSignalResponse(resp);\n      }\n    });\n  }\n  close() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this3 = this;\n      let updateState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Close method called on signal client';\n      return function* () {\n        if ([SignalConnectionState.DISCONNECTING || SignalConnectionState.DISCONNECTED].includes(_this3.state)) {\n          _this3.log.debug(\"ignoring signal close as it's already in disconnecting state\");\n          return;\n        }\n        const unlock = yield _this3.closingLock.lock();\n        try {\n          _this3.clearPingInterval();\n          if (updateState) {\n            _this3.state = SignalConnectionState.DISCONNECTING;\n          }\n          if (_this3.ws) {\n            _this3.ws.close({\n              closeCode: 1000,\n              reason\n            });\n            // calling `ws.close()` only starts the closing handshake (CLOSING state), prefer to wait until state is actually CLOSED\n            const closePromise = _this3.ws.closed;\n            _this3.ws = undefined;\n            _this3.streamWriter = undefined;\n            yield Promise.race([closePromise, sleep(MAX_WS_CLOSE_TIME)]);\n          }\n        } catch (e) {\n          _this3.log.debug('websocket error while closing', {\n            error: e\n          });\n        } finally {\n          if (updateState) {\n            _this3.state = SignalConnectionState.DISCONNECTED;\n          }\n          unlock();\n        }\n      }();\n    });\n  }\n  // initial offer after joining\n  sendOffer(offer, offerId) {\n    this.log.debug('sending offer', {\n      offerSdp: offer.sdp\n    });\n    this.sendRequest({\n      case: 'offer',\n      value: toProtoSessionDescription(offer, offerId)\n    });\n  }\n  // answer a server-initiated offer\n  sendAnswer(answer, offerId) {\n    this.log.debug('sending answer', {\n      answerSdp: answer.sdp\n    });\n    return this.sendRequest({\n      case: 'answer',\n      value: toProtoSessionDescription(answer, offerId)\n    });\n  }\n  sendIceCandidate(candidate, target) {\n    this.log.debug('sending ice candidate', {\n      candidate\n    });\n    return this.sendRequest({\n      case: 'trickle',\n      value: new TrickleRequest({\n        candidateInit: JSON.stringify(candidate),\n        target\n      })\n    });\n  }\n  sendMuteTrack(trackSid, muted) {\n    return this.sendRequest({\n      case: 'mute',\n      value: new MuteTrackRequest({\n        sid: trackSid,\n        muted\n      })\n    });\n  }\n  sendAddTrack(req) {\n    return this.sendRequest({\n      case: 'addTrack',\n      value: req\n    });\n  }\n  sendUpdateLocalMetadata(metadata_1, name_1) {\n    return __awaiter(this, arguments, void 0, function (metadata, name) {\n      var _this4 = this;\n      let attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      return function* () {\n        const requestId = _this4.getNextRequestId();\n        yield _this4.sendRequest({\n          case: 'updateMetadata',\n          value: new UpdateParticipantMetadata({\n            requestId,\n            metadata,\n            name,\n            attributes\n          })\n        });\n        return requestId;\n      }();\n    });\n  }\n  sendUpdateTrackSettings(settings) {\n    this.sendRequest({\n      case: 'trackSetting',\n      value: settings\n    });\n  }\n  sendUpdateSubscription(sub) {\n    return this.sendRequest({\n      case: 'subscription',\n      value: sub\n    });\n  }\n  sendSyncState(sync) {\n    return this.sendRequest({\n      case: 'syncState',\n      value: sync\n    });\n  }\n  sendUpdateVideoLayers(trackSid, layers) {\n    return this.sendRequest({\n      case: 'updateLayers',\n      value: new UpdateVideoLayers({\n        trackSid,\n        layers\n      })\n    });\n  }\n  sendUpdateSubscriptionPermissions(allParticipants, trackPermissions) {\n    return this.sendRequest({\n      case: 'subscriptionPermission',\n      value: new SubscriptionPermission({\n        allParticipants,\n        trackPermissions\n      })\n    });\n  }\n  sendSimulateScenario(scenario) {\n    return this.sendRequest({\n      case: 'simulate',\n      value: scenario\n    });\n  }\n  sendPing() {\n    /** send both of ping and pingReq for compatibility to old and new server */\n    return Promise.all([this.sendRequest({\n      case: 'ping',\n      value: protoInt64.parse(Date.now())\n    }), this.sendRequest({\n      case: 'pingReq',\n      value: new Ping({\n        timestamp: protoInt64.parse(Date.now()),\n        rtt: protoInt64.parse(this.rtt)\n      })\n    })]);\n  }\n  sendUpdateLocalAudioTrack(trackSid, features) {\n    return this.sendRequest({\n      case: 'updateAudioTrack',\n      value: new UpdateLocalAudioTrack({\n        trackSid,\n        features\n      })\n    });\n  }\n  sendLeave() {\n    return this.sendRequest({\n      case: 'leave',\n      value: new LeaveRequest({\n        reason: DisconnectReason.CLIENT_INITIATED,\n        // server doesn't process this field, keeping it here to indicate the intent of a full disconnect\n        action: LeaveRequest_Action.DISCONNECT\n      })\n    });\n  }\n  sendPublishDataTrackRequest(handle, name, usesE2ee) {\n    return this.sendRequest({\n      case: 'publishDataTrackRequest',\n      value: new PublishDataTrackRequest({\n        pubHandle: handle,\n        name: name,\n        encryption: usesE2ee ? Encryption_Type.GCM : Encryption_Type.NONE\n      })\n    });\n  }\n  sendUnPublishDataTrackRequest(handle) {\n    return this.sendRequest({\n      case: 'unpublishDataTrackRequest',\n      value: new UnpublishDataTrackRequest({\n        pubHandle: handle\n      })\n    });\n  }\n  sendUpdateDataSubscription(sid, subscribe) {\n    return this.sendRequest({\n      case: 'updateDataSubscription',\n      value: new UpdateDataSubscription({\n        // FIXME: consider refactoring to allow caller to pass an array of events through\n        updates: [new UpdateDataSubscription_Update({\n          trackSid: sid,\n          subscribe\n        })]\n      })\n    });\n  }\n  sendRequest(message_1) {\n    return __awaiter(this, arguments, void 0, function (message) {\n      var _this5 = this;\n      let fromQueue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return function* () {\n        // capture all requests while reconnecting and put them in a queue\n        // unless the request originates from the queue, then don't enqueue again\n        const canQueue = !fromQueue && !canPassThroughQueue(message);\n        if (canQueue && _this5.state === SignalConnectionState.RECONNECTING) {\n          _this5.queuedRequests.push(() => __awaiter(_this5, void 0, void 0, function* () {\n            yield this.sendRequest(message, true);\n          }));\n          return;\n        }\n        // make sure previously queued requests are being sent first\n        if (!fromQueue) {\n          yield _this5.requestQueue.flush();\n        }\n        if (_this5.signalLatency) {\n          yield sleep(_this5.signalLatency);\n        }\n        if (_this5.isDisconnected) {\n          // Skip requests if the signal layer is disconnected\n          // This can happen if an event is sent in the mist of room.connect() initializing\n          _this5.log.debug(\"skipping signal request (type: \".concat(message.case, \") - SignalClient disconnected\"));\n          return;\n        }\n        if (!_this5.streamWriter) {\n          _this5.log.error(\"cannot send signal request before connected, type: \".concat(message === null || message === void 0 ? void 0 : message.case));\n          return;\n        }\n        const req = new SignalRequest({\n          message\n        });\n        try {\n          if (_this5.useJSON) {\n            yield _this5.streamWriter.write(req.toJsonString());\n          } else {\n            yield _this5.streamWriter.write(req.toBinary().buffer);\n          }\n        } catch (e) {\n          _this5.log.error('error sending signal message', {\n            error: e\n          });\n        }\n      }();\n    });\n  }\n  handleSignalResponse(res) {\n    var _a, _b;\n    const msg = res.message;\n    if (msg == undefined) {\n      this.log.debug('received unsupported message');\n      return;\n    }\n    let pingHandled = false;\n    if (msg.case === 'answer') {\n      const sd = fromProtoSessionDescription(msg.value);\n      if (this.onAnswer) {\n        this.onAnswer(sd, msg.value.id, msg.value.midToTrackId);\n      }\n    } else if (msg.case === 'offer') {\n      const sd = fromProtoSessionDescription(msg.value);\n      if (this.onOffer) {\n        this.onOffer(sd, msg.value.id, msg.value.midToTrackId);\n      }\n    } else if (msg.case === 'trickle') {\n      const candidate = JSON.parse(msg.value.candidateInit);\n      if (this.onTrickle) {\n        this.onTrickle(candidate, msg.value.target);\n      }\n    } else if (msg.case === 'update') {\n      if (this.onParticipantUpdate) {\n        this.onParticipantUpdate((_a = msg.value.participants) !== null && _a !== void 0 ? _a : []);\n      }\n    } else if (msg.case === 'trackPublished') {\n      if (this.onLocalTrackPublished) {\n        this.onLocalTrackPublished(msg.value);\n      }\n    } else if (msg.case === 'speakersChanged') {\n      if (this.onSpeakersChanged) {\n        this.onSpeakersChanged((_b = msg.value.speakers) !== null && _b !== void 0 ? _b : []);\n      }\n    } else if (msg.case === 'leave') {\n      if (this.onLeave) {\n        this.onLeave(msg.value);\n      }\n    } else if (msg.case === 'mute') {\n      if (this.onRemoteMuteChanged) {\n        this.onRemoteMuteChanged(msg.value.sid, msg.value.muted);\n      }\n    } else if (msg.case === 'roomUpdate') {\n      if (this.onRoomUpdate && msg.value.room) {\n        this.onRoomUpdate(msg.value.room);\n      }\n    } else if (msg.case === 'connectionQuality') {\n      if (this.onConnectionQuality) {\n        this.onConnectionQuality(msg.value);\n      }\n    } else if (msg.case === 'streamStateUpdate') {\n      if (this.onStreamStateUpdate) {\n        this.onStreamStateUpdate(msg.value);\n      }\n    } else if (msg.case === 'subscribedQualityUpdate') {\n      if (this.onSubscribedQualityUpdate) {\n        this.onSubscribedQualityUpdate(msg.value);\n      }\n    } else if (msg.case === 'subscriptionPermissionUpdate') {\n      if (this.onSubscriptionPermissionUpdate) {\n        this.onSubscriptionPermissionUpdate(msg.value);\n      }\n    } else if (msg.case === 'refreshToken') {\n      if (this.onTokenRefresh) {\n        this.onTokenRefresh(msg.value);\n      }\n    } else if (msg.case === 'trackUnpublished') {\n      if (this.onLocalTrackUnpublished) {\n        this.onLocalTrackUnpublished(msg.value);\n      }\n    } else if (msg.case === 'subscriptionResponse') {\n      if (this.onSubscriptionError) {\n        this.onSubscriptionError(msg.value);\n      }\n    } else if (msg.case === 'pong') ; else if (msg.case === 'pongResp') {\n      this.rtt = Date.now() - Number.parseInt(msg.value.lastPingTimestamp.toString());\n      this.resetPingTimeout();\n      pingHandled = true;\n    } else if (msg.case === 'requestResponse') {\n      if (this.onRequestResponse) {\n        this.onRequestResponse(msg.value);\n      }\n    } else if (msg.case === 'trackSubscribed') {\n      if (this.onLocalTrackSubscribed) {\n        this.onLocalTrackSubscribed(msg.value.trackSid);\n      }\n    } else if (msg.case === 'roomMoved') {\n      if (this.onTokenRefresh) {\n        this.onTokenRefresh(msg.value.token);\n      }\n      if (this.onRoomMoved) {\n        this.onRoomMoved(msg.value);\n      }\n    } else if (msg.case === 'mediaSectionsRequirement') {\n      if (this.onMediaSectionsRequirement) {\n        this.onMediaSectionsRequirement(msg.value);\n      }\n    } else if (msg.case === 'publishDataTrackResponse') {\n      if (this.onPublishDataTrackResponse) {\n        this.onPublishDataTrackResponse(msg.value);\n      }\n    } else if (msg.case === 'unpublishDataTrackResponse') {\n      if (this.onUnPublishDataTrackResponse) {\n        this.onUnPublishDataTrackResponse(msg.value);\n      }\n    } else if (msg.case === 'dataTrackSubscriberHandles') {\n      if (this.onDataTrackSubscriberHandles) {\n        this.onDataTrackSubscriberHandles(msg.value);\n      }\n    } else {\n      this.log.debug('unsupported message', {\n        msgCase: msg.case\n      });\n    }\n    if (!pingHandled) {\n      this.resetPingTimeout();\n    }\n  }\n  setReconnected() {\n    while (this.queuedRequests.length > 0) {\n      const req = this.queuedRequests.shift();\n      if (req) {\n        this.requestQueue.run(req);\n      }\n    }\n  }\n  handleOnClose(reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.state === SignalConnectionState.DISCONNECTED) return;\n      const onCloseCallback = this.onClose;\n      yield this.close(undefined, reason);\n      this.log.info(\"websocket connection closed: \".concat(reason), {\n        reason\n      });\n      if (onCloseCallback) {\n        onCloseCallback(reason);\n      }\n    });\n  }\n  handleWSError(error) {\n    this.log.error('websocket error', {\n      error\n    });\n  }\n  /**\n   * Resets the ping timeout and starts a new timeout.\n   * Call this after receiving a pong message\n   */\n  resetPingTimeout() {\n    this.clearPingTimeout();\n    if (!this.pingTimeoutDuration) {\n      this.log.warn('ping timeout duration not set');\n      return;\n    }\n    this.pingTimeout = CriticalTimers.setTimeout(() => {\n      this.log.warn(\"ping timeout triggered. last pong received at: \".concat(new Date(Date.now() - this.pingTimeoutDuration * 1000).toUTCString()));\n      this.handleOnClose('ping timeout');\n    }, this.pingTimeoutDuration * 1000);\n  }\n  /**\n   * Clears ping timeout (does not start a new timeout)\n   */\n  clearPingTimeout() {\n    if (this.pingTimeout) {\n      CriticalTimers.clearTimeout(this.pingTimeout);\n    }\n  }\n  startPingInterval() {\n    this.clearPingInterval();\n    this.resetPingTimeout();\n    if (!this.pingIntervalDuration) {\n      this.log.warn('ping interval duration not set');\n      return;\n    }\n    this.log.debug('start ping interval');\n    this.pingInterval = CriticalTimers.setInterval(() => {\n      this.sendPing();\n    }, this.pingIntervalDuration * 1000);\n  }\n  clearPingInterval() {\n    this.log.debug('clearing ping interval');\n    this.clearPingTimeout();\n    if (this.pingInterval) {\n      CriticalTimers.clearInterval(this.pingInterval);\n    }\n  }\n  /**\n   * Handles the successful connection to the signal server\n   * @param connection The WebSocket connection\n   * @param timeoutHandle The timeout handle to clear\n   * @param firstMessage Optional first message to process\n   * @internal\n   */\n  handleSignalConnected(connection, timeoutHandle, firstMessage) {\n    this.state = SignalConnectionState.CONNECTED;\n    this.log.info('signal connected');\n    clearTimeout(timeoutHandle);\n    this.startPingInterval();\n    this.startReadingLoop(connection.readable.getReader(), firstMessage);\n  }\n  /**\n   * Validates the first message received from the signal server\n   * @param firstSignalResponse The first signal response received\n   * @param isReconnect Whether this is a reconnection attempt\n   * @returns Validation result with response or error\n   * @internal\n   */\n  validateFirstMessage(firstSignalResponse, isReconnect) {\n    var _a, _b, _c, _d, _e;\n    if (((_a = firstSignalResponse.message) === null || _a === void 0 ? void 0 : _a.case) === 'join') {\n      return {\n        isValid: true,\n        response: firstSignalResponse.message.value\n      };\n    } else if (this.state === SignalConnectionState.RECONNECTING && ((_b = firstSignalResponse.message) === null || _b === void 0 ? void 0 : _b.case) !== 'leave') {\n      if (((_c = firstSignalResponse.message) === null || _c === void 0 ? void 0 : _c.case) === 'reconnect') {\n        return {\n          isValid: true,\n          response: firstSignalResponse.message.value\n        };\n      } else {\n        // in reconnecting, any message received means signal reconnected and we still need to process it\n        this.log.debug('declaring signal reconnected without reconnect response received');\n        return {\n          isValid: true,\n          response: undefined,\n          shouldProcessFirstMessage: true\n        };\n      }\n    } else if (this.isEstablishingConnection && ((_d = firstSignalResponse.message) === null || _d === void 0 ? void 0 : _d.case) === 'leave') {\n      return {\n        isValid: false,\n        error: ConnectionError.leaveRequest('Received leave request while trying to (re)connect', firstSignalResponse.message.value.reason)\n      };\n    } else if (!isReconnect) {\n      // non-reconnect case, should receive join response first\n      return {\n        isValid: false,\n        error: ConnectionError.internal(\"did not receive join response, got \".concat((_e = firstSignalResponse.message) === null || _e === void 0 ? void 0 : _e.case, \" instead\"))\n      };\n    }\n    return {\n      isValid: false,\n      error: ConnectionError.internal('Unexpected first message')\n    };\n  }\n  /**\n   * Handles WebSocket connection errors by validating with the server\n   * @param reason The error that occurred\n   * @param validateUrl The URL to validate the connection with\n   * @returns A ConnectionError with appropriate reason and status\n   * @internal\n   */\n  handleConnectionError(reason, validateUrl) {\n    return __awaiter(this, void 0, void 0, function* () {\n      try {\n        const resp = yield fetch(validateUrl);\n        switch (resp.status) {\n          case 404:\n            const errorMsg = yield resp.text();\n            if (errorMsg.includes('requested room does not exist')) {\n              return ConnectionError.notAllowed(errorMsg, resp.status);\n            }\n            return ConnectionError.serviceNotFound('v1 RTC path not found. Consider upgrading your LiveKit server version', 'v0-rtc');\n          case 401:\n          case 403:\n            const msg = yield resp.text();\n            return ConnectionError.notAllowed(msg, resp.status);\n          default:\n            break;\n        }\n        if (reason instanceof ConnectionError) {\n          return reason;\n        } else {\n          return ConnectionError.internal(\"Encountered unknown websocket error during connection: \".concat(reason), {\n            status: resp.status,\n            statusText: resp.statusText\n          });\n        }\n      } catch (e) {\n        return e instanceof ConnectionError ? e : ConnectionError.serverUnreachable(e instanceof Error ? e.message : 'server was not reachable');\n      }\n    });\n  }\n}\nfunction fromProtoSessionDescription(sd) {\n  const rsd = {\n    type: 'offer',\n    sdp: sd.sdp\n  };\n  switch (sd.type) {\n    case 'answer':\n    case 'offer':\n    case 'pranswer':\n    case 'rollback':\n      rsd.type = sd.type;\n      break;\n  }\n  return rsd;\n}\nfunction toProtoSessionDescription(rsd, id) {\n  const sd = new SessionDescription({\n    sdp: rsd.sdp,\n    type: rsd.type,\n    id\n  });\n  return sd;\n}\nfunction createConnectionParams(token, info, opts) {\n  var _a;\n  const params = new URLSearchParams();\n  params.set('access_token', token);\n  // opts\n  if (opts.reconnect) {\n    params.set('reconnect', '1');\n    if (opts.sid) {\n      params.set('sid', opts.sid);\n    }\n  }\n  params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');\n  // ClientInfo\n  params.set('sdk', isReactNative() ? 'reactnative' : 'js');\n  params.set('version', info.version);\n  params.set('protocol', info.protocol.toString());\n  params.set('client_protocol', info.clientProtocol.toString());\n  if (info.deviceModel) {\n    params.set('device_model', info.deviceModel);\n  }\n  if (info.os) {\n    params.set('os', info.os);\n  }\n  if (info.osVersion) {\n    params.set('os_version', info.osVersion);\n  }\n  if (info.browser) {\n    params.set('browser', info.browser);\n  }\n  if (info.browserVersion) {\n    params.set('browser_version', info.browserVersion);\n  }\n  if (opts.adaptiveStream) {\n    params.set('adaptive_stream', '1');\n  }\n  if (opts.reconnectReason) {\n    params.set('reconnect_reason', opts.reconnectReason.toString());\n  }\n  // @ts-ignore\n  if ((_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.type) {\n    // @ts-ignore\n    params.set('network', navigator.connection.type);\n  }\n  return params;\n}\nfunction createJoinRequestConnectionParams(token, info, opts, publisherOffer) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const params = new URLSearchParams();\n    params.set('access_token', token);\n    const joinRequest = new JoinRequest({\n      clientInfo: info,\n      connectionSettings: new ConnectionSettings({\n        autoSubscribe: !!opts.autoSubscribe,\n        adaptiveStream: !!opts.adaptiveStream\n      }),\n      reconnect: !!opts.reconnect,\n      participantSid: opts.sid ? opts.sid : undefined,\n      publisherOffer: publisherOffer\n    });\n    if (opts.reconnectReason) {\n      joinRequest.reconnectReason = opts.reconnectReason;\n    }\n    const joinRequestBytes = joinRequest.toBinary();\n    let requestBytes;\n    let compression;\n    if (isCompressionStreamSupported()) {\n      const stream = new CompressionStream('gzip');\n      const writer = stream.writable.getWriter();\n      writer.write(new Uint8Array(joinRequestBytes));\n      writer.close();\n      const chunks = [];\n      const reader = stream.readable.getReader();\n      while (true) {\n        const _yield$reader$read = yield reader.read(),\n          done = _yield$reader$read.done,\n          value = _yield$reader$read.value;\n        if (done) break;\n        chunks.push(value);\n      }\n      const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n      const result = new Uint8Array(totalLength);\n      let offset = 0;\n      for (const chunk of chunks) {\n        result.set(chunk, offset);\n        offset += chunk.length;\n      }\n      requestBytes = result;\n      compression = WrappedJoinRequest_Compression.GZIP;\n    } else {\n      requestBytes = joinRequestBytes;\n      compression = WrappedJoinRequest_Compression.NONE;\n    }\n    const wrappedJoinRequest = new WrappedJoinRequest({\n      joinRequest: requestBytes,\n      compression\n    });\n    const wrappedBytes = wrappedJoinRequest.toBinary();\n    const bytesToBase64 = bytes => {\n      const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join('');\n      return btoa(binString);\n    };\n    params.set('join_request', bytesToBase64(wrappedBytes).replace(/\\+/g, '-').replace(/\\//g, '_'));\n    return params;\n  });\n}class DataPacketBuffer {\n  constructor() {\n    this.buffer = [];\n    this._totalSize = 0;\n  }\n  push(item) {\n    this.buffer.push(item);\n    this._totalSize += item.data.byteLength;\n  }\n  pop() {\n    const item = this.buffer.shift();\n    if (item) {\n      this._totalSize -= item.data.byteLength;\n    }\n    return item;\n  }\n  getAll() {\n    return this.buffer.slice();\n  }\n  popToSequence(sequence) {\n    while (this.buffer.length > 0) {\n      const first = this.buffer[0];\n      if (first.sequence <= sequence) {\n        this.pop();\n      } else {\n        break;\n      }\n    }\n  }\n  alignBufferedAmount(bufferedAmount) {\n    while (this.buffer.length > 0) {\n      const first = this.buffer[0];\n      if (this._totalSize - first.data.byteLength <= bufferedAmount) {\n        break;\n      }\n      this.pop();\n    }\n  }\n  get length() {\n    return this.buffer.length;\n  }\n}class TTLMap {\n  /**\n   * @param ttl ttl of the key (ms)\n   */\n  constructor(ttl) {\n    this._map = new Map();\n    this._lastCleanup = 0;\n    this.ttl = ttl;\n  }\n  set(key, value) {\n    const now = Date.now();\n    if (now - this._lastCleanup > this.ttl / 2) {\n      this.cleanup();\n    }\n    const expiresAt = now + this.ttl;\n    this._map.set(key, {\n      value,\n      expiresAt\n    });\n    return this;\n  }\n  get(key) {\n    const entry = this._map.get(key);\n    if (!entry) return undefined;\n    if (entry.expiresAt < Date.now()) {\n      this._map.delete(key);\n      return undefined;\n    }\n    return entry.value;\n  }\n  has(key) {\n    const entry = this._map.get(key);\n    if (!entry) return false;\n    if (entry.expiresAt < Date.now()) {\n      this._map.delete(key);\n      return false;\n    }\n    return true;\n  }\n  delete(key) {\n    return this._map.delete(key);\n  }\n  clear() {\n    this._map.clear();\n  }\n  cleanup() {\n    const now = Date.now();\n    for (const _ref of this._map.entries()) {\n      var _ref2 = _slicedToArray(_ref, 2);\n      const key = _ref2[0];\n      const entry = _ref2[1];\n      if (entry.expiresAt < now) {\n        this._map.delete(key);\n      }\n    }\n    this._lastCleanup = now;\n  }\n  get size() {\n    this.cleanup();\n    return this._map.size;\n  }\n  forEach(callback) {\n    this.cleanup();\n    for (const _ref3 of this._map.entries()) {\n      var _ref4 = _slicedToArray(_ref3, 2);\n      const key = _ref4[0];\n      const entry = _ref4[1];\n      if (entry.expiresAt >= Date.now()) {\n        callback(entry.value, key, this.asValueMap());\n      }\n    }\n  }\n  map(callback) {\n    this.cleanup();\n    const result = [];\n    const valueMap = this.asValueMap();\n    for (const _ref5 of valueMap.entries()) {\n      var _ref6 = _slicedToArray(_ref5, 2);\n      const key = _ref6[0];\n      const value = _ref6[1];\n      result.push(callback(value, key, valueMap));\n    }\n    return result;\n  }\n  asValueMap() {\n    const result = new Map();\n    for (const _ref7 of this._map.entries()) {\n      var _ref8 = _slicedToArray(_ref7, 2);\n      const key = _ref8[0];\n      const entry = _ref8[1];\n      if (entry.expiresAt >= Date.now()) {\n        result.set(key, entry.value);\n      }\n    }\n    return result;\n  }\n}var lib = {};var parser = {};var grammar = {exports: {}};var hasRequiredGrammar;\nfunction requireGrammar() {\n  if (hasRequiredGrammar) return grammar.exports;\n  hasRequiredGrammar = 1;\n  var grammar$1 = grammar.exports = {\n    v: [{\n      name: 'version',\n      reg: /^(\\d*)$/\n    }],\n    o: [{\n      // o=- 20518 0 IN IP4 203.0.113.1\n      // NB: sessionId will be a String in most cases because it is huge\n      name: 'origin',\n      reg: /^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,\n      names: ['username', 'sessionId', 'sessionVersion', 'netType', 'ipVer', 'address'],\n      format: '%s %s %d %s IP%d %s'\n    }],\n    // default parsing of these only (though some of these feel outdated)\n    s: [{\n      name: 'name'\n    }],\n    i: [{\n      name: 'description'\n    }],\n    u: [{\n      name: 'uri'\n    }],\n    e: [{\n      name: 'email'\n    }],\n    p: [{\n      name: 'phone'\n    }],\n    z: [{\n      name: 'timezones'\n    }],\n    // TODO: this one can actually be parsed properly...\n    r: [{\n      name: 'repeats'\n    }],\n    // TODO: this one can also be parsed properly\n    // k: [{}], // outdated thing ignored\n    t: [{\n      // t=0 0\n      name: 'timing',\n      reg: /^(\\d*) (\\d*)/,\n      names: ['start', 'stop'],\n      format: '%d %d'\n    }],\n    c: [{\n      // c=IN IP4 10.47.197.26\n      name: 'connection',\n      reg: /^IN IP(\\d) (\\S*)/,\n      names: ['version', 'ip'],\n      format: 'IN IP%d %s'\n    }],\n    b: [{\n      // b=AS:4000\n      push: 'bandwidth',\n      reg: /^(TIAS|AS|CT|RR|RS):(\\d*)/,\n      names: ['type', 'limit'],\n      format: '%s:%s'\n    }],\n    m: [{\n      // m=video 51744 RTP/AVP 126 97 98 34 31\n      // NB: special - pushes to session\n      // TODO: rtp/fmtp should be filtered by the payloads found here?\n      reg: /^(\\w*) (\\d*) ([\\w/]*)(?: (.*))?/,\n      names: ['type', 'port', 'protocol', 'payloads'],\n      format: '%s %d %s %s'\n    }],\n    a: [{\n      // a=rtpmap:110 opus/48000/2\n      push: 'rtp',\n      reg: /^rtpmap:(\\d*) ([\\w\\-.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,\n      names: ['payload', 'codec', 'rate', 'encoding'],\n      format: function (o) {\n        return o.encoding ? 'rtpmap:%d %s/%s/%s' : o.rate ? 'rtpmap:%d %s/%s' : 'rtpmap:%d %s';\n      }\n    }, {\n      // a=fmtp:108 profile-level-id=24;object=23;bitrate=64000\n      // a=fmtp:111 minptime=10; useinbandfec=1\n      push: 'fmtp',\n      reg: /^fmtp:(\\d*) ([\\S| ]*)/,\n      names: ['payload', 'config'],\n      format: 'fmtp:%d %s'\n    }, {\n      // a=control:streamid=0\n      name: 'control',\n      reg: /^control:(.*)/,\n      format: 'control:%s'\n    }, {\n      // a=rtcp:65179 IN IP4 193.84.77.194\n      name: 'rtcp',\n      reg: /^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,\n      names: ['port', 'netType', 'ipVer', 'address'],\n      format: function (o) {\n        return o.address != null ? 'rtcp:%d %s IP%d %s' : 'rtcp:%d';\n      }\n    }, {\n      // a=rtcp-fb:98 trr-int 100\n      push: 'rtcpFbTrrInt',\n      reg: /^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,\n      names: ['payload', 'value'],\n      format: 'rtcp-fb:%s trr-int %d'\n    }, {\n      // a=rtcp-fb:98 nack rpsi\n      push: 'rtcpFb',\n      reg: /^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,\n      names: ['payload', 'type', 'subtype'],\n      format: function (o) {\n        return o.subtype != null ? 'rtcp-fb:%s %s %s' : 'rtcp-fb:%s %s';\n      }\n    }, {\n      // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n      // a=extmap:1/recvonly URI-gps-string\n      // a=extmap:3 urn:ietf:params:rtp-hdrext:encrypt urn:ietf:params:rtp-hdrext:smpte-tc 25@600/24\n      push: 'ext',\n      reg: /^extmap:(\\d+)(?:\\/(\\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\\S*)(?: (\\S*))?/,\n      names: ['value', 'direction', 'encrypt-uri', 'uri', 'config'],\n      format: function (o) {\n        return 'extmap:%d' + (o.direction ? '/%s' : '%v') + (o['encrypt-uri'] ? ' %s' : '%v') + ' %s' + (o.config ? ' %s' : '');\n      }\n    }, {\n      // a=extmap-allow-mixed\n      name: 'extmapAllowMixed',\n      reg: /^(extmap-allow-mixed)/\n    }, {\n      // a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32\n      push: 'crypto',\n      reg: /^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,\n      names: ['id', 'suite', 'config', 'sessionConfig'],\n      format: function (o) {\n        return o.sessionConfig != null ? 'crypto:%d %s %s %s' : 'crypto:%d %s %s';\n      }\n    }, {\n      // a=setup:actpass\n      name: 'setup',\n      reg: /^setup:(\\w*)/,\n      format: 'setup:%s'\n    }, {\n      // a=connection:new\n      name: 'connectionType',\n      reg: /^connection:(new|existing)/,\n      format: 'connection:%s'\n    }, {\n      // a=mid:1\n      name: 'mid',\n      reg: /^mid:([^\\s]*)/,\n      format: 'mid:%s'\n    }, {\n      // a=msid:0c8b064d-d807-43b4-b434-f92a889d8587 98178685-d409-46e0-8e16-7ef0db0db64a\n      name: 'msid',\n      reg: /^msid:(.*)/,\n      format: 'msid:%s'\n    }, {\n      // a=ptime:20\n      name: 'ptime',\n      reg: /^ptime:(\\d*(?:\\.\\d*)*)/,\n      format: 'ptime:%d'\n    }, {\n      // a=maxptime:60\n      name: 'maxptime',\n      reg: /^maxptime:(\\d*(?:\\.\\d*)*)/,\n      format: 'maxptime:%d'\n    }, {\n      // a=sendrecv\n      name: 'direction',\n      reg: /^(sendrecv|recvonly|sendonly|inactive)/\n    }, {\n      // a=ice-lite\n      name: 'icelite',\n      reg: /^(ice-lite)/\n    }, {\n      // a=ice-ufrag:F7gI\n      name: 'iceUfrag',\n      reg: /^ice-ufrag:(\\S*)/,\n      format: 'ice-ufrag:%s'\n    }, {\n      // a=ice-pwd:x9cml/YzichV2+XlhiMu8g\n      name: 'icePwd',\n      reg: /^ice-pwd:(\\S*)/,\n      format: 'ice-pwd:%s'\n    }, {\n      // a=fingerprint:SHA-1 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33\n      name: 'fingerprint',\n      reg: /^fingerprint:(\\S*) (\\S*)/,\n      names: ['type', 'hash'],\n      format: 'fingerprint:%s %s'\n    }, {\n      // a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host\n      // a=candidate:1162875081 1 udp 2113937151 192.168.34.75 60017 typ host generation 0 network-id 3 network-cost 10\n      // a=candidate:3289912957 2 udp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 generation 0 network-id 3 network-cost 10\n      // a=candidate:229815620 1 tcp 1518280447 192.168.150.19 60017 typ host tcptype active generation 0 network-id 3 network-cost 10\n      // a=candidate:3289912957 2 tcp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 tcptype passive generation 0 network-id 3 network-cost 10\n      push: 'candidates',\n      reg: /^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,\n      names: ['foundation', 'component', 'transport', 'priority', 'ip', 'port', 'type', 'raddr', 'rport', 'tcptype', 'generation', 'network-id', 'network-cost'],\n      format: function (o) {\n        var str = 'candidate:%s %d %s %d %s %d typ %s';\n        str += o.raddr != null ? ' raddr %s rport %d' : '%v%v';\n\n        // NB: candidate has three optional chunks, so %void middles one if it's missing\n        str += o.tcptype != null ? ' tcptype %s' : '%v';\n        if (o.generation != null) {\n          str += ' generation %d';\n        }\n        str += o['network-id'] != null ? ' network-id %d' : '%v';\n        str += o['network-cost'] != null ? ' network-cost %d' : '%v';\n        return str;\n      }\n    }, {\n      // a=end-of-candidates (keep after the candidates line for readability)\n      name: 'endOfCandidates',\n      reg: /^(end-of-candidates)/\n    }, {\n      // a=remote-candidates:1 203.0.113.1 54400 2 203.0.113.1 54401 ...\n      name: 'remoteCandidates',\n      reg: /^remote-candidates:(.*)/,\n      format: 'remote-candidates:%s'\n    }, {\n      // a=ice-options:google-ice\n      name: 'iceOptions',\n      reg: /^ice-options:(\\S*)/,\n      format: 'ice-options:%s'\n    }, {\n      // a=ssrc:2566107569 cname:t9YU8M1UxTF8Y1A1\n      push: 'ssrcs',\n      reg: /^ssrc:(\\d*) ([\\w_-]*)(?::(.*))?/,\n      names: ['id', 'attribute', 'value'],\n      format: function (o) {\n        var str = 'ssrc:%d';\n        if (o.attribute != null) {\n          str += ' %s';\n          if (o.value != null) {\n            str += ':%s';\n          }\n        }\n        return str;\n      }\n    }, {\n      // a=ssrc-group:FEC 1 2\n      // a=ssrc-group:FEC-FR 3004364195 1080772241\n      push: 'ssrcGroups',\n      // token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E\n      reg: /^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,\n      names: ['semantics', 'ssrcs'],\n      format: 'ssrc-group:%s %s'\n    }, {\n      // a=msid-semantic: WMS Jvlam5X3SX1OP6pn20zWogvaKJz5Hjf9OnlV\n      name: 'msidSemantic',\n      reg: /^msid-semantic:\\s?(\\w*) (\\S*)/,\n      names: ['semantic', 'token'],\n      format: 'msid-semantic: %s %s' // space after ':' is not accidental\n    }, {\n      // a=group:BUNDLE audio video\n      push: 'groups',\n      reg: /^group:(\\w*) (.*)/,\n      names: ['type', 'mids'],\n      format: 'group:%s %s'\n    }, {\n      // a=rtcp-mux\n      name: 'rtcpMux',\n      reg: /^(rtcp-mux)/\n    }, {\n      // a=rtcp-rsize\n      name: 'rtcpRsize',\n      reg: /^(rtcp-rsize)/\n    }, {\n      // a=sctpmap:5000 webrtc-datachannel 1024\n      name: 'sctpmap',\n      reg: /^sctpmap:([\\w_/]*) (\\S*)(?: (\\S*))?/,\n      names: ['sctpmapNumber', 'app', 'maxMessageSize'],\n      format: function (o) {\n        return o.maxMessageSize != null ? 'sctpmap:%s %s %s' : 'sctpmap:%s %s';\n      }\n    }, {\n      // a=x-google-flag:conference\n      name: 'xGoogleFlag',\n      reg: /^x-google-flag:([^\\s]*)/,\n      format: 'x-google-flag:%s'\n    }, {\n      // a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0\n      push: 'rids',\n      reg: /^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,\n      names: ['id', 'direction', 'params'],\n      format: function (o) {\n        return o.params ? 'rid:%s %s %s' : 'rid:%s %s';\n      }\n    }, {\n      // a=imageattr:97 send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320] recv [x=330,y=250]\n      // a=imageattr:* send [x=800,y=640] recv *\n      // a=imageattr:100 recv [x=320,y=240]\n      push: 'imageattrs',\n      reg: new RegExp(\n      // a=imageattr:97\n      '^imageattr:(\\\\d+|\\\\*)' +\n      // send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320]\n      '[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)' +\n      // recv [x=330,y=250]\n      '(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?'),\n      names: ['pt', 'dir1', 'attrs1', 'dir2', 'attrs2'],\n      format: function (o) {\n        return 'imageattr:%s %s %s' + (o.dir2 ? ' %s %s' : '');\n      }\n    }, {\n      // a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8\n      // a=simulcast:recv 1;4,5 send 6;7\n      name: 'simulcast',\n      reg: new RegExp(\n      // a=simulcast:\n      '^simulcast:' +\n      // send 1,2,3;~4,~5\n      '(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)' +\n      // space + recv 6;~7,~8\n      '(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?' +\n      // end\n      '$'),\n      names: ['dir1', 'list1', 'dir2', 'list2'],\n      format: function (o) {\n        return 'simulcast:%s %s' + (o.dir2 ? ' %s %s' : '');\n      }\n    }, {\n      // old simulcast draft 03 (implemented by Firefox)\n      //   https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-03\n      // a=simulcast: recv pt=97;98 send pt=97\n      // a=simulcast: send rid=5;6;7 paused=6,7\n      name: 'simulcast_03',\n      reg: /^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,\n      names: ['value'],\n      format: 'simulcast: %s'\n    }, {\n      // a=framerate:25\n      // a=framerate:29.97\n      name: 'framerate',\n      reg: /^framerate:(\\d+(?:$|\\.\\d+))/,\n      format: 'framerate:%s'\n    }, {\n      // RFC4570\n      // a=source-filter: incl IN IP4 239.5.2.31 10.1.15.5\n      name: 'sourceFilter',\n      reg: /^source-filter: *(excl|incl) (\\S*) (IP4|IP6|\\*) (\\S*) (.*)/,\n      names: ['filterMode', 'netType', 'addressTypes', 'destAddress', 'srcList'],\n      format: 'source-filter: %s %s %s %s %s'\n    }, {\n      // a=bundle-only\n      name: 'bundleOnly',\n      reg: /^(bundle-only)/\n    }, {\n      // a=label:1\n      name: 'label',\n      reg: /^label:(.+)/,\n      format: 'label:%s'\n    }, {\n      // RFC version 26 for SCTP over DTLS\n      // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-5\n      name: 'sctpPort',\n      reg: /^sctp-port:(\\d+)$/,\n      format: 'sctp-port:%s'\n    }, {\n      // RFC version 26 for SCTP over DTLS\n      // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-6\n      name: 'maxMessageSize',\n      reg: /^max-message-size:(\\d+)$/,\n      format: 'max-message-size:%s'\n    }, {\n      // RFC7273\n      // a=ts-refclk:ptp=IEEE1588-2008:39-A7-94-FF-FE-07-CB-D0:37\n      push: 'tsRefClocks',\n      reg: /^ts-refclk:([^\\s=]*)(?:=(\\S*))?/,\n      names: ['clksrc', 'clksrcExt'],\n      format: function (o) {\n        return 'ts-refclk:%s' + (o.clksrcExt != null ? '=%s' : '');\n      }\n    }, {\n      // RFC7273\n      // a=mediaclk:direct=963214424\n      name: 'mediaClk',\n      reg: /^mediaclk:(?:id=(\\S*))? *([^\\s=]*)(?:=(\\S*))?(?: *rate=(\\d+)\\/(\\d+))?/,\n      names: ['id', 'mediaClockName', 'mediaClockValue', 'rateNumerator', 'rateDenominator'],\n      format: function (o) {\n        var str = 'mediaclk:';\n        str += o.id != null ? 'id=%s %s' : '%v%s';\n        str += o.mediaClockValue != null ? '=%s' : '';\n        str += o.rateNumerator != null ? ' rate=%s' : '';\n        str += o.rateDenominator != null ? '/%s' : '';\n        return str;\n      }\n    }, {\n      // a=keywds:keywords\n      name: 'keywords',\n      reg: /^keywds:(.+)$/,\n      format: 'keywds:%s'\n    }, {\n      // a=content:main\n      name: 'content',\n      reg: /^content:(.+)/,\n      format: 'content:%s'\n    },\n    // BFCP https://tools.ietf.org/html/rfc4583\n    {\n      // a=floorctrl:c-s\n      name: 'bfcpFloorCtrl',\n      reg: /^floorctrl:(c-only|s-only|c-s)/,\n      format: 'floorctrl:%s'\n    }, {\n      // a=confid:1\n      name: 'bfcpConfId',\n      reg: /^confid:(\\d+)/,\n      format: 'confid:%s'\n    }, {\n      // a=userid:1\n      name: 'bfcpUserId',\n      reg: /^userid:(\\d+)/,\n      format: 'userid:%s'\n    }, {\n      // a=floorid:1\n      name: 'bfcpFloorId',\n      reg: /^floorid:(.+) (?:m-stream|mstrm):(.+)/,\n      names: ['id', 'mStream'],\n      format: 'floorid:%s mstrm:%s'\n    }, {\n      // any a= that we don't understand is kept verbatim on media.invalid\n      push: 'invalid',\n      names: ['value']\n    }]\n  };\n\n  // set sensible defaults to avoid polluting the grammar with boring details\n  Object.keys(grammar$1).forEach(function (key) {\n    var objs = grammar$1[key];\n    objs.forEach(function (obj) {\n      if (!obj.reg) {\n        obj.reg = /(.*)/;\n      }\n      if (!obj.format) {\n        obj.format = '%s';\n      }\n    });\n  });\n  return grammar.exports;\n}var hasRequiredParser;\nfunction requireParser() {\n  if (hasRequiredParser) return parser;\n  hasRequiredParser = 1;\n  (function (exports) {\n    var toIntIfInt = function (v) {\n      return String(Number(v)) === v ? Number(v) : v;\n    };\n    var attachProperties = function (match, location, names, rawName) {\n      if (rawName && !names) {\n        location[rawName] = toIntIfInt(match[1]);\n      } else {\n        for (var i = 0; i < names.length; i += 1) {\n          if (match[i + 1] != null) {\n            location[names[i]] = toIntIfInt(match[i + 1]);\n          }\n        }\n      }\n    };\n    var parseReg = function (obj, location, content) {\n      var needsBlank = obj.name && obj.names;\n      if (obj.push && !location[obj.push]) {\n        location[obj.push] = [];\n      } else if (needsBlank && !location[obj.name]) {\n        location[obj.name] = {};\n      }\n      var keyLocation = obj.push ? {} :\n      // blank object that will be pushed\n      needsBlank ? location[obj.name] : location; // otherwise, named location or root\n\n      attachProperties(content.match(obj.reg), keyLocation, obj.names, obj.name);\n      if (obj.push) {\n        location[obj.push].push(keyLocation);\n      }\n    };\n    var grammar = requireGrammar();\n    var validLine = RegExp.prototype.test.bind(/^([a-z])=(.*)/);\n    exports.parse = function (sdp) {\n      var session = {},\n        media = [],\n        location = session; // points at where properties go under (one of the above)\n\n      // parse lines we understand\n      sdp.split(/(\\r\\n|\\r|\\n)/).filter(validLine).forEach(function (l) {\n        var type = l[0];\n        var content = l.slice(2);\n        if (type === 'm') {\n          media.push({\n            rtp: [],\n            fmtp: []\n          });\n          location = media[media.length - 1]; // point at latest media line\n        }\n        for (var j = 0; j < (grammar[type] || []).length; j += 1) {\n          var obj = grammar[type][j];\n          if (obj.reg.test(content)) {\n            return parseReg(obj, location, content);\n          }\n        }\n      });\n      session.media = media; // link it up\n      return session;\n    };\n    var paramReducer = function (acc, expr) {\n      var s = expr.split(/=(.+)/, 2);\n      if (s.length === 2) {\n        acc[s[0]] = toIntIfInt(s[1]);\n      } else if (s.length === 1 && expr.length > 1) {\n        acc[s[0]] = undefined;\n      }\n      return acc;\n    };\n    exports.parseParams = function (str) {\n      return str.split(/;\\s?/).reduce(paramReducer, {});\n    };\n\n    // For backward compatibility - alias will be removed in 3.0.0\n    exports.parseFmtpConfig = exports.parseParams;\n    exports.parsePayloads = function (str) {\n      return str.toString().split(' ').map(Number);\n    };\n    exports.parseRemoteCandidates = function (str) {\n      var candidates = [];\n      var parts = str.split(' ').map(toIntIfInt);\n      for (var i = 0; i < parts.length; i += 3) {\n        candidates.push({\n          component: parts[i],\n          ip: parts[i + 1],\n          port: parts[i + 2]\n        });\n      }\n      return candidates;\n    };\n    exports.parseImageAttributes = function (str) {\n      return str.split(' ').map(function (item) {\n        return item.substring(1, item.length - 1).split(',').reduce(paramReducer, {});\n      });\n    };\n    exports.parseSimulcastStreamList = function (str) {\n      return str.split(';').map(function (stream) {\n        return stream.split(',').map(function (format) {\n          var scid,\n            paused = false;\n          if (format[0] !== '~') {\n            scid = toIntIfInt(format);\n          } else {\n            scid = toIntIfInt(format.substring(1, format.length));\n            paused = true;\n          }\n          return {\n            scid: scid,\n            paused: paused\n          };\n        });\n      });\n    };\n  })(parser);\n  return parser;\n}var writer;\nvar hasRequiredWriter;\nfunction requireWriter() {\n  if (hasRequiredWriter) return writer;\n  hasRequiredWriter = 1;\n  var grammar = requireGrammar();\n\n  // customized util.format - discards excess arguments and can void middle ones\n  var formatRegExp = /%[sdv%]/g;\n  var format = function (formatStr) {\n    var i = 1;\n    var args = arguments;\n    var len = args.length;\n    return formatStr.replace(formatRegExp, function (x) {\n      if (i >= len) {\n        return x; // missing argument\n      }\n      var arg = args[i];\n      i += 1;\n      switch (x) {\n        case '%%':\n          return '%';\n        case '%s':\n          return String(arg);\n        case '%d':\n          return Number(arg);\n        case '%v':\n          return '';\n      }\n    });\n    // NB: we discard excess arguments - they are typically undefined from makeLine\n  };\n  var makeLine = function (type, obj, location) {\n    var str = obj.format instanceof Function ? obj.format(obj.push ? location : location[obj.name]) : obj.format;\n    var args = [type + '=' + str];\n    if (obj.names) {\n      for (var i = 0; i < obj.names.length; i += 1) {\n        var n = obj.names[i];\n        if (obj.name) {\n          args.push(location[obj.name][n]);\n        } else {\n          // for mLine and push attributes\n          args.push(location[obj.names[i]]);\n        }\n      }\n    } else {\n      args.push(location[obj.name]);\n    }\n    return format.apply(null, args);\n  };\n\n  // RFC specified order\n  // TODO: extend this with all the rest\n  var defaultOuterOrder = ['v', 'o', 's', 'i', 'u', 'e', 'p', 'c', 'b', 't', 'r', 'z', 'a'];\n  var defaultInnerOrder = ['i', 'c', 'b', 'a'];\n  writer = function (session, opts) {\n    opts = opts || {};\n    // ensure certain properties exist\n    if (session.version == null) {\n      session.version = 0; // 'v=0' must be there (only defined version atm)\n    }\n    if (session.name == null) {\n      session.name = ' '; // 's= ' must be there if no meaningful name set\n    }\n    session.media.forEach(function (mLine) {\n      if (mLine.payloads == null) {\n        mLine.payloads = '';\n      }\n    });\n    var outerOrder = opts.outerOrder || defaultOuterOrder;\n    var innerOrder = opts.innerOrder || defaultInnerOrder;\n    var sdp = [];\n\n    // loop through outerOrder for matching properties on session\n    outerOrder.forEach(function (type) {\n      grammar[type].forEach(function (obj) {\n        if (obj.name in session && session[obj.name] != null) {\n          sdp.push(makeLine(type, obj, session));\n        } else if (obj.push in session && session[obj.push] != null) {\n          session[obj.push].forEach(function (el) {\n            sdp.push(makeLine(type, obj, el));\n          });\n        }\n      });\n    });\n\n    // then for each media line, follow the innerOrder\n    session.media.forEach(function (mLine) {\n      sdp.push(makeLine('m', grammar.m[0], mLine));\n      innerOrder.forEach(function (type) {\n        grammar[type].forEach(function (obj) {\n          if (obj.name in mLine && mLine[obj.name] != null) {\n            sdp.push(makeLine(type, obj, mLine));\n          } else if (obj.push in mLine && mLine[obj.push] != null) {\n            mLine[obj.push].forEach(function (el) {\n              sdp.push(makeLine(type, obj, el));\n            });\n          }\n        });\n      });\n    });\n    return sdp.join('\\r\\n') + '\\r\\n';\n  };\n  return writer;\n}var hasRequiredLib;\nfunction requireLib() {\n  if (hasRequiredLib) return lib;\n  hasRequiredLib = 1;\n  var parser = requireParser();\n  var writer = requireWriter();\n  var grammar = requireGrammar();\n  lib.grammar = grammar;\n  lib.write = writer;\n  lib.parse = parser.parse;\n  lib.parseParams = parser.parseParams;\n  lib.parseFmtpConfig = parser.parseFmtpConfig; // Alias of parseParams().\n  lib.parsePayloads = parser.parsePayloads;\n  lib.parseRemoteCandidates = parser.parseRemoteCandidates;\n  lib.parseImageAttributes = parser.parseImageAttributes;\n  lib.parseSimulcastStreamList = parser.parseSimulcastStreamList;\n  return lib;\n}var libExports = requireLib();/* The svc codec (av1/vp9) would use a very low bitrate at the begining and\nincrease slowly by the bandwidth estimator until it reach the target bitrate. The\nprocess commonly cost more than 10 seconds cause subscriber will get blur video at\nthe first few seconds. So we use a 70% of target bitrate here as the start bitrate to\neliminate this issue.\n*/\nconst startBitrateForSVC = 0.7;\nconst debounceInterval = 20;\nconst PCEvents = {\n  NegotiationStarted: 'negotiationStarted',\n  NegotiationComplete: 'negotiationComplete',\n  // Fired with the offerId for every successful publisher answer application,\n  // including answers that immediately recurse into another offer via\n  // `renegotiate`. Use this rather than NegotiationComplete to know that a\n  // specific offer has been negotiated end-to-end.\n  OfferAnswered: 'offerAnswered',\n  RTPVideoPayloadTypes: 'rtpVideoPayloadTypes'\n};\n/** @internal */\nclass PCTransport extends eventsExports.EventEmitter {\n  get pc() {\n    if (!this._pc) {\n      this._pc = this.createPC();\n    }\n    return this._pc;\n  }\n  constructor(config) {\n    let loggerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a;\n    super();\n    this.log = livekitLogger;\n    this.ddExtID = 0;\n    this.latestOfferId = 0;\n    this.latestAcknowledgedOfferId = 0;\n    this.pendingCandidates = [];\n    this.restartingIce = false;\n    this.renegotiate = false;\n    this.trackBitrates = [];\n    this.remoteStereoMids = [];\n    this.remoteNackMids = [];\n    // debounced negotiate interface\n    this.negotiate = debounce(onError => __awaiter(this, void 0, void 0, function* () {\n      this.emit(PCEvents.NegotiationStarted);\n      try {\n        yield this.createAndSendOffer();\n      } catch (e) {\n        if (onError) {\n          onError(e);\n        } else {\n          throw e;\n        }\n      }\n    }), debounceInterval);\n    this.close = () => {\n      if (!this._pc) {\n        return;\n      }\n      this.pendingInitialOffer = undefined;\n      this._pc.close();\n      this._pc.onconnectionstatechange = null;\n      this._pc.oniceconnectionstatechange = null;\n      this._pc.onicegatheringstatechange = null;\n      this._pc.ondatachannel = null;\n      this._pc.onnegotiationneeded = null;\n      this._pc.onsignalingstatechange = null;\n      this._pc.onicecandidate = null;\n      this._pc.ondatachannel = null;\n      this._pc.ontrack = null;\n      this._pc.onconnectionstatechange = null;\n      this._pc.oniceconnectionstatechange = null;\n      this._pc = null;\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.PCTransport);\n    this.loggerOptions = loggerOptions;\n    this.config = config;\n    this._pc = this.createPC();\n    this.offerLock = new _();\n  }\n  createPC() {\n    const pc = new RTCPeerConnection(this.config);\n    pc.onicecandidate = ev => {\n      var _a;\n      if (!ev.candidate) return;\n      (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, ev.candidate);\n    };\n    pc.onicecandidateerror = ev => {\n      var _a;\n      (_a = this.onIceCandidateError) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    pc.oniceconnectionstatechange = () => {\n      var _a;\n      (_a = this.onIceConnectionStateChange) === null || _a === void 0 ? void 0 : _a.call(this, pc.iceConnectionState);\n    };\n    pc.onsignalingstatechange = () => {\n      var _a;\n      (_a = this.onSignalingStatechange) === null || _a === void 0 ? void 0 : _a.call(this, pc.signalingState);\n    };\n    pc.onconnectionstatechange = () => {\n      var _a;\n      (_a = this.onConnectionStateChange) === null || _a === void 0 ? void 0 : _a.call(this, pc.connectionState);\n    };\n    pc.ondatachannel = ev => {\n      var _a;\n      (_a = this.onDataChannel) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    pc.ontrack = ev => {\n      var _a;\n      (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    return pc;\n  }\n  get logContext() {\n    var _a, _b;\n    return Object.assign({}, (_b = (_a = this.loggerOptions).loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n  }\n  get isICEConnected() {\n    return this._pc !== null && (this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed');\n  }\n  addIceCandidate(candidate) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.pc.remoteDescription && !this.restartingIce) {\n        return this.pc.addIceCandidate(candidate);\n      }\n      this.pendingCandidates.push(candidate);\n    });\n  }\n  setRemoteDescription(sd, offerId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (sd.type === 'answer' && this.latestOfferId > 0 && offerId > 0 && offerId !== this.latestOfferId) {\n        this.log.warn('ignoring answer for old offer', Object.assign(Object.assign({}, this.logContext), {\n          offerId,\n          latestOfferId: this.latestOfferId\n        }));\n        return false;\n      }\n      let mungedSDP = undefined;\n      if (sd.type === 'offer') {\n        let _extractStereoAndNack = extractStereoAndNackAudioFromOffer(sd),\n          stereoMids = _extractStereoAndNack.stereoMids,\n          nackMids = _extractStereoAndNack.nackMids;\n        this.remoteStereoMids = stereoMids;\n        this.remoteNackMids = nackMids;\n      } else if (sd.type === 'answer') {\n        if (this.pendingInitialOffer && this._pc) {\n          const initialOffer = this.pendingInitialOffer;\n          this.pendingInitialOffer = undefined;\n          const sdpParsed = libExports.parse((_a = initialOffer.sdp) !== null && _a !== void 0 ? _a : '');\n          sdpParsed.media.forEach(media => {\n            ensureIPAddrMatchVersion(media);\n          });\n          this.log.debug('setting pending initial offer before processing answer', this.logContext);\n          yield this.setMungedSDP(initialOffer, libExports.write(sdpParsed));\n        }\n        const sdpParsed = libExports.parse((_b = sd.sdp) !== null && _b !== void 0 ? _b : '');\n        sdpParsed.media.forEach(media => {\n          const mid = getMidString(media.mid);\n          if (media.type === 'audio') {\n            // munge sdp for opus bitrate settings\n            this.trackBitrates.some(trackbr => {\n              if (!trackbr.transceiver || mid != trackbr.transceiver.mid) {\n                return false;\n              }\n              let codecPayload = 0;\n              media.rtp.some(rtp => {\n                if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {\n                  codecPayload = rtp.payload;\n                  return true;\n                }\n                return false;\n              });\n              if (codecPayload === 0) {\n                return true;\n              }\n              let fmtpFound = false;\n              for (const fmtp of media.fmtp) {\n                if (fmtp.payload === codecPayload) {\n                  fmtp.config = fmtp.config.split(';').filter(attr => !attr.includes('maxaveragebitrate')).join(';');\n                  if (trackbr.maxbr > 0) {\n                    fmtp.config += \";maxaveragebitrate=\".concat(trackbr.maxbr * 1000);\n                  }\n                  fmtpFound = true;\n                  break;\n                }\n              }\n              if (!fmtpFound) {\n                if (trackbr.maxbr > 0) {\n                  media.fmtp.push({\n                    payload: codecPayload,\n                    config: \"maxaveragebitrate=\".concat(trackbr.maxbr * 1000)\n                  });\n                }\n              }\n              return true;\n            });\n          }\n        });\n        mungedSDP = libExports.write(sdpParsed);\n      }\n      yield this.setMungedSDP(sd, mungedSDP, true);\n      this.pendingCandidates.forEach(candidate => {\n        this.pc.addIceCandidate(candidate);\n      });\n      this.pendingCandidates = [];\n      this.restartingIce = false;\n      // Fire OfferAnswered for every successfully applied answer, including the\n      // ones that recurse into another offer via `renegotiate`. Callers waiting\n      // on a specific offerId can resolve as soon as their offer's answer is in.\n      if (sd.type === 'answer') {\n        this.latestAcknowledgedOfferId = offerId;\n        this.emit(PCEvents.OfferAnswered, offerId);\n      }\n      if (this.renegotiate) {\n        this.renegotiate = false;\n        yield this.createAndSendOffer();\n      } else if (sd.type === 'answer') {\n        this.emit(PCEvents.NegotiationComplete);\n        if (sd.sdp) {\n          const sdpParsed = libExports.parse(sd.sdp);\n          sdpParsed.media.forEach(media => {\n            if (media.type === 'video') {\n              this.emit(PCEvents.RTPVideoPayloadTypes, media.rtp);\n            }\n          });\n        }\n      }\n      return true;\n    });\n  }\n  createInitialOffer() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.offerLock.lock();\n      try {\n        if (this.pc.signalingState !== 'stable') {\n          this.log.warn('signaling state is not stable, cannot create initial offer', this.logContext);\n          return;\n        }\n        const offerId = this.latestOfferId + 1;\n        this.latestOfferId = offerId;\n        const offer = yield this.pc.createOffer();\n        this.pendingInitialOffer = {\n          sdp: offer.sdp,\n          type: offer.type\n        };\n        const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n        sdpParsed.media.forEach(media => {\n          ensureIPAddrMatchVersion(media);\n        });\n        offer.sdp = libExports.write(sdpParsed);\n        return {\n          offer,\n          offerId\n        };\n      } finally {\n        unlock();\n      }\n    });\n  }\n  createAndSendOffer(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.offerLock.lock();\n      try {\n        if (this.onOffer === undefined) {\n          return;\n        }\n        if (options === null || options === void 0 ? void 0 : options.iceRestart) {\n          this.log.debug('restarting ICE', this.logContext);\n          this.restartingIce = true;\n        }\n        if (this._pc && (this._pc.signalingState === 'have-local-offer' || this.pendingInitialOffer)) {\n          // we're waiting for the peer to accept our offer, so we'll just wait\n          // the only exception to this is when ICE restart is needed\n          const currentSD = this._pc.remoteDescription;\n          if ((options === null || options === void 0 ? void 0 : options.iceRestart) && currentSD) {\n            // TODO: handle when ICE restart is needed but we don't have a remote description\n            // the best thing to do is to recreate the peerconnection\n            yield this._pc.setRemoteDescription(currentSD);\n          } else {\n            this.renegotiate = true;\n            this.log.debug('requesting renegotiation', Object.assign({}, this.logContext));\n            return;\n          }\n        } else if (!this._pc || this._pc.signalingState === 'closed') {\n          this.log.warn('could not createOffer with closed peer connection', this.logContext);\n          return;\n        }\n        // actually negotiate\n        this.log.debug('starting to negotiate', this.logContext);\n        // increase the offer id at the start to ensure the offer is always > 0 so that we can use 0 as a default value for legacy behavior\n        const offerId = this.latestOfferId + 1;\n        this.latestOfferId = offerId;\n        const offer = yield this.pc.createOffer(options);\n        this.log.debug('original offer', Object.assign({\n          sdp: offer.sdp\n        }, this.logContext));\n        const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n        sdpParsed.media.forEach(media => {\n          ensureIPAddrMatchVersion(media);\n          if (media.type === 'audio') {\n            ensureAudioNackAndStereo(media, ['all'], []);\n          } else if (media.type === 'video') {\n            this.trackBitrates.some(trackbr => {\n              if (!media.msid || !trackbr.cid || !media.msid.includes(trackbr.cid)) {\n                return false;\n              }\n              let codecPayload = 0;\n              media.rtp.some(rtp => {\n                if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {\n                  codecPayload = rtp.payload;\n                  return true;\n                }\n                return false;\n              });\n              if (codecPayload === 0) {\n                return true;\n              }\n              if (isSVCCodec(trackbr.codec) && !isSafari()) {\n                this.ensureVideoDDExtensionForSVC(media, sdpParsed);\n              }\n              // mung sdp for bitrate setting that can't apply by sendEncoding\n              if (!isSVCCodec(trackbr.codec)) {\n                return true;\n              }\n              const startBitrate = Math.round(trackbr.maxbr * startBitrateForSVC);\n              for (const fmtp of media.fmtp) {\n                if (fmtp.payload === codecPayload) {\n                  // if another track's fmtp already is set, we cannot override the bitrate\n                  // this has the unfortunate consequence of being forced to use the\n                  // initial track's bitrate for all tracks\n                  if (!fmtp.config.includes('x-google-start-bitrate')) {\n                    fmtp.config += \";x-google-start-bitrate=\".concat(startBitrate);\n                  }\n                  break;\n                }\n              }\n              return true;\n            });\n          }\n        });\n        if (this.latestOfferId > offerId) {\n          this.log.warn('latestOfferId mismatch', Object.assign(Object.assign({}, this.logContext), {\n            latestOfferId: this.latestOfferId,\n            offerId\n          }));\n          return;\n        }\n        yield this.setMungedSDP(offer, libExports.write(sdpParsed));\n        this.onOffer(offer, this.latestOfferId);\n      } finally {\n        unlock();\n      }\n    });\n  }\n  createAndSetAnswer() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const answer = yield this.pc.createAnswer();\n      const sdpParsed = libExports.parse((_a = answer.sdp) !== null && _a !== void 0 ? _a : '');\n      sdpParsed.media.forEach(media => {\n        ensureIPAddrMatchVersion(media);\n        if (media.type === 'audio') {\n          ensureAudioNackAndStereo(media, this.remoteStereoMids, this.remoteNackMids);\n        }\n      });\n      yield this.setMungedSDP(answer, libExports.write(sdpParsed));\n      return answer;\n    });\n  }\n  createDataChannel(label, dataChannelDict) {\n    return this.pc.createDataChannel(label, dataChannelDict);\n  }\n  addTransceiver(mediaStreamTrack, transceiverInit) {\n    return this.pc.addTransceiver(mediaStreamTrack, transceiverInit);\n  }\n  addTransceiverOfKind(kind, transceiverInit) {\n    return this.pc.addTransceiver(kind, transceiverInit);\n  }\n  addTrack(track) {\n    if (!this._pc) {\n      throw new UnexpectedConnectionState('PC closed, cannot add track');\n    }\n    return this._pc.addTrack(track);\n  }\n  setTrackCodecBitrate(info) {\n    this.trackBitrates.push(info);\n  }\n  setConfiguration(rtcConfig) {\n    var _a;\n    if (!this._pc) {\n      throw new UnexpectedConnectionState('PC closed, cannot configure');\n    }\n    return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.setConfiguration(rtcConfig);\n  }\n  canRemoveTrack() {\n    var _a;\n    return !!((_a = this._pc) === null || _a === void 0 ? void 0 : _a.removeTrack);\n  }\n  removeTrack(sender) {\n    var _a;\n    return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.removeTrack(sender);\n  }\n  getConnectionState() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.connectionState) !== null && _b !== void 0 ? _b : 'closed';\n  }\n  getICEConnectionState() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.iceConnectionState) !== null && _b !== void 0 ? _b : 'closed';\n  }\n  getSignallingState() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.signalingState) !== null && _b !== void 0 ? _b : 'closed';\n  }\n  getTransceivers() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : [];\n  }\n  getSenders() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.getSenders()) !== null && _b !== void 0 ? _b : [];\n  }\n  getLocalDescription() {\n    var _a;\n    return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.localDescription;\n  }\n  getRemoteDescription() {\n    var _a;\n    return (_a = this.pc) === null || _a === void 0 ? void 0 : _a.remoteDescription;\n  }\n  getStats() {\n    return this.pc.getStats();\n  }\n  getMaxMessageSize() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.sctp) === null || _b === void 0 ? void 0 : _b.maxMessageSize;\n  }\n  getConnectedAddress() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!this._pc) {\n        return;\n      }\n      let selectedCandidatePairId = '';\n      const candidatePairs = new Map();\n      // id -> candidate ip\n      const candidates = new Map();\n      const stats = yield this._pc.getStats();\n      stats.forEach(v => {\n        switch (v.type) {\n          case 'transport':\n            selectedCandidatePairId = v.selectedCandidatePairId;\n            break;\n          case 'candidate-pair':\n            if (selectedCandidatePairId === '' && v.selected) {\n              selectedCandidatePairId = v.id;\n            }\n            candidatePairs.set(v.id, v);\n            break;\n          case 'remote-candidate':\n            candidates.set(v.id, \"\".concat(v.address, \":\").concat(v.port));\n            break;\n        }\n      });\n      if (selectedCandidatePairId === '') {\n        return undefined;\n      }\n      const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;\n      if (selectedID === undefined) {\n        return undefined;\n      }\n      return candidates.get(selectedID);\n    });\n  }\n  setMungedSDP(sd, munged, remote) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      const originalSdp = sd.sdp;\n      if (munged) {\n        sd.sdp = munged;\n        try {\n          this.log.debug(\"setting munged \".concat(remote ? 'remote' : 'local', \" description\"), this.logContext);\n          if (remote) {\n            yield this.pc.setRemoteDescription(sd);\n          } else {\n            yield this.pc.setLocalDescription(sd);\n          }\n          return;\n        } catch (e) {\n          this.log.warn(\"not able to set \".concat(sd.type, \", falling back to unmodified sdp\"), Object.assign(Object.assign({}, this.logContext), {\n            error: e,\n            mungedSdp: munged,\n            originalSdp\n          }));\n          sd.sdp = originalSdp;\n        }\n      }\n      try {\n        if (remote) {\n          yield (_a = this._pc) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(sd);\n        } else {\n          yield (_b = this._pc) === null || _b === void 0 ? void 0 : _b.setLocalDescription(sd);\n        }\n      } catch (e) {\n        let msg = 'unknown error';\n        if (e instanceof Error) {\n          msg = e.message;\n        } else if (typeof e === 'string') {\n          msg = e;\n        }\n        const fields = {\n          error: msg,\n          sdp: sd.sdp\n        };\n        if (munged && munged !== originalSdp) {\n          fields.mungedSdp = munged;\n        }\n        if (!remote && this.pc.remoteDescription) {\n          fields.remoteSdp = this.pc.remoteDescription;\n        }\n        this.log.error(\"unable to set \".concat(sd.type), Object.assign(Object.assign({}, this.logContext), {\n          fields\n        }));\n        throw new NegotiationError(msg);\n      }\n    });\n  }\n  ensureVideoDDExtensionForSVC(media, sdp) {\n    var _a, _b;\n    const ddFound = (_a = media.ext) === null || _a === void 0 ? void 0 : _a.some(ext => {\n      if (ext.uri === ddExtensionURI) {\n        return true;\n      }\n      return false;\n    });\n    if (!ddFound) {\n      if (this.ddExtID === 0) {\n        let maxID = 0;\n        sdp.media.forEach(m => {\n          var _a;\n          (_a = m.ext) === null || _a === void 0 ? void 0 : _a.forEach(ext => {\n            if (ext.value > maxID) {\n              maxID = ext.value;\n            }\n          });\n        });\n        this.ddExtID = maxID + 1;\n      }\n      (_b = media.ext) === null || _b === void 0 ? void 0 : _b.push({\n        value: this.ddExtID,\n        uri: ddExtensionURI\n      });\n    }\n  }\n}\nfunction ensureAudioNackAndStereo(media, stereoMids, nackMids) {\n  // sdp-transform types don't include number however the parser outputs mids as numbers in some cases\n  const mid = getMidString(media.mid);\n  // found opus codec to add nack fb\n  let opusPayload = 0;\n  media.rtp.some(rtp => {\n    if (rtp.codec === 'opus') {\n      opusPayload = rtp.payload;\n      return true;\n    }\n    return false;\n  });\n  // add nack rtcpfb if not exist\n  if (opusPayload > 0) {\n    if (!media.rtcpFb) {\n      media.rtcpFb = [];\n    }\n    if (nackMids.includes(mid) && !media.rtcpFb.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {\n      media.rtcpFb.push({\n        payload: opusPayload,\n        type: 'nack'\n      });\n    }\n    if (stereoMids.includes(mid) || stereoMids.length === 1 && stereoMids[0] === 'all') {\n      media.fmtp.some(fmtp => {\n        if (fmtp.payload === opusPayload) {\n          if (!fmtp.config.includes('stereo=1')) {\n            fmtp.config += ';stereo=1';\n          }\n          return true;\n        }\n        return false;\n      });\n    }\n  }\n}\nfunction extractStereoAndNackAudioFromOffer(offer) {\n  var _a;\n  const stereoMids = [];\n  const nackMids = [];\n  const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n  let opusPayload = 0;\n  sdpParsed.media.forEach(media => {\n    var _a;\n    const mid = getMidString(media.mid);\n    if (media.type === 'audio') {\n      media.rtp.some(rtp => {\n        if (rtp.codec === 'opus') {\n          opusPayload = rtp.payload;\n          return true;\n        }\n        return false;\n      });\n      if ((_a = media.rtcpFb) === null || _a === void 0 ? void 0 : _a.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {\n        nackMids.push(mid);\n      }\n      media.fmtp.some(fmtp => {\n        if (fmtp.payload === opusPayload) {\n          if (fmtp.config.includes('sprop-stereo=1')) {\n            stereoMids.push(mid);\n          }\n          return true;\n        }\n        return false;\n      });\n    }\n  });\n  return {\n    stereoMids,\n    nackMids\n  };\n}\nfunction ensureIPAddrMatchVersion(media) {\n  // Chrome could generate sdp with c = IN IP4 <ipv6 addr>\n  // in edge case and return error when set sdp.This is not a\n  // sdk error but correct it if the issue detected.\n  if (media.connection) {\n    const isV6 = media.connection.ip.indexOf(':') >= 0;\n    if (media.connection.version === 4 && isV6 || media.connection.version === 6 && !isV6) {\n      // fallback to dummy address\n      media.connection.ip = '0.0.0.0';\n      media.connection.version = 4;\n    }\n  }\n}\nfunction getMidString(mid) {\n  return typeof mid === 'number' ? mid.toFixed(0) : mid;\n}const defaultVideoCodec = 'vp8';\nconst publishDefaults = {\n  audioPreset: AudioPresets.music,\n  dtx: true,\n  red: true,\n  forceStereo: false,\n  simulcast: true,\n  screenShareEncoding: ScreenSharePresets.h1080fps15.encoding,\n  stopMicTrackOnMute: false,\n  videoCodec: defaultVideoCodec,\n  backupCodec: true,\n  preConnectBuffer: false\n};\nconst audioDefaults = {\n  deviceId: {\n    ideal: 'default'\n  },\n  autoGainControl: true,\n  echoCancellation: true,\n  noiseSuppression: true,\n  voiceIsolation: true\n};\nconst videoDefaults = {\n  deviceId: {\n    ideal: 'default'\n  },\n  resolution: VideoPresets.h720.resolution\n};\nconst roomOptionDefaults = {\n  adaptiveStream: false,\n  dynacast: false,\n  stopLocalTrackOnUnpublish: true,\n  reconnectPolicy: new DefaultReconnectPolicy(),\n  disconnectOnPageLeave: true,\n  webAudioMix: false,\n  singlePeerConnection: true\n};\nconst roomConnectOptionDefaults = {\n  autoSubscribe: true,\n  maxRetries: 1,\n  peerConnectionTimeout: 15000,\n  websocketTimeout: 15000\n};var PCTransportState;\n(function (PCTransportState) {\n  PCTransportState[PCTransportState[\"NEW\"] = 0] = \"NEW\";\n  PCTransportState[PCTransportState[\"CONNECTING\"] = 1] = \"CONNECTING\";\n  PCTransportState[PCTransportState[\"CONNECTED\"] = 2] = \"CONNECTED\";\n  PCTransportState[PCTransportState[\"FAILED\"] = 3] = \"FAILED\";\n  PCTransportState[PCTransportState[\"CLOSING\"] = 4] = \"CLOSING\";\n  PCTransportState[PCTransportState[\"CLOSED\"] = 5] = \"CLOSED\";\n})(PCTransportState || (PCTransportState = {}));\nclass PCTransportManager {\n  get needsPublisher() {\n    return this.isPublisherConnectionRequired;\n  }\n  get needsSubscriber() {\n    return this.isSubscriberConnectionRequired;\n  }\n  get currentState() {\n    return this.state;\n  }\n  get mode() {\n    return this._mode;\n  }\n  constructor(mode, loggerOptions, rtcConfig) {\n    var _a;\n    this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;\n    this.log = livekitLogger;\n    this.updateState = () => {\n      var _a, _b;\n      const previousState = this.state;\n      const connectionStates = this.requiredTransports.map(tr => tr.getConnectionState());\n      if (connectionStates.every(st => st === 'connected')) {\n        this.state = PCTransportState.CONNECTED;\n      } else if (connectionStates.some(st => st === 'failed')) {\n        this.state = PCTransportState.FAILED;\n      } else if (connectionStates.some(st => st === 'connecting')) {\n        this.state = PCTransportState.CONNECTING;\n      } else if (connectionStates.every(st => st === 'closed')) {\n        this.state = PCTransportState.CLOSED;\n      } else if (connectionStates.some(st => st === 'closed')) {\n        this.state = PCTransportState.CLOSING;\n      } else if (connectionStates.every(st => st === 'new')) {\n        this.state = PCTransportState.NEW;\n      }\n      if (previousState !== this.state) {\n        this.log.debug(\"pc state change: from \".concat(PCTransportState[previousState], \" to \").concat(PCTransportState[this.state]), this.logContext);\n        (_a = this.onStateChange) === null || _a === void 0 ? void 0 : _a.call(this, this.state, this.publisher.getConnectionState(), (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.getConnectionState());\n      }\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.PCManager);\n    this.loggerOptions = loggerOptions;\n    this.isPublisherConnectionRequired = mode !== 'subscriber-primary';\n    this.isSubscriberConnectionRequired = mode === 'subscriber-primary';\n    this.publisher = new PCTransport(rtcConfig, loggerOptions);\n    this._mode = mode;\n    if (mode !== 'publisher-only') {\n      this.subscriber = new PCTransport(rtcConfig, loggerOptions);\n      this.subscriber.onConnectionStateChange = this.updateState;\n      this.subscriber.onIceConnectionStateChange = this.updateState;\n      this.subscriber.onSignalingStatechange = this.updateState;\n      this.subscriber.onIceCandidate = candidate => {\n        var _a;\n        (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, candidate, SignalTarget.SUBSCRIBER);\n      };\n      // in subscriber primary mode, server side opens sub data channels.\n      this.subscriber.onDataChannel = ev => {\n        var _a;\n        (_a = this.onDataChannel) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n      };\n      this.subscriber.onTrack = ev => {\n        var _a;\n        (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n      };\n    }\n    this.publisher.onConnectionStateChange = this.updateState;\n    this.publisher.onIceConnectionStateChange = this.updateState;\n    this.publisher.onSignalingStatechange = this.updateState;\n    this.publisher.onIceCandidate = candidate => {\n      var _a;\n      (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, candidate, SignalTarget.PUBLISHER);\n    };\n    this.publisher.onTrack = ev => {\n      var _a;\n      (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    this.publisher.onOffer = (offer, offerId) => {\n      var _a;\n      (_a = this.onPublisherOffer) === null || _a === void 0 ? void 0 : _a.call(this, offer, offerId);\n    };\n    this.state = PCTransportState.NEW;\n    this.connectionLock = new _();\n    this.remoteOfferLock = new _();\n  }\n  get logContext() {\n    var _a, _b;\n    return Object.assign({}, (_b = (_a = this.loggerOptions).loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n  }\n  requirePublisher() {\n    let require = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    this.isPublisherConnectionRequired = require;\n    this.updateState();\n  }\n  createAndSendPublisherOffer(options) {\n    return this.publisher.createAndSendOffer(options);\n  }\n  setPublisherAnswer(sd, offerId) {\n    return this.publisher.setRemoteDescription(sd, offerId);\n  }\n  removeTrack(sender) {\n    return this.publisher.removeTrack(sender);\n  }\n  close() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (this.publisher && this.publisher.getSignallingState() !== 'closed') {\n        const publisher = this.publisher;\n        for (const sender of publisher.getSenders()) {\n          try {\n            // TODO: react-native-webrtc doesn't have removeTrack yet.\n            if (publisher.canRemoveTrack()) {\n              publisher.removeTrack(sender);\n            }\n          } catch (e) {\n            this.log.warn('could not removeTrack', Object.assign(Object.assign({}, this.logContext), {\n              error: e\n            }));\n          }\n        }\n      }\n      yield Promise.all([this.publisher.close(), (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.close()]);\n      this.updateState();\n    });\n  }\n  triggerIceRestart() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.subscriber) {\n        this.subscriber.restartingIce = true;\n      }\n      // only restart publisher if it's needed\n      if (this.needsPublisher) {\n        yield this.createAndSendPublisherOffer({\n          iceRestart: true\n        });\n      }\n    });\n  }\n  addIceCandidate(candidate, target) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (target === SignalTarget.PUBLISHER) {\n        yield this.publisher.addIceCandidate(candidate);\n      } else {\n        yield (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.addIceCandidate(candidate);\n      }\n    });\n  }\n  createSubscriberAnswerFromOffer(sd, offerId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      this.log.debug('received server offer', Object.assign(Object.assign({}, this.logContext), {\n        RTCSdpType: sd.type,\n        sdp: sd.sdp,\n        signalingState: (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.getSignallingState().toString()\n      }));\n      const unlock = yield this.remoteOfferLock.lock();\n      try {\n        const success = yield (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.setRemoteDescription(sd, offerId);\n        if (!success) {\n          return undefined;\n        }\n        // answer the offer\n        const answer = yield (_c = this.subscriber) === null || _c === void 0 ? void 0 : _c.createAndSetAnswer();\n        return answer;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  updateConfiguration(config, iceRestart) {\n    var _a;\n    this.publisher.setConfiguration(config);\n    (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.setConfiguration(config);\n    if (iceRestart) {\n      this.triggerIceRestart();\n    }\n  }\n  ensurePCTransportConnection(abortController, timeout) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.connectionLock.lock();\n      try {\n        if (this.isPublisherConnectionRequired && this.publisher.getConnectionState() !== 'connected' && this.publisher.getConnectionState() !== 'connecting') {\n          this.log.debug('negotiation required, start negotiating', this.logContext);\n          this.publisher.negotiate();\n        }\n        yield Promise.all((_a = this.requiredTransports) === null || _a === void 0 ? void 0 : _a.map(transport => this.ensureTransportConnected(transport, abortController, timeout)));\n      } finally {\n        unlock();\n      }\n    });\n  }\n  negotiate(abortController) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return new TypedPromise((resolve, reject) => {\n        // Capture the publisher's latest offer id at request time. We are done\n        // when an offer with a higher id has had its answer successfully\n        // applied — that offer is the one that includes any transceiver/SDP\n        // changes that motivated this negotiate call. Concurrent callers each\n        // get their own checkpoint and resolve independently.\n        const checkpoint = this.publisher.latestOfferId;\n        // Race: an answer past our checkpoint already arrived before we had a\n        // chance to subscribe.\n        if (this.publisher.latestAcknowledgedOfferId > checkpoint) {\n          this.log.debug(\"negotiation already handled in more recent acknowledged offer\", this.logContext);\n          resolve();\n          return;\n        }\n        let cleanedUp = false;\n        const cleanup = () => {\n          if (cleanedUp) return;\n          cleanedUp = true;\n          clearTimeout(deadlineTimer);\n          this.publisher.off(PCEvents.OfferAnswered, onAnswered);\n          abortController.signal.removeEventListener('abort', onAbort);\n        };\n        const onAnswered = offerId => {\n          if (offerId > checkpoint) {\n            cleanup();\n            resolve();\n          }\n        };\n        const onAbort = () => {\n          cleanup();\n          reject(new NegotiationError('negotiation aborted'));\n        };\n        // Single hard deadline as a backstop. Not reset on cycle progress —\n        // progress is tracked via OfferAnswered, not NegotiationStarted.\n        const deadlineTimer = setTimeout(() => {\n          cleanup();\n          reject(new NegotiationError('negotiation timed out'));\n        }, this.peerConnectionTimeout);\n        abortController.signal.addEventListener('abort', onAbort);\n        this.publisher.on(PCEvents.OfferAnswered, onAnswered);\n        this.publisher.negotiate(e => {\n          cleanup();\n          if (e instanceof Error) {\n            reject(e);\n          } else {\n            reject(new Error(String(e)));\n          }\n        });\n      });\n    });\n  }\n  addPublisherTransceiver(track, transceiverInit) {\n    return this.publisher.addTransceiver(track, transceiverInit);\n  }\n  addPublisherTransceiverOfKind(kind, transceiverInit) {\n    return this.publisher.addTransceiverOfKind(kind, transceiverInit);\n  }\n  getMidForReceiver(receiver) {\n    const transceivers = this.subscriber ? this.subscriber.getTransceivers() : this.publisher.getTransceivers();\n    const matchingTransceiver = transceivers.find(transceiver => transceiver.receiver === receiver);\n    return matchingTransceiver === null || matchingTransceiver === void 0 ? void 0 : matchingTransceiver.mid;\n  }\n  getMaxPublisherMessageSize() {\n    return this.publisher.getMaxMessageSize();\n  }\n  addPublisherTrack(track) {\n    return this.publisher.addTrack(track);\n  }\n  createPublisherDataChannel(label, dataChannelDict) {\n    return this.publisher.createDataChannel(label, dataChannelDict);\n  }\n  /**\n   * Returns the first required transport's address if no explicit target is specified\n   */\n  getConnectedAddress(target) {\n    if (target === SignalTarget.PUBLISHER) {\n      return this.publisher.getConnectedAddress();\n    } else if (target === SignalTarget.SUBSCRIBER) {\n      return this.publisher.getConnectedAddress();\n    }\n    return this.requiredTransports[0].getConnectedAddress();\n  }\n  get requiredTransports() {\n    const transports = [];\n    if (this.isPublisherConnectionRequired) {\n      transports.push(this.publisher);\n    }\n    if (this.isSubscriberConnectionRequired && this.subscriber) {\n      transports.push(this.subscriber);\n    }\n    return transports;\n  }\n  ensureTransportConnected(pcTransport_1, abortController_1) {\n    return __awaiter(this, arguments, void 0, function (pcTransport, abortController) {\n      var _this = this;\n      let timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.peerConnectionTimeout;\n      return function* () {\n        const connectionState = pcTransport.getConnectionState();\n        if (connectionState === 'connected') {\n          return;\n        }\n        return new Promise((resolve, reject) => __awaiter(_this, void 0, void 0, function* () {\n          const abortHandler = () => {\n            this.log.warn('abort transport connection', this.logContext);\n            CriticalTimers.clearTimeout(connectTimeout);\n            reject(ConnectionError.cancelled('room connection has been cancelled'));\n          };\n          if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {\n            abortHandler();\n          }\n          abortController === null || abortController === void 0 ? void 0 : abortController.signal.addEventListener('abort', abortHandler);\n          const connectTimeout = CriticalTimers.setTimeout(() => {\n            abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);\n            reject(ConnectionError.internal('could not establish pc connection'));\n          }, timeout);\n          while (this.state !== PCTransportState.CONNECTED) {\n            yield sleep(50); // FIXME we shouldn't rely on `sleep` in the connection paths, as it invokes `setTimeout` which can be drastically throttled by browser implementations\n            if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {\n              reject(ConnectionError.cancelled('room connection has been cancelled'));\n              return;\n            }\n          }\n          CriticalTimers.clearTimeout(connectTimeout);\n          abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);\n          resolve();\n        }));\n      }();\n    });\n  }\n}// Check if MediaRecorder is available\nconst isMediaRecorderAvailable = typeof MediaRecorder !== 'undefined';\n// Fallback class for environments without MediaRecorder\nclass FallbackRecorder {\n  constructor() {\n    throw new Error('MediaRecorder is not available in this environment');\n  }\n}\n// Use conditional inheritance to avoid parse-time errors\nconst RecorderBase = isMediaRecorderAvailable ? MediaRecorder : FallbackRecorder;\nclass LocalTrackRecorder extends RecorderBase {\n  constructor(track, options) {\n    if (!isMediaRecorderAvailable) {\n      throw new Error('MediaRecorder is not available in this environment');\n    }\n    super(new MediaStream([track.mediaStreamTrack]), options);\n    let dataListener;\n    let streamController;\n    const isClosed = () => streamController === undefined;\n    const onStop = () => {\n      this.removeEventListener('dataavailable', dataListener);\n      this.removeEventListener('stop', onStop);\n      this.removeEventListener('error', onError);\n      streamController === null || streamController === void 0 ? void 0 : streamController.close();\n      streamController = undefined;\n    };\n    const onError = event => {\n      streamController === null || streamController === void 0 ? void 0 : streamController.error(event);\n      this.removeEventListener('dataavailable', dataListener);\n      this.removeEventListener('stop', onStop);\n      this.removeEventListener('error', onError);\n      streamController = undefined;\n    };\n    this.byteStream = new ReadableStream({\n      start: controller => {\n        streamController = controller;\n        dataListener = event => __awaiter(this, void 0, void 0, function* () {\n          let data;\n          if (event.data.arrayBuffer) {\n            const arrayBuffer = yield event.data.arrayBuffer();\n            data = new Uint8Array(arrayBuffer);\n            // @ts-expect-error react-native passes over Uint8Arrays directly\n          } else if (event.data.byteArray) {\n            // @ts-expect-error\n            data = event.data.byteArray;\n          } else {\n            throw new Error('no data available!');\n          }\n          if (isClosed()) {\n            return;\n          }\n          controller.enqueue(data);\n        });\n        this.addEventListener('dataavailable', dataListener);\n      },\n      cancel: () => {\n        onStop();\n      }\n    });\n    this.addEventListener('stop', onStop);\n    this.addEventListener('error', onError);\n  }\n}\n// Helper function to check if recording is supported\nfunction isRecordingSupported() {\n  return isMediaRecorderAvailable;\n}const DEFAULT_DIMENSIONS_TIMEOUT = 1000;\nconst PRE_CONNECT_BUFFER_TIMEOUT = 10000;\nclass LocalTrack extends Track {\n  /** @internal */\n  get sender() {\n    return this._sender;\n  }\n  /** @internal */\n  set sender(sender) {\n    this._sender = sender;\n  }\n  get constraints() {\n    return this._constraints;\n  }\n  get hasPreConnectBuffer() {\n    return !!this.localTrackRecorder;\n  }\n  /**\n   *\n   * @param mediaTrack\n   * @param kind\n   * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n   * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n   */\n  constructor(mediaTrack, kind, constraints) {\n    let userProvidedTrack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    let loggerOptions = arguments.length > 4 ? arguments[4] : undefined;\n    super(mediaTrack, kind, loggerOptions);\n    this.manuallyStopped = false;\n    this.pendingDeviceChange = false;\n    this._isUpstreamPaused = false;\n    this.handleTrackMuteEvent = () => this.debouncedTrackMuteHandler().catch(() => this.log.debug('track mute bounce got cancelled by an unmute event', this.logContext));\n    this.debouncedTrackMuteHandler = debounce(() => __awaiter(this, void 0, void 0, function* () {\n      yield this.pauseUpstream();\n    }), 5000);\n    this.handleTrackUnmuteEvent = () => __awaiter(this, void 0, void 0, function* () {\n      this.debouncedTrackMuteHandler.cancel('unmute');\n      yield this.resumeUpstream();\n    });\n    this.handleEnded = () => {\n      if (this.isInBackground) {\n        this.reacquireTrack = true;\n      }\n      this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n      this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n      this.emit(TrackEvent.Ended, this);\n    };\n    this.reacquireTrack = false;\n    this.providedByUser = userProvidedTrack;\n    this.muteLock = new _();\n    this.pauseUpstreamLock = new _();\n    this.trackChangeLock = new _();\n    this.trackChangeLock.lock().then(unlock => __awaiter(this, void 0, void 0, function* () {\n      try {\n        yield this.setMediaStreamTrack(mediaTrack, true);\n      } finally {\n        unlock();\n      }\n    }));\n    // added to satisfy TS compiler, constraints are synced with MediaStreamTrack\n    this._constraints = mediaTrack.getConstraints();\n    if (constraints) {\n      this._constraints = constraints;\n    }\n  }\n  get id() {\n    return this._mediaStreamTrack.id;\n  }\n  get dimensions() {\n    if (this.kind !== Track.Kind.Video) {\n      return undefined;\n    }\n    const _this$_mediaStreamTra = this._mediaStreamTrack.getSettings(),\n      width = _this$_mediaStreamTra.width,\n      height = _this$_mediaStreamTra.height;\n    if (width && height) {\n      return {\n        width,\n        height\n      };\n    }\n    return undefined;\n  }\n  get isUpstreamPaused() {\n    return this._isUpstreamPaused;\n  }\n  get isUserProvided() {\n    return this.providedByUser;\n  }\n  get mediaStreamTrack() {\n    var _a, _b;\n    return (_b = (_a = this.processor) === null || _a === void 0 ? void 0 : _a.processedTrack) !== null && _b !== void 0 ? _b : this._mediaStreamTrack;\n  }\n  get isLocal() {\n    return true;\n  }\n  /**\n   * @internal\n   * returns mediaStreamTrack settings of the capturing mediastreamtrack source - ignoring processors\n   */\n  getSourceTrackSettings() {\n    return this._mediaStreamTrack.getSettings();\n  }\n  setMediaStreamTrack(newTrack, force, isUnmuting) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (newTrack === this._mediaStreamTrack && !force) {\n        return;\n      }\n      if (this._mediaStreamTrack) {\n        // detach\n        this.attachedElements.forEach(el => {\n          detachTrack(this._mediaStreamTrack, el);\n        });\n        this.debouncedTrackMuteHandler.cancel('new-track');\n        this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n        this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n        this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n      }\n      this.mediaStream = new MediaStream([newTrack]);\n      if (newTrack) {\n        newTrack.addEventListener('ended', this.handleEnded);\n        // when underlying track emits mute, it indicates that the device is unable\n        // to produce media. In this case we'll need to signal with remote that\n        // the track is \"muted\"\n        // note this is different from LocalTrack.mute because we do not want to\n        // touch MediaStreamTrack.enabled\n        newTrack.addEventListener('mute', this.handleTrackMuteEvent);\n        newTrack.addEventListener('unmute', this.handleTrackUnmuteEvent);\n        this._constraints = newTrack.getConstraints();\n      }\n      let processedTrack;\n      if (this.processor && newTrack) {\n        this.log.debug('restarting processor', this.logContext);\n        if (this.kind === 'unknown') {\n          throw TypeError('cannot set processor on track of unknown kind');\n        }\n        if (this.processorElement) {\n          attachToElement(newTrack, this.processorElement);\n          // ensure the processorElement itself stays muted\n          this.processorElement.muted = true;\n        }\n        yield this.processor.restart({\n          track: newTrack,\n          kind: this.kind,\n          element: this.processorElement,\n          localTrack: this\n        });\n        processedTrack = this.processor.processedTrack;\n      }\n      if (this.sender && ((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n        yield this.sender.replaceTrack(processedTrack !== null && processedTrack !== void 0 ? processedTrack : newTrack);\n      }\n      // if `newTrack` is different from the existing track, stop the\n      // older track just before replacing it\n      if (!this.providedByUser && this._mediaStreamTrack !== newTrack) {\n        this._mediaStreamTrack.stop();\n      }\n      this._mediaStreamTrack = newTrack;\n      if (newTrack) {\n        // sync muted state with the enabled state of the newly provided track\n        // if restarting as part of an unmute, set enabled to true directly to avoid mute cycling\n        this._mediaStreamTrack.enabled = isUnmuting ? true : !this.isMuted;\n        // when a valid track is replace, we'd want to start producing\n        yield this.resumeUpstream();\n        this.attachedElements.forEach(el => {\n          attachToElement(processedTrack !== null && processedTrack !== void 0 ? processedTrack : newTrack, el);\n        });\n      }\n    });\n  }\n  waitForDimensions() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this = this;\n      let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DIMENSIONS_TIMEOUT;\n      return function* () {\n        var _a;\n        if (_this.kind === Track.Kind.Audio) {\n          throw new Error('cannot get dimensions for audio tracks');\n        }\n        if (((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.os) === 'iOS') {\n          // browsers report wrong initial resolution on iOS.\n          // when slightly delaying the call to .getSettings(), the correct resolution is being reported\n          yield sleep(10);\n        }\n        const started = Date.now();\n        while (Date.now() - started < timeout) {\n          const dims = _this.dimensions;\n          if (dims) {\n            return dims;\n          }\n          yield sleep(50);\n        }\n        throw new TrackInvalidError('unable to get track dimensions after timeout');\n      }();\n    });\n  }\n  setDeviceId(deviceId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this._constraints.deviceId === deviceId && this._mediaStreamTrack.getSettings().deviceId === unwrapConstraint(deviceId)) {\n        return true;\n      }\n      this._constraints.deviceId = deviceId;\n      // when track is muted, underlying media stream track is stopped and\n      // will be restarted later\n      if (this.isMuted) {\n        this.pendingDeviceChange = true;\n        return true;\n      }\n      yield this.restartTrack();\n      return unwrapConstraint(deviceId) === this._mediaStreamTrack.getSettings().deviceId;\n    });\n  }\n  /**\n   * @returns DeviceID of the device that is currently being used for this track\n   */\n  getDeviceId() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this2 = this;\n      let normalize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      return function* () {\n        // screen share doesn't have a usable device id\n        if (_this2.source === Track.Source.ScreenShare) {\n          return;\n        }\n        const _this2$_mediaStreamTr = _this2._mediaStreamTrack.getSettings(),\n          deviceId = _this2$_mediaStreamTr.deviceId,\n          groupId = _this2$_mediaStreamTr.groupId;\n        const kind = _this2.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';\n        return normalize ? DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId) : deviceId;\n      }();\n    });\n  }\n  mute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.setTrackMuted(true);\n      return this;\n    });\n  }\n  unmute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.setTrackMuted(false);\n      return this;\n    });\n  }\n  replaceTrack(track, userProvidedOrOptions) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.trackChangeLock.lock();\n      try {\n        if (!this.sender) {\n          throw new TrackInvalidError('unable to replace an unpublished track');\n        }\n        let userProvidedTrack;\n        let stopProcessor;\n        if (typeof userProvidedOrOptions === 'boolean') {\n          userProvidedTrack = userProvidedOrOptions;\n        } else if (userProvidedOrOptions !== undefined) {\n          userProvidedTrack = userProvidedOrOptions.userProvidedTrack;\n          stopProcessor = userProvidedOrOptions.stopProcessor;\n        }\n        this.providedByUser = userProvidedTrack !== null && userProvidedTrack !== void 0 ? userProvidedTrack : true;\n        this.log.debug('replace MediaStreamTrack', this.logContext);\n        yield this.setMediaStreamTrack(track);\n        // this must be synced *after* setting mediaStreamTrack above, since it relies\n        // on the previous state in order to cleanup\n        if (stopProcessor && this.processor) {\n          yield this.internalStopProcessor();\n        }\n      } finally {\n        unlock();\n      }\n      yield this.onSenderTrackSwapped();\n      return this;\n    });\n  }\n  /**\n   * Hook invoked after the MediaStreamTrack on the sender has been swapped\n   * (via replaceTrack, setProcessor, or stopProcessor). Fires outside the\n   * trackChangeLock so subclasses can do asynchronous work such as polling\n   * for new dimensions without blocking other track operations.\n   */\n  onSenderTrackSwapped() {\n    return __awaiter(this, void 0, void 0, function* () {\n      // base implementation is a no-op; LocalVideoTrack overrides this to\n      // recompute sender encoding parameters.\n    });\n  }\n  restart(constraints, isUnmuting) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.manuallyStopped = false;\n      const unlock = yield this.trackChangeLock.lock();\n      try {\n        if (!constraints) {\n          constraints = this._constraints;\n        }\n        const _constraints = constraints,\n          deviceId = _constraints.deviceId,\n          facingMode = _constraints.facingMode,\n          otherConstraints = __rest(constraints, [\"deviceId\", \"facingMode\"]);\n        this.log.debug('restarting track with constraints', Object.assign(Object.assign({}, this.logContext), {\n          constraints\n        }));\n        const streamConstraints = {\n          audio: false,\n          video: false\n        };\n        if (this.kind === Track.Kind.Video) {\n          streamConstraints.video = deviceId || facingMode ? {\n            deviceId,\n            facingMode\n          } : true;\n        } else {\n          streamConstraints.audio = deviceId ? Object.assign({\n            deviceId\n          }, otherConstraints) : true;\n        }\n        // these steps are duplicated from setMediaStreamTrack because we must stop\n        // the previous tracks before new tracks can be acquired\n        this.attachedElements.forEach(el => {\n          detachTrack(this.mediaStreamTrack, el);\n        });\n        this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n        // on Safari, the old audio track must be stopped before attempting to acquire\n        // the new track, otherwise the new track will stop with\n        // 'A MediaStreamTrack ended due to a capture failure`\n        this._mediaStreamTrack.stop();\n        // create new track and attach\n        const mediaStream = yield navigator.mediaDevices.getUserMedia(streamConstraints);\n        const newTrack = mediaStream.getTracks()[0];\n        if (this.kind === Track.Kind.Video) {\n          // we already captured the audio track with the constraints, so we only need to apply the video constraints\n          yield newTrack.applyConstraints(otherConstraints);\n        }\n        newTrack.addEventListener('ended', this.handleEnded);\n        this.log.debug('re-acquired MediaStreamTrack', this.logContext);\n        yield this.setMediaStreamTrack(newTrack, false, isUnmuting);\n        this._constraints = constraints;\n        this.pendingDeviceChange = false;\n        this.emit(TrackEvent.Restarted, this);\n        if (this.manuallyStopped) {\n          this.log.warn('track was stopped during a restart, stopping restarted track', this.logContext);\n          this.stop();\n        }\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  setTrackMuted(muted) {\n    this.log.debug(\"setting \".concat(this.kind, \" track \").concat(muted ? 'muted' : 'unmuted'), this.logContext);\n    if (this.isMuted === muted && this._mediaStreamTrack.enabled !== muted) {\n      return;\n    }\n    this.isMuted = muted;\n    this._mediaStreamTrack.enabled = !muted;\n    this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n  }\n  get needsReAcquisition() {\n    return this._mediaStreamTrack.readyState !== 'live' || this._mediaStreamTrack.muted || !this._mediaStreamTrack.enabled || this.reacquireTrack;\n  }\n  handleAppVisibilityChanged() {\n    const _super = Object.create(null, {\n      handleAppVisibilityChanged: {\n        get: () => super.handleAppVisibilityChanged\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      yield _super.handleAppVisibilityChanged.call(this);\n      if (!isMobile()) return;\n      this.log.debug(\"visibility changed, is in Background: \".concat(this.isInBackground), this.logContext);\n      if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided && !this.isMuted) {\n        this.log.debug(\"track needs to be reacquired, restarting \".concat(this.source), this.logContext);\n        yield this.restart();\n        this.reacquireTrack = false;\n      }\n    });\n  }\n  stop() {\n    var _a;\n    this.manuallyStopped = true;\n    super.stop();\n    this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n    this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n    this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n    (_a = this.processor) === null || _a === void 0 ? void 0 : _a.destroy();\n    this.processor = undefined;\n  }\n  /**\n   * pauses publishing to the server without disabling the local MediaStreamTrack\n   * this is used to display a user's own video locally while pausing publishing to\n   * the server.\n   * this API is unsupported on Safari < 12 due to a bug\n   **/\n  pauseUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.pauseUpstreamLock.lock();\n      try {\n        if (this._isUpstreamPaused === true) {\n          return;\n        }\n        if (!this.sender) {\n          this.log.warn('unable to pause upstream for an unpublished track', this.logContext);\n          return;\n        }\n        this._isUpstreamPaused = true;\n        this.emit(TrackEvent.UpstreamPaused, this);\n        const browser = getBrowser();\n        if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '12.0') < 0) {\n          // https://bugs.webkit.org/show_bug.cgi?id=184911\n          throw new DeviceUnsupportedError('pauseUpstream is not supported on Safari < 12.');\n        }\n        if (((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n          yield this.sender.replaceTrack(null);\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  resumeUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.pauseUpstreamLock.lock();\n      try {\n        if (this._isUpstreamPaused === false) {\n          return;\n        }\n        if (!this.sender) {\n          this.log.warn('unable to resume upstream for an unpublished track', this.logContext);\n          return;\n        }\n        this._isUpstreamPaused = false;\n        this.emit(TrackEvent.UpstreamResumed, this);\n        if (((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n          // this operation is noop if mediastreamtrack is already being sent\n          yield this.sender.replaceTrack(this.mediaStreamTrack);\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  /**\n   * Gets the RTCStatsReport for the LocalTrack's underlying RTCRtpSender\n   * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport\n   *\n   * @returns Promise<RTCStatsReport> | undefined\n   */\n  getRTCStatsReport() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return;\n      }\n      const statsReport = yield this.sender.getStats();\n      return statsReport;\n    });\n  }\n  /**\n   * Sets a processor on this track.\n   * See https://github.com/livekit/track-processors-js for example usage\n   *\n   * @param processor\n   * @param showProcessedStreamLocally\n   * @returns\n   */\n  setProcessor(processor_1) {\n    return __awaiter(this, arguments, void 0, function (processor) {\n      var _this3 = this;\n      let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        var _a;\n        const unlock = yield _this3.trackChangeLock.lock();\n        try {\n          _this3.log.debug('setting up processor', _this3.logContext);\n          const processorElement = document.createElement(_this3.kind);\n          const processorOptions = {\n            kind: _this3.kind,\n            track: _this3._mediaStreamTrack,\n            element: processorElement,\n            audioContext: _this3.audioContext,\n            localTrack: _this3\n          };\n          yield processor.init(processorOptions);\n          _this3.log.debug('processor initialized', _this3.logContext);\n          if (_this3.processor) {\n            yield _this3.internalStopProcessor();\n          }\n          if (_this3.kind === 'unknown') {\n            throw TypeError('cannot set processor on track of unknown kind');\n          }\n          attachToElement(_this3._mediaStreamTrack, processorElement);\n          processorElement.muted = true;\n          processorElement.play().catch(error => {\n            if (error instanceof DOMException && error.name === 'AbortError') {\n              // This happens on Safari when the processor is restarted, try again after a delay\n              _this3.log.warn('failed to play processor element, retrying', Object.assign(Object.assign({}, _this3.logContext), {\n                error\n              }));\n              setTimeout(() => {\n                processorElement.play().catch(err => {\n                  _this3.log.error('failed to play processor element', Object.assign(Object.assign({}, _this3.logContext), {\n                    err\n                  }));\n                });\n              }, 100);\n            } else {\n              _this3.log.error('failed to play processor element', Object.assign(Object.assign({}, _this3.logContext), {\n                error\n              }));\n            }\n          });\n          _this3.processor = processor;\n          _this3.processorElement = processorElement;\n          if (_this3.processor.processedTrack) {\n            for (const el of _this3.attachedElements) {\n              if (el !== _this3.processorElement && showProcessedStreamLocally) {\n                detachTrack(_this3._mediaStreamTrack, el);\n                attachToElement(_this3.processor.processedTrack, el);\n              }\n            }\n            yield (_a = _this3.sender) === null || _a === void 0 ? void 0 : _a.replaceTrack(_this3.processor.processedTrack);\n          }\n          _this3.emit(TrackEvent.TrackProcessorUpdate, _this3.processor);\n        } finally {\n          unlock();\n        }\n        yield _this3.onSenderTrackSwapped();\n      }();\n    });\n  }\n  getProcessor() {\n    return this.processor;\n  }\n  /**\n   * Stops the track processor\n   * See https://github.com/livekit/track-processors-js for example usage\n   *\n   */\n  stopProcessor() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this4 = this;\n      let keepElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      return function* () {\n        const unlock = yield _this4.trackChangeLock.lock();\n        try {\n          yield _this4.internalStopProcessor(keepElement);\n        } finally {\n          unlock();\n        }\n        yield _this4.onSenderTrackSwapped();\n      }();\n    });\n  }\n  /**\n   * @internal\n   * This method assumes the caller has acquired a trackChangeLock already.\n   * The public facing method for stopping the processor is `stopProcessor` and it wraps this method in the trackChangeLock.\n   */\n  internalStopProcessor() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this5 = this;\n      let keepElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      return function* () {\n        var _a, _b;\n        if (!_this5.processor) return;\n        _this5.log.debug('stopping processor', _this5.logContext);\n        (_a = _this5.processor.processedTrack) === null || _a === void 0 ? void 0 : _a.stop();\n        yield _this5.processor.destroy();\n        _this5.processor = undefined;\n        if (!keepElement) {\n          (_b = _this5.processorElement) === null || _b === void 0 ? void 0 : _b.remove();\n          _this5.processorElement = undefined;\n        }\n        // apply original track constraints in case the processor changed them\n        yield _this5._mediaStreamTrack.applyConstraints(_this5._constraints);\n        // force re-setting of the mediaStreamTrack on the sender\n        yield _this5.setMediaStreamTrack(_this5._mediaStreamTrack, true);\n        _this5.emit(TrackEvent.TrackProcessorUpdate);\n      }();\n    });\n  }\n  /** @internal */\n  startPreConnectBuffer() {\n    let timeslice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n    if (!isRecordingSupported()) {\n      this.log.warn('MediaRecorder is not available, cannot start preconnect buffer', this.logContext);\n      return;\n    }\n    if (!this.localTrackRecorder) {\n      let mimeType = 'audio/webm;codecs=opus';\n      if (!MediaRecorder.isTypeSupported(mimeType)) {\n        // iOS currently only supports video/mp4 as a mime type - even for audio.\n        mimeType = 'video/mp4';\n      }\n      this.localTrackRecorder = new LocalTrackRecorder(this, {\n        mimeType\n      });\n    } else {\n      this.log.warn('preconnect buffer already started');\n      return;\n    }\n    this.localTrackRecorder.start(timeslice);\n    this.autoStopPreConnectBuffer = setTimeout(() => {\n      this.log.warn('preconnect buffer timed out, stopping recording automatically', this.logContext);\n      this.stopPreConnectBuffer();\n    }, PRE_CONNECT_BUFFER_TIMEOUT);\n  }\n  /** @internal */\n  stopPreConnectBuffer() {\n    clearTimeout(this.autoStopPreConnectBuffer);\n    if (this.localTrackRecorder) {\n      this.localTrackRecorder.stop();\n      this.localTrackRecorder = undefined;\n    }\n  }\n  /** @internal */\n  getPreConnectBuffer() {\n    var _a;\n    return (_a = this.localTrackRecorder) === null || _a === void 0 ? void 0 : _a.byteStream;\n  }\n  getPreConnectBufferMimeType() {\n    var _a;\n    return (_a = this.localTrackRecorder) === null || _a === void 0 ? void 0 : _a.mimeType;\n  }\n}class LocalAudioTrack extends LocalTrack {\n  /**\n   * boolean indicating whether enhanced noise cancellation is currently being used on this track\n   */\n  get enhancedNoiseCancellation() {\n    return this.isKrispNoiseFilterEnabled;\n  }\n  /**\n   *\n   * @param mediaTrack\n   * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n   * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n   */\n  constructor(mediaTrack, constraints) {\n    let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    let audioContext = arguments.length > 3 ? arguments[3] : undefined;\n    let loggerOptions = arguments.length > 4 ? arguments[4] : undefined;\n    super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack, loggerOptions);\n    /** @internal */\n    this.stopOnMute = false;\n    this.isKrispNoiseFilterEnabled = false;\n    this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.sender) {\n        this._currentBitrate = 0;\n        return;\n      }\n      let stats;\n      try {\n        stats = yield this.getSenderStats();\n      } catch (e) {\n        this.log.error('could not get audio sender stats', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n        return;\n      }\n      if (stats && this.prevStats) {\n        this._currentBitrate = computeBitrate(stats, this.prevStats);\n      }\n      this.prevStats = stats;\n    });\n    this.handleKrispNoiseFilterEnable = () => {\n      this.isKrispNoiseFilterEnabled = true;\n      this.log.debug(\"Krisp noise filter enabled\", this.logContext);\n      this.emit(TrackEvent.AudioTrackFeatureUpdate, this, AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION, true);\n    };\n    this.handleKrispNoiseFilterDisable = () => {\n      this.isKrispNoiseFilterEnabled = false;\n      this.log.debug(\"Krisp noise filter disabled\", this.logContext);\n      this.emit(TrackEvent.AudioTrackFeatureUpdate, this, AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION, false);\n    };\n    this.audioContext = audioContext;\n    this.checkForSilence();\n  }\n  mute() {\n    const _super = Object.create(null, {\n      mute: {\n        get: () => super.mute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (this.isMuted) {\n          this.log.debug('Track already muted', this.logContext);\n          return this;\n        }\n        // disabled special handling as it will cause BT headsets to switch communication modes\n        if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) {\n          this.log.debug('stopping mic track', this.logContext);\n          // also stop the track, so that microphone indicator is turned off\n          this._mediaStreamTrack.stop();\n        }\n        yield _super.mute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  unmute() {\n    const _super = Object.create(null, {\n      unmute: {\n        get: () => super.unmute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (!this.isMuted) {\n          this.log.debug('Track already unmuted', this.logContext);\n          return this;\n        }\n        if (this.source === Track.Source.Microphone && (this.stopOnMute || this._mediaStreamTrack.readyState === 'ended' || this.pendingDeviceChange) && !this.isUserProvided) {\n          this.log.debug('reacquiring mic track', this.logContext);\n          yield this.restart(undefined, true);\n        }\n        yield _super.unmute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  restartTrack(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let constraints;\n      if (options) {\n        const streamConstraints = constraintsForOptions({\n          audio: options\n        });\n        if (typeof streamConstraints.audio !== 'boolean') {\n          constraints = streamConstraints.audio;\n        }\n      }\n      yield this.restart(constraints);\n    });\n  }\n  restart(constraints, isUnmuting) {\n    const _super = Object.create(null, {\n      restart: {\n        get: () => super.restart\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const track = yield _super.restart.call(this, constraints, isUnmuting);\n      this.checkForSilence();\n      return track;\n    });\n  }\n  /* @internal */\n  startMonitor() {\n    if (!isWeb()) {\n      return;\n    }\n    if (this.monitorInterval) {\n      return;\n    }\n    this.monitorInterval = setInterval(() => {\n      this.monitorSender();\n    }, monitorFrequency);\n  }\n  setProcessor(processor) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.trackChangeLock.lock();\n      try {\n        if (!isReactNative() && !this.audioContext) {\n          throw Error('Audio context needs to be set on LocalAudioTrack in order to enable processors');\n        }\n        if (this.processor) {\n          yield this.internalStopProcessor();\n        }\n        const processorOptions = {\n          kind: this.kind,\n          track: this._mediaStreamTrack,\n          // RN won't have or use AudioContext\n          audioContext: this.audioContext,\n          localTrack: this\n        };\n        this.log.debug(\"setting up audio processor \".concat(processor.name), this.logContext);\n        yield processor.init(processorOptions);\n        this.processor = processor;\n        if (this.processor.processedTrack) {\n          yield (_a = this.sender) === null || _a === void 0 ? void 0 : _a.replaceTrack(this.processor.processedTrack);\n          this.processor.processedTrack.addEventListener('enable-lk-krisp-noise-filter', this.handleKrispNoiseFilterEnable);\n          this.processor.processedTrack.addEventListener('disable-lk-krisp-noise-filter', this.handleKrispNoiseFilterDisable);\n        }\n        this.emit(TrackEvent.TrackProcessorUpdate, this.processor);\n      } finally {\n        unlock();\n      }\n    });\n  }\n  /**\n   * @internal\n   * @experimental\n   */\n  setAudioContext(audioContext) {\n    this.audioContext = audioContext;\n  }\n  getSenderStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return undefined;\n      }\n      const stats = yield this.sender.getStats();\n      let audioStats;\n      stats.forEach(v => {\n        if (v.type === 'outbound-rtp') {\n          audioStats = {\n            type: 'audio',\n            streamId: v.id,\n            packetsSent: v.packetsSent,\n            packetsLost: v.packetsLost,\n            bytesSent: v.bytesSent,\n            timestamp: v.timestamp,\n            roundTripTime: v.roundTripTime,\n            jitter: v.jitter\n          };\n        }\n      });\n      return audioStats;\n    });\n  }\n  checkForSilence() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const trackIsSilent = yield detectSilence(this);\n      if (trackIsSilent) {\n        if (!this.isMuted) {\n          this.log.debug('silence detected on local audio track', this.logContext);\n        }\n        this.emit(TrackEvent.AudioSilenceDetected);\n      }\n      return trackIsSilent;\n    });\n  }\n}/** @internal */\nfunction mediaTrackToLocalTrack(mediaStreamTrack, constraints, loggerOptions) {\n  switch (mediaStreamTrack.kind) {\n    case 'audio':\n      return new LocalAudioTrack(mediaStreamTrack, constraints, false, undefined, loggerOptions);\n    case 'video':\n      return new LocalVideoTrack(mediaStreamTrack, constraints, false, loggerOptions);\n    default:\n      throw new TrackInvalidError(\"unsupported track type: \".concat(mediaStreamTrack.kind));\n  }\n}\n/* @internal */\nconst presets169 = Object.values(VideoPresets);\n/* @internal */\nconst presets43 = Object.values(VideoPresets43);\n/* @internal */\nconst presetsScreenShare = Object.values(ScreenSharePresets);\n/* @internal */\nconst defaultSimulcastPresets169 = [VideoPresets.h180, VideoPresets.h360];\n/* @internal */\nconst defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h360];\n/* @internal */\nconst computeDefaultScreenShareSimulcastPresets = fromPreset => {\n  const layers = [{\n    scaleResolutionDownBy: 2,\n    fps: fromPreset.encoding.maxFramerate\n  }];\n  return layers.map(t => {\n    var _a, _b;\n    return new VideoPreset(Math.floor(fromPreset.width / t.scaleResolutionDownBy), Math.floor(fromPreset.height / t.scaleResolutionDownBy), Math.max(150000, Math.floor(fromPreset.encoding.maxBitrate / (Math.pow(t.scaleResolutionDownBy, 2) * (((_a = fromPreset.encoding.maxFramerate) !== null && _a !== void 0 ? _a : 30) / ((_b = t.fps) !== null && _b !== void 0 ? _b : 30))))), t.fps, fromPreset.encoding.priority);\n  });\n};\n// /**\n//  *\n//  * @internal\n//  * @experimental\n//  */\n// const computeDefaultMultiCodecSimulcastEncodings = (width: number, height: number) => {\n//   // use vp8 as a default\n//   const vp8 = determineAppropriateEncoding(false, width, height);\n//   const vp9 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.9 };\n//   const h264 = { ...vp8, maxBitrate: vp8.maxBitrate * 1.1 };\n//   const av1 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.7 };\n//   return {\n//     vp8,\n//     vp9,\n//     h264,\n//     av1,\n//   };\n// };\nconst videoRids = ['q', 'h', 'f'];\n/* @internal */\nfunction computeVideoEncodings(isScreenShare, width, height, options) {\n  var _a, _b;\n  let videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;\n  if (isScreenShare) {\n    videoEncoding = options === null || options === void 0 ? void 0 : options.screenShareEncoding;\n  }\n  const useSimulcast = options === null || options === void 0 ? void 0 : options.simulcast;\n  const scalabilityMode = options === null || options === void 0 ? void 0 : options.scalabilityMode;\n  const videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;\n  if (!videoEncoding && !useSimulcast && !scalabilityMode || !width || !height) {\n    // when we aren't simulcasting or svc, will need to return a single encoding without\n    // capping bandwidth. we always require a encoding for dynacast\n    return [{}];\n  }\n  if (!videoEncoding) {\n    // find the right encoding based on width/height\n    videoEncoding = determineAppropriateEncoding(isScreenShare, width, height, videoCodec);\n    livekitLogger.debug('using video encoding', videoEncoding);\n  }\n  const sourceFramerate = videoEncoding.maxFramerate;\n  const original = new VideoPreset(width, height, videoEncoding.maxBitrate, videoEncoding.maxFramerate, videoEncoding.priority);\n  if (scalabilityMode && isSVCCodec(videoCodec)) {\n    const sm = new ScalabilityMode(scalabilityMode);\n    const encodings = [];\n    if (sm.spatial > 3) {\n      throw new Error(\"unsupported scalabilityMode: \".concat(scalabilityMode));\n    }\n    // Before M113 in Chrome, defining multiple encodings with an SVC codec indicated\n    // that SVC mode should be used. Safari still works this way.\n    // This is a bit confusing but is due to how libwebrtc interpreted the encodings field\n    // before M113.\n    // Announced here: https://groups.google.com/g/discuss-webrtc/c/-QQ3pxrl-fw?pli=1\n    const browser = getBrowser();\n    if (isSafariBased() ||\n    // Even tho RN runs M114, it does not produce SVC layers when a single encoding\n    // is provided. So we'll use the legacy SVC specification for now.\n    // TODO: when we upstream libwebrtc, this will need additional verification\n    isReactNative() || (browser === null || browser === void 0 ? void 0 : browser.name) === 'Chrome' && compareVersions(browser === null || browser === void 0 ? void 0 : browser.version, '113') < 0) {\n      const bitratesRatio = sm.suffix == 'h' ? 2 : 3;\n      // safari 18.4 uses a different svc API that requires scaleResolutionDownBy to be set.\n      const requireScale = isSafariSvcApi(browser);\n      for (let i = 0; i < sm.spatial; i += 1) {\n        // in legacy SVC, scaleResolutionDownBy cannot be set\n        encodings.push({\n          rid: videoRids[2 - i],\n          maxBitrate: videoEncoding.maxBitrate / Math.pow(bitratesRatio, i),\n          maxFramerate: original.encoding.maxFramerate,\n          scaleResolutionDownBy: requireScale ? Math.pow(2, i) : undefined\n        });\n      }\n      // legacy SVC, scalabilityMode is set only on the first encoding\n      /* @ts-ignore */\n      encodings[0].scalabilityMode = scalabilityMode;\n    } else {\n      encodings.push({\n        maxBitrate: videoEncoding.maxBitrate,\n        maxFramerate: original.encoding.maxFramerate,\n        /* @ts-ignore */\n        scalabilityMode: scalabilityMode\n      });\n    }\n    if (original.encoding.priority) {\n      encodings[0].priority = original.encoding.priority;\n      encodings[0].networkPriority = original.encoding.priority;\n    }\n    livekitLogger.debug(\"using svc encoding\", {\n      encodings\n    });\n    return encodings;\n  }\n  if (!useSimulcast) {\n    return [videoEncoding];\n  }\n  let presets;\n  if (isScreenShare) {\n    presets = (_a = sortPresets(options === null || options === void 0 ? void 0 : options.screenShareSimulcastLayers)) !== null && _a !== void 0 ? _a : defaultSimulcastLayers(isScreenShare, original);\n  } else {\n    presets = (_b = sortPresets(options === null || options === void 0 ? void 0 : options.videoSimulcastLayers)) !== null && _b !== void 0 ? _b : defaultSimulcastLayers(isScreenShare, original);\n  }\n  let midPreset;\n  if (presets.length > 0) {\n    const lowPreset = presets[0];\n    if (presets.length > 1) {\n      var _presets = presets;\n      var _presets2 = _slicedToArray(_presets, 2);\n      midPreset = _presets2[1];\n    }\n    // NOTE:\n    //   1. Ordering of these encodings is important. Chrome seems\n    //      to use the index into encodings to decide which layer\n    //      to disable when CPU constrained.\n    //      So encodings should be ordered in increasing spatial\n    //      resolution order.\n    //   2. livekit-server translates rids into layers. So, all encodings\n    //      should have the base layer `q` and then more added\n    //      based on other conditions.\n    const size = Math.max(width, height);\n    if (size >= 960 && midPreset) {\n      return encodingsFromPresets(width, height, [lowPreset, midPreset, original], sourceFramerate);\n    }\n    if (size >= 480) {\n      return encodingsFromPresets(width, height, [lowPreset, original], sourceFramerate);\n    }\n  }\n  return encodingsFromPresets(width, height, [original]);\n}\nfunction computeTrackBackupEncodings(track, videoCodec, opts) {\n  var _a, _b, _c, _d;\n  // backupCodec should not be true anymore, default codec is set in LocalParticipant.publish\n  if (!opts.backupCodec || opts.backupCodec === true || opts.backupCodec.codec === opts.videoCodec) {\n    // backup codec publishing is disabled\n    return;\n  }\n  if (videoCodec !== opts.backupCodec.codec) {\n    livekitLogger.warn('requested a different codec than specified as backup', {\n      serverRequested: videoCodec,\n      backup: opts.backupCodec.codec\n    });\n  }\n  opts.videoCodec = videoCodec;\n  // use backup encoding setting as videoEncoding for backup codec publishing\n  opts.videoEncoding = opts.backupCodec.encoding;\n  const settings = track.mediaStreamTrack.getSettings();\n  const width = (_a = settings.width) !== null && _a !== void 0 ? _a : (_b = track.dimensions) === null || _b === void 0 ? void 0 : _b.width;\n  const height = (_c = settings.height) !== null && _c !== void 0 ? _c : (_d = track.dimensions) === null || _d === void 0 ? void 0 : _d.height;\n  // disable simulcast for screenshare backup codec since L1Tx is used by primary codec\n  if (track.source === Track.Source.ScreenShare && opts.simulcast) {\n    opts.simulcast = false;\n  }\n  const encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, width, height, opts);\n  return encodings;\n}\n/* @internal */\nfunction determineAppropriateEncoding(isScreenShare, width, height, codec) {\n  const presets = presetsForResolution(isScreenShare, width, height);\n  let encoding = presets[0].encoding;\n  // handle portrait by swapping dimensions\n  const size = Math.max(width, height);\n  for (let i = 0; i < presets.length; i += 1) {\n    const preset = presets[i];\n    encoding = preset.encoding;\n    if (preset.width >= size) {\n      break;\n    }\n  }\n  // presets are based on the assumption of vp8 as a codec\n  // for other codecs we adjust the maxBitrate if no specific videoEncoding has been provided\n  // users should override these with ones that are optimized for their use case\n  // NOTE: SVC codec bitrates are inclusive of all scalability layers. while\n  // bitrate for non-SVC codecs does not include other simulcast layers.\n  if (codec) {\n    switch (codec) {\n      case 'av1':\n      case 'h265':\n        encoding = Object.assign({}, encoding);\n        encoding.maxBitrate = encoding.maxBitrate * 0.7;\n        break;\n      case 'vp9':\n        encoding = Object.assign({}, encoding);\n        encoding.maxBitrate = encoding.maxBitrate * 0.85;\n        break;\n    }\n  }\n  return encoding;\n}\n/* @internal */\nfunction presetsForResolution(isScreenShare, width, height) {\n  if (isScreenShare) {\n    return presetsScreenShare;\n  }\n  const aspect = width > height ? width / height : height / width;\n  if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n    return presets169;\n  }\n  return presets43;\n}\n/* @internal */\nfunction defaultSimulcastLayers(isScreenShare, original) {\n  if (isScreenShare) {\n    return computeDefaultScreenShareSimulcastPresets(original);\n  }\n  const width = original.width,\n    height = original.height;\n  const aspect = width > height ? width / height : height / width;\n  if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n    return defaultSimulcastPresets169;\n  }\n  return defaultSimulcastPresets43;\n}\n// presets should be ordered by low, medium, high\nfunction encodingsFromPresets(width, height, presets, sourceFramerate) {\n  const encodings = [];\n  presets.forEach((preset, idx) => {\n    if (idx >= videoRids.length) {\n      return;\n    }\n    const size = Math.min(width, height);\n    const rid = videoRids[idx];\n    const encoding = {\n      rid,\n      scaleResolutionDownBy: Math.max(1, size / Math.min(preset.width, preset.height)),\n      maxBitrate: preset.encoding.maxBitrate\n    };\n    // ensure that the sourceFramerate is the highest framerate applied across all layers so that the\n    // original encoding doesn't get bumped unintentionally by any of the other layers\n    const maxFramerate = sourceFramerate && preset.encoding.maxFramerate ? Math.min(sourceFramerate, preset.encoding.maxFramerate) : preset.encoding.maxFramerate;\n    if (maxFramerate) {\n      encoding.maxFramerate = maxFramerate;\n    }\n    const browser = getBrowser();\n    const canSetPriority = (browser === null || browser === void 0 ? void 0 : browser.name) === 'Firefox' && browser.os !== 'iOS' || idx === 0;\n    if (preset.encoding.priority && canSetPriority) {\n      encoding.priority = preset.encoding.priority;\n      encoding.networkPriority = preset.encoding.priority;\n    }\n    encodings.push(encoding);\n  });\n  // RN ios simulcast requires all same framerates.\n  if (isReactNative() && getReactNativeOs() === 'ios') {\n    let topFramerate = undefined;\n    encodings.forEach(encoding => {\n      if (!topFramerate) {\n        topFramerate = encoding.maxFramerate;\n      } else if (encoding.maxFramerate && encoding.maxFramerate > topFramerate) {\n        topFramerate = encoding.maxFramerate;\n      }\n    });\n    let notifyOnce = true;\n    encodings.forEach(encoding => {\n      var _a;\n      if (encoding.maxFramerate != topFramerate) {\n        if (notifyOnce) {\n          notifyOnce = false;\n          livekitLogger.info(\"Simulcast on iOS React-Native requires all encodings to share the same framerate.\");\n        }\n        livekitLogger.info(\"Setting framerate of encoding \\\"\".concat((_a = encoding.rid) !== null && _a !== void 0 ? _a : '', \"\\\" to \").concat(topFramerate));\n        encoding.maxFramerate = topFramerate;\n      }\n    });\n  }\n  return encodings;\n}\n/** @internal */\nfunction sortPresets(presets) {\n  if (!presets) return;\n  // Sort a copy so we don't mutate the caller's array in place. Mutating the\n  // passed-in simulcast layers can cause consumers that compare options by value\n  // (e.g. components-react's useLiveKitRoom) to detect a spurious change.\n  return presets.slice().sort((a, b) => {\n    const aEnc = a.encoding;\n    const bEnc = b.encoding;\n    if (aEnc.maxBitrate > bEnc.maxBitrate) {\n      return 1;\n    }\n    if (aEnc.maxBitrate < bEnc.maxBitrate) return -1;\n    if (aEnc.maxBitrate === bEnc.maxBitrate && aEnc.maxFramerate && bEnc.maxFramerate) {\n      return aEnc.maxFramerate > bEnc.maxFramerate ? 1 : -1;\n    }\n    return 0;\n  });\n}\n/** @internal */\nclass ScalabilityMode {\n  constructor(scalabilityMode) {\n    const results = scalabilityMode.match(/^L(\\d)T(\\d)(h|_KEY|_KEY_SHIFT){0,1}$/);\n    if (!results) {\n      throw new Error('invalid scalability mode');\n    }\n    this.spatial = parseInt(results[1]);\n    this.temporal = parseInt(results[2]);\n    if (results.length > 3) {\n      switch (results[3]) {\n        case 'h':\n        case '_KEY':\n        case '_KEY_SHIFT':\n          this.suffix = results[3];\n      }\n    }\n  }\n  toString() {\n    var _a;\n    return \"L\".concat(this.spatial, \"T\").concat(this.temporal).concat((_a = this.suffix) !== null && _a !== void 0 ? _a : '');\n  }\n}\nfunction getDefaultDegradationPreference(track) {\n  // a few of reasons we have different default paths:\n  // 1. without this, Chrome seems to aggressively resize the SVC video stating `quality-limitation: bandwidth` even when BW isn't an issue\n  // 2. since we are overriding contentHint to motion (to workaround L1T3 publishing), it overrides the default degradationPreference to `balanced`\n  if (track.source === Track.Source.ScreenShare || track.constraints.height && unwrapConstraint(track.constraints.height) >= 1080) {\n    return 'maintain-resolution';\n  } else {\n    return 'balanced';\n  }\n}const refreshSubscribedCodecAfterNewCodec = 5000;\nclass LocalVideoTrack extends LocalTrack {\n  get sender() {\n    return this._sender;\n  }\n  set sender(sender) {\n    this._sender = sender;\n    if (this.degradationPreference) {\n      this.setDegradationPreference(this.degradationPreference);\n    }\n  }\n  /**\n   *\n   * @param mediaTrack\n   * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n   * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n   */\n  constructor(mediaTrack, constraints) {\n    let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    let loggerOptions = arguments.length > 3 ? arguments[3] : undefined;\n    super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack, loggerOptions);\n    /* @internal */\n    this.simulcastCodecs = new Map();\n    this.degradationPreference = 'balanced';\n    this.isCpuConstrained = false;\n    this.optimizeForPerformance = false;\n    this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.sender) {\n        this._currentBitrate = 0;\n        return;\n      }\n      let stats;\n      try {\n        stats = yield this.getSenderStats();\n      } catch (e) {\n        this.log.error('could not get video sender stats', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n        return;\n      }\n      const statsMap = new Map(stats.map(s => [s.rid, s]));\n      const isCpuConstrained = stats.some(s => s.qualityLimitationReason === 'cpu');\n      if (isCpuConstrained !== this.isCpuConstrained) {\n        this.isCpuConstrained = isCpuConstrained;\n        if (this.isCpuConstrained) {\n          this.emit(TrackEvent.CpuConstrained);\n        }\n      }\n      if (this.prevStats) {\n        let totalBitrate = 0;\n        statsMap.forEach((s, key) => {\n          var _a;\n          const prev = (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.get(key);\n          totalBitrate += computeBitrate(s, prev);\n        });\n        this._currentBitrate = totalBitrate;\n      }\n      this.prevStats = statsMap;\n    });\n    this.senderLock = new _();\n  }\n  get isSimulcast() {\n    if (this.sender && this.sender.getParameters().encodings.length > 1) {\n      return true;\n    }\n    return false;\n  }\n  /* @internal */\n  startMonitor(signalClient) {\n    var _a;\n    this.signalClient = signalClient;\n    if (!isWeb()) {\n      return;\n    }\n    // save original encodings\n    // TODO : merge simulcast tracks stats\n    const params = (_a = this.sender) === null || _a === void 0 ? void 0 : _a.getParameters();\n    if (params) {\n      this.encodings = params.encodings;\n    }\n    if (this.monitorInterval) {\n      return;\n    }\n    this.monitorInterval = setInterval(() => {\n      this.monitorSender();\n    }, monitorFrequency);\n  }\n  stop() {\n    this._mediaStreamTrack.getConstraints();\n    this.simulcastCodecs.forEach(trackInfo => {\n      trackInfo.mediaStreamTrack.stop();\n    });\n    super.stop();\n  }\n  pauseUpstream() {\n    const _super = Object.create(null, {\n      pauseUpstream: {\n        get: () => super.pauseUpstream\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_1, _b, _c;\n      var _d;\n      yield _super.pauseUpstream.call(this);\n      try {\n        for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n          _c = _g.value;\n          _e = false;\n          const sc = _c;\n          yield (_d = sc.sender) === null || _d === void 0 ? void 0 : _d.replaceTrack(null);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    });\n  }\n  resumeUpstream() {\n    const _super = Object.create(null, {\n      resumeUpstream: {\n        get: () => super.resumeUpstream\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_2, _b, _c;\n      var _d;\n      yield _super.resumeUpstream.call(this);\n      try {\n        for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n          _c = _g.value;\n          _e = false;\n          const sc = _c;\n          yield (_d = sc.sender) === null || _d === void 0 ? void 0 : _d.replaceTrack(sc.mediaStreamTrack);\n        }\n      } catch (e_2_1) {\n        e_2 = {\n          error: e_2_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n        } finally {\n          if (e_2) throw e_2.error;\n        }\n      }\n    });\n  }\n  mute() {\n    const _super = Object.create(null, {\n      mute: {\n        get: () => super.mute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (this.isMuted) {\n          this.log.debug('Track already muted', this.logContext);\n          return this;\n        }\n        if (this.source === Track.Source.Camera && !this.isUserProvided) {\n          this.log.debug('stopping camera track', this.logContext);\n          // also stop the track, so that camera indicator is turned off\n          this._mediaStreamTrack.stop();\n        }\n        yield _super.mute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  unmute() {\n    const _super = Object.create(null, {\n      unmute: {\n        get: () => super.unmute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (!this.isMuted) {\n          this.log.debug('Track already unmuted', this.logContext);\n          return this;\n        }\n        if (this.source === Track.Source.Camera && !this.isUserProvided) {\n          this.log.debug('reacquiring camera track', this.logContext);\n          yield this.restart(undefined, true);\n        }\n        yield _super.unmute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  setTrackMuted(muted) {\n    super.setTrackMuted(muted);\n    for (const sc of this.simulcastCodecs.values()) {\n      sc.mediaStreamTrack.enabled = !muted;\n    }\n  }\n  getSenderStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return [];\n      }\n      const items = [];\n      const stats = yield this.sender.getStats();\n      stats.forEach(v => {\n        var _a;\n        if (v.type === 'outbound-rtp') {\n          const vs = {\n            type: 'video',\n            streamId: v.id,\n            frameHeight: v.frameHeight,\n            frameWidth: v.frameWidth,\n            framesPerSecond: v.framesPerSecond,\n            framesSent: v.framesSent,\n            firCount: v.firCount,\n            pliCount: v.pliCount,\n            nackCount: v.nackCount,\n            packetsSent: v.packetsSent,\n            bytesSent: v.bytesSent,\n            qualityLimitationReason: v.qualityLimitationReason,\n            qualityLimitationDurations: v.qualityLimitationDurations,\n            qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges,\n            rid: (_a = v.rid) !== null && _a !== void 0 ? _a : v.id,\n            retransmittedPacketsSent: v.retransmittedPacketsSent,\n            targetBitrate: v.targetBitrate,\n            timestamp: v.timestamp\n          };\n          // locate the appropriate remote-inbound-rtp item\n          const r = stats.get(v.remoteId);\n          if (r) {\n            vs.jitter = r.jitter;\n            vs.packetsLost = r.packetsLost;\n            vs.roundTripTime = r.roundTripTime;\n          }\n          items.push(vs);\n        }\n      });\n      // make sure highest res layer is always first\n      items.sort((a, b) => {\n        var _a, _b;\n        return ((_a = b.frameWidth) !== null && _a !== void 0 ? _a : 0) - ((_b = a.frameWidth) !== null && _b !== void 0 ? _b : 0);\n      });\n      return items;\n    });\n  }\n  setPublishingQuality(maxQuality) {\n    const qualities = [];\n    for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) {\n      qualities.push(new SubscribedQuality({\n        quality: q,\n        enabled: q <= maxQuality\n      }));\n    }\n    this.log.debug(\"setting publishing quality. max quality \".concat(maxQuality), this.logContext);\n    this.setPublishingLayers(isSVCCodec(this.codec), qualities);\n  }\n  restartTrack(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_3, _b, _c;\n      var _d;\n      let constraints;\n      if (options) {\n        const streamConstraints = constraintsForOptions({\n          video: options\n        });\n        if (typeof streamConstraints.video !== 'boolean') {\n          constraints = streamConstraints.video;\n        }\n      }\n      yield this.restart(constraints);\n      // reset cpu constrained state after track is restarted\n      this.isCpuConstrained = false;\n      try {\n        for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n          _c = _g.value;\n          _e = false;\n          const sc = _c;\n          if (sc.sender && ((_d = sc.sender.transport) === null || _d === void 0 ? void 0 : _d.state) !== 'closed') {\n            sc.mediaStreamTrack = this.mediaStreamTrack.clone();\n            yield sc.sender.replaceTrack(sc.mediaStreamTrack);\n          }\n        }\n      } catch (e_3_1) {\n        e_3 = {\n          error: e_3_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n        } finally {\n          if (e_3) throw e_3.error;\n        }\n      }\n      // The new MediaStreamTrack may have different dimensions than the previous one\n      // (e.g. switching between cameras with different native resolutions), which would\n      // leave the sender's encoding parameters (scaleResolutionDownBy, maxBitrate, etc.)\n      // based on the old dimensions. Recompute them so the encoded output matches the\n      // new source.\n      yield this.onSenderTrackSwapped();\n    });\n  }\n  onSenderTrackSwapped() {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.refreshSenderEncodings();\n    });\n  }\n  /**\n   * Recomputes encoding parameters for this track's senders based on the current\n   * MediaStreamTrack dimensions and reapplies them via setParameters. This is a no-op\n   * if the track hasn't been published yet or if the track is in performance-optimized\n   * mode (which manages its own encodings).\n   */\n  refreshSenderEncodings() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!this.sender || !this.publishOptions || this.optimizeForPerformance) {\n        return;\n      }\n      const unlock = yield this.senderLock.lock();\n      try {\n        let dims;\n        try {\n          dims = yield this.waitForDimensions();\n        } catch (e) {\n          this.log.warn('could not determine new track dimensions, skipping encoding recompute', Object.assign(Object.assign({}, this.logContext), {\n            error: e\n          }));\n          return;\n        }\n        if (this.lastEncodedDimensions && this.lastEncodedDimensions.width === dims.width && this.lastEncodedDimensions.height === dims.height) {\n          return;\n        }\n        const isScreenShare = this.source === Track.Source.ScreenShare;\n        const newEncodings = computeVideoEncodings(isScreenShare, dims.width, dims.height, Object.assign({}, this.publishOptions));\n        yield this.applyEncodingsToSender(this.sender, newEncodings);\n        this.encodings = newEncodings;\n        this.lastEncodedDimensions = dims;\n        for (const _ref of this.simulcastCodecs) {\n          var _ref2 = _slicedToArray(_ref, 2);\n          const codec = _ref2[0];\n          const sc = _ref2[1];\n          if (!sc.sender || ((_a = sc.sender.transport) === null || _a === void 0 ? void 0 : _a.state) === 'closed') {\n            continue;\n          }\n          if (!isBackupVideoCodec(codec)) {\n            continue;\n          }\n          const backupOpts = Object.assign({}, this.publishOptions);\n          const backupEncodings = computeTrackBackupEncodings(this, codec, backupOpts);\n          if (!backupEncodings) {\n            continue;\n          }\n          yield this.applyEncodingsToSender(sc.sender, backupEncodings);\n          sc.encodings = backupEncodings;\n        }\n      } catch (e) {\n        this.log.warn('failed to apply recomputed encodings', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n      } finally {\n        unlock();\n      }\n    });\n  }\n  applyEncodingsToSender(sender, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const params = sender.getParameters();\n      if (!params.encodings || params.encodings.length !== encodings.length) {\n        return;\n      }\n      params.encodings.forEach((existing, idx) => {\n        // preserve disabled layers (dynacast / Firefox workaround in\n        // setPublishingLayersForSender set scaleResolutionDownBy/maxBitrate to sentinel\n        // values for disabled layers — don't clobber those).\n        if (existing.active === false) {\n          return;\n        }\n        const next = encodings[idx];\n        if (next.scaleResolutionDownBy !== undefined) {\n          existing.scaleResolutionDownBy = next.scaleResolutionDownBy;\n        }\n        if (next.maxBitrate !== undefined) {\n          existing.maxBitrate = next.maxBitrate;\n        }\n        if (next.maxFramerate !== undefined) {\n          existing.maxFramerate = next.maxFramerate;\n        }\n        if (next.priority !== undefined) {\n          existing.priority = next.priority;\n          existing.networkPriority = next.priority;\n        }\n      });\n      this.log.debug('updating sender encodings after track restart', Object.assign(Object.assign({}, this.logContext), {\n        encodings: params.encodings\n      }));\n      yield sender.setParameters(params);\n    });\n  }\n  setProcessor(processor_1) {\n    const _super = Object.create(null, {\n      setProcessor: {\n        get: () => super.setProcessor\n      }\n    });\n    return __awaiter(this, arguments, void 0, function (processor) {\n      var _this = this;\n      let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        var _a, e_4, _b, _c;\n        var _d, _e;\n        yield _super.setProcessor.call(_this, processor, showProcessedStreamLocally);\n        if ((_d = _this.processor) === null || _d === void 0 ? void 0 : _d.processedTrack) {\n          try {\n            for (var _f = true, _g = __asyncValues(_this.simulcastCodecs.values()), _h; _h = yield _g.next(), _a = _h.done, !_a; _f = true) {\n              _c = _h.value;\n              _f = false;\n              const sc = _c;\n              yield (_e = sc.sender) === null || _e === void 0 ? void 0 : _e.replaceTrack(_this.processor.processedTrack);\n            }\n          } catch (e_4_1) {\n            e_4 = {\n              error: e_4_1\n            };\n          } finally {\n            try {\n              if (!_f && !_a && (_b = _g.return)) yield _b.call(_g);\n            } finally {\n              if (e_4) throw e_4.error;\n            }\n          }\n        }\n      }();\n    });\n  }\n  setDegradationPreference(preference) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.degradationPreference = preference;\n      if (this.sender) {\n        try {\n          this.log.debug(\"setting degradationPreference to \".concat(preference), this.logContext);\n          const params = this.sender.getParameters();\n          params.degradationPreference = preference;\n          this.sender.setParameters(params);\n        } catch (e) {\n          this.log.warn(\"failed to set degradationPreference\", Object.assign({\n            error: e\n          }, this.logContext));\n        }\n      }\n    });\n  }\n  addSimulcastTrack(codec, encodings) {\n    if (this.simulcastCodecs.has(codec)) {\n      this.log.error(\"\".concat(codec, \" already added, skipping adding simulcast codec\"), this.logContext);\n      return;\n    }\n    const simulcastCodecInfo = {\n      codec,\n      mediaStreamTrack: this.mediaStreamTrack.clone(),\n      sender: undefined,\n      encodings\n    };\n    this.simulcastCodecs.set(codec, simulcastCodecInfo);\n    return simulcastCodecInfo;\n  }\n  setSimulcastTrackSender(codec, sender) {\n    const simulcastCodecInfo = this.simulcastCodecs.get(codec);\n    if (!simulcastCodecInfo) {\n      return;\n    }\n    simulcastCodecInfo.sender = sender;\n    // browser will reenable disabled codec/layers after new codec has been published,\n    // so refresh subscribedCodecs after publish a new codec\n    setTimeout(() => {\n      if (this.subscribedCodecs) {\n        this.setPublishingCodecs(this.subscribedCodecs);\n      }\n    }, refreshSubscribedCodecAfterNewCodec);\n  }\n  /**\n   * @internal\n   * Sets codecs that should be publishing, returns new codecs that have not yet\n   * been published\n   */\n  setPublishingCodecs(codecs) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, codecs_1, codecs_1_1;\n      var _b, e_5, _c, _d;\n      this.log.debug('setting publishing codecs', Object.assign(Object.assign({}, this.logContext), {\n        codecs,\n        currentCodec: this.codec\n      }));\n      // only enable simulcast codec for preference codec setted\n      if (!this.codec && codecs.length > 0) {\n        yield this.setPublishingLayers(isSVCCodec(codecs[0].codec), codecs[0].qualities);\n        return [];\n      }\n      this.subscribedCodecs = codecs;\n      const newCodecs = [];\n      try {\n        for (_a = true, codecs_1 = __asyncValues(codecs); codecs_1_1 = yield codecs_1.next(), _b = codecs_1_1.done, !_b; _a = true) {\n          _d = codecs_1_1.value;\n          _a = false;\n          const codec = _d;\n          if (!this.codec || this.codec === codec.codec) {\n            yield this.setPublishingLayers(isSVCCodec(codec.codec), codec.qualities);\n          } else {\n            const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec);\n            this.log.debug(\"try setPublishingCodec for \".concat(codec.codec), Object.assign(Object.assign({}, this.logContext), {\n              simulcastCodecInfo\n            }));\n            if (!simulcastCodecInfo || !simulcastCodecInfo.sender) {\n              for (const q of codec.qualities) {\n                if (q.enabled) {\n                  newCodecs.push(codec.codec);\n                  break;\n                }\n              }\n            } else if (simulcastCodecInfo.encodings) {\n              this.log.debug(\"try setPublishingLayersForSender \".concat(codec.codec), this.logContext);\n              yield setPublishingLayersForSender(simulcastCodecInfo.sender, simulcastCodecInfo.encodings, codec.qualities, this.senderLock, isSVCCodec(codec.codec), this.log, this.logContext);\n            }\n          }\n        }\n      } catch (e_5_1) {\n        e_5 = {\n          error: e_5_1\n        };\n      } finally {\n        try {\n          if (!_a && !_b && (_c = codecs_1.return)) yield _c.call(codecs_1);\n        } finally {\n          if (e_5) throw e_5.error;\n        }\n      }\n      return newCodecs;\n    });\n  }\n  /**\n   * @internal\n   * Sets layers that should be publishing\n   */\n  setPublishingLayers(isSvc, qualities) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.optimizeForPerformance) {\n        this.log.info('skipping setPublishingLayers due to optimized publishing performance', Object.assign(Object.assign({}, this.logContext), {\n          qualities\n        }));\n        return;\n      }\n      this.log.debug('setting publishing layers', Object.assign(Object.assign({}, this.logContext), {\n        qualities\n      }));\n      if (!this.sender || !this.encodings) {\n        return;\n      }\n      yield setPublishingLayersForSender(this.sender, this.encodings, qualities, this.senderLock, isSvc, this.log, this.logContext);\n    });\n  }\n  /**\n   * Designed for lower powered devices, reduces video publishing quality and disables simulcast.\n   * @experimental\n   */\n  prioritizePerformance() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.sender) {\n        throw new Error('sender not found');\n      }\n      const unlock = yield this.senderLock.lock();\n      try {\n        this.optimizeForPerformance = true;\n        const params = this.sender.getParameters();\n        params.encodings = params.encodings.map((e, idx) => {\n          var _a;\n          return Object.assign(Object.assign({}, e), {\n            active: idx === 0,\n            scaleResolutionDownBy: Math.max(1, Math.ceil(((_a = this.mediaStreamTrack.getSettings().height) !== null && _a !== void 0 ? _a : 360) / 360)),\n            scalabilityMode: idx === 0 && isSVCCodec(this.codec) ? 'L1T3' : undefined,\n            maxFramerate: idx === 0 ? 15 : 0,\n            maxBitrate: idx === 0 ? e.maxBitrate : 0\n          });\n        });\n        this.log.debug('setting performance optimised encodings', Object.assign(Object.assign({}, this.logContext), {\n          encodings: params.encodings\n        }));\n        this.encodings = params.encodings;\n        yield this.sender.setParameters(params);\n      } catch (e) {\n        this.log.error('failed to set performance optimised encodings', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n        this.optimizeForPerformance = false;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  handleAppVisibilityChanged() {\n    const _super = Object.create(null, {\n      handleAppVisibilityChanged: {\n        get: () => super.handleAppVisibilityChanged\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      yield _super.handleAppVisibilityChanged.call(this);\n      if (!isMobile()) return;\n      if (this.isInBackground && this.source === Track.Source.Camera) {\n        this._mediaStreamTrack.enabled = false;\n      }\n    });\n  }\n}\nfunction setPublishingLayersForSender(sender, senderEncodings, qualities, senderLock, isSVC, log, logContext) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const unlock = yield senderLock.lock();\n    log.debug('setPublishingLayersForSender', Object.assign(Object.assign({}, logContext), {\n      sender,\n      qualities,\n      senderEncodings\n    }));\n    try {\n      const params = sender.getParameters();\n      const encodings = params.encodings;\n      if (!encodings) {\n        return;\n      }\n      if (encodings.length !== senderEncodings.length) {\n        log.warn('cannot set publishing layers, encodings mismatch', Object.assign(Object.assign({}, logContext), {\n          encodings,\n          senderEncodings\n        }));\n        return;\n      }\n      let hasChanged = false;\n      /* disable closable spatial layer as it has video blur / frozen issue with current server / client\n      1. chrome 113: when switching to up layer with scalability Mode change, it will generate a\n            low resolution frame and recover very quickly, but noticable\n      2. livekit sfu: additional pli request cause video frozen for a few frames, also noticable */\n      const closableSpatial = false;\n      /* @ts-ignore */\n      if (closableSpatial && encodings[0].scalabilityMode) ; else {\n        if (isSVC) {\n          const hasEnabledEncoding = qualities.some(q => q.enabled);\n          if (hasEnabledEncoding) {\n            qualities.forEach(q => q.enabled = true);\n          }\n        }\n        // simulcast dynacast encodings\n        encodings.forEach((encoding, idx) => {\n          var _a;\n          let rid = (_a = encoding.rid) !== null && _a !== void 0 ? _a : '';\n          if (rid === '') {\n            rid = 'q';\n          }\n          const quality = videoQualityForRid(rid);\n          const subscribedQuality = qualities.find(q => q.quality === quality);\n          if (!subscribedQuality) {\n            return;\n          }\n          if (encoding.active !== subscribedQuality.enabled) {\n            hasChanged = true;\n            encoding.active = subscribedQuality.enabled;\n            log.debug(\"setting layer \".concat(subscribedQuality.quality, \" to \").concat(encoding.active ? 'enabled' : 'disabled'), logContext);\n            // FireFox does not support setting encoding.active to false, so we\n            // have a workaround of lowering its bitrate and resolution to the min.\n            if (isFireFox()) {\n              if (subscribedQuality.enabled) {\n                encoding.scaleResolutionDownBy = senderEncodings[idx].scaleResolutionDownBy;\n                encoding.maxBitrate = senderEncodings[idx].maxBitrate;\n                /* @ts-ignore */\n                encoding.maxFrameRate = senderEncodings[idx].maxFrameRate;\n              } else {\n                encoding.scaleResolutionDownBy = 4;\n                encoding.maxBitrate = 10;\n                /* @ts-ignore */\n                encoding.maxFrameRate = 2;\n              }\n            }\n          }\n        });\n      }\n      if (hasChanged) {\n        params.encodings = encodings;\n        log.debug(\"setting encodings\", Object.assign(Object.assign({}, logContext), {\n          encodings: params.encodings\n        }));\n        yield sender.setParameters(params);\n      }\n    } finally {\n      unlock();\n    }\n  });\n}\nfunction videoQualityForRid(rid) {\n  switch (rid) {\n    case 'f':\n      return VideoQuality.HIGH;\n    case 'h':\n      return VideoQuality.MEDIUM;\n    case 'q':\n      return VideoQuality.LOW;\n    default:\n      return VideoQuality.HIGH;\n  }\n}\nfunction videoLayersFromEncodings(width, height, encodings, svc) {\n  // default to a single layer, HQ\n  if (!encodings) {\n    return [new VideoLayer({\n      quality: VideoQuality.HIGH,\n      width,\n      height,\n      bitrate: 0,\n      ssrc: 0\n    })];\n  }\n  if (svc) {\n    // svc layers\n    /* @ts-ignore */\n    const encodingSM = encodings[0].scalabilityMode;\n    const sm = new ScalabilityMode(encodingSM);\n    const layers = [];\n    const resRatio = sm.suffix == 'h' ? 1.5 : 2;\n    const bitratesRatio = sm.suffix == 'h' ? 2 : 3;\n    for (let i = 0; i < sm.spatial; i += 1) {\n      layers.push(new VideoLayer({\n        quality: Math.min(VideoQuality.HIGH, sm.spatial - 1) - i,\n        width: Math.ceil(width / Math.pow(resRatio, i)),\n        height: Math.ceil(height / Math.pow(resRatio, i)),\n        bitrate: encodings[0].maxBitrate ? Math.ceil(encodings[0].maxBitrate / Math.pow(bitratesRatio, i)) : 0,\n        ssrc: 0\n      }));\n    }\n    return layers;\n  }\n  return encodings.map(encoding => {\n    var _a, _b, _c;\n    const scale = (_a = encoding.scaleResolutionDownBy) !== null && _a !== void 0 ? _a : 1;\n    let quality = videoQualityForRid((_b = encoding.rid) !== null && _b !== void 0 ? _b : '');\n    return new VideoLayer({\n      quality,\n      width: Math.ceil(width / scale),\n      height: Math.ceil(height / scale),\n      bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,\n      ssrc: 0\n    });\n  });\n}const lossyDataChannel = '_lossy';\nconst reliableDataChannel = '_reliable';\nconst dataTrackDataChannel = '_data_track';\nconst minReconnectWait = 2 * 1000;\nconst leaveReconnect = 'leave-reconnect';\nconst reliabeReceiveStateTTL = 30000;\nconst lossyDataChannelBufferThresholdMin = 8 * 1024;\nconst lossyDataChannelBufferThresholdMax = 256 * 1024;\nconst initialMediaSectionsAudio = 3;\nconst initialMediaSectionsVideo = 3;\nvar PCState;\n(function (PCState) {\n  PCState[PCState[\"New\"] = 0] = \"New\";\n  PCState[PCState[\"Connected\"] = 1] = \"Connected\";\n  PCState[PCState[\"Disconnected\"] = 2] = \"Disconnected\";\n  PCState[PCState[\"Reconnecting\"] = 3] = \"Reconnecting\";\n  PCState[PCState[\"Closed\"] = 4] = \"Closed\";\n})(PCState || (PCState = {}));\nvar DataChannelKind;\n(function (DataChannelKind) {\n  DataChannelKind[DataChannelKind[\"RELIABLE\"] = 0] = \"RELIABLE\";\n  DataChannelKind[DataChannelKind[\"LOSSY\"] = 1] = \"LOSSY\";\n  DataChannelKind[DataChannelKind[\"DATA_TRACK_LOSSY\"] = 2] = \"DATA_TRACK_LOSSY\";\n})(DataChannelKind || (DataChannelKind = {}));\n// Default data-channel max message size (bytes), used when the remote SDP\n// answer does not advertise an `a=max-message-size` attribute (RFC 8841).\n// `0` means \"no limit\".\nconst DEFAULT_MAX_MESSAGE_SIZE = 64000;\n/** @internal */\nclass RTCEngine extends eventsExports.EventEmitter {\n  get isClosed() {\n    return this._isClosed;\n  }\n  get isNewlyCreated() {\n    return this._isNewlyCreated;\n  }\n  get pendingReconnect() {\n    return !!this.reconnectTimeout;\n  }\n  constructor(options) {\n    var _a;\n    super();\n    this.options = options;\n    this.rtcConfig = {};\n    this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;\n    this.fullReconnectOnNext = false;\n    /**\n     * @internal\n     */\n    this.latestRemoteOfferId = 0;\n    this.subscriberPrimary = false;\n    this.pcState = PCState.New;\n    this._isClosed = true;\n    this._isNewlyCreated = true;\n    this.pendingTrackResolvers = {};\n    this.reconnectAttempts = 0;\n    this.reconnectStart = 0;\n    this.attemptingReconnect = false;\n    /** keeps track of how often an initial join connection has been tried */\n    this.joinAttempts = 0;\n    /** specifies how often an initial join connection is allowed to retry */\n    this.maxJoinAttempts = 1;\n    this.shouldFailNext = false;\n    this.shouldFailOnV1Path = false;\n    this.log = livekitLogger;\n    this.reliableDataSequence = 1;\n    this.reliableMessageBuffer = new DataPacketBuffer();\n    this.reliableReceivedState = new TTLMap(reliabeReceiveStateTTL);\n    this.lossyDataStatCurrentBytes = 0;\n    this.lossyDataStatByterate = 0;\n    this.lossyDataDropCount = 0;\n    this.midToTrackId = {};\n    /** used to indicate whether the browser is currently waiting to reconnect */\n    this.isWaitingForNetworkReconnect = false;\n    this.bufferStatusLowClosingFuture = new Future();\n    this.handleDataChannel = _a => __awaiter(this, [_a], void 0, function (_ref) {\n      var _this = this;\n      let channel = _ref.channel;\n      return function* () {\n        if (!channel) {\n          return;\n        }\n        let handler;\n        if (channel.label === reliableDataChannel) {\n          _this.reliableDCSub = channel;\n          handler = _this.handleDataMessage;\n        } else if (channel.label === lossyDataChannel) {\n          _this.lossyDCSub = channel;\n          handler = _this.handleDataMessage;\n        } else if (channel.label === dataTrackDataChannel) {\n          _this.dataTrackDCSub = channel;\n          handler = _this.handleDataTrackMessage;\n        } else {\n          return;\n        }\n        _this.log.debug(\"on data channel \".concat(channel.id, \", \").concat(channel.label));\n        channel.onmessage = handler;\n      }();\n    });\n    this.handleDataMessage = message => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e;\n      // make sure to respect incoming data message order by processing message events one after the other\n      const unlock = yield this.dataProcessLock.lock();\n      try {\n        // decode\n        let buffer;\n        if (message.data instanceof ArrayBuffer) {\n          buffer = message.data;\n        } else if (message.data instanceof Blob) {\n          buffer = yield message.data.arrayBuffer();\n        } else {\n          this.log.error('unsupported data type', {\n            data: message.data\n          });\n          return;\n        }\n        const dp = DataPacket.fromBinary(new Uint8Array(buffer));\n        if (dp.sequence > 0 && dp.participantSid !== '') {\n          const lastSeq = this.reliableReceivedState.get(dp.participantSid);\n          if (lastSeq && dp.sequence <= lastSeq) {\n            // ignore duplicate or out-of-order packets in reliable channel\n            return;\n          }\n          this.reliableReceivedState.set(dp.participantSid, dp.sequence);\n        }\n        if (((_a = dp.value) === null || _a === void 0 ? void 0 : _a.case) === 'speaker') {\n          // dispatch speaker updates\n          this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.value.speakers);\n        } else if (((_b = dp.value) === null || _b === void 0 ? void 0 : _b.case) === 'encryptedPacket') {\n          if (!this.e2eeManager) {\n            this.log.error('Received encrypted packet but E2EE not set up');\n            return;\n          }\n          const decryptedData = yield (_c = this.e2eeManager) === null || _c === void 0 ? void 0 : _c.handleEncryptedData(dp.value.value.encryptedValue, dp.value.value.iv, dp.participantIdentity, dp.value.value.keyIndex);\n          const decryptedPacket = EncryptedPacketPayload.fromBinary(decryptedData.payload);\n          const newDp = new DataPacket({\n            value: decryptedPacket.value,\n            participantIdentity: dp.participantIdentity,\n            participantSid: dp.participantSid\n          });\n          if (((_d = newDp.value) === null || _d === void 0 ? void 0 : _d.case) === 'user') {\n            // compatibility\n            applyUserDataCompat(newDp, newDp.value.value);\n          }\n          this.emit(EngineEvent.DataPacketReceived, newDp, dp.value.value.encryptionType);\n        } else {\n          if (((_e = dp.value) === null || _e === void 0 ? void 0 : _e.case) === 'user') {\n            // compatibility\n            applyUserDataCompat(dp, dp.value.value);\n          }\n          this.emit(EngineEvent.DataPacketReceived, dp, Encryption_Type.NONE);\n        }\n      } finally {\n        unlock();\n      }\n    });\n    this.handleDataTrackMessage = message => __awaiter(this, void 0, void 0, function* () {\n      // Decode / normalize into a common format\n      let buffer;\n      if (message.data instanceof ArrayBuffer) {\n        buffer = message.data;\n      } else if (message.data instanceof Blob) {\n        buffer = yield message.data.arrayBuffer();\n      } else {\n        this.log.error('unsupported data type', {\n          data: message.data\n        });\n        return;\n      }\n      this.emit('dataTrackPacketReceived', new Uint8Array(buffer));\n    });\n    this.handleDataError = event => {\n      // Errors fired while we're tearing the connection down (e.g. the SCTP transport aborting as\n      // the peer connection closes) carry no actionable information — the channel is going away\n      // regardless. Suppress them so a graceful disconnect doesn't surface spurious errors.\n      // See livekit/client-sdk-js#1953.\n      if (this._isClosed) {\n        return;\n      }\n      const channel = event.currentTarget;\n      const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';\n      if (typeof RTCErrorEvent !== 'undefined' && event instanceof RTCErrorEvent && event.error) {\n        const error = event.error;\n        this.log.error(\"DataChannel error on \".concat(channelKind, \": \").concat(error.message), {\n          error,\n          errorDetail: error.errorDetail,\n          sctpCauseCode: error.sctpCauseCode\n        });\n      } else {\n        this.log.error(\"Unknown DataChannel error on \".concat(channelKind), {\n          event\n        });\n      }\n    };\n    this.handleDataChannelClose = kind => () => {\n      var _a;\n      // A publisher DC closing while the session is up and the publisher PC is still\n      // connected is the signature of an oversized message having aborted the channel\n      // (see livekit/rust-sdks#1137). Surface it; do not attempt renegotiation.\n      if (!this._isClosed && ((_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.publisher.getConnectionState()) === 'connected') {\n        this.log.error(\"publisher data channel '\".concat(DataChannelKind[kind], \"' closed unexpectedly\"), this.logContext);\n      }\n    };\n    this.handleBufferedAmountLow = channelKind => {\n      this.updateAndEmitDCBufferStatus(channelKind);\n    };\n    // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection\n    // continues to work, we can reconnect to websocket to continue the session\n    // after a number of retries, we'll close and give up permanently\n    this.handleDisconnect = (connection, disconnectReason) => {\n      if (this._isClosed) {\n        return;\n      }\n      this.log.warn(\"\".concat(connection, \" disconnected\"));\n      if (this.reconnectAttempts === 0) {\n        // only reset start time on the first try\n        this.reconnectStart = Date.now();\n      }\n      const disconnect = duration => {\n        this.log.warn(\"could not recover connection after \".concat(this.reconnectAttempts, \" attempts, \").concat(duration, \"ms. giving up\"));\n        this.emit(EngineEvent.Disconnected);\n        this.close();\n      };\n      const duration = Date.now() - this.reconnectStart;\n      let delay = this.getNextRetryDelay({\n        elapsedMs: duration,\n        retryCount: this.reconnectAttempts\n      });\n      if (delay === null) {\n        disconnect(duration);\n        return;\n      }\n      if (connection === leaveReconnect) {\n        delay = 0;\n      }\n      this.log.debug(\"reconnecting in \".concat(delay, \"ms\"));\n      this.clearReconnectTimeout();\n      if (this.token) {\n        // token may have been refreshed, we do not want to recreate the regionUrlProvider\n        // since the current engine may have inherited a regional url\n        this.emit(EngineEvent.TokenRefreshed, this.token);\n      }\n      this.reconnectTimeout = CriticalTimers.setTimeout(() => this.attemptReconnect(disconnectReason).finally(() => this.reconnectTimeout = undefined), delay);\n    };\n    this.waitForRestarted = () => {\n      return new Promise((resolve, reject) => {\n        if (this.pcState === PCState.Connected) {\n          resolve();\n        }\n        const onRestarted = () => {\n          this.off(EngineEvent.Disconnected, onDisconnected);\n          resolve();\n        };\n        const onDisconnected = () => {\n          this.off(EngineEvent.Restarted, onRestarted);\n          reject();\n        };\n        this.once(EngineEvent.Restarted, onRestarted);\n        this.once(EngineEvent.Disconnected, onDisconnected);\n      });\n    };\n    this.updateAndEmitDCBufferStatus = kind => {\n      if (kind === DataChannelKind.RELIABLE) {\n        const dc = this.dataChannelForKind(kind);\n        if (dc) {\n          this.reliableMessageBuffer.alignBufferedAmount(dc.bufferedAmount);\n        }\n      }\n      const status = this.isBufferStatusLow(kind);\n      if (typeof status !== 'undefined' && status !== this.dcBufferStatus.get(kind)) {\n        this.dcBufferStatus.set(kind, status);\n        this.emit(EngineEvent.DCBufferStatusChanged, status, kind);\n      }\n    };\n    this.isBufferStatusLow = kind => {\n      const dc = this.dataChannelForKind(kind);\n      if (dc) {\n        return dc.bufferedAmount <= dc.bufferedAmountLowThreshold;\n      }\n    };\n    this.onRtpMapAvailable = rtpTypes => {\n      const rtpMap = new Map();\n      rtpTypes.forEach(rtp => {\n        const codec = rtp.codec.toLowerCase();\n        if (isVideoCodec(codec)) {\n          rtpMap.set(rtp.payload, codec);\n        }\n      });\n      this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap);\n    };\n    this.handleBrowserOnLine = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.url) {\n        return;\n      }\n      const hasNetworkConnection = yield fetch(toHttpUrl(this.url), {\n        method: 'HEAD'\n      }).then(resp => resp.ok).catch(() => false);\n      if (!hasNetworkConnection) {\n        return;\n      }\n      this.log.info('detected network reconnected');\n      if (\n      // in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine'\n      this.client.currentState === SignalConnectionState.RECONNECTING ||\n      // also if the browser went offline before and the engine still thinks it's in a connected state, treat it as a network interruption that we haven't noticed yet\n      this.isWaitingForNetworkReconnect && this.client.currentState === SignalConnectionState.CONNECTED) {\n        this.clearReconnectTimeout();\n        this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED);\n        this.isWaitingForNetworkReconnect = false;\n      }\n    });\n    this.handleBrowserOffline = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.url) {\n        return;\n      }\n      try {\n        yield Promise.race([fetch(toHttpUrl(this.url), {\n          method: 'HEAD'\n        }),\n        // if there's no internet connection the fetch rejects immediately, so we only use a short timeout here\n        sleep(4000).then(() => Promise.reject())]);\n      } catch (e) {\n        // only set if the browser still thinks it's offline after the request failed\n        if (window.navigator.onLine === false) {\n          this.log.info('detected network interruption');\n          this.isWaitingForNetworkReconnect = true;\n        }\n      }\n    });\n    this.log = getLogger((_a = options.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Engine, () => this.logContext);\n    this.loggerOptions = {\n      loggerName: options.loggerName,\n      loggerContextCb: () => this.logContext\n    };\n    this.client = new SignalClient(undefined, this.loggerOptions);\n    this.client.signalLatency = this.options.expSignalLatency;\n    this.reconnectPolicy = this.options.reconnectPolicy;\n    this.closingLock = new _();\n    this.dataProcessLock = new _();\n    this.dcBufferStatus = new Map([[DataChannelKind.RELIABLE, true], [DataChannelKind.LOSSY, true], [DataChannelKind.DATA_TRACK_LOSSY, true]]);\n    this.client.onParticipantUpdate = updates => this.emit(EngineEvent.ParticipantUpdate, updates);\n    this.client.onConnectionQuality = update => this.emit(EngineEvent.ConnectionQualityUpdate, update);\n    this.client.onRoomUpdate = update => this.emit(EngineEvent.RoomUpdate, update);\n    this.client.onSubscriptionError = resp => this.emit(EngineEvent.SubscriptionError, resp);\n    this.client.onSubscriptionPermissionUpdate = update => this.emit(EngineEvent.SubscriptionPermissionUpdate, update);\n    this.client.onSpeakersChanged = update => this.emit(EngineEvent.SpeakersChanged, update);\n    this.client.onStreamStateUpdate = update => this.emit(EngineEvent.StreamStateChanged, update);\n    this.client.onRequestResponse = response => this.emit(EngineEvent.SignalRequestResponse, response);\n    this.client.onParticipantUpdate = updates => this.emit(EngineEvent.ParticipantUpdate, updates);\n    this.client.onJoined = joinResponse => this.emit(EngineEvent.Joined, joinResponse);\n    this.on(EngineEvent.Closing, () => {\n      var _a, _b;\n      (_b = (_a = this.bufferStatusLowClosingFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, new UnexpectedConnectionState('engine closed'));\n    });\n    // Swallow the rejection at the source so it doesn't surface as an unhandled promise rejection\n    // when no waitForBufferStatusLow callers are attached.\n    this.bufferStatusLowClosingFuture.promise.catch(() => {});\n  }\n  /** @internal */\n  get logContext() {\n    var _a, _b, _c, _d, _e, _f;\n    return {\n      room: (_b = (_a = this.latestJoinResponse) === null || _a === void 0 ? void 0 : _a.room) === null || _b === void 0 ? void 0 : _b.name,\n      roomID: (_d = (_c = this.latestJoinResponse) === null || _c === void 0 ? void 0 : _c.room) === null || _d === void 0 ? void 0 : _d.sid,\n      participant: (_f = (_e = this.latestJoinResponse) === null || _e === void 0 ? void 0 : _e.participant) === null || _f === void 0 ? void 0 : _f.identity,\n      participantID: this.participantSid\n    };\n  }\n  join(url_1, token_1, opts_1, abortSignal_1) {\n    return __awaiter(this, arguments, void 0, function (url, token, opts, abortSignal) {\n      var _this2 = this;\n      let useV0Path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      return function* () {\n        var _a, _b, _c;\n        _this2._isNewlyCreated = false;\n        _this2.url = url;\n        _this2.token = token;\n        _this2.signalOpts = opts;\n        _this2.maxJoinAttempts = opts.maxRetries;\n        try {\n          _this2.joinAttempts += 1;\n          _this2.setupSignalClientCallbacks();\n          // Whether the initial publisher offer is bundled with the join request. Computed once and\n          // reused after the join below. Only the (non-Firefox) offer-with-join path does this.\n          const sendOfferWithJoin = !useV0Path && isPublisherOfferWithJoinSupported();\n          let offerProto;\n          if (sendOfferWithJoin) {\n            if (!_this2.pcManager) {\n              // Firefox is excluded from offer-with-join (see isPublisherOfferWithJoinSupported):\n              // customers reported ICE connectivity problems for FF on this path (#1919) that we were\n              // never able to reproduce, so out of caution FF stays on the deferred path below. The\n              // exact cause is unknown — note that ICE gathering does not actually start here, since\n              // createInitialOffer() defers setLocalDescription (via pendingInitialOffer) until the\n              // answer is applied, after updateConfiguration() has set the server's TURN servers.\n              yield _this2.configure();\n              _this2.applyInitialPublisherLayout();\n            }\n            const offer = yield (_a = _this2.pcManager) === null || _a === void 0 ? void 0 : _a.publisher.createInitialOffer();\n            if (offer) {\n              offerProto = toProtoSessionDescription(offer.offer, offer.offerId);\n            }\n          }\n          if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {\n            throw ConnectionError.cancelled('Connection aborted');\n          }\n          if (!useV0Path && _this2.shouldFailOnV1Path) {\n            _this2.shouldFailOnV1Path = false;\n            throw ConnectionError.serviceNotFound('Simulated v1 path failure', 'v0-rtc');\n          }\n          const joinResponse = yield _this2.client.join(url, token, opts, abortSignal, useV0Path, offerProto);\n          _this2._isClosed = false;\n          _this2.latestJoinResponse = joinResponse;\n          _this2.participantSid = (_b = joinResponse.participant) === null || _b === void 0 ? void 0 : _b.sid;\n          _this2.subscriberPrimary = joinResponse.subscriberPrimary;\n          if (sendOfferWithJoin) {\n            (_c = _this2.pcManager) === null || _c === void 0 ? void 0 : _c.updateConfiguration(_this2.makeRTCConfiguration(joinResponse));\n          } else {\n            if (!_this2.pcManager) {\n              // Deferred path (Firefox, and V0): configure with the join response so the PC picks up\n              // the server's ICE servers and topology, then negotiate separately rather than bundling\n              // the offer with the join.\n              yield _this2.configure(joinResponse, !useV0Path);\n              if (!useV0Path) {\n                // The V1 first offer must carry the media layout so Firefox binds receive decoders for\n                // subscribed tracks — without it, subscribed audio/video arrive as RTP but\n                // never decode. V0 (legacy dual-PC) keeps its original lazy behavior.\n                _this2.applyInitialPublisherLayout();\n              }\n            }\n            // create offer\n            if (!_this2.subscriberPrimary || joinResponse.fastPublish) {\n              _this2.negotiate().catch(err => {\n                _this2.log.error(err);\n              });\n            }\n          }\n          _this2.registerOnLineListener();\n          _this2.clientConfiguration = joinResponse.clientConfiguration;\n          _this2.emit(EngineEvent.SignalConnected, joinResponse);\n          let serverInfo = joinResponse.serverInfo;\n          if (!serverInfo) {\n            serverInfo = {\n              version: joinResponse.serverVersion,\n              region: joinResponse.serverRegion\n            };\n          }\n          _this2.log.info(\"connected to Livekit Server \".concat(Object.entries(serverInfo).map(_ref2 => {\n            let _ref3 = _slicedToArray(_ref2, 2),\n              key = _ref3[0],\n              value = _ref3[1];\n            return \"\".concat(key, \": \").concat(value);\n          }).join(', ')));\n          return {\n            joinResponse,\n            serverInfo\n          };\n        } catch (e) {\n          if (e instanceof ConnectionError) {\n            if (e.reason === ConnectionErrorReason.ServerUnreachable) {\n              _this2.log.warn(\"Couldn't connect to server, attempt \".concat(_this2.joinAttempts, \" of \").concat(_this2.maxJoinAttempts));\n              if (_this2.joinAttempts < _this2.maxJoinAttempts) {\n                return _this2.join(url, token, opts, abortSignal, useV0Path);\n              }\n            } else if (e.reason === ConnectionErrorReason.ServiceNotFound) {\n              _this2.log.warn(\"Initial connection failed: \".concat(e.message, \" \\u2013 Retrying\"));\n              if (_this2.pcManager) {\n                _this2.pcManager.onStateChange = undefined;\n                yield _this2.cleanupPeerConnections();\n              }\n              return _this2.join(url, token, opts, abortSignal, true);\n            }\n          }\n          throw e;\n        }\n      }();\n    });\n  }\n  close() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.closingLock.lock();\n      if (this.isClosed) {\n        unlock();\n        return;\n      }\n      try {\n        this._isClosed = true;\n        this.joinAttempts = 0;\n        this.emit(EngineEvent.Closing);\n        this.removeAllListeners();\n        this.deregisterOnLineListener();\n        this.clearPendingReconnect();\n        this.cleanupLossyDataStats();\n        yield this.cleanupPeerConnections();\n        yield this.cleanupClient();\n      } finally {\n        unlock();\n      }\n    });\n  }\n  cleanupPeerConnections() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const dcCleanup = dc => {\n        if (!dc) {\n          return;\n        }\n        // Detach the data channel handlers before closing anything. Closing a peer connection tears\n        // down the SCTP transport, which can dispatch `error`/`close` events on the still-open data\n        // channels; if our handlers are still attached at that point, handleDataError logs a spurious\n        // \"Unknown DataChannel error\" during an otherwise graceful disconnect. Removing the handlers\n        // before dc.close()/pcManager.close() makes this deterministic regardless of how/when the\n        // browser dispatches those teardown events. See livekit/client-sdk-js#1953.\n        dc.onbufferedamountlow = null;\n        dc.onclose = null;\n        dc.onclosing = null;\n        dc.onerror = null;\n        dc.onmessage = null;\n        dc.onopen = null;\n        dc.close();\n      };\n      dcCleanup(this.lossyDC);\n      dcCleanup(this.lossyDCSub);\n      dcCleanup(this.reliableDC);\n      dcCleanup(this.reliableDCSub);\n      dcCleanup(this.dataTrackDC);\n      dcCleanup(this.dataTrackDCSub);\n      yield (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.close();\n      this.pcManager = undefined;\n      this.lossyDC = undefined;\n      this.lossyDCSub = undefined;\n      this.reliableDC = undefined;\n      this.reliableDCSub = undefined;\n      this.dataTrackDC = undefined;\n      this.dataTrackDCSub = undefined;\n      this.reliableMessageBuffer = new DataPacketBuffer();\n      this.reliableDataSequence = 1;\n      this.reliableReceivedState.clear();\n    });\n  }\n  cleanupLossyDataStats() {\n    this.lossyDataStatByterate = 0;\n    this.lossyDataStatCurrentBytes = 0;\n    if (this.lossyDataStatInterval) {\n      clearInterval(this.lossyDataStatInterval);\n      this.lossyDataStatInterval = undefined;\n    }\n    this.lossyDataDropCount = 0;\n  }\n  cleanupClient() {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.client.close();\n      this.client.resetCallbacks();\n      // Any in-flight addTrack requests are orphaned by the signal reconnect — the new session\n      // won't deliver `trackPublishedResponse` for them, so reject the pending resolvers and\n      // clear the map. Otherwise a subsequent `addTrack` call with the same client id (e.g. a\n      // publish retry after a `NegotiationError`) throws `TrackInvalidError`.\n      for (const cid of Object.keys(this.pendingTrackResolvers)) {\n        this.pendingTrackResolvers[cid].reject();\n      }\n      this.pendingTrackResolvers = {};\n    });\n  }\n  addTrack(req) {\n    if (this.pendingTrackResolvers[req.cid]) {\n      throw new TrackInvalidError('a track with the same ID has already been published');\n    }\n    return new Promise((resolve, reject) => {\n      const publicationTimeout = setTimeout(() => {\n        delete this.pendingTrackResolvers[req.cid];\n        reject(ConnectionError.timeout('publication of local track timed out, no response from server'));\n      }, 10000);\n      this.pendingTrackResolvers[req.cid] = {\n        resolve: info => {\n          clearTimeout(publicationTimeout);\n          resolve(info);\n        },\n        reject: () => {\n          clearTimeout(publicationTimeout);\n          reject(new Error('Cancelled publication by calling unpublish'));\n        }\n      };\n      this.client.sendAddTrack(req);\n    });\n  }\n  /**\n   * Removes sender from PeerConnection, returning true if it was removed successfully\n   * and a negotiation is necessary\n   * @param sender\n   * @returns\n   */\n  removeTrack(sender) {\n    if (sender.track && this.pendingTrackResolvers[sender.track.id]) {\n      const reject = this.pendingTrackResolvers[sender.track.id].reject;\n      if (reject) {\n        reject();\n      }\n      delete this.pendingTrackResolvers[sender.track.id];\n    }\n    try {\n      this.pcManager.removeTrack(sender);\n      return true;\n    } catch (e) {\n      this.log.warn('failed to remove track', {\n        error: e\n      });\n    }\n    return false;\n  }\n  updateMuteStatus(trackSid, muted) {\n    this.client.sendMuteTrack(trackSid, muted);\n  }\n  get dataSubscriberReadyState() {\n    var _a;\n    return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;\n  }\n  getConnectedServerAddress() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      return (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getConnectedAddress();\n    });\n  }\n  /* @internal */\n  setRegionStrategy(strategy) {\n    this.regionStrategy = strategy;\n  }\n  configure(joinResponse, useSinglePeerConnection) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      // already configured\n      if (this.pcManager && this.pcManager.currentState !== PCTransportState.NEW) {\n        return;\n      }\n      if (!joinResponse) {\n        const rtcConfig = this.makeRTCConfiguration();\n        this.pcManager = new PCTransportManager('publisher-only', this.loggerOptions, rtcConfig);\n      } else {\n        this.participantSid = (_a = joinResponse.participant) === null || _a === void 0 ? void 0 : _a.sid;\n        const rtcConfig = this.makeRTCConfiguration(joinResponse);\n        this.pcManager = new PCTransportManager(useSinglePeerConnection ? 'publisher-only' : joinResponse.subscriberPrimary ? 'subscriber-primary' : 'publisher-primary', this.loggerOptions, rtcConfig);\n      }\n      this.emit(EngineEvent.TransportsCreated, this.pcManager.publisher, this.pcManager.subscriber);\n      this.pcManager.onIceCandidate = (candidate, target) => {\n        this.client.sendIceCandidate(candidate, target);\n      };\n      this.pcManager.onPublisherOffer = (offer, offerId) => {\n        this.client.sendOffer(offer, offerId);\n      };\n      this.pcManager.onDataChannel = this.handleDataChannel;\n      this.pcManager.onStateChange = (connectionState, publisherState, subscriberState) => __awaiter(this, void 0, void 0, function* () {\n        this.log.debug(\"primary PC state changed \".concat(connectionState));\n        if (['closed', 'disconnected', 'failed'].includes(publisherState)) {\n          // reset publisher connection promise\n          this.publisherConnectionPromise = undefined;\n        }\n        if (connectionState === PCTransportState.CONNECTED) {\n          const shouldEmit = this.pcState === PCState.New;\n          this.pcState = PCState.Connected;\n          if (shouldEmit) {\n            this.emit(EngineEvent.Connected, this.latestJoinResponse);\n          }\n        } else if (connectionState === PCTransportState.FAILED) {\n          // on Safari, PeerConnection will switch to 'disconnected' during renegotiation\n          if (this.pcState === PCState.Connected || this.pcState === PCState.Reconnecting) {\n            this.pcState = PCState.Disconnected;\n            this.handleDisconnect('peerconnection failed', subscriberState === 'failed' ? ReconnectReason.RR_SUBSCRIBER_FAILED : ReconnectReason.RR_PUBLISHER_FAILED);\n          }\n        }\n        // detect cases where both signal client and peer connection are severed and assume that user has lost network connection\n        const isSignalSevered = this.client.isDisconnected || this.client.currentState === SignalConnectionState.RECONNECTING;\n        const isPCSevered = [PCTransportState.FAILED, PCTransportState.CLOSING, PCTransportState.CLOSED].includes(connectionState);\n        if (isSignalSevered && isPCSevered && !this._isClosed) {\n          this.emit(EngineEvent.Offline);\n        }\n      });\n      this.pcManager.onTrack = ev => {\n        // this fires after the underlying transceiver is stopped and potentially\n        // peer connection closed, so do not bubble up if there are no streams\n        if (ev.streams.length === 0) return;\n        this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);\n      };\n    });\n  }\n  setupSignalClientCallbacks() {\n    // configure signaling client\n    this.client.onAnswer = (sd, offerId, midToTrackId) => __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        return;\n      }\n      this.log.debug('received server answer', {\n        RTCSdpType: sd.type,\n        sdp: sd.sdp,\n        midToTrackId\n      });\n      this.midToTrackId = midToTrackId;\n      yield this.pcManager.setPublisherAnswer(sd, offerId);\n    });\n    // add candidate on trickle\n    this.client.onTrickle = (candidate, target) => {\n      if (!this.pcManager) {\n        return;\n      }\n      this.log.debug('got ICE candidate from peer', {\n        candidate,\n        target\n      });\n      this.pcManager.addIceCandidate(candidate, target);\n    };\n    // when server creates an offer for the client\n    this.client.onOffer = (sd, offerId, midToTrackId) => __awaiter(this, void 0, void 0, function* () {\n      this.latestRemoteOfferId = offerId;\n      if (!this.pcManager) {\n        return;\n      }\n      this.midToTrackId = midToTrackId;\n      const answer = yield this.pcManager.createSubscriberAnswerFromOffer(sd, offerId);\n      if (answer) {\n        this.client.sendAnswer(answer, offerId);\n      }\n    });\n    this.client.onLocalTrackPublished = res => {\n      var _a;\n      this.log.debug('received trackPublishedResponse', {\n        cid: res.cid,\n        track: (_a = res.track) === null || _a === void 0 ? void 0 : _a.sid\n      });\n      if (!this.pendingTrackResolvers[res.cid]) {\n        this.log.error(\"missing track resolver for \".concat(res.cid), {\n          cid: res.cid\n        });\n        return;\n      }\n      const resolve = this.pendingTrackResolvers[res.cid].resolve;\n      delete this.pendingTrackResolvers[res.cid];\n      resolve(res.track);\n    };\n    this.client.onLocalTrackUnpublished = response => {\n      this.emit(EngineEvent.LocalTrackUnpublished, response);\n    };\n    this.client.onLocalTrackSubscribed = trackSid => {\n      this.emit(EngineEvent.LocalTrackSubscribed, trackSid);\n    };\n    this.client.onTokenRefresh = token => {\n      this.token = token;\n      this.emit(EngineEvent.TokenRefreshed, token);\n    };\n    this.client.onRemoteMuteChanged = (trackSid, muted) => {\n      this.emit(EngineEvent.RemoteMute, trackSid, muted);\n    };\n    this.client.onSubscribedQualityUpdate = update => {\n      this.emit(EngineEvent.SubscribedQualityUpdate, update);\n    };\n    this.client.onRoomMoved = res => {\n      var _a;\n      this.participantSid = (_a = res.participant) === null || _a === void 0 ? void 0 : _a.sid;\n      if (this.latestJoinResponse) {\n        this.latestJoinResponse.room = res.room;\n      }\n      this.emit(EngineEvent.RoomMoved, res);\n    };\n    this.client.onMediaSectionsRequirement = requirement => {\n      this.addMediaSections(requirement.numAudios, requirement.numVideos);\n      this.negotiate();\n    };\n    this.client.onPublishDataTrackResponse = event => {\n      this.emit(EngineEvent.PublishDataTrackResponse, event);\n    };\n    this.client.onUnPublishDataTrackResponse = event => {\n      this.emit(EngineEvent.UnPublishDataTrackResponse, event);\n    };\n    this.client.onDataTrackSubscriberHandles = event => {\n      this.emit(EngineEvent.DataTrackSubscriberHandles, event);\n    };\n    this.client.onClose = () => {\n      this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED);\n    };\n    this.client.onLeave = leave => {\n      this.log.info(\"client leave request received (action=\".concat(leave === null || leave === void 0 ? void 0 : leave.action, \")\"), {\n        reason: leave === null || leave === void 0 ? void 0 : leave.reason\n      });\n      if (leave.regions) {\n        this.log.debug('updating regions');\n        this.emit(EngineEvent.ServerRegionsReported, leave.regions);\n      }\n      switch (leave.action) {\n        case LeaveRequest_Action.DISCONNECT:\n          this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);\n          this.close();\n          break;\n        case LeaveRequest_Action.RECONNECT:\n          this.fullReconnectOnNext = true;\n          // reconnect immediately instead of waiting for next attempt\n          this.handleDisconnect(leaveReconnect);\n          break;\n        case LeaveRequest_Action.RESUME:\n          // reconnect immediately instead of waiting for next attempt\n          this.handleDisconnect(leaveReconnect);\n      }\n    };\n  }\n  makeRTCConfiguration(serverResponse) {\n    var _a;\n    const rtcConfig = Object.assign({}, this.rtcConfig);\n    // E2EE and packet trailer extraction both rely on encoded frame transforms.\n    // Only opt into the createEncodedStreams flavor when that path will be\n    // used; RTCRtpScriptTransform does not need the PeerConnection flag.\n    const needsInsertableStreams = ((_a = this.signalOpts) === null || _a === void 0 ? void 0 : _a.e2eeEnabled) || this.frameMetadataWorker && !shouldUseFrameMetadataScriptTransform();\n    if (needsInsertableStreams && isInsertableStreamSupported()) {\n      this.log.debug('E2EE - setting up transports with insertable streams');\n      //  this makes sure that no data is sent before the transforms are ready\n      // @ts-ignore\n      rtcConfig.encodedInsertableStreams = true;\n    }\n    // @ts-ignore\n    rtcConfig.sdpSemantics = 'unified-plan';\n    // @ts-ignore\n    rtcConfig.continualGatheringPolicy = 'gather_continually';\n    if (!serverResponse) {\n      return rtcConfig;\n    }\n    // update ICE servers before creating PeerConnection\n    if (serverResponse.iceServers && !rtcConfig.iceServers) {\n      const rtcIceServers = [];\n      serverResponse.iceServers.forEach(iceServer => {\n        const rtcIceServer = {\n          urls: iceServer.urls\n        };\n        if (iceServer.username) rtcIceServer.username = iceServer.username;\n        if (iceServer.credential) {\n          rtcIceServer.credential = iceServer.credential;\n        }\n        rtcIceServers.push(rtcIceServer);\n      });\n      rtcConfig.iceServers = rtcIceServers;\n    }\n    if (serverResponse.clientConfiguration && serverResponse.clientConfiguration.forceRelay === ClientConfigSetting.ENABLED) {\n      rtcConfig.iceTransportPolicy = 'relay';\n    }\n    return rtcConfig;\n  }\n  /**\n   * Populate the publisher PC so its first offer carries the data channels + recvonly media\n   * sections. Required for every V1 connection: Firefox only binds receive decoders for media\n   * present in that first offer, and the offer-with-join path needs the sections to\n   * build a meaningful initial offer. Must be called on a configured pcManager.\n   */\n  applyInitialPublisherLayout() {\n    this.createDataChannels();\n    /**\n     * Native libwebrtc does not support pre-populating the media sections,\n     * so we skip it for React Native.\n     *\n     * Related: https://github.com/livekit/rust-sdks/pull/1151\n     */\n    if (!isReactNative()) {\n      this.addMediaSections(initialMediaSectionsAudio, initialMediaSectionsVideo);\n    }\n  }\n  addMediaSections(numAudios, numVideos) {\n    var _a, _b;\n    const transceiverInit = {\n      direction: 'recvonly'\n    };\n    for (let i = 0; i < numAudios; i++) {\n      (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.addPublisherTransceiverOfKind('audio', transceiverInit);\n    }\n    for (let i = 0; i < numVideos; i++) {\n      (_b = this.pcManager) === null || _b === void 0 ? void 0 : _b.addPublisherTransceiverOfKind('video', transceiverInit);\n    }\n  }\n  createDataChannels() {\n    if (!this.pcManager) {\n      return;\n    }\n    // clear old data channel callbacks if recreate\n    if (this.lossyDC) {\n      this.lossyDC.onmessage = null;\n      this.lossyDC.onerror = null;\n      this.lossyDC.onclose = null;\n    }\n    if (this.reliableDC) {\n      this.reliableDC.onmessage = null;\n      this.reliableDC.onerror = null;\n      this.reliableDC.onclose = null;\n    }\n    if (this.dataTrackDC) {\n      this.dataTrackDC.onmessage = null;\n      this.dataTrackDC.onerror = null;\n      this.dataTrackDC.onclose = null;\n    }\n    // create data channels\n    this.lossyDC = this.pcManager.createPublisherDataChannel(lossyDataChannel, {\n      ordered: false,\n      maxRetransmits: 0\n    });\n    this.reliableDC = this.pcManager.createPublisherDataChannel(reliableDataChannel, {\n      ordered: true\n    });\n    this.dataTrackDC = this.pcManager.createPublisherDataChannel(dataTrackDataChannel, {\n      ordered: false,\n      maxRetransmits: 0\n    });\n    // also handle messages over the pub channel, for backwards compatibility\n    this.lossyDC.onmessage = this.handleDataMessage;\n    this.reliableDC.onmessage = this.handleDataMessage;\n    this.dataTrackDC.onmessage = this.handleDataTrackMessage;\n    // handle datachannel errors\n    this.lossyDC.onerror = this.handleDataError;\n    this.reliableDC.onerror = this.handleDataError;\n    this.dataTrackDC.onerror = this.handleDataError;\n    // detect unexpected publisher data channel closes\n    this.lossyDC.onclose = this.handleDataChannelClose(DataChannelKind.LOSSY);\n    this.reliableDC.onclose = this.handleDataChannelClose(DataChannelKind.RELIABLE);\n    this.dataTrackDC.onclose = this.handleDataChannelClose(DataChannelKind.DATA_TRACK_LOSSY);\n    // set up dc buffer threshold, set to 64kB (otherwise 0 by default)\n    this.lossyDC.bufferedAmountLowThreshold = 65535;\n    this.reliableDC.bufferedAmountLowThreshold = 65535;\n    this.dataTrackDC.bufferedAmountLowThreshold = 65535;\n    // handle buffer amount low events\n    this.lossyDC.onbufferedamountlow = () => this.handleBufferedAmountLow(DataChannelKind.LOSSY);\n    this.reliableDC.onbufferedamountlow = () => this.handleBufferedAmountLow(DataChannelKind.RELIABLE);\n    this.dataTrackDC.onbufferedamountlow = () => this.handleBufferedAmountLow(DataChannelKind.DATA_TRACK_LOSSY);\n    this.cleanupLossyDataStats();\n    this.lossyDataStatInterval = setInterval(() => {\n      this.lossyDataStatByterate = this.lossyDataStatCurrentBytes;\n      this.lossyDataStatCurrentBytes = 0;\n      const dc = this.dataChannelForKind(DataChannelKind.LOSSY);\n      if (dc) {\n        // control buffered latency to ~100ms\n        const threshold = this.lossyDataStatByterate / 10;\n        dc.bufferedAmountLowThreshold = Math.min(Math.max(threshold, lossyDataChannelBufferThresholdMin), lossyDataChannelBufferThresholdMax);\n      }\n    }, 1000);\n  }\n  createSender(track, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let sender;\n      if (supportsTransceiver()) {\n        sender = yield this.createTransceiverRTCRtpSender(track, opts, encodings);\n      } else if (supportsAddTrack()) {\n        this.log.warn('using add-track fallback');\n        sender = yield this.createRTCRtpSender(track.mediaStreamTrack);\n      } else {\n        throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device');\n      }\n      this.setupFrameMetadataSender(sender, opts);\n      return sender;\n    });\n  }\n  createSimulcastSender(track, simulcastTrack, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let sender;\n      if (supportsTransceiver()) {\n        sender = yield this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings);\n      } else if (supportsAddTrack()) {\n        this.log.debug('using add-track fallback');\n        sender = yield this.createRTCRtpSender(track.mediaStreamTrack);\n      } else {\n        throw new UnexpectedConnectionState('Cannot stream on this device');\n      }\n      if (sender) {\n        this.setupFrameMetadataSender(sender, opts);\n      }\n      return sender;\n    });\n  }\n  get frameMetadataWorker() {\n    var _a, _b;\n    return (_b = (_a = this.options.frameMetadata) !== null && _a !== void 0 ? _a : this.options.packetTrailer) === null || _b === void 0 ? void 0 : _b.worker;\n  }\n  setupFrameMetadataSender(sender) {\n    let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a, _b, _c;\n    const worker = this.frameMetadataWorker;\n    if (!worker || ((_a = this.signalOpts) === null || _a === void 0 ? void 0 : _a.e2eeEnabled)) {\n      return;\n    }\n    const frameMetadata = (_b = opts.frameMetadata) !== null && _b !== void 0 ? _b : opts.packetTrailer;\n    const hasMetadata = hasFrameMetadataPublishOptions(frameMetadata);\n    if (shouldUseFrameMetadataScriptTransform()) {\n      if (hasMetadata) {\n        // @ts-ignore\n        sender.transform = new RTCRtpScriptTransform(worker, {\n          kind: 'encode',\n          packetTrailer: frameMetadata\n        });\n      }\n      return;\n    }\n    if (!isFrameMetadataSupported((_c = this.options.frameMetadata) !== null && _c !== void 0 ? _c : this.options.packetTrailer) || !('createEncodedStreams' in sender)) {\n      if (hasMetadata) {\n        this.log.warn('frame metadata transform not supported; skipping write', this.logContext);\n      }\n      return;\n    }\n    // @ts-ignore\n    const _sender$createEncoded = sender.createEncodedStreams(),\n      readable = _sender$createEncoded.readable,\n      writable = _sender$createEncoded.writable;\n    if (hasMetadata) {\n      worker.postMessage({\n        kind: 'encode',\n        data: {\n          readableStream: readable,\n          writableStream: writable,\n          packetTrailer: frameMetadata\n        }\n      }, [readable, writable]);\n    } else {\n      readable.pipeTo(writable);\n    }\n  }\n  createTransceiverRTCRtpSender(track, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher is closed');\n      }\n      const streams = [];\n      if (track.mediaStream) {\n        streams.push(track.mediaStream);\n      }\n      if (isVideoTrack(track)) {\n        track.codec = opts.videoCodec;\n      }\n      const transceiverInit = {\n        direction: 'sendonly',\n        streams\n      };\n      if (encodings) {\n        transceiverInit.sendEncodings = encodings;\n      }\n      // addTransceiver for react-native is async. web is synchronous, but await won't effect it.\n      const transceiver = yield this.pcManager.addPublisherTransceiver(track.mediaStreamTrack, transceiverInit);\n      return transceiver.sender;\n    });\n  }\n  createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher is closed');\n      }\n      const transceiverInit = {\n        direction: 'sendonly'\n      };\n      if (encodings) {\n        transceiverInit.sendEncodings = encodings;\n      }\n      // addTransceiver for react-native is async. web is synchronous, but await won't effect it.\n      const transceiver = yield this.pcManager.addPublisherTransceiver(simulcastTrack.mediaStreamTrack, transceiverInit);\n      if (!opts.videoCodec) {\n        return;\n      }\n      track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender);\n      return transceiver.sender;\n    });\n  }\n  createRTCRtpSender(track) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher is closed');\n      }\n      return this.pcManager.addPublisherTrack(track);\n    });\n  }\n  attemptReconnect(reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      if (this._isClosed) {\n        return;\n      }\n      // guard for attempting reconnection multiple times while one attempt is still not finished\n      if (this.attemptingReconnect) {\n        this.log.warn('already attempting reconnect, returning early');\n        return;\n      }\n      if (((_a = this.clientConfiguration) === null || _a === void 0 ? void 0 : _a.resumeConnection) === ClientConfigSetting.DISABLED ||\n      // signaling state could change to closed due to hardware sleep\n      // those connections cannot be resumed\n      ((_c = (_b = this.pcManager) === null || _b === void 0 ? void 0 : _b.currentState) !== null && _c !== void 0 ? _c : PCTransportState.NEW) === PCTransportState.NEW) {\n        this.fullReconnectOnNext = true;\n      }\n      try {\n        this.attemptingReconnect = true;\n        if (this.fullReconnectOnNext) {\n          yield this.restartConnection();\n        } else {\n          yield this.resumeConnection(reason);\n        }\n        this.clearPendingReconnect();\n        this.fullReconnectOnNext = false;\n      } catch (e) {\n        this.reconnectAttempts += 1;\n        let recoverable = true;\n        if (e instanceof UnexpectedConnectionState) {\n          this.log.debug('received unrecoverable error', {\n            error: e\n          });\n          // unrecoverable\n          recoverable = false;\n        } else if (!(e instanceof SignalReconnectError)) {\n          // cannot resume\n          this.fullReconnectOnNext = true;\n        }\n        if (recoverable) {\n          this.handleDisconnect('reconnect', ReconnectReason.RR_UNKNOWN);\n        } else {\n          this.log.info(\"could not recover connection after \".concat(this.reconnectAttempts, \" attempts, \").concat(Date.now() - this.reconnectStart, \"ms. giving up\"));\n          this.emit(EngineEvent.Disconnected);\n          yield this.close();\n        }\n      } finally {\n        this.attemptingReconnect = false;\n      }\n    });\n  }\n  getNextRetryDelay(context) {\n    try {\n      return this.reconnectPolicy.nextRetryDelayInMs(context);\n    } catch (e) {\n      this.log.warn('encountered error in reconnect policy', {\n        error: e\n      });\n    }\n    // error in user code with provided reconnect policy, stop reconnecting\n    return null;\n  }\n  restartConnection(regionUrl) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      try {\n        if (!this.url || !this.token) {\n          // permanent failure, don't attempt reconnection\n          throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n        }\n        this.log.info(\"reconnecting, attempt: \".concat(this.reconnectAttempts));\n        this.emit(EngineEvent.Restarting);\n        if (!this.client.isDisconnected) {\n          yield this.client.sendLeave();\n        }\n        yield this.cleanupPeerConnections();\n        yield this.cleanupClient();\n        let joinResponse;\n        try {\n          if (!this.signalOpts) {\n            this.log.warn('attempted connection restart, without signal options present');\n            throw new SignalReconnectError();\n          }\n          // in case a regionUrl is passed, the region URL takes precedence\n          joinResponse = (yield this.join(regionUrl !== null && regionUrl !== void 0 ? regionUrl : this.url, this.token, this.signalOpts, undefined, !this.options.singlePeerConnection)).joinResponse;\n        } catch (e) {\n          if (e instanceof ConnectionError && e.reason === ConnectionErrorReason.NotAllowed) {\n            throw new UnexpectedConnectionState('could not reconnect, token might be expired');\n          }\n          throw new SignalReconnectError();\n        }\n        if (this.shouldFailNext) {\n          this.shouldFailNext = false;\n          throw new Error('simulated failure');\n        }\n        this.client.setReconnected();\n        this.emit(EngineEvent.SignalRestarted, joinResponse);\n        yield this.waitForPCReconnected();\n        // re-check signal connection state before setting engine as resumed\n        if (this.client.currentState !== SignalConnectionState.CONNECTED) {\n          throw new SignalReconnectError('Signal connection got severed during reconnect');\n        }\n        (_a = this.regionStrategy) === null || _a === void 0 ? void 0 : _a.resetAttempts();\n        // reconnect success\n        this.emit(EngineEvent.Restarted);\n      } catch (error) {\n        const nextRegionUrl = yield (_b = this.regionStrategy) === null || _b === void 0 ? void 0 : _b.getNextUrl();\n        if (nextRegionUrl) {\n          yield this.restartConnection(nextRegionUrl);\n          return;\n        } else {\n          // no more regions to try (or we're not on cloud)\n          (_c = this.regionStrategy) === null || _c === void 0 ? void 0 : _c.resetAttempts();\n          throw error;\n        }\n      }\n    });\n  }\n  resumeConnection(reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!this.url || !this.token) {\n        // permanent failure, don't attempt reconnection\n        throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n      }\n      // trigger publisher reconnect\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher and subscriber connections unset');\n      }\n      this.log.info(\"resuming signal connection, attempt \".concat(this.reconnectAttempts));\n      this.emit(EngineEvent.Resuming);\n      let res;\n      try {\n        this.setupSignalClientCallbacks();\n        res = yield this.client.reconnect(this.url, this.token, this.participantSid, reason);\n      } catch (error) {\n        let message = '';\n        if (error instanceof Error) {\n          message = error.message;\n          this.log.error(error.message, {\n            error\n          });\n        }\n        if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) {\n          throw new UnexpectedConnectionState('could not reconnect, token might be expired');\n        }\n        if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.LeaveRequest) {\n          throw error;\n        }\n        throw new SignalReconnectError(message);\n      }\n      this.emit(EngineEvent.SignalResumed);\n      if (res) {\n        const rtcConfig = this.makeRTCConfiguration(res);\n        this.pcManager.updateConfiguration(rtcConfig);\n        if (this.latestJoinResponse) {\n          this.latestJoinResponse.serverInfo = res.serverInfo;\n        }\n      } else {\n        this.log.warn('Did not receive reconnect response');\n      }\n      if (this.shouldFailNext) {\n        this.shouldFailNext = false;\n        throw new Error('simulated failure');\n      }\n      yield this.pcManager.triggerIceRestart();\n      yield this.waitForPCReconnected();\n      // re-check signal connection state before setting engine as resumed\n      if (this.client.currentState !== SignalConnectionState.CONNECTED) {\n        throw new SignalReconnectError('Signal connection got severed during reconnect');\n      }\n      this.client.setReconnected();\n      // recreate publish datachannel if it's id is null\n      // (for safari https://bugs.webkit.org/show_bug.cgi?id=184688)\n      if (((_a = this.reliableDC) === null || _a === void 0 ? void 0 : _a.readyState) === 'open' && this.reliableDC.id === null) {\n        this.createDataChannels();\n      }\n      if (res === null || res === void 0 ? void 0 : res.lastMessageSeq) {\n        this.resendReliableMessagesForResume(res.lastMessageSeq);\n      }\n      // resume success\n      this.emit(EngineEvent.Resumed);\n    });\n  }\n  waitForPCInitialConnection(timeout, abortController) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('PC manager is closed');\n      }\n      yield this.pcManager.ensurePCTransportConnection(abortController, timeout);\n    });\n  }\n  waitForPCReconnected() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.pcState = PCState.Reconnecting;\n      this.log.debug('waiting for peer connection to reconnect');\n      try {\n        yield sleep(minReconnectWait); // FIXME setTimeout again not ideal for a connection critical path\n        if (!this.pcManager) {\n          throw new UnexpectedConnectionState('PC manager is closed');\n        }\n        yield this.pcManager.ensurePCTransportConnection(undefined, this.peerConnectionTimeout);\n        this.pcState = PCState.Connected;\n      } catch (e) {\n        // TODO do we need a `failed` state here for the PC?\n        this.pcState = PCState.Disconnected;\n        throw ConnectionError.internal(\"could not establish PC connection, \".concat(e.message));\n      }\n    });\n  }\n  /** @internal */\n  publishRpcAck(destinationIdentity, requestId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const packet = new DataPacket({\n        destinationIdentities: [destinationIdentity],\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'rpcAck',\n          value: new RpcAck({\n            requestId\n          })\n        }\n      });\n      yield this.sendDataPacket(packet, DataChannelKind.RELIABLE);\n    });\n  }\n  /* @internal */\n  sendDataPacket(packet, kind) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      // make sure we do have a data connection\n      yield this.ensurePublisherConnected(kind);\n      if (this.e2eeManager && this.e2eeManager.isDataChannelEncryptionEnabled) {\n        const encryptablePacket = asEncryptablePacket(packet);\n        if (encryptablePacket) {\n          const encryptedData = yield this.e2eeManager.encryptData(encryptablePacket.toBinary());\n          packet.value = {\n            case: 'encryptedPacket',\n            value: new EncryptedPacket({\n              encryptedValue: encryptedData.payload,\n              iv: encryptedData.iv,\n              keyIndex: encryptedData.keyIndex\n            })\n          };\n        }\n      }\n      if (kind === DataChannelKind.RELIABLE) {\n        packet.sequence = this.reliableDataSequence;\n        this.reliableDataSequence += 1;\n      }\n      const msg = packet.toBinary();\n      // Clamp to the SDK default - libwebrtc advertises larger (~256 KiB)\n      // than LiveKit/pion can deliver end-to-end (~64 KiB), so we trust\n      // the answer up untilthe built in ceiling.\n      const maxPublisherMessageSizeBytes = Math.min((_b = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getMaxPublisherMessageSize()) !== null && _b !== void 0 ? _b : DEFAULT_MAX_MESSAGE_SIZE, DEFAULT_MAX_MESSAGE_SIZE);\n      if (typeof maxPublisherMessageSizeBytes !== 'undefined' && maxPublisherMessageSizeBytes !== 0 /* 0 means \"no limit\" */ && msg.byteLength > maxPublisherMessageSizeBytes) {\n        throw new PublishDataError(\"cannot publish data packet larger than \".concat(maxPublisherMessageSizeBytes, \" bytes (got \").concat(msg.byteLength, \")\"));\n      }\n      switch (kind) {\n        case DataChannelKind.LOSSY:\n        case DataChannelKind.DATA_TRACK_LOSSY:\n          return this.sendLossyBytes(msg, kind);\n        case DataChannelKind.RELIABLE:\n          const dc = this.dataChannelForKind(kind);\n          if (dc) {\n            yield this.waitForBufferStatusLow(kind);\n            this.reliableMessageBuffer.push({\n              data: msg,\n              sequence: packet.sequence\n            });\n            if (this.attemptingReconnect) {\n              return;\n            }\n            dc.send(msg);\n          }\n          this.updateAndEmitDCBufferStatus(kind);\n          break;\n      }\n    });\n  }\n  /* @internal */\n  sendLossyBytes(bytes_1, kind_1) {\n    return __awaiter(this, arguments, void 0, function (bytes, kind) {\n      var _this3 = this;\n      let bufferStatusLowBehavior = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'drop';\n      return function* () {\n        // make sure we do have a data connection\n        yield _this3.ensurePublisherConnected(kind);\n        const dc = _this3.dataChannelForKind(kind);\n        if (dc) {\n          if (!_this3.isBufferStatusLow(kind)) {\n            // Depending on the exact circumstance that data is being sent, either drop or wait for the\n            // buffer status to not be low before continuing.\n            switch (bufferStatusLowBehavior) {\n              case 'wait':\n                yield _this3.waitForBufferStatusLow(kind);\n                break;\n              case 'drop':\n                // this.log.warn(`dropping lossy data channel message`, this.logContext);\n                // Drop messages to reduce latency\n                _this3.lossyDataDropCount += 1;\n                if (_this3.lossyDataDropCount % 100 === 0) {\n                  _this3.log.warn(\"dropping lossy data channel messages, total dropped: \".concat(_this3.lossyDataDropCount));\n                }\n                return;\n            }\n          }\n          _this3.lossyDataStatCurrentBytes += bytes.byteLength;\n          if (_this3.attemptingReconnect) {\n            return;\n          }\n          dc.send(bytes);\n        }\n        _this3.updateAndEmitDCBufferStatus(kind);\n      }();\n    });\n  }\n  resendReliableMessagesForResume(lastMessageSeq) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.ensurePublisherConnected(DataChannelKind.RELIABLE);\n      const dc = this.dataChannelForKind(DataChannelKind.RELIABLE);\n      if (dc) {\n        this.reliableMessageBuffer.popToSequence(lastMessageSeq);\n        this.reliableMessageBuffer.getAll().forEach(msg => {\n          dc.send(msg.data);\n        });\n      }\n      this.updateAndEmitDCBufferStatus(DataChannelKind.RELIABLE);\n    });\n  }\n  waitForBufferStatusLow(kind) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return new TypedPromise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        if (this.isClosed) {\n          reject(new UnexpectedConnectionState('engine closed'));\n        }\n        if (this.isBufferStatusLow(kind)) {\n          resolve();\n        } else {\n          const dc = this.dataChannelForKind(kind);\n          if (!dc) {\n            reject(new UnexpectedConnectionState(\"DataChannel not found, kind: \".concat(kind)));\n            return;\n          }\n          this.bufferStatusLowClosingFuture.promise.catch(e => reject(e));\n          dc.addEventListener('bufferedamountlow', () => resolve(), {\n            once: true\n          });\n        }\n      }));\n    });\n  }\n  /**\n   * @internal\n   */\n  ensureDataTransportConnected(kind_1) {\n    return __awaiter(this, arguments, void 0, function (kind) {\n      var _this4 = this;\n      let subscriber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.subscriberPrimary;\n      return function* () {\n        var _a;\n        if (!_this4.pcManager) {\n          throw new UnexpectedConnectionState('PC manager is closed');\n        }\n        const transport = subscriber ? _this4.pcManager.subscriber : _this4.pcManager.publisher;\n        const transportName = subscriber ? 'Subscriber' : 'Publisher';\n        if (!transport) {\n          throw ConnectionError.internal(\"\".concat(transportName, \" connection not set\"));\n        }\n        let needNegotiation = false;\n        if (!subscriber && !_this4.dataChannelForKind(kind, subscriber)) {\n          _this4.createDataChannels();\n          needNegotiation = true;\n        }\n        if (!needNegotiation && !subscriber && !_this4.pcManager.publisher.isICEConnected && _this4.pcManager.publisher.getICEConnectionState() !== 'checking') {\n          needNegotiation = true;\n        }\n        if (needNegotiation) {\n          // start negotiation\n          _this4.negotiate().catch(err => {\n            _this4.log.error(err);\n          });\n        }\n        const targetChannel = _this4.dataChannelForKind(kind, subscriber);\n        if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {\n          return;\n        }\n        // wait until ICE connected\n        const endTime = new Date().getTime() + _this4.peerConnectionTimeout;\n        while (new Date().getTime() < endTime) {\n          if (transport.isICEConnected && ((_a = _this4.dataChannelForKind(kind, subscriber)) === null || _a === void 0 ? void 0 : _a.readyState) === 'open') {\n            return;\n          }\n          yield sleep(50);\n        }\n        throw ConnectionError.internal(\"could not establish \".concat(transportName, \" connection, state: \").concat(transport.getICEConnectionState()));\n      }();\n    });\n  }\n  ensurePublisherConnected(kind) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.publisherConnectionPromise) {\n        this.publisherConnectionPromise = this.ensureDataTransportConnected(kind, false);\n      }\n      yield this.publisherConnectionPromise;\n    });\n  }\n  /* @internal */\n  verifyTransport() {\n    if (!this.pcManager) {\n      return false;\n    }\n    const allowedConnectionStates = [PCTransportState.CONNECTING, PCTransportState.CONNECTED];\n    if (!allowedConnectionStates.includes(this.pcManager.currentState)) {\n      return false;\n    }\n    // ensure signal is connected\n    if (!this.client.ws || this.client.ws.readyState === WebSocket.CLOSED) {\n      return false;\n    }\n    return true;\n  }\n  /** @internal */\n  negotiate() {\n    return __awaiter(this, void 0, void 0, function* () {\n      // observe signal state\n      return new TypedPromise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        if (!this.pcManager) {\n          reject(new NegotiationError('PC manager is closed'));\n          return;\n        }\n        this.pcManager.requirePublisher();\n        // don't negotiate without any transceivers or data channel, it will generate sdp without ice frag then negotiate failed\n        if (this.pcManager.publisher.getTransceivers().length == 0 && !this.lossyDC && !this.reliableDC && !this.dataTrackDC) {\n          this.createDataChannels();\n        }\n        const abortController = new AbortController();\n        const handleClosed = () => {\n          abortController.abort();\n          this.log.debug('engine disconnected while negotiation was ongoing');\n          resolve();\n          return;\n        };\n        if (this.isClosed) {\n          reject(new NegotiationError('cannot negotiate on closed engine'));\n        }\n        this.on(EngineEvent.Closing, handleClosed);\n        this.on(EngineEvent.Restarting, handleClosed);\n        this.pcManager.publisher.off(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable);\n        this.pcManager.publisher.once(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable);\n        try {\n          yield this.pcManager.negotiate(abortController);\n          resolve();\n        } catch (e) {\n          if (abortController.signal.aborted) {\n            // negotiation was aborted due to engine close or restart, resolve\n            // cleanly to avoid triggering a cascading reconnect loop\n            resolve();\n            return;\n          }\n          if (e instanceof NegotiationError) {\n            this.fullReconnectOnNext = true;\n          }\n          this.handleDisconnect('negotiation', ReconnectReason.RR_UNKNOWN);\n          if (e instanceof Error) {\n            reject(e);\n          } else {\n            reject(new Error(String(e)));\n          }\n        } finally {\n          this.off(EngineEvent.Closing, handleClosed);\n          this.off(EngineEvent.Restarting, handleClosed);\n        }\n      }));\n    });\n  }\n  dataChannelForKind(kind, sub) {\n    switch (kind) {\n      case DataChannelKind.RELIABLE:\n        if (!sub) {\n          return this.reliableDC;\n        } else {\n          return this.reliableDCSub;\n        }\n      case DataChannelKind.LOSSY:\n        if (!sub) {\n          return this.lossyDC;\n        } else {\n          return this.lossyDCSub;\n        }\n      case DataChannelKind.DATA_TRACK_LOSSY:\n        if (!sub) {\n          return this.dataTrackDC;\n        } else {\n          return this.dataTrackDCSub;\n        }\n    }\n  }\n  /** @internal */\n  sendSyncState(remoteTracks, localTracks, localDataTrackInfos) {\n    var _a, _b, _c, _d;\n    if (!this.pcManager) {\n      this.log.warn('sync state cannot be sent without peer connection setup');\n      return;\n    }\n    const previousPublisherOffer = this.pcManager.publisher.getLocalDescription();\n    const previousPublisherAnswer = this.pcManager.publisher.getRemoteDescription();\n    const previousSubscriberOffer = (_a = this.pcManager.subscriber) === null || _a === void 0 ? void 0 : _a.getRemoteDescription();\n    const previousSubscriberAnswer = (_b = this.pcManager.subscriber) === null || _b === void 0 ? void 0 : _b.getLocalDescription();\n    /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,\n          in this case, we send unsub tracks, so server add all tracks to this\n          subscribe pc and unsub special tracks from it.\n       2. autosubscribe off, we send subscribed tracks.\n    */\n    const autoSubscribe = (_d = (_c = this.signalOpts) === null || _c === void 0 ? void 0 : _c.autoSubscribe) !== null && _d !== void 0 ? _d : true;\n    const trackSids = new Array();\n    const trackSidsDisabled = new Array();\n    remoteTracks.forEach(track => {\n      if (track.isDesired !== autoSubscribe) {\n        trackSids.push(track.trackSid);\n      }\n      if (!track.isEnabled) {\n        trackSidsDisabled.push(track.trackSid);\n      }\n    });\n    this.client.sendSyncState(new SyncState({\n      answer: this.pcManager.mode === 'publisher-only' ? previousPublisherAnswer ? toProtoSessionDescription({\n        sdp: previousPublisherAnswer.sdp,\n        type: previousPublisherAnswer.type\n      }) : undefined : previousSubscriberAnswer ? toProtoSessionDescription({\n        sdp: previousSubscriberAnswer.sdp,\n        type: previousSubscriberAnswer.type\n      }) : undefined,\n      offer: this.pcManager.mode === 'publisher-only' ? previousPublisherOffer ? toProtoSessionDescription({\n        sdp: previousPublisherOffer.sdp,\n        type: previousPublisherOffer.type\n      }) : undefined : previousSubscriberOffer ? toProtoSessionDescription({\n        sdp: previousSubscriberOffer.sdp,\n        type: previousSubscriberOffer.type\n      }) : undefined,\n      subscription: new UpdateSubscription({\n        trackSids,\n        subscribe: !autoSubscribe,\n        participantTracks: []\n      }),\n      publishTracks: getTrackPublicationInfo(localTracks),\n      dataChannels: this.dataChannelsInfo(),\n      trackSidsDisabled,\n      datachannelReceiveStates: this.reliableReceivedState.map((seq, sid) => {\n        return new DataChannelReceiveState({\n          publisherSid: sid,\n          lastSeq: seq\n        });\n      }),\n      publishDataTracks: localDataTrackInfos.map(info => {\n        return new PublishDataTrackResponse({\n          info: DataTrackInfo.toProtobuf(info)\n        });\n      })\n    }));\n  }\n  /* @internal */\n  failNext() {\n    // debugging method to fail the next reconnect/resume attempt\n    this.shouldFailNext = true;\n  }\n  /* @internal */\n  failNextV1Path() {\n    // debugging method to fail the next connection attempt for /rtc/v1 to trigger the fallback version\n    this.shouldFailOnV1Path = true;\n  }\n  dataChannelsInfo() {\n    const infos = [];\n    const getInfo = (dc, target) => {\n      if ((dc === null || dc === void 0 ? void 0 : dc.id) !== undefined && dc.id !== null) {\n        infos.push(new DataChannelInfo({\n          label: dc.label,\n          id: dc.id,\n          target\n        }));\n      }\n    };\n    getInfo(this.dataChannelForKind(DataChannelKind.LOSSY), SignalTarget.PUBLISHER);\n    getInfo(this.dataChannelForKind(DataChannelKind.RELIABLE), SignalTarget.PUBLISHER);\n    getInfo(this.dataChannelForKind(DataChannelKind.LOSSY, true), SignalTarget.SUBSCRIBER);\n    getInfo(this.dataChannelForKind(DataChannelKind.RELIABLE, true), SignalTarget.SUBSCRIBER);\n    return infos;\n  }\n  clearReconnectTimeout() {\n    if (this.reconnectTimeout) {\n      CriticalTimers.clearTimeout(this.reconnectTimeout);\n    }\n  }\n  clearPendingReconnect() {\n    this.clearReconnectTimeout();\n    this.reconnectAttempts = 0;\n  }\n  registerOnLineListener() {\n    if (isWeb()) {\n      window.addEventListener('online', this.handleBrowserOnLine);\n      window.addEventListener('offline', this.handleBrowserOffline);\n    }\n  }\n  deregisterOnLineListener() {\n    if (isWeb()) {\n      window.removeEventListener('online', this.handleBrowserOnLine);\n      window.removeEventListener('offline', this.handleBrowserOffline);\n    }\n  }\n  getTrackIdForReceiver(receiver) {\n    var _a;\n    const mid = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getMidForReceiver(receiver);\n    if (mid) {\n      const match = Object.entries(this.midToTrackId).find(_ref4 => {\n        let _ref5 = _slicedToArray(_ref4, 1),\n          key = _ref5[0];\n        return key === mid;\n      });\n      if (match) {\n        return match[1];\n      }\n    }\n  }\n}\nfunction applyUserDataCompat(newObj, oldObj) {\n  const participantIdentity = newObj.participantIdentity ? newObj.participantIdentity : oldObj.participantIdentity;\n  newObj.participantIdentity = participantIdentity;\n  oldObj.participantIdentity = participantIdentity;\n  const destinationIdentities = newObj.destinationIdentities.length !== 0 ? newObj.destinationIdentities : oldObj.destinationIdentities;\n  newObj.destinationIdentities = destinationIdentities;\n  oldObj.destinationIdentities = destinationIdentities;\n}const DEFAULT_MAX_AGE_MS = 5000;\nconst STOP_REFETCH_DELAY_MS = 30000;\nclass RegionUrlProvider {\n  static fetchRegionSettings(serverUrl, token, signal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield RegionUrlProvider.fetchLock.lock();\n      try {\n        const regionSettingsResponse = yield fetch(\"\".concat(getCloudConfigUrl(serverUrl), \"/regions\"), {\n          headers: {\n            authorization: \"Bearer \".concat(token)\n          },\n          signal\n        });\n        if (regionSettingsResponse.ok) {\n          const maxAge = extractMaxAgeFromRequestHeaders(regionSettingsResponse.headers);\n          const maxAgeInMs = maxAge ? maxAge * 1000 : DEFAULT_MAX_AGE_MS;\n          const regionSettings = yield regionSettingsResponse.json();\n          return {\n            regionSettings,\n            updatedAtInMs: Date.now(),\n            maxAgeInMs\n          };\n        } else {\n          if (regionSettingsResponse.status === 401) {\n            throw ConnectionError.notAllowed(\"Could not fetch region settings: \".concat(regionSettingsResponse.statusText), regionSettingsResponse.status);\n          } else {\n            throw ConnectionError.internal(\"Could not fetch region settings: \".concat(regionSettingsResponse.statusText));\n          }\n        }\n      } catch (e) {\n        if (e instanceof ConnectionError) {\n          // rethrow connection errors\n          throw e;\n        } else if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n          throw ConnectionError.cancelled(\"Region fetching was aborted\");\n        } else {\n          // wrap other errors as connection errors\n          throw ConnectionError.serverUnreachable(\"Could not fetch region settings, \".concat(e instanceof Error ? \"\".concat(e.name, \": \").concat(e.message) : e));\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  static scheduleRefetch(url, token, maxAgeInMs) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const timeout = RegionUrlProvider.settingsTimeouts.get(url.hostname);\n      clearTimeout(timeout);\n      RegionUrlProvider.settingsTimeouts.set(url.hostname, setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n        try {\n          const newSettings = yield RegionUrlProvider.fetchRegionSettings(url, token);\n          RegionUrlProvider.updateCachedRegionSettings(url, token, newSettings);\n        } catch (error) {\n          if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) {\n            livekitLogger.debug('token is not valid, cancelling auto region refresh');\n            return;\n          }\n          livekitLogger.debug('auto refetching of region settings failed', {\n            error\n          });\n          // continue retrying with the same max age\n          RegionUrlProvider.scheduleRefetch(url, token, maxAgeInMs);\n        }\n      }), maxAgeInMs));\n    });\n  }\n  static updateCachedRegionSettings(url, token, settings) {\n    RegionUrlProvider.cache.set(url.hostname, settings);\n    RegionUrlProvider.scheduleRefetch(url, token, settings.maxAgeInMs);\n  }\n  static stopRefetch(hostname) {\n    const timeout = RegionUrlProvider.settingsTimeouts.get(hostname);\n    if (timeout) {\n      clearTimeout(timeout);\n      RegionUrlProvider.settingsTimeouts.delete(hostname);\n    }\n  }\n  static scheduleCleanup(hostname) {\n    let tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (!tracker) {\n      return;\n    }\n    // Cancel any existing cleanup timeout\n    if (tracker.cleanupTimeout) {\n      clearTimeout(tracker.cleanupTimeout);\n    }\n    // Schedule cleanup to stop refetch after delay\n    tracker.cleanupTimeout = setTimeout(() => {\n      const currentTracker = RegionUrlProvider.connectionTrackers.get(hostname);\n      if (currentTracker && currentTracker.connectionCount === 0) {\n        livekitLogger.debug('stopping region refetch after disconnect delay', {\n          hostname\n        });\n        RegionUrlProvider.stopRefetch(hostname);\n      }\n      if (currentTracker) {\n        currentTracker.cleanupTimeout = undefined;\n      }\n    }, STOP_REFETCH_DELAY_MS);\n  }\n  static cancelCleanup(hostname) {\n    const tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (tracker === null || tracker === void 0 ? void 0 : tracker.cleanupTimeout) {\n      clearTimeout(tracker.cleanupTimeout);\n      tracker.cleanupTimeout = undefined;\n    }\n  }\n  notifyConnected() {\n    const hostname = this.serverUrl.hostname;\n    let tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (!tracker) {\n      tracker = {\n        connectionCount: 0\n      };\n      RegionUrlProvider.connectionTrackers.set(hostname, tracker);\n    }\n    tracker.connectionCount++;\n    // Cancel any scheduled cleanup since we have an active connection\n    RegionUrlProvider.cancelCleanup(hostname);\n  }\n  notifyDisconnected() {\n    const hostname = this.serverUrl.hostname;\n    const tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (!tracker) {\n      return;\n    }\n    tracker.connectionCount = Math.max(0, tracker.connectionCount - 1);\n    // If no more connections, schedule cleanup\n    if (tracker.connectionCount === 0) {\n      RegionUrlProvider.scheduleCleanup(hostname);\n    }\n  }\n  constructor(url, token) {\n    this.attemptedRegions = [];\n    this.serverUrl = new URL(url);\n    this.token = token;\n  }\n  updateToken(token) {\n    var _a;\n    this.token = token;\n    const url = this.getServerUrl();\n    const settings = RegionUrlProvider.cache.get(url.hostname);\n    RegionUrlProvider.scheduleRefetch(this.serverUrl, this.token, (_a = settings === null || settings === void 0 ? void 0 : settings.maxAgeInMs) !== null && _a !== void 0 ? _a : DEFAULT_MAX_AGE_MS);\n  }\n  isCloud() {\n    return isCloud(this.serverUrl);\n  }\n  getServerUrl() {\n    return this.serverUrl;\n  }\n  /** @internal */\n  fetchRegionSettings(abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return RegionUrlProvider.fetchRegionSettings(this.serverUrl, this.token, abortSignal);\n    });\n  }\n  getNextBestRegionUrl(abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.isCloud()) {\n        throw Error('region availability is only supported for LiveKit Cloud domains');\n      }\n      let cachedSettings = RegionUrlProvider.cache.get(this.serverUrl.hostname);\n      if (!cachedSettings || Date.now() - cachedSettings.updatedAtInMs > cachedSettings.maxAgeInMs) {\n        cachedSettings = yield this.fetchRegionSettings(abortSignal);\n        RegionUrlProvider.updateCachedRegionSettings(this.serverUrl, this.token, cachedSettings);\n      }\n      const regionsLeft = cachedSettings.regionSettings.regions.filter(region => !this.attemptedRegions.find(attempted => attempted.url === region.url));\n      if (regionsLeft.length > 0) {\n        const nextRegion = regionsLeft[0];\n        this.attemptedRegions.push(nextRegion);\n        livekitLogger.debug(\"next region: \".concat(nextRegion.region));\n        return nextRegion.url;\n      } else {\n        return null;\n      }\n    });\n  }\n  resetAttempts() {\n    this.attemptedRegions = [];\n  }\n  setServerReportedRegions(settings) {\n    RegionUrlProvider.updateCachedRegionSettings(this.serverUrl, this.token, settings);\n  }\n}\nRegionUrlProvider.cache = new Map();\nRegionUrlProvider.settingsTimeouts = new Map();\nRegionUrlProvider.connectionTrackers = new Map();\nRegionUrlProvider.fetchLock = new _();\nfunction getCloudConfigUrl(serverUrl) {\n  return \"\".concat(serverUrl.protocol.replace('ws', 'http'), \"//\").concat(serverUrl.host, \"/settings\");\n}class BaseStreamReader {\n  get info() {\n    return this._info;\n  }\n  /** @internal */\n  validateBytesReceived() {\n    let doneReceiving = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    if (typeof this.totalByteSize !== 'number' || this.totalByteSize === 0) {\n      return;\n    }\n    if (doneReceiving && this.bytesReceived < this.totalByteSize) {\n      throw new DataStreamError(\"Not enough chunk(s) received - expected \".concat(this.totalByteSize, \" bytes of data total, only received \").concat(this.bytesReceived, \" bytes\"), DataStreamErrorReason.Incomplete);\n    } else if (this.bytesReceived > this.totalByteSize) {\n      throw new DataStreamError(\"Extra chunk(s) received - expected \".concat(this.totalByteSize, \" bytes of data total, received \").concat(this.bytesReceived, \" bytes\"), DataStreamErrorReason.LengthExceeded);\n    }\n  }\n  constructor(info, stream, totalByteSize) {\n    this.reader = stream;\n    this.totalByteSize = totalByteSize;\n    this._info = info;\n    this.bytesReceived = 0;\n  }\n}\nclass ByteStreamReader extends BaseStreamReader {\n  handleChunkReceived(chunk) {\n    var _a;\n    this.bytesReceived += chunk.content.byteLength;\n    this.validateBytesReceived();\n    const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined;\n    (_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, currentProgress);\n  }\n  [Symbol.asyncIterator]() {\n    const reader = this.reader.getReader();\n    // Suppress unhandled rejection on reader.closed — errors are\n    // already propagated through reader.read() to the consumer.\n    reader.closed.catch(() => {});\n    const cleanup = () => {\n      reader.releaseLock();\n      this.signal = undefined;\n    };\n    return {\n      next: () => __awaiter(this, void 0, void 0, function* () {\n        try {\n          const signal = this.signal;\n          if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n            throw signal.reason;\n          }\n          const result = yield new Promise((resolve, reject) => {\n            if (signal) {\n              const onAbort = () => reject(signal.reason);\n              signal.addEventListener('abort', onAbort, {\n                once: true\n              });\n              reader.read().then(resolve, reject).finally(() => {\n                signal.removeEventListener('abort', onAbort);\n              });\n            } else {\n              reader.read().then(resolve, reject);\n            }\n          });\n          if (result.done) {\n            this.validateBytesReceived(true);\n            return {\n              done: true,\n              value: undefined\n            };\n          } else {\n            this.handleChunkReceived(result.value);\n            return {\n              done: false,\n              value: result.value.content\n            };\n          }\n        } catch (err) {\n          cleanup();\n          throw err;\n        }\n      }),\n      // note: `return` runs only for premature exits, see:\n      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#errors_during_iteration\n      return() {\n        return __awaiter(this, void 0, void 0, function* () {\n          cleanup();\n          return {\n            done: true,\n            value: undefined\n          };\n        });\n      }\n    };\n  }\n  /**\n   * Injects an AbortSignal, which if aborted, will terminate the currently active\n   * stream iteration operation.\n   *\n   * Note that when using AbortSignal.timeout(...), the timeout applies across\n   * the whole iteration operation, not just one individual chunk read.\n   */\n  withAbortSignal(signal) {\n    this.signal = signal;\n    return this;\n  }\n  readAll() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this = this;\n      let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return function* () {\n        var _a, e_1, _b, _c;\n        let chunks = new Set();\n        const iterator = opts.signal ? _this.withAbortSignal(opts.signal) : _this;\n        try {\n          for (var _d = true, iterator_1 = __asyncValues(iterator), iterator_1_1; iterator_1_1 = yield iterator_1.next(), _a = iterator_1_1.done, !_a; _d = true) {\n            _c = iterator_1_1.value;\n            _d = false;\n            const chunk = _c;\n            chunks.add(chunk);\n          }\n        } catch (e_1_1) {\n          e_1 = {\n            error: e_1_1\n          };\n        } finally {\n          try {\n            if (!_d && !_a && (_b = iterator_1.return)) yield _b.call(iterator_1);\n          } finally {\n            if (e_1) throw e_1.error;\n          }\n        }\n        return Array.from(chunks);\n      }();\n    });\n  }\n}\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nclass TextStreamReader extends BaseStreamReader {\n  /**\n   * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string\n   * that has been received up to the current point in time.\n   */\n  constructor(info, stream, totalChunkCount) {\n    super(info, stream, totalChunkCount);\n    this.receivedChunks = new Map();\n  }\n  handleChunkReceived(chunk) {\n    var _a;\n    const index = bigIntToNumber(chunk.chunkIndex);\n    const previousChunkAtIndex = this.receivedChunks.get(index);\n    if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) {\n      // we have a newer version already, dropping the old one\n      return;\n    }\n    this.receivedChunks.set(index, chunk);\n    this.bytesReceived += chunk.content.byteLength;\n    this.validateBytesReceived();\n    const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined;\n    (_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, currentProgress);\n  }\n  /**\n   * Async iterator implementation to allow usage of `for await...of` syntax.\n   * Yields structured chunks from the stream.\n   *\n   */\n  [Symbol.asyncIterator]() {\n    const reader = this.reader.getReader();\n    // Suppress unhandled rejection on reader.closed — errors are\n    // already propagated through reader.read() to the consumer.\n    reader.closed.catch(() => {});\n    const decoder = new TextDecoder('utf-8', {\n      fatal: true\n    });\n    const signal = this.signal;\n    const cleanup = () => {\n      reader.releaseLock();\n      this.signal = undefined;\n    };\n    return {\n      next: () => __awaiter(this, void 0, void 0, function* () {\n        try {\n          if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n            throw signal.reason;\n          }\n          const result = yield new Promise((resolve, reject) => {\n            if (signal) {\n              const onAbort = () => reject(signal.reason);\n              signal.addEventListener('abort', onAbort, {\n                once: true\n              });\n              reader.read().then(resolve, reject).finally(() => {\n                signal.removeEventListener('abort', onAbort);\n              });\n            } else {\n              reader.read().then(resolve, reject);\n            }\n          });\n          if (result.done) {\n            this.validateBytesReceived(true);\n            return {\n              done: true,\n              value: undefined\n            };\n          } else {\n            this.handleChunkReceived(result.value);\n            let decodedResult;\n            try {\n              decodedResult = decoder.decode(result.value.content);\n            } catch (err) {\n              throw new DataStreamError(\"Cannot decode datastream chunk \".concat(result.value.chunkIndex, \" as text: \").concat(err), DataStreamErrorReason.DecodeFailed);\n            }\n            return {\n              done: false,\n              value: decodedResult\n            };\n          }\n        } catch (err) {\n          cleanup();\n          throw err;\n        }\n      }),\n      // note: `return` runs only for premature exits, see:\n      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#errors_during_iteration\n      return() {\n        return __awaiter(this, void 0, void 0, function* () {\n          cleanup();\n          return {\n            done: true,\n            value: undefined\n          };\n        });\n      }\n    };\n  }\n  /**\n   * Injects an AbortSignal, which if aborted, will terminate the currently active\n   * stream iteration operation.\n   *\n   * Note that when using AbortSignal.timeout(...), the timeout applies across\n   * the whole iteration operation, not just one individual chunk read.\n   */\n  withAbortSignal(signal) {\n    this.signal = signal;\n    return this;\n  }\n  readAll() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this2 = this;\n      let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return function* () {\n        var _a, e_2, _b, _c;\n        let finalString = '';\n        const iterator = opts.signal ? _this2.withAbortSignal(opts.signal) : _this2;\n        try {\n          for (var _d = true, iterator_2 = __asyncValues(iterator), iterator_2_1; iterator_2_1 = yield iterator_2.next(), _a = iterator_2_1.done, !_a; _d = true) {\n            _c = iterator_2_1.value;\n            _d = false;\n            const chunk = _c;\n            finalString += chunk;\n          }\n        } catch (e_2_1) {\n          e_2 = {\n            error: e_2_1\n          };\n        } finally {\n          try {\n            if (!_d && !_a && (_b = iterator_2.return)) yield _b.call(iterator_2);\n          } finally {\n            if (e_2) throw e_2.error;\n          }\n        }\n        return finalString;\n      }();\n    });\n  }\n}class IncomingDataStreamManager {\n  constructor() {\n    this.log = livekitLogger;\n    this.byteStreamControllers = new Map();\n    this.textStreamControllers = new Map();\n    this.byteStreamHandlers = new Map();\n    this.textStreamHandlers = new Map();\n    this.isConnected = false;\n    this.bufferedPackets = [];\n  }\n  setConnected(connected) {\n    this.isConnected = connected;\n    if (connected) {\n      this.flushBufferedPackets();\n    }\n  }\n  flushBufferedPackets() {\n    const packets = this.bufferedPackets;\n    this.bufferedPackets = [];\n    for (const _ref of packets) {\n      const packet = _ref.packet;\n      const encryptionType = _ref.encryptionType;\n      this.handleDataStreamPacket(packet, encryptionType);\n    }\n  }\n  registerTextStreamHandler(topic, callback) {\n    if (this.textStreamHandlers.has(topic)) {\n      throw new DataStreamError(\"A text stream handler for topic \\\"\".concat(topic, \"\\\" has already been set.\"), DataStreamErrorReason.HandlerAlreadyRegistered);\n    }\n    this.textStreamHandlers.set(topic, callback);\n  }\n  unregisterTextStreamHandler(topic) {\n    this.textStreamHandlers.delete(topic);\n  }\n  registerByteStreamHandler(topic, callback) {\n    if (this.byteStreamHandlers.has(topic)) {\n      throw new DataStreamError(\"A byte stream handler for topic \\\"\".concat(topic, \"\\\" has already been set.\"), DataStreamErrorReason.HandlerAlreadyRegistered);\n    }\n    this.byteStreamHandlers.set(topic, callback);\n  }\n  unregisterByteStreamHandler(topic) {\n    this.byteStreamHandlers.delete(topic);\n  }\n  clearControllers() {\n    this.byteStreamControllers.clear();\n    this.textStreamControllers.clear();\n    this.bufferedPackets = [];\n  }\n  validateParticipantHasNoActiveDataStreams(participantIdentity) {\n    // Terminate any in flight data stream receives from the given participant\n    const textStreamsBeingSentByDisconnectingParticipant = Array.from(this.textStreamControllers.entries()).filter(entry => entry[1].sendingParticipantIdentity === participantIdentity);\n    const byteStreamsBeingSentByDisconnectingParticipant = Array.from(this.byteStreamControllers.entries()).filter(entry => entry[1].sendingParticipantIdentity === participantIdentity);\n    if (textStreamsBeingSentByDisconnectingParticipant.length > 0 || byteStreamsBeingSentByDisconnectingParticipant.length > 0) {\n      const abnormalEndError = new DataStreamError(\"Participant \".concat(participantIdentity, \" unexpectedly disconnected in the middle of sending data\"), DataStreamErrorReason.AbnormalEnd);\n      for (const _ref2 of byteStreamsBeingSentByDisconnectingParticipant) {\n        var _ref3 = _slicedToArray(_ref2, 2);\n        const id = _ref3[0];\n        const controller = _ref3[1];\n        controller.controller.error(abnormalEndError);\n        this.byteStreamControllers.delete(id);\n      }\n      for (const _ref4 of textStreamsBeingSentByDisconnectingParticipant) {\n        var _ref5 = _slicedToArray(_ref4, 2);\n        const id = _ref5[0];\n        const controller = _ref5[1];\n        controller.controller.error(abnormalEndError);\n        this.textStreamControllers.delete(id);\n      }\n    }\n  }\n  handleDataStreamPacket(packet, encryptionType) {\n    if (!this.isConnected) {\n      this.bufferedPackets.push({\n        packet,\n        encryptionType\n      });\n      return;\n    }\n    switch (packet.value.case) {\n      case 'streamHeader':\n        return this.handleStreamHeader(packet.value.value, packet.participantIdentity, encryptionType);\n      case 'streamChunk':\n        return this.handleStreamChunk(packet.value.value, encryptionType);\n      case 'streamTrailer':\n        return this.handleStreamTrailer(packet.value.value, encryptionType);\n      default:\n        throw new Error(\"DataPacket of value \\\"\".concat(packet.value.case, \"\\\" is not data stream related!\"));\n    }\n  }\n  handleStreamHeader(streamHeader, participantIdentity, encryptionType) {\n    var _a;\n    if (streamHeader.contentHeader.case === 'byteHeader') {\n      const streamHandlerCallback = this.byteStreamHandlers.get(streamHeader.topic);\n      if (!streamHandlerCallback) {\n        this.log.debug('ignoring incoming byte stream due to no handler for topic', streamHeader.topic);\n        return;\n      }\n      let streamController;\n      const info = {\n        id: streamHeader.streamId,\n        name: (_a = streamHeader.contentHeader.value.name) !== null && _a !== void 0 ? _a : 'unknown',\n        mimeType: streamHeader.mimeType,\n        size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined,\n        topic: streamHeader.topic,\n        timestamp: bigIntToNumber(streamHeader.timestamp),\n        attributes: streamHeader.attributes,\n        encryptionType\n      };\n      const stream = new ReadableStream({\n        start: controller => {\n          streamController = controller;\n          if (this.textStreamControllers.has(streamHeader.streamId)) {\n            throw new DataStreamError(\"A data stream read is already in progress for a stream with id \".concat(streamHeader.streamId, \".\"), DataStreamErrorReason.AlreadyOpened);\n          }\n          this.byteStreamControllers.set(streamHeader.streamId, {\n            info,\n            controller: streamController,\n            startTime: Date.now(),\n            sendingParticipantIdentity: participantIdentity\n          });\n        }\n      });\n      streamHandlerCallback(new ByteStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength)), {\n        identity: participantIdentity\n      });\n    } else if (streamHeader.contentHeader.case === 'textHeader') {\n      const streamHandlerCallback = this.textStreamHandlers.get(streamHeader.topic);\n      if (!streamHandlerCallback) {\n        this.log.debug('ignoring incoming text stream due to no handler for topic', streamHeader.topic);\n        return;\n      }\n      let streamController;\n      const info = {\n        id: streamHeader.streamId,\n        mimeType: streamHeader.mimeType,\n        size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined,\n        topic: streamHeader.topic,\n        timestamp: Number(streamHeader.timestamp),\n        attributes: streamHeader.attributes,\n        encryptionType,\n        attachedStreamIds: streamHeader.contentHeader.value.attachedStreamIds\n      };\n      const stream = new ReadableStream({\n        start: controller => {\n          streamController = controller;\n          if (this.textStreamControllers.has(streamHeader.streamId)) {\n            throw new DataStreamError(\"A data stream read is already in progress for a stream with id \".concat(streamHeader.streamId, \".\"), DataStreamErrorReason.AlreadyOpened);\n          }\n          this.textStreamControllers.set(streamHeader.streamId, {\n            info,\n            controller: streamController,\n            startTime: Date.now(),\n            sendingParticipantIdentity: participantIdentity\n          });\n        }\n      });\n      streamHandlerCallback(new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength)), {\n        identity: participantIdentity\n      });\n    }\n  }\n  handleStreamChunk(chunk, encryptionType) {\n    const fileBuffer = this.byteStreamControllers.get(chunk.streamId);\n    if (fileBuffer) {\n      if (fileBuffer.info.encryptionType !== encryptionType) {\n        fileBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(chunk.streamId, \". Expected \").concat(encryptionType, \", got \").concat(fileBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n        this.byteStreamControllers.delete(chunk.streamId);\n      } else if (chunk.content.length > 0) {\n        fileBuffer.controller.enqueue(chunk);\n      }\n    }\n    const textBuffer = this.textStreamControllers.get(chunk.streamId);\n    if (textBuffer) {\n      if (textBuffer.info.encryptionType !== encryptionType) {\n        textBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(chunk.streamId, \". Expected \").concat(encryptionType, \", got \").concat(textBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n        this.textStreamControllers.delete(chunk.streamId);\n      } else if (chunk.content.length > 0) {\n        textBuffer.controller.enqueue(chunk);\n      }\n    }\n  }\n  handleStreamTrailer(trailer, encryptionType) {\n    const textBuffer = this.textStreamControllers.get(trailer.streamId);\n    if (textBuffer) {\n      if (textBuffer.info.encryptionType !== encryptionType) {\n        textBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(trailer.streamId, \". Expected \").concat(encryptionType, \", got \").concat(textBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n      } else {\n        textBuffer.info.attributes = Object.assign(Object.assign({}, textBuffer.info.attributes), trailer.attributes);\n        textBuffer.controller.close();\n        this.textStreamControllers.delete(trailer.streamId);\n      }\n    }\n    const fileBuffer = this.byteStreamControllers.get(trailer.streamId);\n    if (fileBuffer) {\n      if (fileBuffer.info.encryptionType !== encryptionType) {\n        fileBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(trailer.streamId, \". Expected \").concat(encryptionType, \", got \").concat(fileBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n      } else {\n        fileBuffer.info.attributes = Object.assign(Object.assign({}, fileBuffer.info.attributes), trailer.attributes);\n        fileBuffer.controller.close();\n      }\n      this.byteStreamControllers.delete(trailer.streamId);\n    }\n  }\n}class BaseStreamWriter {\n  constructor(writableStream, info, onClose) {\n    this.writableStream = writableStream;\n    this.defaultWriter = writableStream.getWriter();\n    this.onClose = onClose;\n    this.info = info;\n  }\n  write(chunk) {\n    return this.defaultWriter.write(chunk);\n  }\n  close() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield this.defaultWriter.close();\n      this.defaultWriter.releaseLock();\n      (_a = this.onClose) === null || _a === void 0 ? void 0 : _a.call(this);\n    });\n  }\n}\nclass TextStreamWriter extends BaseStreamWriter {}\nclass ByteStreamWriter extends BaseStreamWriter {}const STREAM_CHUNK_SIZE = 15000;\n/**\n * Manages sending custom user data via data channels.\n * @internal\n */\nclass OutgoingDataStreamManager {\n  constructor(engine, log) {\n    this.engine = engine;\n    this.log = log;\n  }\n  setupEngine(engine) {\n    this.engine = engine;\n  }\n  /** {@inheritDoc LocalParticipant.sendText} */\n  sendText(text, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const streamId = crypto.randomUUID();\n      const textInBytes = new TextEncoder().encode(text);\n      const totalTextLength = textInBytes.byteLength;\n      const fileIds = (_a = options === null || options === void 0 ? void 0 : options.attachments) === null || _a === void 0 ? void 0 : _a.map(() => crypto.randomUUID());\n      const progresses = new Array(fileIds ? fileIds.length + 1 : 1).fill(0);\n      const handleProgress = (progress, idx) => {\n        var _a;\n        progresses[idx] = progress;\n        const totalProgress = progresses.reduce((acc, val) => acc + val, 0);\n        (_a = options === null || options === void 0 ? void 0 : options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, totalProgress);\n      };\n      const writer = yield this.streamText({\n        streamId,\n        totalSize: totalTextLength,\n        destinationIdentities: options === null || options === void 0 ? void 0 : options.destinationIdentities,\n        topic: options === null || options === void 0 ? void 0 : options.topic,\n        attachedStreamIds: fileIds,\n        attributes: options === null || options === void 0 ? void 0 : options.attributes\n      });\n      yield writer.write(text);\n      // set text part of progress to 1\n      handleProgress(1, 0);\n      yield writer.close();\n      if ((options === null || options === void 0 ? void 0 : options.attachments) && fileIds) {\n        yield Promise.all(options.attachments.map((file, idx) => __awaiter(this, void 0, void 0, function* () {\n          return this._sendFile(fileIds[idx], file, {\n            topic: options.topic,\n            mimeType: file.type,\n            onProgress: progress => {\n              handleProgress(progress, idx + 1);\n            }\n          });\n        })));\n      }\n      return writer.info;\n    });\n  }\n  /**\n   * @internal\n   */\n  streamText(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      const streamId = (_a = options === null || options === void 0 ? void 0 : options.streamId) !== null && _a !== void 0 ? _a : crypto.randomUUID();\n      const info = {\n        id: streamId,\n        mimeType: 'text/plain',\n        timestamp: Date.now(),\n        topic: (_b = options === null || options === void 0 ? void 0 : options.topic) !== null && _b !== void 0 ? _b : '',\n        size: options === null || options === void 0 ? void 0 : options.totalSize,\n        attributes: options === null || options === void 0 ? void 0 : options.attributes,\n        encryptionType: ((_c = this.engine.e2eeManager) === null || _c === void 0 ? void 0 : _c.isDataChannelEncryptionEnabled) ? Encryption_Type.GCM : Encryption_Type.NONE,\n        attachedStreamIds: options === null || options === void 0 ? void 0 : options.attachedStreamIds\n      };\n      const header = new DataStream_Header({\n        streamId,\n        mimeType: info.mimeType,\n        topic: info.topic,\n        timestamp: numberToBigInt(info.timestamp),\n        totalLength: numberToBigInt(info.size),\n        attributes: info.attributes,\n        contentHeader: {\n          case: 'textHeader',\n          value: new DataStream_TextHeader({\n            version: options === null || options === void 0 ? void 0 : options.version,\n            attachedStreamIds: info.attachedStreamIds,\n            replyToStreamId: options === null || options === void 0 ? void 0 : options.replyToStreamId,\n            operationType: (options === null || options === void 0 ? void 0 : options.type) === 'update' ? DataStream_OperationType.UPDATE : DataStream_OperationType.CREATE\n          })\n        }\n      });\n      const destinationIdentities = options === null || options === void 0 ? void 0 : options.destinationIdentities;\n      const packet = new DataPacket({\n        destinationIdentities,\n        value: {\n          case: 'streamHeader',\n          value: header\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n      let chunkId = 0;\n      const engine = this.engine;\n      const writableStream = new WritableStream({\n        // Implement the sink\n        write(text) {\n          return __awaiter(this, void 0, void 0, function* () {\n            for (const textByteChunk of splitUtf8(text, STREAM_CHUNK_SIZE)) {\n              const chunk = new DataStream_Chunk({\n                content: textByteChunk,\n                streamId,\n                chunkIndex: numberToBigInt(chunkId)\n              });\n              const chunkPacket = new DataPacket({\n                destinationIdentities,\n                value: {\n                  case: 'streamChunk',\n                  value: chunk\n                }\n              });\n              yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE);\n              chunkId += 1;\n            }\n          });\n        },\n        close() {\n          return __awaiter(this, void 0, void 0, function* () {\n            const trailer = new DataStream_Trailer({\n              streamId\n            });\n            const trailerPacket = new DataPacket({\n              destinationIdentities,\n              value: {\n                case: 'streamTrailer',\n                value: trailer\n              }\n            });\n            yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE);\n          });\n        },\n        abort(err) {\n          console.log('Sink error:', err);\n          // TODO handle aborts to signal something to receiver side\n        }\n      });\n      let onEngineClose = () => __awaiter(this, void 0, void 0, function* () {\n        yield writer.close();\n      });\n      engine.once(EngineEvent.Closing, onEngineClose);\n      const writer = new TextStreamWriter(writableStream, info, () => this.engine.off(EngineEvent.Closing, onEngineClose));\n      return writer;\n    });\n  }\n  sendFile(file, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const streamId = crypto.randomUUID();\n      yield this._sendFile(streamId, file, options);\n      return {\n        id: streamId\n      };\n    });\n  }\n  _sendFile(streamId, file, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const writer = yield this.streamBytes({\n        streamId,\n        totalSize: file.size,\n        name: file.name,\n        mimeType: (_a = options === null || options === void 0 ? void 0 : options.mimeType) !== null && _a !== void 0 ? _a : file.type,\n        topic: options === null || options === void 0 ? void 0 : options.topic,\n        destinationIdentities: options === null || options === void 0 ? void 0 : options.destinationIdentities\n      });\n      const reader = file.stream().getReader();\n      while (true) {\n        const _yield$reader$read = yield reader.read(),\n          done = _yield$reader$read.done,\n          value = _yield$reader$read.value;\n        if (done) {\n          break;\n        }\n        yield writer.write(value);\n      }\n      yield writer.close();\n      return writer.info;\n    });\n  }\n  streamBytes(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e;\n      const streamId = (_a = options === null || options === void 0 ? void 0 : options.streamId) !== null && _a !== void 0 ? _a : crypto.randomUUID();\n      const destinationIdentities = options === null || options === void 0 ? void 0 : options.destinationIdentities;\n      const info = {\n        id: streamId,\n        mimeType: (_b = options === null || options === void 0 ? void 0 : options.mimeType) !== null && _b !== void 0 ? _b : 'application/octet-stream',\n        topic: (_c = options === null || options === void 0 ? void 0 : options.topic) !== null && _c !== void 0 ? _c : '',\n        timestamp: Date.now(),\n        attributes: options === null || options === void 0 ? void 0 : options.attributes,\n        size: options === null || options === void 0 ? void 0 : options.totalSize,\n        name: (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : 'unknown',\n        encryptionType: ((_e = this.engine.e2eeManager) === null || _e === void 0 ? void 0 : _e.isDataChannelEncryptionEnabled) ? Encryption_Type.GCM : Encryption_Type.NONE\n      };\n      const header = new DataStream_Header({\n        totalLength: numberToBigInt(info.size),\n        mimeType: info.mimeType,\n        streamId,\n        topic: info.topic,\n        timestamp: numberToBigInt(Date.now()),\n        attributes: info.attributes,\n        contentHeader: {\n          case: 'byteHeader',\n          value: new DataStream_ByteHeader({\n            name: info.name\n          })\n        }\n      });\n      const packet = new DataPacket({\n        destinationIdentities,\n        value: {\n          case: 'streamHeader',\n          value: header\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n      let chunkId = 0;\n      const writeMutex = new _();\n      const engine = this.engine;\n      const logLocal = this.log;\n      const writableStream = new WritableStream({\n        write(chunk) {\n          return __awaiter(this, void 0, void 0, function* () {\n            const unlock = yield writeMutex.lock();\n            let byteOffset = 0;\n            try {\n              while (byteOffset < chunk.byteLength) {\n                const subChunk = chunk.slice(byteOffset, byteOffset + STREAM_CHUNK_SIZE);\n                const chunkPacket = new DataPacket({\n                  destinationIdentities,\n                  value: {\n                    case: 'streamChunk',\n                    value: new DataStream_Chunk({\n                      content: subChunk,\n                      streamId,\n                      chunkIndex: numberToBigInt(chunkId)\n                    })\n                  }\n                });\n                yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE);\n                chunkId += 1;\n                byteOffset += subChunk.byteLength;\n              }\n            } finally {\n              unlock();\n            }\n          });\n        },\n        close() {\n          return __awaiter(this, void 0, void 0, function* () {\n            const trailer = new DataStream_Trailer({\n              streamId\n            });\n            const trailerPacket = new DataPacket({\n              destinationIdentities,\n              value: {\n                case: 'streamTrailer',\n                value: trailer\n              }\n            });\n            yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE);\n          });\n        },\n        abort(err) {\n          logLocal.error('Sink error:', err);\n        }\n      });\n      const byteWriter = new ByteStreamWriter(writableStream, info);\n      return byteWriter;\n    });\n  }\n}/**\n * Implementation of AbortSignal.any\n * Creates a signal that will be aborted when any of the given signals is aborted.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any\n */\nfunction abortSignalAny(signals) {\n  // Handle empty signals array\n  if (signals.length === 0) {\n    const controller = new AbortController();\n    return controller.signal;\n  }\n  // Fast path for single signal\n  if (signals.length === 1) {\n    return signals[0];\n  }\n  // Check if any signal is already aborted\n  for (const signal of signals) {\n    if (signal.aborted) {\n      return signal;\n    }\n  }\n  // Create a new controller for the combined signal\n  const controller = new AbortController();\n  const unlisteners = Array(signals.length);\n  // Function to clean up all event listeners\n  const cleanup = () => {\n    for (const unsubscribe of unlisteners) {\n      unsubscribe();\n    }\n  };\n  // Add event listeners to each signal\n  signals.forEach((signal, index) => {\n    const handler = () => {\n      controller.abort(signal.reason);\n      cleanup();\n    };\n    signal.addEventListener('abort', handler);\n    unlisteners[index] = () => signal.removeEventListener('abort', handler);\n  });\n  return controller.signal;\n}\n/**\n * Implementation of AbortSignal.timeout\n * Creates a signal that will be aborted after the specified timeout.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout\n */\nfunction abortSignalTimeout(ms) {\n  const controller = new AbortController();\n  setTimeout(() => {\n    controller.abort(new DOMException(\"signal timed out after \".concat(ms, \" ms\"), 'TimeoutError'));\n  }, ms);\n  return controller.signal;\n}// Number type sizes\nconst U8_LENGTH_BYTES = 1;\nconst U16_LENGTH_BYTES = 2;\nconst U32_LENGTH_BYTES = 4;\nconst U64_LENGTH_BYTES = 8;\n/// Constants used for serialization and deserialization.\nconst SUPPORTED_VERSION = 0;\nconst BASE_HEADER_LEN = 12;\n// Bitfield shifts and masks for header flags\nconst VERSION_SHIFT = 5;\nconst VERSION_MASK = 0x07;\nconst FRAME_MARKER_SHIFT = 3;\nconst FRAME_MARKER_MASK = 0x3;\nconst FRAME_MARKER_START = 0x2;\nconst FRAME_MARKER_FINAL = 0x1;\nconst FRAME_MARKER_INTER = 0x0;\nconst FRAME_MARKER_SINGLE = 0x3;\nconst EXT_WORDS_INDICATOR_SIZE = 2;\nconst EXT_FLAG_SHIFT = 0x2;\nconst EXT_FLAG_MASK = 0x1;\nconst EXT_TAG_PADDING = 0;var DataTrackDeserializeErrorReason;\n(function (DataTrackDeserializeErrorReason) {\n  DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"TooShort\"] = 0] = \"TooShort\";\n  DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"HeaderOverrun\"] = 1] = \"HeaderOverrun\";\n  DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"MissingExtWords\"] = 2] = \"MissingExtWords\";\n  DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"UnsupportedVersion\"] = 3] = \"UnsupportedVersion\";\n  DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"InvalidHandle\"] = 4] = \"InvalidHandle\";\n  DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"MalformedExt\"] = 5] = \"MalformedExt\";\n})(DataTrackDeserializeErrorReason || (DataTrackDeserializeErrorReason = {}));\nclass DataTrackDeserializeError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(19, message, options);\n    this.name = 'DataTrackDeserializeError';\n    this.reason = reason;\n    this.reasonName = DataTrackDeserializeErrorReason[reason];\n  }\n  static tooShort() {\n    return new DataTrackDeserializeError('Too short to contain a valid header', DataTrackDeserializeErrorReason.TooShort);\n  }\n  static headerOverrun() {\n    return new DataTrackDeserializeError('Header exceeds total packet length', DataTrackDeserializeErrorReason.HeaderOverrun);\n  }\n  static missingExtWords() {\n    return new DataTrackDeserializeError('Extension word indicator is missing', DataTrackDeserializeErrorReason.MissingExtWords);\n  }\n  static unsupportedVersion(version) {\n    return new DataTrackDeserializeError(\"Unsupported version \".concat(version), DataTrackDeserializeErrorReason.UnsupportedVersion);\n  }\n  static invalidHandle(cause) {\n    return new DataTrackDeserializeError(\"invalid track handle: \".concat(cause.message), DataTrackDeserializeErrorReason.InvalidHandle, {\n      cause\n    });\n  }\n  static malformedExt(tag) {\n    return new DataTrackDeserializeError(\"Extension with tag \".concat(tag, \" is malformed\"), DataTrackDeserializeErrorReason.MalformedExt);\n  }\n}\nvar DataTrackSerializeErrorReason;\n(function (DataTrackSerializeErrorReason) {\n  DataTrackSerializeErrorReason[DataTrackSerializeErrorReason[\"TooSmallForHeader\"] = 0] = \"TooSmallForHeader\";\n  DataTrackSerializeErrorReason[DataTrackSerializeErrorReason[\"TooSmallForPayload\"] = 1] = \"TooSmallForPayload\";\n})(DataTrackSerializeErrorReason || (DataTrackSerializeErrorReason = {}));\nclass DataTrackSerializeError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(19, message, options);\n    this.name = 'DataTrackSerializeError';\n    this.reason = reason;\n    this.reasonName = DataTrackSerializeErrorReason[reason];\n  }\n  static tooSmallForHeader() {\n    return new DataTrackSerializeError('Buffer cannot fit header', DataTrackSerializeErrorReason.TooSmallForHeader);\n  }\n  static tooSmallForPayload() {\n    return new DataTrackSerializeError('Buffer cannot fit payload', DataTrackSerializeErrorReason.TooSmallForPayload);\n  }\n}/** An abstract class implementing common behavior related to data track binary serialization. */\nclass Serializable {\n  /** Encodes the instance as binary and returns the data as a Uint8Array. */\n  toBinary() {\n    const lengthBytes = this.toBinaryLengthBytes();\n    const output = new ArrayBuffer(lengthBytes);\n    const view = new DataView(output);\n    const writtenBytes = this.toBinaryInto(view);\n    if (lengthBytes !== writtenBytes) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"\".concat(this.constructor.name, \".toBinary: written bytes (\").concat(writtenBytes, \" bytes) not equal to allocated array buffer length (\").concat(lengthBytes, \" bytes).\"));\n    }\n    return new Uint8Array(output);\n  }\n}var DataTrackExtensionTag;\n(function (DataTrackExtensionTag) {\n  DataTrackExtensionTag[DataTrackExtensionTag[\"UserTimestamp\"] = 2] = \"UserTimestamp\";\n  DataTrackExtensionTag[DataTrackExtensionTag[\"E2ee\"] = 1] = \"E2ee\";\n})(DataTrackExtensionTag || (DataTrackExtensionTag = {}));\nclass DataTrackExtension extends Serializable {}\nclass DataTrackUserTimestampExtension extends DataTrackExtension {\n  constructor(timestamp) {\n    super();\n    this.timestamp = timestamp;\n  }\n  toBinaryLengthBytes() {\n    return U8_LENGTH_BYTES /* tag */ + U8_LENGTH_BYTES /* length */ + DataTrackUserTimestampExtension.lengthBytes;\n  }\n  toBinaryInto(dataView) {\n    let byteIndex = 0;\n    dataView.setUint8(byteIndex, DataTrackUserTimestampExtension.tag);\n    byteIndex += U8_LENGTH_BYTES;\n    dataView.setUint8(byteIndex, DataTrackUserTimestampExtension.lengthBytes);\n    byteIndex += U8_LENGTH_BYTES;\n    dataView.setBigUint64(byteIndex, this.timestamp);\n    byteIndex += U64_LENGTH_BYTES;\n    const totalLengthBytes = this.toBinaryLengthBytes();\n    if (byteIndex !== totalLengthBytes) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"DataTrackUserTimestampExtension.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n    }\n    return byteIndex;\n  }\n  toJSON() {\n    return {\n      tag: DataTrackUserTimestampExtension.tag,\n      lengthBytes: DataTrackUserTimestampExtension.lengthBytes,\n      timestamp: this.timestamp\n    };\n  }\n}\nDataTrackUserTimestampExtension.tag = DataTrackExtensionTag.UserTimestamp;\nDataTrackUserTimestampExtension.lengthBytes = 8;\nclass DataTrackE2eeExtension extends DataTrackExtension {\n  constructor(keyIndex, iv) {\n    super();\n    this.keyIndex = keyIndex;\n    this.iv = iv;\n  }\n  toBinaryLengthBytes() {\n    return U8_LENGTH_BYTES /* tag */ + U8_LENGTH_BYTES /* length */ + DataTrackE2eeExtension.lengthBytes;\n  }\n  toBinaryInto(dataView) {\n    let byteIndex = 0;\n    dataView.setUint8(byteIndex, DataTrackE2eeExtension.tag);\n    byteIndex += U8_LENGTH_BYTES;\n    dataView.setUint8(byteIndex, DataTrackE2eeExtension.lengthBytes);\n    byteIndex += U8_LENGTH_BYTES;\n    dataView.setUint8(byteIndex, this.keyIndex);\n    byteIndex += U8_LENGTH_BYTES;\n    for (let i = 0; i < this.iv.length; i += 1) {\n      dataView.setUint8(byteIndex, this.iv[i]);\n      byteIndex += U8_LENGTH_BYTES;\n    }\n    const totalLengthBytes = this.toBinaryLengthBytes();\n    if (byteIndex !== totalLengthBytes) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"DataTrackE2eeExtension.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n    }\n    return byteIndex;\n  }\n  toJSON() {\n    return {\n      tag: DataTrackE2eeExtension.tag,\n      lengthBytes: DataTrackE2eeExtension.lengthBytes,\n      keyIndex: this.keyIndex,\n      iv: this.iv\n    };\n  }\n}\nDataTrackE2eeExtension.tag = DataTrackExtensionTag.E2ee;\nDataTrackE2eeExtension.lengthBytes = 13;\nclass DataTrackExtensions extends Serializable {\n  constructor() {\n    let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    super();\n    this.userTimestamp = opts.userTimestamp;\n    this.e2ee = opts.e2ee;\n  }\n  toBinaryLengthBytes() {\n    let lengthBytes = 0;\n    if (this.userTimestamp) {\n      lengthBytes += this.userTimestamp.toBinaryLengthBytes();\n    }\n    if (this.e2ee) {\n      lengthBytes += this.e2ee.toBinaryLengthBytes();\n    }\n    return lengthBytes;\n  }\n  toBinaryInto(dataView) {\n    let byteIndex = 0;\n    if (this.e2ee) {\n      const e2eeBytes = this.e2ee.toBinaryInto(dataView);\n      byteIndex += e2eeBytes;\n    }\n    if (this.userTimestamp) {\n      const userTimestampBytes = this.userTimestamp.toBinaryInto(new DataView(dataView.buffer, dataView.byteOffset + byteIndex));\n      byteIndex += userTimestampBytes;\n    }\n    const totalLengthBytes = this.toBinaryLengthBytes();\n    if (byteIndex !== totalLengthBytes) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"DataTrackExtensions.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n    }\n    return byteIndex;\n  }\n  static fromBinary(input) {\n    const dataView = coerceToDataView(input);\n    let userTimestamp;\n    let e2ee;\n    let byteIndex = 0;\n    while (dataView.byteLength - byteIndex >= U8_LENGTH_BYTES + U8_LENGTH_BYTES) {\n      const tag = dataView.getUint8(byteIndex);\n      byteIndex += U8_LENGTH_BYTES;\n      const lengthBytes = dataView.getUint8(byteIndex);\n      byteIndex += U8_LENGTH_BYTES;\n      if (tag === EXT_TAG_PADDING) {\n        // Skip padding\n        continue;\n      }\n      switch (tag) {\n        case DataTrackExtensionTag.UserTimestamp:\n          if (dataView.byteLength - byteIndex < DataTrackUserTimestampExtension.lengthBytes) {\n            throw DataTrackDeserializeError.malformedExt(tag);\n          }\n          userTimestamp = new DataTrackUserTimestampExtension(dataView.getBigUint64(byteIndex));\n          byteIndex += lengthBytes;\n          break;\n        case DataTrackExtensionTag.E2ee:\n          if (dataView.byteLength - byteIndex < DataTrackE2eeExtension.lengthBytes) {\n            throw DataTrackDeserializeError.malformedExt(tag);\n          }\n          const keyIndex = dataView.getUint8(byteIndex);\n          const iv = new Uint8Array(12);\n          for (let i = 0; i < iv.length; i += 1) {\n            let byteIndexForIv = byteIndex;\n            byteIndexForIv += U8_LENGTH_BYTES; // key index\n            byteIndexForIv += i * U8_LENGTH_BYTES; // Index into iv array\n            iv[i] = dataView.getUint8(byteIndexForIv);\n          }\n          e2ee = new DataTrackE2eeExtension(keyIndex, iv);\n          byteIndex += lengthBytes;\n          break;\n        default:\n          // Skip over unknown extensions (forward compatible).\n          if (dataView.byteLength - byteIndex < lengthBytes) {\n            throw DataTrackDeserializeError.malformedExt(tag);\n          }\n          byteIndex += lengthBytes;\n          break;\n      }\n    }\n    // NOTE: padding bytes after extension data is intentionally not being processed\n    return [new DataTrackExtensions({\n      userTimestamp,\n      e2ee\n    }), dataView.byteLength];\n  }\n  toJSON() {\n    var _a, _b, _c, _d;\n    return {\n      userTimestamp: (_b = (_a = this.userTimestamp) === null || _a === void 0 ? void 0 : _a.toJSON()) !== null && _b !== void 0 ? _b : null,\n      e2ee: (_d = (_c = this.e2ee) === null || _c === void 0 ? void 0 : _c.toJSON()) !== null && _d !== void 0 ? _d : null\n    };\n  }\n}const DataTrackFrameInternal = {\n  from(frame) {\n    return {\n      payload: frame.payload,\n      extensions: new DataTrackExtensions({\n        userTimestamp: frame.userTimestamp ? new DataTrackUserTimestampExtension(frame.userTimestamp) : undefined\n      })\n    };\n  },\n  /** Converts from a DataTrackFrameInternal -> DataTrackFrame. Some internal information is\n   * discarded like e2ee encrption extension data. */\n  lossyIntoFrame(frame) {\n    var _a;\n    return {\n      payload: frame.payload,\n      userTimestamp: (_a = frame.extensions.userTimestamp) === null || _a === void 0 ? void 0 : _a.timestamp\n    };\n  }\n};const TrackSymbol = Symbol.for('lk.track');\nconst DataTrackSymbol = Symbol.for('lk.data-track');class RemoteDataTrack {\n  /** @internal */\n  constructor(info, manager, options) {\n    this.trackSymbol = TrackSymbol;\n    this.isLocal = false;\n    this.typeSymbol = DataTrackSymbol;\n    this.info = info;\n    this.manager = manager;\n    this.publisherIdentity = options.publisherIdentity;\n  }\n  /** Subscribes to the data track to receive frames.\n   *\n   * # Returns\n   *\n   * A stream that yields {@link DataTrackFrame}s as they arrive.\n   *\n   * # Multiple Subscriptions\n   *\n   * An application may call `subscribe` more than once to process frames in\n   * multiple places. For example, one async task might plot values on a graph\n   * while another writes them to a file.\n   *\n   * Internally, only the first call to `subscribe` communicates with the SFU and\n   * allocates the resources required to receive frames. Additional subscriptions\n   * reuse the same underlying pipeline and do not trigger additional signaling.\n   *\n   * Note that newly created subscriptions only receive frames published after\n   * the initial subscription is established.\n   */\n  subscribe(options) {\n    try {\n      const _this$manager$openSub = this.manager.openSubscriptionStream(this.info.sid, options === null || options === void 0 ? void 0 : options.signal, options === null || options === void 0 ? void 0 : options.bufferSize),\n        _this$manager$openSub2 = _slicedToArray(_this$manager$openSub, 2),\n        stream = _this$manager$openSub2[0],\n        sfuSubscriptionComplete = _this$manager$openSub2[1];\n      // Prevent uncaught promise rejections from bubbling up if rejections occur after the\n      // readable stream is discarded.\n      sfuSubscriptionComplete.catch(() => {});\n      return stream;\n    } catch (err) {\n      // NOTE: Rethrow errors to break Throws<...> type boundary\n      throw err;\n    }\n  }\n  /** Configure how incoming frames for this track are processed before they are handed out to\n   * subscribers (the \"pipeline\"). These options apply to all current and future subscriptions\n   * of this track, and may be set at any time. */\n  setPipelineOptions(options) {\n    this.manager.setPipelineOptions(this.info.sid, options);\n  }\n}/** A class for serializing / deserializing data track packet header sections. */\nclass DataTrackPacketHeader extends Serializable {\n  constructor(opts) {\n    var _a;\n    super();\n    this.marker = opts.marker;\n    this.trackHandle = opts.trackHandle;\n    this.sequence = opts.sequence;\n    this.frameNumber = opts.frameNumber;\n    this.timestamp = opts.timestamp;\n    this.extensions = (_a = opts.extensions) !== null && _a !== void 0 ? _a : new DataTrackExtensions();\n  }\n  extensionsMetrics() {\n    const lengthBytes = this.extensions.toBinaryLengthBytes();\n    const lengthWords = Math.ceil((EXT_WORDS_INDICATOR_SIZE + lengthBytes) / 4);\n    const paddingLengthBytes = lengthWords * 4 - EXT_WORDS_INDICATOR_SIZE - lengthBytes;\n    return {\n      lengthBytes,\n      lengthWords,\n      paddingLengthBytes\n    };\n  }\n  toBinaryLengthBytes() {\n    const _this$extensionsMetri = this.extensionsMetrics(),\n      extLengthBytes = _this$extensionsMetri.lengthBytes,\n      extPaddingLengthBytes = _this$extensionsMetri.paddingLengthBytes;\n    let totalLengthBytes = BASE_HEADER_LEN;\n    if (extLengthBytes > 0) {\n      totalLengthBytes += EXT_WORDS_INDICATOR_SIZE + extLengthBytes + extPaddingLengthBytes;\n    }\n    return totalLengthBytes;\n  }\n  toBinaryInto(dataView) {\n    if (dataView.byteLength < this.toBinaryLengthBytes()) {\n      throw DataTrackSerializeError.tooSmallForHeader();\n    }\n    let initial = SUPPORTED_VERSION << VERSION_SHIFT;\n    let marker;\n    switch (this.marker) {\n      case FrameMarker.Inter:\n        marker = FRAME_MARKER_INTER;\n        break;\n      case FrameMarker.Final:\n        marker = FRAME_MARKER_FINAL;\n        break;\n      case FrameMarker.Start:\n        marker = FRAME_MARKER_START;\n        break;\n      case FrameMarker.Single:\n        marker = FRAME_MARKER_SINGLE;\n        break;\n    }\n    initial |= marker << FRAME_MARKER_SHIFT;\n    const _this$extensionsMetri2 = this.extensionsMetrics(),\n      extensionsLengthBytes = _this$extensionsMetri2.lengthBytes,\n      extensionsLengthWords = _this$extensionsMetri2.lengthWords,\n      extensionsPaddingLengthBytes = _this$extensionsMetri2.paddingLengthBytes;\n    if (extensionsLengthBytes > 0) {\n      initial |= 1 << EXT_FLAG_SHIFT;\n    }\n    let byteIndex = 0;\n    dataView.setUint8(byteIndex, initial);\n    byteIndex += U8_LENGTH_BYTES;\n    dataView.setUint8(byteIndex, 0); // Reserved\n    byteIndex += U8_LENGTH_BYTES;\n    dataView.setUint16(byteIndex, this.trackHandle);\n    byteIndex += U16_LENGTH_BYTES;\n    dataView.setUint16(byteIndex, this.sequence.value);\n    byteIndex += U16_LENGTH_BYTES;\n    dataView.setUint16(byteIndex, this.frameNumber.value);\n    byteIndex += U16_LENGTH_BYTES;\n    dataView.setUint32(byteIndex, this.timestamp.asTicks());\n    byteIndex += U32_LENGTH_BYTES;\n    if (extensionsLengthBytes > 0) {\n      // NOTE: The protocol is implemented in a way where if the extension bit is set, any\n      // deserializer assumes the extensions section is at least one byte long, and the \"length\"\n      // field represents the \"number of additional bytes\" long the extensions section is. This is\n      // potentially unintuitive so I wanted to call it out.\n      const rtpOrientedExtensionLengthWords = extensionsLengthWords - 1;\n      dataView.setUint16(byteIndex, rtpOrientedExtensionLengthWords);\n      byteIndex += U16_LENGTH_BYTES;\n      const extensionBytes = this.extensions.toBinaryInto(new DataView(dataView.buffer, dataView.byteOffset + byteIndex));\n      byteIndex += extensionBytes;\n      for (let i = 0; i < extensionsPaddingLengthBytes; i += 1) {\n        dataView.setUint8(byteIndex, 0);\n        byteIndex += U8_LENGTH_BYTES;\n      }\n    }\n    const totalLengthBytes = this.toBinaryLengthBytes();\n    if (byteIndex !== totalLengthBytes) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"DataTrackPacketHeader.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n    }\n    return totalLengthBytes;\n  }\n  static fromBinary(input) {\n    const dataView = coerceToDataView(input);\n    if (dataView.byteLength < BASE_HEADER_LEN) {\n      throw DataTrackDeserializeError.tooShort();\n    }\n    let byteIndex = 0;\n    const initial = dataView.getUint8(byteIndex);\n    byteIndex += U8_LENGTH_BYTES;\n    const version = initial >> VERSION_SHIFT & VERSION_MASK;\n    if (version > SUPPORTED_VERSION) {\n      throw DataTrackDeserializeError.unsupportedVersion(version);\n    }\n    let marker;\n    switch (initial >> FRAME_MARKER_SHIFT & FRAME_MARKER_MASK) {\n      case FRAME_MARKER_START:\n        marker = FrameMarker.Start;\n        break;\n      case FRAME_MARKER_FINAL:\n        marker = FrameMarker.Final;\n        break;\n      case FRAME_MARKER_SINGLE:\n        marker = FrameMarker.Single;\n        break;\n      case FRAME_MARKER_INTER:\n      default:\n        marker = FrameMarker.Inter;\n        break;\n    }\n    const extensionsFlag = (initial >> EXT_FLAG_SHIFT & EXT_FLAG_MASK) > 0;\n    byteIndex += U8_LENGTH_BYTES; // Reserved\n    let trackHandle;\n    try {\n      trackHandle = DataTrackHandle.fromNumber(dataView.getUint16(byteIndex));\n    } catch (e) {\n      if (e instanceof DataTrackHandleError && (e.isReason(DataTrackHandleErrorReason.Reserved) || e.isReason(DataTrackHandleErrorReason.TooLarge))) {\n        throw DataTrackDeserializeError.invalidHandle(e);\n      } else {\n        throw e;\n      }\n    }\n    byteIndex += U16_LENGTH_BYTES;\n    const sequence = WrapAroundUnsignedInt.u16(dataView.getUint16(byteIndex));\n    byteIndex += U16_LENGTH_BYTES;\n    const frameNumber = WrapAroundUnsignedInt.u16(dataView.getUint16(byteIndex));\n    byteIndex += U16_LENGTH_BYTES;\n    const timestamp = DataTrackTimestamp.fromRtpTicks(dataView.getUint32(byteIndex));\n    byteIndex += U32_LENGTH_BYTES;\n    let extensions = new DataTrackExtensions();\n    if (extensionsFlag) {\n      if (dataView.byteLength - byteIndex < U16_LENGTH_BYTES) {\n        throw DataTrackDeserializeError.missingExtWords();\n      }\n      let rtpOrientedExtensionWords = dataView.getUint16(byteIndex);\n      byteIndex += U16_LENGTH_BYTES;\n      // NOTE: The protocol is implemented in a way where if the extension bit is set, any\n      // deserializer assumes the extensions section is at least one byte long, and the \"length\"\n      // field represents the \"number of additional bytes\" long the extensions section is. This is\n      // potentially unintuitive so I wanted to call it out.\n      const extensionWords = rtpOrientedExtensionWords + 1;\n      let extensionLengthBytes = 4 * extensionWords - EXT_WORDS_INDICATOR_SIZE;\n      if (byteIndex + extensionLengthBytes > dataView.byteLength) {\n        throw DataTrackDeserializeError.headerOverrun();\n      }\n      let extensionDataView = new DataView(dataView.buffer, dataView.byteOffset + byteIndex, extensionLengthBytes);\n      const _DataTrackExtensions$ = DataTrackExtensions.fromBinary(extensionDataView),\n        _DataTrackExtensions$2 = _slicedToArray(_DataTrackExtensions$, 2),\n        result = _DataTrackExtensions$2[0],\n        readBytes = _DataTrackExtensions$2[1];\n      extensions = result;\n      byteIndex += readBytes;\n    }\n    return [new DataTrackPacketHeader({\n      marker,\n      trackHandle: trackHandle,\n      sequence,\n      frameNumber,\n      timestamp,\n      extensions\n    }), byteIndex];\n  }\n  toJSON() {\n    return {\n      marker: this.marker,\n      trackHandle: this.trackHandle,\n      sequence: this.sequence.value,\n      frameNumber: this.frameNumber.value,\n      timestamp: this.timestamp.asTicks(),\n      extensions: this.extensions.toJSON()\n    };\n  }\n}\n/** Marker indicating a packet's position in relation to a frame. */\nvar FrameMarker;\n(function (FrameMarker) {\n  /** Packet is the first in a frame. */\n  FrameMarker[FrameMarker[\"Start\"] = 0] = \"Start\";\n  /** Packet is within a frame. */\n  FrameMarker[FrameMarker[\"Inter\"] = 1] = \"Inter\";\n  /** Packet is the last in a frame. */\n  FrameMarker[FrameMarker[\"Final\"] = 2] = \"Final\";\n  /** Packet is the only one in a frame. */\n  FrameMarker[FrameMarker[\"Single\"] = 3] = \"Single\";\n})(FrameMarker || (FrameMarker = {}));\n/** A class for serializing / deserializing data track packets. */\nclass DataTrackPacket extends Serializable {\n  constructor(header, payload) {\n    super();\n    this.header = header;\n    this.payload = payload;\n  }\n  toBinaryLengthBytes() {\n    return this.header.toBinaryLengthBytes() + this.payload.byteLength;\n  }\n  toBinaryInto(dataView) {\n    let byteIndex = 0;\n    const headerLengthBytes = this.header.toBinaryInto(dataView);\n    byteIndex += headerLengthBytes;\n    if (dataView.byteLength - byteIndex < this.payload.byteLength) {\n      throw DataTrackSerializeError.tooSmallForPayload();\n    }\n    for (let index = 0; index < this.payload.length; index += 1) {\n      dataView.setUint8(byteIndex, this.payload[index]);\n      byteIndex += U8_LENGTH_BYTES;\n    }\n    const totalLengthBytes = this.toBinaryLengthBytes();\n    if (byteIndex !== totalLengthBytes) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"DataTrackPacket.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n    }\n    return totalLengthBytes;\n  }\n  static fromBinary(input) {\n    const dataView = coerceToDataView(input);\n    const _DataTrackPacketHeade = DataTrackPacketHeader.fromBinary(dataView),\n      _DataTrackPacketHeade2 = _slicedToArray(_DataTrackPacketHeade, 2),\n      header = _DataTrackPacketHeade2[0],\n      headerByteLength = _DataTrackPacketHeade2[1];\n    const payload = dataView.buffer.slice(dataView.byteOffset + headerByteLength, dataView.byteOffset + dataView.byteLength);\n    return [new DataTrackPacket(header, new Uint8Array(payload)), dataView.byteLength];\n  }\n  toJSON() {\n    return {\n      header: this.header.toJSON(),\n      payload: this.payload\n    };\n  }\n}const log$3 = getLogger(LoggerNames.DataTracks);\n/** An error indicating a frame was dropped. */\nclass DataTrackDepacketizerDropError extends LivekitReasonedError {\n  constructor(message, reason, frameNumber, options) {\n    super(19, \"Frame \".concat(frameNumber, \" dropped: \").concat(message), options);\n    this.name = 'DataTrackDepacketizerDropError';\n    this.reason = reason;\n    this.reasonName = DataTrackDepacketizerDropReason[reason];\n    this.frameNumber = frameNumber;\n  }\n  static interrupted(frameNumber, newFrameNumber) {\n    return new DataTrackDepacketizerDropError(\"Interrupted by the start of a new frame \".concat(newFrameNumber), DataTrackDepacketizerDropReason.Interrupted, frameNumber);\n  }\n  static unknownFrame(frameNumber) {\n    return new DataTrackDepacketizerDropError('Initial packet was never received.', DataTrackDepacketizerDropReason.UnknownFrame, frameNumber);\n  }\n  static bufferFull(frameNumber) {\n    return new DataTrackDepacketizerDropError('Reorder buffer is full.', DataTrackDepacketizerDropReason.BufferFull, frameNumber);\n  }\n  static incomplete(frameNumber, receivedPackets, expectedPackets) {\n    return new DataTrackDepacketizerDropError(\"Not all packets received before final packet. Received \".concat(receivedPackets, \" packets, expected \").concat(expectedPackets, \" packets.\"), DataTrackDepacketizerDropReason.Incomplete, frameNumber);\n  }\n}\n/** Reason why a frame was dropped. */\nvar DataTrackDepacketizerDropReason;\n(function (DataTrackDepacketizerDropReason) {\n  DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"Interrupted\"] = 0] = \"Interrupted\";\n  DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"UnknownFrame\"] = 1] = \"UnknownFrame\";\n  DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"BufferFull\"] = 2] = \"BufferFull\";\n  DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"Incomplete\"] = 3] = \"Incomplete\";\n})(DataTrackDepacketizerDropReason || (DataTrackDepacketizerDropReason = {}));\nclass DataTrackDepacketizer {\n  constructor() {\n    /** Partial frames currently being assembled, keyed by frame number. `Map` preserves insertion\n     * order, so the oldest entry is the first key. */\n    this.partials = new Map();\n  }\n  /** Should be repeatedly called with received {@link DataTrackPacket}s - intermediate calls\n   * aggregate the packet's state internally, and return null.\n   *\n   * Once this method is called with the final packet to form a frame, a new {@link DataTrackFrameInternal}\n   * is returned.*/\n  push(packet, options) {\n    switch (packet.header.marker) {\n      case FrameMarker.Single:\n        return this.frameFromSingle(packet, options);\n      case FrameMarker.Start:\n        return this.beginPartial(packet, options);\n      case FrameMarker.Inter:\n      case FrameMarker.Final:\n        return this.pushToPartial(packet);\n    }\n  }\n  reset() {\n    this.partials.clear();\n  }\n  peekOldestPartialFrameNumber() {\n    const first = this.partials.keys().next();\n    return first.done ? null : first.value;\n  }\n  frameFromSingle(packet, options) {\n    var _a;\n    if (packet.header.marker !== FrameMarker.Single) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"Depacketizer.frameFromSingle: packet.header.marker was not FrameMarker.Single, found \".concat(packet.header.marker, \".\"));\n    }\n    // A `Single` packet is a self-contained frame and doesn't reserve a partials slot, but if\n    // the partials map is at capacity, treat it as a signal that the oldest in-flight partial\n    // is stale and evict it (matches `main`'s behavior when `maxPartialFrames`\n    // defaults to 1).\n    const maxPartialFrames = (_a = options === null || options === void 0 ? void 0 : options.maxPartialFrames) !== null && _a !== void 0 ? _a : 1;\n    if (this.partials.size >= maxPartialFrames) {\n      const oldestPartialFrameNumber = this.peekOldestPartialFrameNumber();\n      if (typeof oldestPartialFrameNumber !== 'number') {\n        // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n        throw new Error(\"Depacketizer.frameFromSingle: no oldest frame number found, but partials.size is \".concat(this.partials.size, \".\"));\n      }\n      this.partials.delete(oldestPartialFrameNumber);\n      if (options === null || options === void 0 ? void 0 : options.throwOnInterruption) {\n        throw DataTrackDepacketizerDropError.interrupted(oldestPartialFrameNumber, packet.header.frameNumber.value);\n      }\n      log$3.warn(\"Data track frame \".concat(oldestPartialFrameNumber, \" was interrupted by single-packet frame \").concat(packet.header.frameNumber.value, \", dropping.\"));\n    }\n    return {\n      payload: packet.payload,\n      extensions: packet.header.extensions\n    };\n  }\n  /** Begin assembling a new packet. */\n  beginPartial(packet, options) {\n    var _a;\n    if (packet.header.marker !== FrameMarker.Start) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"Depacketizer.beginPartial: packet.header.marker was not FrameMarker.Start, found \".concat(packet.header.marker, \".\"));\n    }\n    const startSequence = packet.header.sequence;\n    const frameNumber = packet.header.frameNumber.value;\n    const partial = {\n      startSequence,\n      extensions: packet.header.extensions,\n      payloads: new Map([[startSequence.value, packet.payload]])\n    };\n    // Loop in case `maxPartialFrames` shrunk relative to a previous push call - evict the\n    // oldest partials until there is room for the new one. With `throwOnInterruption` set the\n    // throw inside the loop short-circuits on the first eviction, matching the single-eviction\n    // behavior callers expect when they ask to be told about interruptions.\n    const maxPartialFrames = (_a = options === null || options === void 0 ? void 0 : options.maxPartialFrames) !== null && _a !== void 0 ? _a : 1;\n    while (this.partials.size >= maxPartialFrames) {\n      const oldestPartialFrameNumber = this.peekOldestPartialFrameNumber();\n      if (typeof oldestPartialFrameNumber !== 'number') {\n        // partials map is empty - nothing more to evict\n        break;\n      }\n      this.partials.delete(oldestPartialFrameNumber);\n      if (options === null || options === void 0 ? void 0 : options.throwOnInterruption) {\n        throw DataTrackDepacketizerDropError.interrupted(oldestPartialFrameNumber, frameNumber);\n      }\n      log$3.warn(\"Data track partials full (max \".concat(maxPartialFrames, \"), evicted oldest frame \").concat(oldestPartialFrameNumber, \" to make room for new frame \").concat(frameNumber, \".\"));\n    }\n    this.partials.set(frameNumber, partial);\n    return null;\n  }\n  /** Push to the existing partial frame. */\n  pushToPartial(packet) {\n    if (packet.header.marker !== FrameMarker.Inter && packet.header.marker !== FrameMarker.Final) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error(\"Depacketizer.pushToPartial: packet.header.marker was not FrameMarker.Inter or FrameMarker.Final, found \".concat(packet.header.marker, \".\"));\n    }\n    const packetFrameNumber = packet.header.frameNumber.value;\n    const matchingPartial = this.partials.get(packetFrameNumber);\n    if (!matchingPartial) {\n      this.partials.delete(packetFrameNumber);\n      throw DataTrackDepacketizerDropError.unknownFrame(packetFrameNumber);\n    }\n    // NOTE: this check will block reprocessing packets with duplicate sequence values if the\n    // buffer is full already, which could maybe be problematic for very large frames.\n    if (matchingPartial.payloads.size >= DataTrackDepacketizer.MAX_BUFFER_PACKETS) {\n      this.partials.delete(packetFrameNumber);\n      throw DataTrackDepacketizerDropError.bufferFull(packetFrameNumber);\n    }\n    // Note: receiving a packet with a duplicate `sequence` value is something that likely won't\n    // happen in actual use, but even if it does (maybe a low level network retransmission?) the\n    // last packet with a given sequence received should always win.\n    if (matchingPartial.payloads.has(packet.header.sequence.value)) {\n      log$3.warn(\"Data track frame \".concat(packetFrameNumber, \" received duplicate packet for sequence \").concat(packet.header.sequence.value, \", so replacing with newly received packet.\"));\n    }\n    matchingPartial.payloads.set(packet.header.sequence.value, packet.payload);\n    if (packet.header.marker === FrameMarker.Final) {\n      return this.finalize(packetFrameNumber, matchingPartial, packet.header.sequence.value);\n    }\n    return null;\n  }\n  /** Try to reassemble the complete frame. */\n  finalize(partialFrameNumber, partial, endSequence) {\n    const received = partial.payloads.size;\n    let payloadLengthBytes = 0;\n    for (const p of partial.payloads.values()) {\n      payloadLengthBytes += p.length;\n    }\n    const payload = new Uint8Array(payloadLengthBytes);\n    let sequencePointer = partial.startSequence.clone();\n    let payloadOffsetPointerBytes = 0;\n    while (true) {\n      const partialPayload = partial.payloads.get(sequencePointer.value);\n      if (!partialPayload) {\n        break;\n      }\n      partial.payloads.delete(sequencePointer.value);\n      const payloadRemainingBytes = payload.length - payloadOffsetPointerBytes;\n      if (partialPayload.length > payloadRemainingBytes) {\n        // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n        throw new Error(\"Depacketizer.finalize: Expected at least \".concat(partialPayload.length, \" more bytes left in the payload buffer, only got \").concat(payloadRemainingBytes, \" bytes.\"));\n      }\n      payload.set(partialPayload, payloadOffsetPointerBytes);\n      payloadOffsetPointerBytes += partialPayload.length;\n      // NOTE: sequencePointer could wrap around, which is why this isn't a \"<\"\n      if (sequencePointer.value != endSequence) {\n        sequencePointer.increment();\n        continue;\n      }\n      // The packet is done processing, reset the state so another frame can be processed next.\n      this.partials.delete(partialFrameNumber);\n      return {\n        payload,\n        extensions: partial.extensions\n      };\n    }\n    this.partials.delete(partialFrameNumber);\n    throw DataTrackDepacketizerDropError.incomplete(partialFrameNumber, received, endSequence - partial.startSequence.value + 1);\n  }\n}\n/** Maximum number of packets to buffer per frame before dropping. */\nDataTrackDepacketizer.MAX_BUFFER_PACKETS = 128;var DataTrackSubscribeErrorReason;\n(function (DataTrackSubscribeErrorReason) {\n  /** The track has been unpublished and is no longer available */\n  DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Unpublished\"] = 0] = \"Unpublished\";\n  /** Request to subscribe to data track timed-out */\n  DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Timeout\"] = 1] = \"Timeout\";\n  /** Cannot subscribe to data track when disconnected */\n  DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Disconnected\"] = 2] = \"Disconnected\";\n  /** Subscription to data track cancelled by caller */\n  DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Cancelled\"] = 4] = \"Cancelled\";\n})(DataTrackSubscribeErrorReason || (DataTrackSubscribeErrorReason = {}));\nclass DataTrackSubscribeError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(22, message, options);\n    this.name = 'DataTrackSubscribeError';\n    this.reason = reason;\n    this.reasonName = DataTrackSubscribeErrorReason[reason];\n  }\n  static unpublished() {\n    return new DataTrackSubscribeError('The track has been unpublished and is no longer available', DataTrackSubscribeErrorReason.Unpublished);\n  }\n  static timeout() {\n    return new DataTrackSubscribeError('Request to subscribe to data track timed-out', DataTrackSubscribeErrorReason.Timeout);\n  }\n  static disconnected() {\n    return new DataTrackSubscribeError('Cannot subscribe to data track when disconnected', DataTrackSubscribeErrorReason.Disconnected);\n  }\n  // NOTE: this was introduced by web / there isn't a corresponding case in the rust version.\n  static cancelled() {\n    return new DataTrackSubscribeError('Subscription to data track cancelled by caller', DataTrackSubscribeErrorReason.Cancelled);\n  }\n}const log$2 = getLogger(LoggerNames.DataTracks);\n/**\n * Pipeline for an individual data track subscription.\n */\nclass IncomingDataTrackPipeline {\n  /**\n   * Creates a new pipeline with the given options.\n   */\n  constructor(options) {\n    var _a, _b;\n    const hasProvider = options.e2eeManager !== null;\n    if (options.info.usesE2ee !== hasProvider) {\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error('IncomingDataTrackPipeline: DataTrackInfo.usesE2ee must match presence of decryptionProvider');\n    }\n    const depacketizer = new DataTrackDepacketizer();\n    this.publisherIdentity = options.publisherIdentity;\n    this.e2eeManager = (_a = options.e2eeManager) !== null && _a !== void 0 ? _a : null;\n    this.depacketizer = depacketizer;\n    this.options = (_b = options.pipelineOptions) !== null && _b !== void 0 ? _b : {};\n  }\n  updateE2eeManager(e2eeManager) {\n    this.e2eeManager = e2eeManager;\n  }\n  setOptions(options) {\n    this.options = options;\n  }\n  processPacket(packet) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const frame = this.depacketize(packet);\n      if (!frame) {\n        return null;\n      }\n      const decrypted = yield this.decryptIfNeeded(frame);\n      if (!decrypted) {\n        return null;\n      }\n      return decrypted;\n    });\n  }\n  /**\n   * Depacketize the given frame, log if a drop occurs.\n   */\n  depacketize(packet) {\n    let frame;\n    try {\n      frame = this.depacketizer.push(packet, {\n        throwOnInterruption: false,\n        maxPartialFrames: this.options.maxPartialFrames\n      });\n    } catch (err) {\n      // In a future version, use this to maintain drop statistics.\n      // FIXME: is this a good idea?\n      log$2.warn(\"Data frame depacketize error: \".concat(err));\n      return null;\n    }\n    return frame;\n  }\n  /**\n   * Decrypt the frame's payload if E2EE is enabled for this track.\n   */\n  decryptIfNeeded(frame) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      const e2eeManager = this.e2eeManager;\n      if (!e2eeManager) {\n        return frame;\n      }\n      const e2ee = (_b = (_a = frame.extensions) === null || _a === void 0 ? void 0 : _a.e2ee) !== null && _b !== void 0 ? _b : null;\n      if (!e2ee) {\n        log$2.error('Missing E2EE meta');\n        return null;\n      }\n      let result;\n      try {\n        result = yield e2eeManager.handleEncryptedData(frame.payload, e2ee.iv, this.publisherIdentity, e2ee.keyIndex);\n      } catch (err) {\n        log$2.error(\"Error decrypting packet: \".concat(err));\n        return null;\n      }\n      frame.payload = result.payload;\n      return frame;\n    });\n  }\n}const log$1 = getLogger(LoggerNames.DataTracks);\n/** How long to wait when attempting to subscribe before timing out. */\nconst SUBSCRIBE_TIMEOUT_MILLISECONDS = 10000;\n/** Maximum number of {@link DataTrackFrame}s that are cached for each ReadableStream subscription.\n * If data comes in too fast and saturates this threshold, backpressure will be applied. */\nconst READABLE_STREAM_DEFAULT_BUFFER_SIZE = 16;\nclass IncomingDataTrackManager extends eventsExports.EventEmitter {\n  constructor(options) {\n    var _a;\n    super();\n    /** Mapping between track SID and descriptor. */\n    this.descriptors = new Map();\n    /** Mapping between subscriber handle and track SID.\n     *\n     * This is an index that allows track descriptors to be looked up\n     * by subscriber handle in O(1) time, to make routing incoming packets\n     * (a hot code path) faster.\n     */\n    this.subscriptionHandles = new Map();\n    this.e2eeManager = (_a = options === null || options === void 0 ? void 0 : options.e2eeManager) !== null && _a !== void 0 ? _a : null;\n  }\n  /** @internal */\n  updateE2eeManager(e2eeManager) {\n    this.e2eeManager = e2eeManager;\n    // Propegate downwards to all pre-existing pipelines\n    for (const descriptor of this.descriptors.values()) {\n      if (descriptor.subscription.type === 'active') {\n        descriptor.subscription.pipeline.updateE2eeManager(e2eeManager);\n      }\n    }\n  }\n  /** @internal */\n  setPipelineOptions(sid, options) {\n    const descriptor = this.descriptors.get(sid);\n    if (!descriptor) {\n      log$1.warn(\"Unknown track \".concat(sid, \", cannot set pipeline options.\"));\n      return;\n    }\n    descriptor.pipelineOptions = options;\n    if (descriptor.subscription.type === 'active') {\n      descriptor.subscription.pipeline.setOptions(options);\n    }\n  }\n  /** Allocates a ReadableStream which emits when a new {@link DataTrackFrame} is received from the\n   * SFU. The SFU subscription is initiated lazily when the stream is created.\n   *\n   * @returns A tuple of the ReadableStream and a Promise that resolves once the SFU subscription\n   * is fully established / the stream is ready to receive frames.\n   *\n   * @internal\n   **/\n  openSubscriptionStream(sid, signal) {\n    let bufferSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : READABLE_STREAM_DEFAULT_BUFFER_SIZE;\n    let streamController = null;\n    const sfuSubscriptionComplete = new Future();\n    const detachSignal = () => {\n      signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', onAbort);\n    };\n    const cleanup = () => {\n      detachSignal();\n      if (!streamController) {\n        log$1.warn(\"ReadableStream subscribed to \".concat(sid, \" was not started.\"));\n        return;\n      }\n      const descriptor = this.descriptors.get(sid);\n      if (!descriptor) {\n        log$1.warn(\"Unknown track \".concat(sid, \", skipping cancel...\"));\n        return;\n      }\n      if (descriptor.subscription.type !== 'active') {\n        log$1.warn(\"Subscription for track \".concat(sid, \" is not active, skipping cancel...\"));\n        return;\n      }\n      descriptor.subscription.streamControllers.delete(streamController);\n      // If no active stream controllers are left, also unsubscribe on the SFU end.\n      if (descriptor.subscription.streamControllers.size === 0) {\n        this.unSubscribeRequest(descriptor.info.sid);\n      }\n    };\n    const onAbort = () => {\n      var _a;\n      if (!streamController) {\n        return;\n      }\n      const currentDescriptor = this.descriptors.get(sid);\n      if ((currentDescriptor === null || currentDescriptor === void 0 ? void 0 : currentDescriptor.subscription.type) === 'active') {\n        currentDescriptor.subscription.streamControllers.delete(streamController);\n      }\n      streamController.error(DataTrackSubscribeError.cancelled());\n      (_a = sfuSubscriptionComplete.reject) === null || _a === void 0 ? void 0 : _a.call(sfuSubscriptionComplete, DataTrackSubscribeError.cancelled());\n      cleanup();\n    };\n    const stream = new ReadableStream({\n      start: controller => {\n        streamController = controller;\n        this.subscribeRequest(sid, signal).then(() => __awaiter(this, void 0, void 0, function* () {\n          var _a, _b, _c;\n          const descriptor = this.descriptors.get(sid);\n          if (!descriptor) {\n            log$1.error(\"Unknown track \".concat(sid));\n            const err = DataTrackSubscribeError.disconnected();\n            controller.error(err);\n            (_a = sfuSubscriptionComplete.reject) === null || _a === void 0 ? void 0 : _a.call(sfuSubscriptionComplete, err);\n            return;\n          }\n          if (descriptor.subscription.type !== 'active') {\n            log$1.error(\"Subscription for track \".concat(sid, \" is not active\"));\n            const err = DataTrackSubscribeError.disconnected();\n            controller.error(err);\n            (_b = sfuSubscriptionComplete.reject) === null || _b === void 0 ? void 0 : _b.call(sfuSubscriptionComplete, err);\n            return;\n          }\n          // Attach the abort signal, aborting immediately if the abort signal was fired while\n          // subscribeRequest was in flight.\n          if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n            onAbort();\n            return;\n          }\n          signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', onAbort);\n          descriptor.subscription.streamControllers.set(controller, detachSignal);\n          (_c = sfuSubscriptionComplete.resolve) === null || _c === void 0 ? void 0 : _c.call(sfuSubscriptionComplete);\n        })).catch(err => {\n          var _a;\n          // subscribeRequest rejected (cancelled, timed out, disconnected). The signal\n          // listener was never attached in this path, so nothing to detach.\n          controller.error(err);\n          (_a = sfuSubscriptionComplete.reject) === null || _a === void 0 ? void 0 : _a.call(sfuSubscriptionComplete, err);\n        });\n      },\n      cancel: () => {\n        cleanup();\n      }\n    }, new CountQueuingStrategy({\n      highWaterMark: bufferSize\n    }));\n    return [stream, sfuSubscriptionComplete.promise];\n  }\n  /** Client requested to subscribe to a data track.\n   *\n   * This is sent when the user calls {@link RemoteDataTrack.subscribe}.\n   *\n   * Only the first request to subscribe to a given track incurs meaningful overhead; subsequent\n   * requests simply attach an additional receiver to the broadcast channel, allowing them to consume\n   * frames from the existing subscription pipeline.\n   */\n  subscribeRequest(sid, signal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const descriptor = this.descriptors.get(sid);\n      if (!descriptor) {\n        // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n        throw new Error('Cannot subscribe to unknown track');\n      }\n      const waitForCompletionFuture = (currentDescriptor, userProvidedSignal, timeoutSignal) => __awaiter(this, void 0, void 0, function* () {\n        if (currentDescriptor.subscription.type === 'active') {\n          // Subscription has already become active! So bail out early, there is nothing to wait for.\n          return;\n        }\n        if (currentDescriptor.subscription.type !== 'pending') {\n          // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n          throw new Error(\"Descriptor for track \".concat(sid, \" is not pending, found \").concat(currentDescriptor.subscription.type));\n        }\n        const combinedSignal = abortSignalAny([userProvidedSignal, timeoutSignal].filter(s => typeof s !== 'undefined'));\n        const proxiedCompletionFuture = new Future();\n        currentDescriptor.subscription.completionFuture.promise.then(() => {\n          var _a;\n          return (_a = proxiedCompletionFuture.resolve) === null || _a === void 0 ? void 0 : _a.call(proxiedCompletionFuture);\n        }).catch(err => {\n          var _a;\n          return (_a = proxiedCompletionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(proxiedCompletionFuture, err);\n        });\n        const onAbort = () => {\n          var _a;\n          if (currentDescriptor.subscription.type !== 'pending') {\n            return;\n          }\n          currentDescriptor.subscription.pendingRequestCount -= 1;\n          if (timeoutSignal === null || timeoutSignal === void 0 ? void 0 : timeoutSignal.aborted) {\n            // A timeout should apply to the underlying SFU subscription and cancel all user\n            // subscriptions.\n            currentDescriptor.subscription.cancel();\n            return;\n          }\n          if (currentDescriptor.subscription.pendingRequestCount <= 0) {\n            // No user subscriptions are still pending, so cancel the underlying pending `sfuUpdateSubscription`\n            currentDescriptor.subscription.cancel();\n            return;\n          }\n          // Other subscriptions are still pending for this data track, so just cancel this one\n          // active user subscription, and leave the rest of the user subscriptions alone.\n          (_a = proxiedCompletionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(proxiedCompletionFuture, DataTrackSubscribeError.cancelled());\n        };\n        if (combinedSignal.aborted) {\n          onAbort();\n        }\n        combinedSignal.addEventListener('abort', onAbort);\n        yield proxiedCompletionFuture.promise;\n        combinedSignal.removeEventListener('abort', onAbort);\n      });\n      switch (descriptor.subscription.type) {\n        case 'none':\n          {\n            descriptor.subscription = {\n              type: 'pending',\n              completionFuture: new Future(),\n              pendingRequestCount: 1,\n              cancel: () => {\n                var _a, _b;\n                const previousDescriptorSubscription = descriptor.subscription;\n                descriptor.subscription = {\n                  type: 'none'\n                };\n                // Let the SFU know that the subscribe has been cancelled\n                this.emit('sfuUpdateSubscription', {\n                  sid,\n                  subscribe: false\n                });\n                if (previousDescriptorSubscription.type === 'pending') {\n                  (_b = (_a = previousDescriptorSubscription.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, timeoutSignal.aborted ? DataTrackSubscribeError.timeout() :\n                  // NOTE: the below cancelled case was introduced by web / there isn't a corresponding case in the rust version.\n                  DataTrackSubscribeError.cancelled());\n                }\n              }\n            };\n            this.emit('sfuUpdateSubscription', {\n              sid,\n              subscribe: true\n            });\n            const timeoutSignal = abortSignalTimeout(SUBSCRIBE_TIMEOUT_MILLISECONDS);\n            // Wait for the subscription to complete, or time out if it takes too long\n            yield waitForCompletionFuture(descriptor, signal, timeoutSignal);\n            return;\n          }\n        case 'pending':\n          {\n            descriptor.subscription.pendingRequestCount += 1;\n            // Wait for the subscription to complete\n            yield waitForCompletionFuture(descriptor, signal);\n            return;\n          }\n        case 'active':\n          {\n            return;\n          }\n      }\n    });\n  }\n  /**\n   * Get information about all currently subscribed tracks.\n   * @internal */\n  querySubscribed() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const descriptorInfos = Array.from(this.descriptors.values()).filter(descriptor => descriptor.subscription.type === 'active').map(descriptor => [descriptor.info, descriptor.publisherIdentity]);\n      return descriptorInfos;\n    });\n  }\n  /** Client requested to unsubscribe from a data track. */\n  unSubscribeRequest(sid) {\n    var _a;\n    const descriptor = this.descriptors.get(sid);\n    if (!descriptor) {\n      // FIXME: rust implementation returns here, not throws\n      // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n      throw new Error('Cannot subscribe to unknown track');\n    }\n    if (descriptor.subscription.type !== 'active') {\n      log$1.warn(\"Unexpected descriptor state in unSubscribeRequest, expected active, found \".concat((_a = descriptor.subscription) === null || _a === void 0 ? void 0 : _a.type));\n      return;\n    }\n    this.closeStreamControllers(descriptor.subscription.streamControllers, sid);\n    // FIXME: this might be wrong? Shouldn't this only occur if it is the last subscription to\n    // terminate?\n    const previousDescriptorSubscription = descriptor.subscription;\n    descriptor.subscription = {\n      type: 'none'\n    };\n    this.subscriptionHandles.delete(previousDescriptorSubscription.subcriptionHandle);\n    this.emit('sfuUpdateSubscription', {\n      sid,\n      subscribe: false\n    });\n  }\n  /** Detach abort-signal listeners and close all downstream stream controllers for an active\n   * subscription. Used when the subscription is being torn down by the manager (unsubscribe,\n   * unpublish, or shutdown). */\n  closeStreamControllers(streamControllers, sid) {\n    for (const _ref of streamControllers) {\n      var _ref2 = _slicedToArray(_ref, 2);\n      const controller = _ref2[0];\n      const detachSignal = _ref2[1];\n      // Detach before close so we don't leak a listener on the user's AbortSignal.\n      detachSignal();\n      try {\n        controller.close();\n      } catch (err) {\n        // Defensive: if the controller has already been errored (e.g. by a racing abort whose\n        // listener removed itself before we got here), close() throws. There's nothing\n        // meaningful to do other than log — the stream is already terminal.\n        log$1.warn(\"Failed to close readable stream for track \".concat(sid, \": \").concat(err));\n      }\n    }\n  }\n  /** SFU notification that track publications have changed.\n   *\n   * This event is produced from both {@link JoinResponse} and {@link ParticipantUpdate}\n   * to provide a complete view of remote participants' track publications:\n   *\n   * - From a `JoinResponse`, it captures the initial set of tracks published when a participant joins.\n   * - From a `ParticipantUpdate`, it captures subsequent changes (i.e., new tracks being\n   *   published and existing tracks unpublished).\n   */\n  receiveSfuPublicationUpdates(updates) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (updates.size === 0) {\n        return;\n      }\n      // Detect published track\n      const publisherParticipantToSidsInUpdate = new Map();\n      for (const _ref3 of updates.entries()) {\n        var _ref4 = _slicedToArray(_ref3, 2);\n        const publisherIdentity = _ref4[0];\n        const infos = _ref4[1];\n        const sidsInUpdate = new Set();\n        for (const info of infos) {\n          sidsInUpdate.add(info.sid);\n          if (this.descriptors.has(info.sid)) {\n            continue;\n          }\n          yield this.handleTrackPublished(publisherIdentity, info);\n        }\n        publisherParticipantToSidsInUpdate.set(publisherIdentity, sidsInUpdate);\n      }\n      // Detect unpublished tracks\n      for (const _ref5 of publisherParticipantToSidsInUpdate.entries()) {\n        var _ref6 = _slicedToArray(_ref5, 2);\n        const publisherIdentity = _ref6[0];\n        const sidsInUpdate = _ref6[1];\n        const descriptorsForPublisher = Array.from(this.descriptors.entries()).filter(_ref7 => {\n          let _ref8 = _slicedToArray(_ref7, 2);\n            _ref8[0];\n            let descriptor = _ref8[1];\n          return descriptor.publisherIdentity === publisherIdentity;\n        }).map(_ref9 => {\n          let _ref0 = _slicedToArray(_ref9, 1),\n            sid = _ref0[0];\n          return sid;\n        });\n        let unpublishedSids = descriptorsForPublisher.filter(sid => !sidsInUpdate.has(sid));\n        for (const sid of unpublishedSids) {\n          this.handleTrackUnpublished(sid);\n        }\n      }\n    });\n  }\n  /**\n   * Get information about all currently remotely published tracks which could be subscribed to.\n   * @internal */\n  queryPublications() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return Array.from(this.descriptors.values()).map(descriptor => descriptor.info);\n    });\n  }\n  handleTrackPublished(publisherIdentity, info) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.descriptors.has(info.sid)) {\n        log$1.error(\"Existing descriptor for track \".concat(info.sid));\n        return;\n      }\n      let descriptor = {\n        info,\n        publisherIdentity,\n        subscription: {\n          type: 'none'\n        },\n        pipelineOptions: {}\n      };\n      this.descriptors.set(descriptor.info.sid, descriptor);\n      const track = new RemoteDataTrack(descriptor.info, this, {\n        publisherIdentity\n      });\n      this.emit('trackPublished', {\n        track\n      });\n    });\n  }\n  handleTrackUnpublished(sid) {\n    const descriptor = this.descriptors.get(sid);\n    if (!descriptor) {\n      log$1.error(\"Unknown track \".concat(sid));\n      return;\n    }\n    this.descriptors.delete(sid);\n    if (descriptor.subscription.type === 'active') {\n      this.closeStreamControllers(descriptor.subscription.streamControllers, sid);\n      this.subscriptionHandles.delete(descriptor.subscription.subcriptionHandle);\n    }\n    this.emit('trackUnpublished', {\n      sid,\n      publisherIdentity: descriptor.publisherIdentity\n    });\n  }\n  /** SFU notification that handles have been assigned for requested subscriptions. */\n  receivedSfuSubscriberHandles(\n  /** Mapping between track handles attached to incoming packets to the\n   * track SIDs they belong to. */\n  mapping) {\n    for (const _ref1 of mapping.entries()) {\n      var _ref10 = _slicedToArray(_ref1, 2);\n      const handle = _ref10[0];\n      const sid = _ref10[1];\n      this.registerSubscriberHandle(handle, sid);\n    }\n  }\n  registerSubscriberHandle(assignedHandle, sid) {\n    var _a, _b;\n    const descriptor = this.descriptors.get(sid);\n    if (!descriptor) {\n      log$1.error(\"Unknown track \".concat(sid));\n      return;\n    }\n    switch (descriptor.subscription.type) {\n      case 'none':\n        {\n          // Handle assigned when there is no pending or active subscription is unexpected.\n          log$1.warn(\"No subscription for \".concat(sid));\n          return;\n        }\n      case 'active':\n        {\n          // Update handle for an active subscription. This can occur following a full reconnect.\n          descriptor.subscription.subcriptionHandle = assignedHandle;\n          this.subscriptionHandles.set(assignedHandle, sid);\n          return;\n        }\n      case 'pending':\n        {\n          const pipeline = new IncomingDataTrackPipeline({\n            info: descriptor.info,\n            publisherIdentity: descriptor.publisherIdentity,\n            e2eeManager: this.e2eeManager,\n            pipelineOptions: descriptor.pipelineOptions\n          });\n          const previousDescriptorSubscription = descriptor.subscription;\n          descriptor.subscription = {\n            type: 'active',\n            subcriptionHandle: assignedHandle,\n            pipeline,\n            streamControllers: new Map()\n          };\n          this.subscriptionHandles.set(assignedHandle, sid);\n          (_b = (_a = previousDescriptorSubscription.completionFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n        }\n    }\n  }\n  /** Packet has been received over the transport. */\n  packetReceived(bytes) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let packet;\n      try {\n        var _DataTrackPacket$from = DataTrackPacket.fromBinary(bytes);\n        var _DataTrackPacket$from2 = _slicedToArray(_DataTrackPacket$from, 1);\n        packet = _DataTrackPacket$from2[0];\n      } catch (err) {\n        log$1.error(\"Failed to deserialize packet: \".concat(err));\n        return;\n      }\n      const sid = this.subscriptionHandles.get(packet.header.trackHandle);\n      if (!sid) {\n        log$1.warn(\"Unknown subscriber handle \".concat(packet.header.trackHandle));\n        return;\n      }\n      const descriptor = this.descriptors.get(sid);\n      if (!descriptor) {\n        log$1.error(\"Missing descriptor for track \".concat(sid));\n        return;\n      }\n      if (descriptor.subscription.type !== 'active') {\n        log$1.warn(\"Received packet for track \".concat(sid, \" without active subscription\"));\n        return;\n      }\n      const internalFrame = yield descriptor.subscription.pipeline.processPacket(packet);\n      if (!internalFrame) {\n        // Not all packets have been received yet to form a complete frame\n        return;\n      }\n      // Broadcast to all downstream subscribers\n      for (const controller of descriptor.subscription.streamControllers.keys()) {\n        if (controller.desiredSize !== null && controller.desiredSize <= 0) {\n          log$1.warn(\"Cannot send frame to subscribers: readable stream is full (desiredSize is \".concat(controller.desiredSize, \"). To increase this threshold, set a higher 'options.highWaterMark' when calling .subscribe().\"));\n          continue;\n        }\n        const frame = DataTrackFrameInternal.lossyIntoFrame(internalFrame);\n        controller.enqueue(frame);\n      }\n    });\n  }\n  /** Resend all subscription updates.\n   *\n   * This must be sent after a full reconnect to ensure the SFU knows which\n   * tracks are subscribed to locally.\n   */\n  resendSubscriptionUpdates() {\n    for (const _ref11 of this.descriptors) {\n      var _ref12 = _slicedToArray(_ref11, 2);\n      const sid = _ref12[0];\n      const descriptor = _ref12[1];\n      if (descriptor.subscription.type === 'none') {\n        continue;\n      }\n      this.emit('sfuUpdateSubscription', {\n        sid,\n        subscribe: true\n      });\n    }\n  }\n  /** Called when a remote participant is disconnected so that any pending data tracks can be\n   * cancelled. */\n  handleRemoteParticipantDisconnected(remoteParticipantIdentity) {\n    var _a, _b;\n    for (const descriptor of this.descriptors.values()) {\n      if (descriptor.publisherIdentity !== remoteParticipantIdentity) {\n        continue;\n      }\n      switch (descriptor.subscription.type) {\n        case 'none':\n          break;\n        case 'pending':\n          (_b = (_a = descriptor.subscription.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackSubscribeError.disconnected());\n          break;\n        case 'active':\n          this.unSubscribeRequest(descriptor.info.sid);\n          break;\n      }\n    }\n  }\n  /** Resets the manager, ending any subscriptions, and getting it ready for the next room\n   * connection.  */\n  reset() {\n    var _a, _b;\n    for (const descriptor of this.descriptors.values()) {\n      this.emit('trackUnpublished', {\n        sid: descriptor.info.sid,\n        publisherIdentity: descriptor.publisherIdentity\n      });\n      if (descriptor.subscription.type === 'pending') {\n        (_b = (_a = descriptor.subscription.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackSubscribeError.disconnected());\n      }\n      if (descriptor.subscription.type === 'active') {\n        this.closeStreamControllers(descriptor.subscription.streamControllers, descriptor.info.sid);\n      }\n    }\n    this.descriptors.clear();\n    this.subscriptionHandles.clear();\n  }\n}class DataTrackPacketizerError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(19, message, options);\n    this.name = 'DataTrackPacketizerError';\n    this.reason = reason;\n    this.reasonName = DataTrackPacketizerReason[reason];\n  }\n  static mtuTooShort() {\n    return new DataTrackPacketizerError('MTU is too short to send frame', DataTrackPacketizerReason.MtuTooShort);\n  }\n}\nvar DataTrackPacketizerReason;\n(function (DataTrackPacketizerReason) {\n  DataTrackPacketizerReason[DataTrackPacketizerReason[\"MtuTooShort\"] = 0] = \"MtuTooShort\";\n})(DataTrackPacketizerReason || (DataTrackPacketizerReason = {}));\n/** A packetizer takes a {@link DataTrackFrameInternal} as input and generates a series\n * of {@link DataTrackPacket}s for transmission to other clients over webrtc. */\nclass DataTrackPacketizer {\n  constructor(trackHandle, mtuSizeBytes) {\n    this.sequence = WrapAroundUnsignedInt.u16(0);\n    this.frameNumber = WrapAroundUnsignedInt.u16(0);\n    this.clock = DataTrackClock.rtpStartingNow(DataTrackTimestamp.rtpRandom());\n    this.handle = trackHandle;\n    this.mtuSizeBytes = mtuSizeBytes;\n  }\n  /** @internal */\n  static computeFrameMarker(index, packetCount) {\n    if (packetCount <= 1) {\n      return FrameMarker.Single;\n    }\n    if (index === 0) {\n      return FrameMarker.Start;\n    } else if (index === packetCount - 1) {\n      return FrameMarker.Final;\n    } else {\n      return FrameMarker.Inter;\n    }\n  }\n  /** Generates a series of packets for the specified {@link DataTrackFrameInternal}.\n   *\n   * NOTE: The return value of this function is a generator, so it can be lazily ran if desired,\n   * or converted to an array with {@link Array.from}.\n   */\n  *packetize(frame, options) {\n    var _a;\n    const frameNumber = this.frameNumber.getThenIncrement();\n    const headerParams = {\n      marker: FrameMarker.Inter,\n      trackHandle: this.handle,\n      sequence: WrapAroundUnsignedInt.u16(0),\n      frameNumber,\n      timestamp: (_a = options === null || options === void 0 ? void 0 : options.now) !== null && _a !== void 0 ? _a : this.clock.now(),\n      extensions: frame.extensions\n    };\n    const headerSerializedLengthBytes = new DataTrackPacketHeader(headerParams).toBinaryLengthBytes();\n    if (headerSerializedLengthBytes >= this.mtuSizeBytes) {\n      throw DataTrackPacketizerError.mtuTooShort();\n    }\n    const maxPayloadSizeBytes = this.mtuSizeBytes - headerSerializedLengthBytes;\n    const packetCount = Math.ceil(frame.payload.byteLength / maxPayloadSizeBytes);\n    for (let index = 0, indexBytes = 0; indexBytes < frame.payload.byteLength; _ref = [index + 1, indexBytes + maxPayloadSizeBytes], index = _ref[0], indexBytes = _ref[1], _ref) {\n      var _ref;\n      const sequence = this.sequence.getThenIncrement();\n      const packetHeader = new DataTrackPacketHeader(Object.assign(Object.assign({}, headerParams), {\n        marker: DataTrackPacketizer.computeFrameMarker(index, packetCount),\n        sequence\n      }));\n      const packetPayloadLengthBytes = Math.min(\n      // All but the last packet will be max length ...\n      maxPayloadSizeBytes,\n      // ... and the last packet will be as long as it needs to be to finish out the buffer.\n      frame.payload.byteLength - indexBytes);\n      const packetPayload = new Uint8Array(frame.payload.buffer, frame.payload.byteOffset + indexBytes, packetPayloadLengthBytes);\n      yield new DataTrackPacket(packetHeader, packetPayload);\n    }\n  }\n}var DataTrackPublishErrorReason;\n(function (DataTrackPublishErrorReason) {\n  /**\n   * Local participant does not have permission to publish data tracks.\n   *\n   * Ensure the participant's token contains the `canPublishData` grant.\n   */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"NotAllowed\"] = 0] = \"NotAllowed\";\n  /** A track with the same name is already published by the local participant. */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"DuplicateName\"] = 1] = \"DuplicateName\";\n  /** Request to publish the track took long to complete. */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Timeout\"] = 2] = \"Timeout\";\n  /** No additional data tracks can be published by the local participant. */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"LimitReached\"] = 3] = \"LimitReached\";\n  /** Cannot publish data track when the room is disconnected. */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Disconnected\"] = 4] = \"Disconnected\";\n  // NOTE: this was introduced by web / there isn't a corresponding case in the rust version.\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Cancelled\"] = 5] = \"Cancelled\";\n  /** The name requested is not able to be used when creating the data track. */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"InvalidName\"] = 6] = \"InvalidName\";\n  /** There was an error publishing, but it was not something that could be sorted into a known\n   * category. */\n  DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Unknown\"] = 7] = \"Unknown\";\n})(DataTrackPublishErrorReason || (DataTrackPublishErrorReason = {}));\nclass DataTrackPublishError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(21, message, options);\n    this.name = 'DataTrackPublishError';\n    this.reason = reason;\n    this.reasonName = DataTrackPublishErrorReason[reason];\n    this.rawMessage = options === null || options === void 0 ? void 0 : options.rawMessage;\n  }\n  static notAllowed(rawMessage) {\n    return new DataTrackPublishError('Data track publishing unauthorized', DataTrackPublishErrorReason.NotAllowed, {\n      rawMessage\n    });\n  }\n  static duplicateName(rawMessage) {\n    return new DataTrackPublishError('Track name already taken', DataTrackPublishErrorReason.DuplicateName, {\n      rawMessage\n    });\n  }\n  static invalidName(rawMessage) {\n    return new DataTrackPublishError('Track name is invalid', DataTrackPublishErrorReason.InvalidName, {\n      rawMessage\n    });\n  }\n  static timeout() {\n    return new DataTrackPublishError('Publish data track timed-out. Does the LiveKit server support data tracks?', DataTrackPublishErrorReason.Timeout);\n  }\n  static limitReached(rawMessage) {\n    return new DataTrackPublishError('Data track publication limit reached', DataTrackPublishErrorReason.LimitReached, {\n      rawMessage\n    });\n  }\n  static unknown(reason, message) {\n    return new DataTrackPublishError(\"Received RequestResponse for publishDataTrack, but reason was unrecognised (\".concat(reason, \", \").concat(message, \")\"), DataTrackPublishErrorReason.Unknown);\n  }\n  static disconnected() {\n    return new DataTrackPublishError('Room disconnected', DataTrackPublishErrorReason.Disconnected);\n  }\n  // NOTE: this was introduced by web / there isn't a corresponding case in the rust version.\n  static cancelled() {\n    return new DataTrackPublishError('Publish data track cancelled by caller', DataTrackPublishErrorReason.Cancelled);\n  }\n}\nvar DataTrackPushFrameErrorReason;\n(function (DataTrackPushFrameErrorReason) {\n  /** Track is no longer published. */\n  DataTrackPushFrameErrorReason[DataTrackPushFrameErrorReason[\"TrackUnpublished\"] = 0] = \"TrackUnpublished\";\n  /** Frame was dropped. */\n  // NOTE: this should become a web specific error, the rust version of this \"dropped\" error means\n  // something different and will be renamed to \"QueueFull\".\n  DataTrackPushFrameErrorReason[DataTrackPushFrameErrorReason[\"Dropped\"] = 1] = \"Dropped\";\n})(DataTrackPushFrameErrorReason || (DataTrackPushFrameErrorReason = {}));\nclass DataTrackPushFrameError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(22, message, options);\n    this.name = 'DataTrackPushFrameError';\n    this.reason = reason;\n    this.reasonName = DataTrackPushFrameErrorReason[reason];\n  }\n  static trackUnpublished() {\n    return new DataTrackPushFrameError('Track is no longer published', DataTrackPushFrameErrorReason.TrackUnpublished);\n  }\n  static dropped(cause) {\n    return new DataTrackPushFrameError('Frame was dropped', DataTrackPushFrameErrorReason.Dropped, {\n      cause\n    });\n  }\n}\nvar DataTrackOutgoingPipelineErrorReason;\n(function (DataTrackOutgoingPipelineErrorReason) {\n  DataTrackOutgoingPipelineErrorReason[DataTrackOutgoingPipelineErrorReason[\"Packetizer\"] = 0] = \"Packetizer\";\n  DataTrackOutgoingPipelineErrorReason[DataTrackOutgoingPipelineErrorReason[\"Encryption\"] = 1] = \"Encryption\";\n})(DataTrackOutgoingPipelineErrorReason || (DataTrackOutgoingPipelineErrorReason = {}));\nclass DataTrackOutgoingPipelineError extends LivekitReasonedError {\n  constructor(message, reason, options) {\n    super(21, message, options);\n    this.name = 'DataTrackOutgoingPipelineError';\n    this.reason = reason;\n    this.reasonName = DataTrackOutgoingPipelineErrorReason[reason];\n  }\n  static packetizer(cause) {\n    return new DataTrackOutgoingPipelineError('Error packetizing frame', DataTrackOutgoingPipelineErrorReason.Packetizer, {\n      cause\n    });\n  }\n  static encryption(cause) {\n    return new DataTrackOutgoingPipelineError('Error encrypting frame', DataTrackOutgoingPipelineErrorReason.Encryption, {\n      cause\n    });\n  }\n}class LocalDataTrack {\n  /** @internal */\n  constructor(options, manager) {\n    this.trackSymbol = TrackSymbol;\n    this.isLocal = true;\n    this.typeSymbol = DataTrackSymbol;\n    /** Represents the currently active {@link DataTrackHandle} for the publication. */\n    this.handle = null;\n    this.log = livekitLogger;\n    /** Resolves once the data track has sent all pending packets the rtc data channel buffer. */\n    this.flushedFuture = new Future();\n    this.isFlushed = true;\n    this.handleManagerReset = () => {\n      var _a, _b;\n      // When the associated manager resets, mark any in flight flushes as complete\n      // There's nothing actionable a user can do to get these to complete so no\n      // error is being thrown.\n      (_b = (_a = this.flushedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n      this.manager.off('packetsFlushedChange', this.handleManagerPacketsFlushedChange);\n      this.manager.off('reset', this.handleManagerReset);\n    };\n    this.handleManagerPacketsFlushedChange = event => {\n      var _a, _b;\n      this.isFlushed = event.isFlushed;\n      if (event.isFlushed) {\n        (_b = (_a = this.flushedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n        this.flushedFuture = new Future();\n      }\n    };\n    this.options = options;\n    this.manager = manager;\n    this.log = getLogger(LoggerNames.DataTracks);\n    this.manager.on('packetsFlushedChange', this.handleManagerPacketsFlushedChange);\n    this.manager.on('reset', this.handleManagerReset);\n  }\n  /** @internal */\n  static withExplicitHandle(options, manager, handle) {\n    const track = new LocalDataTrack(options, manager);\n    track.handle = handle;\n    return track;\n  }\n  /** Metrics about the data track publication. */\n  get info() {\n    const descriptor = this.descriptor;\n    if ((descriptor === null || descriptor === void 0 ? void 0 : descriptor.type) === 'active') {\n      return descriptor.info;\n    } else {\n      return undefined;\n    }\n  }\n  /** The raw descriptor from the manager containing the internal state for this local track. */\n  get descriptor() {\n    return this.handle ? this.manager.getDescriptor(this.handle) : null;\n  }\n  /**\n   * Publish the track to the SFU. This must be done before calling {@link tryPush} for the first time.\n   * @internal\n   * */\n  publish(signal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      try {\n        this.handle = yield this.manager.publishRequest(this.options, signal);\n      } catch (err) {\n        // NOTE: Rethrow errors to break Throws<...> type boundary\n        throw err;\n      }\n    });\n  }\n  isPublished() {\n    var _a;\n    // NOTE: a track which is internally in the \"resubscribing\" state is still considered\n    // published from the public API perspective.\n    return ((_a = this.descriptor) === null || _a === void 0 ? void 0 : _a.type) === 'active' && this.descriptor.publishState !== 'unpublished';\n  }\n  /** Try pushing a frame to subscribers of the track.\n   *\n   * Pushing a frame can fail for several reasons:\n   *\n   * - The track has been unpublished by the local participant or SFU\n   * - The room is no longer connected\n   */\n  tryPush(frame) {\n    if (!this.handle) {\n      throw DataTrackPushFrameError.trackUnpublished();\n    }\n    const internalFrame = DataTrackFrameInternal.from(frame);\n    try {\n      return this.manager.tryProcessAndSend(this.handle, internalFrame);\n    } catch (err) {\n      // NOTE: wrapping in the bare try/catch like this means that the Throws<...> type doesn't\n      // propagate upwards into the public interface.\n      throw err;\n    }\n  }\n  /**\n   * When called, waits for all in flight packets to be sent before resolving.\n   *\n   * Use this to:\n   *\n   * 1. Send frames exactly in order:\n   * ```ts\n   * await track.tryPush(/* ... *\\/);\n   * await track.flush();\n   * await track.tryPush(/* ... *\\/);\n   * await track.flush();\n   * // ... etc ...\n   * ```\n   *\n   * 2. Wait for frames to all be delivered before unpublishing a local data track:\n   *\n   * ```ts\n   * await track.tryPush(/* ... *\\/);\n   * await track.tryPush(/* ... *\\/);\n   * await track.tryPush(/* ... *\\/);\n   * // ... etc ...\n   * await track.flush();\n   * await track.unpublish();\n   * ```\n   **/\n  flush() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.isFlushed) {\n        return;\n      }\n      return this.flushedFuture.promise;\n    });\n  }\n  /**\n   * Unpublish the track from the SFU. Once this is called, any further calls to {@link tryPush}\n   * will fail.\n   * */\n  unpublish() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.handle) {\n        livekitLogger.warn(\"Data track \\\"\".concat(this.options.name, \"\\\" is not published, so unpublishing has no effect.\"));\n        return;\n      }\n      try {\n        yield this.manager.unpublishRequest(this.handle);\n      } catch (err) {\n        // NOTE: Rethrow errors to break Throws<...> type boundary\n        throw err;\n      }\n    });\n  }\n}/** Processes outgoing frames into final packets for distribution to the SFU. */\nclass DataTrackOutgoingPipeline {\n  constructor(options) {\n    this.e2eeManager = options.e2eeManager;\n    this.packetizer = new DataTrackPacketizer(options.info.pubHandle, DataTrackOutgoingPipeline.TRANSPORT_MTU_BYTES);\n  }\n  updateE2eeManager(e2eeManager) {\n    this.e2eeManager = e2eeManager;\n  }\n  processFrame(frame) {\n    return __asyncGenerator(this, arguments, function* processFrame_1() {\n      const encryptedFrame = yield __await(this.encryptIfNeeded(frame));\n      try {\n        yield __await(yield* __asyncDelegator(__asyncValues(this.packetizer.packetize(encryptedFrame))));\n      } catch (error) {\n        if (error instanceof DataTrackPacketizerError) {\n          throw DataTrackOutgoingPipelineError.packetizer(error);\n        }\n        throw error;\n      }\n    });\n  }\n  encryptIfNeeded(frame) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.e2eeManager) {\n        return frame;\n      }\n      let encryptedResult;\n      try {\n        encryptedResult = yield this.e2eeManager.encryptData(frame.payload);\n      } catch (err) {\n        throw DataTrackOutgoingPipelineError.encryption(err);\n      }\n      frame.payload = encryptedResult.payload;\n      frame.extensions.e2ee = new DataTrackE2eeExtension(encryptedResult.keyIndex, encryptedResult.iv);\n      return frame;\n    });\n  }\n}\n/** Maximum transmission unit (MTU) of the transport. */\nDataTrackOutgoingPipeline.TRANSPORT_MTU_BYTES = 16000;const log = getLogger(LoggerNames.DataTracks);\nconst Descriptor = {\n  pending() {\n    return {\n      type: 'pending',\n      completionFuture: new Future()\n    };\n  },\n  active(info, e2eeManager) {\n    return {\n      type: 'active',\n      info,\n      publishState: 'published',\n      pipeline: new DataTrackOutgoingPipeline({\n        info,\n        e2eeManager\n      }),\n      unpublishingFuture: new Future()\n    };\n  }\n};\n/** How long to wait when attempting to publish before timing out. */\nconst PUBLISH_TIMEOUT_MILLISECONDS = 10000;\nclass OutgoingDataTrackManager extends eventsExports.EventEmitter {\n  constructor(options) {\n    var _a;\n    super();\n    this.handleAllocator = new DataTrackHandleAllocator();\n    this.descriptors = new Map();\n    /** Number of packets for each data track which have been emitted via the `packetAvailable` event\n     * and which have not yet been sent via the rtc data channel yet. Once this goes to 0, then\n     * all in flight packets have been delivered, and the data tracks is \"flushed\". */\n    this.inFlightPacketCounter = new Map();\n    this.e2eeManager = (_a = options === null || options === void 0 ? void 0 : options.e2eeManager) !== null && _a !== void 0 ? _a : null;\n  }\n  static withDescriptors(descriptors) {\n    const manager = new OutgoingDataTrackManager();\n    manager.descriptors = descriptors;\n    return manager;\n  }\n  /** @internal */\n  updateE2eeManager(e2eeManager) {\n    this.e2eeManager = e2eeManager;\n    // Propegate downwards to all pre-existing pipelines\n    for (const descriptor of this.descriptors.values()) {\n      if (descriptor.type === 'active') {\n        descriptor.pipeline.updateE2eeManager(e2eeManager);\n      }\n    }\n  }\n  /**\n   * Used by attached {@link LocalDataTrack} instances to query their associated descriptor info.\n   * @internal\n   */\n  getDescriptor(handle) {\n    var _a;\n    return (_a = this.descriptors.get(handle)) !== null && _a !== void 0 ? _a : null;\n  }\n  /** Used by attached {@link LocalDataTrack} instances to broadcast data track packets to other\n   * subscribers.\n   * @internal\n   */\n  tryProcessAndSend(handle, frame) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_1, _b, _c;\n      var _d;\n      const descriptor = this.getDescriptor(handle);\n      if ((descriptor === null || descriptor === void 0 ? void 0 : descriptor.type) !== 'active') {\n        throw DataTrackPushFrameError.trackUnpublished();\n      }\n      if (descriptor.publishState === 'unpublished') {\n        throw DataTrackPushFrameError.trackUnpublished();\n      }\n      if (descriptor.publishState === 'republishing') {\n        throw DataTrackPushFrameError.dropped('Data track republishing');\n      }\n      try {\n        try {\n          for (var _e = true, _f = __asyncValues(descriptor.pipeline.processFrame(frame)), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n            _c = _g.value;\n            _e = false;\n            const packet = _c;\n            const prev = (_d = this.inFlightPacketCounter.get(handle)) !== null && _d !== void 0 ? _d : 0;\n            this.inFlightPacketCounter.set(handle, prev + 1);\n            if (prev === 0) {\n              // A new packet has been sent, so there are now packets in the rtc data channel buffer for\n              // this data track frame\n              this.emit('packetsFlushedChange', {\n                handle,\n                isFlushed: false\n              });\n            }\n            this.emit('packetAvailable', {\n              handle,\n              bytes: packet.toBinary()\n            });\n          }\n        } catch (e_1_1) {\n          e_1 = {\n            error: e_1_1\n          };\n        } finally {\n          try {\n            if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n          } finally {\n            if (e_1) throw e_1.error;\n          }\n        }\n      } catch (err) {\n        // NOTE: In the rust implementation this \"dropped\" error means something different (not enough room\n        // in the track mpsc channel)\n        throw DataTrackPushFrameError.dropped(err);\n      }\n    });\n  }\n  /** The client has sent a packet over the rtc data channel. This signal is used for determining\n   * once all packets are sent and a data track has been \"flushed\".\n   *\n   * @internal */\n  handlePacketSendComplete(handle) {\n    var _a;\n    const prev = (_a = this.inFlightPacketCounter.get(handle)) !== null && _a !== void 0 ? _a : 0;\n    let counter = prev - 1;\n    if (counter < 0) {\n      log.warn(\"OutgoingDataTrackManager.handlePacketSendComplete: inFlightPacketCounter was decremented below 0 (got \".concat(this.inFlightPacketCounter, \" - resetting to 0. Were more packets send than were emitted?\"));\n      counter = 0;\n    }\n    this.inFlightPacketCounter.set(handle, counter);\n    if (counter === 0) {\n      this.emit('packetsFlushedChange', {\n        handle,\n        isFlushed: true\n      });\n    }\n  }\n  /**\n   * Client requested to publish a track.\n   *\n   * If the LiveKit server is too old and doesn't support data tracks, a\n   * {@link DataTrackPublishError#timeout} will be thrown.\n   *\n   * @internal\n   **/\n  publishRequest(options, signal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const handle = this.handleAllocator.get();\n      if (!handle) {\n        throw DataTrackPublishError.limitReached();\n      }\n      const timeoutSignal = abortSignalTimeout(PUBLISH_TIMEOUT_MILLISECONDS);\n      const combinedSignal = signal ? abortSignalAny([signal, timeoutSignal]) : timeoutSignal;\n      if (this.descriptors.has(handle)) {\n        // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n        throw new Error('Descriptor for handle already exists');\n      }\n      const descriptor = Descriptor.pending();\n      this.descriptors.set(handle, descriptor);\n      const onAbort = () => {\n        var _a, _b;\n        const existingDescriptor = this.descriptors.get(handle);\n        if (!existingDescriptor) {\n          log.warn(\"No descriptor for \".concat(handle));\n          return;\n        }\n        this.descriptors.delete(handle);\n        // Let the SFU know that the publish has been cancelled\n        this.emit('sfuUnpublishRequest', {\n          handle\n        });\n        if (existingDescriptor.type === 'pending') {\n          (_b = (_a = existingDescriptor.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, timeoutSignal.aborted ? DataTrackPublishError.timeout() :\n          // NOTE: the below cancelled case was introduced by web / there isn't a corresponding case in the rust version.\n          DataTrackPublishError.cancelled());\n        }\n      };\n      if (combinedSignal.aborted) {\n        onAbort(); // NOTE: this rejects `completionFuture`; the next line just returns the rejection\n        return descriptor.completionFuture.promise.then(() => handle /* no-op, makes typescript happy */);\n      }\n      combinedSignal.addEventListener('abort', onAbort);\n      this.emit('sfuPublishRequest', {\n        handle,\n        name: options.name,\n        usesE2ee: this.e2eeManager !== null\n      });\n      yield descriptor.completionFuture.promise;\n      combinedSignal.removeEventListener('abort', onAbort);\n      this.emit('trackPublished', {\n        track: LocalDataTrack.withExplicitHandle(options, this, handle)\n      });\n      return handle;\n    });\n  }\n  /**\n   * Get information about all currently published tracks.\n   * @internal\n   **/\n  queryPublished() {\n    const descriptorInfos = Array.from(this.descriptors.values()).filter(descriptor => descriptor.type === 'active').map(descriptor => descriptor.info);\n    return descriptorInfos;\n  }\n  /**\n   * Client request to unpublish a track.\n   * @internal\n   **/\n  unpublishRequest(handle) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const descriptor = this.descriptors.get(handle);\n      if (!descriptor) {\n        log.warn(\"No descriptor for \".concat(handle));\n        return;\n      }\n      if (descriptor.type !== 'active') {\n        log.warn(\"Track \".concat(handle, \" not active\"));\n        return;\n      }\n      this.emit('sfuUnpublishRequest', {\n        handle\n      });\n      yield descriptor.unpublishingFuture.promise;\n      this.inFlightPacketCounter.delete(handle);\n      this.emit('trackUnpublished', {\n        sid: descriptor.info.sid\n      });\n    });\n  }\n  /**\n   * SFU responded to a request to publish a data track.\n   * @internal\n   **/\n  receivedSfuPublishResponse(handle, result) {\n    var _a, _b, _c, _d;\n    const descriptor = this.descriptors.get(handle);\n    if (!descriptor) {\n      log.warn(\"No descriptor for \".concat(handle));\n      return;\n    }\n    this.descriptors.delete(handle);\n    switch (descriptor.type) {\n      case 'pending':\n        {\n          if (result.type === 'ok') {\n            const info = result.data;\n            const e2eeManager = info.usesE2ee ? this.e2eeManager : null;\n            this.descriptors.set(info.pubHandle, Descriptor.active(info, e2eeManager));\n            (_b = (_a = descriptor.completionFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n          } else {\n            (_d = (_c = descriptor.completionFuture).reject) === null || _d === void 0 ? void 0 : _d.call(_c, result.error);\n          }\n          return;\n        }\n      case 'active':\n        {\n          if (descriptor.publishState !== 'republishing') {\n            log.warn(\"Track \".concat(handle, \" already active\"));\n            return;\n          }\n          if (result.type === 'error') {\n            log.warn(\"Republish failed for track \".concat(handle));\n            return;\n          }\n          log.debug(\"Track \".concat(handle, \" republished\"));\n          descriptor.info.sid = result.data.sid;\n          descriptor.publishState = 'published';\n          this.descriptors.set(descriptor.info.pubHandle, descriptor);\n        }\n    }\n  }\n  /**\n   * SFU notification that a track has been unpublished.\n   * @internal\n   **/\n  receivedSfuUnpublishResponse(handle) {\n    var _a, _b;\n    const descriptor = this.descriptors.get(handle);\n    if (!descriptor) {\n      log.warn(\"No descriptor for \".concat(handle));\n      return;\n    }\n    this.descriptors.delete(handle);\n    if (descriptor.type !== 'active') {\n      log.warn(\"Track \".concat(handle, \" not active\"));\n      return;\n    }\n    descriptor.publishState = 'unpublished';\n    (_b = (_a = descriptor.unpublishingFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n  }\n  /** Republish all tracks.\n   *\n   * This must be sent after a full reconnect in order for existing publications\n   * to be recognized by the SFU. Each republished track will be assigned a new SID.\n   * @internal\n   */\n  sfuWillRepublishTracks() {\n    var _a, _b;\n    for (const _ref of this.descriptors.entries()) {\n      var _ref2 = _slicedToArray(_ref, 2);\n      const handle = _ref2[0];\n      const descriptor = _ref2[1];\n      switch (descriptor.type) {\n        case 'pending':\n          // TODO: support republish for pending publications\n          this.descriptors.delete(handle);\n          (_b = (_a = descriptor.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackPublishError.disconnected());\n          break;\n        case 'active':\n          descriptor.publishState = 'republishing';\n          this.emit('sfuPublishRequest', {\n            handle: descriptor.info.pubHandle,\n            name: descriptor.info.name,\n            usesE2ee: descriptor.info.usesE2ee\n          });\n      }\n    }\n  }\n  /**\n   * Reset's the state of the manager and all associated tracks. Run on room disconnect to get\n   * the manager ready for the next room connection.\n   * @internal\n   **/\n  reset() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d;\n      this.handleAllocator.reset();\n      for (const descriptor of this.descriptors.values()) {\n        switch (descriptor.type) {\n          case 'pending':\n            (_b = (_a = descriptor.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackPublishError.disconnected());\n            break;\n          case 'active':\n            // Abandon any unpublishing descriptors that were in flight and assume they will get\n            // cleaned up automatically with the connection shutdown.\n            (_d = (_c = descriptor.unpublishingFuture).resolve) === null || _d === void 0 ? void 0 : _d.call(_c);\n            yield this.unpublishRequest(descriptor.info.pubHandle);\n            break;\n        }\n      }\n      this.descriptors.clear();\n      this.inFlightPacketCounter.clear();\n      this.emit('reset');\n    });\n  }\n}/**\n * Specialized error handling for RPC methods.\n *\n * Instances of this type, when thrown in a method handler, will have their `message`\n * serialized and sent across the wire. The sender will receive an equivalent error on the other side.\n *\n * Built-in types are included but developers may use any string, with a max length of 256 bytes.\n */\nclass RpcError extends Error {\n  /**\n   * Creates an error object with the given code and message, plus an optional data payload.\n   *\n   * If thrown in an RPC method handler, the error will be sent back to the caller.\n   *\n   * Error codes 1001-1999 are reserved for built-in errors (see RpcError.ErrorCode for their meanings).\n   */\n  constructor(code, message, data, options) {\n    super(message);\n    this.code = code;\n    this.message = truncateBytes(message, RpcError.MAX_MESSAGE_BYTES);\n    this.data = data ? truncateBytes(data, RpcError.MAX_DATA_BYTES) : undefined;\n    if (typeof (options === null || options === void 0 ? void 0 : options.cause) !== 'undefined') {\n      this.cause = options === null || options === void 0 ? void 0 : options.cause;\n    }\n  }\n  /**\n   * @internal\n   */\n  static fromProto(proto) {\n    return new RpcError(proto.code, proto.message, proto.data);\n  }\n  /**\n   * @internal\n   */\n  toProto() {\n    return new RpcError$1({\n      code: this.code,\n      message: this.message,\n      data: this.data\n    });\n  }\n  /**\n   * Creates an error object from the code, with an auto-populated message.\n   *\n   * @internal\n   */\n  static builtIn(key, data, options) {\n    return new RpcError(RpcError.ErrorCode[key], RpcError.ErrorMessage[key], data, options);\n  }\n}\nRpcError.MAX_MESSAGE_BYTES = 256;\nRpcError.MAX_DATA_BYTES = 15360; // 15 KB\nRpcError.ErrorCode = {\n  APPLICATION_ERROR: 1500,\n  CONNECTION_TIMEOUT: 1501,\n  RESPONSE_TIMEOUT: 1502,\n  RECIPIENT_DISCONNECTED: 1503,\n  RESPONSE_PAYLOAD_TOO_LARGE: 1504,\n  SEND_FAILED: 1505,\n  UNSUPPORTED_METHOD: 1400,\n  RECIPIENT_NOT_FOUND: 1401,\n  REQUEST_PAYLOAD_TOO_LARGE: 1402,\n  UNSUPPORTED_SERVER: 1403,\n  UNSUPPORTED_VERSION: 1404\n};\n/**\n * @internal\n */\nRpcError.ErrorMessage = {\n  APPLICATION_ERROR: 'Application error in method handler',\n  CONNECTION_TIMEOUT: 'Connection timeout',\n  RESPONSE_TIMEOUT: 'Response timeout',\n  RECIPIENT_DISCONNECTED: 'Recipient disconnected',\n  RESPONSE_PAYLOAD_TOO_LARGE: 'Response payload too large',\n  SEND_FAILED: 'Failed to send',\n  UNSUPPORTED_METHOD: 'Method not supported at destination',\n  RECIPIENT_NOT_FOUND: 'Recipient not found',\n  REQUEST_PAYLOAD_TOO_LARGE: 'Request payload too large',\n  UNSUPPORTED_SERVER: 'RPC not supported by server',\n  UNSUPPORTED_VERSION: 'Unsupported RPC version'\n};\n/*\n * Maximum payload size for RPC requests and responses for clients with a clientProtocol of less\n * than CLIENT_PROTOCOL_DATA_STREAM_RPC.\n *\n * If a payload exceeds this size and the remote client does not support compression,\n * the RPC call will fail with a REQUEST_PAYLOAD_TOO_LARGE(1402) or RESPONSE_PAYLOAD_TOO_LARGE(1504) error.\n */\nconst MAX_V1_PAYLOAD_BYTES = 15360; // 15 KB\n/**\n * Topic used for v2 RPC request data streams.\n * @internal\n */\nconst RPC_REQUEST_DATA_STREAM_TOPIC = 'lk.rpc_request';\n/**\n * Topic used for v2 RPC response data streams.\n * @internal\n */\nconst RPC_RESPONSE_DATA_STREAM_TOPIC = 'lk.rpc_response';\n/** @internal */\nvar RpcRequestAttrs;\n(function (RpcRequestAttrs) {\n  RpcRequestAttrs[\"RPC_REQUEST_ID\"] = \"lk.rpc_request_id\";\n  RpcRequestAttrs[\"RPC_REQUEST_METHOD\"] = \"lk.rpc_request_method\";\n  RpcRequestAttrs[\"RPC_REQUEST_RESPONSE_TIMEOUT_MS\"] = \"lk.rpc_request_response_timeout_ms\";\n  RpcRequestAttrs[\"RPC_REQUEST_VERSION\"] = \"lk.rpc_request_version\";\n})(RpcRequestAttrs || (RpcRequestAttrs = {}));\n/** Initial version of rpc which uses RpcRequest / RpcResponse messages.\n * @internal\n **/\nconst RPC_VERSION_V1 = 1;\n/** Rpc version backed by data streams instead of RpcRequest / RpcResponse.\n * @internal\n **/\nconst RPC_VERSION_V2 = 2;\n/**\n * @internal\n */\nfunction byteLength(str) {\n  const encoder = new TextEncoder();\n  return encoder.encode(str).length;\n}\n/**\n * @internal\n */\nfunction truncateBytes(str, maxBytes) {\n  if (byteLength(str) <= maxBytes) {\n    return str;\n  }\n  let low = 0;\n  let high = str.length;\n  const encoder = new TextEncoder();\n  while (low < high) {\n    const mid = Math.floor((low + high + 1) / 2);\n    if (encoder.encode(str.slice(0, mid)).length <= maxBytes) {\n      low = mid;\n    } else {\n      high = mid - 1;\n    }\n  }\n  return str.slice(0, low);\n}/**\n * Manages the client (caller) side of RPC: sending requests, tracking pending\n * ack/response state, and handling incoming ack/response packets.\n * @internal\n */\nclass RpcClientManager extends eventsExports.EventEmitter {\n  constructor(log, outgoingDataStreamManager, getRemoteParticipantClientProtocol, getServerVersion) {\n    super();\n    this.pendingAcks = new Map();\n    this.pendingResponses = new Map();\n    this.log = log;\n    this.outgoingDataStreamManager = outgoingDataStreamManager;\n    this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol;\n    this.getServerVersion = getServerVersion;\n  }\n  performRpc(_a) {\n    return __awaiter(this, arguments, void 0, function (_ref) {\n      var _this = this;\n      let destinationIdentity = _ref.destinationIdentity,\n        method = _ref.method,\n        payload = _ref.payload,\n        _ref$responseTimeout = _ref.responseTimeout,\n        responseTimeoutMs = _ref$responseTimeout === void 0 ? 15000 : _ref$responseTimeout;\n      return function* () {\n        const maxRoundTripLatencyMs = 7000;\n        const minEffectiveTimeoutMs = maxRoundTripLatencyMs + 1000;\n        const remoteClientProtocol = _this.getRemoteParticipantClientProtocol(destinationIdentity);\n        const payloadBytes = byteLength(payload);\n        // Only enforce the legacy size limit when on rpc v1\n        if (payloadBytes > MAX_V1_PAYLOAD_BYTES && remoteClientProtocol < CLIENT_PROTOCOL_DATA_STREAM_RPC) {\n          throw RpcError.builtIn('REQUEST_PAYLOAD_TOO_LARGE');\n        }\n        const serverVersion = _this.getServerVersion();\n        if (serverVersion && compareVersions(serverVersion, '1.8.0') < 0) {\n          throw RpcError.builtIn('UNSUPPORTED_SERVER');\n        }\n        const effectiveTimeoutMs = Math.max(responseTimeoutMs, minEffectiveTimeoutMs);\n        const id = crypto.randomUUID();\n        const completionFuture = new Future();\n        let responseTimeoutId = null;\n        const ackTimeoutId = setTimeout(() => {\n          var _a;\n          _this.pendingAcks.delete(id);\n          (_a = completionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(completionFuture, RpcError.builtIn('CONNECTION_TIMEOUT'));\n          _this.pendingResponses.delete(id);\n          if (responseTimeoutId !== null) {\n            clearTimeout(responseTimeoutId);\n          }\n        }, maxRoundTripLatencyMs);\n        _this.pendingAcks.set(id, {\n          resolve: () => {\n            clearTimeout(ackTimeoutId);\n          },\n          participantIdentity: destinationIdentity\n        });\n        _this.pendingResponses.set(id, {\n          completionFuture,\n          participantIdentity: destinationIdentity\n        });\n        yield _this.publishRpcRequest(destinationIdentity, id, method, payload, effectiveTimeoutMs, remoteClientProtocol);\n        responseTimeoutId = setTimeout(() => {\n          var _a;\n          _this.pendingResponses.delete(id);\n          (_a = completionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(completionFuture, RpcError.builtIn('RESPONSE_TIMEOUT'));\n        }, responseTimeoutMs);\n        const completionPromise = completionFuture.promise.finally(() => {\n          clearTimeout(responseTimeoutId);\n          if (_this.pendingAcks.has(id)) {\n            _this.log.warn('RPC response received before ack', id);\n            _this.pendingAcks.delete(id);\n            clearTimeout(ackTimeoutId);\n          }\n        });\n        return [id, completionPromise];\n      }();\n    });\n  }\n  publishRpcRequest(destinationIdentity, requestId, method, payload, responseTimeout, remoteClientProtocol) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (remoteClientProtocol >= CLIENT_PROTOCOL_DATA_STREAM_RPC) {\n        // Send payload as a data stream - a \"version 2\" rpc request.\n        const writer = yield this.outgoingDataStreamManager.streamText({\n          topic: RPC_REQUEST_DATA_STREAM_TOPIC,\n          destinationIdentities: [destinationIdentity],\n          attributes: {\n            [RpcRequestAttrs.RPC_REQUEST_ID]: requestId,\n            [RpcRequestAttrs.RPC_REQUEST_METHOD]: method,\n            [RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS]: \"\".concat(responseTimeout),\n            [RpcRequestAttrs.RPC_REQUEST_VERSION]: \"\".concat(RPC_VERSION_V2)\n          }\n        });\n        yield writer.write(payload);\n        yield writer.close();\n        return;\n      }\n      // Fallback to sending a literal RpcRequest - a \"version 1\" rpc request.\n      this.emit('sendDataPacket', {\n        packet: new DataPacket({\n          destinationIdentities: [destinationIdentity],\n          kind: DataPacket_Kind.RELIABLE,\n          value: {\n            case: 'rpcRequest',\n            value: new RpcRequest({\n              id: requestId,\n              method,\n              payload,\n              responseTimeoutMs: responseTimeout,\n              version: RPC_VERSION_V1\n            })\n          }\n        })\n      });\n    });\n  }\n  /**\n   * Handle an incoming data stream containing an RPC response payload.\n   * @internal\n   */\n  handleIncomingDataStream(reader, senderIdentity, attributes) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const associatedRequestId = attributes[RpcRequestAttrs.RPC_REQUEST_ID];\n      if (!associatedRequestId) {\n        this.log.warn(\"RPC data stream malformed: \".concat(RpcRequestAttrs.RPC_REQUEST_ID, \" not set.\"));\n        // NOTE: no response can be sent here, because there's no request id so associate\n        // so logging is the best we can do here.\n        return;\n      }\n      const pending = this.pendingResponses.get(associatedRequestId);\n      if (pending && pending.participantIdentity !== senderIdentity) {\n        this.log.warn(\"RPC response stream for \".concat(associatedRequestId, \" arrived from unexpected sender \").concat(senderIdentity, \", expected \").concat(pending.participantIdentity, \". Ignoring.\"));\n        return;\n      }\n      let payload;\n      try {\n        payload = yield reader.readAll();\n      } catch (e) {\n        this.log.warn(\"Error reading RPC response payload: \".concat(e));\n        this.handleIncomingRpcResponseFailure(associatedRequestId, RpcError.builtIn('APPLICATION_ERROR', 'Error reading RPC response payload', {\n          cause: e\n        }));\n        return;\n      }\n      this.handleIncomingRpcResponseSuccess(associatedRequestId, payload);\n    });\n  }\n  /** @internal */\n  handleIncomingRpcResponseSuccess(requestId, payload) {\n    var _a, _b;\n    const handler = this.pendingResponses.get(requestId);\n    if (handler) {\n      (_b = (_a = handler.completionFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a, payload);\n      this.pendingResponses.delete(requestId);\n    } else {\n      this.log.error('Response received for unexpected RPC request', requestId);\n    }\n  }\n  /** @internal */\n  handleIncomingRpcResponseFailure(requestId, error) {\n    var _a, _b;\n    const handler = this.pendingResponses.get(requestId);\n    if (handler) {\n      (_b = (_a = handler.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, error);\n      this.pendingResponses.delete(requestId);\n    } else {\n      this.log.error('Response received for unexpected RPC request', requestId);\n    }\n  }\n  /** @internal */\n  handleIncomingRpcAck(requestId) {\n    const handler = this.pendingAcks.get(requestId);\n    if (handler) {\n      handler.resolve();\n      this.pendingAcks.delete(requestId);\n    } else {\n      this.log.error(\"Ack received for unexpected RPC request: \".concat(requestId));\n    }\n  }\n  /** @internal */\n  handleParticipantDisconnected(participantIdentity) {\n    var _a;\n    for (const _ref2 of this.pendingAcks) {\n      var _ref3 = _slicedToArray(_ref2, 2);\n      const id = _ref3[0];\n      const pendingIdentity = _ref3[1].participantIdentity;\n      if (pendingIdentity === participantIdentity) {\n        this.pendingAcks.delete(id);\n      }\n    }\n    for (const _ref4 of this.pendingResponses) {\n      var _ref5 = _slicedToArray(_ref4, 2);\n      const id = _ref5[0];\n      var _ref5$ = _ref5[1];\n      const pendingIdentity = _ref5$.participantIdentity;\n      const completionFuture = _ref5$.completionFuture;\n      if (pendingIdentity === participantIdentity) {\n        (_a = completionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(completionFuture, RpcError.builtIn('RECIPIENT_DISCONNECTED'));\n        this.pendingResponses.delete(id);\n      }\n    }\n  }\n}/**\n * Manages the server (handler) side of RPC: processing incoming requests,\n * managing registered method handlers, and sending responses.\n * @internal\n */\nclass RpcServerManager extends eventsExports.EventEmitter {\n  constructor(log, outgoingDataStreamManager, getRemoteParticipantClientProtocol) {\n    super();\n    this.rpcHandlers = new Map();\n    this.log = log;\n    this.outgoingDataStreamManager = outgoingDataStreamManager;\n    this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol;\n  }\n  registerRpcMethod(method, handler) {\n    if (this.rpcHandlers.has(method)) {\n      throw Error(\"RPC handler already registered for method \".concat(method, \", unregisterRpcMethod before trying to register again\"));\n    }\n    this.rpcHandlers.set(method, handler);\n  }\n  unregisterRpcMethod(method) {\n    this.rpcHandlers.delete(method);\n  }\n  /**\n   * Handle an incoming RPCRequest message containing a payload.\n   * This handles \"version 1\" of rpc requests.\n   * @internal\n   */\n  handleIncomingRpcRequest(callerIdentity, rpcRequest) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      this.publishRpcAck(callerIdentity, rpcRequest.id);\n      if (rpcRequest.version !== 1) {\n        this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, RpcError.builtIn('UNSUPPORTED_VERSION'));\n        return;\n      }\n      const handler = this.rpcHandlers.get(rpcRequest.method);\n      if (!handler) {\n        this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, RpcError.builtIn('UNSUPPORTED_METHOD'));\n        return;\n      }\n      let response;\n      try {\n        response = yield handler({\n          requestId: rpcRequest.id,\n          callerIdentity,\n          payload: rpcRequest.payload,\n          responseTimeout: rpcRequest.responseTimeoutMs\n        });\n      } catch (error) {\n        let responseError;\n        if (error instanceof RpcError) {\n          responseError = error;\n        } else {\n          this.log.warn(\"Uncaught error returned by RPC handler for \".concat(rpcRequest.method, \". Returning APPLICATION_ERROR instead.\"), error);\n          responseError = RpcError.builtIn('APPLICATION_ERROR', \"Uncaught error: \".concat((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error), {\n            cause: error\n          });\n        }\n        this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, responseError);\n        return;\n      }\n      yield this.publishRpcResponse(callerIdentity, rpcRequest.id, response !== null && response !== void 0 ? response : '');\n    });\n  }\n  /**\n   * Handle an incoming data stream containing a RPC request payload.\n   * This handles \"version 2\" of rpc requests.\n   * @internal\n   */\n  handleIncomingDataStream(reader, callerIdentity, dataStreamAttrs) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const requestId = dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_ID];\n      const method = dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_METHOD];\n      const responseTimeout = parseInt(dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS], 10);\n      const version = parseInt(dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_VERSION], 10);\n      if (!requestId || !method || Number.isNaN(responseTimeout) || Number.isNaN(version)) {\n        this.log.warn(\"RPC data stream malformed: \".concat(RpcRequestAttrs.RPC_REQUEST_ID, \" / \").concat(RpcRequestAttrs.RPC_REQUEST_METHOD, \" / \").concat(RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS, \" / \").concat(RpcRequestAttrs.RPC_REQUEST_VERSION, \" not set.\"));\n        this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('APPLICATION_ERROR', 'RPC data stream malformed'));\n        return;\n      }\n      this.publishRpcAck(callerIdentity, requestId);\n      if (version !== RPC_VERSION_V2) {\n        this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_VERSION'));\n        return;\n      }\n      let payload;\n      try {\n        payload = yield reader.readAll();\n      } catch (e) {\n        this.log.warn(\"Error reading RPC request payload: \".concat(e));\n        this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('APPLICATION_ERROR', 'Error reading RPC request payload', {\n          cause: e\n        }));\n        return;\n      }\n      const handler = this.rpcHandlers.get(method);\n      if (!handler) {\n        this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_METHOD'));\n        return;\n      }\n      let response;\n      try {\n        response = yield handler({\n          requestId,\n          callerIdentity,\n          payload,\n          responseTimeout\n        });\n      } catch (error) {\n        let responseError;\n        if (error instanceof RpcError) {\n          responseError = error;\n        } else {\n          this.log.warn(\"Uncaught error returned by RPC handler for \".concat(method, \". Returning APPLICATION_ERROR instead.\"), error);\n          responseError = RpcError.builtIn('APPLICATION_ERROR');\n        }\n        this.publishRpcResponsePacket(callerIdentity, requestId, null, responseError);\n        return;\n      }\n      yield this.publishRpcResponse(callerIdentity, requestId, response !== null && response !== void 0 ? response : '');\n    });\n  }\n  publishRpcAck(destinationIdentity, requestId) {\n    this.emit('sendDataPacket', {\n      packet: new DataPacket({\n        destinationIdentities: [destinationIdentity],\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'rpcAck',\n          value: new RpcAck({\n            requestId\n          })\n        }\n      })\n    });\n  }\n  publishRpcResponsePacket(destinationIdentity, requestId, payload, error) {\n    this.emit('sendDataPacket', {\n      packet: new DataPacket({\n        destinationIdentities: [destinationIdentity],\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'rpcResponse',\n          value: new RpcResponse({\n            requestId,\n            value: error ? {\n              case: 'error',\n              value: error.toProto()\n            } : {\n              case: 'payload',\n              value: payload !== null && payload !== void 0 ? payload : ''\n            }\n          })\n        }\n      })\n    });\n  }\n  /**\n   * Send a successful RPC response payload, choosing the transport based on\n   * the caller's client protocol version.\n   */\n  publishRpcResponse(destinationIdentity, requestId, payload) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const callerClientProtocol = this.getRemoteParticipantClientProtocol(destinationIdentity);\n      if (callerClientProtocol >= CLIENT_PROTOCOL_DATA_STREAM_RPC) {\n        // Send response as a data stream\n        const writer = yield this.outgoingDataStreamManager.streamText({\n          topic: RPC_RESPONSE_DATA_STREAM_TOPIC,\n          destinationIdentities: [destinationIdentity],\n          attributes: {\n            [RpcRequestAttrs.RPC_REQUEST_ID]: requestId\n          }\n        });\n        yield writer.write(payload);\n        yield writer.close();\n        return;\n      }\n      // Legacy client: enforce size limit and send uncompressed payload inline\n      const responseBytes = byteLength(payload);\n      if (responseBytes > MAX_V1_PAYLOAD_BYTES) {\n        this.log.warn(\"RPC Response payload too large for request \".concat(requestId, \". To send larger responses, consider updating the sending client.\"));\n        this.publishRpcResponsePacket(destinationIdentity, requestId, null, RpcError.builtIn('RESPONSE_PAYLOAD_TOO_LARGE'));\n        return;\n      }\n      this.publishRpcResponsePacket(destinationIdentity, requestId, payload, null);\n    });\n  }\n}class RemoteAudioTrack extends RemoteTrack {\n  constructor(mediaTrack, sid, receiver, audioContext, audioOutput, loggerOptions) {\n    super(mediaTrack, sid, Track.Kind.Audio, receiver, loggerOptions);\n    this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver) {\n        this._currentBitrate = 0;\n        return;\n      }\n      const stats = yield this.getReceiverStats();\n      if (stats && this.prevStats && this.receiver) {\n        this._currentBitrate = computeBitrate(stats, this.prevStats);\n      }\n      this.prevStats = stats;\n    });\n    this.audioContext = audioContext;\n    this.webAudioPluginNodes = [];\n    if (audioOutput) {\n      this.sinkId = audioOutput.deviceId;\n    }\n  }\n  /**\n   * sets the volume for all attached audio elements\n   */\n  setVolume(volume) {\n    var _a;\n    for (const el of this.attachedElements) {\n      if (this.audioContext) {\n        (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.gain.setTargetAtTime(volume, 0, 0.1);\n      } else {\n        el.volume = volume;\n      }\n    }\n    if (isReactNative()) {\n      // @ts-ignore\n      this._mediaStreamTrack._setVolume(volume);\n    }\n    this.elementVolume = volume;\n  }\n  /**\n   * gets the volume of attached audio elements (loudest)\n   */\n  getVolume() {\n    if (this.elementVolume) {\n      return this.elementVolume;\n    }\n    if (isReactNative()) {\n      // RN volume value defaults to 1.0 if hasn't been changed.\n      return 1.0;\n    }\n    let highestVolume = 0;\n    this.attachedElements.forEach(element => {\n      if (element.volume > highestVolume) {\n        highestVolume = element.volume;\n      }\n    });\n    return highestVolume;\n  }\n  /**\n   * calls setSinkId on all attached elements, if supported\n   * @param deviceId audio output device\n   */\n  setSinkId(deviceId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.sinkId = deviceId;\n      yield Promise.all(this.attachedElements.map(elm => {\n        if (!supportsSetSinkId(elm)) {\n          return;\n        }\n        /* @ts-ignore */\n        return elm.setSinkId(deviceId);\n      }));\n    });\n  }\n  attach(element) {\n    const needsNewWebAudioConnection = this.attachedElements.length === 0;\n    if (!element) {\n      element = super.attach();\n    } else {\n      super.attach(element);\n    }\n    if (this.sinkId && supportsSetSinkId(element)) {\n      element.setSinkId(this.sinkId).catch(e => {\n        this.log.error('Failed to set sink id on remote audio track', e, this.logContext);\n      });\n    }\n    if (this.audioContext && needsNewWebAudioConnection) {\n      this.log.debug('using audio context mapping', this.logContext);\n      this.connectWebAudio(this.audioContext, element);\n      element.volume = 0;\n      element.muted = true;\n    }\n    if (this.elementVolume) {\n      // make sure volume setting is being applied to the newly attached element\n      this.setVolume(this.elementVolume);\n    }\n    return element;\n  }\n  detach(element) {\n    let detached;\n    if (!element) {\n      detached = super.detach();\n      this.disconnectWebAudio();\n    } else {\n      detached = super.detach(element);\n      // if there are still any attached elements after detaching, connect webaudio to the first element that's left\n      // disconnect webaudio otherwise\n      if (this.audioContext) {\n        if (this.attachedElements.length > 0) {\n          this.connectWebAudio(this.audioContext, this.attachedElements[0]);\n        } else {\n          this.disconnectWebAudio();\n        }\n      }\n    }\n    return detached;\n  }\n  /**\n   * @internal\n   * @experimental\n   */\n  setAudioContext(audioContext) {\n    this.audioContext = audioContext;\n    if (audioContext && this.attachedElements.length > 0) {\n      this.connectWebAudio(audioContext, this.attachedElements[0]);\n    } else if (!audioContext) {\n      this.disconnectWebAudio();\n    }\n  }\n  /**\n   * @internal\n   * @experimental\n   * @param {AudioNode[]} nodes - An array of WebAudio nodes. These nodes should not be connected to each other when passed, as the sdk will take care of connecting them in the order of the array.\n   */\n  setWebAudioPlugins(nodes) {\n    this.webAudioPluginNodes = nodes;\n    if (this.attachedElements.length > 0 && this.audioContext) {\n      this.connectWebAudio(this.audioContext, this.attachedElements[0]);\n    }\n  }\n  connectWebAudio(context, element) {\n    this.disconnectWebAudio();\n    // @ts-ignore attached elements always have a srcObject set\n    this.sourceNode = context.createMediaStreamSource(element.srcObject);\n    let lastNode = this.sourceNode;\n    this.webAudioPluginNodes.forEach(node => {\n      lastNode.connect(node);\n      lastNode = node;\n    });\n    this.gainNode = context.createGain();\n    lastNode.connect(this.gainNode);\n    this.gainNode.connect(context.destination);\n    if (this.elementVolume) {\n      this.gainNode.gain.setTargetAtTime(this.elementVolume, 0, 0.1);\n    }\n    // try to resume the context if it isn't running already\n    if (context.state !== 'running') {\n      context.resume().then(() => {\n        if (context.state !== 'running') {\n          this.emit(TrackEvent.AudioPlaybackFailed, new Error(\"Audio Context couldn't be started automatically\"));\n        }\n      }).catch(e => {\n        this.emit(TrackEvent.AudioPlaybackFailed, e);\n      });\n    }\n  }\n  disconnectWebAudio() {\n    var _a, _b;\n    (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.disconnect();\n    (_b = this.sourceNode) === null || _b === void 0 ? void 0 : _b.disconnect();\n    this.gainNode = undefined;\n    this.sourceNode = undefined;\n  }\n  getReceiverStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver || !this.receiver.getStats) {\n        return;\n      }\n      const stats = yield this.receiver.getStats();\n      let receiverStats;\n      stats.forEach(v => {\n        if (v.type === 'inbound-rtp') {\n          receiverStats = {\n            type: 'audio',\n            streamId: v.id,\n            timestamp: v.timestamp,\n            jitter: v.jitter,\n            bytesReceived: v.bytesReceived,\n            concealedSamples: v.concealedSamples,\n            concealmentEvents: v.concealmentEvents,\n            silentConcealedSamples: v.silentConcealedSamples,\n            silentConcealmentEvents: v.silentConcealmentEvents,\n            totalAudioEnergy: v.totalAudioEnergy,\n            totalSamplesDuration: v.totalSamplesDuration\n          };\n        }\n      });\n      return receiverStats;\n    });\n  }\n}class TrackPublication extends eventsExports.EventEmitter {\n  constructor(kind, id, name, loggerOptions) {\n    var _a;\n    super();\n    this.metadataMuted = false;\n    this.encryption = Encryption_Type.NONE;\n    this.log = livekitLogger;\n    this.handleMuted = () => {\n      this.emit(TrackEvent.Muted);\n    };\n    this.handleUnmuted = () => {\n      this.emit(TrackEvent.Unmuted);\n    };\n    this.log = getLogger((_a = loggerOptions === null || loggerOptions === void 0 ? void 0 : loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Publication);\n    this.loggerContextCb = this.loggerContextCb;\n    this.setMaxListeners(100);\n    this.kind = kind;\n    this.trackSid = id;\n    this.trackName = name;\n    this.source = Track.Source.Unknown;\n  }\n  /** @internal */\n  setTrack(track) {\n    if (this.track) {\n      this.track.off(TrackEvent.Muted, this.handleMuted);\n      this.track.off(TrackEvent.Unmuted, this.handleUnmuted);\n    }\n    this.track = track;\n    if (track) {\n      // forward events\n      track.on(TrackEvent.Muted, this.handleMuted);\n      track.on(TrackEvent.Unmuted, this.handleUnmuted);\n    }\n  }\n  get logContext() {\n    var _a;\n    return Object.assign(Object.assign({}, (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)), getLogContextFromTrack(this));\n  }\n  get isMuted() {\n    return this.metadataMuted;\n  }\n  get isEnabled() {\n    return true;\n  }\n  get isSubscribed() {\n    return this.track !== undefined;\n  }\n  get isEncrypted() {\n    return this.encryption !== Encryption_Type.NONE;\n  }\n  /**\n   * an [AudioTrack] if this publication holds an audio track\n   */\n  get audioTrack() {\n    if (isAudioTrack(this.track)) {\n      return this.track;\n    }\n  }\n  /**\n   * an [VideoTrack] if this publication holds a video track\n   */\n  get videoTrack() {\n    if (isVideoTrack(this.track)) {\n      return this.track;\n    }\n  }\n  /** @internal */\n  updateInfo(info) {\n    this.trackSid = info.sid;\n    this.trackName = info.name;\n    this.source = Track.sourceFromProto(info.source);\n    this.mimeType = info.mimeType;\n    if (this.kind === Track.Kind.Video && info.width > 0) {\n      this.dimensions = {\n        width: info.width,\n        height: info.height\n      };\n      this.simulcasted = info.simulcast;\n    }\n    this.encryption = info.encryption;\n    this.trackInfo = info;\n    this.log.debug('update publication info', Object.assign(Object.assign({}, this.logContext), {\n      info\n    }));\n  }\n}\n(function (TrackPublication) {\n  (function (SubscriptionStatus) {\n    SubscriptionStatus[\"Desired\"] = \"desired\";\n    SubscriptionStatus[\"Subscribed\"] = \"subscribed\";\n    SubscriptionStatus[\"Unsubscribed\"] = \"unsubscribed\";\n  })(TrackPublication.SubscriptionStatus || (TrackPublication.SubscriptionStatus = {}));\n  (function (PermissionStatus) {\n    PermissionStatus[\"Allowed\"] = \"allowed\";\n    PermissionStatus[\"NotAllowed\"] = \"not_allowed\";\n  })(TrackPublication.PermissionStatus || (TrackPublication.PermissionStatus = {}));\n})(TrackPublication || (TrackPublication = {}));class LocalTrackPublication extends TrackPublication {\n  get isUpstreamPaused() {\n    var _a;\n    return (_a = this.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused;\n  }\n  constructor(kind, ti, track, loggerOptions) {\n    super(kind, ti.sid, ti.name, loggerOptions);\n    this.track = undefined;\n    this.handleTrackEnded = () => {\n      this.emit(TrackEvent.Ended);\n    };\n    this.handleCpuConstrained = () => {\n      if (this.track && isVideoTrack(this.track)) {\n        this.emit(TrackEvent.CpuConstrained, this.track);\n      }\n    };\n    this.updateInfo(ti);\n    this.setTrack(track);\n  }\n  setTrack(track) {\n    if (this.track) {\n      this.track.off(TrackEvent.Ended, this.handleTrackEnded);\n      this.track.off(TrackEvent.CpuConstrained, this.handleCpuConstrained);\n    }\n    super.setTrack(track);\n    if (track) {\n      track.on(TrackEvent.Ended, this.handleTrackEnded);\n      track.on(TrackEvent.CpuConstrained, this.handleCpuConstrained);\n    }\n  }\n  get isMuted() {\n    if (this.track) {\n      return this.track.isMuted;\n    }\n    return super.isMuted;\n  }\n  get audioTrack() {\n    return super.audioTrack;\n  }\n  get videoTrack() {\n    return super.videoTrack;\n  }\n  get isLocal() {\n    return true;\n  }\n  /**\n   * Mute the track associated with this publication\n   */\n  mute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      return (_a = this.track) === null || _a === void 0 ? void 0 : _a.mute();\n    });\n  }\n  /**\n   * Unmute track associated with this publication\n   */\n  unmute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      return (_a = this.track) === null || _a === void 0 ? void 0 : _a.unmute();\n    });\n  }\n  /**\n   * Pauses the media stream track associated with this publication from being sent to the server\n   * and signals \"muted\" event to other participants\n   * Useful if you want to pause the stream without pausing the local media stream track\n   */\n  pauseUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.pauseUpstream();\n    });\n  }\n  /**\n   * Resumes sending the media stream track associated with this publication to the server after a call to [[pauseUpstream()]]\n   * and signals \"unmuted\" event to other participants (unless the track is explicitly muted)\n   */\n  resumeUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.resumeUpstream();\n    });\n  }\n  getTrackFeatures() {\n    var _a;\n    if (isAudioTrack(this.track)) {\n      const settings = this.track.getSourceTrackSettings();\n      const features = new Set();\n      if (settings.autoGainControl) {\n        features.add(AudioTrackFeature.TF_AUTO_GAIN_CONTROL);\n      }\n      if (settings.echoCancellation) {\n        features.add(AudioTrackFeature.TF_ECHO_CANCELLATION);\n      }\n      if (settings.noiseSuppression) {\n        features.add(AudioTrackFeature.TF_NOISE_SUPPRESSION);\n      }\n      if (settings.channelCount && settings.channelCount > 1) {\n        features.add(AudioTrackFeature.TF_STEREO);\n      }\n      if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.dtx)) {\n        features.add(AudioTrackFeature.TF_NO_DTX);\n      }\n      if (this.track.enhancedNoiseCancellation) {\n        features.add(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION);\n      }\n      return Array.from(features.values());\n    } else return [];\n  }\n}/**\n * Creates a local video and audio track at the same time. When acquiring both\n * audio and video tracks together, it'll display a single permission prompt to\n * the user instead of two separate ones.\n * @param options\n */\nfunction createLocalTracks(options, loggerOptions) {\n  return __awaiter(this, void 0, void 0, function* () {\n    options !== null && options !== void 0 ? options : options = {};\n    let attemptExactMatch = false;\n    const _extractProcessorsFro = extractProcessorsFromOptions(options),\n      audioProcessor = _extractProcessorsFro.audioProcessor,\n      videoProcessor = _extractProcessorsFro.videoProcessor,\n      internalOptions = _extractProcessorsFro.optionsWithoutProcessor;\n    let retryAudioOptions = internalOptions.audio;\n    let retryVideoOptions = internalOptions.video;\n    if (audioProcessor && typeof internalOptions.audio === 'object') {\n      internalOptions.audio.processor = audioProcessor;\n    }\n    if (videoProcessor && typeof internalOptions.video === 'object') {\n      internalOptions.video.processor = videoProcessor;\n    }\n    // if the user passes a device id as a string, we default to exact match\n    if (options.audio && typeof internalOptions.audio === 'object' && typeof internalOptions.audio.deviceId === 'string') {\n      const deviceId = internalOptions.audio.deviceId;\n      internalOptions.audio.deviceId = {\n        exact: deviceId\n      };\n      attemptExactMatch = true;\n      retryAudioOptions = Object.assign(Object.assign({}, internalOptions.audio), {\n        deviceId: {\n          ideal: deviceId\n        }\n      });\n    }\n    if (internalOptions.video && typeof internalOptions.video === 'object' && typeof internalOptions.video.deviceId === 'string') {\n      const deviceId = internalOptions.video.deviceId;\n      internalOptions.video.deviceId = {\n        exact: deviceId\n      };\n      attemptExactMatch = true;\n      retryVideoOptions = Object.assign(Object.assign({}, internalOptions.video), {\n        deviceId: {\n          ideal: deviceId\n        }\n      });\n    }\n    if (internalOptions.audio === true) {\n      internalOptions.audio = {\n        deviceId: 'default'\n      };\n    } else if (typeof internalOptions.audio === 'object' && internalOptions.audio !== null) {\n      internalOptions.audio = Object.assign(Object.assign({}, internalOptions.audio), {\n        deviceId: internalOptions.audio.deviceId || 'default'\n      });\n    }\n    if (internalOptions.video === true) {\n      internalOptions.video = {\n        deviceId: 'default'\n      };\n    } else if (typeof internalOptions.video === 'object' && !internalOptions.video.deviceId) {\n      internalOptions.video.deviceId = 'default';\n    }\n    const opts = mergeDefaultOptions(internalOptions, audioDefaults, videoDefaults);\n    const constraints = constraintsForOptions(opts);\n    // Keep a reference to the promise on DeviceManager and await it in getLocalDevices()\n    // works around iOS Safari Bug https://bugs.webkit.org/show_bug.cgi?id=179363\n    const mediaPromise = navigator.mediaDevices.getUserMedia(constraints);\n    if (internalOptions.audio) {\n      DeviceManager.userMediaPromiseMap.set('audioinput', mediaPromise);\n      mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('audioinput'));\n    }\n    if (internalOptions.video) {\n      DeviceManager.userMediaPromiseMap.set('videoinput', mediaPromise);\n      mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('videoinput'));\n    }\n    try {\n      const stream = yield mediaPromise;\n      return yield Promise.all(stream.getTracks().map(mediaStreamTrack => __awaiter(this, void 0, void 0, function* () {\n        const isAudio = mediaStreamTrack.kind === 'audio';\n        let trackConstraints;\n        const conOrBool = isAudio ? constraints.audio : constraints.video;\n        if (typeof conOrBool !== 'boolean') {\n          trackConstraints = conOrBool;\n        }\n        // update the constraints with the device id the user gave permissions to in the permission prompt\n        // otherwise each track restart (e.g. mute - unmute) will try to initialize the device again -> causing additional permission prompts\n        const newDeviceId = mediaStreamTrack.getSettings().deviceId;\n        if ((trackConstraints === null || trackConstraints === void 0 ? void 0 : trackConstraints.deviceId) && unwrapConstraint(trackConstraints.deviceId) !== newDeviceId) {\n          trackConstraints.deviceId = newDeviceId;\n        } else if (!trackConstraints) {\n          trackConstraints = {\n            deviceId: newDeviceId\n          };\n        }\n        const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints, loggerOptions);\n        if (track.kind === Track.Kind.Video) {\n          track.source = Track.Source.Camera;\n        } else if (track.kind === Track.Kind.Audio) {\n          track.source = Track.Source.Microphone;\n        }\n        track.mediaStream = stream;\n        if (isAudioTrack(track) && audioProcessor) {\n          yield track.setProcessor(audioProcessor);\n        } else if (isVideoTrack(track) && videoProcessor) {\n          yield track.setProcessor(videoProcessor);\n        }\n        return track;\n      })));\n    } catch (e) {\n      if (!attemptExactMatch) {\n        throw e;\n      }\n      return createLocalTracks(Object.assign(Object.assign({}, options), {\n        audio: retryAudioOptions,\n        video: retryVideoOptions\n      }), loggerOptions);\n    }\n  });\n}\n/**\n * Creates a [[LocalVideoTrack]] with getUserMedia()\n * @param options\n */\nfunction createLocalVideoTrack(options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const tracks = yield createLocalTracks({\n      audio: false,\n      video: options !== null && options !== void 0 ? options : true\n    });\n    return tracks[0];\n  });\n}\nfunction createLocalAudioTrack(options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const tracks = yield createLocalTracks({\n      audio: options !== null && options !== void 0 ? options : true,\n      video: false\n    });\n    return tracks[0];\n  });\n}\n/**\n * Creates a screen capture tracks with getDisplayMedia().\n * A LocalVideoTrack is always created and returned.\n * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n */\nfunction createLocalScreenTracks(options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    if (options === undefined) {\n      options = {};\n    }\n    if (options.resolution === undefined && !isSafari17Based()) {\n      options.resolution = ScreenSharePresets.h1080fps30.resolution;\n    }\n    if (navigator.mediaDevices.getDisplayMedia === undefined) {\n      throw new DeviceUnsupportedError('getDisplayMedia not supported');\n    }\n    const constraints = screenCaptureToDisplayMediaStreamOptions(options);\n    const stream = yield navigator.mediaDevices.getDisplayMedia(constraints);\n    const tracks = stream.getVideoTracks();\n    if (tracks.length === 0) {\n      throw new TrackInvalidError('no video track found');\n    }\n    const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);\n    screenVideo.source = Track.Source.ScreenShare;\n    const localTracks = [screenVideo];\n    if (stream.getAudioTracks().length > 0) {\n      const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);\n      screenAudio.source = Track.Source.ScreenShareAudio;\n      localTracks.push(screenAudio);\n    }\n    return localTracks;\n  });\n}var ConnectionQuality;\n(function (ConnectionQuality) {\n  ConnectionQuality[\"Excellent\"] = \"excellent\";\n  ConnectionQuality[\"Good\"] = \"good\";\n  ConnectionQuality[\"Poor\"] = \"poor\";\n  /**\n   * Indicates that a participant has temporarily (or permanently) lost connection to LiveKit.\n   * For permanent disconnection a `ParticipantDisconnected` event will be emitted after a timeout\n   */\n  ConnectionQuality[\"Lost\"] = \"lost\";\n  ConnectionQuality[\"Unknown\"] = \"unknown\";\n})(ConnectionQuality || (ConnectionQuality = {}));\nfunction qualityFromProto(q) {\n  switch (q) {\n    case ConnectionQuality$1.EXCELLENT:\n      return ConnectionQuality.Excellent;\n    case ConnectionQuality$1.GOOD:\n      return ConnectionQuality.Good;\n    case ConnectionQuality$1.POOR:\n      return ConnectionQuality.Poor;\n    case ConnectionQuality$1.LOST:\n      return ConnectionQuality.Lost;\n    default:\n      return ConnectionQuality.Unknown;\n  }\n}\nclass Participant extends eventsExports.EventEmitter {\n  get logContext() {\n    var _a, _b;\n    return Object.assign({}, (_b = (_a = this.loggerOptions) === null || _a === void 0 ? void 0 : _a.loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n  }\n  get isEncrypted() {\n    return this.trackPublications.size > 0 && Array.from(this.trackPublications.values()).every(tr => tr.isEncrypted);\n  }\n  get isAgent() {\n    var _a;\n    return ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.agent) || this.kind === ParticipantInfo_Kind.AGENT;\n  }\n  get isActive() {\n    var _a;\n    return ((_a = this.participantInfo) === null || _a === void 0 ? void 0 : _a.state) === ParticipantInfo_State.ACTIVE;\n  }\n  get kind() {\n    return this._kind;\n  }\n  /** participant attributes, similar to metadata, but as a key/value map */\n  get attributes() {\n    return Object.freeze(Object.assign({}, this._attributes));\n  }\n  /** @internal */\n  constructor(sid, identity, name, metadata, attributes, loggerOptions) {\n    let kind = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : ParticipantInfo_Kind.STANDARD;\n    var _a;\n    super();\n    /** audio level between 0-1.0, 1 being loudest, 0 being softest */\n    this.audioLevel = 0;\n    /** if participant is currently speaking */\n    this.isSpeaking = false;\n    this._connectionQuality = ConnectionQuality.Unknown;\n    this.log = livekitLogger;\n    this.loggerOptions = loggerOptions;\n    this.log = getLogger((_a = loggerOptions === null || loggerOptions === void 0 ? void 0 : loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Participant, () => this.logContext);\n    this.setMaxListeners(100);\n    this.sid = sid;\n    this.identity = identity;\n    this.name = name;\n    this.metadata = metadata;\n    this.audioTrackPublications = new Map();\n    this.videoTrackPublications = new Map();\n    this.trackPublications = new Map();\n    this._kind = kind;\n    this._attributes = attributes !== null && attributes !== void 0 ? attributes : {};\n  }\n  getTrackPublications() {\n    return Array.from(this.trackPublications.values());\n  }\n  /**\n   * Finds the first track that matches the source filter, for example, getting\n   * the user's camera track with getTrackBySource(Track.Source.Camera).\n   */\n  getTrackPublication(source) {\n    for (const _ref of this.trackPublications) {\n      var _ref2 = _slicedToArray(_ref, 2);\n      const pub = _ref2[1];\n      if (pub.source === source) {\n        return pub;\n      }\n    }\n  }\n  /**\n   * Finds the first track that matches the track's name.\n   */\n  getTrackPublicationByName(name) {\n    for (const _ref3 of this.trackPublications) {\n      var _ref4 = _slicedToArray(_ref3, 2);\n      const pub = _ref4[1];\n      if (pub.trackName === name) {\n        return pub;\n      }\n    }\n  }\n  /**\n   * Waits until the participant is active and ready to receive data messages\n   * @returns a promise that resolves when the participant is active\n   */\n  waitUntilActive() {\n    if (this.isActive) {\n      return Promise.resolve();\n    }\n    if (this.activeFuture) {\n      return this.activeFuture.promise;\n    }\n    this.activeFuture = new Future();\n    this.once(ParticipantEvent.Active, () => {\n      var _a, _b;\n      (_b = (_a = this.activeFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n      this.activeFuture = undefined;\n    });\n    return this.activeFuture.promise;\n  }\n  get connectionQuality() {\n    return this._connectionQuality;\n  }\n  get isCameraEnabled() {\n    var _a;\n    const track = this.getTrackPublication(Track.Source.Camera);\n    return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);\n  }\n  get isMicrophoneEnabled() {\n    var _a;\n    const track = this.getTrackPublication(Track.Source.Microphone);\n    return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);\n  }\n  get isScreenShareEnabled() {\n    const track = this.getTrackPublication(Track.Source.ScreenShare);\n    return !!track;\n  }\n  get isLocal() {\n    return false;\n  }\n  /** when participant joined the room */\n  get joinedAt() {\n    if (this.participantInfo) {\n      return new Date(Number.parseInt(this.participantInfo.joinedAt.toString()) * 1000);\n    }\n    return new Date();\n  }\n  /** @internal */\n  updateInfo(info) {\n    var _a;\n    // it's possible the update could be applied out of order due to await\n    // during reconnect sequences. when that happens, it's possible for server\n    // to have sent more recent version of participant info while JS is waiting\n    // to process the existing payload.\n    // when the participant sid remains the same, and we already have a later version\n    // of the payload, they can be safely skipped\n    if (this.participantInfo && this.participantInfo.sid === info.sid && this.participantInfo.version > info.version) {\n      return false;\n    }\n    this.identity = info.identity;\n    this.sid = info.sid;\n    this._setName(info.name);\n    this._setMetadata(info.metadata);\n    this._setAttributes(info.attributes);\n    if (info.state === ParticipantInfo_State.ACTIVE && ((_a = this.participantInfo) === null || _a === void 0 ? void 0 : _a.state) !== ParticipantInfo_State.ACTIVE) {\n      this.emit(ParticipantEvent.Active);\n    }\n    if (info.permission) {\n      this.setPermissions(info.permission);\n    }\n    // set this last so setMetadata can detect changes\n    this.participantInfo = info;\n    return true;\n  }\n  /**\n   * Updates metadata from server\n   **/\n  _setMetadata(md) {\n    const changed = this.metadata !== md;\n    const prevMetadata = this.metadata;\n    this.metadata = md;\n    if (changed) {\n      this.emit(ParticipantEvent.ParticipantMetadataChanged, prevMetadata);\n    }\n  }\n  _setName(name) {\n    const changed = this.name !== name;\n    this.name = name;\n    if (changed) {\n      this.emit(ParticipantEvent.ParticipantNameChanged, name);\n    }\n  }\n  /**\n   * Updates metadata from server\n   **/\n  _setAttributes(attributes) {\n    const diff = diffAttributes(this.attributes, attributes);\n    this._attributes = attributes;\n    if (Object.keys(diff).length > 0) {\n      this.emit(ParticipantEvent.AttributesChanged, diff);\n    }\n  }\n  /** @internal */\n  setPermissions(permissions) {\n    var _a, _b, _c, _d, _e, _f;\n    const prevPermissions = this.permissions;\n    const changed = permissions.canPublish !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublish) || permissions.canSubscribe !== ((_b = this.permissions) === null || _b === void 0 ? void 0 : _b.canSubscribe) || permissions.canPublishData !== ((_c = this.permissions) === null || _c === void 0 ? void 0 : _c.canPublishData) || permissions.hidden !== ((_d = this.permissions) === null || _d === void 0 ? void 0 : _d.hidden) || permissions.recorder !== ((_e = this.permissions) === null || _e === void 0 ? void 0 : _e.recorder) || permissions.canPublishSources.length !== this.permissions.canPublishSources.length || permissions.canPublishSources.some((value, index) => {\n      var _a;\n      return value !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublishSources[index]);\n    }) || permissions.canSubscribeMetrics !== ((_f = this.permissions) === null || _f === void 0 ? void 0 : _f.canSubscribeMetrics);\n    this.permissions = permissions;\n    if (changed) {\n      this.emit(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);\n    }\n    return changed;\n  }\n  /** @internal */\n  setIsSpeaking(speaking) {\n    if (speaking === this.isSpeaking) {\n      return;\n    }\n    this.isSpeaking = speaking;\n    if (speaking) {\n      this.lastSpokeAt = new Date();\n    }\n    this.emit(ParticipantEvent.IsSpeakingChanged, speaking);\n  }\n  /** @internal */\n  setConnectionQuality(q) {\n    const prevQuality = this._connectionQuality;\n    this._connectionQuality = qualityFromProto(q);\n    if (prevQuality !== this._connectionQuality) {\n      this.emit(ParticipantEvent.ConnectionQualityChanged, this._connectionQuality);\n    }\n  }\n  /**\n   * @internal\n   */\n  setDisconnected() {\n    var _a, _b;\n    if (this.activeFuture) {\n      (_b = (_a = this.activeFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('Participant disconnected'));\n      this.activeFuture = undefined;\n    }\n  }\n  /**\n   * @internal\n   */\n  setAudioContext(ctx) {\n    this.audioContext = ctx;\n    this.audioTrackPublications.forEach(track => isAudioTrack(track.track) && track.track.setAudioContext(ctx));\n  }\n  addTrackPublication(publication) {\n    // forward publication driven events\n    publication.on(TrackEvent.Muted, () => {\n      this.emit(ParticipantEvent.TrackMuted, publication);\n    });\n    publication.on(TrackEvent.Unmuted, () => {\n      this.emit(ParticipantEvent.TrackUnmuted, publication);\n    });\n    const pub = publication;\n    if (pub.track) {\n      pub.track.sid = publication.trackSid;\n    }\n    this.trackPublications.set(publication.trackSid, publication);\n    switch (publication.kind) {\n      case Track.Kind.Audio:\n        this.audioTrackPublications.set(publication.trackSid, publication);\n        break;\n      case Track.Kind.Video:\n        this.videoTrackPublications.set(publication.trackSid, publication);\n        break;\n    }\n  }\n}function trackPermissionToProto(perms) {\n  var _a, _b, _c;\n  if (!perms.participantSid && !perms.participantIdentity) {\n    throw new Error('Invalid track permission, must provide at least one of participantIdentity and participantSid');\n  }\n  return new TrackPermission({\n    participantIdentity: (_a = perms.participantIdentity) !== null && _a !== void 0 ? _a : '',\n    participantSid: (_b = perms.participantSid) !== null && _b !== void 0 ? _b : '',\n    allTracks: (_c = perms.allowAll) !== null && _c !== void 0 ? _c : false,\n    trackSids: perms.allowedTrackSids || []\n  });\n}class LocalParticipant extends Participant {\n  /** @internal */\n  constructor(sid, identity, engine, options, roomOutgoingDataStreamManager, roomOutgoingDataTrackManager, rpcClientManager, rpcServerManager) {\n    super(sid, identity, undefined, undefined, undefined, {\n      loggerName: options.loggerName,\n      loggerContextCb: () => this.engine.logContext\n    });\n    this.pendingPublishing = new Set();\n    this.pendingPublishPromises = new Map();\n    this.participantTrackPermissions = [];\n    this.allParticipantsAllowedToSubscribe = true;\n    this.encryptionType = Encryption_Type.NONE;\n    this.e2eeStateMutex = new _();\n    this.enabledPublishVideoCodecs = [];\n    this.handleReconnecting = () => {\n      if (!this.reconnectFuture) {\n        this.reconnectFuture = new Future();\n      }\n    };\n    this.handleReconnected = () => {\n      var _a, _b;\n      (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n      this.reconnectFuture = undefined;\n      this.updateTrackSubscriptionPermissions();\n    };\n    this.handleClosing = () => {\n      var _a, _b, _c, _d, _e, _f;\n      if (this.reconnectFuture) {\n        // @throws-transformer ignore - introduced due to adding Throws into Future, investigate this\n        // further\n        this.reconnectFuture.promise.catch(e => this.log.warn(e.message));\n        (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.reject) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('Got disconnected during reconnection attempt'));\n        this.reconnectFuture = undefined;\n      }\n      if (this.signalConnectedFuture) {\n        (_d = (_c = this.signalConnectedFuture).reject) === null || _d === void 0 ? void 0 : _d.call(_c, new Error('Got disconnected without signal connected'));\n        this.signalConnectedFuture = undefined;\n      }\n      (_f = (_e = this.activeAgentFuture) === null || _e === void 0 ? void 0 : _e.reject) === null || _f === void 0 ? void 0 : _f.call(_e, new Error('Got disconnected without active agent present'));\n      this.activeAgentFuture = undefined;\n      this.firstActiveAgent = undefined;\n    };\n    this.handleSignalConnected = joinResponse => {\n      var _a, _b;\n      if (joinResponse.participant) {\n        this.updateInfo(joinResponse.participant);\n      }\n      if (!this.signalConnectedFuture) {\n        this.signalConnectedFuture = new Future();\n      }\n      (_b = (_a = this.signalConnectedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n    };\n    this.handleSignalRequestResponse = response => {\n      const requestId = response.requestId,\n        reason = response.reason,\n        message = response.message;\n      const targetRequest = this.pendingSignalRequests.get(requestId);\n      if (targetRequest) {\n        if (reason !== RequestResponse_Reason.OK) {\n          targetRequest.reject(new SignalRequestError(message, reason));\n        }\n        this.pendingSignalRequests.delete(requestId);\n      }\n      switch (response.request.case) {\n        case 'publishDataTrack':\n          {\n            let error;\n            switch (response.reason) {\n              case RequestResponse_Reason.NOT_ALLOWED:\n                error = DataTrackPublishError.notAllowed(response.message);\n                break;\n              case RequestResponse_Reason.DUPLICATE_NAME:\n                error = DataTrackPublishError.duplicateName(response.message);\n                break;\n              case RequestResponse_Reason.INVALID_NAME:\n                error = DataTrackPublishError.invalidName(response.message);\n                break;\n              case RequestResponse_Reason.LIMIT_EXCEEDED:\n                error = DataTrackPublishError.limitReached(response.message);\n                break;\n              default:\n                error = DataTrackPublishError.unknown(response.reason, response.message);\n                break;\n            }\n            this.roomOutgoingDataTrackManager.receivedSfuPublishResponse(response.request.value.pubHandle, {\n              type: 'error',\n              error\n            });\n            break;\n          }\n      }\n    };\n    this.updateTrackSubscriptionPermissions = () => {\n      this.log.debug('updating track subscription permissions', {\n        allParticipantsAllowed: this.allParticipantsAllowedToSubscribe,\n        participantTrackPermissions: this.participantTrackPermissions\n      });\n      this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe, this.participantTrackPermissions.map(p => trackPermissionToProto(p)));\n    };\n    /** @internal */\n    this.onTrackUnmuted = track => {\n      this.onTrackMuted(track, track.isUpstreamPaused);\n    };\n    // when the local track changes in mute status, we'll notify server as such\n    /** @internal */\n    this.onTrackMuted = (track, muted) => {\n      if (muted === undefined) {\n        muted = true;\n      }\n      if (!track.sid) {\n        this.log.error('could not update mute status for unpublished track', getLogContextFromTrack(track));\n        return;\n      }\n      this.engine.updateMuteStatus(track.sid, muted);\n    };\n    this.onTrackUpstreamPaused = track => {\n      this.log.debug('upstream paused', getLogContextFromTrack(track));\n      this.onTrackMuted(track, true);\n    };\n    this.onTrackUpstreamResumed = track => {\n      this.log.debug('upstream resumed', getLogContextFromTrack(track));\n      this.onTrackMuted(track, track.isMuted);\n    };\n    this.onTrackFeatureUpdate = track => {\n      const pub = this.audioTrackPublications.get(track.sid);\n      if (!pub) {\n        this.log.warn(\"Could not update local audio track settings, missing publication for track \".concat(track.sid));\n        return;\n      }\n      this.engine.client.sendUpdateLocalAudioTrack(pub.trackSid, pub.getTrackFeatures());\n    };\n    this.onTrackCpuConstrained = (track, publication) => {\n      this.log.debug('track cpu constrained', getLogContextFromTrack(publication));\n      this.emit(ParticipantEvent.LocalTrackCpuConstrained, track, publication);\n    };\n    this.handleSubscribedQualityUpdate = update => __awaiter(this, void 0, void 0, function* () {\n      var _a, e_1, _b, _c;\n      var _d;\n      if (!((_d = this.roomOptions) === null || _d === void 0 ? void 0 : _d.dynacast)) {\n        return;\n      }\n      const pub = this.videoTrackPublications.get(update.trackSid);\n      if (!pub) {\n        this.log.warn('received subscribed quality update for unknown track', {\n          trackSid: update.trackSid\n        });\n        return;\n      }\n      if (!pub.videoTrack) {\n        return;\n      }\n      const newCodecs = yield pub.videoTrack.setPublishingCodecs(update.subscribedCodecs);\n      try {\n        for (var _e = true, newCodecs_1 = __asyncValues(newCodecs), newCodecs_1_1; newCodecs_1_1 = yield newCodecs_1.next(), _a = newCodecs_1_1.done, !_a; _e = true) {\n          _c = newCodecs_1_1.value;\n          _e = false;\n          const codec = _c;\n          if (isBackupCodec(codec)) {\n            this.log.debug(\"publish \".concat(codec, \" for \").concat(pub.videoTrack.sid), getLogContextFromTrack(pub));\n            yield this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options);\n          }\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = newCodecs_1.return)) yield _b.call(newCodecs_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    });\n    this.handleLocalTrackUnpublished = unpublished => {\n      const track = this.trackPublications.get(unpublished.trackSid);\n      if (!track) {\n        this.log.warn('received unpublished event for unknown track', {\n          trackSid: unpublished.trackSid\n        });\n        return;\n      }\n      this.unpublishTrack(track.track);\n    };\n    this.handleTrackEnded = track => __awaiter(this, void 0, void 0, function* () {\n      if (track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio) {\n        this.log.debug('unpublishing local track due to TrackEnded', getLogContextFromTrack(track));\n        this.unpublishTrack(track);\n      } else if (track.isUserProvided) {\n        yield track.mute();\n      } else if (isLocalAudioTrack(track) || isLocalVideoTrack(track)) {\n        try {\n          if (isWeb()) {\n            try {\n              const currentPermissions = yield navigator === null || navigator === void 0 ? void 0 : navigator.permissions.query({\n                // the permission query for camera and microphone currently not supported in Safari and Firefox\n                // @ts-ignore\n                name: track.source === Track.Source.Camera ? 'camera' : 'microphone'\n              });\n              if (currentPermissions && currentPermissions.state === 'denied') {\n                this.log.warn(\"user has revoked access to \".concat(track.source), getLogContextFromTrack(track));\n                // detect granted change after permissions were denied to try and resume then\n                currentPermissions.onchange = () => {\n                  if (currentPermissions.state !== 'denied') {\n                    if (!track.isMuted) {\n                      track.restartTrack();\n                    }\n                    currentPermissions.onchange = null;\n                  }\n                };\n                throw new Error('GetUserMedia Permission denied');\n              }\n            } catch (e) {\n              // permissions query fails for firefox, we continue and try to restart the track\n            }\n          }\n          if (!track.isMuted) {\n            this.log.debug('track ended, attempting to use a different device', getLogContextFromTrack(track));\n            if (isLocalAudioTrack(track)) {\n              // fall back to default device if available\n              yield track.restartTrack({\n                deviceId: 'default'\n              });\n            } else {\n              yield track.restartTrack();\n            }\n          }\n        } catch (e) {\n          this.log.warn(\"could not restart track, muting instead\", getLogContextFromTrack(track));\n          yield track.mute();\n        }\n      }\n    });\n    this.audioTrackPublications = new Map();\n    this.videoTrackPublications = new Map();\n    this.trackPublications = new Map();\n    this.engine = engine;\n    this.roomOptions = options;\n    this.setupEngine(engine);\n    this.activeDeviceMap = new Map([['audioinput', 'default'], ['videoinput', 'default'], ['audiooutput', 'default']]);\n    this.pendingSignalRequests = new Map();\n    this.roomOutgoingDataStreamManager = roomOutgoingDataStreamManager;\n    this.roomOutgoingDataTrackManager = roomOutgoingDataTrackManager;\n    this.rpcClientManager = rpcClientManager;\n    this.rpcServerManager = rpcServerManager;\n  }\n  get lastCameraError() {\n    return this.cameraError;\n  }\n  get lastMicrophoneError() {\n    return this.microphoneError;\n  }\n  get isE2EEEnabled() {\n    return this.encryptionType !== Encryption_Type.NONE;\n  }\n  getTrackPublication(source) {\n    const track = super.getTrackPublication(source);\n    if (track) {\n      return track;\n    }\n  }\n  getTrackPublicationByName(name) {\n    const track = super.getTrackPublicationByName(name);\n    if (track) {\n      return track;\n    }\n  }\n  /**\n   * @internal\n   */\n  setupEngine(engine) {\n    var _a;\n    this.engine = engine;\n    this.engine.on(EngineEvent.RemoteMute, (trackSid, muted) => {\n      const pub = this.trackPublications.get(trackSid);\n      if (!pub || !pub.track) {\n        return;\n      }\n      if (muted) {\n        pub.mute();\n      } else {\n        pub.unmute();\n      }\n    });\n    if ((_a = this.signalConnectedFuture) === null || _a === void 0 ? void 0 : _a.isResolved) {\n      this.signalConnectedFuture = undefined;\n    }\n    this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.SignalConnected, this.handleSignalConnected).on(EngineEvent.SignalRestarted, this.handleReconnected).on(EngineEvent.SignalResumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished).on(EngineEvent.SubscribedQualityUpdate, this.handleSubscribedQualityUpdate).on(EngineEvent.Closing, this.handleClosing).on(EngineEvent.SignalRequestResponse, this.handleSignalRequestResponse);\n  }\n  /**\n   * Sets and updates the metadata of the local participant.\n   * Note: this requires `canUpdateOwnMetadata` permission.\n   * method will throw if the user doesn't have the required permissions\n   * @param metadata\n   */\n  setMetadata(metadata) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.requestMetadataUpdate({\n        metadata\n      });\n    });\n  }\n  /**\n   * Sets and updates the name of the local participant.\n   * Note: this requires `canUpdateOwnMetadata` permission.\n   * method will throw if the user doesn't have the required permissions\n   * @param metadata\n   */\n  setName(name) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.requestMetadataUpdate({\n        name\n      });\n    });\n  }\n  /**\n   * Set or update participant attributes. It will make updates only to keys that\n   * are present in `attributes`, and will not override others.\n   * Note: this requires `canUpdateOwnMetadata` permission.\n   * @param attributes attributes to update\n   */\n  setAttributes(attributes) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.requestMetadataUpdate({\n        attributes\n      });\n    });\n  }\n  requestMetadataUpdate(_a) {\n    return __awaiter(this, arguments, void 0, function (_ref) {\n      var _this = this;\n      let metadata = _ref.metadata,\n        name = _ref.name,\n        attributes = _ref.attributes;\n      return function* () {\n        return new TypedPromise((resolve, reject) => __awaiter(_this, void 0, void 0, function* () {\n          var _a, _b;\n          try {\n            let isRejected = false;\n            const requestId = yield this.engine.client.sendUpdateLocalMetadata((_a = metadata !== null && metadata !== void 0 ? metadata : this.metadata) !== null && _a !== void 0 ? _a : '', (_b = name !== null && name !== void 0 ? name : this.name) !== null && _b !== void 0 ? _b : '', attributes);\n            const startTime = performance.now();\n            this.pendingSignalRequests.set(requestId, {\n              resolve,\n              reject: error => {\n                reject(error);\n                isRejected = true;\n              },\n              values: {\n                name,\n                metadata,\n                attributes\n              }\n            });\n            while (performance.now() - startTime < 5000 && !isRejected) {\n              if ((!name || this.name === name) && (!metadata || this.metadata === metadata) && (!attributes || Object.entries(attributes).every(_ref2 => {\n                let _ref3 = _slicedToArray(_ref2, 2),\n                  key = _ref3[0],\n                  value = _ref3[1];\n                return this.attributes[key] === value || value === '' && !this.attributes[key];\n              }))) {\n                this.pendingSignalRequests.delete(requestId);\n                resolve();\n                return;\n              }\n              yield sleep(50);\n            }\n            reject(new SignalRequestError('Request to update local metadata timed out', 'TimeoutError'));\n          } catch (e) {\n            if (e instanceof Error) {\n              reject(e);\n            } else {\n              reject(new Error(String(e)));\n            }\n          }\n        }));\n      }();\n    });\n  }\n  /**\n   * Enable or disable a participant's camera track.\n   *\n   * If a track has already published, it'll mute or unmute the track.\n   * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n   */\n  setCameraEnabled(enabled, options, publishOptions) {\n    return this.setTrackEnabled(Track.Source.Camera, enabled, options, publishOptions);\n  }\n  /**\n   * Enable or disable a participant's microphone track.\n   *\n   * If a track has already published, it'll mute or unmute the track.\n   * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n   */\n  setMicrophoneEnabled(enabled, options, publishOptions) {\n    return this.setTrackEnabled(Track.Source.Microphone, enabled, options, publishOptions);\n  }\n  /**\n   * Start or stop sharing a participant's screen\n   * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n   */\n  setScreenShareEnabled(enabled, options, publishOptions) {\n    return this.setTrackEnabled(Track.Source.ScreenShare, enabled, options, publishOptions);\n  }\n  /** @internal */\n  setE2EEEnabled(enabled) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.e2eeStateMutex.lock();\n      try {\n        this.encryptionType = enabled ? Encryption_Type.GCM : Encryption_Type.NONE;\n        yield Promise.all(this.pendingPublishPromises.values());\n        if (this.trackPublications.size === 0 || Array.from(this.trackPublications.values()).every(pub => pub.isEncrypted === enabled)) {\n          return;\n        }\n        yield this.republishAllTracks(undefined, false);\n      } finally {\n        unlock();\n      }\n    });\n  }\n  setTrackEnabled(source, enabled, options, publishOptions) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      this.log.debug('setTrackEnabled', {\n        source,\n        enabled\n      });\n      if (this.republishPromise) {\n        yield this.republishPromise;\n      }\n      let track = this.getTrackPublication(source);\n      if (enabled) {\n        if (track) {\n          yield track.unmute();\n        } else {\n          let localTracks;\n          if (this.pendingPublishing.has(source)) {\n            const pendingTrack = yield this.waitForPendingPublicationOfSource(source);\n            if (!pendingTrack) {\n              this.log.info('waiting for pending publication promise timed out', {\n                source\n              });\n            }\n            yield pendingTrack === null || pendingTrack === void 0 ? void 0 : pendingTrack.unmute();\n            return pendingTrack;\n          }\n          this.pendingPublishing.add(source);\n          try {\n            switch (source) {\n              case Track.Source.Camera:\n                localTracks = yield this.createTracks({\n                  video: (_a = options) !== null && _a !== void 0 ? _a : true\n                });\n                break;\n              case Track.Source.Microphone:\n                localTracks = yield this.createTracks({\n                  audio: (_b = options) !== null && _b !== void 0 ? _b : true\n                });\n                break;\n              case Track.Source.ScreenShare:\n                localTracks = yield this.createScreenTracks(Object.assign({}, options));\n                break;\n              default:\n                throw new TrackInvalidError(source);\n            }\n          } catch (e) {\n            localTracks === null || localTracks === void 0 ? void 0 : localTracks.forEach(tr => {\n              tr.stop();\n            });\n            if (e instanceof Error) {\n              this.emit(ParticipantEvent.MediaDevicesError, e, sourceToKind(source));\n            }\n            this.pendingPublishing.delete(source);\n            throw e;\n          }\n          for (const localTrack of localTracks) {\n            const opts = Object.assign(Object.assign({}, this.roomOptions.publishDefaults), options);\n            if (source === Track.Source.Microphone && isAudioTrack(localTrack) && opts.preConnectBuffer) {\n              this.log.info('starting preconnect buffer for microphone');\n              localTrack.startPreConnectBuffer();\n            }\n          }\n          try {\n            const publishPromises = [];\n            for (const localTrack of localTracks) {\n              this.log.info('publishing track', getLogContextFromTrack(localTrack));\n              publishPromises.push(this.publishTrack(localTrack, publishOptions));\n            }\n            const publishedTracks = yield Promise.all(publishPromises);\n            // for screen share publications including audio, this will only return the screen share publication, not the screen share audio one\n            // revisit if we want to return an array of tracks instead for v2\n            var _publishedTracks = _slicedToArray(publishedTracks, 1);\n            track = _publishedTracks[0];\n          } catch (e) {\n            localTracks === null || localTracks === void 0 ? void 0 : localTracks.forEach(tr => {\n              tr.stop();\n            });\n            throw e;\n          } finally {\n            this.pendingPublishing.delete(source);\n          }\n        }\n      } else {\n        if (!(track === null || track === void 0 ? void 0 : track.track) && this.pendingPublishing.has(source)) {\n          // if there's no track available yet first wait for pending publishing promises of that source to see if it becomes available\n          track = yield this.waitForPendingPublicationOfSource(source);\n          if (!track) {\n            this.log.info('waiting for pending publication promise timed out', {\n              source\n            });\n          }\n        }\n        if (track && track.track) {\n          // screenshare cannot be muted, unpublish instead\n          if (source === Track.Source.ScreenShare) {\n            const unpublishPromises = [this.unpublishTrack(track.track)];\n            const screenAudioTrack = this.getTrackPublication(Track.Source.ScreenShareAudio);\n            if (screenAudioTrack && screenAudioTrack.track) {\n              unpublishPromises.push(this.unpublishTrack(screenAudioTrack.track));\n            }\n            var _yield$Promise$all = yield Promise.all(unpublishPromises);\n            var _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 1);\n            track = _yield$Promise$all2[0];\n          } else {\n            yield track.mute();\n          }\n        }\n      }\n      return track;\n    });\n  }\n  /**\n   * Publish both camera and microphone at the same time. This is useful for\n   * displaying a single Permission Dialog box to the end user.\n   */\n  enableCameraAndMicrophone() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.pendingPublishing.has(Track.Source.Camera) || this.pendingPublishing.has(Track.Source.Microphone)) {\n        // no-op it's already been requested\n        return;\n      }\n      this.pendingPublishing.add(Track.Source.Camera);\n      this.pendingPublishing.add(Track.Source.Microphone);\n      try {\n        const tracks = yield this.createTracks({\n          audio: true,\n          video: true\n        });\n        yield Promise.all(tracks.map(track => this.publishTrack(track)));\n      } finally {\n        this.pendingPublishing.delete(Track.Source.Camera);\n        this.pendingPublishing.delete(Track.Source.Microphone);\n      }\n    });\n  }\n  /**\n   * Create local camera and/or microphone tracks\n   * @param options\n   * @returns\n   */\n  createTracks(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      options !== null && options !== void 0 ? options : options = {};\n      const mergedOptionsWithProcessors = mergeDefaultOptions(options, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.audioCaptureDefaults, (_b = this.roomOptions) === null || _b === void 0 ? void 0 : _b.videoCaptureDefaults);\n      try {\n        const tracks = yield createLocalTracks(mergedOptionsWithProcessors, {\n          loggerName: this.roomOptions.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        const localTracks = tracks.map(track => {\n          if (isAudioTrack(track)) {\n            this.microphoneError = undefined;\n            track.setAudioContext(this.audioContext);\n            track.source = Track.Source.Microphone;\n            this.emit(ParticipantEvent.AudioStreamAcquired);\n          }\n          if (isVideoTrack(track)) {\n            this.cameraError = undefined;\n            track.source = Track.Source.Camera;\n          }\n          return track;\n        });\n        return localTracks;\n      } catch (err) {\n        if (err instanceof Error) {\n          if (options.audio) {\n            this.microphoneError = err;\n          }\n          if (options.video) {\n            this.cameraError = err;\n          }\n        }\n        throw err;\n      }\n    });\n  }\n  /**\n   * Creates a screen capture tracks with getDisplayMedia().\n   * A LocalVideoTrack is always created and returned.\n   * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n   */\n  createScreenTracks(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (options === undefined) {\n        options = {};\n      }\n      if (navigator.mediaDevices.getDisplayMedia === undefined) {\n        throw new DeviceUnsupportedError('getDisplayMedia not supported');\n      }\n      if (options.resolution === undefined && !isSafari17Based()) {\n        // we need to constrain the dimensions, otherwise it could lead to low bitrate\n        // due to encoding a huge video. Encoding such large surfaces is really expensive\n        // unfortunately Safari 17 has a but and cannot be constrained by default\n        options.resolution = ScreenSharePresets.h1080fps30.resolution;\n      }\n      const constraints = screenCaptureToDisplayMediaStreamOptions(options);\n      const stream = yield navigator.mediaDevices.getDisplayMedia(constraints);\n      const tracks = stream.getVideoTracks();\n      if (tracks.length === 0) {\n        throw new TrackInvalidError('no video track found');\n      }\n      const screenVideo = new LocalVideoTrack(tracks[0], undefined, false, {\n        loggerName: this.roomOptions.loggerName,\n        loggerContextCb: () => this.logContext\n      });\n      screenVideo.source = Track.Source.ScreenShare;\n      if (options.contentHint) {\n        screenVideo.mediaStreamTrack.contentHint = options.contentHint;\n      }\n      const localTracks = [screenVideo];\n      if (stream.getAudioTracks().length > 0) {\n        this.emit(ParticipantEvent.AudioStreamAcquired);\n        const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false, this.audioContext, {\n          loggerName: this.roomOptions.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        screenAudio.source = Track.Source.ScreenShareAudio;\n        localTracks.push(screenAudio);\n      }\n      return localTracks;\n    });\n  }\n  /**\n   * Publish a new track to the room\n   * @param track\n   * @param options\n   */\n  publishTrack(track, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.publishOrRepublishTrack(track, options);\n    });\n  }\n  /**\n   * Waits for the engine's next `Restarted` event. Unlike `engine.waitForRestarted`, this does\n   * not short-circuit when `pcState === Connected` — at the point this is called (right after a\n   * `NegotiationError`) the PC transport is still connected, but `fullReconnectOnNext` has been\n   * set and `attemptReconnect` is queued via setTimeout. We need to wait for that restart to\n   * actually complete (which clears `pendingTrackResolvers` via `cleanupClient`) before retrying.\n   */\n  waitForNextEngineRestart() {\n    let timeoutMs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 15000;\n    return new Promise((resolve, reject) => {\n      const cleanup = () => {\n        clearTimeout(timeout);\n        this.engine.off(EngineEvent.Restarted, onRestarted);\n        this.engine.off(EngineEvent.Closing, onClosing);\n      };\n      const onRestarted = () => {\n        cleanup();\n        resolve();\n      };\n      const onClosing = () => {\n        cleanup();\n        reject(new Error('engine closed before restart completed'));\n      };\n      const timeout = setTimeout(() => {\n        cleanup();\n        reject(new Error('timed out waiting for engine restart'));\n      }, timeoutMs);\n      this.engine.once(EngineEvent.Restarted, onRestarted);\n      this.engine.once(EngineEvent.Closing, onClosing);\n    });\n  }\n  publishOrRepublishTrack(track_1, options_1) {\n    return __awaiter(this, arguments, void 0, function (track, options) {\n      var _this2 = this;\n      let isRepublish = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      let hasRetriedAfterNegotiationError = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      return function* () {\n        var _a, _b, _c, _d;\n        if (isLocalAudioTrack(track)) {\n          track.setAudioContext(_this2.audioContext);\n        }\n        yield (_a = _this2.reconnectFuture) === null || _a === void 0 ? void 0 : _a.promise;\n        if (_this2.republishPromise && !isRepublish) {\n          yield _this2.republishPromise;\n        }\n        if (isLocalTrack(track) && _this2.pendingPublishPromises.has(track)) {\n          yield _this2.pendingPublishPromises.get(track);\n        }\n        let defaultConstraints;\n        if (track instanceof MediaStreamTrack) {\n          defaultConstraints = track.getConstraints();\n        } else {\n          // we want to access constraints directly as `track.mediaStreamTrack`\n          // might be pointing to a non-device track (e.g. processed track) already\n          defaultConstraints = track.constraints;\n          let deviceKind = undefined;\n          switch (track.source) {\n            case Track.Source.Microphone:\n              deviceKind = 'audioinput';\n              break;\n            case Track.Source.Camera:\n              deviceKind = 'videoinput';\n          }\n          if (deviceKind && _this2.activeDeviceMap.has(deviceKind)) {\n            defaultConstraints = Object.assign(Object.assign({}, defaultConstraints), {\n              deviceId: _this2.activeDeviceMap.get(deviceKind)\n            });\n          }\n        }\n        // convert raw media track into audio or video track\n        if (track instanceof MediaStreamTrack) {\n          switch (track.kind) {\n            case 'audio':\n              track = new LocalAudioTrack(track, defaultConstraints, true, _this2.audioContext, {\n                loggerName: _this2.roomOptions.loggerName,\n                loggerContextCb: () => _this2.logContext\n              });\n              break;\n            case 'video':\n              track = new LocalVideoTrack(track, defaultConstraints, true, {\n                loggerName: _this2.roomOptions.loggerName,\n                loggerContextCb: () => _this2.logContext\n              });\n              break;\n            default:\n              throw new TrackInvalidError(\"unsupported MediaStreamTrack kind \".concat(track.kind));\n          }\n        } else {\n          track.updateLoggerOptions({\n            loggerName: _this2.roomOptions.loggerName,\n            loggerContextCb: () => _this2.logContext\n          });\n        }\n        // is it already published? if so skip\n        let existingPublication;\n        _this2.trackPublications.forEach(publication => {\n          if (!publication.track) {\n            return;\n          }\n          if (publication.track === track) {\n            existingPublication = publication;\n          }\n        });\n        if (existingPublication) {\n          _this2.log.warn('track has already been published, skipping', getLogContextFromTrack(existingPublication));\n          return existingPublication;\n        }\n        const opts = Object.assign(Object.assign({}, _this2.roomOptions.publishDefaults), options);\n        const isStereoInput = 'channelCount' in track.mediaStreamTrack.getSettings() &&\n        // @ts-ignore `channelCount` on getSettings() is currently only available for Safari, but is generally the best way to determine a stereo track https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/channelCount\n        track.mediaStreamTrack.getSettings().channelCount === 2 || track.mediaStreamTrack.getConstraints().channelCount === 2;\n        const isStereo = (_b = opts.forceStereo) !== null && _b !== void 0 ? _b : isStereoInput;\n        // disable dtx for stereo track if not enabled explicitly\n        if (isStereo) {\n          if (opts.dtx === undefined) {\n            _this2.log.debug(\"Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.\", getLogContextFromTrack(track));\n          }\n          if (opts.red === undefined) {\n            _this2.log.debug(\"Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.\");\n          }\n          (_c = opts.dtx) !== null && _c !== void 0 ? _c : opts.dtx = false;\n          (_d = opts.red) !== null && _d !== void 0 ? _d : opts.red = false;\n        }\n        if (!isE2EESimulcastSupported() && _this2.roomOptions.e2ee) {\n          _this2.log.info(\"End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2\");\n          opts.simulcast = false;\n        }\n        if (opts.source) {\n          track.source = opts.source;\n        }\n        const publishPromise = new Promise((resolve, reject) => __awaiter(_this2, void 0, void 0, function* () {\n          try {\n            if (this.engine.client.currentState !== SignalConnectionState.CONNECTED) {\n              this.log.debug('deferring track publication until signal is connected', {\n                track: getLogContextFromTrack(track)\n              });\n              let publicationTimedOut = false;\n              const timeout = setTimeout(() => {\n                publicationTimedOut = true;\n                track.stop();\n                reject(new PublishTrackError('publishing rejected as engine not connected within timeout', 408));\n              }, 15000);\n              yield this.waitUntilEngineConnected();\n              clearTimeout(timeout);\n              if (publicationTimedOut) {\n                return;\n              }\n              const publication = yield this.publish(track, opts, isStereo);\n              resolve(publication);\n            } else {\n              try {\n                const publication = yield this.publish(track, opts, isStereo);\n                resolve(publication);\n              } catch (e) {\n                reject(e);\n              }\n            }\n          } catch (e) {\n            reject(e);\n          }\n        }));\n        _this2.pendingPublishPromises.set(track, publishPromise);\n        try {\n          const publication = yield publishPromise;\n          return publication;\n        } catch (e) {\n          if (!hasRetriedAfterNegotiationError && e instanceof NegotiationError) {\n            _this2.log.warn('negotiation due to track publish failed, retrying after reconnect', {\n              error: e\n            });\n            _this2.pendingPublishPromises.delete(track);\n            yield _this2.waitForNextEngineRestart();\n            return yield _this2.publishOrRepublishTrack(track, options, isRepublish, true);\n          }\n          throw e;\n        } finally {\n          _this2.pendingPublishPromises.delete(track);\n        }\n      }();\n    });\n  }\n  waitUntilEngineConnected() {\n    if (!this.signalConnectedFuture) {\n      this.signalConnectedFuture = new Future();\n    }\n    return this.signalConnectedFuture.promise;\n  }\n  hasPermissionsToPublish(track) {\n    if (!this.permissions) {\n      this.log.warn('no permissions present for publishing track', getLogContextFromTrack(track));\n      return false;\n    }\n    const _this$permissions = this.permissions,\n      canPublish = _this$permissions.canPublish,\n      canPublishSources = _this$permissions.canPublishSources;\n    if (canPublish && (canPublishSources.length === 0 || canPublishSources.map(source => getTrackSourceFromProto(source)).includes(track.source))) {\n      return true;\n    }\n    this.log.warn('insufficient permissions to publish', getLogContextFromTrack(track));\n    return false;\n  }\n  publish(track, opts, isStereo) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n      if (!this.hasPermissionsToPublish(track)) {\n        throw new PublishTrackError('failed to publish track, insufficient permissions', 403);\n      }\n      const existingTrackOfSource = Array.from(this.trackPublications.values()).find(publishedTrack => isLocalTrack(track) && publishedTrack.source === track.source);\n      if (existingTrackOfSource && track.source !== Track.Source.Unknown) {\n        this.log.info(\"publishing a second track with the same source: \".concat(track.source), getLogContextFromTrack(track));\n      }\n      if (opts.stopMicTrackOnMute && isAudioTrack(track)) {\n        track.stopOnMute = true;\n      }\n      if (track.source === Track.Source.ScreenShare && isFireFox()) {\n        // Firefox does not work well with simulcasted screen share\n        // we frequently get no data on layer 0 when enabled\n        opts.simulcast = false;\n      }\n      // require full AV1/VP9 SVC support prior to using it\n      if (opts.videoCodec === 'av1' && !supportsAV1()) {\n        opts.videoCodec = undefined;\n      }\n      if (opts.videoCodec === 'vp9' && !supportsVP9()) {\n        opts.videoCodec = undefined;\n      }\n      if (opts.videoCodec === undefined) {\n        opts.videoCodec = defaultVideoCodec;\n      }\n      if (this.enabledPublishVideoCodecs.length > 0) {\n        // fallback to a supported codec if it is not supported\n        if (!this.enabledPublishVideoCodecs.some(c => opts.videoCodec === mimeTypeToVideoCodecString(c.mime))) {\n          opts.videoCodec = mimeTypeToVideoCodecString(this.enabledPublishVideoCodecs[0].mime);\n        }\n      }\n      const videoCodec = opts.videoCodec;\n      // handle track actions\n      track.on(TrackEvent.Muted, this.onTrackMuted);\n      track.on(TrackEvent.Unmuted, this.onTrackUnmuted);\n      track.on(TrackEvent.Ended, this.handleTrackEnded);\n      track.on(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n      track.on(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n      track.on(TrackEvent.AudioTrackFeatureUpdate, this.onTrackFeatureUpdate);\n      const audioFeatures = [];\n      const disableDtx = !((_a = opts.dtx) !== null && _a !== void 0 ? _a : true);\n      const settings = track.getSourceTrackSettings();\n      if (settings.autoGainControl) {\n        audioFeatures.push(AudioTrackFeature.TF_AUTO_GAIN_CONTROL);\n      }\n      if (settings.echoCancellation) {\n        audioFeatures.push(AudioTrackFeature.TF_ECHO_CANCELLATION);\n      }\n      if (settings.noiseSuppression) {\n        audioFeatures.push(AudioTrackFeature.TF_NOISE_SUPPRESSION);\n      }\n      if (settings.channelCount && settings.channelCount > 1) {\n        audioFeatures.push(AudioTrackFeature.TF_STEREO);\n      }\n      if (disableDtx) {\n        audioFeatures.push(AudioTrackFeature.TF_NO_DTX);\n      }\n      if (isLocalAudioTrack(track) && track.hasPreConnectBuffer) {\n        audioFeatures.push(AudioTrackFeature.TF_PRECONNECT_BUFFER);\n      }\n      const packetTrailerFeatures = this.normalizeRequestedFrameMetadataOptions(track, opts);\n      // create track publication from track\n      const req = new AddTrackRequest({\n        // get local track id for use during publishing\n        cid: track.mediaStreamTrack.id,\n        name: opts.name,\n        type: Track.kindToProto(track.kind),\n        muted: track.isMuted,\n        source: Track.sourceToProto(track.source),\n        disableDtx,\n        encryption: this.encryptionType,\n        stereo: isStereo,\n        disableRed: this.isE2EEEnabled || !((_b = opts.red) !== null && _b !== void 0 ? _b : true),\n        stream: opts === null || opts === void 0 ? void 0 : opts.stream,\n        backupCodecPolicy: opts === null || opts === void 0 ? void 0 : opts.backupCodecPolicy,\n        audioFeatures,\n        packetTrailerFeatures\n      });\n      // compute encodings and layers for video\n      let encodings;\n      if (track.kind === Track.Kind.Video) {\n        let dims;\n        try {\n          dims = yield track.waitForDimensions();\n        } catch (e) {\n          // use defaults, it's quite painful for congestion control without simulcast\n          // so using default dims according to publish settings\n          const defaultRes = (_d = (_c = this.roomOptions.videoCaptureDefaults) === null || _c === void 0 ? void 0 : _c.resolution) !== null && _d !== void 0 ? _d : VideoPresets.h720.resolution;\n          dims = {\n            width: defaultRes.width,\n            height: defaultRes.height\n          };\n          // log failure\n          this.log.error('could not determine track dimensions, using defaults', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n            dims\n          }));\n        }\n        // width and height should be defined for video\n        req.width = dims.width;\n        req.height = dims.height;\n        // for svc codecs, disable simulcast and use vp8 for backup codec\n        if (isLocalVideoTrack(track)) {\n          if (isSVCCodec(videoCodec)) {\n            if (track.source === Track.Source.ScreenShare) {\n              // vp9 svc with screenshare cannot encode multiple spatial layers\n              // doing so reduces publish resolution to minimal resolution\n              opts.scalabilityMode = 'L1T3';\n              // Chrome does not allow more than 5 fps with L1T3, and it has encoding bugs with L3T3\n              // It has a different path for screenshare handling and it seems to be untested/buggy\n              // As a workaround, we are setting contentHint to force it to go through the same\n              // path as regular camera video. While this is not optimal, it delivers the performance\n              // that we need\n              if ('contentHint' in track.mediaStreamTrack) {\n                track.mediaStreamTrack.contentHint = 'motion';\n                this.log.debug('forcing contentHint to motion for screenshare with SVC codecs', getLogContextFromTrack(track));\n              }\n            }\n            // set scalabilityMode to 'L3T3_KEY' by default\n            opts.scalabilityMode = (_e = opts.scalabilityMode) !== null && _e !== void 0 ? _e : 'L3T3_KEY';\n          }\n          req.simulcastCodecs = [new SimulcastCodec({\n            codec: videoCodec,\n            cid: track.mediaStreamTrack.id\n          })];\n          // set up backup\n          if (opts.backupCodec === true) {\n            opts.backupCodec = {\n              codec: defaultVideoCodec\n            };\n          }\n          if (opts.backupCodec && videoCodec !== opts.backupCodec.codec &&\n          // TODO remove this once e2ee is supported for backup codecs\n          req.encryption === Encryption_Type.NONE) {\n            // multi-codec simulcast requires dynacast\n            if (!this.roomOptions.dynacast) {\n              this.roomOptions.dynacast = true;\n            }\n            req.simulcastCodecs.push(new SimulcastCodec({\n              codec: opts.backupCodec.codec,\n              cid: ''\n            }));\n          }\n        }\n        encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts);\n        req.layers = videoLayersFromEncodings(req.width, req.height, encodings, isSVCCodec(opts.videoCodec));\n      } else if (track.kind === Track.Kind.Audio) {\n        encodings = [{\n          maxBitrate: (_f = opts.audioPreset) === null || _f === void 0 ? void 0 : _f.maxBitrate,\n          priority: (_h = (_g = opts.audioPreset) === null || _g === void 0 ? void 0 : _g.priority) !== null && _h !== void 0 ? _h : 'high',\n          networkPriority: (_k = (_j = opts.audioPreset) === null || _j === void 0 ? void 0 : _j.priority) !== null && _k !== void 0 ? _k : 'high'\n        }];\n      }\n      if (!this.engine || this.engine.isClosed) {\n        throw new UnexpectedConnectionState('cannot publish track when not connected');\n      }\n      const negotiate = () => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b, _c;\n        if (!this.engine.pcManager) {\n          throw new UnexpectedConnectionState('pcManager is not ready');\n        }\n        track.sender = yield this.engine.createSender(track, opts, encodings);\n        if (isLocalVideoTrack(track)) {\n          track.publishOptions = opts;\n        }\n        this.emit(ParticipantEvent.LocalSenderCreated, track.sender, track);\n        if (isLocalVideoTrack(track)) {\n          (_a = opts.degradationPreference) !== null && _a !== void 0 ? _a : opts.degradationPreference = getDefaultDegradationPreference(track);\n          track.setDegradationPreference(opts.degradationPreference);\n        }\n        if (encodings) {\n          if (isFireFox() && track.kind === Track.Kind.Audio) {\n            /* Refer to RFC https://datatracker.ietf.org/doc/html/rfc7587#section-6.1,\n               livekit-server uses maxaveragebitrate=510000 in the answer sdp to permit client to\n               publish high quality audio track. But firefox always uses this value as the actual\n               bitrates, causing the audio bitrates to rise to 510Kbps in any stereo case unexpectedly.\n               So the client need to modify maxaverragebitrates in answer sdp to user provided value to\n               fix the issue.\n             */\n            let trackTransceiver = undefined;\n            for (const transceiver of this.engine.pcManager.publisher.getTransceivers()) {\n              if (transceiver.sender === track.sender) {\n                trackTransceiver = transceiver;\n                break;\n              }\n            }\n            if (trackTransceiver) {\n              this.engine.pcManager.publisher.setTrackCodecBitrate({\n                transceiver: trackTransceiver,\n                codec: 'opus',\n                maxbr: ((_b = encodings[0]) === null || _b === void 0 ? void 0 : _b.maxBitrate) ? encodings[0].maxBitrate / 1000 : 0\n              });\n            }\n          } else if (track.codec && isSVCCodec(track.codec) && ((_c = encodings[0]) === null || _c === void 0 ? void 0 : _c.maxBitrate)) {\n            this.engine.pcManager.publisher.setTrackCodecBitrate({\n              cid: req.cid,\n              codec: track.codec,\n              maxbr: encodings[0].maxBitrate / 1000\n            });\n          }\n        }\n        yield this.engine.negotiate();\n      });\n      let ti;\n      const addTrackPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        var _a;\n        try {\n          ti = yield this.engine.addTrack(req);\n          resolve(ti);\n        } catch (err) {\n          if (track.sender && ((_a = this.engine.pcManager) === null || _a === void 0 ? void 0 : _a.publisher)) {\n            try {\n              this.engine.pcManager.publisher.removeTrack(track.sender);\n            } catch (e) {\n              this.log.error(e);\n            }\n            yield this.engine.negotiate().catch(negotiateErr => {\n              this.log.error('failed to negotiate after removing track due to failed add track request', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n                error: negotiateErr\n              }));\n            });\n          }\n          reject(err);\n        }\n      }));\n      if (this.enabledPublishVideoCodecs.length > 0 && packetTrailerFeatures.length === 0) {\n        const rets = yield Promise.all([addTrackPromise, negotiate()]);\n        ti = rets[0];\n      } else {\n        ti = yield addTrackPromise;\n        // server might not support the codec the client has requested, in that case, fallback\n        // to a supported codec\n        let primaryCodecMime;\n        ti.codecs.forEach(codec => {\n          if (primaryCodecMime === undefined) {\n            primaryCodecMime = codec.mimeType;\n          }\n        });\n        if (primaryCodecMime && track.kind === Track.Kind.Video) {\n          const updatedCodec = mimeTypeToVideoCodecString(primaryCodecMime);\n          if (updatedCodec !== videoCodec) {\n            this.log.debug('falling back to server selected codec', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n              codec: updatedCodec\n            }));\n            opts.videoCodec = updatedCodec;\n            // recompute encodings since bitrates/etc could have changed\n            encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts);\n          }\n        }\n        yield negotiate();\n      }\n      const publication = new LocalTrackPublication(track.kind, ti, track, {\n        loggerName: this.roomOptions.loggerName,\n        loggerContextCb: () => this.logContext\n      });\n      publication.on(TrackEvent.CpuConstrained, constrainedTrack => this.onTrackCpuConstrained(constrainedTrack, publication));\n      // save options for when it needs to be republished again\n      publication.options = opts;\n      track.sid = ti.sid;\n      // keep publish options on the video track so that it can recompute encoding\n      // parameters when the MediaStreamTrack is restarted (e.g. after switching cameras).\n      // Seed the dimensions we encoded at publish time so the first no-op restart\n      // (e.g. unmute with unchanged constraints) can skip the recompute.\n      if (isLocalVideoTrack(track)) {\n        track.publishOptions = opts;\n        if (req.width && req.height) {\n          track.lastEncodedDimensions = {\n            width: req.width,\n            height: req.height\n          };\n        }\n      }\n      this.log.debug(\"publishing \".concat(track.kind, \" with encodings\"), {\n        encodings,\n        trackInfo: ti\n      });\n      if (isLocalVideoTrack(track)) {\n        track.startMonitor(this.engine.client);\n      } else if (isLocalAudioTrack(track)) {\n        track.startMonitor();\n      }\n      this.addTrackPublication(publication);\n      // send event for publication\n      this.emit(ParticipantEvent.LocalTrackPublished, publication);\n      if (isLocalAudioTrack(track) && ti.audioFeatures.includes(AudioTrackFeature.TF_PRECONNECT_BUFFER)) {\n        const stream = track.getPreConnectBuffer();\n        const mimeType = track.getPreConnectBufferMimeType();\n        // TODO: we're registering the listener after negotiation, so there might be a race\n        this.on(ParticipantEvent.LocalTrackSubscribed, pub => {\n          if (pub.trackSid === ti.sid) {\n            if (!track.hasPreConnectBuffer) {\n              this.log.warn('subscribe event came to late, buffer already closed');\n              return;\n            }\n            this.log.debug('finished recording preconnect buffer', getLogContextFromTrack(track));\n            track.stopPreConnectBuffer();\n          }\n        });\n        if (stream) {\n          const bufferStreamPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n            var _a, e_2, _b, _c;\n            var _d, _e;\n            try {\n              this.log.debug('waiting for agent', getLogContextFromTrack(track));\n              const agentActiveTimeout = setTimeout(() => {\n                reject(new Error('agent not active within 10 seconds'));\n              }, 10000);\n              const agent = yield this.waitUntilActiveAgentPresent();\n              clearTimeout(agentActiveTimeout);\n              this.log.debug('sending preconnect buffer', getLogContextFromTrack(track));\n              const writer = yield this.streamBytes({\n                name: 'preconnect-buffer',\n                mimeType,\n                topic: 'lk.agent.pre-connect-audio-buffer',\n                destinationIdentities: [agent.identity],\n                attributes: {\n                  trackId: publication.trackSid,\n                  sampleRate: String((_d = settings.sampleRate) !== null && _d !== void 0 ? _d : '48000'),\n                  channels: String((_e = settings.channelCount) !== null && _e !== void 0 ? _e : '1')\n                }\n              });\n              try {\n                for (var _f = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield stream_1.next(), _a = stream_1_1.done, !_a; _f = true) {\n                  _c = stream_1_1.value;\n                  _f = false;\n                  const chunk = _c;\n                  yield writer.write(chunk);\n                }\n              } catch (e_2_1) {\n                e_2 = {\n                  error: e_2_1\n                };\n              } finally {\n                try {\n                  if (!_f && !_a && (_b = stream_1.return)) yield _b.call(stream_1);\n                } finally {\n                  if (e_2) throw e_2.error;\n                }\n              }\n              yield writer.close();\n              resolve();\n            } catch (e) {\n              reject(e);\n            }\n          }));\n          bufferStreamPromise.then(() => {\n            this.log.debug('preconnect buffer sent successfully', getLogContextFromTrack(track));\n          }).catch(e => {\n            this.log.error('error sending preconnect buffer', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n              error: e\n            }));\n          });\n        }\n      }\n      return publication;\n    });\n  }\n  canPublishFrameMetadata() {\n    var _a;\n    return !!(this.roomOptions.e2ee || this.roomOptions.encryption || isFrameMetadataSupported((_a = this.roomOptions.frameMetadata) !== null && _a !== void 0 ? _a : this.roomOptions.packetTrailer));\n  }\n  normalizeRequestedFrameMetadataOptions(track, opts) {\n    var _a;\n    const fmOpts = (_a = opts.frameMetadata) !== null && _a !== void 0 ? _a : opts.packetTrailer;\n    if (track.kind !== Track.Kind.Video || !hasFrameMetadataPublishOptions(fmOpts)) {\n      opts.frameMetadata = undefined;\n      opts.packetTrailer = undefined;\n      return [];\n    }\n    if (!this.canPublishFrameMetadata()) {\n      this.log.warn('frame metadata transform not supported; not advertising features', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n      opts.frameMetadata = undefined;\n      opts.packetTrailer = undefined;\n      return [];\n    }\n    const features = getFrameMetadataFeatures(fmOpts);\n    const normalized = getFrameMetadataPublishOptions(features);\n    opts.frameMetadata = normalized;\n    opts.packetTrailer = normalized;\n    return features;\n  }\n  get isLocal() {\n    return true;\n  }\n  /** @internal\n   * publish additional codec to existing track\n   */\n  publishAdditionalCodecForTrack(track, videoCodec, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      // TODO remove once e2ee is supported for backup tracks\n      if (this.encryptionType !== Encryption_Type.NONE) {\n        return;\n      }\n      // is it not published? if so skip\n      let existingPublication;\n      this.trackPublications.forEach(publication => {\n        if (!publication.track) {\n          return;\n        }\n        if (publication.track === track) {\n          existingPublication = publication;\n        }\n      });\n      if (!existingPublication) {\n        throw new TrackInvalidError('track is not published');\n      }\n      if (!isLocalVideoTrack(track)) {\n        throw new TrackInvalidError('track is not a video track');\n      }\n      const opts = Object.assign(Object.assign({}, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.publishDefaults), options);\n      const encodings = computeTrackBackupEncodings(track, videoCodec, opts);\n      if (!encodings) {\n        this.log.info(\"backup codec has been disabled, ignoring request to add additional codec for track\", getLogContextFromTrack(track));\n        return;\n      }\n      const simulcastTrack = track.addSimulcastTrack(videoCodec, encodings);\n      if (!simulcastTrack) {\n        return;\n      }\n      const packetTrailerFeatures = this.normalizeRequestedFrameMetadataOptions(track, opts);\n      const req = new AddTrackRequest({\n        cid: simulcastTrack.mediaStreamTrack.id,\n        type: Track.kindToProto(track.kind),\n        muted: track.isMuted,\n        source: Track.sourceToProto(track.source),\n        sid: track.sid,\n        packetTrailerFeatures,\n        simulcastCodecs: [{\n          codec: opts.videoCodec,\n          cid: simulcastTrack.mediaStreamTrack.id\n        }]\n      });\n      req.layers = videoLayersFromEncodings(req.width, req.height, encodings);\n      if (!this.engine || this.engine.isClosed) {\n        throw new UnexpectedConnectionState('cannot publish track when not connected');\n      }\n      const negotiate = () => __awaiter(this, void 0, void 0, function* () {\n        yield this.engine.createSimulcastSender(track, simulcastTrack, opts, encodings);\n        yield this.engine.negotiate();\n      });\n      const rets = yield Promise.all([this.engine.addTrack(req), negotiate()]);\n      const ti = rets[0];\n      this.log.debug(\"published \".concat(videoCodec, \" for track \").concat(track.sid), {\n        encodings,\n        trackInfo: ti\n      });\n    });\n  }\n  unpublishTrack(track, stopOnUnpublish) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (isLocalTrack(track)) {\n        const publishPromise = this.pendingPublishPromises.get(track);\n        if (publishPromise) {\n          this.log.debug('awaiting publish promise before attempting to unpublish', getLogContextFromTrack(track));\n          yield publishPromise;\n        }\n      }\n      // look through all published tracks to find the right ones\n      const publication = this.getPublicationForTrack(track);\n      const pubLogContext = publication ? getLogContextFromTrack(publication) : undefined;\n      this.log.info('unpublishing track', pubLogContext);\n      if (!publication || !publication.track) {\n        this.log.warn('track was not unpublished because no publication was found', pubLogContext);\n        return undefined;\n      }\n      track = publication.track;\n      track.off(TrackEvent.Muted, this.onTrackMuted);\n      track.off(TrackEvent.Unmuted, this.onTrackUnmuted);\n      track.off(TrackEvent.Ended, this.handleTrackEnded);\n      track.off(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n      track.off(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n      track.off(TrackEvent.AudioTrackFeatureUpdate, this.onTrackFeatureUpdate);\n      if (stopOnUnpublish === undefined) {\n        stopOnUnpublish = (_b = (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.stopLocalTrackOnUnpublish) !== null && _b !== void 0 ? _b : true;\n      }\n      if (stopOnUnpublish) {\n        track.stop();\n      } else {\n        track.stopMonitor();\n      }\n      let negotiationNeeded = false;\n      const trackSender = track.sender;\n      track.sender = undefined;\n      if (this.engine.pcManager && this.engine.pcManager.currentState < PCTransportState.FAILED && trackSender) {\n        try {\n          for (const transceiver of this.engine.pcManager.publisher.getTransceivers()) {\n            // if sender is not currently sending (after replaceTrack(null))\n            // removeTrack would have no effect.\n            // to ensure we end up successfully removing the track, manually set\n            // the transceiver to inactive\n            if (transceiver.sender === trackSender) {\n              transceiver.direction = 'inactive';\n              negotiationNeeded = true;\n            }\n          }\n          try {\n            negotiationNeeded = this.engine.removeTrack(trackSender);\n          } catch (e) {\n            this.log.warn(e);\n            negotiationNeeded = true;\n          }\n          if (isLocalVideoTrack(track)) {\n            for (const _ref4 of track.simulcastCodecs) {\n              var _ref5 = _slicedToArray(_ref4, 2);\n              const trackInfo = _ref5[1];\n              if (trackInfo.sender) {\n                try {\n                  negotiationNeeded = this.engine.removeTrack(trackInfo.sender);\n                } catch (e) {\n                  this.log.warn(e);\n                  negotiationNeeded = true;\n                }\n                trackInfo.sender = undefined;\n              }\n            }\n            track.simulcastCodecs.clear();\n          }\n        } catch (e) {\n          this.log.warn('failed to unpublish track', Object.assign(Object.assign({}, pubLogContext), {\n            error: e\n          }));\n        }\n      }\n      // remove from our maps\n      this.trackPublications.delete(publication.trackSid);\n      switch (publication.kind) {\n        case Track.Kind.Audio:\n          this.audioTrackPublications.delete(publication.trackSid);\n          break;\n        case Track.Kind.Video:\n          this.videoTrackPublications.delete(publication.trackSid);\n          break;\n      }\n      this.emit(ParticipantEvent.LocalTrackUnpublished, publication);\n      publication.setTrack(undefined);\n      if (negotiationNeeded) {\n        yield this.engine.negotiate();\n      }\n      return publication;\n    });\n  }\n  unpublishTracks(tracks) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const results = yield Promise.all(tracks.map(track => this.unpublishTrack(track)));\n      return results.filter(track => !!track);\n    });\n  }\n  republishAllTracks(options_1) {\n    return __awaiter(this, arguments, void 0, function (options) {\n      var _this3 = this;\n      let restartTracks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        if (_this3.republishPromise) {\n          yield _this3.republishPromise;\n        }\n        _this3.republishPromise = new TypedPromise((resolve, reject) => __awaiter(_this3, void 0, void 0, function* () {\n          try {\n            const localPubs = [];\n            this.trackPublications.forEach(pub => {\n              if (pub.track) {\n                if (options) {\n                  pub.options = Object.assign(Object.assign({}, pub.options), options);\n                }\n                localPubs.push(pub);\n              }\n            });\n            yield Promise.all(localPubs.map(pub => __awaiter(this, void 0, void 0, function* () {\n              const track = pub.track;\n              yield this.unpublishTrack(track, false);\n              if (restartTracks && !track.isMuted && track.source !== Track.Source.ScreenShare && track.source !== Track.Source.ScreenShareAudio && (isLocalAudioTrack(track) || isLocalVideoTrack(track)) && !track.isUserProvided) {\n                // generally we need to restart the track before publishing, often a full reconnect\n                // is necessary because computer had gone to sleep.\n                this.log.debug('restarting existing track', {\n                  track: pub.trackSid\n                });\n                yield track.restartTrack();\n              }\n              yield this.publishOrRepublishTrack(track, pub.options, true);\n            })));\n            resolve();\n          } catch (error) {\n            if (error instanceof Error) {\n              reject(error);\n            } else {\n              reject(new Error(String(error)));\n            }\n          } finally {\n            this.republishPromise = undefined;\n          }\n        }));\n        yield _this3.republishPromise;\n      }();\n    });\n  }\n  /**\n   * Publish a new data payload to the room. Data will be forwarded to each\n   * participant in the room if the destination field in publishOptions is empty\n   *\n   * @param data Uint8Array of the payload. To send string data, use TextEncoder.encode\n   * @param options optionally specify a `reliable`, `topic` and `destination`\n   */\n  publishData(data_1) {\n    return __awaiter(this, arguments, void 0, function (data) {\n      var _this4 = this;\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return function* () {\n        const kind = options.reliable ? DataChannelKind.RELIABLE : DataChannelKind.LOSSY;\n        const dataPacketKind = options.reliable ? DataPacket_Kind.RELIABLE : DataPacket_Kind.LOSSY;\n        const destinationIdentities = options.destinationIdentities;\n        const topic = options.topic;\n        let userPacket = new UserPacket({\n          participantIdentity: _this4.identity,\n          payload: data,\n          destinationIdentities,\n          topic\n        });\n        const packet = new DataPacket({\n          kind: dataPacketKind,\n          value: {\n            case: 'user',\n            value: userPacket\n          }\n        });\n        yield _this4.engine.sendDataPacket(packet, kind);\n      }();\n    });\n  }\n  /**\n   * Publish SIP DTMF message to the room.\n   *\n   * @param code DTMF code\n   * @param digit DTMF digit\n   */\n  publishDtmf(code, digit) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const packet = new DataPacket({\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'sipDtmf',\n          value: new SipDTMF({\n            code: code,\n            digit: digit\n          })\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n    });\n  }\n  /** @deprecated Consider migrating to {@link sendText} */\n  sendChatMessage(text, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const msg = {\n        id: crypto.randomUUID(),\n        message: text,\n        timestamp: Date.now(),\n        attachedFiles: options === null || options === void 0 ? void 0 : options.attachments\n      };\n      const packet = new DataPacket({\n        value: {\n          case: 'chatMessage',\n          value: new ChatMessage(Object.assign(Object.assign({}, msg), {\n            timestamp: protoInt64.parse(msg.timestamp)\n          }))\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n      this.emit(ParticipantEvent.ChatMessage, msg);\n      return msg;\n    });\n  }\n  /** @deprecated Consider migrating to {@link sendText} */\n  editChatMessage(editText, originalMessage) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const msg = Object.assign(Object.assign({}, originalMessage), {\n        message: editText,\n        editTimestamp: Date.now()\n      });\n      const packet = new DataPacket({\n        value: {\n          case: 'chatMessage',\n          value: new ChatMessage(Object.assign(Object.assign({}, msg), {\n            timestamp: protoInt64.parse(msg.timestamp),\n            editTimestamp: protoInt64.parse(msg.editTimestamp)\n          }))\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n      this.emit(ParticipantEvent.ChatMessage, msg);\n      return msg;\n    });\n  }\n  /**\n   * Sends the given string to participants in the room via the data channel.\n   * For longer messages, consider using {@link streamText} instead.\n   *\n   * @param text The text payload\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   */\n  sendText(text, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.sendText(text, options);\n    });\n  }\n  /**\n   * Creates a new TextStreamWriter which can be used to stream text incrementally\n   * to participants in the room via the data channel.\n   *\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   *\n   * @internal\n   * @experimental CAUTION, might get removed in a minor release\n   */\n  streamText(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.streamText(options);\n    });\n  }\n  /** Send a File to all participants in the room via the data channel.\n   * @param file The File object payload\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   * @param options.onProgress A callback function used to monitor the upload progress percentage.\n   */\n  sendFile(file, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.sendFile(file, options);\n    });\n  }\n  /**\n   * Stream bytes incrementally to participants in the room via the data channel.\n   * For sending files, consider using {@link sendFile} instead.\n   *\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   */\n  streamBytes(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.streamBytes(options);\n    });\n  }\n  /**\n   * Initiate an RPC call to a remote participant\n   * @param params - Parameters for initiating the RPC call, see {@link PerformRpcParams}\n   * @returns A promise that resolves with the response payload or rejects with an error.\n   * @throws Error on failure. Details in `message`.\n   */\n  performRpc(params) {\n    return this.rpcClientManager.performRpc(params).then(_ref6 => {\n      let _ref7 = _slicedToArray(_ref6, 2);\n        _ref7[0];\n        let completionPromise = _ref7[1];\n      return completionPromise;\n    });\n  }\n  /**\n   * @deprecated use `room.registerRpcMethod` instead\n   */\n  registerRpcMethod(method, handler) {\n    this.rpcServerManager.registerRpcMethod(method, handler);\n  }\n  /**\n   * @deprecated use `room.unregisterRpcMethod` instead\n   */\n  unregisterRpcMethod(method) {\n    this.rpcServerManager.unregisterRpcMethod(method);\n  }\n  /**\n   * Control who can subscribe to LocalParticipant's published tracks.\n   *\n   * By default, all participants can subscribe. This allows fine-grained control over\n   * who is able to subscribe at a participant and track level.\n   *\n   * Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and\n   * [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks\n   * will not grant permissions to any participants and will require a subsequent\n   * permissions update to allow subscription.\n   *\n   * @param allParticipantsAllowed Allows all participants to subscribe all tracks.\n   *  Takes precedence over [[participantTrackPermissions]] if set to true.\n   *  By default this is set to true.\n   * @param participantTrackPermissions Full list of individual permissions per\n   *  participant/track. Any omitted participants will not receive any permissions.\n   */\n  setTrackSubscriptionPermissions(allParticipantsAllowed) {\n    let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    this.participantTrackPermissions = participantTrackPermissions;\n    this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;\n    if (!this.engine.client.isDisconnected) {\n      this.updateTrackSubscriptionPermissions();\n    }\n  }\n  /** @internal */\n  setEnabledPublishCodecs(codecs) {\n    this.enabledPublishVideoCodecs = codecs.filter(c => c.mime.split('/')[0].toLowerCase() === 'video');\n  }\n  /** @internal */\n  updateInfo(info) {\n    if (!super.updateInfo(info)) {\n      return false;\n    }\n    // reconcile track mute status.\n    // if server's track mute status doesn't match actual, we'll have to update\n    // the server's copy\n    info.tracks.forEach(ti => {\n      var _a, _b;\n      const pub = this.trackPublications.get(ti.sid);\n      if (pub) {\n        const mutedOnServer = pub.isMuted || ((_b = (_a = pub.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused) !== null && _b !== void 0 ? _b : false);\n        if (mutedOnServer !== ti.muted) {\n          this.log.debug('updating server mute state after reconcile', Object.assign(Object.assign({}, getLogContextFromTrack(pub)), {\n            mutedOnServer\n          }));\n          this.engine.client.sendMuteTrack(ti.sid, mutedOnServer);\n        }\n      }\n    });\n    return true;\n  }\n  /** @internal */\n  setActiveAgent(agent) {\n    var _a, _b, _c, _d;\n    this.firstActiveAgent = agent;\n    if (agent && !this.firstActiveAgent) {\n      this.firstActiveAgent = agent;\n    }\n    if (agent) {\n      (_b = (_a = this.activeAgentFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a, agent);\n    } else {\n      (_d = (_c = this.activeAgentFuture) === null || _c === void 0 ? void 0 : _c.reject) === null || _d === void 0 ? void 0 : _d.call(_c, new Error('Agent disconnected'));\n    }\n    this.activeAgentFuture = undefined;\n  }\n  waitUntilActiveAgentPresent() {\n    if (this.firstActiveAgent) {\n      return Promise.resolve(this.firstActiveAgent);\n    }\n    if (!this.activeAgentFuture) {\n      this.activeAgentFuture = new Future();\n    }\n    return this.activeAgentFuture.promise;\n  }\n  getPublicationForTrack(track) {\n    let publication;\n    this.trackPublications.forEach(pub => {\n      const localTrack = pub.track;\n      if (!localTrack) {\n        return;\n      }\n      // this looks overly complicated due to this object tree\n      if (track instanceof MediaStreamTrack) {\n        if (isLocalAudioTrack(localTrack) || isLocalVideoTrack(localTrack)) {\n          if (localTrack.mediaStreamTrack === track) {\n            publication = pub;\n          }\n        }\n      } else if (track === localTrack) {\n        publication = pub;\n      }\n    });\n    return publication;\n  }\n  waitForPendingPublicationOfSource(source) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const waitForPendingTimeout = 10000;\n      const startTime = Date.now();\n      while (Date.now() < startTime + waitForPendingTimeout) {\n        const publishPromiseEntry = Array.from(this.pendingPublishPromises.entries()).find(_ref8 => {\n          let _ref9 = _slicedToArray(_ref8, 1),\n            pendingTrack = _ref9[0];\n          return pendingTrack.source === source;\n        });\n        if (publishPromiseEntry) {\n          return publishPromiseEntry[1];\n        }\n        yield sleep(20);\n      }\n    });\n  }\n  /** Publishes a data track.\n   *\n   * Returns the published data track if successful. Use {@link LocalDataTrack#tryPush}\n   * to send data frames on the track.\n   */\n  publishDataTrack(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const track = new LocalDataTrack(options, this.roomOutgoingDataTrackManager);\n      yield track.publish();\n      return track;\n    });\n  }\n}/** An error which is thrown if a {@link DeferrableMap#getDeferred} call is aborted midway\n * through. */\nclass DeferrableMapAbortError extends DOMException {\n  constructor(message, reason) {\n    super(message, 'AbortError');\n    this.reason = reason;\n  }\n}\n/**\n * A Map-like container keyed by unique strings that supports the ability to wait\n * for future keys to show up in the map.\n *\n * @example\n * // An already existing key:\n * const value = map.get(\"key\");\n * // Wait for a key which will be added soon:\n * const value = await map.getDeferred(\"key\");\n */\nclass DeferrableMap extends Map {\n  constructor() {\n    super(...arguments);\n    this.pending = new Map();\n  }\n  set(key, value) {\n    var _a, _b;\n    super.set(key, value);\n    // Resolve any futures waiting on this key.\n    const futures = (_a = this.pending) === null || _a === void 0 ? void 0 : _a.get(key);\n    if (futures) {\n      for (const future of futures) {\n        if (!future.isResolved) {\n          (_b = future.resolve) === null || _b === void 0 ? void 0 : _b.call(future, value);\n        }\n      }\n      this.pending.delete(key);\n    }\n    return this;\n  }\n  get [Symbol.toStringTag]() {\n    return 'DeferrableMap';\n  }\n  getDeferred(key, signal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const existing = this.get(key);\n      if (typeof existing !== 'undefined') {\n        return existing;\n      }\n      // Bail out immediately if the signal is already aborted.\n      if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n        throw new DeferrableMapAbortError('The operation was aborted.', signal.reason);\n      }\n      const future = new Future(undefined, () => {\n        // Clean up the pending list when the future settles.\n        const futures = this.pending.get(key);\n        if (!futures) {\n          return;\n        }\n        const idx = futures.indexOf(future);\n        if (idx !== -1) {\n          futures.splice(idx, 1);\n        }\n        if (futures.length === 0) {\n          this.pending.delete(key);\n        }\n      });\n      const existingFutures = this.pending.get(key);\n      if (existingFutures) {\n        existingFutures.push(future);\n      } else {\n        this.pending.set(key, [future]);\n      }\n      // If a signal was provided, listen for abort and reject the future.\n      if (signal) {\n        const onAbort = () => {\n          var _a;\n          if (!future.isResolved) {\n            (_a = future.reject) === null || _a === void 0 ? void 0 : _a.call(future, new DeferrableMapAbortError('The operation was aborted.', signal.reason));\n          }\n        };\n        signal.addEventListener('abort', onAbort, {\n          once: true\n        });\n        // Clean up the listener once the future settles (resolved or rejected).\n        future.promise.finally(() => {\n          signal.removeEventListener('abort', onAbort);\n        });\n      }\n      return future.promise;\n    });\n  }\n}class RemoteTrackPublication extends TrackPublication {\n  constructor(kind, ti, autoSubscribe, loggerOptions) {\n    super(kind, ti.sid, ti.name, loggerOptions);\n    this.track = undefined;\n    /** @internal */\n    this.allowed = true;\n    this.requestedDisabled = undefined;\n    this.visible = true;\n    this.handleEnded = track => {\n      this.setTrack(undefined);\n      this.emit(TrackEvent.Ended, track);\n    };\n    this.handleVisibilityChange = visible => {\n      this.log.debug(\"adaptivestream video visibility \".concat(this.trackSid, \", visible=\").concat(visible), this.logContext);\n      this.visible = visible;\n      this.emitTrackUpdate();\n    };\n    this.handleVideoDimensionsChange = dimensions => {\n      this.log.debug(\"adaptivestream video dimensions \".concat(dimensions.width, \"x\").concat(dimensions.height), this.logContext);\n      this.videoDimensionsAdaptiveStream = dimensions;\n      this.emitTrackUpdate();\n    };\n    this.subscribed = autoSubscribe;\n    this.updateInfo(ti);\n  }\n  /**\n   * Subscribe or unsubscribe to this remote track\n   * @param subscribed true to subscribe to a track, false to unsubscribe\n   */\n  setSubscribed(subscribed) {\n    const prevStatus = this.subscriptionStatus;\n    const prevPermission = this.permissionStatus;\n    this.subscribed = subscribed;\n    // reset allowed status when desired subscription state changes\n    // server will notify client via signal message if it's not allowed\n    if (subscribed) {\n      this.allowed = true;\n    }\n    const sub = new UpdateSubscription({\n      trackSids: [this.trackSid],\n      subscribe: this.subscribed,\n      participantTracks: [new ParticipantTracks({\n        // sending an empty participant id since TrackPublication doesn't keep it\n        // this is filled in by the participant that receives this message\n        participantSid: '',\n        trackSids: [this.trackSid]\n      })]\n    });\n    this.emit(TrackEvent.UpdateSubscription, sub);\n    this.emitSubscriptionUpdateIfChanged(prevStatus);\n    this.emitPermissionUpdateIfChanged(prevPermission);\n  }\n  get subscriptionStatus() {\n    if (this.subscribed === false) {\n      return TrackPublication.SubscriptionStatus.Unsubscribed;\n    }\n    if (!super.isSubscribed) {\n      return TrackPublication.SubscriptionStatus.Desired;\n    }\n    return TrackPublication.SubscriptionStatus.Subscribed;\n  }\n  get permissionStatus() {\n    return this.allowed ? TrackPublication.PermissionStatus.Allowed : TrackPublication.PermissionStatus.NotAllowed;\n  }\n  /**\n   * Returns true if track is subscribed, and ready for playback\n   */\n  get isSubscribed() {\n    if (this.subscribed === false) {\n      return false;\n    }\n    return super.isSubscribed;\n  }\n  // returns client's desire to subscribe to a track, also true if autoSubscribe is enabled\n  get isDesired() {\n    return this.subscribed !== false;\n  }\n  get isEnabled() {\n    return this.requestedDisabled !== undefined ? !this.requestedDisabled : this.isAdaptiveStream ? this.visible : true;\n  }\n  get isLocal() {\n    return false;\n  }\n  /**\n   * disable server from sending down data for this track. this is useful when\n   * the participant is off screen, you may disable streaming down their video\n   * to reduce bandwidth requirements\n   * @param enabled\n   */\n  setEnabled(enabled) {\n    if (!this.isManualOperationAllowed() || this.requestedDisabled === !enabled) {\n      return;\n    }\n    this.requestedDisabled = !enabled;\n    this.emitTrackUpdate();\n  }\n  /**\n   * for tracks that support simulcasting, adjust subscribed quality\n   *\n   * This indicates the highest quality the client can accept. if network\n   * bandwidth does not allow, server will automatically reduce quality to\n   * optimize for uninterrupted video\n   */\n  setVideoQuality(quality) {\n    if (!this.isManualOperationAllowed() || this.requestedMaxQuality === quality) {\n      return;\n    }\n    this.requestedMaxQuality = quality;\n    this.requestedVideoDimensions = undefined;\n    this.emitTrackUpdate();\n  }\n  /**\n   * Explicitly set the video dimensions for this track.\n   *\n   * This will take precedence over adaptive stream dimensions.\n   *\n   * @param dimensions The video dimensions to set.\n   */\n  setVideoDimensions(dimensions) {\n    var _a, _b;\n    if (!this.isManualOperationAllowed()) {\n      return;\n    }\n    if (((_a = this.requestedVideoDimensions) === null || _a === void 0 ? void 0 : _a.width) === dimensions.width && ((_b = this.requestedVideoDimensions) === null || _b === void 0 ? void 0 : _b.height) === dimensions.height) {\n      return;\n    }\n    if (isRemoteVideoTrack(this.track)) {\n      this.requestedVideoDimensions = dimensions;\n    }\n    this.requestedMaxQuality = undefined;\n    this.emitTrackUpdate();\n  }\n  setVideoFPS(fps) {\n    if (!this.isManualOperationAllowed()) {\n      return;\n    }\n    if (!isRemoteVideoTrack(this.track)) {\n      return;\n    }\n    if (this.fps === fps) {\n      return;\n    }\n    this.fps = fps;\n    this.emitTrackUpdate();\n  }\n  get videoQuality() {\n    var _a;\n    return (_a = this.requestedMaxQuality) !== null && _a !== void 0 ? _a : VideoQuality.HIGH;\n  }\n  /** @internal */\n  setTrack(track) {\n    const prevStatus = this.subscriptionStatus;\n    const prevPermission = this.permissionStatus;\n    const prevTrack = this.track;\n    if (prevTrack === track) {\n      return;\n    }\n    if (prevTrack) {\n      // unregister listener\n      prevTrack.off(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n      prevTrack.off(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n      prevTrack.off(TrackEvent.Ended, this.handleEnded);\n      prevTrack.detach();\n      prevTrack.stopMonitor();\n      this.emit(TrackEvent.Unsubscribed, prevTrack);\n    }\n    super.setTrack(track);\n    if (track) {\n      track.sid = this.trackSid;\n      track.on(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n      track.on(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n      track.on(TrackEvent.Ended, this.handleEnded);\n      this.emit(TrackEvent.Subscribed, track);\n    }\n    this.emitPermissionUpdateIfChanged(prevPermission);\n    this.emitSubscriptionUpdateIfChanged(prevStatus);\n  }\n  /** @internal */\n  setAllowed(allowed) {\n    const prevStatus = this.subscriptionStatus;\n    const prevPermission = this.permissionStatus;\n    this.allowed = allowed;\n    this.emitPermissionUpdateIfChanged(prevPermission);\n    this.emitSubscriptionUpdateIfChanged(prevStatus);\n  }\n  /** @internal */\n  setSubscriptionError(error) {\n    this.emit(TrackEvent.SubscriptionFailed, error);\n  }\n  /** @internal */\n  updateInfo(info) {\n    super.updateInfo(info);\n    const prevMetadataMuted = this.metadataMuted;\n    this.metadataMuted = info.muted;\n    if (this.track) {\n      this.track.setMuted(info.muted);\n    } else if (prevMetadataMuted !== info.muted) {\n      this.emit(info.muted ? TrackEvent.Muted : TrackEvent.Unmuted);\n    }\n  }\n  emitSubscriptionUpdateIfChanged(previousStatus) {\n    const currentStatus = this.subscriptionStatus;\n    if (previousStatus === currentStatus) {\n      return;\n    }\n    this.emit(TrackEvent.SubscriptionStatusChanged, currentStatus, previousStatus);\n  }\n  emitPermissionUpdateIfChanged(previousPermissionStatus) {\n    const currentPermissionStatus = this.permissionStatus;\n    if (currentPermissionStatus !== previousPermissionStatus) {\n      this.emit(TrackEvent.SubscriptionPermissionChanged, this.permissionStatus, previousPermissionStatus);\n    }\n  }\n  isManualOperationAllowed() {\n    if (!this.isDesired) {\n      this.log.warn('cannot update track settings when not subscribed', this.logContext);\n      return false;\n    }\n    return true;\n  }\n  get isAdaptiveStream() {\n    return isRemoteVideoTrack(this.track) && this.track.isAdaptiveStream;\n  }\n  /* @internal */\n  emitTrackUpdate() {\n    const settings = new UpdateTrackSettings({\n      trackSids: [this.trackSid],\n      disabled: !this.isEnabled,\n      fps: this.fps\n    });\n    if (this.kind === Track.Kind.Video) {\n      let minDimensions = this.requestedVideoDimensions;\n      if (this.videoDimensionsAdaptiveStream !== undefined) {\n        if (minDimensions) {\n          // check whether the adaptive stream dimensions are smaller than the requested dimensions and use smaller one\n          const smallerAdaptive = areDimensionsSmaller(this.videoDimensionsAdaptiveStream, minDimensions);\n          if (smallerAdaptive) {\n            this.log.debug('using adaptive stream dimensions instead of requested', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n            minDimensions = this.videoDimensionsAdaptiveStream;\n          }\n        } else if (this.requestedMaxQuality !== undefined && this.trackInfo) {\n          // check whether adaptive stream dimensions are smaller than the max quality layer and use smaller one\n          const maxQualityLayer = layerDimensionsFor(this.trackInfo, this.requestedMaxQuality);\n          if (maxQualityLayer && areDimensionsSmaller(this.videoDimensionsAdaptiveStream, maxQualityLayer)) {\n            this.log.debug('using adaptive stream dimensions instead of max quality layer', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n            minDimensions = this.videoDimensionsAdaptiveStream;\n          }\n        } else {\n          this.log.debug('using adaptive stream dimensions', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n          minDimensions = this.videoDimensionsAdaptiveStream;\n        }\n      }\n      if (minDimensions) {\n        settings.width = Math.ceil(minDimensions.width);\n        settings.height = Math.ceil(minDimensions.height);\n      } else if (this.requestedMaxQuality !== undefined) {\n        this.log.debug('using requested max quality', Object.assign(Object.assign({}, this.logContext), {\n          quality: this.requestedMaxQuality\n        }));\n        settings.quality = this.requestedMaxQuality;\n      } else {\n        this.log.debug('using default quality', Object.assign(Object.assign({}, this.logContext), {\n          quality: VideoQuality.HIGH\n        }));\n        // defaults to high quality\n        settings.quality = VideoQuality.HIGH;\n      }\n    }\n    this.emit(TrackEvent.UpdateSettings, settings);\n  }\n}class RemoteParticipant extends Participant {\n  /** @internal */\n  static fromParticipantInfo(signalClient, pi, loggerOptions, manager) {\n    return new RemoteParticipant(signalClient, pi.sid, pi.identity, pi.name, pi.metadata, pi.attributes, loggerOptions, pi.kind, pi.dataTracks.map(dti => {\n      const info = DataTrackInfo.from(dti);\n      return new RemoteDataTrack(info, manager, {\n        publisherIdentity: pi.identity\n      });\n    }), pi.clientProtocol);\n  }\n  get logContext() {\n    return Object.assign(Object.assign({}, super.logContext), {\n      remoteParticipantID: this.sid,\n      remoteParticipant: this.identity\n    });\n  }\n  /** @internal */\n  constructor(signalClient, sid, identity, name, metadata, attributes, loggerOptions) {\n    let kind = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : ParticipantInfo_Kind.STANDARD;\n    let remoteDataTracks = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : [];\n    let clientProtocol = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : CLIENT_PROTOCOL_DEFAULT;\n    super(sid, identity || '', name, metadata, attributes, loggerOptions, kind);\n    this.signalClient = signalClient;\n    this.trackPublications = new Map();\n    this.audioTrackPublications = new Map();\n    this.videoTrackPublications = new Map();\n    this.dataTracks = new DeferrableMap(remoteDataTracks.map(remoteDataTrack => {\n      return [remoteDataTrack.info.name, remoteDataTrack];\n    }));\n    this.volumeMap = new Map();\n    this.clientProtocol = clientProtocol;\n  }\n  addTrackPublication(publication) {\n    super.addTrackPublication(publication);\n    // register action events\n    publication.on(TrackEvent.UpdateSettings, settings => {\n      this.log.debug('send update settings', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)), {\n        settings\n      }));\n      this.signalClient.sendUpdateTrackSettings(settings);\n    });\n    publication.on(TrackEvent.UpdateSubscription, sub => {\n      sub.participantTracks.forEach(pt => {\n        pt.participantSid = this.sid;\n      });\n      this.signalClient.sendUpdateSubscription(sub);\n    });\n    publication.on(TrackEvent.SubscriptionPermissionChanged, status => {\n      this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);\n    });\n    publication.on(TrackEvent.SubscriptionStatusChanged, status => {\n      this.emit(ParticipantEvent.TrackSubscriptionStatusChanged, publication, status);\n    });\n    publication.on(TrackEvent.Subscribed, track => {\n      this.emit(ParticipantEvent.TrackSubscribed, track, publication);\n    });\n    publication.on(TrackEvent.Unsubscribed, previousTrack => {\n      this.emit(ParticipantEvent.TrackUnsubscribed, previousTrack, publication);\n    });\n    publication.on(TrackEvent.SubscriptionFailed, error => {\n      this.emit(ParticipantEvent.TrackSubscriptionFailed, publication.trackSid, error);\n    });\n  }\n  getTrackPublication(source) {\n    const track = super.getTrackPublication(source);\n    if (track) {\n      return track;\n    }\n  }\n  getTrackPublicationByName(name) {\n    const track = super.getTrackPublicationByName(name);\n    if (track) {\n      return track;\n    }\n  }\n  /**\n   * sets the volume on the participant's audio track\n   * by default, this affects the microphone publication\n   * a different source can be passed in as a second argument\n   * if no track exists the volume will be applied when the microphone track is added\n   */\n  setVolume(volume) {\n    let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Track.Source.Microphone;\n    this.volumeMap.set(source, volume);\n    const audioPublication = this.getTrackPublication(source);\n    if (audioPublication && audioPublication.track) {\n      audioPublication.track.setVolume(volume);\n    }\n  }\n  /**\n   * gets the volume on the participant's microphone track\n   */\n  getVolume() {\n    let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Track.Source.Microphone;\n    const audioPublication = this.getTrackPublication(source);\n    if (audioPublication && audioPublication.track) {\n      return audioPublication.track.getVolume();\n    }\n    return this.volumeMap.get(source);\n  }\n  /** @internal */\n  addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft) {\n    // find the track publication\n    // it's possible for the media track to arrive before participant info\n    let publication = this.getTrackPublicationBySid(sid);\n    // it's also possible that the browser didn't honor our original track id\n    // FireFox would use its own local uuid instead of server track id\n    if (!publication) {\n      if (!sid.startsWith('TR')) {\n        // find the first track that matches type\n        this.trackPublications.forEach(p => {\n          if (!publication && mediaTrack.kind === p.kind.toString()) {\n            publication = p;\n          }\n        });\n      }\n    }\n    // when we couldn't locate the track, it's possible that the metadata hasn't\n    // yet arrived. Wait a bit longer for it to arrive, or fire an error\n    if (!publication) {\n      if (triesLeft === 0) {\n        this.log.error('could not find published track', Object.assign(Object.assign({}, this.logContext), {\n          trackSid: sid\n        }));\n        this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n        return;\n      }\n      if (triesLeft === undefined) triesLeft = 20;\n      setTimeout(() => {\n        this.addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft - 1);\n      }, 150);\n      return;\n    }\n    if (mediaTrack.readyState === 'ended') {\n      this.log.error('unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n      this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n      return;\n    }\n    const isVideo = mediaTrack.kind === 'video';\n    let track;\n    if (isVideo) {\n      track = new RemoteVideoTrack(mediaTrack, sid, receiver, adaptiveStreamSettings);\n    } else {\n      track = new RemoteAudioTrack(mediaTrack, sid, receiver, this.audioContext, this.audioOutput);\n    }\n    // set track info\n    track.source = publication.source;\n    // keep publication's muted status\n    track.isMuted = publication.isMuted;\n    track.setMediaStream(mediaStream);\n    track.start();\n    publication.setTrack(track);\n    // set participant volumes on new audio tracks\n    if (this.volumeMap.has(publication.source) && isRemoteTrack(track) && isAudioTrack(track)) {\n      track.setVolume(this.volumeMap.get(publication.source));\n    }\n    return publication;\n  }\n  /** @internal */\n  get hasMetadata() {\n    return !!this.participantInfo;\n  }\n  /**\n   * @internal\n   */\n  getTrackPublicationBySid(sid) {\n    return this.trackPublications.get(sid);\n  }\n  /** @internal */\n  updateInfo(info) {\n    if (!super.updateInfo(info)) {\n      return false;\n    }\n    // we are getting a list of all available tracks, reconcile in here\n    // and send out events for changes\n    // reconcile track publications, publish events only if metadata is already there\n    // i.e. changes since the local participant has joined\n    const validTracks = new Map();\n    const newTracks = new Map();\n    info.tracks.forEach(ti => {\n      var _a, _b;\n      let publication = this.getTrackPublicationBySid(ti.sid);\n      if (!publication) {\n        // new publication\n        const kind = Track.kindFromProto(ti.type);\n        if (!kind) {\n          return;\n        }\n        publication = new RemoteTrackPublication(kind, ti, (_a = this.signalClient.connectOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe, {\n          loggerContextCb: () => this.logContext,\n          loggerName: (_b = this.loggerOptions) === null || _b === void 0 ? void 0 : _b.loggerName\n        });\n        publication.updateInfo(ti);\n        newTracks.set(ti.sid, publication);\n        const existingTrackOfSource = Array.from(this.trackPublications.values()).find(publishedTrack => publishedTrack.source === (publication === null || publication === void 0 ? void 0 : publication.source));\n        if (existingTrackOfSource && publication.source !== Track.Source.Unknown) {\n          this.log.debug(\"received a second track publication for \".concat(this.identity, \" with the same source: \").concat(publication.source), Object.assign(Object.assign({}, this.logContext), {\n            oldTrack: getLogContextFromTrack(existingTrackOfSource),\n            newTrack: getLogContextFromTrack(publication)\n          }));\n        }\n        this.addTrackPublication(publication);\n      } else {\n        publication.updateInfo(ti);\n      }\n      validTracks.set(ti.sid, publication);\n    });\n    // detect removed tracks\n    this.trackPublications.forEach(publication => {\n      if (!validTracks.has(publication.trackSid)) {\n        this.log.trace('detected removed track on remote participant, unpublishing', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n        this.unpublishTrack(publication.trackSid, true);\n      }\n    });\n    // always emit events for new publications, Room will not forward them unless it's ready\n    newTracks.forEach(publication => {\n      this.emit(ParticipantEvent.TrackPublished, publication);\n    });\n    return true;\n  }\n  /** @internal */\n  unpublishTrack(sid, sendUnpublish) {\n    const publication = this.trackPublications.get(sid);\n    if (!publication) {\n      return;\n    }\n    // also send unsubscribe, if track is actively subscribed\n    const track = publication.track;\n    if (track) {\n      track.stop();\n      publication.setTrack(undefined);\n    }\n    // remove track from maps only after unsubscribed has been fired\n    this.trackPublications.delete(sid);\n    // remove from the right type map\n    switch (publication.kind) {\n      case Track.Kind.Audio:\n        this.audioTrackPublications.delete(sid);\n        break;\n      case Track.Kind.Video:\n        this.videoTrackPublications.delete(sid);\n        break;\n    }\n    if (sendUnpublish) {\n      this.emit(ParticipantEvent.TrackUnpublished, publication);\n    }\n  }\n  /**\n   * @internal\n   */\n  setAudioOutput(output) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.audioOutput = output;\n      const promises = [];\n      this.audioTrackPublications.forEach(pub => {\n        var _a;\n        if (isAudioTrack(pub.track) && isRemoteTrack(pub.track)) {\n          promises.push(pub.track.setSinkId((_a = output.deviceId) !== null && _a !== void 0 ? _a : 'default'));\n        }\n      });\n      yield Promise.all(promises);\n    });\n  }\n  /** @internal */\n  addRemoteDataTrack(remoteDataTrack) {\n    this.dataTracks.set(remoteDataTrack.info.name, remoteDataTrack);\n  }\n  /** @internal */\n  removeRemoteDataTrack(remoteDataTrackSid) {\n    for (const _ref of this.dataTracks.entries()) {\n      var _ref2 = _slicedToArray(_ref, 2);\n      const name = _ref2[0];\n      const dataTrack = _ref2[1];\n      if (remoteDataTrackSid === dataTrack.info.sid) {\n        this.dataTracks.delete(name);\n      }\n    }\n  }\n  /** @internal */\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    this.log.trace('participant event', Object.assign(Object.assign({}, this.logContext), {\n      event,\n      args\n    }));\n    return super.emit(event, ...args);\n  }\n}var ConnectionState;\n(function (ConnectionState) {\n  ConnectionState[\"Disconnected\"] = \"disconnected\";\n  ConnectionState[\"Connecting\"] = \"connecting\";\n  ConnectionState[\"Connected\"] = \"connected\";\n  ConnectionState[\"Reconnecting\"] = \"reconnecting\";\n  ConnectionState[\"SignalReconnecting\"] = \"signalReconnecting\";\n})(ConnectionState || (ConnectionState = {}));\nconst CONNECTION_RECONCILE_FREQUENCY_MS = 4 * 1000;\n/**\n * In LiveKit, a room is the logical grouping for a list of participants.\n * Participants in a room can publish tracks, and subscribe to others' tracks.\n *\n * a Room fires [[RoomEvent | RoomEvents]].\n *\n * @noInheritDoc\n */\nclass Room extends eventsExports.EventEmitter {\n  get hasE2EESetup() {\n    return this.e2eeManager !== undefined;\n  }\n  /**\n   * Creates a new Room, the primary construct for a LiveKit session.\n   * @param options\n   */\n  constructor(options) {\n    var _this;\n    var _a, _b, _c, _d, _e, _f;\n    super();\n    _this = this;\n    this.state = ConnectionState.Disconnected;\n    /**\n     * list of participants that are actively speaking. when this changes\n     * a [[RoomEvent.ActiveSpeakersChanged]] event is fired\n     */\n    this.activeSpeakers = [];\n    /** reflects the sender encryption status of the local participant */\n    this.isE2EEEnabled = false;\n    this.audioEnabled = true;\n    this.e2eeStateMutex = new _();\n    this.isVideoPlaybackBlocked = false;\n    this.log = livekitLogger;\n    this.bufferedEvents = [];\n    this.isResuming = false;\n    this.connect = (url, token, opts) => __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!isBrowserSupported()) {\n        if (isReactNative()) {\n          throw Error(\"WebRTC isn't detected, have you called registerGlobals?\");\n        } else {\n          throw Error(\"LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.\");\n        }\n      }\n      // In case a disconnect called happened right before the connect call, make sure the disconnect is completed first by awaiting its lock\n      const unlockDisconnect = yield this.disconnectLock.lock();\n      if (this.state === ConnectionState.Connected) {\n        // when the state is reconnecting or connected, this function returns immediately\n        this.log.info(\"already connected to room \".concat(this.name));\n        unlockDisconnect();\n        return Promise.resolve();\n      }\n      if (this.connectFuture) {\n        unlockDisconnect();\n        return this.connectFuture.promise;\n      }\n      this.setAndEmitConnectionState(ConnectionState.Connecting);\n      if (((_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.getServerUrl().toString()) !== ensureTrailingSlash(url)) {\n        this.regionUrl = undefined;\n        this.regionUrlProvider = undefined;\n      }\n      if (isCloud(new URL(url))) {\n        if (this.regionUrlProvider === undefined) {\n          this.regionUrlProvider = new RegionUrlProvider(url, token);\n        } else {\n          this.regionUrlProvider.updateToken(token);\n        }\n        // trigger the first fetch without waiting for a response\n        // if initial connection fails, this will speed up picking regional url\n        // on subsequent runs\n        this.regionUrlProvider.fetchRegionSettings().then(settings => {\n          var _a;\n          (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.setServerReportedRegions(settings);\n        }).catch(e => {\n          this.log.warn('could not fetch region settings', {\n            error: e\n          });\n        });\n      }\n      const connectFn = (resolve, reject, regionUrl) => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b;\n        if (this.abortController) {\n          this.abortController.abort();\n        }\n        // explicit creation as local var needed to satisfy TS compiler when passing it to `attemptConnection` further down\n        const abortController = new AbortController();\n        this.abortController = abortController;\n        // at this point the intention to connect has been signalled so we can allow cancelling of the connection via disconnect() again\n        unlockDisconnect === null || unlockDisconnect === void 0 ? void 0 : unlockDisconnect();\n        try {\n          yield BackOffStrategy.getInstance().getBackOffPromise(url);\n          if (abortController.signal.aborted) {\n            throw ConnectionError.cancelled('Connection attempt aborted');\n          }\n          yield this.attemptConnection(regionUrl !== null && regionUrl !== void 0 ? regionUrl : url, token, opts, abortController);\n          this.abortController = undefined;\n          resolve();\n        } catch (error) {\n          if (this.regionUrlProvider && error instanceof ConnectionError && error.reason !== ConnectionErrorReason.Cancelled && error.reason !== ConnectionErrorReason.NotAllowed) {\n            let nextUrl = null;\n            try {\n              this.log.debug('Fetching next region');\n              nextUrl = yield this.regionUrlProvider.getNextBestRegionUrl((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal);\n            } catch (regionFetchError) {\n              if (regionFetchError instanceof ConnectionError && (regionFetchError.status === 401 || regionFetchError.reason === ConnectionErrorReason.Cancelled)) {\n                this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);\n                reject(regionFetchError);\n                return;\n              }\n            }\n            if (\n            // making sure we only register failed attempts on things we actually care about\n            [ConnectionErrorReason.InternalError, ConnectionErrorReason.ServerUnreachable, ConnectionErrorReason.Timeout].includes(error.reason)) {\n              this.log.debug('Adding failed connection attempt to back off');\n              BackOffStrategy.getInstance().addFailedConnectionAttempt(url);\n            }\n            if (nextUrl && !((_b = this.abortController) === null || _b === void 0 ? void 0 : _b.signal.aborted)) {\n              this.log.info(\"Initial connection failed with ConnectionError: \".concat(error.message, \". Retrying with another region: \").concat(nextUrl));\n              this.recreateEngine(true);\n              yield connectFn(resolve, reject, nextUrl);\n            } else {\n              this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, getDisconnectReasonFromConnectionError(error));\n              reject(error);\n            }\n          } else {\n            let disconnectReason = DisconnectReason.UNKNOWN_REASON;\n            if (error instanceof ConnectionError) {\n              disconnectReason = getDisconnectReasonFromConnectionError(error);\n            }\n            this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, disconnectReason);\n            reject(error);\n          }\n        }\n      });\n      const regionUrl = this.regionUrl;\n      this.regionUrl = undefined;\n      this.connectFuture = new Future((resolve, reject) => {\n        connectFn(resolve, reject, regionUrl);\n      }, () => {\n        this.clearConnectionFutures();\n      });\n      return this.connectFuture.promise;\n    });\n    this.connectSignal = (url, token, engine, connectOptions, roomOptions, abortController) => __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const _yield$engine$join = yield engine.join(url, token, {\n          autoSubscribe: connectOptions.autoSubscribe,\n          adaptiveStream: typeof roomOptions.adaptiveStream === 'object' ? true : roomOptions.adaptiveStream,\n          clientInfoCapabilities: isFrameMetadataSupported((_a = roomOptions.frameMetadata) !== null && _a !== void 0 ? _a : roomOptions.packetTrailer) || !!this.e2eeManager ? [ClientInfo_Capability.CAP_PACKET_TRAILER] : undefined,\n          maxRetries: connectOptions.maxRetries,\n          e2eeEnabled: !!this.e2eeManager,\n          websocketTimeout: connectOptions.websocketTimeout\n        }, abortController.signal, !roomOptions.singlePeerConnection),\n        joinResponse = _yield$engine$join.joinResponse,\n        serverInfo = _yield$engine$join.serverInfo;\n      this.serverInfo = serverInfo;\n      if (!serverInfo.version) {\n        throw new UnsupportedServer('unknown server version');\n      }\n      if (serverInfo.version === '0.15.1' && this.options.dynacast) {\n        this.log.debug('disabling dynacast due to server version');\n        // dynacast has a bug in 0.15.1, so we cannot use it then\n        roomOptions.dynacast = false;\n      }\n      return joinResponse;\n    });\n    this.applyJoinResponse = joinResponse => {\n      const pi = joinResponse.participant;\n      this.localParticipant.sid = pi.sid;\n      this.localParticipant.identity = pi.identity;\n      this.localParticipant.setEnabledPublishCodecs(joinResponse.enabledPublishCodecs);\n      if (this.e2eeManager) {\n        try {\n          this.e2eeManager.setSifTrailer(joinResponse.sifTrailer);\n        } catch (e) {\n          this.log.error(e instanceof Error ? e.message : 'Could not set SifTrailer', {\n            error: e\n          });\n        }\n      }\n      // populate remote participants, these should not trigger new events\n      this.handleParticipantUpdates([pi, ...joinResponse.otherParticipants]);\n      if (joinResponse.room) {\n        this.handleRoomUpdate(joinResponse.room);\n      }\n    };\n    this.attemptConnection = (url, token, opts, abortController) => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (this.state === ConnectionState.Reconnecting || this.isResuming || ((_a = this.engine) === null || _a === void 0 ? void 0 : _a.pendingReconnect)) {\n        this.log.info('Reconnection attempt replaced by new connection attempt');\n        // make sure we close and recreate the existing engine in order to get rid of any potentially ongoing reconnection attempts\n        this.recreateEngine(true);\n      } else {\n        // create engine if previously disconnected\n        this.maybeCreateEngine();\n      }\n      if ((_b = this.regionUrlProvider) === null || _b === void 0 ? void 0 : _b.isCloud()) {\n        this.engine.setRegionStrategy(this.createRegionStrategy());\n      }\n      this.acquireAudioContext();\n      this.connOptions = Object.assign(Object.assign({}, roomConnectOptionDefaults), opts);\n      if (this.connOptions.rtcConfig) {\n        this.engine.rtcConfig = this.connOptions.rtcConfig;\n      }\n      if (this.connOptions.peerConnectionTimeout) {\n        this.engine.peerConnectionTimeout = this.connOptions.peerConnectionTimeout;\n      }\n      try {\n        const joinResponse = yield this.connectSignal(url, token, this.engine, this.connOptions, this.options, abortController);\n        this.applyJoinResponse(joinResponse);\n        // forward metadata changed for the local participant\n        this.setupLocalParticipantEvents();\n        this.emit(RoomEvent.SignalConnected);\n      } catch (err) {\n        yield this.engine.close();\n        this.recreateEngine();\n        const resultingError = abortController.signal.aborted ? ConnectionError.cancelled('Signal connection aborted') : ConnectionError.serverUnreachable('could not establish signal connection');\n        if (err instanceof Error) {\n          resultingError.message = \"\".concat(resultingError.message, \": \").concat(err.message);\n        }\n        if (err instanceof ConnectionError) {\n          resultingError.reason = err.reason;\n          resultingError.status = err.status;\n        }\n        this.log.debug(\"error trying to establish signal connection\", {\n          error: err\n        });\n        throw resultingError;\n      }\n      if (abortController.signal.aborted) {\n        yield this.engine.close();\n        this.recreateEngine();\n        throw ConnectionError.cancelled(\"Connection attempt aborted\");\n      }\n      try {\n        yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout, abortController);\n      } catch (e) {\n        yield this.engine.close();\n        this.recreateEngine();\n        throw e;\n      }\n      // also hook unload event\n      if (isWeb() && this.options.disconnectOnPageLeave) {\n        // capturing both 'pagehide' and 'beforeunload' to capture broadest set of browser behaviors\n        window.addEventListener('pagehide', this.onPageLeave);\n        window.addEventListener('beforeunload', this.onPageLeave);\n      }\n      if (isWeb()) {\n        window.addEventListener('freeze', this.onPageLeave);\n      }\n      this.setAndEmitConnectionState(ConnectionState.Connected);\n      this.emit(RoomEvent.Connected);\n      BackOffStrategy.getInstance().resetFailedConnectionAttempts(url);\n      this.registerConnectionReconcile();\n      // Notify region provider about successful connection\n      if (this.regionUrlProvider) {\n        this.regionUrlProvider.notifyConnected();\n      }\n    });\n    /**\n     * disconnects the room, emits [[RoomEvent.Disconnected]]\n     */\n    this.disconnect = function () {\n      for (var _len = arguments.length, args_1 = new Array(_len), _key = 0; _key < _len; _key++) {\n        args_1[_key] = arguments[_key];\n      }\n      return __awaiter(_this, [...args_1], void 0, function () {\n        var _this2 = this;\n        let stopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        return function* () {\n          var _a, _b, _c;\n          const unlock = yield _this2.disconnectLock.lock();\n          try {\n            if (_this2.state === ConnectionState.Disconnected) {\n              _this2.log.debug('already disconnected');\n              return;\n            }\n            _this2.log.info('disconnect from room');\n            if (_this2.state === ConnectionState.Connecting || _this2.state === ConnectionState.Reconnecting || _this2.isResuming) {\n              // try aborting pending connection attempt\n              const msg = 'Abort connection attempt due to user initiated disconnect';\n              _this2.log.warn(msg);\n              (_a = _this2.abortController) === null || _a === void 0 ? void 0 : _a.abort(msg);\n              // in case the abort controller didn't manage to cancel the connection attempt, reject the connect promise explicitly\n              (_c = (_b = _this2.connectFuture) === null || _b === void 0 ? void 0 : _b.reject) === null || _c === void 0 ? void 0 : _c.call(_b, ConnectionError.cancelled('Client initiated disconnect'));\n              _this2.connectFuture = undefined;\n            }\n            // close engine (also closes client)\n            if (_this2.engine) {\n              // send leave\n              if (!_this2.engine.client.isDisconnected) {\n                yield _this2.engine.client.sendLeave();\n              }\n              yield _this2.engine.close();\n            }\n            _this2.handleDisconnect(stopTracks, DisconnectReason.CLIENT_INITIATED);\n            /* @ts-ignore */\n            _this2.engine = undefined;\n          } finally {\n            unlock();\n          }\n        }();\n      });\n    };\n    this.onPageLeave = () => __awaiter(this, void 0, void 0, function* () {\n      this.log.info('Page leave detected, disconnecting');\n      yield this.disconnect();\n    });\n    /**\n     * Browsers have different policies regarding audio playback. Most requiring\n     * some form of user interaction (click/tap/etc).\n     * In those cases, audio will be silent until a click/tap triggering one of the following\n     * - `startAudio`\n     * - `getUserMedia`\n     */\n    this.startAudio = () => __awaiter(this, void 0, void 0, function* () {\n      const elements = [];\n      const browser = getBrowser();\n      if (browser && browser.os === 'iOS') {\n        /**\n         * iOS blocks audio element playback if\n         * - user is not publishing audio themselves and\n         * - no other audio source is playing\n         *\n         * as a workaround, we create an audio element with an empty track, so that\n         * silent audio is always playing\n         */\n        const audioId = 'livekit-dummy-audio-el';\n        let dummyAudioEl = document.getElementById(audioId);\n        if (!dummyAudioEl) {\n          dummyAudioEl = document.createElement('audio');\n          dummyAudioEl.id = audioId;\n          dummyAudioEl.autoplay = true;\n          dummyAudioEl.hidden = true;\n          const track = getEmptyAudioStreamTrack();\n          track.enabled = true;\n          const stream = new MediaStream([track]);\n          dummyAudioEl.srcObject = stream;\n          document.addEventListener('visibilitychange', () => {\n            if (!dummyAudioEl) {\n              return;\n            }\n            // set the srcObject to null on page hide in order to prevent lock screen controls to show up for it\n            dummyAudioEl.srcObject = document.hidden ? null : stream;\n            if (!document.hidden) {\n              this.log.debug('page visible again, triggering startAudio to resume playback and update playback status');\n              this.startAudio();\n            }\n          });\n          document.body.append(dummyAudioEl);\n          this.once(RoomEvent.Disconnected, () => {\n            dummyAudioEl === null || dummyAudioEl === void 0 ? void 0 : dummyAudioEl.remove();\n            dummyAudioEl = null;\n          });\n        }\n        elements.push(dummyAudioEl);\n      }\n      this.remoteParticipants.forEach(p => {\n        p.audioTrackPublications.forEach(t => {\n          if (t.track) {\n            t.track.attachedElements.forEach(e => {\n              elements.push(e);\n            });\n          }\n        });\n      });\n      try {\n        yield Promise.all([this.acquireAudioContext(), ...elements.map(e => {\n          e.muted = false;\n          return e.play();\n        })]);\n        this.handleAudioPlaybackStarted();\n      } catch (err) {\n        this.handleAudioPlaybackFailed(err);\n        throw err;\n      }\n    });\n    this.startVideo = () => __awaiter(this, void 0, void 0, function* () {\n      const elements = [];\n      for (const p of this.remoteParticipants.values()) {\n        p.videoTrackPublications.forEach(tr => {\n          var _a;\n          (_a = tr.track) === null || _a === void 0 ? void 0 : _a.attachedElements.forEach(el => {\n            if (!elements.includes(el)) {\n              elements.push(el);\n            }\n          });\n        });\n      }\n      yield Promise.all(elements.map(el => el.play())).then(() => {\n        this.handleVideoPlaybackStarted();\n      }).catch(e => {\n        if (e.name === 'NotAllowedError') {\n          this.handleVideoPlaybackFailed();\n        } else {\n          this.log.warn('Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler');\n        }\n      });\n    });\n    this.handleRestarting = () => {\n      this.clearConnectionReconcile();\n      // in case we went from resuming to full-reconnect, make sure to reflect it on the isResuming flag\n      this.isResuming = false;\n      // also unwind existing participants & existing subscriptions\n      for (const p of this.remoteParticipants.values()) {\n        this.handleParticipantDisconnected(p.identity, p);\n      }\n      if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {\n        this.emit(RoomEvent.Reconnecting);\n      }\n    };\n    this.handleRestarted = () => {\n      this.outgoingDataTrackManager.sfuWillRepublishTracks();\n      this.incomingDataTrackManager.resendSubscriptionUpdates();\n    };\n    this.handleSignalRestarted = joinResponse => __awaiter(this, void 0, void 0, function* () {\n      this.log.debug(\"signal reconnected to server, region \".concat(joinResponse.serverRegion), {\n        region: joinResponse.serverRegion\n      });\n      this.bufferedEvents = [];\n      this.applyJoinResponse(joinResponse);\n      try {\n        // unpublish & republish tracks\n        yield this.localParticipant.republishAllTracks(undefined, true);\n      } catch (error) {\n        this.log.error('error trying to re-publish tracks after reconnection', {\n          error\n        });\n      }\n      try {\n        yield this.engine.waitForRestarted();\n        this.log.debug(\"fully reconnected to server\", {\n          region: joinResponse.serverRegion\n        });\n      } catch (_a) {\n        // reconnection failed, handleDisconnect is being invoked already, just return here\n        return;\n      }\n      this.setAndEmitConnectionState(ConnectionState.Connected);\n      this.emit(RoomEvent.Reconnected);\n      this.registerConnectionReconcile();\n      this.emitBufferedEvents();\n    });\n    this.handleParticipantUpdates = participantInfos => {\n      var _a;\n      // handle changes to participant state, and send events\n      for (const info of participantInfos) {\n        if (info.identity === this.localParticipant.identity) {\n          this.localParticipant.updateInfo(info);\n          continue;\n        }\n        // LiveKit server doesn't send identity info prior to version 1.5.2 in disconnect updates\n        // so we try to map an empty identity to an already known sID manually\n        if (info.identity === '') {\n          info.identity = (_a = this.sidToIdentity.get(info.sid)) !== null && _a !== void 0 ? _a : '';\n        }\n        let remoteParticipant = this.remoteParticipants.get(info.identity);\n        // when it's disconnected, send updates\n        if (info.state === ParticipantInfo_State.DISCONNECTED) {\n          this.handleParticipantDisconnected(info.identity, remoteParticipant);\n        } else {\n          // create participant if doesn't exist\n          this.getOrCreateParticipant(info.identity, info);\n        }\n      }\n      // Ingest data track publication updates into data tracks infrastructure\n      const mapped = new Map(participantInfos.filter(p => p.identity !== this.localParticipant.identity).map(info => {\n        return [info.identity, info.dataTracks.map(dataTrack => DataTrackInfo.from(dataTrack))];\n      }));\n      this.incomingDataTrackManager.receiveSfuPublicationUpdates(mapped);\n    };\n    // updates are sent only when there's a change to speaker ordering\n    this.handleActiveSpeakersUpdate = speakers => {\n      const activeSpeakers = [];\n      const seenSids = {};\n      speakers.forEach(speaker => {\n        seenSids[speaker.sid] = true;\n        if (speaker.sid === this.localParticipant.sid) {\n          this.localParticipant.audioLevel = speaker.level;\n          this.localParticipant.setIsSpeaking(true);\n          activeSpeakers.push(this.localParticipant);\n        } else {\n          const p = this.getRemoteParticipantBySid(speaker.sid);\n          if (p) {\n            p.audioLevel = speaker.level;\n            p.setIsSpeaking(true);\n            activeSpeakers.push(p);\n          }\n        }\n      });\n      if (!seenSids[this.localParticipant.sid]) {\n        this.localParticipant.audioLevel = 0;\n        this.localParticipant.setIsSpeaking(false);\n      }\n      this.remoteParticipants.forEach(p => {\n        if (!seenSids[p.sid]) {\n          p.audioLevel = 0;\n          p.setIsSpeaking(false);\n        }\n      });\n      this.activeSpeakers = activeSpeakers;\n      this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n    };\n    // process list of changed speakers\n    this.handleSpeakersChanged = speakerUpdates => {\n      const lastSpeakers = new Map();\n      this.activeSpeakers.forEach(p => {\n        const remoteParticipant = this.remoteParticipants.get(p.identity);\n        if (remoteParticipant && remoteParticipant.sid !== p.sid) {\n          return;\n        }\n        lastSpeakers.set(p.sid, p);\n      });\n      speakerUpdates.forEach(speaker => {\n        let p = this.getRemoteParticipantBySid(speaker.sid);\n        if (speaker.sid === this.localParticipant.sid) {\n          p = this.localParticipant;\n        }\n        if (!p) {\n          return;\n        }\n        p.audioLevel = speaker.level;\n        p.setIsSpeaking(speaker.active);\n        if (speaker.active) {\n          lastSpeakers.set(speaker.sid, p);\n        } else {\n          lastSpeakers.delete(speaker.sid);\n        }\n      });\n      const activeSpeakers = Array.from(lastSpeakers.values());\n      activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);\n      this.activeSpeakers = activeSpeakers;\n      this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n    };\n    this.handleStreamStateUpdate = streamStateUpdate => {\n      streamStateUpdate.streamStates.forEach(streamState => {\n        const participant = this.getRemoteParticipantBySid(streamState.participantSid);\n        if (!participant) {\n          return;\n        }\n        const pub = participant.getTrackPublicationBySid(streamState.trackSid);\n        if (!pub || !pub.track) {\n          return;\n        }\n        const newStreamState = Track.streamStateFromProto(streamState.state);\n        pub.track.setStreamState(newStreamState);\n        if (newStreamState !== pub.track.streamState) {\n          participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);\n          this.emitWhenConnected(RoomEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);\n        }\n      });\n    };\n    this.handleSubscriptionPermissionUpdate = update => {\n      const participant = this.getRemoteParticipantBySid(update.participantSid);\n      if (!participant) {\n        return;\n      }\n      const pub = participant.getTrackPublicationBySid(update.trackSid);\n      if (!pub) {\n        return;\n      }\n      pub.setAllowed(update.allowed);\n    };\n    this.handleSubscriptionError = update => {\n      const participant = Array.from(this.remoteParticipants.values()).find(p => p.trackPublications.has(update.trackSid));\n      if (!participant) {\n        return;\n      }\n      const pub = participant.getTrackPublicationBySid(update.trackSid);\n      if (!pub) {\n        return;\n      }\n      pub.setSubscriptionError(update.err);\n    };\n    this.handleDataPacket = (packet, encryptionType) => {\n      // find the participant\n      const participant = this.remoteParticipants.get(packet.participantIdentity);\n      if (packet.value.case === 'user') {\n        this.handleUserPacket(participant, packet.value.value, packet.kind, encryptionType);\n      } else if (packet.value.case === 'transcription') {\n        this.handleTranscription(participant, packet.value.value);\n      } else if (packet.value.case === 'sipDtmf') {\n        this.handleSipDtmf(participant, packet.value.value);\n      } else if (packet.value.case === 'chatMessage') {\n        this.handleChatMessage(participant, packet.value.value);\n      } else if (packet.value.case === 'metrics') {\n        this.handleMetrics(packet.value.value, participant);\n      } else if (packet.value.case === 'streamHeader' || packet.value.case === 'streamChunk' || packet.value.case === 'streamTrailer') {\n        this.handleDataStream(packet, encryptionType);\n      } else if (packet.value.case === 'rpcRequest') {\n        const rpc = packet.value.value;\n        this.rpcServerManager.handleIncomingRpcRequest(packet.participantIdentity, rpc);\n      } else if (packet.value.case === 'rpcResponse') {\n        const rpcResponse = packet.value.value;\n        switch (rpcResponse.value.case) {\n          case 'payload':\n            this.rpcClientManager.handleIncomingRpcResponseSuccess(rpcResponse.requestId, rpcResponse.value.value);\n            break;\n          case 'error':\n            this.rpcClientManager.handleIncomingRpcResponseFailure(rpcResponse.requestId, RpcError.fromProto(rpcResponse.value.value));\n            break;\n          default:\n            this.log.warn(\"Unknown rpcResponse.value.case: \".concat(rpcResponse.value.case), this.logContext);\n            break;\n        }\n      } else if (packet.value.case === 'rpcAck') {\n        this.rpcClientManager.handleIncomingRpcAck(packet.value.value.requestId);\n      }\n    };\n    this.handleUserPacket = (participant, userPacket, kind, encryptionType) => {\n      this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind, userPacket.topic, encryptionType);\n      // also emit on the participant\n      participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.DataReceived, userPacket.payload, kind, encryptionType);\n    };\n    this.handleSipDtmf = (participant, dtmf) => {\n      this.emit(RoomEvent.SipDTMFReceived, dtmf, participant);\n      // also emit on the participant\n      participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.SipDTMFReceived, dtmf);\n    };\n    this.handleTranscription = (_remoteParticipant, transcription) => {\n      // find the participant\n      const participant = transcription.transcribedParticipantIdentity === this.localParticipant.identity ? this.localParticipant : this.getParticipantByIdentity(transcription.transcribedParticipantIdentity);\n      const publication = participant === null || participant === void 0 ? void 0 : participant.trackPublications.get(transcription.trackId);\n      const segments = extractTranscriptionSegments(transcription, this.transcriptionReceivedTimes);\n      publication === null || publication === void 0 ? void 0 : publication.emit(TrackEvent.TranscriptionReceived, segments);\n      participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.TranscriptionReceived, segments, publication);\n      this.emit(RoomEvent.TranscriptionReceived, segments, participant, publication);\n    };\n    this.handleChatMessage = (participant, chatMessage) => {\n      const msg = extractChatMessage(chatMessage);\n      this.emit(RoomEvent.ChatMessage, msg, participant);\n    };\n    this.handleMetrics = (metrics, participant) => {\n      this.emit(RoomEvent.MetricsReceived, metrics, participant);\n    };\n    this.handleDataStream = (packet, encryptionType) => {\n      this.incomingDataStreamManager.handleDataStreamPacket(packet, encryptionType);\n    };\n    this.bufferedSegments = new Map();\n    this.handleAudioPlaybackStarted = () => {\n      if (this.canPlaybackAudio) {\n        return;\n      }\n      this.audioEnabled = true;\n      this.emit(RoomEvent.AudioPlaybackStatusChanged, true);\n    };\n    this.handleAudioPlaybackFailed = e => {\n      this.log.warn('could not playback audio', {\n        error: e\n      });\n      if (!this.canPlaybackAudio) {\n        return;\n      }\n      this.audioEnabled = false;\n      this.emit(RoomEvent.AudioPlaybackStatusChanged, false);\n    };\n    this.handleVideoPlaybackStarted = () => {\n      if (this.isVideoPlaybackBlocked) {\n        this.isVideoPlaybackBlocked = false;\n        this.emit(RoomEvent.VideoPlaybackStatusChanged, true);\n      }\n    };\n    this.handleVideoPlaybackFailed = () => {\n      if (!this.isVideoPlaybackBlocked) {\n        this.isVideoPlaybackBlocked = true;\n        this.emit(RoomEvent.VideoPlaybackStatusChanged, false);\n      }\n    };\n    this.handleDeviceChange = () => __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.os) !== 'iOS') {\n        // default devices are non deterministic on iOS, so we don't attempt to select them here\n        yield this.selectDefaultDevices();\n      }\n      this.emit(RoomEvent.MediaDevicesChanged);\n    });\n    this.handleRoomUpdate = room => {\n      const oldRoom = this.roomInfo;\n      this.roomInfo = room;\n      if (oldRoom && oldRoom.metadata !== room.metadata) {\n        this.emitWhenConnected(RoomEvent.RoomMetadataChanged, room.metadata);\n      }\n      if ((oldRoom === null || oldRoom === void 0 ? void 0 : oldRoom.activeRecording) !== room.activeRecording) {\n        this.emitWhenConnected(RoomEvent.RecordingStatusChanged, room.activeRecording);\n      }\n    };\n    this.handleConnectionQualityUpdate = update => {\n      update.updates.forEach(info => {\n        if (info.participantSid === this.localParticipant.sid) {\n          this.localParticipant.setConnectionQuality(info.quality);\n          return;\n        }\n        const participant = this.getRemoteParticipantBySid(info.participantSid);\n        if (participant) {\n          participant.setConnectionQuality(info.quality);\n        }\n      });\n    };\n    this.getRemoteParticipantClientProtocol = identity => {\n      var _a, _b;\n      return (_b = (_a = this.remoteParticipants.get(identity)) === null || _a === void 0 ? void 0 : _a.clientProtocol) !== null && _b !== void 0 ? _b : CLIENT_PROTOCOL_DEFAULT;\n    };\n    this.onLocalParticipantMetadataChanged = metadata => {\n      this.emit(RoomEvent.ParticipantMetadataChanged, metadata, this.localParticipant);\n    };\n    this.onLocalParticipantNameChanged = name => {\n      this.emit(RoomEvent.ParticipantNameChanged, name, this.localParticipant);\n    };\n    this.onLocalAttributesChanged = changedAttributes => {\n      this.emit(RoomEvent.ParticipantAttributesChanged, changedAttributes, this.localParticipant);\n    };\n    this.onLocalTrackMuted = pub => {\n      this.emit(RoomEvent.TrackMuted, pub, this.localParticipant);\n    };\n    this.onLocalTrackUnmuted = pub => {\n      this.emit(RoomEvent.TrackUnmuted, pub, this.localParticipant);\n    };\n    this.onTrackProcessorUpdate = processor => {\n      var _a;\n      (_a = processor === null || processor === void 0 ? void 0 : processor.onPublish) === null || _a === void 0 ? void 0 : _a.call(processor, this);\n    };\n    this.onLocalTrackPublished = pub => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e, _f;\n      (_a = pub.track) === null || _a === void 0 ? void 0 : _a.on(TrackEvent.TrackProcessorUpdate, this.onTrackProcessorUpdate);\n      (_b = pub.track) === null || _b === void 0 ? void 0 : _b.on(TrackEvent.Restarted, this.onLocalTrackRestarted);\n      (_e = (_d = (_c = pub.track) === null || _c === void 0 ? void 0 : _c.getProcessor()) === null || _d === void 0 ? void 0 : _d.onPublish) === null || _e === void 0 ? void 0 : _e.call(_d, this);\n      this.emit(RoomEvent.LocalTrackPublished, pub, this.localParticipant);\n      if (isLocalAudioTrack(pub.track)) {\n        const trackIsSilent = yield pub.track.checkForSilence();\n        if (trackIsSilent) {\n          this.emit(RoomEvent.LocalAudioSilenceDetected, pub);\n        }\n      }\n      const deviceId = yield (_f = pub.track) === null || _f === void 0 ? void 0 : _f.getDeviceId(false);\n      const deviceKind = sourceToKind(pub.source);\n      if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) {\n        this.localParticipant.activeDeviceMap.set(deviceKind, deviceId);\n        this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId);\n      }\n    });\n    this.onLocalTrackUnpublished = pub => {\n      var _a, _b;\n      (_a = pub.track) === null || _a === void 0 ? void 0 : _a.off(TrackEvent.TrackProcessorUpdate, this.onTrackProcessorUpdate);\n      (_b = pub.track) === null || _b === void 0 ? void 0 : _b.off(TrackEvent.Restarted, this.onLocalTrackRestarted);\n      this.emit(RoomEvent.LocalTrackUnpublished, pub, this.localParticipant);\n    };\n    this.onLocalTrackRestarted = track => __awaiter(this, void 0, void 0, function* () {\n      const deviceId = yield track.getDeviceId(false);\n      const deviceKind = sourceToKind(track.source);\n      if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) {\n        this.log.debug(\"local track restarted, setting \".concat(deviceKind, \" \").concat(deviceId, \" active\"));\n        this.localParticipant.activeDeviceMap.set(deviceKind, deviceId);\n        this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId);\n      }\n    });\n    this.onLocalConnectionQualityChanged = quality => {\n      this.emit(RoomEvent.ConnectionQualityChanged, quality, this.localParticipant);\n    };\n    this.onMediaDevicesError = (e, kind) => {\n      this.emit(RoomEvent.MediaDevicesError, e, kind);\n    };\n    this.onLocalParticipantPermissionsChanged = prevPermissions => {\n      this.emit(RoomEvent.ParticipantPermissionsChanged, prevPermissions, this.localParticipant);\n    };\n    this.onLocalChatMessageSent = msg => {\n      this.emit(RoomEvent.ChatMessage, msg, this.localParticipant);\n    };\n    this.setMaxListeners(100);\n    this.remoteParticipants = new Map();\n    this.sidToIdentity = new Map();\n    this.options = Object.assign(Object.assign({}, roomOptionDefaults), options);\n    this.log = getLogger((_a = this.options.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Room, () => this.logContext);\n    this.transcriptionReceivedTimes = new Map();\n    this.options.audioCaptureDefaults = Object.assign(Object.assign({}, audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);\n    this.options.videoCaptureDefaults = Object.assign(Object.assign({}, videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);\n    this.options.publishDefaults = Object.assign(Object.assign({}, publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);\n    this.maybeCreateEngine();\n    this.incomingDataStreamManager = new IncomingDataStreamManager();\n    this.outgoingDataStreamManager = new OutgoingDataStreamManager(this.engine, this.log);\n    this.incomingDataTrackManager = new IncomingDataTrackManager({\n      e2eeManager: this.e2eeManager\n    });\n    this.incomingDataTrackManager.on('sfuUpdateSubscription', event => {\n      this.engine.client.sendUpdateDataSubscription(event.sid, event.subscribe);\n    }).on('trackPublished', event => {\n      var _a;\n      if (event.track.publisherIdentity === this.localParticipant.identity) {\n        // Only advertize tracks from other participants\n        return;\n      }\n      this.emit(RoomEvent.DataTrackPublished, event.track);\n      (_a = this.remoteParticipants.get(event.track.publisherIdentity)) === null || _a === void 0 ? void 0 : _a.addRemoteDataTrack(event.track);\n    }).on('trackUnpublished', event => {\n      var _a;\n      if (event.publisherIdentity === this.localParticipant.identity) {\n        // Only advertize tracks from other participants\n        return;\n      }\n      this.emit(RoomEvent.DataTrackUnpublished, event.sid);\n      (_a = this.remoteParticipants.get(event.publisherIdentity)) === null || _a === void 0 ? void 0 : _a.removeRemoteDataTrack(event.sid);\n    });\n    this.outgoingDataTrackManager = new OutgoingDataTrackManager({\n      e2eeManager: this.e2eeManager\n    });\n    this.outgoingDataTrackManager.on('sfuPublishRequest', event => {\n      this.engine.client.sendPublishDataTrackRequest(event.handle, event.name, event.usesE2ee);\n    }).on('sfuUnpublishRequest', event => {\n      this.engine.client.sendUnPublishDataTrackRequest(event.handle);\n    }).on('trackPublished', event => {\n      this.emit(RoomEvent.LocalDataTrackPublished, event.track);\n    }).on('trackUnpublished', event => {\n      this.emit(RoomEvent.LocalDataTrackUnpublished, event.sid);\n    }).on('packetAvailable', _ref => {\n      let handle = _ref.handle,\n        bytes = _ref.bytes;\n      this.engine.sendLossyBytes(bytes, DataChannelKind.DATA_TRACK_LOSSY, 'wait').finally(() => this.outgoingDataTrackManager.handlePacketSendComplete(handle));\n    });\n    this.registerRpcDataStreamHandler();\n    this.rpcClientManager = new RpcClientManager(this.log, this.outgoingDataStreamManager, this.getRemoteParticipantClientProtocol, () => {\n      var _a, _b;\n      return (_b = (_a = this.engine.latestJoinResponse) === null || _a === void 0 ? void 0 : _a.serverInfo) === null || _b === void 0 ? void 0 : _b.version;\n    });\n    this.rpcClientManager.on('sendDataPacket', _ref2 => {\n      let packet = _ref2.packet;\n      var _a;\n      (_a = this.engine) === null || _a === void 0 ? void 0 : _a.sendDataPacket(packet, DataChannelKind.RELIABLE);\n    });\n    this.rpcServerManager = new RpcServerManager(this.log, this.outgoingDataStreamManager, this.getRemoteParticipantClientProtocol);\n    this.rpcServerManager.on('sendDataPacket', _ref3 => {\n      let packet = _ref3.packet;\n      var _a;\n      (_a = this.engine) === null || _a === void 0 ? void 0 : _a.sendDataPacket(packet, DataChannelKind.RELIABLE);\n    });\n    this.disconnectLock = new _();\n    this.localParticipant = new LocalParticipant('', '', this.engine, this.options, this.outgoingDataStreamManager, this.outgoingDataTrackManager, this.rpcClientManager, this.rpcServerManager);\n    this.setupFrameMetadata();\n    if (this.options.e2ee || this.options.encryption) {\n      this.setupE2EE();\n    }\n    this.engine.e2eeManager = this.e2eeManager;\n    this.incomingDataTrackManager.updateE2eeManager((_b = this.e2eeManager) !== null && _b !== void 0 ? _b : null);\n    this.outgoingDataTrackManager.updateE2eeManager((_c = this.e2eeManager) !== null && _c !== void 0 ? _c : null);\n    if (this.options.videoCaptureDefaults.deviceId) {\n      this.localParticipant.activeDeviceMap.set('videoinput', unwrapConstraint(this.options.videoCaptureDefaults.deviceId));\n    }\n    if (this.options.audioCaptureDefaults.deviceId) {\n      this.localParticipant.activeDeviceMap.set('audioinput', unwrapConstraint(this.options.audioCaptureDefaults.deviceId));\n    }\n    if ((_d = this.options.audioOutput) === null || _d === void 0 ? void 0 : _d.deviceId) {\n      this.switchActiveDevice('audiooutput', unwrapConstraint(this.options.audioOutput.deviceId)).catch(e => this.log.warn(\"Could not set audio output: \".concat(e.message)));\n    }\n    if (isWeb()) {\n      const cleanupController = new AbortController();\n      let onDeviceChange;\n      if (Room.cleanupRegistry) {\n        // Wrap the listener in a WeakRef closure so navigator.mediaDevices does not\n        // strongly retain the Room. When the user drops their Room ref, the\n        // FinalizationRegistry callback aborts the controller and removes the listener.\n        const roomRef = new WeakRef(this);\n        onDeviceChange = () => {\n          const self = roomRef.deref();\n          if (!self) {\n            return;\n          }\n          self.handleDeviceChange();\n        };\n        Room.cleanupRegistry.register(this, () => {\n          cleanupController.abort();\n        });\n      } else {\n        // Legacy browsers without WeakRef/FinalizationRegistry: fall back to a\n        // direct listener (matches pre-#1944 behavior).\n        onDeviceChange = this.handleDeviceChange;\n      }\n      // in order to catch device changes prior to room connection we need to register the event in the constructor\n      (_f = (_e = navigator.mediaDevices) === null || _e === void 0 ? void 0 : _e.addEventListener) === null || _f === void 0 ? void 0 : _f.call(_e, 'devicechange', onDeviceChange, {\n        signal: cleanupController.signal\n      });\n    }\n  }\n  registerTextStreamHandler(topic, callback) {\n    return this.incomingDataStreamManager.registerTextStreamHandler(topic, callback);\n  }\n  unregisterTextStreamHandler(topic) {\n    return this.incomingDataStreamManager.unregisterTextStreamHandler(topic);\n  }\n  registerByteStreamHandler(topic, callback) {\n    return this.incomingDataStreamManager.registerByteStreamHandler(topic, callback);\n  }\n  unregisterByteStreamHandler(topic) {\n    return this.incomingDataStreamManager.unregisterByteStreamHandler(topic);\n  }\n  /**\n   * Establishes the participant as a receiver for calls of the specified RPC method.\n   *\n   * @param method - The name of the indicated RPC method\n   * @param handler - Will be invoked when an RPC request for this method is received\n   * @returns A promise that resolves when the method is successfully registered\n   * @throws {Error} If a handler for this method is already registered (must call unregisterRpcMethod first)\n   *\n   * @example\n   * ```typescript\n   * room.localParticipant?.registerRpcMethod(\n   *   'greet',\n   *   async (data: RpcInvocationData) => {\n   *     console.log(`Received greeting from ${data.callerIdentity}: ${data.payload}`);\n   *     return `Hello, ${data.callerIdentity}!`;\n   *   }\n   * );\n   * ```\n   *\n   * The handler should return a Promise that resolves to a string.\n   * If unable to respond within `responseTimeout`, the request will result in an error on the caller's side.\n   *\n   * You may throw errors of type `RpcError` with a string `message` in the handler,\n   * and they will be received on the caller's side with the message intact.\n   * Other errors thrown in your handler will not be transmitted as-is, and will instead arrive to the caller as `1500` (\"Application Error\").\n   */\n  registerRpcMethod(method, handler) {\n    this.rpcServerManager.registerRpcMethod(method, handler);\n  }\n  /**\n   * Unregisters a previously registered RPC method.\n   *\n   * @param method - The name of the RPC method to unregister\n   */\n  unregisterRpcMethod(method) {\n    this.rpcServerManager.unregisterRpcMethod(method);\n  }\n  /**\n   * @experimental\n   */\n  setE2EEEnabled(enabled) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.e2eeStateMutex.lock();\n      try {\n        if (this.e2eeManager) {\n          if (this.isE2EEEnabled !== enabled) {\n            yield this.localParticipant.setE2EEEnabled(enabled);\n            if (this.localParticipant.identity !== '') {\n              this.e2eeManager.setParticipantCryptorEnabled(enabled, this.localParticipant.identity);\n            }\n          }\n        } else {\n          throw Error('e2ee not configured, please set e2ee settings within the room options');\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  setupE2EE() {\n    // when encryption is enabled via `options.encryption`, we enable data channel encryption\n    var _a, _b;\n    const dcEncryptionEnabled = !!this.options.encryption;\n    const e2eeOptions = this.options.encryption || this.options.e2ee;\n    if (e2eeOptions) {\n      if ('e2eeManager' in e2eeOptions) {\n        this.e2eeManager = e2eeOptions.e2eeManager;\n        this.e2eeManager.isDataChannelEncryptionEnabled = dcEncryptionEnabled;\n      } else {\n        this.e2eeManager = new E2EEManager(e2eeOptions, dcEncryptionEnabled);\n      }\n      this.e2eeManager.on(EncryptionEvent.ParticipantEncryptionStatusChanged, (enabled, participant) => {\n        if (isLocalParticipant(participant)) {\n          this.isE2EEEnabled = enabled;\n        }\n        this.emit(RoomEvent.ParticipantEncryptionStatusChanged, enabled, participant);\n      });\n      this.e2eeManager.on(EncryptionEvent.EncryptionError, (error, participantIdentity) => {\n        const participant = participantIdentity ? this.getParticipantByIdentity(participantIdentity) : undefined;\n        this.emit(RoomEvent.EncryptionError, error, participant);\n      });\n      (_a = this.e2eeManager) === null || _a === void 0 ? void 0 : _a.setup(this);\n      (_b = this.e2eeManager) === null || _b === void 0 ? void 0 : _b.setupEngine(this.engine);\n    }\n  }\n  setupFrameMetadata() {\n    var _a;\n    const opts = (_a = this.options.frameMetadata) !== null && _a !== void 0 ? _a : this.options.packetTrailer;\n    this.frameMetadataManager = new FrameMetadataManager(opts);\n    this.frameMetadataManager.setup(this);\n  }\n  get logContext() {\n    var _a, _b, _c;\n    return {\n      room: this.name,\n      roomID: (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.sid,\n      participant: (_b = this.localParticipant) === null || _b === void 0 ? void 0 : _b.identity,\n      participantID: (_c = this.localParticipant) === null || _c === void 0 ? void 0 : _c.sid\n    };\n  }\n  /**\n   * if the current room has a participant with `recorder: true` in its JWT grant\n   **/\n  get isRecording() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.activeRecording) !== null && _b !== void 0 ? _b : false;\n  }\n  /**\n   * server assigned unique room id.\n   * returns once a sid has been issued by the server.\n   */\n  getSid() {\n    if (this.state === ConnectionState.Disconnected) {\n      return TypedPromise.resolve('');\n    }\n    if (this.roomInfo && this.roomInfo.sid !== '') {\n      return TypedPromise.resolve(this.roomInfo.sid);\n    }\n    return new TypedPromise((resolve, reject) => {\n      const handleRoomUpdate = roomInfo => {\n        if (roomInfo.sid !== '') {\n          this.engine.off(EngineEvent.RoomUpdate, handleRoomUpdate);\n          resolve(roomInfo.sid);\n        }\n      };\n      this.engine.on(EngineEvent.RoomUpdate, handleRoomUpdate);\n      this.once(RoomEvent.Disconnected, () => {\n        this.engine.off(EngineEvent.RoomUpdate, handleRoomUpdate);\n        reject(new UnexpectedConnectionState('Room disconnected before room server id was available'));\n      });\n    });\n  }\n  /** user assigned name, derived from JWT token */\n  get name() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';\n  }\n  /** room metadata */\n  get metadata() {\n    var _a;\n    return (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.metadata;\n  }\n  get numParticipants() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numParticipants) !== null && _b !== void 0 ? _b : 0;\n  }\n  get numPublishers() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numPublishers) !== null && _b !== void 0 ? _b : 0;\n  }\n  maybeCreateEngine() {\n    if (this.engine && (this.engine.isNewlyCreated || !this.engine.isClosed)) {\n      return;\n    }\n    this.engine = new RTCEngine(this.options);\n    this.engine.e2eeManager = this.e2eeManager;\n    this.engine.on(EngineEvent.ParticipantUpdate, this.handleParticipantUpdates).on(EngineEvent.RoomUpdate, this.handleRoomUpdate).on(EngineEvent.SpeakersChanged, this.handleSpeakersChanged).on(EngineEvent.StreamStateChanged, this.handleStreamStateUpdate).on(EngineEvent.ConnectionQualityUpdate, this.handleConnectionQualityUpdate).on(EngineEvent.SubscriptionError, this.handleSubscriptionError).on(EngineEvent.SubscriptionPermissionUpdate, this.handleSubscriptionPermissionUpdate).on(EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {\n      this.onTrackAdded(mediaTrack, stream, receiver);\n    }).on(EngineEvent.Disconnected, reason => {\n      this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, reason);\n    }).on(EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate).on(EngineEvent.DataPacketReceived, this.handleDataPacket).on(EngineEvent.Resuming, () => {\n      this.clearConnectionReconcile();\n      this.isResuming = true;\n      this.log.debug('Resuming signal connection');\n      if (this.setAndEmitConnectionState(ConnectionState.SignalReconnecting)) {\n        this.emit(RoomEvent.SignalReconnecting);\n      }\n    }).on(EngineEvent.Resumed, () => {\n      this.registerConnectionReconcile();\n      this.isResuming = false;\n      this.log.debug('Resumed signal connection');\n      this.updateSubscriptions();\n      this.emitBufferedEvents();\n      if (this.setAndEmitConnectionState(ConnectionState.Connected)) {\n        this.emit(RoomEvent.Reconnected);\n      }\n    }).on(EngineEvent.SignalResumed, () => {\n      this.bufferedEvents = [];\n      if (this.state === ConnectionState.Reconnecting || this.isResuming) {\n        this.sendSyncState();\n      }\n    }).on(EngineEvent.Restarting, this.handleRestarting).on(EngineEvent.Restarted, this.handleRestarted).on(EngineEvent.SignalRestarted, this.handleSignalRestarted).on(EngineEvent.Offline, () => {\n      if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {\n        this.emit(RoomEvent.Reconnecting);\n      }\n    }).on(EngineEvent.DCBufferStatusChanged, (status, kind) => {\n      this.emit(RoomEvent.DCBufferStatusChanged, status, kind);\n    }).on(EngineEvent.LocalTrackSubscribed, subscribedSid => {\n      this.handleLocalTrackSubscribed(subscribedSid);\n    }).on(EngineEvent.RoomMoved, roomMoved => {\n      this.log.debug('room moved', roomMoved);\n      if (roomMoved.room) {\n        this.handleRoomUpdate(roomMoved.room);\n      }\n      this.remoteParticipants.forEach((participant, identity) => {\n        this.handleParticipantDisconnected(identity, participant);\n      });\n      this.emit(RoomEvent.Moved, roomMoved.room.name);\n      if (roomMoved.participant) {\n        this.handleParticipantUpdates([roomMoved.participant, ...roomMoved.otherParticipants]);\n      } else {\n        this.handleParticipantUpdates(roomMoved.otherParticipants);\n      }\n    }).on(EngineEvent.PublishDataTrackResponse, event => {\n      if (!event.info) {\n        this.log.warn(\"received PublishDataTrackResponse, but event.info was \".concat(event.info, \", so skipping.\"));\n        return;\n      }\n      this.outgoingDataTrackManager.receivedSfuPublishResponse(event.info.pubHandle, {\n        type: 'ok',\n        data: {\n          sid: event.info.sid,\n          pubHandle: event.info.pubHandle,\n          name: event.info.name,\n          usesE2ee: event.info.encryption !== Encryption_Type.NONE\n        }\n      });\n    }).on(EngineEvent.UnPublishDataTrackResponse, event => {\n      if (!event.info) {\n        this.log.warn(\"received UnPublishDataTrackResponse, but event.info was \".concat(event.info, \", so skipping.\"));\n        return;\n      }\n      this.outgoingDataTrackManager.receivedSfuUnpublishResponse(event.info.pubHandle);\n    }).on(EngineEvent.DataTrackSubscriberHandles, event => {\n      const handleToSidMapping = new Map(Object.entries(event.subHandles).map(_ref4 => {\n        let _ref5 = _slicedToArray(_ref4, 2),\n          key = _ref5[0],\n          value = _ref5[1];\n        return [parseInt(key, 10), value.trackSid];\n      }));\n      this.incomingDataTrackManager.receivedSfuSubscriberHandles(handleToSidMapping);\n    }).on(EngineEvent.DataTrackPacketReceived, packetBytes => {\n      try {\n        this.incomingDataTrackManager.packetReceived(packetBytes);\n      } catch (err) {\n        // NOTE: wrapping in the bare try/catch like this means that the Throws<...> type doesn't\n        // propagate upwards into the public interface.\n        throw err;\n      }\n    }).on(EngineEvent.Joined, joinResponse => {\n      // Ingest data track publication updates into data tracks infrastructure\n      const mapped = new Map(joinResponse.otherParticipants.map(participant => {\n        return [participant.identity, participant.dataTracks.map(info => DataTrackInfo.from(info))];\n      }));\n      this.incomingDataTrackManager.receiveSfuPublicationUpdates(mapped);\n    }).on(EngineEvent.TokenRefreshed, token => {\n      var _a;\n      (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.updateToken(token);\n    }).on(EngineEvent.ServerRegionsReported, regions => {\n      var _a;\n      (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.setServerReportedRegions({\n        regionSettings: regions,\n        updatedAtInMs: Date.now(),\n        maxAgeInMs: DEFAULT_MAX_AGE_MS\n      });\n    });\n    if (this.localParticipant) {\n      this.localParticipant.setupEngine(this.engine);\n    }\n    if (this.e2eeManager) {\n      this.e2eeManager.setupEngine(this.engine);\n    }\n    if (this.outgoingDataStreamManager) {\n      this.outgoingDataStreamManager.setupEngine(this.engine);\n    }\n  }\n  createRegionStrategy() {\n    return {\n      getNextUrl: signal => __awaiter(this, void 0, void 0, function* () {\n        return this.regionUrlProvider ? this.regionUrlProvider.getNextBestRegionUrl(signal) : null;\n      }),\n      resetAttempts: () => {\n        var _a;\n        return (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.resetAttempts();\n      }\n    };\n  }\n  /**\n   * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.\n   * In particular, it requests device permissions by default if needed\n   * and makes sure the returned device does not consist of dummy devices\n   * @param kind\n   * @returns a list of available local devices\n   */\n  static getLocalDevices(kind) {\n    let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    return DeviceManager.getInstance().getDevices(kind, requestPermissions);\n  }\n  /**\n   * prepareConnection should be called as soon as the page is loaded, in order\n   * to speed up the connection attempt. This function will\n   * - perform DNS resolution and pre-warm the DNS cache\n   * - establish TLS connection and cache TLS keys\n   *\n   * With LiveKit Cloud, it will also determine the best edge data center for\n   * the current client to connect to if a token is provided.\n   */\n  prepareConnection(url, token) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.state !== ConnectionState.Disconnected) {\n        return;\n      }\n      this.log.debug(\"prepareConnection to \".concat(url));\n      try {\n        if (isCloud(new URL(url)) && token) {\n          this.regionUrlProvider = new RegionUrlProvider(url, token);\n          const regionUrl = yield this.regionUrlProvider.getNextBestRegionUrl();\n          // we will not replace the regionUrl if an attempt had already started\n          // to avoid overriding regionUrl after a new connection attempt had started\n          if (regionUrl && this.state === ConnectionState.Disconnected) {\n            this.regionUrl = regionUrl;\n            yield fetch(toHttpUrl(regionUrl), {\n              method: 'HEAD'\n            });\n            this.log.debug(\"prepared connection to \".concat(regionUrl));\n          }\n        } else {\n          yield fetch(toHttpUrl(url), {\n            method: 'HEAD'\n          });\n        }\n      } catch (e) {\n        this.log.warn('could not prepare connection', {\n          error: e\n        });\n      }\n    });\n  }\n  /**\n   * retrieves a participant by identity\n   * @param identity\n   * @returns\n   */\n  getParticipantByIdentity(identity) {\n    if (this.localParticipant.identity === identity) {\n      return this.localParticipant;\n    }\n    return this.remoteParticipants.get(identity);\n  }\n  clearConnectionFutures() {\n    this.connectFuture = undefined;\n  }\n  /**\n   * @internal for testing\n   */\n  simulateScenario(scenario, arg) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let postAction = () => __awaiter(this, void 0, void 0, function* () {});\n      let req;\n      switch (scenario) {\n        case 'signal-reconnect':\n          // @ts-expect-error function is private\n          yield this.engine.client.handleOnClose('simulate disconnect');\n          break;\n        case 'fail-on-v1-path':\n          this.engine.failNextV1Path();\n          break;\n        case 'speaker':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'speakerUpdate',\n              value: 3\n            }\n          });\n          break;\n        case 'node-failure':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'nodeFailure',\n              value: true\n            }\n          });\n          break;\n        case 'server-leave':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'serverLeave',\n              value: true\n            }\n          });\n          break;\n        case 'migration':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'migration',\n              value: true\n            }\n          });\n          break;\n        case 'resume-reconnect':\n          this.engine.failNext();\n          // @ts-expect-error function is private\n          yield this.engine.client.handleOnClose('simulate resume-disconnect');\n          break;\n        case 'disconnect-signal-on-resume':\n          postAction = () => __awaiter(this, void 0, void 0, function* () {\n            // @ts-expect-error function is private\n            yield this.engine.client.handleOnClose('simulate resume-disconnect');\n          });\n          req = new SimulateScenario({\n            scenario: {\n              case: 'disconnectSignalOnResume',\n              value: true\n            }\n          });\n          break;\n        case 'disconnect-signal-on-resume-no-messages':\n          postAction = () => __awaiter(this, void 0, void 0, function* () {\n            // @ts-expect-error function is private\n            yield this.engine.client.handleOnClose('simulate resume-disconnect');\n          });\n          req = new SimulateScenario({\n            scenario: {\n              case: 'disconnectSignalOnResumeNoMessages',\n              value: true\n            }\n          });\n          break;\n        case 'full-reconnect':\n          this.engine.fullReconnectOnNext = true;\n          // @ts-expect-error function is private\n          yield this.engine.client.handleOnClose('simulate full-reconnect');\n          break;\n        case 'force-tcp':\n        case 'force-tls':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'switchCandidateProtocol',\n              value: scenario === 'force-tls' ? 2 : 1\n            }\n          });\n          postAction = () => __awaiter(this, void 0, void 0, function* () {\n            const onLeave = this.engine.client.onLeave;\n            if (onLeave) {\n              onLeave(new LeaveRequest({\n                reason: DisconnectReason.CLIENT_INITIATED,\n                action: LeaveRequest_Action.RECONNECT\n              }));\n            }\n          });\n          break;\n        case 'subscriber-bandwidth':\n          if (arg === undefined || typeof arg !== 'number') {\n            throw new Error('subscriber-bandwidth requires a number as argument');\n          }\n          req = new SimulateScenario({\n            scenario: {\n              case: 'subscriberBandwidth',\n              value: numberToBigInt(arg)\n            }\n          });\n          break;\n        case 'leave-full-reconnect':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'leaveRequestFullReconnect',\n              value: true\n            }\n          });\n      }\n      if (req) {\n        yield this.engine.client.sendSimulateScenario(req);\n        yield postAction();\n      }\n    });\n  }\n  /**\n   * Returns true if audio playback is enabled\n   */\n  get canPlaybackAudio() {\n    return this.audioEnabled;\n  }\n  /**\n   * Returns true if video playback is enabled\n   */\n  get canPlaybackVideo() {\n    return !this.isVideoPlaybackBlocked;\n  }\n  getActiveDevice(kind) {\n    return this.localParticipant.activeDeviceMap.get(kind);\n  }\n  /**\n   * Switches all active devices used in this room to the given device.\n   *\n   * Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)\n   *\n   * @param kind use `videoinput` for camera track,\n   *  `audioinput` for microphone track,\n   *  `audiooutput` to set speaker for all incoming audio tracks\n   * @param deviceId\n   */\n  switchActiveDevice(kind_1, deviceId_1) {\n    return __awaiter(this, arguments, void 0, function (kind, deviceId) {\n      var _this3 = this;\n      let exact = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      return function* () {\n        var _a, _b, _c, _d, _e, _f;\n        var _g;\n        let success = true;\n        let shouldTriggerImmediateDeviceChange = false;\n        const deviceConstraint = exact ? {\n          exact: deviceId\n        } : deviceId;\n        if (kind === 'audioinput') {\n          shouldTriggerImmediateDeviceChange = _this3.localParticipant.audioTrackPublications.size === 0;\n          const prevDeviceId = (_a = _this3.getActiveDevice(kind)) !== null && _a !== void 0 ? _a : _this3.options.audioCaptureDefaults.deviceId;\n          _this3.options.audioCaptureDefaults.deviceId = deviceConstraint;\n          const tracks = Array.from(_this3.localParticipant.audioTrackPublications.values()).filter(track => track.source === Track.Source.Microphone);\n          try {\n            success = (yield Promise.all(tracks.map(t => {\n              var _a;\n              return (_a = t.audioTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);\n            }))).every(val => val === true);\n          } catch (e) {\n            _this3.options.audioCaptureDefaults.deviceId = prevDeviceId;\n            throw e;\n          }\n          const isMuted = tracks.some(t => {\n            var _a, _b;\n            return (_b = (_a = t.track) === null || _a === void 0 ? void 0 : _a.isMuted) !== null && _b !== void 0 ? _b : false;\n          });\n          if (success && isMuted) shouldTriggerImmediateDeviceChange = true;\n        } else if (kind === 'videoinput') {\n          shouldTriggerImmediateDeviceChange = _this3.localParticipant.videoTrackPublications.size === 0;\n          const prevDeviceId = (_b = _this3.getActiveDevice(kind)) !== null && _b !== void 0 ? _b : _this3.options.videoCaptureDefaults.deviceId;\n          _this3.options.videoCaptureDefaults.deviceId = deviceConstraint;\n          const tracks = Array.from(_this3.localParticipant.videoTrackPublications.values()).filter(track => track.source === Track.Source.Camera);\n          try {\n            success = (yield Promise.all(tracks.map(t => {\n              var _a;\n              return (_a = t.videoTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);\n            }))).every(val => val === true);\n          } catch (e) {\n            _this3.options.videoCaptureDefaults.deviceId = prevDeviceId;\n            throw e;\n          }\n          const isMuted = tracks.some(t => {\n            var _a, _b;\n            return (_b = (_a = t.track) === null || _a === void 0 ? void 0 : _a.isMuted) !== null && _b !== void 0 ? _b : false;\n          });\n          if (success && isMuted) shouldTriggerImmediateDeviceChange = true;\n        } else if (kind === 'audiooutput') {\n          shouldTriggerImmediateDeviceChange = true;\n          if (!supportsSetSinkId() && !_this3.options.webAudioMix || _this3.options.webAudioMix && _this3.audioContext && !('setSinkId' in _this3.audioContext)) {\n            throw new Error('cannot switch audio output, the current browser does not support it');\n          }\n          if (_this3.options.webAudioMix) {\n            // setting `default` for web audio output doesn't work, so we need to normalize the id before\n            deviceId = (_c = yield DeviceManager.getInstance().normalizeDeviceId('audiooutput', deviceId)) !== null && _c !== void 0 ? _c : '';\n          }\n          (_d = (_g = _this3.options).audioOutput) !== null && _d !== void 0 ? _d : _g.audioOutput = {};\n          const prevDeviceId = (_e = _this3.getActiveDevice(kind)) !== null && _e !== void 0 ? _e : _this3.options.audioOutput.deviceId;\n          _this3.options.audioOutput.deviceId = deviceId;\n          try {\n            if (_this3.options.webAudioMix) {\n              // @ts-expect-error setSinkId is not yet in the typescript type of AudioContext\n              (_f = _this3.audioContext) === null || _f === void 0 ? void 0 : _f.setSinkId(deviceId);\n            }\n            // also set audio output on all audio elements, even if webAudioMix is enabled in order to workaround echo cancellation not working on chrome with non-default output devices\n            // see https://issues.chromium.org/issues/40252911#comment7\n            yield Promise.all(Array.from(_this3.remoteParticipants.values()).map(p => p.setAudioOutput({\n              deviceId\n            })));\n          } catch (e) {\n            _this3.options.audioOutput.deviceId = prevDeviceId;\n            throw e;\n          }\n        }\n        if (shouldTriggerImmediateDeviceChange) {\n          _this3.localParticipant.activeDeviceMap.set(kind, deviceId);\n          _this3.emit(RoomEvent.ActiveDeviceChanged, kind, deviceId);\n        }\n        return success;\n      }();\n    });\n  }\n  setupLocalParticipantEvents() {\n    this.localParticipant.on(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).on(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).on(ParticipantEvent.AttributesChanged, this.onLocalAttributesChanged).on(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).on(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).on(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).on(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).on(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).on(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).on(ParticipantEvent.AudioStreamAcquired, this.startAudio).on(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent).on(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);\n  }\n  recreateEngine(sendLeave) {\n    const oldEngine = this.engine;\n    if (sendLeave && oldEngine && !oldEngine.client.isDisconnected) {\n      oldEngine.client.sendLeave().finally(() => oldEngine.close());\n    } else {\n      oldEngine === null || oldEngine === void 0 ? void 0 : oldEngine.close();\n    }\n    /* @ts-ignore */\n    this.engine = undefined;\n    this.isResuming = false;\n    // clear out existing remote participants, since they may have attached\n    // the old engine\n    this.remoteParticipants.clear();\n    this.sidToIdentity.clear();\n    this.bufferedEvents = [];\n    this.maybeCreateEngine();\n  }\n  onTrackAdded(mediaTrack, stream, receiver) {\n    // don't fire onSubscribed when connecting\n    // WebRTC fires onTrack as soon as setRemoteDescription is called on the offer\n    // at that time, ICE connectivity has not been established so the track is not\n    // technically subscribed.\n    // We'll defer these events until when the room is connected or eventually disconnected.\n    if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {\n      const reconnectedHandler = () => {\n        this.log.debug('deferring on track for later', {\n          mediaTrackId: mediaTrack.id,\n          mediaStreamId: stream.id,\n          tracksInStream: stream.getTracks().map(track => track.id)\n        });\n        this.onTrackAdded(mediaTrack, stream, receiver);\n        cleanup();\n      };\n      const cleanup = () => {\n        this.off(RoomEvent.Reconnected, reconnectedHandler);\n        this.off(RoomEvent.Connected, reconnectedHandler);\n        this.off(RoomEvent.Disconnected, cleanup);\n      };\n      this.once(RoomEvent.Reconnected, reconnectedHandler);\n      this.once(RoomEvent.Connected, reconnectedHandler);\n      this.once(RoomEvent.Disconnected, cleanup);\n      return;\n    }\n    if (this.state === ConnectionState.Disconnected) {\n      this.log.warn('skipping incoming track after Room disconnected');\n      return;\n    }\n    if (mediaTrack.readyState === 'ended') {\n      this.log.debug('skipping incoming track as it already ended');\n      return;\n    }\n    const parts = unpackStreamId(stream.id);\n    const participantSid = parts[0];\n    let streamId = parts[1];\n    let trackId = mediaTrack.id;\n    // firefox will get streamId (pID|trackId) instead of (pID|streamId) as it doesn't support sync tracks by stream\n    // and generates its own track id instead of infer from sdp track id.\n    if (streamId && streamId.startsWith('TR')) trackId = streamId;\n    if (participantSid === this.localParticipant.sid) {\n      this.log.warn('tried to create RemoteParticipant for local participant');\n      return;\n    }\n    const participant = Array.from(this.remoteParticipants.values()).find(p => p.sid === participantSid);\n    if (!participant) {\n      // server could require extra media sections to accelerate subscription.\n      if (participantSid.startsWith('PA')) {\n        this.log.error(\"Tried to add a track for a participant, that's not present. Sid: \".concat(participantSid));\n      }\n      return;\n    }\n    // in single peer connection case, the trackID is locally generated,\n    // not the TR_ prefixed one generated by the server,\n    // use `mid` to find the appropriate track.\n    if (!trackId.startsWith('TR')) {\n      const id = this.engine.getTrackIdForReceiver(receiver);\n      if (!id) {\n        this.log.error(\"Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: \".concat(participantSid));\n        return;\n      }\n      trackId = id;\n    }\n    if (!trackId.startsWith('TR')) {\n      this.log.warn(\"Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: \".concat(participantSid, \", streamId: \").concat(streamId, \", trackId: \").concat(trackId), {\n        remoteParticipantID: participantSid,\n        streamId,\n        trackId\n      });\n    }\n    let adaptiveStreamSettings;\n    if (this.options.adaptiveStream) {\n      if (typeof this.options.adaptiveStream === 'object') {\n        adaptiveStreamSettings = this.options.adaptiveStream;\n      } else {\n        adaptiveStreamSettings = {};\n      }\n    }\n    const publication = participant.addSubscribedMediaTrack(mediaTrack, trackId, stream, receiver, adaptiveStreamSettings);\n    if ((publication === null || publication === void 0 ? void 0 : publication.isEncrypted) && !this.e2eeManager) {\n      this.emit(RoomEvent.EncryptionError, new Error(\"Encrypted \".concat(publication.source, \" track received from participant \").concat(participant.sid, \", but room does not have encryption enabled!\")));\n    }\n  }\n  handleLocalTrackSubscribed(subscribedSid) {\n    const findPublication = () => this.localParticipant.getTrackPublications().find(_ref6 => {\n      let trackSid = _ref6.trackSid;\n      return trackSid === subscribedSid;\n    });\n    const trackPublication = findPublication();\n    if (trackPublication) {\n      this.emitLocalTrackSubscribed(trackPublication);\n      return;\n    }\n    // the track publication may not be registered yet if the server signals\n    // the subscription before publishTrack has finished adding the publication.\n    // defer with a timeout until LocalTrackPublished fires for the matching trackSid\n    this.log.debug('deferring LocalTrackSubscribed, publication not yet available', {\n      subscribedSid\n    });\n    const TIMEOUT_MS = 10000;\n    let timer;\n    const onPublished = pub => {\n      if (pub.trackSid === subscribedSid) {\n        cleanup();\n        this.emitLocalTrackSubscribed(pub);\n      }\n    };\n    const cleanup = () => {\n      clearTimeout(timer);\n      this.localParticipant.off(ParticipantEvent.LocalTrackPublished, onPublished);\n      this.off(RoomEvent.Disconnected, cleanup);\n    };\n    this.localParticipant.on(ParticipantEvent.LocalTrackPublished, onPublished);\n    this.once(RoomEvent.Disconnected, cleanup);\n    timer = setTimeout(() => {\n      cleanup();\n      // final attempt in case the publication was added without emitting the event\n      const pub = findPublication();\n      if (pub) {\n        this.emitLocalTrackSubscribed(pub);\n      } else {\n        this.log.warn('could not find local track publication for LocalTrackSubscribed event after timeout', {\n          subscribedSid\n        });\n      }\n    }, TIMEOUT_MS);\n  }\n  emitLocalTrackSubscribed(trackPublication) {\n    this.localParticipant.emit(ParticipantEvent.LocalTrackSubscribed, trackPublication);\n    this.emitWhenConnected(RoomEvent.LocalTrackSubscribed, trackPublication, this.localParticipant);\n  }\n  handleDisconnect() {\n    let shouldStopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    let reason = arguments.length > 1 ? arguments[1] : undefined;\n    var _a, _b;\n    this.clearConnectionReconcile();\n    this.isResuming = false;\n    this.bufferedEvents = [];\n    this.transcriptionReceivedTimes.clear();\n    this.incomingDataStreamManager.clearControllers();\n    this.incomingDataTrackManager.reset();\n    this.outgoingDataTrackManager.reset();\n    if (this.state === ConnectionState.Disconnected) {\n      return;\n    }\n    this.regionUrl = undefined;\n    // Notify region provider about disconnect to potentially stop auto-refetch\n    if (this.regionUrlProvider) {\n      this.regionUrlProvider.notifyDisconnected();\n    }\n    try {\n      this.remoteParticipants.forEach(p => {\n        p.trackPublications.forEach(pub => {\n          p.unpublishTrack(pub.trackSid);\n        });\n      });\n      this.localParticipant.trackPublications.forEach(pub => {\n        var _a, _b, _c;\n        if (pub.track) {\n          this.localParticipant.unpublishTrack(pub.track, shouldStopTracks);\n        }\n        if (shouldStopTracks) {\n          (_a = pub.track) === null || _a === void 0 ? void 0 : _a.detach();\n          (_b = pub.track) === null || _b === void 0 ? void 0 : _b.stop();\n        } else {\n          (_c = pub.track) === null || _c === void 0 ? void 0 : _c.stopMonitor();\n        }\n      });\n      this.localParticipant.off(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).off(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).off(ParticipantEvent.AttributesChanged, this.onLocalAttributesChanged).off(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).off(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).off(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).off(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).off(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).off(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).off(ParticipantEvent.AudioStreamAcquired, this.startAudio).off(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent).off(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);\n      this.localParticipant.trackPublications.clear();\n      this.localParticipant.videoTrackPublications.clear();\n      this.localParticipant.audioTrackPublications.clear();\n      this.remoteParticipants.clear();\n      this.sidToIdentity.clear();\n      this.activeSpeakers = [];\n      if (this.audioContext && typeof this.options.webAudioMix === 'boolean') {\n        this.audioContext.close();\n        this.audioContext = undefined;\n      }\n      if (isWeb()) {\n        window.removeEventListener('beforeunload', this.onPageLeave);\n        window.removeEventListener('pagehide', this.onPageLeave);\n        window.removeEventListener('freeze', this.onPageLeave);\n        (_b = (_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'devicechange', this.handleDeviceChange);\n      }\n    } finally {\n      this.setAndEmitConnectionState(ConnectionState.Disconnected);\n      this.emit(RoomEvent.Disconnected, reason);\n    }\n  }\n  handleParticipantDisconnected(identity, participant) {\n    // remove and send event\n    this.remoteParticipants.delete(identity);\n    if (!participant) {\n      return;\n    }\n    this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(identity);\n    this.incomingDataTrackManager.handleRemoteParticipantDisconnected(identity);\n    participant.trackPublications.forEach(publication => {\n      participant.unpublishTrack(publication.trackSid, true);\n    });\n    this.emit(RoomEvent.ParticipantDisconnected, participant);\n    participant.setDisconnected();\n    this.rpcClientManager.handleParticipantDisconnected(participant.identity);\n  }\n  /**\n   * attempt to select the default devices if the previously selected devices are no longer available after a device change event\n   */\n  selectDefaultDevices() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      const previousDevices = DeviceManager.getInstance().previousDevices;\n      // check for available devices, but don't request permissions in order to avoid prompts for kinds that haven't been used before\n      const availableDevices = yield DeviceManager.getInstance().getDevices(undefined, false);\n      const browser = getBrowser();\n      if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Chrome' && browser.os !== 'iOS') {\n        for (let availableDevice of availableDevices) {\n          const previousDevice = previousDevices.find(info => info.deviceId === availableDevice.deviceId);\n          if (previousDevice && previousDevice.label !== '' && previousDevice.kind === availableDevice.kind && previousDevice.label !== availableDevice.label) {\n            // label has changed on device the same deviceId, indicating that the default device has changed on the OS level\n            if (this.getActiveDevice(availableDevice.kind) === 'default') {\n              // emit an active device change event only if the selected output device is actually on `default`\n              this.emit(RoomEvent.ActiveDeviceChanged, availableDevice.kind, availableDevice.deviceId);\n            }\n          }\n        }\n      }\n      const kinds = ['audiooutput', 'audioinput', 'videoinput'];\n      for (let kind of kinds) {\n        const targetSource = kindToSource(kind);\n        const targetPublication = this.localParticipant.getTrackPublication(targetSource);\n        if (targetPublication && ((_a = targetPublication.track) === null || _a === void 0 ? void 0 : _a.isUserProvided)) {\n          // if the track is user provided, we don't want to switch devices on behalf of the user\n          continue;\n        }\n        const devicesOfKind = availableDevices.filter(d => d.kind === kind);\n        const activeDevice = this.getActiveDevice(kind);\n        if (activeDevice === ((_b = previousDevices.filter(info => info.kind === kind)[0]) === null || _b === void 0 ? void 0 : _b.deviceId)) {\n          // in  Safari the first device is always the default, so we assume a user on the default device would like to switch to the default once it changes\n          // FF doesn't emit an event when the default device changes, so we perform the same best effort and switch to the new device once connected and if it's the first in the array\n          if (devicesOfKind.length > 0 && ((_c = devicesOfKind[0]) === null || _c === void 0 ? void 0 : _c.deviceId) !== activeDevice) {\n            yield this.switchActiveDevice(kind, devicesOfKind[0].deviceId);\n            continue;\n          }\n        }\n        if (kind === 'audioinput' && !isSafariBased() || kind === 'videoinput') {\n          // airpods on Safari need special handling for audioinput as the track doesn't end as soon as you take them out\n          continue;\n        }\n        // switch to first available device if previously active device is not available any more\n        if (devicesOfKind.length > 0 && !devicesOfKind.find(deviceInfo => deviceInfo.deviceId === this.getActiveDevice(kind)) && (\n        // avoid switching audio output on safari without explicit user action as it leads to slowed down audio playback\n        kind !== 'audiooutput' || !isSafariBased())) {\n          yield this.switchActiveDevice(kind, devicesOfKind[0].deviceId);\n        }\n      }\n    });\n  }\n  acquireAudioContext() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (typeof this.options.webAudioMix !== 'boolean' && this.options.webAudioMix.audioContext) {\n        // override audio context with custom audio context if supplied by user\n        this.audioContext = this.options.webAudioMix.audioContext;\n      } else if (!this.audioContext || this.audioContext.state === 'closed') {\n        // by using an AudioContext, it reduces lag on audio elements\n        // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854\n        this.audioContext = (_a = getNewAudioContext()) !== null && _a !== void 0 ? _a : undefined;\n      }\n      if (this.options.webAudioMix) {\n        this.remoteParticipants.forEach(participant => participant.setAudioContext(this.audioContext));\n      }\n      this.localParticipant.setAudioContext(this.audioContext);\n      if (this.audioContext && this.audioContext.state === 'suspended') {\n        // for iOS a newly created AudioContext is always in `suspended` state.\n        // we try our best to resume the context here, if that doesn't work, we just continue with regular processing\n        try {\n          yield Promise.race([this.audioContext.resume(), sleep(200)]);\n        } catch (e) {\n          this.log.warn('Could not resume audio context', {\n            error: e\n          });\n        }\n      }\n      const newContextIsRunning = ((_b = this.audioContext) === null || _b === void 0 ? void 0 : _b.state) === 'running';\n      if (newContextIsRunning !== this.canPlaybackAudio) {\n        this.audioEnabled = newContextIsRunning;\n        this.emit(RoomEvent.AudioPlaybackStatusChanged, newContextIsRunning);\n      }\n    });\n  }\n  createParticipant(identity, info) {\n    var _a;\n    let participant;\n    if (info) {\n      participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info, {\n        loggerContextCb: () => this.logContext,\n        loggerName: this.options.loggerName\n      }, this.incomingDataTrackManager);\n    } else {\n      participant = new RemoteParticipant(this.engine.client, '', identity, undefined, undefined, undefined, {\n        loggerContextCb: () => this.logContext,\n        loggerName: this.options.loggerName\n      });\n    }\n    if (this.options.webAudioMix) {\n      participant.setAudioContext(this.audioContext);\n    }\n    if ((_a = this.options.audioOutput) === null || _a === void 0 ? void 0 : _a.deviceId) {\n      participant.setAudioOutput(this.options.audioOutput).catch(e => this.log.warn(\"Could not set audio output: \".concat(e.message)));\n    }\n    return participant;\n  }\n  getOrCreateParticipant(identity, info) {\n    if (this.remoteParticipants.has(identity)) {\n      const existingParticipant = this.remoteParticipants.get(identity);\n      if (info) {\n        const wasUpdated = existingParticipant.updateInfo(info);\n        if (wasUpdated) {\n          this.sidToIdentity.set(info.sid, info.identity);\n        }\n      }\n      return existingParticipant;\n    }\n    const participant = this.createParticipant(identity, info);\n    this.remoteParticipants.set(identity, participant);\n    this.sidToIdentity.set(info.sid, info.identity);\n    // if we have valid info and the participant wasn't in the map before, we can assume the participant is new\n    // firing here to make sure that `ParticipantConnected` fires before the initial track events\n    this.emitWhenConnected(RoomEvent.ParticipantConnected, participant);\n    // also forward events\n    // trackPublished is only fired for tracks added after both local participant\n    // and remote participant joined the room\n    participant.on(ParticipantEvent.TrackPublished, trackPublication => {\n      this.emitWhenConnected(RoomEvent.TrackPublished, trackPublication, participant);\n    }).on(ParticipantEvent.TrackSubscribed, (track, publication) => {\n      // monitor playback status\n      if (track.kind === Track.Kind.Audio) {\n        track.on(TrackEvent.AudioPlaybackStarted, this.handleAudioPlaybackStarted);\n        track.on(TrackEvent.AudioPlaybackFailed, this.handleAudioPlaybackFailed);\n      } else if (track.kind === Track.Kind.Video) {\n        track.on(TrackEvent.VideoPlaybackFailed, this.handleVideoPlaybackFailed);\n        track.on(TrackEvent.VideoPlaybackStarted, this.handleVideoPlaybackStarted);\n      }\n      this.emitWhenConnected(RoomEvent.TrackSubscribed, track, publication, participant);\n    }).on(ParticipantEvent.TrackUnpublished, publication => {\n      this.emit(RoomEvent.TrackUnpublished, publication, participant);\n    }).on(ParticipantEvent.TrackUnsubscribed, (track, publication) => {\n      this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);\n    }).on(ParticipantEvent.TrackMuted, pub => {\n      this.emitWhenConnected(RoomEvent.TrackMuted, pub, participant);\n    }).on(ParticipantEvent.TrackUnmuted, pub => {\n      this.emitWhenConnected(RoomEvent.TrackUnmuted, pub, participant);\n    }).on(ParticipantEvent.ParticipantMetadataChanged, metadata => {\n      this.emitWhenConnected(RoomEvent.ParticipantMetadataChanged, metadata, participant);\n    }).on(ParticipantEvent.ParticipantNameChanged, name => {\n      this.emitWhenConnected(RoomEvent.ParticipantNameChanged, name, participant);\n    }).on(ParticipantEvent.AttributesChanged, changedAttributes => {\n      this.emitWhenConnected(RoomEvent.ParticipantAttributesChanged, changedAttributes, participant);\n    }).on(ParticipantEvent.ConnectionQualityChanged, quality => {\n      this.emitWhenConnected(RoomEvent.ConnectionQualityChanged, quality, participant);\n    }).on(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions => {\n      this.emitWhenConnected(RoomEvent.ParticipantPermissionsChanged, prevPermissions, participant);\n    }).on(ParticipantEvent.TrackSubscriptionStatusChanged, (pub, status) => {\n      this.emitWhenConnected(RoomEvent.TrackSubscriptionStatusChanged, pub, status, participant);\n    }).on(ParticipantEvent.TrackSubscriptionFailed, (trackSid, error) => {\n      this.emit(RoomEvent.TrackSubscriptionFailed, trackSid, participant, error);\n    }).on(ParticipantEvent.TrackSubscriptionPermissionChanged, (pub, status) => {\n      this.emitWhenConnected(RoomEvent.TrackSubscriptionPermissionChanged, pub, status, participant);\n    }).on(ParticipantEvent.Active, () => {\n      this.emitWhenConnected(RoomEvent.ParticipantActive, participant);\n      if (participant.kind === ParticipantInfo_Kind.AGENT) {\n        this.localParticipant.setActiveAgent(participant);\n      }\n    });\n    // update info at the end after callbacks have been set up\n    if (info) {\n      participant.updateInfo(info);\n    }\n    return participant;\n  }\n  sendSyncState() {\n    const remoteTracks = Array.from(this.remoteParticipants.values()).reduce((acc, participant) => {\n      acc.push(...participant.getTrackPublications()); // FIXME would be nice to have this return RemoteTrackPublications directly instead of the type cast\n      return acc;\n    }, []);\n    const localTracks = this.localParticipant.getTrackPublications(); // FIXME would be nice to have this return LocalTrackPublications directly instead of the type cast\n    const localDataTrackInfos = this.outgoingDataTrackManager.queryPublished();\n    this.engine.sendSyncState(remoteTracks, localTracks, localDataTrackInfos);\n  }\n  /**\n   * After resuming, we'll need to notify the server of the current\n   * subscription settings.\n   */\n  updateSubscriptions() {\n    for (const p of this.remoteParticipants.values()) {\n      for (const pub of p.videoTrackPublications.values()) {\n        if (pub.isSubscribed && isRemotePub(pub)) {\n          pub.emitTrackUpdate();\n        }\n      }\n    }\n  }\n  getRemoteParticipantBySid(sid) {\n    const identity = this.sidToIdentity.get(sid);\n    if (identity) {\n      return this.remoteParticipants.get(identity);\n    }\n  }\n  registerRpcDataStreamHandler() {\n    this.incomingDataStreamManager.registerTextStreamHandler(RPC_REQUEST_DATA_STREAM_TOPIC, (reader_1, _a) => __awaiter(this, [reader_1, _a], void 0, function (reader, _ref7) {\n      var _this4 = this;\n      let identity = _ref7.identity;\n      return function* () {\n        var _b;\n        const attributes = (_b = reader.info.attributes) !== null && _b !== void 0 ? _b : {};\n        yield _this4.rpcServerManager.handleIncomingDataStream(reader, identity, attributes);\n      }();\n    }));\n    this.incomingDataStreamManager.registerTextStreamHandler(RPC_RESPONSE_DATA_STREAM_TOPIC, (reader_1, _a) => __awaiter(this, [reader_1, _a], void 0, function (reader, _ref8) {\n      var _this5 = this;\n      let identity = _ref8.identity;\n      return function* () {\n        var _b;\n        const attributes = (_b = reader.info.attributes) !== null && _b !== void 0 ? _b : {};\n        yield _this5.rpcClientManager.handleIncomingDataStream(reader, identity, attributes);\n      }();\n    }));\n  }\n  registerConnectionReconcile() {\n    this.clearConnectionReconcile();\n    let consecutiveFailures = 0;\n    this.connectionReconcileInterval = CriticalTimers.setInterval(() => {\n      if (\n      // ensure we didn't tear it down\n      !this.engine ||\n      // engine detected close, but Room missed it\n      this.engine.isClosed ||\n      // transports failed without notifying engine\n      !this.engine.verifyTransport()) {\n        consecutiveFailures++;\n        this.log.warn('detected connection state mismatch', {\n          numFailures: consecutiveFailures,\n          engine: this.engine ? {\n            closed: this.engine.isClosed,\n            transportsConnectedOrConnecting: this.engine.verifyTransport()\n          } : undefined\n        });\n        if (consecutiveFailures >= 3) {\n          this.recreateEngine();\n          this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, DisconnectReason.STATE_MISMATCH);\n        }\n      } else {\n        consecutiveFailures = 0;\n      }\n    }, CONNECTION_RECONCILE_FREQUENCY_MS);\n  }\n  clearConnectionReconcile() {\n    if (this.connectionReconcileInterval) {\n      CriticalTimers.clearInterval(this.connectionReconcileInterval);\n    }\n  }\n  setAndEmitConnectionState(state) {\n    if (state === this.state) {\n      // unchanged\n      return false;\n    }\n    this.log.info(\"connection state changed: \".concat(this.state, \" -> \").concat(state));\n    this.state = state;\n    this.incomingDataStreamManager.setConnected(state === ConnectionState.Connected);\n    this.emit(RoomEvent.ConnectionStateChanged, this.state);\n    return true;\n  }\n  emitBufferedEvents() {\n    this.bufferedEvents.forEach(_ref9 => {\n      let _ref0 = _slicedToArray(_ref9, 2),\n        ev = _ref0[0],\n        args = _ref0[1];\n      this.emit(ev, ...args);\n    });\n    this.bufferedEvents = [];\n  }\n  emitWhenConnected(event) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    if (this.state === ConnectionState.Reconnecting || this.isResuming || !this.engine || this.engine.pendingReconnect) {\n      // in case the room is reconnecting, buffer the events by firing them later after emitting RoomEvent.Reconnected\n      this.bufferedEvents.push([event, args]);\n    } else if (this.state === ConnectionState.Connected) {\n      return this.emit(event, ...args);\n    }\n    return false;\n  }\n  /**\n   * Allows to populate a room with simulated participants.\n   * No actual connection to a server will be established, all state is\n   * @experimental\n   */\n  simulateParticipants(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d;\n      const publishOptions = Object.assign({\n        audio: true,\n        video: true,\n        useRealTracks: false\n      }, options.publish);\n      const participantOptions = Object.assign({\n        count: 9,\n        audio: false,\n        video: true,\n        aspectRatios: [1.66, 1.7, 1.3]\n      }, options.participants);\n      this.handleDisconnect();\n      this.roomInfo = new Room$1({\n        sid: 'RM_SIMULATED',\n        name: 'simulated-room',\n        emptyTimeout: 0,\n        maxParticipants: 0,\n        creationTime: protoInt64.parse(new Date().getTime()),\n        metadata: '',\n        numParticipants: 1,\n        numPublishers: 1,\n        turnPassword: '',\n        enabledCodecs: [],\n        activeRecording: false\n      });\n      this.localParticipant.updateInfo(new ParticipantInfo({\n        identity: 'simulated-local',\n        name: 'local-name'\n      }));\n      this.setupLocalParticipantEvents();\n      this.emit(RoomEvent.SignalConnected);\n      this.emit(RoomEvent.Connected);\n      this.setAndEmitConnectionState(ConnectionState.Connected);\n      if (publishOptions.video) {\n        const camPub = new LocalTrackPublication(Track.Kind.Video, new TrackInfo({\n          source: TrackSource.CAMERA,\n          sid: Math.floor(Math.random() * 10000).toString(),\n          type: TrackType.AUDIO,\n          name: 'video-dummy'\n        }), new LocalVideoTrack(publishOptions.useRealTracks && ((_a = window.navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) ? (yield window.navigator.mediaDevices.getUserMedia({\n          video: true\n        })).getVideoTracks()[0] : createDummyVideoStreamTrack(160 * ((_b = participantOptions.aspectRatios[0]) !== null && _b !== void 0 ? _b : 1), 160, true, true), undefined, false, {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        }), {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        // @ts-ignore\n        this.localParticipant.addTrackPublication(camPub);\n        this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, camPub);\n      }\n      if (publishOptions.audio) {\n        const audioPub = new LocalTrackPublication(Track.Kind.Audio, new TrackInfo({\n          source: TrackSource.MICROPHONE,\n          sid: Math.floor(Math.random() * 10000).toString(),\n          type: TrackType.AUDIO\n        }), new LocalAudioTrack(publishOptions.useRealTracks && ((_c = navigator.mediaDevices) === null || _c === void 0 ? void 0 : _c.getUserMedia) ? (yield navigator.mediaDevices.getUserMedia({\n          audio: true\n        })).getAudioTracks()[0] : getEmptyAudioStreamTrack(), undefined, false, this.audioContext, {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        }), {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        // @ts-ignore\n        this.localParticipant.addTrackPublication(audioPub);\n        this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, audioPub);\n      }\n      for (let i = 0; i < participantOptions.count - 1; i += 1) {\n        let info = new ParticipantInfo({\n          sid: Math.floor(Math.random() * 10000).toString(),\n          identity: \"simulated-\".concat(i),\n          state: ParticipantInfo_State.ACTIVE,\n          tracks: [],\n          joinedAt: protoInt64.parse(Date.now())\n        });\n        const p = this.getOrCreateParticipant(info.identity, info);\n        if (participantOptions.video) {\n          const dummyVideo = createDummyVideoStreamTrack(160 * ((_d = participantOptions.aspectRatios[i % participantOptions.aspectRatios.length]) !== null && _d !== void 0 ? _d : 1), 160, false, true);\n          const videoTrack = new TrackInfo({\n            source: TrackSource.CAMERA,\n            sid: Math.floor(Math.random() * 10000).toString(),\n            type: TrackType.AUDIO\n          });\n          p.addSubscribedMediaTrack(dummyVideo, videoTrack.sid, new MediaStream([dummyVideo]), new RTCRtpReceiver());\n          info.tracks = [...info.tracks, videoTrack];\n        }\n        if (participantOptions.audio) {\n          const dummyTrack = getEmptyAudioStreamTrack();\n          const audioTrack = new TrackInfo({\n            source: TrackSource.MICROPHONE,\n            sid: Math.floor(Math.random() * 10000).toString(),\n            type: TrackType.AUDIO\n          });\n          p.addSubscribedMediaTrack(dummyTrack, audioTrack.sid, new MediaStream([dummyTrack]), new RTCRtpReceiver());\n          info.tracks = [...info.tracks, audioTrack];\n        }\n        p.updateInfo(info);\n      }\n    });\n  }\n  // /** @internal */\n  emit(event) {\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    // active speaker updates are too spammy\n    if (event !== RoomEvent.ActiveSpeakersChanged && event !== RoomEvent.TranscriptionReceived) {\n      // only extract logContext from arguments in order to avoid logging the whole object tree\n      const minimizedArgs = mapArgs(args).filter(arg => arg !== undefined);\n      if (event === RoomEvent.TrackSubscribed || event === RoomEvent.TrackUnsubscribed) {\n        this.log.trace(\"subscribe trace: \".concat(event), {\n          event,\n          args: minimizedArgs\n        });\n      }\n      this.log.debug(\"room event \".concat(event), {\n        event,\n        args: minimizedArgs\n      });\n    }\n    return super.emit(event, ...args);\n  }\n}\nRoom.cleanupRegistry = typeof FinalizationRegistry !== 'undefined' && typeof WeakRef !== 'undefined' && new FinalizationRegistry(cleanup => {\n  cleanup();\n});\nfunction mapArgs(args) {\n  return args.map(arg => {\n    if (!arg) {\n      return;\n    }\n    if (Array.isArray(arg)) {\n      return mapArgs(arg);\n    }\n    if (typeof arg === 'object') {\n      return 'logContext' in arg ? arg.logContext : undefined;\n    }\n    return arg;\n  });\n}// This file was generated from JSON Schema using quicktype, do not modify it directly.\n// The code generation lives at https://github.com/livekit/attribute-definitions\n//\n// To parse this data:\n//\n//   import { Convert, AgentAttributes, TranscriptionAttributes } from \"./file\";\n//\n//   const agentAttributes = Convert.toAgentAttributes(json);\n//   const transcriptionAttributes = Convert.toTranscriptionAttributes(json);\n// Converts JSON strings to/from your types\nclass Convert {\n  static toAgentAttributes(json) {\n    return JSON.parse(json);\n  }\n  static agentAttributesToJson(value) {\n    return JSON.stringify(value);\n  }\n  static toTranscriptionAttributes(json) {\n    return JSON.parse(json);\n  }\n  static transcriptionAttributesToJson(value) {\n    return JSON.stringify(value);\n  }\n}var attributeTypings=/*#__PURE__*/Object.freeze({__proto__:null,Convert:Convert});var CheckStatus;\n(function (CheckStatus) {\n  CheckStatus[CheckStatus[\"IDLE\"] = 0] = \"IDLE\";\n  CheckStatus[CheckStatus[\"RUNNING\"] = 1] = \"RUNNING\";\n  CheckStatus[CheckStatus[\"SKIPPED\"] = 2] = \"SKIPPED\";\n  CheckStatus[CheckStatus[\"SUCCESS\"] = 3] = \"SUCCESS\";\n  CheckStatus[CheckStatus[\"FAILED\"] = 4] = \"FAILED\";\n})(CheckStatus || (CheckStatus = {}));\nclass Checker extends eventsExports.EventEmitter {\n  constructor(url, token) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    super();\n    this.status = CheckStatus.IDLE;\n    this.logs = [];\n    this.options = {};\n    this.url = url;\n    this.token = token;\n    this.name = this.constructor.name;\n    this.room = new Room(options.roomOptions);\n    this.connectOptions = options.connectOptions;\n    this.options = options;\n  }\n  run(onComplete) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.status !== CheckStatus.IDLE) {\n        throw Error('check is running already');\n      }\n      this.setStatus(CheckStatus.RUNNING);\n      try {\n        yield this.perform();\n      } catch (err) {\n        if (err instanceof Error) {\n          if (this.options.errorsAsWarnings) {\n            this.appendWarning(err.message);\n          } else {\n            this.appendError(err.message);\n          }\n        }\n      }\n      yield this.disconnect();\n      // sleep for a bit to ensure disconnect\n      yield new Promise(resolve => setTimeout(resolve, 500));\n      // @ts-ignore\n      if (this.status !== CheckStatus.SKIPPED) {\n        this.setStatus(this.isSuccess() ? CheckStatus.SUCCESS : CheckStatus.FAILED);\n      }\n      if (onComplete) {\n        onComplete();\n      }\n      return this.getInfo();\n    });\n  }\n  isSuccess() {\n    return !this.logs.some(l => l.level === 'error');\n  }\n  connect(url) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.room.state === ConnectionState.Connected) {\n        return this.room;\n      }\n      if (!url) {\n        url = this.url;\n      }\n      yield this.room.connect(url, this.token, this.connectOptions);\n      return this.room;\n    });\n  }\n  disconnect() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.room && this.room.state !== ConnectionState.Disconnected) {\n        yield this.room.disconnect();\n        // wait for it to go through\n        yield new Promise(resolve => setTimeout(resolve, 500));\n      }\n    });\n  }\n  skip() {\n    this.setStatus(CheckStatus.SKIPPED);\n  }\n  switchProtocol(protocol) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let hasReconnecting = false;\n      let hasReconnected = false;\n      this.room.on(RoomEvent.Reconnecting, () => {\n        hasReconnecting = true;\n      });\n      this.room.once(RoomEvent.Reconnected, () => {\n        hasReconnected = true;\n      });\n      this.room.simulateScenario(\"force-\".concat(protocol));\n      yield new Promise(resolve => setTimeout(resolve, 1000));\n      if (!hasReconnecting) {\n        // no need to wait for reconnection\n        return;\n      }\n      // wait for 10 seconds for reconnection\n      const timeout = Date.now() + 10000;\n      while (Date.now() < timeout) {\n        if (hasReconnected) {\n          return;\n        }\n        yield sleep(100);\n      }\n      throw new Error(\"Could not reconnect using \".concat(protocol, \" protocol after 10 seconds\"));\n    });\n  }\n  appendMessage(message) {\n    this.logs.push({\n      level: 'info',\n      message\n    });\n    this.emit('update', this.getInfo());\n  }\n  appendWarning(message) {\n    this.logs.push({\n      level: 'warning',\n      message\n    });\n    this.emit('update', this.getInfo());\n  }\n  appendError(message) {\n    this.logs.push({\n      level: 'error',\n      message\n    });\n    this.emit('update', this.getInfo());\n  }\n  setStatus(status) {\n    this.status = status;\n    this.emit('update', this.getInfo());\n  }\n  get engine() {\n    var _a;\n    return (_a = this.room) === null || _a === void 0 ? void 0 : _a.engine;\n  }\n  getInfo() {\n    return {\n      logs: this.logs,\n      name: this.name,\n      status: this.status,\n      description: this.description\n    };\n  }\n}/**\n * Checks for connections quality to closests Cloud regions and determining the best quality\n */\nclass CloudRegionCheck extends Checker {\n  get description() {\n    return 'Cloud regions';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const regionProvider = new RegionUrlProvider(this.url, this.token);\n      if (!regionProvider.isCloud()) {\n        this.skip();\n        return;\n      }\n      const regionStats = [];\n      const seenUrls = new Set();\n      for (let i = 0; i < 3; i++) {\n        const regionUrl = yield regionProvider.getNextBestRegionUrl();\n        if (!regionUrl) {\n          break;\n        }\n        if (seenUrls.has(regionUrl)) {\n          continue;\n        }\n        seenUrls.add(regionUrl);\n        const stats = yield this.checkCloudRegion(regionUrl);\n        this.appendMessage(\"\".concat(stats.region, \" RTT: \").concat(stats.rtt, \"ms, duration: \").concat(stats.duration, \"ms\"));\n        regionStats.push(stats);\n      }\n      regionStats.sort((a, b) => {\n        return (a.duration - b.duration) * 0.5 + (a.rtt - b.rtt) * 0.5;\n      });\n      const bestRegion = regionStats[0];\n      this.bestStats = bestRegion;\n      this.appendMessage(\"best Cloud region: \".concat(bestRegion.region));\n    });\n  }\n  getInfo() {\n    const info = super.getInfo();\n    info.data = this.bestStats;\n    return info;\n  }\n  checkCloudRegion(url) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      yield this.connect(url);\n      if (this.options.protocol === 'tcp') {\n        yield this.switchProtocol('tcp');\n      }\n      const region = (_a = this.room.serverInfo) === null || _a === void 0 ? void 0 : _a.region;\n      if (!region) {\n        throw new Error('Region not found');\n      }\n      const writer = yield this.room.localParticipant.streamText({\n        topic: 'test'\n      });\n      const chunkSize = 1000; // each chunk is about 1000 bytes\n      const totalSize = 1000000; // approximately 1MB of data\n      const numChunks = totalSize / chunkSize; // will yield 1000 chunks\n      const chunkData = 'A'.repeat(chunkSize); // create a string of 1000 'A' characters\n      const startTime = Date.now();\n      for (let i = 0; i < numChunks; i++) {\n        yield writer.write(chunkData);\n      }\n      yield writer.close();\n      const endTime = Date.now();\n      const stats = yield (_b = this.room.engine.pcManager) === null || _b === void 0 ? void 0 : _b.publisher.getStats();\n      const regionStats = {\n        region: region,\n        rtt: 10000,\n        duration: endTime - startTime\n      };\n      stats === null || stats === void 0 ? void 0 : stats.forEach(stat => {\n        if (stat.type === 'candidate-pair' && stat.nominated) {\n          regionStats.rtt = stat.currentRoundTripTime * 1000;\n        }\n      });\n      yield this.disconnect();\n      return regionStats;\n    });\n  }\n}const TEST_DURATION = 10000;\nclass ConnectionProtocolCheck extends Checker {\n  get description() {\n    return 'Connection via UDP vs TCP';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const udpStats = yield this.checkConnectionProtocol('udp');\n      const tcpStats = yield this.checkConnectionProtocol('tcp');\n      this.bestStats = udpStats;\n      // udp should is the better protocol typically. however, we'd prefer TCP when either of these conditions are true:\n      // 1. the bandwidth limitation is worse on UDP by 500ms\n      // 2. the packet loss is higher on UDP by 1%\n      if (udpStats.qualityLimitationDurations.bandwidth - tcpStats.qualityLimitationDurations.bandwidth > 0.5 || (udpStats.packetsLost - tcpStats.packetsLost) / udpStats.packetsSent > 0.01) {\n        this.appendMessage('best connection quality via tcp');\n        this.bestStats = tcpStats;\n      } else {\n        this.appendMessage('best connection quality via udp');\n      }\n      const stats = this.bestStats;\n      this.appendMessage(\"upstream bitrate: \".concat((stats.bitrateTotal / stats.count / 1000 / 1000).toFixed(2), \" mbps\"));\n      this.appendMessage(\"RTT: \".concat((stats.rttTotal / stats.count * 1000).toFixed(2), \" ms\"));\n      this.appendMessage(\"jitter: \".concat((stats.jitterTotal / stats.count * 1000).toFixed(2), \" ms\"));\n      if (stats.packetsLost > 0) {\n        this.appendWarning(\"packets lost: \".concat((stats.packetsLost / stats.packetsSent * 100).toFixed(2), \"%\"));\n      }\n      if (stats.qualityLimitationDurations.bandwidth > 1) {\n        this.appendWarning(\"bandwidth limited \".concat((stats.qualityLimitationDurations.bandwidth / (TEST_DURATION / 1000) * 100).toFixed(2), \"%\"));\n      }\n      if (stats.qualityLimitationDurations.cpu > 0) {\n        this.appendWarning(\"cpu limited \".concat((stats.qualityLimitationDurations.cpu / (TEST_DURATION / 1000) * 100).toFixed(2), \"%\"));\n      }\n    });\n  }\n  getInfo() {\n    const info = super.getInfo();\n    info.data = this.bestStats;\n    return info;\n  }\n  checkConnectionProtocol(protocol) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.connect();\n      if (protocol === 'tcp') {\n        yield this.switchProtocol('tcp');\n      } else {\n        yield this.switchProtocol('udp');\n      }\n      // create a canvas with animated content\n      const canvas = document.createElement('canvas');\n      canvas.width = 1280;\n      canvas.height = 720;\n      const ctx = canvas.getContext('2d');\n      if (!ctx) {\n        throw new Error('Could not get canvas context');\n      }\n      let hue = 0;\n      const animate = () => {\n        hue = (hue + 1) % 360;\n        ctx.fillStyle = \"hsl(\".concat(hue, \", 100%, 50%)\");\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        requestAnimationFrame(animate);\n      };\n      animate();\n      // create video track from canvas\n      const stream = canvas.captureStream(30); // 30fps\n      const videoTrack = stream.getVideoTracks()[0];\n      // publish to room\n      const pub = yield this.room.localParticipant.publishTrack(videoTrack, {\n        simulcast: false,\n        degradationPreference: 'maintain-resolution',\n        videoEncoding: {\n          maxBitrate: 2000000\n        }\n      });\n      const track = pub.track;\n      const protocolStats = {\n        protocol,\n        packetsLost: 0,\n        packetsSent: 0,\n        qualityLimitationDurations: {},\n        rttTotal: 0,\n        jitterTotal: 0,\n        bitrateTotal: 0,\n        count: 0\n      };\n      // gather stats once a second\n      const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n        const stats = yield track.getRTCStatsReport();\n        stats === null || stats === void 0 ? void 0 : stats.forEach(stat => {\n          if (stat.type === 'outbound-rtp') {\n            protocolStats.packetsSent = stat.packetsSent;\n            protocolStats.qualityLimitationDurations = stat.qualityLimitationDurations;\n            protocolStats.bitrateTotal += stat.targetBitrate;\n            protocolStats.count++;\n          } else if (stat.type === 'remote-inbound-rtp') {\n            protocolStats.packetsLost = stat.packetsLost;\n            protocolStats.rttTotal += stat.roundTripTime;\n            protocolStats.jitterTotal += stat.jitter;\n          }\n        });\n      }), 1000);\n      // wait a bit to gather stats\n      yield new Promise(resolve => setTimeout(resolve, TEST_DURATION));\n      clearInterval(interval);\n      videoTrack.stop();\n      canvas.remove();\n      yield this.disconnect();\n      return protocolStats;\n    });\n  }\n}class PublishAudioCheck extends Checker {\n  get description() {\n    return 'Can publish audio';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const room = yield this.connect();\n      const track = yield createLocalAudioTrack();\n      const trackIsSilent = yield detectSilence(track, 1000);\n      if (trackIsSilent) {\n        throw new Error('unable to detect audio from microphone');\n      }\n      this.appendMessage('detected audio from microphone');\n      room.localParticipant.publishTrack(track);\n      // wait for a few seconds to publish\n      yield new Promise(resolve => setTimeout(resolve, 3000));\n      // verify RTC stats that it's publishing\n      const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();\n      if (!stats) {\n        throw new Error('Could not get RTCStats');\n      }\n      let numPackets = 0;\n      stats.forEach(stat => {\n        if (stat.type === 'outbound-rtp' && (stat.kind === 'audio' || !stat.kind && stat.mediaType === 'audio')) {\n          numPackets = stat.packetsSent;\n        }\n      });\n      if (numPackets === 0) {\n        throw new Error('Could not determine packets are sent');\n      }\n      this.appendMessage(\"published \".concat(numPackets, \" audio packets\"));\n    });\n  }\n}class PublishVideoCheck extends Checker {\n  get description() {\n    return 'Can publish video';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const room = yield this.connect();\n      const track = yield createLocalVideoTrack();\n      // check if we have video from camera\n      yield this.checkForVideo(track.mediaStreamTrack);\n      room.localParticipant.publishTrack(track);\n      // wait for a few seconds to publish\n      yield new Promise(resolve => setTimeout(resolve, 5000));\n      // verify RTC stats that it's publishing\n      const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();\n      if (!stats) {\n        throw new Error('Could not get RTCStats');\n      }\n      let numPackets = 0;\n      stats.forEach(stat => {\n        if (stat.type === 'outbound-rtp' && (stat.kind === 'video' || !stat.kind && stat.mediaType === 'video')) {\n          numPackets += stat.packetsSent;\n        }\n      });\n      if (numPackets === 0) {\n        throw new Error('Could not determine packets are sent');\n      }\n      this.appendMessage(\"published \".concat(numPackets, \" video packets\"));\n    });\n  }\n  checkForVideo(track) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const stream = new MediaStream();\n      stream.addTrack(track.clone());\n      // Create video element to check frames\n      const video = document.createElement('video');\n      video.srcObject = stream;\n      video.muted = true;\n      video.autoplay = true;\n      video.playsInline = true;\n      // For iOS Safari\n      video.setAttribute('playsinline', 'true');\n      document.body.appendChild(video);\n      yield new Promise(resolve => {\n        video.onplay = () => {\n          setTimeout(() => {\n            var _a, _b, _c, _d;\n            const canvas = document.createElement('canvas');\n            const settings = track.getSettings();\n            const width = (_b = (_a = settings.width) !== null && _a !== void 0 ? _a : video.videoWidth) !== null && _b !== void 0 ? _b : 1280;\n            const height = (_d = (_c = settings.height) !== null && _c !== void 0 ? _c : video.videoHeight) !== null && _d !== void 0 ? _d : 720;\n            canvas.width = width;\n            canvas.height = height;\n            const ctx = canvas.getContext('2d');\n            // Draw video frame to canvas\n            ctx.drawImage(video, 0, 0);\n            // Get image data and check if all pixels are black\n            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n            const data = imageData.data;\n            let isAllBlack = true;\n            for (let i = 0; i < data.length; i += 4) {\n              if (data[i] !== 0 || data[i + 1] !== 0 || data[i + 2] !== 0) {\n                isAllBlack = false;\n                break;\n              }\n            }\n            if (isAllBlack) {\n              this.appendError('camera appears to be producing only black frames');\n            } else {\n              this.appendMessage('received video frames');\n            }\n            resolve();\n          }, 1000);\n        };\n        video.play();\n      });\n      stream.getTracks().forEach(t => t.stop());\n      video.remove();\n    });\n  }\n}class ReconnectCheck extends Checker {\n  get description() {\n    return 'Resuming connection after interruption';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const room = yield this.connect();\n      let reconnectingTriggered = false;\n      let reconnected = false;\n      let reconnectResolver;\n      const reconnectTimeout = new Promise(resolve => {\n        setTimeout(resolve, 5000);\n        reconnectResolver = resolve;\n      });\n      const handleReconnecting = () => {\n        reconnectingTriggered = true;\n      };\n      room.on(RoomEvent.SignalReconnecting, handleReconnecting).on(RoomEvent.Reconnecting, handleReconnecting).on(RoomEvent.Reconnected, () => {\n        reconnected = true;\n        reconnectResolver(true);\n      });\n      (_a = room.engine.client.ws) === null || _a === void 0 ? void 0 : _a.close();\n      const onClose = room.engine.client.onClose;\n      if (onClose) {\n        onClose('');\n      }\n      yield reconnectTimeout;\n      if (!reconnectingTriggered) {\n        throw new Error('Did not attempt to reconnect');\n      } else if (!reconnected || room.state !== ConnectionState.Connected) {\n        this.appendWarning('reconnection is only possible in Redis-based configurations');\n        throw new Error('Not able to reconnect');\n      }\n    });\n  }\n}class TURNCheck extends Checker {\n  get description() {\n    return 'Can connect via TURN';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      if (isCloud(new URL(this.url))) {\n        this.appendMessage('Using region specific url');\n        this.url = (_a = yield new RegionUrlProvider(this.url, this.token).getNextBestRegionUrl()) !== null && _a !== void 0 ? _a : this.url;\n      }\n      const signalClient = new SignalClient();\n      const joinRes = yield signalClient.join(this.url, this.token, {\n        autoSubscribe: true,\n        maxRetries: 0,\n        e2eeEnabled: false,\n        websocketTimeout: 15000\n      }, undefined, true);\n      let hasTLS = false;\n      let hasTURN = false;\n      let hasSTUN = false;\n      for (let iceServer of joinRes.iceServers) {\n        for (let url of iceServer.urls) {\n          if (url.startsWith('turn:')) {\n            hasTURN = true;\n            hasSTUN = true;\n          } else if (url.startsWith('turns:')) {\n            hasTURN = true;\n            hasSTUN = true;\n            hasTLS = true;\n          }\n          if (url.startsWith('stun:')) {\n            hasSTUN = true;\n          }\n        }\n      }\n      if (!hasSTUN) {\n        this.appendWarning('No STUN servers configured on server side.');\n      } else if (hasTURN && !hasTLS) {\n        this.appendWarning('TURN is configured server side, but TURN/TLS is unavailable.');\n      }\n      yield signalClient.close();\n      if (((_c = (_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.rtcConfig) === null || _c === void 0 ? void 0 : _c.iceServers) || hasTURN) {\n        yield this.room.connect(this.url, this.token, {\n          rtcConfig: {\n            iceTransportPolicy: 'relay'\n          }\n        });\n      } else {\n        this.appendWarning('No TURN servers configured.');\n        this.skip();\n        yield new Promise(resolve => setTimeout(resolve, 0));\n      }\n    });\n  }\n}class WebRTCCheck extends Checker {\n  get description() {\n    return 'Establishing WebRTC connection';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      let hasTcp = false;\n      let hasIpv4Udp = false;\n      this.room.on(RoomEvent.SignalConnected, () => {\n        var _a;\n        const prevTrickle = this.room.engine.client.onTrickle;\n        this.room.engine.client.onTrickle = (sd, target) => {\n          if (sd.candidate) {\n            const candidate = new RTCIceCandidate(sd);\n            let str = \"\".concat(candidate.protocol, \" \").concat(candidate.address, \":\").concat(candidate.port, \" \").concat(candidate.type);\n            if (candidate.address) {\n              if (isIPPrivate(candidate.address)) {\n                str += ' (private)';\n              } else {\n                if (candidate.protocol === 'tcp' && candidate.tcpType === 'passive') {\n                  hasTcp = true;\n                  str += ' (passive)';\n                } else if (candidate.protocol === 'udp') {\n                  hasIpv4Udp = true;\n                }\n              }\n            }\n            this.appendMessage(str);\n          }\n          if (prevTrickle) {\n            prevTrickle(sd, target);\n          }\n        };\n        if ((_a = this.room.engine.pcManager) === null || _a === void 0 ? void 0 : _a.subscriber) {\n          this.room.engine.pcManager.subscriber.onIceCandidateError = ev => {\n            if (ev instanceof RTCPeerConnectionIceErrorEvent) {\n              this.appendWarning(\"error with ICE candidate: \".concat(ev.errorCode, \" \").concat(ev.errorText, \" \").concat(ev.url));\n            }\n          };\n        }\n      });\n      try {\n        yield this.connect();\n        livekitLogger.info('now the room is connected');\n      } catch (err) {\n        this.appendWarning('ports need to be open on firewall in order to connect.');\n        throw err;\n      }\n      if (!hasTcp) {\n        this.appendWarning('Server is not configured for ICE/TCP');\n      }\n      if (!hasIpv4Udp) {\n        this.appendWarning('No public IPv4 UDP candidates were found. Your server is likely not configured correctly');\n      }\n    });\n  }\n}\nfunction isIPPrivate(address) {\n  const parts = address.split('.');\n  if (parts.length === 4) {\n    if (parts[0] === '10') {\n      return true;\n    } else if (parts[0] === '192' && parts[1] === '168') {\n      return true;\n    } else if (parts[0] === '172') {\n      const second = parseInt(parts[1], 10);\n      if (second >= 16 && second <= 31) {\n        return true;\n      }\n    }\n  }\n  return false;\n}class WebSocketCheck extends Checker {\n  get description() {\n    return 'Connecting to signal connection via WebSocket';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      if (this.url.startsWith('ws:') || this.url.startsWith('http:')) {\n        this.appendWarning('Server is insecure, clients may block connections to it');\n      }\n      let signalClient = new SignalClient();\n      let joinRes;\n      try {\n        joinRes = yield signalClient.join(this.url, this.token, {\n          autoSubscribe: true,\n          maxRetries: 0,\n          e2eeEnabled: false,\n          websocketTimeout: 15000\n        }, undefined, true);\n      } catch (e) {\n        if (isCloud(new URL(this.url))) {\n          this.appendMessage(\"Initial connection failed with error \".concat(e.message, \". Retrying with region fallback\"));\n          const regionProvider = new RegionUrlProvider(this.url, this.token);\n          const regionUrl = yield regionProvider.getNextBestRegionUrl();\n          if (regionUrl) {\n            joinRes = yield signalClient.join(regionUrl, this.token, {\n              autoSubscribe: true,\n              maxRetries: 0,\n              e2eeEnabled: false,\n              websocketTimeout: 15000\n            }, undefined, true);\n            this.appendMessage(\"Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time\");\n          }\n        }\n      }\n      if (joinRes) {\n        this.appendMessage(\"Connected to server, version \".concat(joinRes.serverVersion, \".\"));\n        if (((_a = joinRes.serverInfo) === null || _a === void 0 ? void 0 : _a.edition) === ServerInfo_Edition.Cloud && ((_b = joinRes.serverInfo) === null || _b === void 0 ? void 0 : _b.region)) {\n          this.appendMessage(\"LiveKit Cloud: \".concat((_c = joinRes.serverInfo) === null || _c === void 0 ? void 0 : _c.region));\n        }\n      } else {\n        this.appendError(\"Websocket connection could not be established\");\n      }\n      yield signalClient.close();\n    });\n  }\n}class ConnectionCheck extends eventsExports.EventEmitter {\n  constructor(url, token) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    super();\n    this.options = {};\n    this.checkResults = new Map();\n    this.url = url;\n    this.token = token;\n    this.options = options;\n  }\n  getNextCheckId() {\n    const nextId = this.checkResults.size;\n    this.checkResults.set(nextId, {\n      logs: [],\n      status: CheckStatus.IDLE,\n      name: '',\n      description: ''\n    });\n    return nextId;\n  }\n  updateCheck(checkId, info) {\n    this.checkResults.set(checkId, info);\n    this.emit('checkUpdate', checkId, info);\n  }\n  isSuccess() {\n    return Array.from(this.checkResults.values()).every(r => r.status !== CheckStatus.FAILED);\n  }\n  getResults() {\n    return Array.from(this.checkResults.values());\n  }\n  createAndRunCheck(check) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const checkId = this.getNextCheckId();\n      const test = new check(this.url, this.token, this.options);\n      const handleUpdate = info => {\n        this.updateCheck(checkId, info);\n      };\n      test.on('update', handleUpdate);\n      const result = yield test.run();\n      test.off('update', handleUpdate);\n      return result;\n    });\n  }\n  checkWebsocket() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(WebSocketCheck);\n    });\n  }\n  checkWebRTC() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(WebRTCCheck);\n    });\n  }\n  checkTURN() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(TURNCheck);\n    });\n  }\n  checkReconnect() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(ReconnectCheck);\n    });\n  }\n  checkPublishAudio() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(PublishAudioCheck);\n    });\n  }\n  checkPublishVideo() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(PublishVideoCheck);\n    });\n  }\n  checkConnectionProtocol() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const info = yield this.createAndRunCheck(ConnectionProtocolCheck);\n      if (info.data && 'protocol' in info.data) {\n        const stats = info.data;\n        this.options.protocol = stats.protocol;\n      }\n      return info;\n    });\n  }\n  checkCloudRegion() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(CloudRegionCheck);\n    });\n  }\n}/** A Fixed TokenSource is a token source that takes no parameters and returns a completely\n * independently derived value on each fetch() call.\n *\n * The most common downstream implementer is {@link TokenSourceLiteral}.\n */\nclass TokenSourceFixed {}\n/** A Configurable TokenSource is a token source that takes a\n * {@link TokenSourceFetchOptions} object as input and returns a deterministic\n * {@link TokenSourceResponseObject} output based on the options specified.\n *\n * For example, if options.participantName is set, it should be expected that\n * all tokens that are generated will have participant name field set to the\n * provided value.\n *\n * A few common downstream implementers are {@link TokenSourceEndpoint}\n * and {@link TokenSourceCustom}.\n */\nclass TokenSourceConfigurable {}new TextEncoder();\nconst decoder = new TextDecoder();function decodeBase64(encoded) {\n  if (Uint8Array.fromBase64) {\n    return Uint8Array.fromBase64(encoded);\n  }\n  const binary = atob(encoded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return bytes;\n}function decode(input) {\n  if (Uint8Array.fromBase64) {\n    return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {\n      alphabet: 'base64url'\n    });\n  }\n  let encoded = input;\n  if (encoded instanceof Uint8Array) {\n    encoded = decoder.decode(encoded);\n  }\n  encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');\n  try {\n    return decodeBase64(encoded);\n  } catch (_unused) {\n    throw new TypeError('The input to be decoded is not correctly encoded.');\n  }\n}class JOSEError extends Error {\n  constructor(message, options) {\n    var _Error$captureStackTr;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JOSE_GENERIC');\n    this.name = this.constructor.name;\n    (_Error$captureStackTr = Error.captureStackTrace) === null || _Error$captureStackTr === void 0 || _Error$captureStackTr.call(Error, this, this.constructor);\n  }\n}\n_defineProperty(JOSEError, \"code\", 'ERR_JOSE_GENERIC');\nclass JWTClaimValidationFailed extends JOSEError {\n  constructor(message, payload) {\n    let claim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';\n    let reason = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unspecified';\n    super(message, {\n      cause: {\n        claim,\n        reason,\n        payload\n      }\n    });\n    _defineProperty(this, \"code\", 'ERR_JWT_CLAIM_VALIDATION_FAILED');\n    _defineProperty(this, \"claim\", void 0);\n    _defineProperty(this, \"reason\", void 0);\n    _defineProperty(this, \"payload\", void 0);\n    this.claim = claim;\n    this.reason = reason;\n    this.payload = payload;\n  }\n}\n_defineProperty(JWTClaimValidationFailed, \"code\", 'ERR_JWT_CLAIM_VALIDATION_FAILED');\nclass JWTExpired extends JOSEError {\n  constructor(message, payload) {\n    let claim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';\n    let reason = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unspecified';\n    super(message, {\n      cause: {\n        claim,\n        reason,\n        payload\n      }\n    });\n    _defineProperty(this, \"code\", 'ERR_JWT_EXPIRED');\n    _defineProperty(this, \"claim\", void 0);\n    _defineProperty(this, \"reason\", void 0);\n    _defineProperty(this, \"payload\", void 0);\n    this.claim = claim;\n    this.reason = reason;\n    this.payload = payload;\n  }\n}\n_defineProperty(JWTExpired, \"code\", 'ERR_JWT_EXPIRED');\nclass JOSEAlgNotAllowed extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JOSE_ALG_NOT_ALLOWED');\n  }\n}\n_defineProperty(JOSEAlgNotAllowed, \"code\", 'ERR_JOSE_ALG_NOT_ALLOWED');\nclass JOSENotSupported extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JOSE_NOT_SUPPORTED');\n  }\n}\n_defineProperty(JOSENotSupported, \"code\", 'ERR_JOSE_NOT_SUPPORTED');\nclass JWEDecryptionFailed extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'decryption operation failed';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWE_DECRYPTION_FAILED');\n  }\n}\n_defineProperty(JWEDecryptionFailed, \"code\", 'ERR_JWE_DECRYPTION_FAILED');\nclass JWEInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWE_INVALID');\n  }\n}\n_defineProperty(JWEInvalid, \"code\", 'ERR_JWE_INVALID');\nclass JWSInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWS_INVALID');\n  }\n}\n_defineProperty(JWSInvalid, \"code\", 'ERR_JWS_INVALID');\nclass JWTInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWT_INVALID');\n  }\n}\n_defineProperty(JWTInvalid, \"code\", 'ERR_JWT_INVALID');\nclass JWKInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWK_INVALID');\n  }\n}\n_defineProperty(JWKInvalid, \"code\", 'ERR_JWK_INVALID');\nclass JWKSInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWKS_INVALID');\n  }\n}\n_defineProperty(JWKSInvalid, \"code\", 'ERR_JWKS_INVALID');\nclass JWKSNoMatchingKey extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'no applicable key found in the JSON Web Key Set';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWKS_NO_MATCHING_KEY');\n  }\n}\n_defineProperty(JWKSNoMatchingKey, \"code\", 'ERR_JWKS_NO_MATCHING_KEY');\nclass JWKSMultipleMatchingKeys extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'multiple matching keys found in the JSON Web Key Set';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, Symbol.asyncIterator, void 0);\n    _defineProperty(this, \"code\", 'ERR_JWKS_MULTIPLE_MATCHING_KEYS');\n  }\n}\n_defineProperty(JWKSMultipleMatchingKeys, \"code\", 'ERR_JWKS_MULTIPLE_MATCHING_KEYS');\nclass JWKSTimeout extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'request timed out';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWKS_TIMEOUT');\n  }\n}\n_defineProperty(JWKSTimeout, \"code\", 'ERR_JWKS_TIMEOUT');\nclass JWSSignatureVerificationFailed extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'signature verification failed';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED');\n  }\n}\n_defineProperty(JWSSignatureVerificationFailed, \"code\", 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED');const isObjectLike = value => typeof value === 'object' && value !== null;\nfunction isObject(input) {\n  if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n    return false;\n  }\n  if (Object.getPrototypeOf(input) === null) {\n    return true;\n  }\n  let proto = input;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(input) === proto;\n}function decodeJwt(jwt) {\n  if (typeof jwt !== 'string') throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n  const _jwt$split = jwt.split('.'),\n    payload = _jwt$split[1],\n    length = _jwt$split.length;\n  if (length === 5) throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n  if (length !== 3) throw new JWTInvalid('Invalid JWT');\n  if (!payload) throw new JWTInvalid('JWTs must contain a payload');\n  let decoded;\n  try {\n    decoded = decode(payload);\n  } catch (_unused) {\n    throw new JWTInvalid('Failed to base64url decode the payload');\n  }\n  let result;\n  try {\n    result = JSON.parse(decoder.decode(decoded));\n  } catch (_unused2) {\n    throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n  }\n  if (!isObject(result)) throw new JWTInvalid('Invalid JWT Claims Set');\n  return result;\n}const ONE_SECOND_IN_MILLISECONDS = 1000;\nconst ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;\nfunction isResponseTokenValid(response) {\n  const jwtPayload = decodeTokenPayload(response.participantToken);\n  if (!(jwtPayload === null || jwtPayload === void 0 ? void 0 : jwtPayload.nbf) || !(jwtPayload === null || jwtPayload === void 0 ? void 0 : jwtPayload.exp)) {\n    return true;\n  }\n  const now = new Date();\n  const nbfInMilliseconds = jwtPayload.nbf * ONE_SECOND_IN_MILLISECONDS;\n  const nbfDate = new Date(nbfInMilliseconds);\n  const expInMilliseconds = jwtPayload.exp * ONE_SECOND_IN_MILLISECONDS;\n  const expDate = new Date(expInMilliseconds - ONE_MINUTE_IN_MILLISECONDS);\n  return nbfDate <= now && expDate > now;\n}\n/** Given a LiveKit generated participant token, decodes and returns the associated {@link TokenPayload} data. */\nfunction decodeTokenPayload(token) {\n  const payload = decodeJwt(token);\n  payload.roomConfig;\n    const rest = __rest(payload, [\"roomConfig\"]);\n  const mappedPayload = Object.assign(Object.assign({}, rest), {\n    roomConfig: payload.roomConfig ? RoomConfiguration.fromJson(payload.roomConfig, {\n      ignoreUnknownFields: true\n    }) : undefined\n  });\n  return mappedPayload;\n}\n/** Given two TokenSourceFetchOptions values, check to see if they are deep equal. */\nfunction areTokenSourceFetchOptionsEqual(a, b) {\n  const allKeysSet = new Set([...Object.keys(a), ...Object.keys(b)]);\n  for (const key of allKeysSet) {\n    switch (key) {\n      case 'roomName':\n      case 'participantName':\n      case 'participantIdentity':\n      case 'participantMetadata':\n      case 'participantAttributes':\n      case 'agentName':\n      case 'agentMetadata':\n      case 'deployment':\n        if (a[key] !== b[key]) {\n          return false;\n        }\n        break;\n      default:\n        // ref: https://stackoverflow.com/a/58009992\n        const exhaustiveCheckedKey = key;\n        throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being checked for equality!\"));\n    }\n  }\n  return true;\n}/** A TokenSourceCached is a TokenSource which caches the last {@link TokenSourceResponseObject} value and returns it\n * until a) it expires or b) the {@link TokenSourceFetchOptions} provided to .fetch(...) change. */\nclass TokenSourceCached extends TokenSourceConfigurable {\n  constructor() {\n    super(...arguments);\n    this.cachedFetchOptions = null;\n    this.cachedResponse = null;\n    this.fetchMutex = new _();\n  }\n  isSameAsCachedFetchOptions(options) {\n    if (!this.cachedFetchOptions) {\n      return false;\n    }\n    return areTokenSourceFetchOptionsEqual(options, this.cachedFetchOptions);\n  }\n  shouldReturnCachedValueFromFetch(fetchOptions) {\n    if (!this.cachedResponse) {\n      return false;\n    }\n    if (!isResponseTokenValid(this.cachedResponse)) {\n      return false;\n    }\n    if (!this.isSameAsCachedFetchOptions(fetchOptions)) {\n      return false;\n    }\n    return true;\n  }\n  getCachedResponseJwtPayload() {\n    if (!this.cachedResponse) {\n      return null;\n    }\n    return decodeTokenPayload(this.cachedResponse.participantToken);\n  }\n  fetch(options, force) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.fetchMutex.lock();\n      try {\n        if (force) {\n          this.cachedResponse = null;\n        }\n        if (this.shouldReturnCachedValueFromFetch(options)) {\n          return this.cachedResponse.toJson();\n        }\n        this.cachedFetchOptions = options;\n        const tokenResponse = yield this.update(options);\n        this.cachedResponse = tokenResponse;\n        return tokenResponse.toJson();\n      } finally {\n        unlock();\n      }\n    });\n  }\n}\nclass TokenSourceLiteral extends TokenSourceFixed {\n  constructor(literalOrFn) {\n    super();\n    this.literalOrFn = literalOrFn;\n  }\n  fetch() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (typeof this.literalOrFn === 'function') {\n        return this.literalOrFn();\n      } else {\n        return this.literalOrFn;\n      }\n    });\n  }\n}\nclass TokenSourceCustom extends TokenSourceCached {\n  constructor(customFn) {\n    super();\n    this.customFn = customFn;\n  }\n  update(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const resultMaybePromise = this.customFn(options);\n      let result;\n      if (resultMaybePromise instanceof Promise) {\n        result = yield resultMaybePromise;\n      } else {\n        result = resultMaybePromise;\n      }\n      return TokenSourceResponse.fromJson(result, {\n        // NOTE: it could be possible that the response body could contain more fields than just\n        // what's in TokenSourceResponse depending on the implementation\n        ignoreUnknownFields: true\n      });\n    });\n  }\n}\nclass TokenSourceEndpoint extends TokenSourceCached {\n  constructor(url) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    this.url = url;\n    this.endpointOptions = options;\n  }\n  createRequestFromOptions(options) {\n    var _a, _b, _c, _d;\n    const request = new TokenSourceRequest();\n    for (const key of Object.keys(options)) {\n      switch (key) {\n        case 'roomName':\n        case 'participantName':\n        case 'participantIdentity':\n        case 'participantMetadata':\n          request[key] = options[key];\n          break;\n        case 'participantAttributes':\n          request.participantAttributes = (_a = options.participantAttributes) !== null && _a !== void 0 ? _a : {};\n          break;\n        case 'agentName':\n          request.roomConfig = (_b = request.roomConfig) !== null && _b !== void 0 ? _b : new RoomConfiguration();\n          if (request.roomConfig.agents.length === 0) {\n            request.roomConfig.agents.push(new RoomAgentDispatch());\n          }\n          request.roomConfig.agents[0].agentName = options.agentName;\n          break;\n        case 'agentMetadata':\n          request.roomConfig = (_c = request.roomConfig) !== null && _c !== void 0 ? _c : new RoomConfiguration();\n          if (request.roomConfig.agents.length === 0) {\n            request.roomConfig.agents.push(new RoomAgentDispatch());\n          }\n          request.roomConfig.agents[0].metadata = options.agentMetadata;\n          break;\n        case 'deployment':\n          request.roomConfig = (_d = request.roomConfig) !== null && _d !== void 0 ? _d : new RoomConfiguration();\n          if (request.roomConfig.agents.length === 0) {\n            request.roomConfig.agents.push(new RoomAgentDispatch());\n          }\n          request.roomConfig.agents[0].deployment = options.deployment;\n          break;\n        default:\n          // ref: https://stackoverflow.com/a/58009992\n          const exhaustiveCheckedKey = key;\n          throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being included in forming request!\"));\n      }\n    }\n    return request;\n  }\n  update(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const request = this.createRequestFromOptions(options);\n      const response = yield fetch(this.url, Object.assign(Object.assign({}, this.endpointOptions), {\n        method: (_a = this.endpointOptions.method) !== null && _a !== void 0 ? _a : 'POST',\n        headers: Object.assign({\n          'Content-Type': 'application/json'\n        }, this.endpointOptions.headers),\n        body: request.toJsonString({\n          useProtoFieldName: true\n        })\n      }));\n      if (!response.ok) {\n        throw new Error(\"Error generating token from endpoint \".concat(this.url, \": received \").concat(response.status, \" / \").concat(yield response.text()));\n      }\n      const body = yield response.json();\n      return TokenSourceResponse.fromJson(body, {\n        // NOTE: it could be possible that the response body could contain more fields than just\n        // what's in TokenSourceResponse depending on the implementation (ie, SandboxTokenServer)\n        ignoreUnknownFields: true\n      });\n    });\n  }\n}\nclass TokenSourceSandboxTokenServer extends TokenSourceEndpoint {\n  constructor(sandboxId, options) {\n    const _options$baseUrl = options.baseUrl,\n      baseUrl = _options$baseUrl === void 0 ? 'https://cloud-api.livekit.io' : _options$baseUrl,\n      rest = __rest(options, [\"baseUrl\"]);\n    super(\"\".concat(baseUrl, \"/api/v2/sandbox/connection-details\"), Object.assign(Object.assign({}, rest), {\n      headers: {\n        'X-Sandbox-ID': sandboxId\n      }\n    }));\n  }\n}\nconst TokenSource = {\n  /** TokenSource.literal contains a single, literal set of {@link TokenSourceResponseObject}\n   * credentials, either provided directly or returned from a provided function. */\n  literal(literalOrFn) {\n    return new TokenSourceLiteral(literalOrFn);\n  },\n  /**\n   * TokenSource.custom allows a user to define a manual function which generates new\n   * {@link TokenSourceResponseObject} values on demand.\n   *\n   * Use this to get credentials from custom backends / etc.\n   */\n  custom(customFn) {\n    return new TokenSourceCustom(customFn);\n  },\n  /**\n   * TokenSource.endpoint creates a token source that fetches credentials from a given URL using\n   * the standard endpoint format:\n   * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server\n   */\n  endpoint(url) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return new TokenSourceEndpoint(url, options);\n  },\n  /**\n   * TokenSource.sandboxTokenServer queries a sandbox token server for credentials,\n   * which supports quick prototyping / getting started types of use cases.\n   *\n   * This token provider is INSECURE and should NOT be used in production.\n   *\n   * For more info:\n   * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server\n   */\n  sandboxTokenServer(sandboxId) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return new TokenSourceSandboxTokenServer(sandboxId, options);\n  }\n};/**\n * Try to analyze the local track to determine the facing mode of a track.\n *\n * @remarks\n * There is no property supported by all browsers to detect whether a video track originated from a user- or environment-facing camera device.\n * For this reason, we use the `facingMode` property when available, but will fall back on a string-based analysis of the device label to determine the facing mode.\n * If both methods fail, the default facing mode will be used.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/facingMode | MDN docs on facingMode}\n * @experimental\n */\nfunction facingModeFromLocalTrack(localTrack) {\n  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _a;\n  const track = isLocalTrack(localTrack) ? localTrack.mediaStreamTrack : localTrack;\n  const trackSettings = track.getSettings();\n  let result = {\n    facingMode: (_a = options.defaultFacingMode) !== null && _a !== void 0 ? _a : 'user',\n    confidence: 'low'\n  };\n  // 1. Try to get facingMode from track settings.\n  if ('facingMode' in trackSettings) {\n    const rawFacingMode = trackSettings.facingMode;\n    livekitLogger.trace('rawFacingMode', {\n      rawFacingMode\n    });\n    if (rawFacingMode && typeof rawFacingMode === 'string' && isFacingModeValue(rawFacingMode)) {\n      result = {\n        facingMode: rawFacingMode,\n        confidence: 'high'\n      };\n    }\n  }\n  // 2. If we don't have a high confidence we try to get the facing mode from the device label.\n  if (['low', 'medium'].includes(result.confidence)) {\n    livekitLogger.trace(\"Try to get facing mode from device label: (\".concat(track.label, \")\"));\n    const labelAnalysisResult = facingModeFromDeviceLabel(track.label);\n    if (labelAnalysisResult !== undefined) {\n      result = labelAnalysisResult;\n    }\n  }\n  return result;\n}\nconst knownDeviceLabels = new Map([['obs virtual camera', {\n  facingMode: 'environment',\n  confidence: 'medium'\n}]]);\nconst knownDeviceLabelSections = new Map([['iphone', {\n  facingMode: 'environment',\n  confidence: 'medium'\n}], ['ipad', {\n  facingMode: 'environment',\n  confidence: 'medium'\n}]]);\n/**\n * Attempt to analyze the device label to determine the facing mode.\n *\n * @experimental\n */\nfunction facingModeFromDeviceLabel(deviceLabel) {\n  var _a;\n  const label = deviceLabel.trim().toLowerCase();\n  // Empty string is a valid device label but we can't infer anything from it.\n  if (label === '') {\n    return undefined;\n  }\n  // Can we match against widely known device labels.\n  if (knownDeviceLabels.has(label)) {\n    return knownDeviceLabels.get(label);\n  }\n  // Can we match against sections of the device label.\n  return (_a = Array.from(knownDeviceLabelSections.entries()).find(_ref => {\n    let _ref2 = _slicedToArray(_ref, 1),\n      section = _ref2[0];\n    return label.includes(section);\n  })) === null || _a === void 0 ? void 0 : _a[1];\n}\nfunction isFacingModeValue(item) {\n  const allowedValues = ['user', 'environment', 'left', 'right'];\n  return item === undefined || allowedValues.includes(item);\n}const SerializerSymbol = Symbol.for('lk.serializer');\nfunction isSerializer(v) {\n  return typeof v === 'object' && v !== null && 'symbol' in v && v.symbol === SerializerSymbol;\n}\n/** @internal */\nfunction base(params) {\n  return Object.assign(Object.assign({}, params), {\n    symbol: SerializerSymbol\n  });\n}\n/**\n * JSON serializer — `JSON.parse` on the way in, `JSON.stringify` on the way out.\n * Defaults to `any` so individual handlers can annotate their own payload types.\n */\nfunction json() {\n  return base({\n    parse: rawString => JSON.parse(rawString),\n    serialize: val => JSON.stringify(val)\n  });\n}\n/** Raw string serializer — passes payloads through as plain strings with no encoding. */\nfunction raw() {\n  return base({\n    parse: rawString => rawString,\n    serialize: val => val\n  });\n}\n/** Custom serializer - allows custom defined parse and serialize functions */\nfunction custom(params) {\n  return base(params);\n}\n/**\n * Serializer helpers for message payload encoding.\n *\n * @example\n * ```ts\n * const a = serializers.raw(); // Serializer<string, string>\n * const b = serializer.json<{ foo: string }, { bar: string }>(); // Serializer<{ foo: string }, { bar: string }>\n * ```\n *\n * @beta\n */\nconst serializers = {\n  json,\n  raw,\n  custom\n};export{AudioPresets,BackupCodecPolicy,BaseKeyProvider,CLIENT_PROTOCOL_DATA_STREAM_RPC,CLIENT_PROTOCOL_DEFAULT,CheckStatus,Checker,ConnectionCheck,ConnectionError,ConnectionErrorReason,ConnectionQuality,ConnectionState,CriticalTimers,CryptorError,CryptorErrorReason,CryptorEvent,DataPacket_Kind,DataStreamError,DataStreamErrorReason,DataTrackPacket,DefaultReconnectPolicy,DeviceUnsupportedError,DisconnectReason,EncryptionEvent,Encryption_Type,EngineEvent,ExternalE2EEKeyProvider,FrameMetadataManager,KeyHandlerEvent,KeyProviderEvent,LivekitError,LivekitReasonedError,LocalAudioTrack,LocalDataTrack,LocalParticipant,LocalTrack,LocalTrackPublication,LocalTrackRecorder,LocalVideoTrack,LogLevel,LoggerNames,MediaDeviceFailure,_ as Mutex,NegotiationError,PacketTrailerManager,Participant,ParticipantEvent,ParticipantInfo_Kind as ParticipantKind,PublishDataError,PublishTrackError,RemoteAudioTrack,RemoteDataTrack,RemoteParticipant,RemoteTrack,RemoteTrackPublication,RemoteVideoTrack,Room,RoomEvent,RpcError,ScreenSharePresets,SignalReconnectError,SignalRequestError,SimulatedError,SubscriptionError,TokenSource,TokenSourceConfigurable,TokenSourceFixed,Track,TrackEvent,TrackInvalidError,TrackPublication,TrackType,UnexpectedConnectionState,UnsupportedServer,VideoPreset,VideoPresets,VideoPresets43,VideoQuality,areTokenSourceFetchOptionsEqual,asEncryptablePacket,attachToElement,attributeTypings as attributes,audioCodecs,clientProtocol,compareVersions,createAudioAnalyser,createE2EEKey,createKeyMaterialFromBuffer,createKeyMaterialFromString,createLocalAudioTrack,createLocalScreenTracks,createLocalTracks,createLocalVideoTrack,decodeTokenPayload,deriveKeys,detachTrack,facingModeFromDeviceLabel,facingModeFromLocalTrack,getBrowser,getEmptyAudioStreamTrack,getEmptyVideoStreamTrack,getLogger,importKey,isAudioCodec,isAudioTrack,isBackupCodec,isBackupVideoCodec,isBrowserSupported,isE2EESupported,isInsertableStreamSupported,isLocalParticipant,isLocalTrack,isRemoteParticipant,isRemoteTrack,isScriptTransformSupported,isSerializer,isVideoCodec,isVideoFrame,isVideoTrack,needsRbspUnescaping,parseRbsp,protocolVersion,ratchet,serializers,setLogExtension,setLogLevel,supportsAV1,supportsAdaptiveStream,supportsAudioOutputSelection,supportsDynacast,supportsVP9,version,videoCodecs,writeRbsp};//# sourceMappingURL=livekit-client.esm.mjs.map\n","import { setLogLevel as qn, LogLevel as St, setLogExtension as Kn, RoomEvent as y, ParticipantEvent as w, Track as R, TrackEvent as Gt, getBrowser as Gn, compareVersions as Qn, Room as Tt } from \"livekit-client\";\nimport * as I from \"react\";\nconst De = Math.min, ue = Math.max, $e = Math.round, _e = Math.floor, J = (e) => ({\n  x: e,\n  y: e\n}), Jn = {\n  left: \"right\",\n  right: \"left\",\n  bottom: \"top\",\n  top: \"bottom\"\n}, Xn = {\n  start: \"end\",\n  end: \"start\"\n};\nfunction Et(e, t, n) {\n  return ue(e, De(t, n));\n}\nfunction He(e, t) {\n  return typeof e == \"function\" ? e(t) : e;\n}\nfunction le(e) {\n  return e.split(\"-\")[0];\n}\nfunction ze(e) {\n  return e.split(\"-\")[1];\n}\nfunction Qt(e) {\n  return e === \"x\" ? \"y\" : \"x\";\n}\nfunction Jt(e) {\n  return e === \"y\" ? \"height\" : \"width\";\n}\nconst Zn = /* @__PURE__ */ new Set([\"top\", \"bottom\"]);\nfunction ie(e) {\n  return Zn.has(le(e)) ? \"y\" : \"x\";\n}\nfunction Xt(e) {\n  return Qt(ie(e));\n}\nfunction er(e, t, n) {\n  n === void 0 && (n = !1);\n  const r = ze(e), i = Xt(e), o = Jt(i);\n  let s = i === \"x\" ? r === (n ? \"end\" : \"start\") ? \"right\" : \"left\" : r === \"start\" ? \"bottom\" : \"top\";\n  return t.reference[o] > t.floating[o] && (s = Ne(s)), [s, Ne(s)];\n}\nfunction tr(e) {\n  const t = Ne(e);\n  return [st(e), t, st(t)];\n}\nfunction st(e) {\n  return e.replace(/start|end/g, (t) => Xn[t]);\n}\nconst Ct = [\"left\", \"right\"], Pt = [\"right\", \"left\"], nr = [\"top\", \"bottom\"], rr = [\"bottom\", \"top\"];\nfunction ir(e, t, n) {\n  switch (e) {\n    case \"top\":\n    case \"bottom\":\n      return n ? t ? Pt : Ct : t ? Ct : Pt;\n    case \"left\":\n    case \"right\":\n      return t ? nr : rr;\n    default:\n      return [];\n  }\n}\nfunction or(e, t, n, r) {\n  const i = ze(e);\n  let o = ir(le(e), n === \"start\", r);\n  return i && (o = o.map((s) => s + \"-\" + i), t && (o = o.concat(o.map(st)))), o;\n}\nfunction Ne(e) {\n  return e.replace(/left|right|bottom|top/g, (t) => Jn[t]);\n}\nfunction sr(e) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...e\n  };\n}\nfunction ar(e) {\n  return typeof e != \"number\" ? sr(e) : {\n    top: e,\n    right: e,\n    bottom: e,\n    left: e\n  };\n}\nfunction Fe(e) {\n  const {\n    x: t,\n    y: n,\n    width: r,\n    height: i\n  } = e;\n  return {\n    width: r,\n    height: i,\n    top: n,\n    left: t,\n    right: t + r,\n    bottom: n + i,\n    x: t,\n    y: n\n  };\n}\nfunction Ot(e, t, n) {\n  let {\n    reference: r,\n    floating: i\n  } = e;\n  const o = ie(t), s = Xt(t), a = Jt(s), c = le(t), u = o === \"y\", l = r.x + r.width / 2 - i.width / 2, f = r.y + r.height / 2 - i.height / 2, v = r[a] / 2 - i[a] / 2;\n  let d;\n  switch (c) {\n    case \"top\":\n      d = {\n        x: l,\n        y: r.y - i.height\n      };\n      break;\n    case \"bottom\":\n      d = {\n        x: l,\n        y: r.y + r.height\n      };\n      break;\n    case \"right\":\n      d = {\n        x: r.x + r.width,\n        y: f\n      };\n      break;\n    case \"left\":\n      d = {\n        x: r.x - i.width,\n        y: f\n      };\n      break;\n    default:\n      d = {\n        x: r.x,\n        y: r.y\n      };\n  }\n  switch (ze(t)) {\n    case \"start\":\n      d[s] -= v * (n && u ? -1 : 1);\n      break;\n    case \"end\":\n      d[s] += v * (n && u ? -1 : 1);\n      break;\n  }\n  return d;\n}\nconst cr = async (e, t, n) => {\n  const {\n    placement: r = \"bottom\",\n    strategy: i = \"absolute\",\n    middleware: o = [],\n    platform: s\n  } = n, a = o.filter(Boolean), c = await (s.isRTL == null ? void 0 : s.isRTL(t));\n  let u = await s.getElementRects({\n    reference: e,\n    floating: t,\n    strategy: i\n  }), {\n    x: l,\n    y: f\n  } = Ot(u, r, c), v = r, d = {}, m = 0;\n  for (let p = 0; p < a.length; p++) {\n    const {\n      name: g,\n      fn: h\n    } = a[p], {\n      x,\n      y: E,\n      data: O,\n      reset: b\n    } = await h({\n      x: l,\n      y: f,\n      initialPlacement: r,\n      placement: v,\n      strategy: i,\n      middlewareData: d,\n      rects: u,\n      platform: s,\n      elements: {\n        reference: e,\n        floating: t\n      }\n    });\n    l = x ?? l, f = E ?? f, d = {\n      ...d,\n      [g]: {\n        ...d[g],\n        ...O\n      }\n    }, b && m <= 50 && (m++, typeof b == \"object\" && (b.placement && (v = b.placement), b.rects && (u = b.rects === !0 ? await s.getElementRects({\n      reference: e,\n      floating: t,\n      strategy: i\n    }) : b.rects), {\n      x: l,\n      y: f\n    } = Ot(u, v, c)), p = -1);\n  }\n  return {\n    x: l,\n    y: f,\n    placement: v,\n    strategy: i,\n    middlewareData: d\n  };\n};\nasync function Zt(e, t) {\n  var n;\n  t === void 0 && (t = {});\n  const {\n    x: r,\n    y: i,\n    platform: o,\n    rects: s,\n    elements: a,\n    strategy: c\n  } = e, {\n    boundary: u = \"clippingAncestors\",\n    rootBoundary: l = \"viewport\",\n    elementContext: f = \"floating\",\n    altBoundary: v = !1,\n    padding: d = 0\n  } = He(t, e), m = ar(d), g = a[v ? f === \"floating\" ? \"reference\" : \"floating\" : f], h = Fe(await o.getClippingRect({\n    element: (n = await (o.isElement == null ? void 0 : o.isElement(g))) == null || n ? g : g.contextElement || await (o.getDocumentElement == null ? void 0 : o.getDocumentElement(a.floating)),\n    boundary: u,\n    rootBoundary: l,\n    strategy: c\n  })), x = f === \"floating\" ? {\n    x: r,\n    y: i,\n    width: s.floating.width,\n    height: s.floating.height\n  } : s.reference, E = await (o.getOffsetParent == null ? void 0 : o.getOffsetParent(a.floating)), O = await (o.isElement == null ? void 0 : o.isElement(E)) ? await (o.getScale == null ? void 0 : o.getScale(E)) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  }, b = Fe(o.convertOffsetParentRelativeRectToViewportRelativeRect ? await o.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements: a,\n    rect: x,\n    offsetParent: E,\n    strategy: c\n  }) : x);\n  return {\n    top: (h.top - b.top + m.top) / O.y,\n    bottom: (b.bottom - h.bottom + m.bottom) / O.y,\n    left: (h.left - b.left + m.left) / O.x,\n    right: (b.right - h.right + m.right) / O.x\n  };\n}\nconst ur = function(e) {\n  return e === void 0 && (e = {}), {\n    name: \"flip\",\n    options: e,\n    async fn(t) {\n      var n, r;\n      const {\n        placement: i,\n        middlewareData: o,\n        rects: s,\n        initialPlacement: a,\n        platform: c,\n        elements: u\n      } = t, {\n        mainAxis: l = !0,\n        crossAxis: f = !0,\n        fallbackPlacements: v,\n        fallbackStrategy: d = \"bestFit\",\n        fallbackAxisSideDirection: m = \"none\",\n        flipAlignment: p = !0,\n        ...g\n      } = He(e, t);\n      if ((n = o.arrow) != null && n.alignmentOffset)\n        return {};\n      const h = le(i), x = ie(a), E = le(a) === a, O = await (c.isRTL == null ? void 0 : c.isRTL(u.floating)), b = v || (E || !p ? [Ne(a)] : tr(a)), S = m !== \"none\";\n      !v && S && b.push(...or(a, p, m, O));\n      const C = [a, ...b], $ = await Zt(t, g), M = [];\n      let V = ((r = o.flip) == null ? void 0 : r.overflows) || [];\n      if (l && M.push($[h]), f) {\n        const Q = er(i, s, O);\n        M.push($[Q[0]], $[Q[1]]);\n      }\n      if (V = [...V, {\n        placement: i,\n        overflows: M\n      }], !M.every((Q) => Q <= 0)) {\n        var T, _;\n        const Q = (((T = o.flip) == null ? void 0 : T.index) || 0) + 1, Se = C[Q];\n        if (Se && (!(f === \"alignment\" ? x !== ie(Se) : !1) || // We leave the current main axis only if every placement on that axis\n        // overflows the main axis.\n        V.every((Y) => ie(Y.placement) === x ? Y.overflows[0] > 0 : !0)))\n          return {\n            data: {\n              index: Q,\n              overflows: V\n            },\n            reset: {\n              placement: Se\n            }\n          };\n        let Te = (_ = V.filter((ae) => ae.overflows[0] <= 0).sort((ae, Y) => ae.overflows[1] - Y.overflows[1])[0]) == null ? void 0 : _.placement;\n        if (!Te)\n          switch (d) {\n            case \"bestFit\": {\n              var ee;\n              const ae = (ee = V.filter((Y) => {\n                if (S) {\n                  const re = ie(Y.placement);\n                  return re === x || // Create a bias to the `y` side axis due to horizontal\n                  // reading directions favoring greater width.\n                  re === \"y\";\n                }\n                return !0;\n              }).map((Y) => [Y.placement, Y.overflows.filter((re) => re > 0).reduce((re, Yn) => re + Yn, 0)]).sort((Y, re) => Y[1] - re[1])[0]) == null ? void 0 : ee[0];\n              ae && (Te = ae);\n              break;\n            }\n            case \"initialPlacement\":\n              Te = a;\n              break;\n          }\n        if (i !== Te)\n          return {\n            reset: {\n              placement: Te\n            }\n          };\n      }\n      return {};\n    }\n  };\n}, lr = /* @__PURE__ */ new Set([\"left\", \"top\"]);\nasync function fr(e, t) {\n  const {\n    placement: n,\n    platform: r,\n    elements: i\n  } = e, o = await (r.isRTL == null ? void 0 : r.isRTL(i.floating)), s = le(n), a = ze(n), c = ie(n) === \"y\", u = lr.has(s) ? -1 : 1, l = o && c ? -1 : 1, f = He(t, e);\n  let {\n    mainAxis: v,\n    crossAxis: d,\n    alignmentAxis: m\n  } = typeof f == \"number\" ? {\n    mainAxis: f,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: f.mainAxis || 0,\n    crossAxis: f.crossAxis || 0,\n    alignmentAxis: f.alignmentAxis\n  };\n  return a && typeof m == \"number\" && (d = a === \"end\" ? m * -1 : m), c ? {\n    x: d * l,\n    y: v * u\n  } : {\n    x: v * u,\n    y: d * l\n  };\n}\nconst dr = function(e) {\n  return e === void 0 && (e = 0), {\n    name: \"offset\",\n    options: e,\n    async fn(t) {\n      var n, r;\n      const {\n        x: i,\n        y: o,\n        placement: s,\n        middlewareData: a\n      } = t, c = await fr(t, e);\n      return s === ((n = a.offset) == null ? void 0 : n.placement) && (r = a.arrow) != null && r.alignmentOffset ? {} : {\n        x: i + c.x,\n        y: o + c.y,\n        data: {\n          ...c,\n          placement: s\n        }\n      };\n    }\n  };\n}, pr = function(e) {\n  return e === void 0 && (e = {}), {\n    name: \"shift\",\n    options: e,\n    async fn(t) {\n      const {\n        x: n,\n        y: r,\n        placement: i\n      } = t, {\n        mainAxis: o = !0,\n        crossAxis: s = !1,\n        limiter: a = {\n          fn: (g) => {\n            let {\n              x: h,\n              y: x\n            } = g;\n            return {\n              x: h,\n              y: x\n            };\n          }\n        },\n        ...c\n      } = He(e, t), u = {\n        x: n,\n        y: r\n      }, l = await Zt(t, c), f = ie(le(i)), v = Qt(f);\n      let d = u[v], m = u[f];\n      if (o) {\n        const g = v === \"y\" ? \"top\" : \"left\", h = v === \"y\" ? \"bottom\" : \"right\", x = d + l[g], E = d - l[h];\n        d = Et(x, d, E);\n      }\n      if (s) {\n        const g = f === \"y\" ? \"top\" : \"left\", h = f === \"y\" ? \"bottom\" : \"right\", x = m + l[g], E = m - l[h];\n        m = Et(x, m, E);\n      }\n      const p = a.fn({\n        ...t,\n        [v]: d,\n        [f]: m\n      });\n      return {\n        ...p,\n        data: {\n          x: p.x - n,\n          y: p.y - r,\n          enabled: {\n            [v]: o,\n            [f]: s\n          }\n        }\n      };\n    }\n  };\n};\nfunction Ye() {\n  return typeof window < \"u\";\n}\nfunction ye(e) {\n  return en(e) ? (e.nodeName || \"\").toLowerCase() : \"#document\";\n}\nfunction j(e) {\n  var t;\n  return (e == null || (t = e.ownerDocument) == null ? void 0 : t.defaultView) || window;\n}\nfunction Z(e) {\n  var t;\n  return (t = (en(e) ? e.ownerDocument : e.document) || window.document) == null ? void 0 : t.documentElement;\n}\nfunction en(e) {\n  return Ye() ? e instanceof Node || e instanceof j(e).Node : !1;\n}\nfunction K(e) {\n  return Ye() ? e instanceof Element || e instanceof j(e).Element : !1;\n}\nfunction X(e) {\n  return Ye() ? e instanceof HTMLElement || e instanceof j(e).HTMLElement : !1;\n}\nfunction At(e) {\n  return !Ye() || typeof ShadowRoot > \"u\" ? !1 : e instanceof ShadowRoot || e instanceof j(e).ShadowRoot;\n}\nconst hr = /* @__PURE__ */ new Set([\"inline\", \"contents\"]);\nfunction Ae(e) {\n  const {\n    overflow: t,\n    overflowX: n,\n    overflowY: r,\n    display: i\n  } = G(e);\n  return /auto|scroll|overlay|hidden|clip/.test(t + r + n) && !hr.has(i);\n}\nconst vr = /* @__PURE__ */ new Set([\"table\", \"td\", \"th\"]);\nfunction mr(e) {\n  return vr.has(ye(e));\n}\nconst gr = [\":popover-open\", \":modal\"];\nfunction qe(e) {\n  return gr.some((t) => {\n    try {\n      return e.matches(t);\n    } catch {\n      return !1;\n    }\n  });\n}\nconst br = [\"transform\", \"translate\", \"scale\", \"rotate\", \"perspective\"], yr = [\"transform\", \"translate\", \"scale\", \"rotate\", \"perspective\", \"filter\"], wr = [\"paint\", \"layout\", \"strict\", \"content\"];\nfunction pt(e) {\n  const t = ht(), n = K(e) ? G(e) : e;\n  return br.some((r) => n[r] ? n[r] !== \"none\" : !1) || (n.containerType ? n.containerType !== \"normal\" : !1) || !t && (n.backdropFilter ? n.backdropFilter !== \"none\" : !1) || !t && (n.filter ? n.filter !== \"none\" : !1) || yr.some((r) => (n.willChange || \"\").includes(r)) || wr.some((r) => (n.contain || \"\").includes(r));\n}\nfunction xr(e) {\n  let t = se(e);\n  for (; X(t) && !me(t); ) {\n    if (pt(t))\n      return t;\n    if (qe(t))\n      return null;\n    t = se(t);\n  }\n  return null;\n}\nfunction ht() {\n  return typeof CSS > \"u\" || !CSS.supports ? !1 : CSS.supports(\"-webkit-backdrop-filter\", \"none\");\n}\nconst Sr = /* @__PURE__ */ new Set([\"html\", \"body\", \"#document\"]);\nfunction me(e) {\n  return Sr.has(ye(e));\n}\nfunction G(e) {\n  return j(e).getComputedStyle(e);\n}\nfunction Ke(e) {\n  return K(e) ? {\n    scrollLeft: e.scrollLeft,\n    scrollTop: e.scrollTop\n  } : {\n    scrollLeft: e.scrollX,\n    scrollTop: e.scrollY\n  };\n}\nfunction se(e) {\n  if (ye(e) === \"html\")\n    return e;\n  const t = (\n    // Step into the shadow DOM of the parent of a slotted node.\n    e.assignedSlot || // DOM Element detected.\n    e.parentNode || // ShadowRoot detected.\n    At(e) && e.host || // Fallback.\n    Z(e)\n  );\n  return At(t) ? t.host : t;\n}\nfunction tn(e) {\n  const t = se(e);\n  return me(t) ? e.ownerDocument ? e.ownerDocument.body : e.body : X(t) && Ae(t) ? t : tn(t);\n}\nfunction Ce(e, t, n) {\n  var r;\n  t === void 0 && (t = []), n === void 0 && (n = !0);\n  const i = tn(e), o = i === ((r = e.ownerDocument) == null ? void 0 : r.body), s = j(i);\n  if (o) {\n    const a = at(s);\n    return t.concat(s, s.visualViewport || [], Ae(i) ? i : [], a && n ? Ce(a) : []);\n  }\n  return t.concat(i, Ce(i, [], n));\n}\nfunction at(e) {\n  return e.parent && Object.getPrototypeOf(e.parent) ? e.frameElement : null;\n}\nfunction nn(e) {\n  const t = G(e);\n  let n = parseFloat(t.width) || 0, r = parseFloat(t.height) || 0;\n  const i = X(e), o = i ? e.offsetWidth : n, s = i ? e.offsetHeight : r, a = $e(n) !== o || $e(r) !== s;\n  return a && (n = o, r = s), {\n    width: n,\n    height: r,\n    $: a\n  };\n}\nfunction vt(e) {\n  return K(e) ? e : e.contextElement;\n}\nfunction he(e) {\n  const t = vt(e);\n  if (!X(t))\n    return J(1);\n  const n = t.getBoundingClientRect(), {\n    width: r,\n    height: i,\n    $: o\n  } = nn(t);\n  let s = (o ? $e(n.width) : n.width) / r, a = (o ? $e(n.height) : n.height) / i;\n  return (!s || !Number.isFinite(s)) && (s = 1), (!a || !Number.isFinite(a)) && (a = 1), {\n    x: s,\n    y: a\n  };\n}\nconst Tr = /* @__PURE__ */ J(0);\nfunction rn(e) {\n  const t = j(e);\n  return !ht() || !t.visualViewport ? Tr : {\n    x: t.visualViewport.offsetLeft,\n    y: t.visualViewport.offsetTop\n  };\n}\nfunction Er(e, t, n) {\n  return t === void 0 && (t = !1), !n || t && n !== j(e) ? !1 : t;\n}\nfunction fe(e, t, n, r) {\n  t === void 0 && (t = !1), n === void 0 && (n = !1);\n  const i = e.getBoundingClientRect(), o = vt(e);\n  let s = J(1);\n  t && (r ? K(r) && (s = he(r)) : s = he(e));\n  const a = Er(o, n, r) ? rn(o) : J(0);\n  let c = (i.left + a.x) / s.x, u = (i.top + a.y) / s.y, l = i.width / s.x, f = i.height / s.y;\n  if (o) {\n    const v = j(o), d = r && K(r) ? j(r) : r;\n    let m = v, p = at(m);\n    for (; p && r && d !== m; ) {\n      const g = he(p), h = p.getBoundingClientRect(), x = G(p), E = h.left + (p.clientLeft + parseFloat(x.paddingLeft)) * g.x, O = h.top + (p.clientTop + parseFloat(x.paddingTop)) * g.y;\n      c *= g.x, u *= g.y, l *= g.x, f *= g.y, c += E, u += O, m = j(p), p = at(m);\n    }\n  }\n  return Fe({\n    width: l,\n    height: f,\n    x: c,\n    y: u\n  });\n}\nfunction Ge(e, t) {\n  const n = Ke(e).scrollLeft;\n  return t ? t.left + n : fe(Z(e)).left + n;\n}\nfunction on(e, t) {\n  const n = e.getBoundingClientRect(), r = n.left + t.scrollLeft - Ge(e, n), i = n.top + t.scrollTop;\n  return {\n    x: r,\n    y: i\n  };\n}\nfunction Cr(e) {\n  let {\n    elements: t,\n    rect: n,\n    offsetParent: r,\n    strategy: i\n  } = e;\n  const o = i === \"fixed\", s = Z(r), a = t ? qe(t.floating) : !1;\n  if (r === s || a && o)\n    return n;\n  let c = {\n    scrollLeft: 0,\n    scrollTop: 0\n  }, u = J(1);\n  const l = J(0), f = X(r);\n  if ((f || !f && !o) && ((ye(r) !== \"body\" || Ae(s)) && (c = Ke(r)), X(r))) {\n    const d = fe(r);\n    u = he(r), l.x = d.x + r.clientLeft, l.y = d.y + r.clientTop;\n  }\n  const v = s && !f && !o ? on(s, c) : J(0);\n  return {\n    width: n.width * u.x,\n    height: n.height * u.y,\n    x: n.x * u.x - c.scrollLeft * u.x + l.x + v.x,\n    y: n.y * u.y - c.scrollTop * u.y + l.y + v.y\n  };\n}\nfunction Pr(e) {\n  return Array.from(e.getClientRects());\n}\nfunction Or(e) {\n  const t = Z(e), n = Ke(e), r = e.ownerDocument.body, i = ue(t.scrollWidth, t.clientWidth, r.scrollWidth, r.clientWidth), o = ue(t.scrollHeight, t.clientHeight, r.scrollHeight, r.clientHeight);\n  let s = -n.scrollLeft + Ge(e);\n  const a = -n.scrollTop;\n  return G(r).direction === \"rtl\" && (s += ue(t.clientWidth, r.clientWidth) - i), {\n    width: i,\n    height: o,\n    x: s,\n    y: a\n  };\n}\nconst kt = 25;\nfunction Ar(e, t) {\n  const n = j(e), r = Z(e), i = n.visualViewport;\n  let o = r.clientWidth, s = r.clientHeight, a = 0, c = 0;\n  if (i) {\n    o = i.width, s = i.height;\n    const l = ht();\n    (!l || l && t === \"fixed\") && (a = i.offsetLeft, c = i.offsetTop);\n  }\n  const u = Ge(r);\n  if (u <= 0) {\n    const l = r.ownerDocument, f = l.body, v = getComputedStyle(f), d = l.compatMode === \"CSS1Compat\" && parseFloat(v.marginLeft) + parseFloat(v.marginRight) || 0, m = Math.abs(r.clientWidth - f.clientWidth - d);\n    m <= kt && (o -= m);\n  } else u <= kt && (o += u);\n  return {\n    width: o,\n    height: s,\n    x: a,\n    y: c\n  };\n}\nconst kr = /* @__PURE__ */ new Set([\"absolute\", \"fixed\"]);\nfunction _r(e, t) {\n  const n = fe(e, !0, t === \"fixed\"), r = n.top + e.clientTop, i = n.left + e.clientLeft, o = X(e) ? he(e) : J(1), s = e.clientWidth * o.x, a = e.clientHeight * o.y, c = i * o.x, u = r * o.y;\n  return {\n    width: s,\n    height: a,\n    x: c,\n    y: u\n  };\n}\nfunction _t(e, t, n) {\n  let r;\n  if (t === \"viewport\")\n    r = Ar(e, n);\n  else if (t === \"document\")\n    r = Or(Z(e));\n  else if (K(t))\n    r = _r(t, n);\n  else {\n    const i = rn(e);\n    r = {\n      x: t.x - i.x,\n      y: t.y - i.y,\n      width: t.width,\n      height: t.height\n    };\n  }\n  return Fe(r);\n}\nfunction sn(e, t) {\n  const n = se(e);\n  return n === t || !K(n) || me(n) ? !1 : G(n).position === \"fixed\" || sn(n, t);\n}\nfunction Lr(e, t) {\n  const n = t.get(e);\n  if (n)\n    return n;\n  let r = Ce(e, [], !1).filter((a) => K(a) && ye(a) !== \"body\"), i = null;\n  const o = G(e).position === \"fixed\";\n  let s = o ? se(e) : e;\n  for (; K(s) && !me(s); ) {\n    const a = G(s), c = pt(s);\n    !c && a.position === \"fixed\" && (i = null), (o ? !c && !i : !c && a.position === \"static\" && !!i && kr.has(i.position) || Ae(s) && !c && sn(e, s)) ? r = r.filter((l) => l !== s) : i = a, s = se(s);\n  }\n  return t.set(e, r), r;\n}\nfunction Ir(e) {\n  let {\n    element: t,\n    boundary: n,\n    rootBoundary: r,\n    strategy: i\n  } = e;\n  const s = [...n === \"clippingAncestors\" ? qe(t) ? [] : Lr(t, this._c) : [].concat(n), r], a = s[0], c = s.reduce((u, l) => {\n    const f = _t(t, l, i);\n    return u.top = ue(f.top, u.top), u.right = De(f.right, u.right), u.bottom = De(f.bottom, u.bottom), u.left = ue(f.left, u.left), u;\n  }, _t(t, a, i));\n  return {\n    width: c.right - c.left,\n    height: c.bottom - c.top,\n    x: c.left,\n    y: c.top\n  };\n}\nfunction Mr(e) {\n  const {\n    width: t,\n    height: n\n  } = nn(e);\n  return {\n    width: t,\n    height: n\n  };\n}\nfunction Rr(e, t, n) {\n  const r = X(t), i = Z(t), o = n === \"fixed\", s = fe(e, !0, o, t);\n  let a = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const c = J(0);\n  function u() {\n    c.x = Ge(i);\n  }\n  if (r || !r && !o)\n    if ((ye(t) !== \"body\" || Ae(i)) && (a = Ke(t)), r) {\n      const d = fe(t, !0, o, t);\n      c.x = d.x + t.clientLeft, c.y = d.y + t.clientTop;\n    } else i && u();\n  o && !r && i && u();\n  const l = i && !r && !o ? on(i, a) : J(0), f = s.left + a.scrollLeft - c.x - l.x, v = s.top + a.scrollTop - c.y - l.y;\n  return {\n    x: f,\n    y: v,\n    width: s.width,\n    height: s.height\n  };\n}\nfunction et(e) {\n  return G(e).position === \"static\";\n}\nfunction Lt(e, t) {\n  if (!X(e) || G(e).position === \"fixed\")\n    return null;\n  if (t)\n    return t(e);\n  let n = e.offsetParent;\n  return Z(e) === n && (n = n.ownerDocument.body), n;\n}\nfunction an(e, t) {\n  const n = j(e);\n  if (qe(e))\n    return n;\n  if (!X(e)) {\n    let i = se(e);\n    for (; i && !me(i); ) {\n      if (K(i) && !et(i))\n        return i;\n      i = se(i);\n    }\n    return n;\n  }\n  let r = Lt(e, t);\n  for (; r && mr(r) && et(r); )\n    r = Lt(r, t);\n  return r && me(r) && et(r) && !pt(r) ? n : r || xr(e) || n;\n}\nconst Dr = async function(e) {\n  const t = this.getOffsetParent || an, n = this.getDimensions, r = await n(e.floating);\n  return {\n    reference: Rr(e.reference, await t(e.floating), e.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: r.width,\n      height: r.height\n    }\n  };\n};\nfunction $r(e) {\n  return G(e).direction === \"rtl\";\n}\nconst Nr = {\n  convertOffsetParentRelativeRectToViewportRelativeRect: Cr,\n  getDocumentElement: Z,\n  getClippingRect: Ir,\n  getOffsetParent: an,\n  getElementRects: Dr,\n  getClientRects: Pr,\n  getDimensions: Mr,\n  getScale: he,\n  isElement: K,\n  isRTL: $r\n};\nfunction cn(e, t) {\n  return e.x === t.x && e.y === t.y && e.width === t.width && e.height === t.height;\n}\nfunction Fr(e, t) {\n  let n = null, r;\n  const i = Z(e);\n  function o() {\n    var a;\n    clearTimeout(r), (a = n) == null || a.disconnect(), n = null;\n  }\n  function s(a, c) {\n    a === void 0 && (a = !1), c === void 0 && (c = 1), o();\n    const u = e.getBoundingClientRect(), {\n      left: l,\n      top: f,\n      width: v,\n      height: d\n    } = u;\n    if (a || t(), !v || !d)\n      return;\n    const m = _e(f), p = _e(i.clientWidth - (l + v)), g = _e(i.clientHeight - (f + d)), h = _e(l), E = {\n      rootMargin: -m + \"px \" + -p + \"px \" + -g + \"px \" + -h + \"px\",\n      threshold: ue(0, De(1, c)) || 1\n    };\n    let O = !0;\n    function b(S) {\n      const C = S[0].intersectionRatio;\n      if (C !== c) {\n        if (!O)\n          return s();\n        C ? s(!1, C) : r = setTimeout(() => {\n          s(!1, 1e-7);\n        }, 1e3);\n      }\n      C === 1 && !cn(u, e.getBoundingClientRect()) && s(), O = !1;\n    }\n    try {\n      n = new IntersectionObserver(b, {\n        ...E,\n        // Handle <iframe>s\n        root: i.ownerDocument\n      });\n    } catch {\n      n = new IntersectionObserver(b, E);\n    }\n    n.observe(e);\n  }\n  return s(!0), o;\n}\nfunction Ur(e, t, n, r) {\n  r === void 0 && (r = {});\n  const {\n    ancestorScroll: i = !0,\n    ancestorResize: o = !0,\n    elementResize: s = typeof ResizeObserver == \"function\",\n    layoutShift: a = typeof IntersectionObserver == \"function\",\n    animationFrame: c = !1\n  } = r, u = vt(e), l = i || o ? [...u ? Ce(u) : [], ...Ce(t)] : [];\n  l.forEach((h) => {\n    i && h.addEventListener(\"scroll\", n, {\n      passive: !0\n    }), o && h.addEventListener(\"resize\", n);\n  });\n  const f = u && a ? Fr(u, n) : null;\n  let v = -1, d = null;\n  s && (d = new ResizeObserver((h) => {\n    let [x] = h;\n    x && x.target === u && d && (d.unobserve(t), cancelAnimationFrame(v), v = requestAnimationFrame(() => {\n      var E;\n      (E = d) == null || E.observe(t);\n    })), n();\n  }), u && !c && d.observe(u), d.observe(t));\n  let m, p = c ? fe(e) : null;\n  c && g();\n  function g() {\n    const h = fe(e);\n    p && !cn(p, h) && n(), p = h, m = requestAnimationFrame(g);\n  }\n  return n(), () => {\n    var h;\n    l.forEach((x) => {\n      i && x.removeEventListener(\"scroll\", n), o && x.removeEventListener(\"resize\", n);\n    }), f == null || f(), (h = d) == null || h.disconnect(), d = null, c && cancelAnimationFrame(m);\n  };\n}\nconst Wr = dr, jr = pr, Br = ur, Vr = (e, t, n) => {\n  const r = /* @__PURE__ */ new Map(), i = {\n    platform: Nr,\n    ...n\n  }, o = {\n    ...i.platform,\n    _c: r\n  };\n  return cr(e, t, {\n    ...i,\n    platform: o\n  });\n};\nvar es = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {};\nfunction Hr(e) {\n  return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, \"default\") ? e.default : e;\n}\nvar Me = { exports: {} }, zr = Me.exports, It;\nfunction Yr() {\n  return It || (It = 1, (function(e) {\n    (function(t, n) {\n      e.exports ? e.exports = n() : t.log = n();\n    })(zr, function() {\n      var t = function() {\n      }, n = \"undefined\", r = typeof window !== n && typeof window.navigator !== n && /Trident\\/|MSIE /.test(window.navigator.userAgent), i = [\n        \"trace\",\n        \"debug\",\n        \"info\",\n        \"warn\",\n        \"error\"\n      ], o = {}, s = null;\n      function a(p, g) {\n        var h = p[g];\n        if (typeof h.bind == \"function\")\n          return h.bind(p);\n        try {\n          return Function.prototype.bind.call(h, p);\n        } catch {\n          return function() {\n            return Function.prototype.apply.apply(h, [p, arguments]);\n          };\n        }\n      }\n      function c() {\n        console.log && (console.log.apply ? console.log.apply(console, arguments) : Function.prototype.apply.apply(console.log, [console, arguments])), console.trace && console.trace();\n      }\n      function u(p) {\n        return p === \"debug\" && (p = \"log\"), typeof console === n ? !1 : p === \"trace\" && r ? c : console[p] !== void 0 ? a(console, p) : console.log !== void 0 ? a(console, \"log\") : t;\n      }\n      function l() {\n        for (var p = this.getLevel(), g = 0; g < i.length; g++) {\n          var h = i[g];\n          this[h] = g < p ? t : this.methodFactory(h, p, this.name);\n        }\n        if (this.log = this.debug, typeof console === n && p < this.levels.SILENT)\n          return \"No console available for logging\";\n      }\n      function f(p) {\n        return function() {\n          typeof console !== n && (l.call(this), this[p].apply(this, arguments));\n        };\n      }\n      function v(p, g, h) {\n        return u(p) || f.apply(this, arguments);\n      }\n      function d(p, g) {\n        var h = this, x, E, O, b = \"loglevel\";\n        typeof p == \"string\" ? b += \":\" + p : typeof p == \"symbol\" && (b = void 0);\n        function S(T) {\n          var _ = (i[T] || \"silent\").toUpperCase();\n          if (!(typeof window === n || !b)) {\n            try {\n              window.localStorage[b] = _;\n              return;\n            } catch {\n            }\n            try {\n              window.document.cookie = encodeURIComponent(b) + \"=\" + _ + \";\";\n            } catch {\n            }\n          }\n        }\n        function C() {\n          var T;\n          if (!(typeof window === n || !b)) {\n            try {\n              T = window.localStorage[b];\n            } catch {\n            }\n            if (typeof T === n)\n              try {\n                var _ = window.document.cookie, ee = encodeURIComponent(b), Q = _.indexOf(ee + \"=\");\n                Q !== -1 && (T = /^([^;]+)/.exec(\n                  _.slice(Q + ee.length + 1)\n                )[1]);\n              } catch {\n              }\n            return h.levels[T] === void 0 && (T = void 0), T;\n          }\n        }\n        function $() {\n          if (!(typeof window === n || !b)) {\n            try {\n              window.localStorage.removeItem(b);\n            } catch {\n            }\n            try {\n              window.document.cookie = encodeURIComponent(b) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n            } catch {\n            }\n          }\n        }\n        function M(T) {\n          var _ = T;\n          if (typeof _ == \"string\" && h.levels[_.toUpperCase()] !== void 0 && (_ = h.levels[_.toUpperCase()]), typeof _ == \"number\" && _ >= 0 && _ <= h.levels.SILENT)\n            return _;\n          throw new TypeError(\"log.setLevel() called with invalid level: \" + T);\n        }\n        h.name = p, h.levels = {\n          TRACE: 0,\n          DEBUG: 1,\n          INFO: 2,\n          WARN: 3,\n          ERROR: 4,\n          SILENT: 5\n        }, h.methodFactory = g || v, h.getLevel = function() {\n          return O ?? E ?? x;\n        }, h.setLevel = function(T, _) {\n          return O = M(T), _ !== !1 && S(O), l.call(h);\n        }, h.setDefaultLevel = function(T) {\n          E = M(T), C() || h.setLevel(T, !1);\n        }, h.resetLevel = function() {\n          O = null, $(), l.call(h);\n        }, h.enableAll = function(T) {\n          h.setLevel(h.levels.TRACE, T);\n        }, h.disableAll = function(T) {\n          h.setLevel(h.levels.SILENT, T);\n        }, h.rebuild = function() {\n          if (s !== h && (x = M(s.getLevel())), l.call(h), s === h)\n            for (var T in o)\n              o[T].rebuild();\n        }, x = M(\n          s ? s.getLevel() : \"WARN\"\n        );\n        var V = C();\n        V != null && (O = M(V)), l.call(h);\n      }\n      s = new d(), s.getLogger = function(g) {\n        if (typeof g != \"symbol\" && typeof g != \"string\" || g === \"\")\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        var h = o[g];\n        return h || (h = o[g] = new d(\n          g,\n          s.methodFactory\n        )), h;\n      };\n      var m = typeof window !== n ? window.log : void 0;\n      return s.noConflict = function() {\n        return typeof window !== n && window.log === s && (window.log = m), s;\n      }, s.getLoggers = function() {\n        return o;\n      }, s.default = s, s;\n    });\n  })(Me)), Me.exports;\n}\nvar qr = Yr();\nconst Kr = /* @__PURE__ */ Hr(qr);\nvar ct = function(e, t) {\n  return ct = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, r) {\n    n.__proto__ = r;\n  } || function(n, r) {\n    for (var i in r) Object.prototype.hasOwnProperty.call(r, i) && (n[i] = r[i]);\n  }, ct(e, t);\n};\nfunction ne(e, t) {\n  if (typeof t != \"function\" && t !== null)\n    throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n  ct(e, t);\n  function n() {\n    this.constructor = e;\n  }\n  e.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());\n}\nfunction Gr(e, t, n, r) {\n  function i(o) {\n    return o instanceof n ? o : new n(function(s) {\n      s(o);\n    });\n  }\n  return new (n || (n = Promise))(function(o, s) {\n    function a(l) {\n      try {\n        u(r.next(l));\n      } catch (f) {\n        s(f);\n      }\n    }\n    function c(l) {\n      try {\n        u(r.throw(l));\n      } catch (f) {\n        s(f);\n      }\n    }\n    function u(l) {\n      l.done ? o(l.value) : i(l.value).then(a, c);\n    }\n    u((r = r.apply(e, t || [])).next());\n  });\n}\nfunction un(e, t) {\n  var n = { label: 0, sent: function() {\n    if (o[0] & 1) throw o[1];\n    return o[1];\n  }, trys: [], ops: [] }, r, i, o, s = Object.create((typeof Iterator == \"function\" ? Iterator : Object).prototype);\n  return s.next = a(0), s.throw = a(1), s.return = a(2), typeof Symbol == \"function\" && (s[Symbol.iterator] = function() {\n    return this;\n  }), s;\n  function a(u) {\n    return function(l) {\n      return c([u, l]);\n    };\n  }\n  function c(u) {\n    if (r) throw new TypeError(\"Generator is already executing.\");\n    for (; s && (s = 0, u[0] && (n = 0)), n; ) try {\n      if (r = 1, i && (o = u[0] & 2 ? i.return : u[0] ? i.throw || ((o = i.return) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o;\n      switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {\n        case 0:\n        case 1:\n          o = u;\n          break;\n        case 4:\n          return n.label++, { value: u[1], done: !1 };\n        case 5:\n          n.label++, i = u[1], u = [0];\n          continue;\n        case 7:\n          u = n.ops.pop(), n.trys.pop();\n          continue;\n        default:\n          if (o = n.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {\n            n = 0;\n            continue;\n          }\n          if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {\n            n.label = u[1];\n            break;\n          }\n          if (u[0] === 6 && n.label < o[1]) {\n            n.label = o[1], o = u;\n            break;\n          }\n          if (o && n.label < o[2]) {\n            n.label = o[2], n.ops.push(u);\n            break;\n          }\n          o[2] && n.ops.pop(), n.trys.pop();\n          continue;\n      }\n      u = t.call(e, n);\n    } catch (l) {\n      u = [6, l], i = 0;\n    } finally {\n      r = o = 0;\n    }\n    if (u[0] & 5) throw u[1];\n    return { value: u[0] ? u[1] : void 0, done: !0 };\n  }\n}\nfunction ge(e) {\n  var t = typeof Symbol == \"function\" && Symbol.iterator, n = t && e[t], r = 0;\n  if (n) return n.call(e);\n  if (e && typeof e.length == \"number\") return {\n    next: function() {\n      return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e };\n    }\n  };\n  throw new TypeError(t ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction de(e, t) {\n  var n = typeof Symbol == \"function\" && e[Symbol.iterator];\n  if (!n) return e;\n  var r = n.call(e), i, o = [], s;\n  try {\n    for (; (t === void 0 || t-- > 0) && !(i = r.next()).done; ) o.push(i.value);\n  } catch (a) {\n    s = { error: a };\n  } finally {\n    try {\n      i && !i.done && (n = r.return) && n.call(r);\n    } finally {\n      if (s) throw s.error;\n    }\n  }\n  return o;\n}\nfunction be(e, t, n) {\n  if (n || arguments.length === 2) for (var r = 0, i = t.length, o; r < i; r++)\n    (o || !(r in t)) && (o || (o = Array.prototype.slice.call(t, 0, r)), o[r] = t[r]);\n  return e.concat(o || Array.prototype.slice.call(t));\n}\nfunction ve(e) {\n  return this instanceof ve ? (this.v = e, this) : new ve(e);\n}\nfunction Qr(e, t, n) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var r = n.apply(e, t || []), i, o = [];\n  return i = Object.create((typeof AsyncIterator == \"function\" ? AsyncIterator : Object).prototype), a(\"next\"), a(\"throw\"), a(\"return\", s), i[Symbol.asyncIterator] = function() {\n    return this;\n  }, i;\n  function s(d) {\n    return function(m) {\n      return Promise.resolve(m).then(d, f);\n    };\n  }\n  function a(d, m) {\n    r[d] && (i[d] = function(p) {\n      return new Promise(function(g, h) {\n        o.push([d, p, g, h]) > 1 || c(d, p);\n      });\n    }, m && (i[d] = m(i[d])));\n  }\n  function c(d, m) {\n    try {\n      u(r[d](m));\n    } catch (p) {\n      v(o[0][3], p);\n    }\n  }\n  function u(d) {\n    d.value instanceof ve ? Promise.resolve(d.value.v).then(l, f) : v(o[0][2], d);\n  }\n  function l(d) {\n    c(\"next\", d);\n  }\n  function f(d) {\n    c(\"throw\", d);\n  }\n  function v(d, m) {\n    d(m), o.shift(), o.length && c(o[0][0], o[0][1]);\n  }\n}\nfunction Jr(e) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var t = e[Symbol.asyncIterator], n;\n  return t ? t.call(e) : (e = typeof ge == \"function\" ? ge(e) : e[Symbol.iterator](), n = {}, r(\"next\"), r(\"throw\"), r(\"return\"), n[Symbol.asyncIterator] = function() {\n    return this;\n  }, n);\n  function r(o) {\n    n[o] = e[o] && function(s) {\n      return new Promise(function(a, c) {\n        s = e[o](s), i(a, c, s.done, s.value);\n      });\n    };\n  }\n  function i(o, s, a, c) {\n    Promise.resolve(c).then(function(u) {\n      o({ value: u, done: a });\n    }, s);\n  }\n}\nfunction P(e) {\n  return typeof e == \"function\";\n}\nfunction mt(e) {\n  var t = function(r) {\n    Error.call(r), r.stack = new Error().stack;\n  }, n = e(t);\n  return n.prototype = Object.create(Error.prototype), n.prototype.constructor = n, n;\n}\nvar tt = mt(function(e) {\n  return function(n) {\n    e(this), this.message = n ? n.length + ` errors occurred during unsubscription:\n` + n.map(function(r, i) {\n      return i + 1 + \") \" + r.toString();\n    }).join(`\n  `) : \"\", this.name = \"UnsubscriptionError\", this.errors = n;\n  };\n});\nfunction Ue(e, t) {\n  if (e) {\n    var n = e.indexOf(t);\n    0 <= n && e.splice(n, 1);\n  }\n}\nvar ke = (function() {\n  function e(t) {\n    this.initialTeardown = t, this.closed = !1, this._parentage = null, this._finalizers = null;\n  }\n  return e.prototype.unsubscribe = function() {\n    var t, n, r, i, o;\n    if (!this.closed) {\n      this.closed = !0;\n      var s = this._parentage;\n      if (s)\n        if (this._parentage = null, Array.isArray(s))\n          try {\n            for (var a = ge(s), c = a.next(); !c.done; c = a.next()) {\n              var u = c.value;\n              u.remove(this);\n            }\n          } catch (p) {\n            t = { error: p };\n          } finally {\n            try {\n              c && !c.done && (n = a.return) && n.call(a);\n            } finally {\n              if (t) throw t.error;\n            }\n          }\n        else\n          s.remove(this);\n      var l = this.initialTeardown;\n      if (P(l))\n        try {\n          l();\n        } catch (p) {\n          o = p instanceof tt ? p.errors : [p];\n        }\n      var f = this._finalizers;\n      if (f) {\n        this._finalizers = null;\n        try {\n          for (var v = ge(f), d = v.next(); !d.done; d = v.next()) {\n            var m = d.value;\n            try {\n              Mt(m);\n            } catch (p) {\n              o = o ?? [], p instanceof tt ? o = be(be([], de(o)), de(p.errors)) : o.push(p);\n            }\n          }\n        } catch (p) {\n          r = { error: p };\n        } finally {\n          try {\n            d && !d.done && (i = v.return) && i.call(v);\n          } finally {\n            if (r) throw r.error;\n          }\n        }\n      }\n      if (o)\n        throw new tt(o);\n    }\n  }, e.prototype.add = function(t) {\n    var n;\n    if (t && t !== this)\n      if (this.closed)\n        Mt(t);\n      else {\n        if (t instanceof e) {\n          if (t.closed || t._hasParent(this))\n            return;\n          t._addParent(this);\n        }\n        (this._finalizers = (n = this._finalizers) !== null && n !== void 0 ? n : []).push(t);\n      }\n  }, e.prototype._hasParent = function(t) {\n    var n = this._parentage;\n    return n === t || Array.isArray(n) && n.includes(t);\n  }, e.prototype._addParent = function(t) {\n    var n = this._parentage;\n    this._parentage = Array.isArray(n) ? (n.push(t), n) : n ? [n, t] : t;\n  }, e.prototype._removeParent = function(t) {\n    var n = this._parentage;\n    n === t ? this._parentage = null : Array.isArray(n) && Ue(n, t);\n  }, e.prototype.remove = function(t) {\n    var n = this._finalizers;\n    n && Ue(n, t), t instanceof e && t._removeParent(this);\n  }, e.EMPTY = (function() {\n    var t = new e();\n    return t.closed = !0, t;\n  })(), e;\n})(), ln = ke.EMPTY;\nfunction fn(e) {\n  return e instanceof ke || e && \"closed\" in e && P(e.remove) && P(e.add) && P(e.unsubscribe);\n}\nfunction Mt(e) {\n  P(e) ? e() : e.unsubscribe();\n}\nvar Xr = {\n  Promise: void 0\n}, Zr = {\n  setTimeout: function(e, t) {\n    for (var n = [], r = 2; r < arguments.length; r++)\n      n[r - 2] = arguments[r];\n    return setTimeout.apply(void 0, be([e, t], de(n)));\n  },\n  clearTimeout: function(e) {\n    return clearTimeout(e);\n  },\n  delegate: void 0\n};\nfunction dn(e) {\n  Zr.setTimeout(function() {\n    throw e;\n  });\n}\nfunction We() {\n}\nfunction Re(e) {\n  e();\n}\nvar gt = (function(e) {\n  ne(t, e);\n  function t(n) {\n    var r = e.call(this) || this;\n    return r.isStopped = !1, n ? (r.destination = n, fn(n) && n.add(r)) : r.destination = ni, r;\n  }\n  return t.create = function(n, r, i) {\n    return new Pe(n, r, i);\n  }, t.prototype.next = function(n) {\n    this.isStopped || this._next(n);\n  }, t.prototype.error = function(n) {\n    this.isStopped || (this.isStopped = !0, this._error(n));\n  }, t.prototype.complete = function() {\n    this.isStopped || (this.isStopped = !0, this._complete());\n  }, t.prototype.unsubscribe = function() {\n    this.closed || (this.isStopped = !0, e.prototype.unsubscribe.call(this), this.destination = null);\n  }, t.prototype._next = function(n) {\n    this.destination.next(n);\n  }, t.prototype._error = function(n) {\n    try {\n      this.destination.error(n);\n    } finally {\n      this.unsubscribe();\n    }\n  }, t.prototype._complete = function() {\n    try {\n      this.destination.complete();\n    } finally {\n      this.unsubscribe();\n    }\n  }, t;\n})(ke), ei = (function() {\n  function e(t) {\n    this.partialObserver = t;\n  }\n  return e.prototype.next = function(t) {\n    var n = this.partialObserver;\n    if (n.next)\n      try {\n        n.next(t);\n      } catch (r) {\n        Le(r);\n      }\n  }, e.prototype.error = function(t) {\n    var n = this.partialObserver;\n    if (n.error)\n      try {\n        n.error(t);\n      } catch (r) {\n        Le(r);\n      }\n    else\n      Le(t);\n  }, e.prototype.complete = function() {\n    var t = this.partialObserver;\n    if (t.complete)\n      try {\n        t.complete();\n      } catch (n) {\n        Le(n);\n      }\n  }, e;\n})(), Pe = (function(e) {\n  ne(t, e);\n  function t(n, r, i) {\n    var o = e.call(this) || this, s;\n    return P(n) || !n ? s = {\n      next: n ?? void 0,\n      error: r ?? void 0,\n      complete: i ?? void 0\n    } : s = n, o.destination = new ei(s), o;\n  }\n  return t;\n})(gt);\nfunction Le(e) {\n  dn(e);\n}\nfunction ti(e) {\n  throw e;\n}\nvar ni = {\n  closed: !0,\n  next: We,\n  error: ti,\n  complete: We\n}, bt = (function() {\n  return typeof Symbol == \"function\" && Symbol.observable || \"@@observable\";\n})();\nfunction Qe(e) {\n  return e;\n}\nfunction ri(e) {\n  return e.length === 0 ? Qe : e.length === 1 ? e[0] : function(n) {\n    return e.reduce(function(r, i) {\n      return i(r);\n    }, n);\n  };\n}\nvar k = (function() {\n  function e(t) {\n    t && (this._subscribe = t);\n  }\n  return e.prototype.lift = function(t) {\n    var n = new e();\n    return n.source = this, n.operator = t, n;\n  }, e.prototype.subscribe = function(t, n, r) {\n    var i = this, o = oi(t) ? t : new Pe(t, n, r);\n    return Re(function() {\n      var s = i, a = s.operator, c = s.source;\n      o.add(a ? a.call(o, c) : c ? i._subscribe(o) : i._trySubscribe(o));\n    }), o;\n  }, e.prototype._trySubscribe = function(t) {\n    try {\n      return this._subscribe(t);\n    } catch (n) {\n      t.error(n);\n    }\n  }, e.prototype.forEach = function(t, n) {\n    var r = this;\n    return n = Rt(n), new n(function(i, o) {\n      var s = new Pe({\n        next: function(a) {\n          try {\n            t(a);\n          } catch (c) {\n            o(c), s.unsubscribe();\n          }\n        },\n        error: o,\n        complete: i\n      });\n      r.subscribe(s);\n    });\n  }, e.prototype._subscribe = function(t) {\n    var n;\n    return (n = this.source) === null || n === void 0 ? void 0 : n.subscribe(t);\n  }, e.prototype[bt] = function() {\n    return this;\n  }, e.prototype.pipe = function() {\n    for (var t = [], n = 0; n < arguments.length; n++)\n      t[n] = arguments[n];\n    return ri(t)(this);\n  }, e.prototype.toPromise = function(t) {\n    var n = this;\n    return t = Rt(t), new t(function(r, i) {\n      var o;\n      n.subscribe(function(s) {\n        return o = s;\n      }, function(s) {\n        return i(s);\n      }, function() {\n        return r(o);\n      });\n    });\n  }, e.create = function(t) {\n    return new e(t);\n  }, e;\n})();\nfunction Rt(e) {\n  var t;\n  return (t = e ?? Xr.Promise) !== null && t !== void 0 ? t : Promise;\n}\nfunction ii(e) {\n  return e && P(e.next) && P(e.error) && P(e.complete);\n}\nfunction oi(e) {\n  return e && e instanceof gt || ii(e) && fn(e);\n}\nfunction si(e) {\n  return P(e == null ? void 0 : e.lift);\n}\nfunction W(e) {\n  return function(t) {\n    if (si(t))\n      return t.lift(function(n) {\n        try {\n          return e(n, this);\n        } catch (r) {\n          this.error(r);\n        }\n      });\n    throw new TypeError(\"Unable to lift unknown Observable type\");\n  };\n}\nfunction F(e, t, n, r, i) {\n  return new ai(e, t, n, r, i);\n}\nvar ai = (function(e) {\n  ne(t, e);\n  function t(n, r, i, o, s, a) {\n    var c = e.call(this, n) || this;\n    return c.onFinalize = s, c.shouldUnsubscribe = a, c._next = r ? function(u) {\n      try {\n        r(u);\n      } catch (l) {\n        n.error(l);\n      }\n    } : e.prototype._next, c._error = o ? function(u) {\n      try {\n        o(u);\n      } catch (l) {\n        n.error(l);\n      } finally {\n        this.unsubscribe();\n      }\n    } : e.prototype._error, c._complete = i ? function() {\n      try {\n        i();\n      } catch (u) {\n        n.error(u);\n      } finally {\n        this.unsubscribe();\n      }\n    } : e.prototype._complete, c;\n  }\n  return t.prototype.unsubscribe = function() {\n    var n;\n    if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n      var r = this.closed;\n      e.prototype.unsubscribe.call(this), !r && ((n = this.onFinalize) === null || n === void 0 || n.call(this));\n    }\n  }, t;\n})(gt), ci = mt(function(e) {\n  return function() {\n    e(this), this.name = \"ObjectUnsubscribedError\", this.message = \"object unsubscribed\";\n  };\n}), te = (function(e) {\n  ne(t, e);\n  function t() {\n    var n = e.call(this) || this;\n    return n.closed = !1, n.currentObservers = null, n.observers = [], n.isStopped = !1, n.hasError = !1, n.thrownError = null, n;\n  }\n  return t.prototype.lift = function(n) {\n    var r = new Dt(this, this);\n    return r.operator = n, r;\n  }, t.prototype._throwIfClosed = function() {\n    if (this.closed)\n      throw new ci();\n  }, t.prototype.next = function(n) {\n    var r = this;\n    Re(function() {\n      var i, o;\n      if (r._throwIfClosed(), !r.isStopped) {\n        r.currentObservers || (r.currentObservers = Array.from(r.observers));\n        try {\n          for (var s = ge(r.currentObservers), a = s.next(); !a.done; a = s.next()) {\n            var c = a.value;\n            c.next(n);\n          }\n        } catch (u) {\n          i = { error: u };\n        } finally {\n          try {\n            a && !a.done && (o = s.return) && o.call(s);\n          } finally {\n            if (i) throw i.error;\n          }\n        }\n      }\n    });\n  }, t.prototype.error = function(n) {\n    var r = this;\n    Re(function() {\n      if (r._throwIfClosed(), !r.isStopped) {\n        r.hasError = r.isStopped = !0, r.thrownError = n;\n        for (var i = r.observers; i.length; )\n          i.shift().error(n);\n      }\n    });\n  }, t.prototype.complete = function() {\n    var n = this;\n    Re(function() {\n      if (n._throwIfClosed(), !n.isStopped) {\n        n.isStopped = !0;\n        for (var r = n.observers; r.length; )\n          r.shift().complete();\n      }\n    });\n  }, t.prototype.unsubscribe = function() {\n    this.isStopped = this.closed = !0, this.observers = this.currentObservers = null;\n  }, Object.defineProperty(t.prototype, \"observed\", {\n    get: function() {\n      var n;\n      return ((n = this.observers) === null || n === void 0 ? void 0 : n.length) > 0;\n    },\n    enumerable: !1,\n    configurable: !0\n  }), t.prototype._trySubscribe = function(n) {\n    return this._throwIfClosed(), e.prototype._trySubscribe.call(this, n);\n  }, t.prototype._subscribe = function(n) {\n    return this._throwIfClosed(), this._checkFinalizedStatuses(n), this._innerSubscribe(n);\n  }, t.prototype._innerSubscribe = function(n) {\n    var r = this, i = this, o = i.hasError, s = i.isStopped, a = i.observers;\n    return o || s ? ln : (this.currentObservers = null, a.push(n), new ke(function() {\n      r.currentObservers = null, Ue(a, n);\n    }));\n  }, t.prototype._checkFinalizedStatuses = function(n) {\n    var r = this, i = r.hasError, o = r.thrownError, s = r.isStopped;\n    i ? n.error(o) : s && n.complete();\n  }, t.prototype.asObservable = function() {\n    var n = new k();\n    return n.source = this, n;\n  }, t.create = function(n, r) {\n    return new Dt(n, r);\n  }, t;\n})(k), Dt = (function(e) {\n  ne(t, e);\n  function t(n, r) {\n    var i = e.call(this) || this;\n    return i.destination = n, i.source = r, i;\n  }\n  return t.prototype.next = function(n) {\n    var r, i;\n    (i = (r = this.destination) === null || r === void 0 ? void 0 : r.next) === null || i === void 0 || i.call(r, n);\n  }, t.prototype.error = function(n) {\n    var r, i;\n    (i = (r = this.destination) === null || r === void 0 ? void 0 : r.error) === null || i === void 0 || i.call(r, n);\n  }, t.prototype.complete = function() {\n    var n, r;\n    (r = (n = this.destination) === null || n === void 0 ? void 0 : n.complete) === null || r === void 0 || r.call(n);\n  }, t.prototype._subscribe = function(n) {\n    var r, i;\n    return (i = (r = this.source) === null || r === void 0 ? void 0 : r.subscribe(n)) !== null && i !== void 0 ? i : ln;\n  }, t;\n})(te), pn = (function(e) {\n  ne(t, e);\n  function t(n) {\n    var r = e.call(this) || this;\n    return r._value = n, r;\n  }\n  return Object.defineProperty(t.prototype, \"value\", {\n    get: function() {\n      return this.getValue();\n    },\n    enumerable: !1,\n    configurable: !0\n  }), t.prototype._subscribe = function(n) {\n    var r = e.prototype._subscribe.call(this, n);\n    return !r.closed && n.next(this._value), r;\n  }, t.prototype.getValue = function() {\n    var n = this, r = n.hasError, i = n.thrownError, o = n._value;\n    if (r)\n      throw i;\n    return this._throwIfClosed(), o;\n  }, t.prototype.next = function(n) {\n    e.prototype.next.call(this, this._value = n);\n  }, t;\n})(te), ui = {\n  now: function() {\n    return Date.now();\n  }\n}, li = (function(e) {\n  ne(t, e);\n  function t(n, r) {\n    return e.call(this) || this;\n  }\n  return t.prototype.schedule = function(n, r) {\n    return this;\n  }, t;\n})(ke), $t = {\n  setInterval: function(e, t) {\n    for (var n = [], r = 2; r < arguments.length; r++)\n      n[r - 2] = arguments[r];\n    return setInterval.apply(void 0, be([e, t], de(n)));\n  },\n  clearInterval: function(e) {\n    return clearInterval(e);\n  },\n  delegate: void 0\n}, fi = (function(e) {\n  ne(t, e);\n  function t(n, r) {\n    var i = e.call(this, n, r) || this;\n    return i.scheduler = n, i.work = r, i.pending = !1, i;\n  }\n  return t.prototype.schedule = function(n, r) {\n    var i;\n    if (r === void 0 && (r = 0), this.closed)\n      return this;\n    this.state = n;\n    var o = this.id, s = this.scheduler;\n    return o != null && (this.id = this.recycleAsyncId(s, o, r)), this.pending = !0, this.delay = r, this.id = (i = this.id) !== null && i !== void 0 ? i : this.requestAsyncId(s, this.id, r), this;\n  }, t.prototype.requestAsyncId = function(n, r, i) {\n    return i === void 0 && (i = 0), $t.setInterval(n.flush.bind(n, this), i);\n  }, t.prototype.recycleAsyncId = function(n, r, i) {\n    if (i === void 0 && (i = 0), i != null && this.delay === i && this.pending === !1)\n      return r;\n    r != null && $t.clearInterval(r);\n  }, t.prototype.execute = function(n, r) {\n    if (this.closed)\n      return new Error(\"executing a cancelled action\");\n    this.pending = !1;\n    var i = this._execute(n, r);\n    if (i)\n      return i;\n    this.pending === !1 && this.id != null && (this.id = this.recycleAsyncId(this.scheduler, this.id, null));\n  }, t.prototype._execute = function(n, r) {\n    var i = !1, o;\n    try {\n      this.work(n);\n    } catch (s) {\n      i = !0, o = s || new Error(\"Scheduled action threw falsy error\");\n    }\n    if (i)\n      return this.unsubscribe(), o;\n  }, t.prototype.unsubscribe = function() {\n    if (!this.closed) {\n      var n = this, r = n.id, i = n.scheduler, o = i.actions;\n      this.work = this.state = this.scheduler = null, this.pending = !1, Ue(o, this), r != null && (this.id = this.recycleAsyncId(i, r, null)), this.delay = null, e.prototype.unsubscribe.call(this);\n    }\n  }, t;\n})(li), Nt = (function() {\n  function e(t, n) {\n    n === void 0 && (n = e.now), this.schedulerActionCtor = t, this.now = n;\n  }\n  return e.prototype.schedule = function(t, n, r) {\n    return n === void 0 && (n = 0), new this.schedulerActionCtor(this, t).schedule(r, n);\n  }, e.now = ui.now, e;\n})(), di = (function(e) {\n  ne(t, e);\n  function t(n, r) {\n    r === void 0 && (r = Nt.now);\n    var i = e.call(this, n, r) || this;\n    return i.actions = [], i._active = !1, i;\n  }\n  return t.prototype.flush = function(n) {\n    var r = this.actions;\n    if (this._active) {\n      r.push(n);\n      return;\n    }\n    var i;\n    this._active = !0;\n    do\n      if (i = n.execute(n.state, n.delay))\n        break;\n    while (n = r.shift());\n    if (this._active = !1, i) {\n      for (; n = r.shift(); )\n        n.unsubscribe();\n      throw i;\n    }\n  }, t;\n})(Nt), pi = new di(fi);\nfunction hi(e) {\n  return e && P(e.schedule);\n}\nfunction vi(e) {\n  return e[e.length - 1];\n}\nfunction yt(e) {\n  return hi(vi(e)) ? e.pop() : void 0;\n}\nvar wt = (function(e) {\n  return e && typeof e.length == \"number\" && typeof e != \"function\";\n});\nfunction hn(e) {\n  return P(e == null ? void 0 : e.then);\n}\nfunction vn(e) {\n  return P(e[bt]);\n}\nfunction mn(e) {\n  return Symbol.asyncIterator && P(e == null ? void 0 : e[Symbol.asyncIterator]);\n}\nfunction gn(e) {\n  return new TypeError(\"You provided \" + (e !== null && typeof e == \"object\" ? \"an invalid object\" : \"'\" + e + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\nfunction mi() {\n  return typeof Symbol != \"function\" || !Symbol.iterator ? \"@@iterator\" : Symbol.iterator;\n}\nvar bn = mi();\nfunction yn(e) {\n  return P(e == null ? void 0 : e[bn]);\n}\nfunction wn(e) {\n  return Qr(this, arguments, function() {\n    var n, r, i, o;\n    return un(this, function(s) {\n      switch (s.label) {\n        case 0:\n          n = e.getReader(), s.label = 1;\n        case 1:\n          s.trys.push([1, , 9, 10]), s.label = 2;\n        case 2:\n          return [4, ve(n.read())];\n        case 3:\n          return r = s.sent(), i = r.value, o = r.done, o ? [4, ve(void 0)] : [3, 5];\n        case 4:\n          return [2, s.sent()];\n        case 5:\n          return [4, ve(i)];\n        case 6:\n          return [4, s.sent()];\n        case 7:\n          return s.sent(), [3, 2];\n        case 8:\n          return [3, 10];\n        case 9:\n          return n.releaseLock(), [7];\n        case 10:\n          return [2];\n      }\n    });\n  });\n}\nfunction xn(e) {\n  return P(e == null ? void 0 : e.getReader);\n}\nfunction z(e) {\n  if (e instanceof k)\n    return e;\n  if (e != null) {\n    if (vn(e))\n      return gi(e);\n    if (wt(e))\n      return bi(e);\n    if (hn(e))\n      return yi(e);\n    if (mn(e))\n      return Sn(e);\n    if (yn(e))\n      return wi(e);\n    if (xn(e))\n      return xi(e);\n  }\n  throw gn(e);\n}\nfunction gi(e) {\n  return new k(function(t) {\n    var n = e[bt]();\n    if (P(n.subscribe))\n      return n.subscribe(t);\n    throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");\n  });\n}\nfunction bi(e) {\n  return new k(function(t) {\n    for (var n = 0; n < e.length && !t.closed; n++)\n      t.next(e[n]);\n    t.complete();\n  });\n}\nfunction yi(e) {\n  return new k(function(t) {\n    e.then(function(n) {\n      t.closed || (t.next(n), t.complete());\n    }, function(n) {\n      return t.error(n);\n    }).then(null, dn);\n  });\n}\nfunction wi(e) {\n  return new k(function(t) {\n    var n, r;\n    try {\n      for (var i = ge(e), o = i.next(); !o.done; o = i.next()) {\n        var s = o.value;\n        if (t.next(s), t.closed)\n          return;\n      }\n    } catch (a) {\n      n = { error: a };\n    } finally {\n      try {\n        o && !o.done && (r = i.return) && r.call(i);\n      } finally {\n        if (n) throw n.error;\n      }\n    }\n    t.complete();\n  });\n}\nfunction Sn(e) {\n  return new k(function(t) {\n    Si(e, t).catch(function(n) {\n      return t.error(n);\n    });\n  });\n}\nfunction xi(e) {\n  return Sn(wn(e));\n}\nfunction Si(e, t) {\n  var n, r, i, o;\n  return Gr(this, void 0, void 0, function() {\n    var s, a;\n    return un(this, function(c) {\n      switch (c.label) {\n        case 0:\n          c.trys.push([0, 5, 6, 11]), n = Jr(e), c.label = 1;\n        case 1:\n          return [4, n.next()];\n        case 2:\n          if (r = c.sent(), !!r.done) return [3, 4];\n          if (s = r.value, t.next(s), t.closed)\n            return [2];\n          c.label = 3;\n        case 3:\n          return [3, 1];\n        case 4:\n          return [3, 11];\n        case 5:\n          return a = c.sent(), i = { error: a }, [3, 11];\n        case 6:\n          return c.trys.push([6, , 9, 10]), r && !r.done && (o = n.return) ? [4, o.call(n)] : [3, 8];\n        case 7:\n          c.sent(), c.label = 8;\n        case 8:\n          return [3, 10];\n        case 9:\n          if (i) throw i.error;\n          return [7];\n        case 10:\n          return [7];\n        case 11:\n          return t.complete(), [2];\n      }\n    });\n  });\n}\nfunction oe(e, t, n, r, i) {\n  r === void 0 && (r = 0), i === void 0 && (i = !1);\n  var o = t.schedule(function() {\n    n(), i ? e.add(this.schedule(null, r)) : this.unsubscribe();\n  }, r);\n  if (e.add(o), !i)\n    return o;\n}\nfunction Tn(e, t) {\n  return t === void 0 && (t = 0), W(function(n, r) {\n    n.subscribe(F(r, function(i) {\n      return oe(r, e, function() {\n        return r.next(i);\n      }, t);\n    }, function() {\n      return oe(r, e, function() {\n        return r.complete();\n      }, t);\n    }, function(i) {\n      return oe(r, e, function() {\n        return r.error(i);\n      }, t);\n    }));\n  });\n}\nfunction En(e, t) {\n  return t === void 0 && (t = 0), W(function(n, r) {\n    r.add(e.schedule(function() {\n      return n.subscribe(r);\n    }, t));\n  });\n}\nfunction Ti(e, t) {\n  return z(e).pipe(En(t), Tn(t));\n}\nfunction Ei(e, t) {\n  return z(e).pipe(En(t), Tn(t));\n}\nfunction Ci(e, t) {\n  return new k(function(n) {\n    var r = 0;\n    return t.schedule(function() {\n      r === e.length ? n.complete() : (n.next(e[r++]), n.closed || this.schedule());\n    });\n  });\n}\nfunction Pi(e, t) {\n  return new k(function(n) {\n    var r;\n    return oe(n, t, function() {\n      r = e[bn](), oe(n, t, function() {\n        var i, o, s;\n        try {\n          i = r.next(), o = i.value, s = i.done;\n        } catch (a) {\n          n.error(a);\n          return;\n        }\n        s ? n.complete() : n.next(o);\n      }, 0, !0);\n    }), function() {\n      return P(r == null ? void 0 : r.return) && r.return();\n    };\n  });\n}\nfunction Cn(e, t) {\n  if (!e)\n    throw new Error(\"Iterable cannot be null\");\n  return new k(function(n) {\n    oe(n, t, function() {\n      var r = e[Symbol.asyncIterator]();\n      oe(n, t, function() {\n        r.next().then(function(i) {\n          i.done ? n.complete() : n.next(i.value);\n        });\n      }, 0, !0);\n    });\n  });\n}\nfunction Oi(e, t) {\n  return Cn(wn(e), t);\n}\nfunction Ai(e, t) {\n  if (e != null) {\n    if (vn(e))\n      return Ti(e, t);\n    if (wt(e))\n      return Ci(e, t);\n    if (hn(e))\n      return Ei(e, t);\n    if (mn(e))\n      return Cn(e, t);\n    if (yn(e))\n      return Pi(e, t);\n    if (xn(e))\n      return Oi(e, t);\n  }\n  throw gn(e);\n}\nfunction Je(e, t) {\n  return t ? Ai(e, t) : z(e);\n}\nfunction Ft() {\n  for (var e = [], t = 0; t < arguments.length; t++)\n    e[t] = arguments[t];\n  var n = yt(e);\n  return Je(e, n);\n}\nfunction ki(e) {\n  return e instanceof Date && !isNaN(e);\n}\nvar _i = mt(function(e) {\n  return function(n) {\n    n === void 0 && (n = null), e(this), this.message = \"Timeout has occurred\", this.name = \"TimeoutError\", this.info = n;\n  };\n});\nfunction Li(e, t) {\n  var n = ki(e) ? { first: e } : typeof e == \"number\" ? { each: e } : e, r = n.first, i = n.each, o = n.with, s = o === void 0 ? Ii : o, a = n.scheduler, c = a === void 0 ? pi : a, u = n.meta, l = u === void 0 ? null : u;\n  if (r == null && i == null)\n    throw new TypeError(\"No timeout provided.\");\n  return W(function(f, v) {\n    var d, m, p = null, g = 0, h = function(x) {\n      m = oe(v, c, function() {\n        try {\n          d.unsubscribe(), z(s({\n            meta: l,\n            lastValue: p,\n            seen: g\n          })).subscribe(v);\n        } catch (E) {\n          v.error(E);\n        }\n      }, x);\n    };\n    d = f.subscribe(F(v, function(x) {\n      m == null || m.unsubscribe(), g++, v.next(p = x), i > 0 && h(i);\n    }, void 0, void 0, function() {\n      m != null && m.closed || m == null || m.unsubscribe(), p = null;\n    })), !g && h(r != null ? typeof r == \"number\" ? r : +r - c.now() : i);\n  });\n}\nfunction Ii(e) {\n  throw new _i(e);\n}\nfunction A(e, t) {\n  return W(function(n, r) {\n    var i = 0;\n    n.subscribe(F(r, function(o) {\n      r.next(e.call(t, o, i++));\n    }));\n  });\n}\nvar Mi = Array.isArray;\nfunction Ri(e, t) {\n  return Mi(t) ? e.apply(void 0, be([], de(t))) : e(t);\n}\nfunction Di(e) {\n  return A(function(t) {\n    return Ri(e, t);\n  });\n}\nfunction $i(e, t, n, r, i, o, s, a) {\n  var c = [], u = 0, l = 0, f = !1, v = function() {\n    f && !c.length && !u && t.complete();\n  }, d = function(p) {\n    return u < r ? m(p) : c.push(p);\n  }, m = function(p) {\n    u++;\n    var g = !1;\n    z(n(p, l++)).subscribe(F(t, function(h) {\n      t.next(h);\n    }, function() {\n      g = !0;\n    }, void 0, function() {\n      if (g)\n        try {\n          u--;\n          for (var h = function() {\n            var x = c.shift();\n            s || m(x);\n          }; c.length && u < r; )\n            h();\n          v();\n        } catch (x) {\n          t.error(x);\n        }\n    }));\n  };\n  return e.subscribe(F(t, d, function() {\n    f = !0, v();\n  })), function() {\n  };\n}\nfunction xt(e, t, n) {\n  return n === void 0 && (n = 1 / 0), P(t) ? xt(function(r, i) {\n    return A(function(o, s) {\n      return t(r, o, i, s);\n    })(z(e(r, i)));\n  }, n) : (typeof t == \"number\" && (n = t), W(function(r, i) {\n    return $i(r, i, e, n);\n  }));\n}\nfunction Ni(e) {\n  return xt(Qe, e);\n}\nfunction Fi() {\n  return Ni(1);\n}\nfunction je() {\n  for (var e = [], t = 0; t < arguments.length; t++)\n    e[t] = arguments[t];\n  return Fi()(Je(e, yt(e)));\n}\nvar Ui = [\"addListener\", \"removeListener\"], Wi = [\"addEventListener\", \"removeEventListener\"], ji = [\"on\", \"off\"];\nfunction ut(e, t, n, r) {\n  if (P(n) && (r = n, n = void 0), r)\n    return ut(e, t, n).pipe(Di(r));\n  var i = de(Hi(e) ? Wi.map(function(a) {\n    return function(c) {\n      return e[a](t, c, n);\n    };\n  }) : Bi(e) ? Ui.map(Ut(e, t)) : Vi(e) ? ji.map(Ut(e, t)) : [], 2), o = i[0], s = i[1];\n  if (!o && wt(e))\n    return xt(function(a) {\n      return ut(a, t, n);\n    })(z(e));\n  if (!o)\n    throw new TypeError(\"Invalid event target\");\n  return new k(function(a) {\n    var c = function() {\n      for (var u = [], l = 0; l < arguments.length; l++)\n        u[l] = arguments[l];\n      return a.next(1 < u.length ? u : u[0]);\n    };\n    return o(c), function() {\n      return s(c);\n    };\n  });\n}\nfunction Ut(e, t) {\n  return function(n) {\n    return function(r) {\n      return e[n](t, r);\n    };\n  };\n}\nfunction Bi(e) {\n  return P(e.addListener) && P(e.removeListener);\n}\nfunction Vi(e) {\n  return P(e.on) && P(e.off);\n}\nfunction Hi(e) {\n  return P(e.addEventListener) && P(e.removeEventListener);\n}\nfunction Xe(e, t) {\n  return W(function(n, r) {\n    var i = 0;\n    n.subscribe(F(r, function(o) {\n      return e.call(t, o, i++) && r.next(o);\n    }));\n  });\n}\nfunction zi(e, t, n, r, i) {\n  return function(o, s) {\n    var a = n, c = t, u = 0;\n    o.subscribe(F(s, function(l) {\n      var f = u++;\n      c = a ? e(c, l, f) : (a = !0, l), s.next(c);\n    }, i));\n  };\n}\nfunction Yi(e, t) {\n  return t === void 0 && (t = Qe), e = e ?? qi, W(function(n, r) {\n    var i, o = !0;\n    n.subscribe(F(r, function(s) {\n      var a = t(s);\n      (o || !e(i, a)) && (o = !1, i = a, r.next(s));\n    }));\n  });\n}\nfunction qi(e, t) {\n  return e === t;\n}\nfunction lt(e, t) {\n  return W(zi(e, t, arguments.length >= 2, !0));\n}\nfunction Ki(e) {\n  e === void 0 && (e = {});\n  var t = e.connector, n = t === void 0 ? function() {\n    return new te();\n  } : t, r = e.resetOnError, i = r === void 0 ? !0 : r, o = e.resetOnComplete, s = o === void 0 ? !0 : o, a = e.resetOnRefCountZero, c = a === void 0 ? !0 : a;\n  return function(u) {\n    var l, f, v, d = 0, m = !1, p = !1, g = function() {\n      f == null || f.unsubscribe(), f = void 0;\n    }, h = function() {\n      g(), l = v = void 0, m = p = !1;\n    }, x = function() {\n      var E = l;\n      h(), E == null || E.unsubscribe();\n    };\n    return W(function(E, O) {\n      d++, !p && !m && g();\n      var b = v = v ?? n();\n      O.add(function() {\n        d--, d === 0 && !p && !m && (f = nt(x, c));\n      }), b.subscribe(O), !l && d > 0 && (l = new Pe({\n        next: function(S) {\n          return b.next(S);\n        },\n        error: function(S) {\n          p = !0, g(), f = nt(h, i, S), b.error(S);\n        },\n        complete: function() {\n          m = !0, g(), f = nt(h, s), b.complete();\n        }\n      }), z(E).subscribe(l));\n    })(u);\n  };\n}\nfunction nt(e, t) {\n  for (var n = [], r = 2; r < arguments.length; r++)\n    n[r - 2] = arguments[r];\n  if (t === !0) {\n    e();\n    return;\n  }\n  if (t !== !1) {\n    var i = new Pe({\n      next: function() {\n        i.unsubscribe(), e();\n      }\n    });\n    return z(t.apply(void 0, be([], de(n)))).subscribe(i);\n  }\n}\nfunction Gi(e) {\n  return W(function(t, n) {\n    var r = !1, i = F(n, function() {\n      i == null || i.unsubscribe(), r = !0;\n    }, We);\n    z(e).subscribe(i), t.subscribe(F(n, function(o) {\n      return r && n.next(o);\n    }));\n  });\n}\nfunction D() {\n  for (var e = [], t = 0; t < arguments.length; t++)\n    e[t] = arguments[t];\n  var n = yt(e);\n  return W(function(r, i) {\n    (n ? je(e, r, n) : je(e, r)).subscribe(i);\n  });\n}\nfunction Pn(e, t) {\n  return W(function(n, r) {\n    var i = null, o = 0, s = !1, a = function() {\n      return s && !i && r.complete();\n    };\n    n.subscribe(F(r, function(c) {\n      i == null || i.unsubscribe();\n      var u = 0, l = o++;\n      z(e(c, l)).subscribe(i = F(r, function(f) {\n        return r.next(t ? t(c, f, l, u++) : f);\n      }, function() {\n        i = null, a();\n      }));\n    }, function() {\n      s = !0, a();\n    }));\n  });\n}\nfunction Wt(e) {\n  return W(function(t, n) {\n    z(e).subscribe(F(n, function() {\n      return n.complete();\n    }, We)), !n.closed && t.subscribe(n);\n  });\n}\nfunction Qi(e, t, n) {\n  var r = P(e) || t || n ? { next: e, error: t, complete: n } : e;\n  return r ? W(function(i, o) {\n    var s;\n    (s = r.subscribe) === null || s === void 0 || s.call(r);\n    var a = !0;\n    i.subscribe(F(o, function(c) {\n      var u;\n      (u = r.next) === null || u === void 0 || u.call(r, c), o.next(c);\n    }, function() {\n      var c;\n      a = !1, (c = r.complete) === null || c === void 0 || c.call(r), o.complete();\n    }, function(c) {\n      var u;\n      a = !1, (u = r.error) === null || u === void 0 || u.call(r, c), o.error(c);\n    }, function() {\n      var c, u;\n      a && ((c = r.unsubscribe) === null || c === void 0 || c.call(r)), (u = r.finalize) === null || u === void 0 || u.call(r);\n    }));\n  }) : Qe;\n}\nvar Ji = Object.defineProperty, Xi = Object.defineProperties, Zi = Object.getOwnPropertyDescriptors, jt = Object.getOwnPropertySymbols, eo = Object.prototype.hasOwnProperty, to = Object.prototype.propertyIsEnumerable, Bt = (e, t, n) => t in e ? Ji(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, q = (e, t) => {\n  for (var n in t || (t = {}))\n    eo.call(t, n) && Bt(e, n, t[n]);\n  if (jt)\n    for (var n of jt(t))\n      to.call(t, n) && Bt(e, n, t[n]);\n  return e;\n}, ce = (e, t) => Xi(e, Zi(t)), H = (e, t, n) => new Promise((r, i) => {\n  var o = (c) => {\n    try {\n      a(n.next(c));\n    } catch (u) {\n      i(u);\n    }\n  }, s = (c) => {\n    try {\n      a(n.throw(c));\n    } catch (u) {\n      i(u);\n    }\n  }, a = (c) => c.done ? r(c.value) : Promise.resolve(c.value).then(o, s);\n  a((n = n.apply(e, t)).next());\n}), On = \"lk\";\nfunction B(e) {\n  return typeof e > \"u\" ? !1 : no(e) || ro(e);\n}\nfunction no(e) {\n  var t;\n  return e ? e.hasOwnProperty(\"participant\") && e.hasOwnProperty(\"source\") && e.hasOwnProperty(\"track\") && typeof ((t = e.publication) == null ? void 0 : t.track) < \"u\" : !1;\n}\nfunction ro(e) {\n  return e ? e.hasOwnProperty(\"participant\") && e.hasOwnProperty(\"source\") && e.hasOwnProperty(\"publication\") && typeof e.publication < \"u\" : !1;\n}\nfunction Oe(e) {\n  return e ? e.hasOwnProperty(\"participant\") && e.hasOwnProperty(\"source\") && typeof e.publication > \"u\" : !1;\n}\nfunction N(e) {\n  if (typeof e == \"string\" || typeof e == \"number\")\n    return `${e}`;\n  if (Oe(e))\n    return `${e.participant.identity}_${e.source}_placeholder`;\n  if (B(e))\n    return `${e.participant.identity}_${e.publication.source}_${e.publication.trackSid}`;\n  throw new Error(`Can't generate a id for the given track reference: ${e}`);\n}\nfunction ts(e, t) {\n  return e === void 0 || t === void 0 ? !1 : B(e) && B(t) ? e.publication.trackSid === t.publication.trackSid : N(e) === N(t);\n}\nfunction ns(e, t) {\n  return typeof t > \"u\" ? !1 : B(e) ? t.some(\n    (n) => n.participant.identity === e.participant.identity && B(n) && n.publication.trackSid === e.publication.trackSid\n  ) : Oe(e) ? t.some(\n    (n) => n.participant.identity === e.participant.identity && Oe(n) && n.source === e.source\n  ) : !1;\n}\nfunction io(e, t) {\n  return Oe(e) && B(t) && t.participant.identity === e.participant.identity && t.source === e.source;\n}\nfunction rs() {\n  const e = document.createElement(\"p\");\n  e.style.width = \"100%\", e.style.height = \"200px\";\n  const t = document.createElement(\"div\");\n  t.style.position = \"absolute\", t.style.top = \"0px\", t.style.left = \"0px\", t.style.visibility = \"hidden\", t.style.width = \"200px\", t.style.height = \"150px\", t.style.overflow = \"hidden\", t.appendChild(e), document.body.appendChild(t);\n  const n = e.offsetWidth;\n  t.style.overflow = \"scroll\";\n  let r = e.offsetWidth;\n  return n === r && (r = t.clientWidth), document.body.removeChild(t), n - r;\n}\nfunction is() {\n  return typeof document < \"u\";\n}\nfunction oo(e) {\n  e = q({}, e);\n  const t = \"(?:(?:[a-z]+:)?//)?\", n = \"(?:\\\\S+(?::\\\\S*)?@)?\", r = new RegExp(\n    \"(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}\",\n    \"g\"\n  ).source, u = `(?:${t}|www\\\\.)${n}(?:localhost|${r}|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\\\\.?)(?::\\\\d{2,5})?(?:[/?#][^\\\\s\"]*)?`;\n  return e.exact ? new RegExp(`(?:^${u}$)`, \"i\") : new RegExp(u, \"ig\");\n}\nvar Vt = \"[^\\\\.\\\\s@:](?:[^\\\\s@:]*[^\\\\s@:\\\\.])?@[^\\\\.\\\\s@]+(?:\\\\.[^\\\\.\\\\s@]+)*\";\nfunction so({ exact: e } = {}) {\n  return e ? new RegExp(`^${Vt}$`) : new RegExp(Vt, \"g\");\n}\nfunction os(e, t, n) {\n  return Ur(e, t, () => H(this, null, function* () {\n    const { x: i, y: o } = yield Vr(e, t, {\n      placement: \"top\",\n      middleware: [Wr(6), Br(), jr({ padding: 5 })]\n    });\n    n == null || n(i, o);\n  }));\n}\nfunction ss(e, t) {\n  return !e.contains(t.target);\n}\nvar as = () => ({\n  email: so(),\n  url: oo({})\n});\nfunction cs(e, t) {\n  const n = Object.entries(t).map(\n    ([o, s], a) => Array.from(e.matchAll(s)).map(({ index: c, 0: u }) => ({\n      type: o,\n      weight: a,\n      content: u,\n      index: c ?? 0\n    }))\n  ).flat().sort((o, s) => {\n    const a = o.index - s.index;\n    return a !== 0 ? a : o.weight - s.weight;\n  }).filter(({ index: o }, s, a) => {\n    if (s === 0) return !0;\n    const c = a[s - 1];\n    return c.index + c.content.length <= o;\n  }), r = [];\n  let i = 0;\n  for (const { type: o, content: s, index: a } of n)\n    a > i && r.push(e.substring(i, a)), r.push({ type: o, content: s }), i = a + s.length;\n  return e.length > i && r.push(e.substring(i)), r;\n}\nvar ao = [\n  y.ConnectionStateChanged,\n  y.RoomMetadataChanged,\n  y.ActiveSpeakersChanged,\n  y.ConnectionQualityChanged,\n  y.ParticipantConnected,\n  y.ParticipantDisconnected,\n  y.ParticipantPermissionsChanged,\n  y.ParticipantMetadataChanged,\n  y.ParticipantNameChanged,\n  y.ParticipantAttributesChanged,\n  y.TrackMuted,\n  y.TrackUnmuted,\n  y.TrackPublished,\n  y.TrackUnpublished,\n  y.TrackStreamStateChanged,\n  y.TrackSubscriptionFailed,\n  y.TrackSubscriptionPermissionChanged,\n  y.TrackSubscriptionStatusChanged\n], An = [\n  ...ao,\n  y.LocalTrackPublished,\n  y.LocalTrackUnpublished\n], co = [\n  w.TrackPublished,\n  w.TrackUnpublished,\n  w.TrackMuted,\n  w.TrackUnmuted,\n  w.TrackStreamStateChanged,\n  w.TrackSubscribed,\n  w.TrackUnsubscribed,\n  w.TrackSubscriptionPermissionChanged,\n  w.TrackSubscriptionFailed,\n  w.LocalTrackPublished,\n  w.LocalTrackUnpublished\n], uo = [\n  w.ConnectionQualityChanged,\n  w.IsSpeakingChanged,\n  w.ParticipantMetadataChanged,\n  w.ParticipantPermissionsChanged,\n  w.TrackMuted,\n  w.TrackUnmuted,\n  w.TrackPublished,\n  w.TrackUnpublished,\n  w.TrackStreamStateChanged,\n  w.TrackSubscriptionFailed,\n  w.TrackSubscriptionPermissionChanged,\n  w.TrackSubscriptionStatusChanged\n], kn = [\n  ...uo,\n  w.LocalTrackPublished,\n  w.LocalTrackUnpublished\n], L = Kr.getLogger(\"lk-components-js\");\nL.setDefaultLevel(\"WARN\");\nfunction us(e, t = {}) {\n  var n;\n  L.setLevel(e), qn((n = t.liveKitClientLogLevel) != null ? n : e);\n}\nfunction ls(e, t = {}) {\n  var n;\n  const r = L.methodFactory;\n  L.methodFactory = (i, o, s) => {\n    const a = r(i, o, s), c = St[i], u = c >= o && c < St.silent;\n    return (l, f) => {\n      f ? a(l, f) : a(l), u && e(c, l, f);\n    };\n  }, L.setLevel(L.getLevel()), Kn((n = t.liveKitClientLogExtension) != null ? n : e);\n}\nvar fs = [\n  {\n    columns: 1,\n    rows: 1\n  },\n  {\n    columns: 1,\n    rows: 2,\n    orientation: \"portrait\"\n  },\n  {\n    columns: 2,\n    rows: 1,\n    orientation: \"landscape\"\n  },\n  {\n    columns: 2,\n    rows: 2,\n    minWidth: 560\n  },\n  {\n    columns: 3,\n    rows: 3,\n    minWidth: 700\n  },\n  {\n    columns: 4,\n    rows: 4,\n    minWidth: 960\n  },\n  {\n    columns: 5,\n    rows: 5,\n    minWidth: 1100\n  }\n];\nfunction lo(e, t, n, r) {\n  if (e.length < 1)\n    throw new Error(\"At least one grid layout definition must be provided.\");\n  const i = fo(e);\n  if (n <= 0 || r <= 0)\n    return i[0];\n  let o = 0;\n  const s = n / r > 1 ? \"landscape\" : \"portrait\";\n  let a = i.find((c, u, l) => {\n    o = u;\n    const f = l.findIndex((v, d) => {\n      const m = !v.orientation || v.orientation === s, p = d > u, g = v.maxTiles === c.maxTiles;\n      return p && g && m;\n    }) !== -1;\n    return c.maxTiles >= t && !f;\n  });\n  if (a === void 0)\n    if (a = i[i.length - 1], a)\n      L.warn(\n        `No layout found for: participantCount: ${t}, width/height: ${n}/${r} fallback to biggest available layout (${a}).`\n      );\n    else\n      throw new Error(\"No layout or fallback layout found.\");\n  if ((n < a.minWidth || r < a.minHeight) && o > 0) {\n    const c = i[o - 1];\n    a = lo(\n      i.slice(0, o),\n      c.maxTiles,\n      n,\n      r\n    );\n  }\n  return a;\n}\nfunction fo(e) {\n  return [...e].map((t) => {\n    var n, r;\n    return {\n      name: `${t.columns}x${t.rows}`,\n      columns: t.columns,\n      rows: t.rows,\n      maxTiles: t.columns * t.rows,\n      minWidth: (n = t.minWidth) != null ? n : 0,\n      minHeight: (r = t.minHeight) != null ? r : 0,\n      orientation: t.orientation\n    };\n  }).sort((t, n) => t.maxTiles !== n.maxTiles ? t.maxTiles - n.maxTiles : t.minWidth !== 0 || n.minWidth !== 0 ? t.minWidth - n.minWidth : t.minHeight !== 0 || n.minHeight !== 0 ? t.minHeight - n.minHeight : 0);\n}\nfunction ds() {\n  return typeof navigator < \"u\" && navigator.mediaDevices && !!navigator.mediaDevices.getDisplayMedia;\n}\nfunction ps(e, t) {\n  var n;\n  return ce(q({}, e), {\n    receivedAtMediaTimestamp: (n = t.rtpTimestamp) != null ? n : 0,\n    receivedAt: t.timestamp\n  });\n}\nfunction hs(e, t, n) {\n  return [...e, ...t].reduceRight((r, i) => (r.find((o) => o.id === i.id) || r.unshift(i), r), []).slice(0 - n);\n}\nvar po = /* @__PURE__ */ ((e) => (e.AgentState = \"lk.agent.state\", e.PublishOnBehalf = \"lk.publish_on_behalf\", e.TranscriptionFinal = \"lk.transcription_final\", e.TranscriptionSegmentId = \"lk.segment_id\", e.TranscribedTrackId = \"lk.transcribed_track_id\", e))(po || {}), _n = [], Ln = {\n  showChat: !1,\n  unreadMessages: 0,\n  showSettings: !1\n};\nfunction ho(e) {\n  return typeof e == \"object\";\n}\nfunction vs(e) {\n  return Array.isArray(e) && e.filter(ho).length > 0;\n}\nfunction In(e, t) {\n  return t.audioLevel - e.audioLevel;\n}\nfunction Mn(e, t) {\n  return e.isSpeaking === t.isSpeaking ? 0 : e.isSpeaking ? -1 : 1;\n}\nfunction Rn(e, t) {\n  var n, r, i, o;\n  return e.lastSpokeAt !== void 0 || t.lastSpokeAt !== void 0 ? ((r = (n = t.lastSpokeAt) == null ? void 0 : n.getTime()) != null ? r : 0) - ((o = (i = e.lastSpokeAt) == null ? void 0 : i.getTime()) != null ? o : 0) : 0;\n}\nfunction Be(e, t) {\n  var n, r, i, o;\n  return ((r = (n = e.joinedAt) == null ? void 0 : n.getTime()) != null ? r : 0) - ((o = (i = t.joinedAt) == null ? void 0 : i.getTime()) != null ? o : 0);\n}\nfunction vo(e, t) {\n  return B(e) ? B(t) ? 0 : -1 : B(t) ? 1 : 0;\n}\nfunction mo(e, t) {\n  const n = e.participant.isCameraEnabled, r = t.participant.isCameraEnabled;\n  return n !== r ? n ? -1 : 1 : 0;\n}\nfunction ms(e) {\n  const t = [], n = [], r = [], i = [];\n  e.forEach((a) => {\n    a.participant.isLocal && a.source === R.Source.Camera ? t.push(a) : a.source === R.Source.ScreenShare ? n.push(a) : a.source === R.Source.Camera ? r.push(a) : i.push(a);\n  });\n  const o = go(n), s = bo(r);\n  return [...t, ...o, ...s, ...i];\n}\nfunction go(e) {\n  const t = [], n = [];\n  return e.forEach((i) => {\n    i.participant.isLocal ? t.push(i) : n.push(i);\n  }), t.sort((i, o) => Be(i.participant, o.participant)), n.sort((i, o) => Be(i.participant, o.participant)), [...n, ...t];\n}\nfunction bo(e) {\n  const t = [], n = [];\n  return e.forEach((r) => {\n    r.participant.isLocal ? t.push(r) : n.push(r);\n  }), n.sort((r, i) => r.participant.isSpeaking && i.participant.isSpeaking ? In(r.participant, i.participant) : r.participant.isSpeaking !== i.participant.isSpeaking ? Mn(r.participant, i.participant) : r.participant.lastSpokeAt !== i.participant.lastSpokeAt ? Rn(r.participant, i.participant) : B(r) !== B(i) ? vo(r, i) : r.participant.isCameraEnabled !== i.participant.isCameraEnabled ? mo(r, i) : Be(r.participant, i.participant)), [...t, ...n];\n}\nfunction gs(e) {\n  const t = [...e];\n  t.sort((r, i) => {\n    if (r.isSpeaking && i.isSpeaking)\n      return In(r, i);\n    if (r.isSpeaking !== i.isSpeaking)\n      return Mn(r, i);\n    if (r.lastSpokeAt !== i.lastSpokeAt)\n      return Rn(r, i);\n    const o = r.videoTrackPublications.size > 0, s = i.videoTrackPublications.size > 0;\n    return o !== s ? o ? -1 : 1 : Be(r, i);\n  });\n  const n = t.find((r) => r.isLocal);\n  if (n) {\n    const r = t.indexOf(n);\n    r >= 0 && (t.splice(r, 1), t.length > 0 ? t.splice(0, 0, n) : t.push(n));\n  }\n  return t;\n}\nfunction yo(e, t) {\n  return e.reduce(\n    (n, r, i) => i % t === 0 ? [...n, [r]] : [...n.slice(0, -1), [...n.slice(-1)[0], r]],\n    []\n  );\n}\nfunction Ht(e, t) {\n  const n = Math.max(e.length, t.length);\n  return new Array(n).fill([]).map((r, i) => [e[i], t[i]]);\n}\nfunction Ve(e, t, n) {\n  return e.filter((r) => !t.map((i) => n(i)).includes(n(r)));\n}\nfunction ft(e) {\n  return e.map((t) => typeof t == \"string\" || typeof t == \"number\" ? `${t}` : N(t));\n}\nfunction wo(e, t) {\n  return {\n    dropped: Ve(e, t, N),\n    added: Ve(t, e, N)\n  };\n}\nfunction xo(e) {\n  return e.added.length !== 0 || e.dropped.length !== 0;\n}\nfunction dt(e, t) {\n  const n = t.findIndex(\n    (r) => N(r) === N(e)\n  );\n  if (n === -1)\n    throw new Error(\n      `Element not part of the array: ${N(\n        e\n      )} not in ${ft(t)}`\n    );\n  return n;\n}\nfunction So(e, t, n) {\n  const r = dt(e, n), i = dt(t, n);\n  return n.splice(r, 1, t), n.splice(i, 1, e), n;\n}\nfunction To(e, t) {\n  const n = dt(e, t);\n  return t.splice(n, 1), t;\n}\nfunction Eo(e, t) {\n  return [...t, e];\n}\nfunction rt(e, t) {\n  return yo(e, t);\n}\nfunction bs(e, t, n) {\n  let r = Co(e, t);\n  if (r.length < t.length) {\n    const s = Ve(t, r, N);\n    r = [...r, ...s];\n  }\n  const i = rt(r, n), o = rt(t, n);\n  if (Ht(i, o).forEach(([s, a], c) => {\n    if (s && a) {\n      const u = rt(r, n)[c], l = wo(u, a);\n      xo(l) && (L.debug(\n        `Detected visual changes on page: ${c}, current: ${ft(\n          s\n        )}, next: ${ft(a)}`,\n        { changes: l }\n      ), l.added.length === l.dropped.length && Ht(l.added, l.dropped).forEach(([f, v]) => {\n        if (f && v)\n          r = So(f, v, r);\n        else\n          throw new Error(\n            `For a swap action we need a addition and a removal one is missing: ${f}, ${v}`\n          );\n      }), l.added.length === 0 && l.dropped.length > 0 && l.dropped.forEach((f) => {\n        r = To(f, r);\n      }), l.added.length > 0 && l.dropped.length === 0 && l.added.forEach((f) => {\n        r = Eo(f, r);\n      }));\n    }\n  }), r.length > t.length) {\n    const s = Ve(r, t, N);\n    r = r.filter(\n      (a) => !s.map(N).includes(N(a))\n    );\n  }\n  return r;\n}\nfunction Co(e, t) {\n  return e.map((n) => {\n    const r = t.find(\n      (i) => (\n        // If the IDs match or ..\n        N(n) === N(i) || // ... if the current item is a placeholder and the new item is the track reference can replace it.\n        typeof n != \"number\" && Oe(n) && B(i) && io(n, i)\n      )\n    );\n    return r ?? n;\n  });\n}\nfunction U(e) {\n  return `${On}-${e}`;\n}\nfunction ys(e) {\n  const t = zt(e), n = Dn(e.participant).pipe(\n    A(() => zt(e)),\n    D(t)\n  );\n  return { className: U(\n    e.source === R.Source.Camera || e.source === R.Source.ScreenShare ? \"participant-media-video\" : \"participant-media-audio\"\n  ), trackObserver: n };\n}\nfunction zt(e) {\n  if (B(e))\n    return e.publication;\n  {\n    const { source: t, name: n, participant: r } = e;\n    if (t && n)\n      return r.getTrackPublications().find((i) => i.source === t && i.trackName === n);\n    if (n)\n      return r.getTrackPublicationByName(n);\n    if (t)\n      return r.getTrackPublication(t);\n    throw new Error(\"At least one of source and name needs to be defined\");\n  }\n}\nfunction pe(e, ...t) {\n  return new k((r) => {\n    const i = () => {\n      r.next(e);\n    };\n    return t.forEach((s) => {\n      e.on(s, i);\n    }), () => {\n      t.forEach((s) => {\n        e.off(s, i);\n      });\n    };\n  }).pipe(D(e));\n}\nfunction we(e, t) {\n  return new k((r) => {\n    const i = (...s) => {\n      r.next(s);\n    };\n    return e.on(t, i), () => {\n      e.off(t, i);\n    };\n  });\n}\nfunction ws(e) {\n  return we(e, y.ConnectionStateChanged).pipe(\n    A(([t]) => t),\n    D(e.state)\n  );\n}\nfunction xs(e) {\n  return pe(\n    e,\n    y.RoomMetadataChanged,\n    y.ConnectionStateChanged\n  ).pipe(\n    A((n) => ({ name: n.name, metadata: n.metadata }))\n  );\n}\nfunction Ss(e) {\n  return we(e, y.ActiveSpeakersChanged).pipe(\n    A(([t]) => t)\n  );\n}\nfunction Ts(e, t, n = !0) {\n  const r = new k((o) => {\n    Tt.getLocalDevices(e, n).then((s) => {\n      o.next(s), o.complete();\n    }).catch((s) => {\n      t == null || t(s), o.next([]), o.complete();\n    });\n  }), i = new k((o) => {\n    var s;\n    const a = () => H(this, null, function* () {\n      try {\n        const c = yield Tt.getLocalDevices(e, n);\n        o.next(c);\n      } catch (c) {\n        t == null || t(c);\n      }\n    });\n    if (typeof window < \"u\") {\n      if (!window.isSecureContext)\n        throw new Error(\n          \"Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices\"\n        );\n      (s = navigator == null ? void 0 : navigator.mediaDevices) == null || s.addEventListener(\"devicechange\", a);\n    }\n    return () => {\n      var c;\n      (c = navigator == null ? void 0 : navigator.mediaDevices) == null || c.removeEventListener(\"devicechange\", a);\n    };\n  });\n  return je(r, i);\n}\nfunction Po(e) {\n  return we(e, y.DataReceived);\n}\nfunction Oo(e) {\n  return pe(e, y.AudioPlaybackStatusChanged).pipe(\n    A((n) => ({ canPlayAudio: n.canPlaybackAudio }))\n  );\n}\nfunction Ao(e) {\n  return pe(e, y.VideoPlaybackStatusChanged).pipe(\n    A((n) => ({ canPlayVideo: n.canPlaybackVideo }))\n  );\n}\nfunction ko(e, t) {\n  return we(e, y.ActiveDeviceChanged).pipe(\n    Xe(([n]) => n === t),\n    A(([n, r]) => (L.debug(\"activeDeviceObservable | RoomEvent.ActiveDeviceChanged\", { kind: n, deviceId: r }), r))\n  );\n}\nfunction Es(e, t) {\n  return we(e, y.ParticipantEncryptionStatusChanged).pipe(\n    Xe(\n      ([, n]) => (t == null ? void 0 : t.identity) === (n == null ? void 0 : n.identity) || !n && (t == null ? void 0 : t.identity) === e.localParticipant.identity\n    ),\n    A(([n]) => n),\n    D(\n      t != null && t.isLocal ? t.isE2EEEnabled : !!(t != null && t.isEncrypted)\n    )\n  );\n}\nfunction Cs(e) {\n  return we(e, y.RecordingStatusChanged).pipe(\n    A(([t]) => t),\n    D(e.isRecording)\n  );\n}\nfunction xe(e, ...t) {\n  return new k((r) => {\n    const i = () => {\n      r.next(e);\n    };\n    return t.forEach((s) => {\n      e.on(s, i);\n    }), () => {\n      t.forEach((s) => {\n        e.off(s, i);\n      });\n    };\n  }).pipe(D(e));\n}\nfunction Dn(e) {\n  return xe(\n    e,\n    w.TrackMuted,\n    w.TrackUnmuted,\n    w.ParticipantPermissionsChanged,\n    // ParticipantEvent.IsSpeakingChanged,\n    w.TrackPublished,\n    w.TrackUnpublished,\n    w.LocalTrackPublished,\n    w.LocalTrackUnpublished,\n    w.MediaDevicesError,\n    w.TrackSubscriptionStatusChanged\n    // ParticipantEvent.ConnectionQualityChanged,\n  ).pipe(\n    A((n) => {\n      const { isMicrophoneEnabled: r, isCameraEnabled: i, isScreenShareEnabled: o } = n, s = n.getTrackPublication(R.Source.Microphone), a = n.getTrackPublication(R.Source.Camera);\n      return {\n        isCameraEnabled: i,\n        isMicrophoneEnabled: r,\n        isScreenShareEnabled: o,\n        cameraTrack: a,\n        microphoneTrack: s,\n        participant: n\n      };\n    })\n  );\n}\nfunction _o(e) {\n  return e ? xe(\n    e,\n    w.ParticipantMetadataChanged,\n    w.ParticipantNameChanged\n  ).pipe(\n    A(({ name: n, identity: r, metadata: i }) => ({\n      name: n,\n      identity: r,\n      metadata: i\n    })),\n    D({\n      name: e.name,\n      identity: e.identity,\n      metadata: e.metadata\n    })\n  ) : void 0;\n}\nfunction Lo(e) {\n  return Ze(\n    e,\n    w.ConnectionQualityChanged\n  ).pipe(\n    A(([n]) => n),\n    D(e.connectionQuality)\n  );\n}\nfunction Ze(e, t) {\n  return new k((r) => {\n    const i = (...s) => {\n      r.next(s);\n    };\n    return e.on(t, i), () => {\n      e.off(t, i);\n    };\n  });\n}\nfunction Io(e) {\n  var t, n, r, i;\n  return xe(\n    e.participant,\n    w.TrackMuted,\n    w.TrackUnmuted,\n    w.TrackSubscribed,\n    w.TrackUnsubscribed,\n    w.LocalTrackPublished,\n    w.LocalTrackUnpublished\n  ).pipe(\n    A((o) => {\n      var s, a;\n      const c = (s = e.publication) != null ? s : o.getTrackPublication(e.source);\n      return (a = c == null ? void 0 : c.isMuted) != null ? a : !0;\n    }),\n    D(\n      (i = (r = (t = e.publication) == null ? void 0 : t.isMuted) != null ? r : (n = e.participant.getTrackPublication(e.source)) == null ? void 0 : n.isMuted) != null ? i : !0\n    )\n  );\n}\nfunction Ps(e) {\n  return Ze(e, w.IsSpeakingChanged).pipe(\n    A(([t]) => t)\n  );\n}\nfunction Os(e, t = {}) {\n  var n;\n  let r;\n  const i = new k((c) => (r = c, () => a.unsubscribe())).pipe(D(Array.from(e.remoteParticipants.values()))), o = (n = t.additionalRoomEvents) != null ? n : An, s = Array.from(\n    /* @__PURE__ */ new Set([\n      y.ParticipantConnected,\n      y.ParticipantDisconnected,\n      y.ConnectionStateChanged,\n      ...o\n    ])\n  ), a = pe(e, ...s).subscribe(\n    (c) => r == null ? void 0 : r.next(Array.from(c.remoteParticipants.values()))\n  );\n  return e.remoteParticipants.size > 0 && (r == null || r.next(Array.from(e.remoteParticipants.values()))), i;\n}\nfunction As(e, t, n = {}) {\n  var r;\n  const i = (r = n.additionalEvents) != null ? r : kn;\n  return pe(\n    e,\n    y.ParticipantConnected,\n    y.ParticipantDisconnected,\n    y.ConnectionStateChanged\n  ).pipe(\n    Pn((s) => {\n      const a = s.getParticipantByIdentity(t);\n      return a ? xe(a, ...i) : new k((c) => c.next(void 0));\n    }),\n    D(e.getParticipantByIdentity(t))\n  );\n}\nfunction ks(e) {\n  return Ze(\n    e,\n    w.ParticipantPermissionsChanged\n  ).pipe(\n    A(() => e.permissions),\n    D(e.permissions)\n  );\n}\nfunction _s(e, { kind: t, identity: n }, r = {}) {\n  var i;\n  const o = (i = r.additionalEvents) != null ? i : kn, s = (c) => {\n    let u = !0;\n    return t && (u = u && c.kind === t), n && (u = u && c.identity === n), u;\n  };\n  return pe(\n    e,\n    y.ParticipantConnected,\n    y.ParticipantDisconnected,\n    y.ConnectionStateChanged\n  ).pipe(\n    Pn((c) => {\n      const u = Array.from(c.remoteParticipants.values()).find(\n        (l) => s(l)\n      );\n      return u ? xe(u, ...o) : new k((l) => l.next(void 0));\n    }),\n    D(Array.from(e.remoteParticipants.values()).find((c) => s(c)))\n  );\n}\nfunction Ls(e) {\n  return typeof e > \"u\" ? new k() : Ze(e, w.AttributesChanged).pipe(\n    A(([t]) => ({\n      changed: t,\n      attributes: e.attributes\n    })),\n    D({ changed: e.attributes, attributes: e.attributes })\n  );\n}\nfunction Is(e, t, n, r, i) {\n  const { localParticipant: o } = t, s = (f, v) => {\n    let d = !1;\n    switch (f) {\n      case R.Source.Camera:\n        d = v.isCameraEnabled;\n        break;\n      case R.Source.Microphone:\n        d = v.isMicrophoneEnabled;\n        break;\n      case R.Source.ScreenShare:\n        d = v.isScreenShareEnabled;\n        break;\n    }\n    return d;\n  }, a = Dn(o).pipe(\n    A((f) => s(e, f.participant)),\n    D(s(e, o))\n  ), c = new te(), u = (f, v) => H(this, null, function* () {\n    try {\n      switch (v ?? (v = n), c.next(!0), e) {\n        case R.Source.Camera:\n          return yield o.setCameraEnabled(\n            f ?? !o.isCameraEnabled,\n            v,\n            r\n          ), o.isCameraEnabled;\n        case R.Source.Microphone:\n          return yield o.setMicrophoneEnabled(\n            f ?? !o.isMicrophoneEnabled,\n            v,\n            r\n          ), o.isMicrophoneEnabled;\n        case R.Source.ScreenShare:\n          return yield o.setScreenShareEnabled(\n            f ?? !o.isScreenShareEnabled,\n            v,\n            r\n          ), o.isScreenShareEnabled;\n        default:\n          throw new TypeError(\"Tried to toggle unsupported source\");\n      }\n    } catch (d) {\n      if (i && d instanceof Error) {\n        i == null || i(d);\n        return;\n      } else\n        throw d;\n    } finally {\n      c.next(!1);\n    }\n  });\n  return {\n    className: U(\"button\"),\n    toggle: u,\n    enabledObserver: a,\n    pendingObserver: c.asObservable()\n  };\n}\nfunction Ms() {\n  let e = !1;\n  const t = new te(), n = new te(), r = (o) => H(this, null, function* () {\n    n.next(!0), e = o ?? !e, t.next(e), n.next(!1);\n  });\n  return {\n    className: U(\"button\"),\n    toggle: r,\n    enabledObserver: t.asObservable(),\n    pendingObserver: n.asObservable()\n  };\n}\nfunction Rs(e, t, n) {\n  const r = new pn(void 0), i = ko(t, e), o = (a, ...c) => H(this, [a, ...c], function* (u, l = {}) {\n    var f, v, d;\n    if (t) {\n      const m = Gn();\n      if (e === \"audiooutput\" && ((m == null ? void 0 : m.name) === \"Safari\" || (m == null ? void 0 : m.os) === \"iOS\")) {\n        L.warn(\"Switching audio output device is not supported on Safari and iOS.\");\n        return;\n      }\n      L.debug(`Switching active device of kind \"${e}\" with id ${u}.`), yield t.switchActiveDevice(e, u, l.exact);\n      const p = (f = t.getActiveDevice(e)) != null ? f : u;\n      p !== u && u !== \"default\" && L.info(\n        `We tried to select the device with id (${u}), but the browser decided to select the device with id (${p}) instead.`\n      );\n      let g;\n      e === \"audioinput\" ? g = (v = t.localParticipant.getTrackPublication(R.Source.Microphone)) == null ? void 0 : v.track : e === \"videoinput\" && (g = (d = t.localParticipant.getTrackPublication(R.Source.Camera)) == null ? void 0 : d.track);\n      const h = u === \"default\" && !g || u === \"default\" && (g == null ? void 0 : g.mediaStreamTrack.label.startsWith(\"Default\"));\n      r.next(h ? u : p);\n    }\n  });\n  return {\n    className: U(\"media-device-select\"),\n    activeDeviceObservable: i,\n    setActiveMediaDevice: o\n  };\n}\nfunction Ds(e) {\n  const t = (r) => {\n    e.disconnect(r);\n  };\n  return { className: U(\"disconnect-button\"), disconnect: t };\n}\nfunction $s(e) {\n  const t = U(\"connection-quality\"), n = Lo(e);\n  return { className: t, connectionQualityObserver: n };\n}\nfunction Ns(e) {\n  let t = \"track-muted-indicator-camera\";\n  switch (e.source) {\n    case R.Source.Camera:\n      t = \"track-muted-indicator-camera\";\n      break;\n    case R.Source.Microphone:\n      t = \"track-muted-indicator-microphone\";\n      break;\n  }\n  const n = U(t), r = Io(e);\n  return { className: n, mediaMutedObserver: r };\n}\nfunction Fs(e) {\n  return { className: \"lk-participant-name\", infoObserver: _o(e) };\n}\nfunction Us() {\n  return {\n    className: U(\"participant-tile\")\n  };\n}\nvar Mo = {\n  CHAT: \"lk.chat\",\n  TRANSCRIPTION: \"lk.transcription\"\n}, Ro = {\n  CHAT: \"lk-chat-topic\"\n};\nfunction $n(e, t) {\n  return H(this, arguments, function* (n, r, i = {}) {\n    const { reliable: o, destinationIdentities: s, topic: a } = i;\n    yield n.publishData(r, {\n      destinationIdentities: s,\n      topic: a,\n      reliable: o\n    });\n  });\n}\nfunction Do(e, t, n) {\n  const r = Array.isArray(t) ? t : [t], i = Po(e).pipe(\n    Xe(\n      ([, , , c]) => t === void 0 || c !== void 0 && r.includes(c)\n    ),\n    A(([c, u, , l]) => {\n      const f = {\n        payload: c,\n        topic: l,\n        from: u\n      };\n      return n == null || n(f), f;\n    })\n  );\n  let o;\n  const s = new k((c) => {\n    o = c;\n  });\n  return { messageObservable: i, isSendingObservable: s, send: (c, ...u) => H(this, [c, ...u], function* (l, f = {}) {\n    o.next(!0);\n    try {\n      yield $n(e.localParticipant, l, q({ topic: r[0] }, f));\n    } finally {\n      o.next(!1);\n    }\n  }) };\n}\nvar Ie = /* @__PURE__ */ new WeakMap();\nfunction $o(e) {\n  return e.ignoreLegacy == !0;\n}\nvar No = (e) => JSON.parse(new TextDecoder().decode(e)), Fo = (e) => new TextEncoder().encode(JSON.stringify(e));\nfunction Ws(e, t) {\n  var n, r, i, o, s, a;\n  const c = () => {\n    var b, S, C;\n    return ((b = e.serverInfo) == null ? void 0 : b.edition) === 1 || !!((S = e.serverInfo) != null && S.version) && Qn((C = e.serverInfo) == null ? void 0 : C.version, \"1.8.2\") > 0;\n  }, u = new te(), l = (n = t == null ? void 0 : t.channelTopic) != null ? n : Mo.CHAT, f = (r = t == null ? void 0 : t.channelTopic) != null ? r : Ro.CHAT;\n  let v = !1;\n  Ie.has(e) || (v = !0);\n  const d = (i = Ie.get(e)) != null ? i : /* @__PURE__ */ new Map(), m = (o = d.get(l)) != null ? o : new te();\n  d.set(l, m), Ie.set(e, d);\n  const p = (s = t == null ? void 0 : t.messageDecoder) != null ? s : No;\n  if (v) {\n    e.registerTextStreamHandler(l, (S, C) => H(this, null, function* () {\n      const { id: $, timestamp: M } = S.info;\n      Je(S).pipe(\n        lt((T, _) => T + _),\n        A((T) => ({\n          id: $,\n          timestamp: M,\n          message: T,\n          from: e.getParticipantByIdentity(C.identity),\n          type: \"chatMessage\"\n          // editTimestamp: type === 'update' ? timestamp : undefined,\n        }))\n      ).subscribe({\n        next: (T) => m.next(T)\n      });\n    }));\n    const { messageObservable: b } = Do(e, [f]);\n    b.pipe(\n      A((S) => {\n        const C = p(S.payload);\n        return $o(C) ? void 0 : ce(q({}, C), {\n          type: \"chatMessage\",\n          from: S.from\n        });\n      }),\n      Xe((S) => !!S),\n      Wt(u)\n    ).subscribe(m);\n  }\n  const g = m.pipe(\n    lt((b, S) => {\n      if (\"id\" in S && b.find((C) => {\n        var $, M;\n        return (($ = C.from) == null ? void 0 : $.identity) === ((M = S.from) == null ? void 0 : M.identity) && C.id === S.id;\n      })) {\n        const C = b.findIndex(($) => $.id === S.id);\n        if (C > -1) {\n          const $ = b[C];\n          b[C] = ce(q({}, S), {\n            timestamp: $.timestamp,\n            editTimestamp: S.timestamp\n          });\n        }\n        return [...b];\n      }\n      return [...b, S];\n    }, []),\n    Wt(u)\n  ), h = new pn(!1), x = (a = t == null ? void 0 : t.messageEncoder) != null ? a : Fo, E = (b, S) => H(this, null, function* () {\n    var C;\n    S || (S = {}), (C = S.topic) != null || (S.topic = l), h.next(!0);\n    try {\n      const M = {\n        id: (yield e.localParticipant.sendText(b, S)).id,\n        timestamp: Date.now(),\n        message: b\n      }, V = ce(q({}, M), {\n        attachedFiles: S.attachments\n      }), T = ce(q({}, V), {\n        type: \"chatMessage\",\n        from: e.localParticipant,\n        attributes: S.attributes\n      });\n      m.next(T);\n      const _ = x(ce(q({}, M), {\n        ignoreLegacy: c()\n      }));\n      try {\n        yield $n(e.localParticipant, _, {\n          reliable: !0,\n          topic: f\n        });\n      } catch (ee) {\n        L.info(\"could not send message in legacy chat format\", ee);\n      }\n      return T;\n    } finally {\n      h.next(!1);\n    }\n  });\n  function O() {\n    u.next(), u.complete(), m.complete(), Ie.delete(e), e.unregisterTextStreamHandler(l);\n  }\n  return e.once(y.Disconnected, O), {\n    messageObservable: g,\n    isSendingObservable: h,\n    send: E\n  };\n}\nfunction js() {\n  const e = (n) => H(this, null, function* () {\n    L.info(\"Start Audio for room: \", n), yield n.startAudio();\n  });\n  return { className: U(\"start-audio-button\"), roomAudioPlaybackAllowedObservable: Oo, handleStartAudioPlayback: e };\n}\nfunction Bs() {\n  const e = (n) => H(this, null, function* () {\n    L.info(\"Start Video for room: \", n), yield n.startVideo();\n  });\n  return { className: U(\"start-audio-button\"), roomVideoPlaybackAllowedObservable: Ao, handleStartVideoPlayback: e };\n}\nfunction Vs() {\n  return { className: [U(\"button\"), U(\"chat-toggle\")].join(\" \") };\n}\nfunction Hs() {\n  return { className: [U(\"button\"), U(\"focus-toggle-button\")].join(\" \") };\n}\nfunction zs() {\n  return { className: \"lk-clear-pin-button lk-button\" };\n}\nfunction Ys() {\n  return { className: \"lk-room-container\" };\n}\nfunction Yt(e, t, n = !0) {\n  const i = [e.localParticipant, ...Array.from(e.remoteParticipants.values())], o = [];\n  return i.forEach((s) => {\n    t.forEach((a) => {\n      const c = Array.from(\n        s.trackPublications.values()\n      ).filter(\n        (u) => u.source === a && // either return all or only the ones that are subscribed\n        (!n || u.track)\n      ).map((u) => ({\n        participant: s,\n        publication: u,\n        source: u.source\n      }));\n      o.push(...c);\n    });\n  }), { trackReferences: o, participants: i };\n}\nfunction qt(e, t, n = !1) {\n  const { sources: r, kind: i, name: o } = t;\n  return Array.from(e.trackPublications.values()).filter(\n    (a) => (!r || r.includes(a.source)) && (!i || a.kind === i) && (!o || a.trackName === o) && // either return all or only the ones that are subscribed\n    (!n || a.track)\n  ).map((a) => ({\n    participant: e,\n    publication: a,\n    source: a.source\n  }));\n}\nfunction qs(e, t, n) {\n  var r, i;\n  const o = (r = n.additionalRoomEvents) != null ? r : An, s = (i = n.onlySubscribed) != null ? i : !0, a = Array.from(\n    (/* @__PURE__ */ new Set([\n      y.ParticipantConnected,\n      y.ParticipantDisconnected,\n      y.ConnectionStateChanged,\n      y.LocalTrackPublished,\n      y.LocalTrackUnpublished,\n      y.TrackPublished,\n      y.TrackUnpublished,\n      y.TrackSubscriptionStatusChanged,\n      ...o\n    ])).values()\n  );\n  return pe(e, ...a).pipe(\n    A((u) => {\n      const l = Yt(u, t, s);\n      return L.debug(`TrackReference[] was updated. (length ${l.trackReferences.length})`, l), l;\n    }),\n    D(Yt(e, t, s))\n  );\n}\nfunction Ks(e, t) {\n  return xe(e, ...co).pipe(\n    A((r) => {\n      const i = qt(r, t);\n      return L.debug(`TrackReference[] was updated. (length ${i.length})`, i), i;\n    }),\n    D(qt(e, t))\n  );\n}\nfunction Nn(e, t) {\n  return new k((r) => {\n    const i = (...s) => {\n      r.next(s);\n    };\n    return e.on(t, i), () => {\n      e.off(t, i);\n    };\n  });\n}\nfunction Gs(e) {\n  return Nn(e, Gt.TranscriptionReceived);\n}\nfunction Qs(e) {\n  return Nn(e, Gt.TimeSyncUpdate).pipe(\n    A(([t]) => t)\n  );\n}\nfunction Js(e, t = 1e3) {\n  if (e === null) return Ft(!1);\n  const n = ut(e, \"mousemove\", { passive: !0 }).pipe(A(() => !0)), r = n.pipe(\n    Li({\n      each: t,\n      with: () => je(Ft(!1), r.pipe(Gi(n)))\n    }),\n    Yi()\n  );\n  return r;\n}\nfunction Uo(e, t) {\n  if (typeof localStorage > \"u\") {\n    L.error(\"Local storage is not available.\");\n    return;\n  }\n  try {\n    if (t) {\n      const n = Object.fromEntries(\n        Object.entries(t).filter(([, r]) => r !== \"\")\n      );\n      localStorage.setItem(e, JSON.stringify(n));\n    }\n  } catch (n) {\n    L.error(`Error setting item to local storage: ${n}`);\n  }\n}\nfunction Wo(e) {\n  if (typeof localStorage > \"u\") {\n    L.error(\"Local storage is not available.\");\n    return;\n  }\n  try {\n    const t = localStorage.getItem(e);\n    if (!t) {\n      L.warn(`Item with key ${e} does not exist in local storage.`);\n      return;\n    }\n    return JSON.parse(t);\n  } catch (t) {\n    L.error(`Error getting item from local storage: ${t}`);\n    return;\n  }\n}\nfunction jo(e) {\n  return {\n    load: () => Wo(e),\n    save: (t) => Uo(e, t)\n  };\n}\nvar Bo = `${On}-user-choices`, Ee = {\n  videoEnabled: !0,\n  audioEnabled: !0,\n  videoDeviceId: \"default\",\n  audioDeviceId: \"default\",\n  username: \"\"\n}, { load: Vo, save: Ho } = jo(Bo);\nfunction Xs(e, t = !1) {\n  t !== !0 && Ho(e);\n}\nfunction Zs(e, t = !1) {\n  var n, r, i, o, s;\n  const a = {\n    videoEnabled: (n = e == null ? void 0 : e.videoEnabled) != null ? n : Ee.videoEnabled,\n    audioEnabled: (r = e == null ? void 0 : e.audioEnabled) != null ? r : Ee.audioEnabled,\n    videoDeviceId: (i = e == null ? void 0 : e.videoDeviceId) != null ? i : Ee.videoDeviceId,\n    audioDeviceId: (o = e == null ? void 0 : e.audioDeviceId) != null ? o : Ee.audioDeviceId,\n    username: (s = e == null ? void 0 : e.username) != null ? s : Ee.username\n  };\n  if (t)\n    return a;\n  {\n    const c = Vo();\n    return q(q({}, a), c ?? {});\n  }\n}\nvar it = null, ot = null, zo = 0;\nfunction Kt() {\n  return it || (it = /* @__PURE__ */ new Map()), it;\n}\nfunction Yo() {\n  return ot || (ot = /* @__PURE__ */ new WeakMap()), ot;\n}\nfunction qo(e, t) {\n  const n = Yo();\n  let r = n.get(e);\n  return r || (r = `room_${zo++}`, n.set(e, r)), `${r}:${t}`;\n}\nfunction ea(e, t) {\n  const n = qo(e, t), r = Kt(), i = r.get(n);\n  if (i)\n    return i;\n  const o = new te();\n  let s = [];\n  const a = \"lk.segment_id\", c = o.pipe(\n    Qi({\n      subscribe: () => {\n        e.registerTextStreamHandler(t, (u, l) => H(this, null, function* () {\n          var f;\n          const v = Je(u).pipe(\n            lt((m, p) => m + p, \"\")\n          ), d = !!((f = u.info.attributes) != null && f[a]);\n          v.subscribe((m) => {\n            const p = s.findIndex(\n              (g) => {\n                var h, x;\n                return g.streamInfo.id === u.info.id || d && ((h = g.streamInfo.attributes) == null ? void 0 : h[a]) === ((x = u.info.attributes) == null ? void 0 : x[a]);\n              }\n            );\n            p !== -1 ? (s[p] = ce(q({}, s[p]), {\n              text: m\n            }), o.next([...s])) : (s.push({\n              text: m,\n              participantInfo: l,\n              streamInfo: u.info\n            }), o.next([...s]));\n          });\n        }));\n      },\n      finalize: () => {\n        e.unregisterTextStreamHandler(t);\n      }\n    }),\n    Ki()\n  );\n  return r.set(n, c), e.on(y.Disconnected, () => {\n    Kt().delete(n), s = [], o.next([]);\n  }), c;\n}\nfunction Fn(e, t) {\n  if (t.msg === \"show_chat\")\n    return { ...e, showChat: !0, unreadMessages: 0 };\n  if (t.msg === \"hide_chat\")\n    return { ...e, showChat: !1 };\n  if (t.msg === \"toggle_chat\") {\n    const n = { ...e, showChat: !e.showChat };\n    return n.showChat === !0 && (n.unreadMessages = 0), n;\n  } else return t.msg === \"unread_msg\" ? { ...e, unreadMessages: t.count } : t.msg === \"toggle_settings\" ? { ...e, showSettings: !e.showSettings } : { ...e };\n}\nfunction Un(e, t) {\n  return t.msg === \"set_pin\" ? [t.trackReference] : t.msg === \"clear_pin\" ? [] : { ...e };\n}\nconst Wn = I.createContext(void 0);\nfunction ta() {\n  const e = I.useContext(Wn);\n  if (!e)\n    throw Error(\"Tried to access LayoutContext context outside a LayoutContextProvider provider.\");\n  return e;\n}\nfunction na(e) {\n  const t = Ko();\n  if (e ?? (e = t), !e)\n    throw Error(\"Tried to access LayoutContext context outside a LayoutContextProvider provider.\");\n  return e;\n}\nfunction ra() {\n  const [e, t] = I.useReducer(Un, _n), [n, r] = I.useReducer(Fn, Ln);\n  return {\n    pin: { dispatch: t, state: e },\n    widget: { dispatch: r, state: n }\n  };\n}\nfunction ia(e) {\n  const [t, n] = I.useReducer(Un, _n), [r, i] = I.useReducer(Fn, Ln);\n  return e ?? {\n    pin: { dispatch: n, state: t },\n    widget: { dispatch: i, state: r }\n  };\n}\nfunction Ko() {\n  return I.useContext(Wn);\n}\nconst jn = I.createContext(\n  void 0\n);\nfunction oa() {\n  const e = I.useContext(jn);\n  if (!e)\n    throw Error(\"tried to access track context outside of track context provider\");\n  return e;\n}\nfunction Bn() {\n  return I.useContext(jn);\n}\nfunction sa(e) {\n  const t = Bn(), n = e ?? t;\n  if (!n)\n    throw new Error(\n      \"No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly\"\n    );\n  return n;\n}\nconst Vn = I.createContext(void 0);\nfunction aa() {\n  const e = I.useContext(Vn);\n  if (!e)\n    throw Error(\"tried to access participant context outside of participant context provider\");\n  return e;\n}\nfunction Go() {\n  return I.useContext(Vn);\n}\nfunction ca(e) {\n  const t = Go(), n = Bn(), r = e ?? t ?? (n == null ? void 0 : n.participant);\n  if (!r)\n    throw new Error(\n      \"No participant provided, make sure you are inside a participant context or pass the participant explicitly\"\n    );\n  return r;\n}\nconst Hn = I.createContext(void 0);\nfunction ua() {\n  const e = I.useContext(Hn);\n  if (!e)\n    throw Error(\"tried to access room context outside of livekit room component\");\n  return e;\n}\nfunction Qo() {\n  return I.useContext(Hn);\n}\nfunction la(e) {\n  const t = Qo(), n = e ?? t;\n  if (!n)\n    throw new Error(\n      \"No room provided, make sure you are inside a Room context or pass the room explicitly\"\n    );\n  return n;\n}\nconst zn = I.createContext(void 0);\nfunction fa() {\n  const e = I.useContext(zn);\n  if (!e)\n    throw Error(\"tried to access session context outside of SessionProvider component\");\n  return e;\n}\nfunction Jo() {\n  return I.useContext(zn);\n}\nfunction da(e) {\n  const t = Jo(), n = e ?? t;\n  if (!n)\n    throw new Error(\n      \"No session provided, make sure you are inside a Session context or pass the session explicitly\"\n    );\n  return n;\n}\nconst Xo = I.createContext(void 0);\nfunction pa(e) {\n  const t = I.useContext(Xo);\n  if (e === !0) {\n    if (t)\n      return t;\n    throw Error(\"tried to access feature context, but none is present\");\n  }\n  return t;\n}\nexport {\n  Xs as $,\n  bs as A,\n  Go as B,\n  _o as C,\n  Us as D,\n  Os as E,\n  na as F,\n  fs as G,\n  As as H,\n  _s as I,\n  xs as J,\n  Ss as K,\n  Xo as L,\n  gs as M,\n  js as N,\n  Bs as O,\n  Vs as P,\n  Ns as Q,\n  Hn as R,\n  Is as S,\n  Ms as T,\n  ho as U,\n  qs as V,\n  vs as W,\n  zt as X,\n  ys as Y,\n  Ws as Z,\n  Zs as _,\n  ta as a,\n  Es as a0,\n  B as a1,\n  Ks as a2,\n  Qs as a3,\n  Gs as a4,\n  hs as a5,\n  ps as a6,\n  Ls as a7,\n  po as a8,\n  Cs as a9,\n  aa as aA,\n  fa as aB,\n  oa as aC,\n  ea as aa,\n  Mo as ab,\n  Jo as ac,\n  da as ad,\n  Bn as ae,\n  Wn as af,\n  Fs as ag,\n  es as ah,\n  Hr as ai,\n  Vn as aj,\n  jn as ak,\n  pa as al,\n  Js as am,\n  rs as an,\n  ia as ao,\n  cs as ap,\n  as as aq,\n  zn as ar,\n  os as as,\n  ss as at,\n  ds as au,\n  ra as av,\n  ts as aw,\n  is as ax,\n  us as ay,\n  ls as az,\n  zs as b,\n  ca as c,\n  $s as d,\n  ws as e,\n  ua as f,\n  Do as g,\n  Ds as h,\n  sa as i,\n  Ko as j,\n  Hs as k,\n  L as l,\n  ns as m,\n  lo as n,\n  Io as o,\n  N as p,\n  Ps as q,\n  Oo as r,\n  Ys as s,\n  Dn as t,\n  la as u,\n  ks as v,\n  Qo as w,\n  Ts as x,\n  Rs as y,\n  ms as z\n};\n//# sourceMappingURL=contexts-CsO1QZ3r.mjs.map\n","import * as i from \"react\";\nimport { l as u, s as x, R as V, L as j } from \"./contexts-CsO1QZ3r.mjs\";\nimport { Room as U, RoomEvent as l, MediaDeviceFailure as _ } from \"livekit-client\";\nfunction L(n) {\n  var e, o, t = \"\";\n  if (typeof n == \"string\" || typeof n == \"number\") t += n;\n  else if (typeof n == \"object\") if (Array.isArray(n)) {\n    var r = n.length;\n    for (e = 0; e < r; e++) n[e] && (o = L(n[e])) && (t && (t += \" \"), t += o);\n  } else for (o in n) n[o] && (t && (t += \" \"), t += o);\n  return t;\n}\nfunction A() {\n  for (var n, e, o = 0, t = \"\", r = arguments.length; o < r; o++) (n = arguments[o]) && (e = L(n)) && (t && (t += \" \"), t += e);\n  return t;\n}\nfunction I(...n) {\n  return (...e) => {\n    for (const o of n)\n      if (typeof o == \"function\")\n        try {\n          o(...e);\n        } catch (t) {\n          console.error(t);\n        }\n  };\n}\nfunction M(...n) {\n  const e = { ...n[0] };\n  for (let o = 1; o < n.length; o++) {\n    const t = n[o];\n    for (const r in t) {\n      const d = e[r], a = t[r];\n      typeof d == \"function\" && typeof a == \"function\" && // This is a lot faster than a regex.\n      r[0] === \"o\" && r[1] === \"n\" && r.charCodeAt(2) >= /* 'A' */\n      65 && r.charCodeAt(2) <= /* 'Z' */\n      90 ? e[r] = I(d, a) : (r === \"className\" || r === \"UNSAFE_className\") && typeof d == \"string\" && typeof a == \"string\" ? e[r] = A(d, a) : e[r] = a !== void 0 ? a : d;\n    }\n  }\n  return e;\n}\nfunction J(n) {\n  return n !== void 0;\n}\nfunction G(...n) {\n  return M(...n.filter(J));\n}\nfunction H(n, e, o) {\n  return i.Children.map(n, (t) => i.isValidElement(t) && i.Children.only(n) ? (t.props.className && (e ?? (e = {}), e.className = A(t.props.className, e.className), e.style = { ...t.props.style, ...e.style }), i.cloneElement(t, { ...e, key: o })) : t);\n}\nfunction Q(n) {\n  var e, o;\n  if (typeof window < \"u\" && typeof process < \"u\" && // eslint-disable-next-line turbo/no-undeclared-env-vars\n  (((e = process == null ? void 0 : process.env) == null ? void 0 : e.NODE_ENV) === \"dev\" || // eslint-disable-next-line turbo/no-undeclared-env-vars\n  ((o = process == null ? void 0 : process.env) == null ? void 0 : o.NODE_ENV) === \"development\")) {\n    const t = document.querySelector(\".lk-room-container\");\n    t && !getComputedStyle(t).getPropertyValue(\"--lk-has-imported-styles\") && u.warn(\n      \"It looks like you're not using the `@livekit/components-styles package`. To render the UI with the default styling, please import it in your layout or page.\"\n    );\n  }\n}\nfunction T(n, e) {\n  return n === \"processor\" && e && typeof e == \"object\" && \"name\" in e ? e.name : n === \"e2ee\" && e ? \"e2ee-enabled\" : e;\n}\nconst q = {\n  connect: !0,\n  audio: !1,\n  video: !1\n};\nfunction $(n) {\n  const {\n    token: e,\n    serverUrl: o,\n    options: t,\n    room: r,\n    connectOptions: d,\n    connect: a,\n    audio: p,\n    video: y,\n    screen: g,\n    onConnected: v,\n    onDisconnected: h,\n    onError: c,\n    onMediaDeviceFailure: b,\n    onEncryptionError: E,\n    simulateParticipants: w,\n    ...N\n  } = { ...q, ...n };\n  t && r && u.warn(\n    \"when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.\"\n  );\n  const [s, O] = i.useState(), C = i.useRef(a);\n  i.useEffect(() => {\n    O(r ?? new U(t));\n  }, [r, JSON.stringify(t, T)]);\n  const F = i.useMemo(() => {\n    const { className: m } = x();\n    return M(N, { className: m });\n  }, [N]);\n  return i.useEffect(() => {\n    if (!s) return;\n    const m = () => {\n      const f = s.localParticipant;\n      u.debug(\"trying to publish local tracks\"), Promise.all([\n        f.setMicrophoneEnabled(!!p, typeof p != \"boolean\" ? p : void 0),\n        f.setCameraEnabled(!!y, typeof y != \"boolean\" ? y : void 0),\n        f.setScreenShareEnabled(!!g, typeof g != \"boolean\" ? g : void 0)\n      ]).catch((R) => {\n        u.warn(R), c == null || c(R);\n      });\n    }, P = (f, R) => {\n      const K = _.getFailure(f);\n      b == null || b(K, R);\n    }, S = (f) => {\n      E == null || E(f);\n    }, k = (f) => {\n      h == null || h(f);\n    }, D = () => {\n      v == null || v();\n    };\n    return s.on(l.SignalConnected, m).on(l.MediaDevicesError, P).on(l.EncryptionError, S).on(l.Disconnected, k).on(l.Connected, D), () => {\n      s.off(l.SignalConnected, m).off(l.MediaDevicesError, P).off(l.EncryptionError, S).off(l.Disconnected, k).off(l.Connected, D);\n    };\n  }, [\n    s,\n    p,\n    y,\n    g,\n    c,\n    E,\n    b,\n    v,\n    h\n  ]), i.useEffect(() => {\n    if (s) {\n      if (w) {\n        s.simulateParticipants({\n          participants: {\n            count: w\n          },\n          publish: {\n            audio: !0,\n            useRealTracks: !0\n          }\n        });\n        return;\n      }\n      if (a) {\n        if (C.current = !0, u.debug(\"connecting\"), !e) {\n          u.debug(\"no token yet\");\n          return;\n        }\n        if (!o) {\n          u.warn(\"no livekit url provided\"), c == null || c(Error(\"no livekit url provided\"));\n          return;\n        }\n        s.connect(o, e, d).catch((m) => {\n          u.warn(m), C.current === !0 && (c == null || c(m));\n        });\n      } else\n        u.debug(\"disconnecting because connect is false\"), C.current = !1, s.disconnect();\n    }\n  }, [\n    a,\n    e,\n    JSON.stringify(d),\n    s,\n    c,\n    o,\n    w\n  ]), i.useEffect(() => {\n    if (s)\n      return () => {\n        u.info(\"disconnecting on onmount\"), s.disconnect();\n      };\n  }, [s]), { room: s, htmlProps: F };\n}\nconst W = /* @__PURE__ */ i.forwardRef(function(e, o) {\n  const { room: t, htmlProps: r } = $(e);\n  return /* @__PURE__ */ i.createElement(\"div\", { ref: o, ...r }, t && /* @__PURE__ */ i.createElement(V.Provider, { value: t }, /* @__PURE__ */ i.createElement(j.Provider, { value: e.featureFlags }, e.children)));\n});\nexport {\n  W as L,\n  G as a,\n  H as c,\n  M as m,\n  T as r,\n  $ as u,\n  Q as w\n};\n//# sourceMappingURL=room-Bb6uLxS5.mjs.map\n","import * as s from \"react\";\nimport { useRef as ae, useMemo as Ne, useCallback as ee, useEffect as _e } from \"react\";\nimport { u as U, r as Fe, a as Pe, b as xe, c as Q, d as Ue, e as He, f as oe, g as Ve, h as qe, i as ue, j as Be, k as je, m as ze, G as We, n as Ge, o as Je, p as le, q as $e, t as Qe, v as Le, w as de, x as Ae, y as Ke, l as V, z as Ye, A as Xe, B as fe, C as Ze, D as et, E as tt, F as nt, H as st, I as rt, J as ot, K as at, M as ve, N as ct, O as it, P as ut, Q as lt, S as dt, T as ft, U as mt, V as pt, W as Re, X as ht, Y as bt, Z as gt, _ as vt, $ as St, a0 as yt, a1 as Ct, a2 as Mt, a3 as Tt, a4 as Et, a5 as kt, a6 as wt, a7 as ie, a8 as W, a9 as Pt, aa as Lt, ab as At, ac as Rt, ad as Dt } from \"./contexts-CsO1QZ3r.mjs\";\nimport { m as G } from \"./room-Bb6uLxS5.mjs\";\nimport { ConnectionState as I, LocalTrackPublication as Ot, facingModeFromLocalTrack as It, Room as De, Track as E, createAudioAnalyser as me, ParticipantKind as se, Mutex as Nt, ParticipantEvent as X, RoomEvent as H, decodeTokenPayload as _t, TokenSourceConfigurable as Ft } from \"livekit-client\";\nconst xt = (e) => {\n  const n = s.useRef(e);\n  return s.useEffect(() => {\n    n.current = e;\n  }), n;\n};\nfunction Ut(e, n) {\n  const t = Vt(), r = xt(n);\n  return s.useLayoutEffect(() => {\n    let o = !1;\n    const c = e.current;\n    if (!c) return;\n    function a(i, u) {\n      o || r.current(i, u);\n    }\n    return t == null || t.subscribe(c, a), () => {\n      o = !0, t == null || t.unsubscribe(c, a);\n    };\n  }, [e.current, t, r]), t == null ? void 0 : t.observer;\n}\nfunction Ht() {\n  let e = !1, n = [];\n  const t = /* @__PURE__ */ new Map();\n  if (typeof window > \"u\")\n    return;\n  const r = new ResizeObserver((o, c) => {\n    n = n.concat(o), e || window.requestAnimationFrame(() => {\n      const a = /* @__PURE__ */ new Set();\n      for (let i = 0; i < n.length; i++) {\n        if (a.has(n[i].target)) continue;\n        a.add(n[i].target);\n        const u = t.get(n[i].target);\n        u == null || u.forEach((p) => p(n[i], c));\n      }\n      n = [], e = !1;\n    }), e = !0;\n  });\n  return {\n    observer: r,\n    subscribe(o, c) {\n      r.observe(o);\n      const a = t.get(o) ?? [];\n      a.push(c), t.set(o, a);\n    },\n    unsubscribe(o, c) {\n      const a = t.get(o) ?? [];\n      if (a.length === 1) {\n        r.unobserve(o), t.delete(o);\n        return;\n      }\n      const i = a.indexOf(c);\n      i !== -1 && a.splice(i, 1), t.set(o, a);\n    }\n  };\n}\nlet ce;\nconst Vt = () => ce || (ce = Ht()), qt = (e) => {\n  const [n, t] = s.useState({ width: 0, height: 0 });\n  s.useLayoutEffect(() => {\n    if (e.current) {\n      const { width: o, height: c } = e.current.getBoundingClientRect();\n      t({ width: o, height: c });\n    }\n  }, [e.current]);\n  const r = s.useCallback(\n    (o) => t(o.contentRect),\n    []\n  );\n  return Ut(e, r), n;\n};\nfunction D(e, n, t = !0) {\n  const [r, o] = s.useState(n);\n  return s.useEffect(() => {\n    if (t && o(n), typeof window > \"u\" || !e) return;\n    const c = e.subscribe(o);\n    return () => c.unsubscribe();\n  }, [e, t]), r;\n}\nfunction kn(e) {\n  const n = (c) => typeof window < \"u\" ? window.matchMedia(c).matches : !1, [t, r] = s.useState(n(e));\n  function o() {\n    r(n(e));\n  }\n  return s.useEffect(() => {\n    const c = window.matchMedia(e);\n    return o(), c.addListener ? c.addListener(o) : c.addEventListener(\"change\", o), () => {\n      c.removeListener ? c.removeListener(o) : c.removeEventListener(\"change\", o);\n    };\n  }, [e]), t;\n}\nfunction wn(e) {\n  const n = U(e), t = s.useCallback(async () => {\n    await n.startAudio();\n  }, [n]), r = s.useMemo(\n    () => Fe(n),\n    [n]\n  ), { canPlayAudio: o } = D(r, {\n    canPlayAudio: n.canPlaybackAudio\n  });\n  return { canPlayAudio: o, startAudio: t };\n}\nfunction Pn(e) {\n  const { state: n, dispatch: t } = Pe().pin;\n  return { buttonProps: s.useMemo(() => {\n    const { className: o } = xe();\n    return G(e, {\n      className: o,\n      disabled: !(n != null && n.length),\n      onClick: () => {\n        t && t({ msg: \"clear_pin\" });\n      }\n    });\n  }, [e, t, n]) };\n}\nfunction Ln(e = {}) {\n  const n = Q(e.participant), { className: t, connectionQualityObserver: r } = s.useMemo(\n    () => Ue(n),\n    [n]\n  ), o = D(r, n.connectionQuality);\n  return { className: t, quality: o };\n}\nfunction te(e) {\n  const n = U(e), t = s.useMemo(() => He(n), [n]);\n  return D(t, n.state);\n}\nfunction An(e, n) {\n  const t = typeof e == \"function\" ? e : n, r = typeof e == \"string\" ? e : void 0, o = oe(), { send: c, messageObservable: a, isSendingObservable: i } = s.useMemo(\n    () => Ve(o, r, t),\n    [o, r, t]\n  ), u = D(a, void 0), p = D(i, !1);\n  return {\n    message: u,\n    send: c,\n    isSending: p\n  };\n}\nfunction Rn(e) {\n  const n = oe(), t = te(n);\n  return { buttonProps: s.useMemo(() => {\n    const { className: o, disconnect: c } = qe(n);\n    return G(e, {\n      className: o,\n      onClick: () => c(e.stopTracks ?? !0),\n      disabled: t === I.Disconnected\n    });\n  }, [n, e, t]) };\n}\nfunction Bt(e) {\n  if (e.publication instanceof Ot) {\n    const n = e.publication.track;\n    if (n) {\n      const { facingMode: t } = It(n);\n      return t;\n    }\n  }\n  return \"undefined\";\n}\nfunction Dn({ trackRef: e, props: n }) {\n  const t = ue(e), r = Be(), { className: o } = s.useMemo(() => je(), []), c = s.useMemo(() => ze(t, r == null ? void 0 : r.pin.state), [t, r == null ? void 0 : r.pin.state]);\n  return { mergedProps: s.useMemo(\n    () => G(n, {\n      className: o,\n      onClick: (i) => {\n        var u, p, h, d, l;\n        (u = n.onClick) == null || u.call(n, i), c ? (h = r == null ? void 0 : (p = r.pin).dispatch) == null || h.call(p, {\n          msg: \"clear_pin\"\n        }) : (l = r == null ? void 0 : (d = r.pin).dispatch) == null || l.call(d, {\n          msg: \"set_pin\",\n          trackReference: t\n        });\n      }\n    }),\n    [n, o, t, c, r == null ? void 0 : r.pin]\n  ), inFocus: c };\n}\nfunction On(e, n, t = {}) {\n  const r = t.gridLayouts ?? We, { width: o, height: c } = qt(e), a = Ge(r, n, o, c);\n  return s.useEffect(() => {\n    e.current && a && (e.current.style.setProperty(\"--lk-col-count\", a == null ? void 0 : a.columns.toString()), e.current.style.setProperty(\"--lk-row-count\", a == null ? void 0 : a.rows.toString()));\n  }, [e, a]), {\n    layout: a,\n    containerWidth: o,\n    containerHeight: c\n  };\n}\nfunction Se(e, n = {}) {\n  var i, u;\n  const t = typeof e == \"string\" ? n.participant : e.participant, r = Q(t), o = typeof e == \"string\" ? { participant: r, source: e } : e, [c, a] = s.useState(\n    !!((i = o.publication) != null && i.isMuted || (u = r.getTrackPublication(o.source)) != null && u.isMuted)\n  );\n  return s.useEffect(() => {\n    const p = Je(o).subscribe(a);\n    return () => p.unsubscribe();\n  }, [le(o)]), c;\n}\nfunction jt(e) {\n  const n = Q(e), t = s.useMemo(() => $e(n), [n]);\n  return D(t, n.isSpeaking);\n}\nfunction Oe(e = {}) {\n  const n = U(e.room), [t, r] = s.useState(n.localParticipant), [o, c] = s.useState(\n    t.isMicrophoneEnabled\n  ), [a, i] = s.useState(t.isCameraEnabled), [u, p] = s.useState(\n    t.isScreenShareEnabled\n  ), [h, d] = s.useState(\n    t.lastMicrophoneError\n  ), [l, v] = s.useState(t.lastCameraError), [C, k] = s.useState(\n    void 0\n  ), [A, w] = s.useState(void 0), O = (R) => {\n    i(R.isCameraEnabled), c(R.isMicrophoneEnabled), p(R.isScreenShareEnabled), w(R.cameraTrack), k(R.microphoneTrack), d(R.participant.lastMicrophoneError), v(R.participant.lastCameraError), r(R.participant);\n  };\n  return s.useEffect(() => {\n    const R = Qe(n.localParticipant).subscribe(O);\n    return () => R.unsubscribe();\n  }, [n]), {\n    isMicrophoneEnabled: o,\n    isScreenShareEnabled: u,\n    isCameraEnabled: a,\n    microphoneTrack: C,\n    cameraTrack: A,\n    lastMicrophoneError: h,\n    lastCameraError: l,\n    localParticipant: t\n  };\n}\nfunction In() {\n  const e = oe(), n = s.useMemo(\n    () => Le(e.localParticipant),\n    [e]\n  );\n  return D(n, e.localParticipant.permissions);\n}\nfunction Nn({\n  kind: e,\n  room: n,\n  track: t,\n  requestPermissions: r,\n  onError: o\n}) {\n  const c = de(), a = s.useMemo(() => n ?? c ?? new De(), [n, c]), i = s.useMemo(\n    () => Ae(e, o, r),\n    [e, r, o]\n  ), u = D(i, []), [p, h] = s.useState(\n    (a == null ? void 0 : a.getActiveDevice(e)) ?? \"default\"\n  ), { className: d, activeDeviceObservable: l, setActiveMediaDevice: v } = s.useMemo(\n    () => Ke(e, a),\n    [e, a, t]\n  );\n  return s.useEffect(() => {\n    const C = l.subscribe((k) => {\n      k && (V.info(\"setCurrentDeviceId\", k), h(k));\n    });\n    return () => {\n      C == null || C.unsubscribe();\n    };\n  }, [l]), { devices: u, className: d, activeDeviceId: p, setActiveMediaDevice: v };\n}\nfunction _n({\n  kind: e,\n  onError: n\n}) {\n  const t = s.useMemo(\n    () => Ae(e, n),\n    [e, n]\n  );\n  return D(t, []);\n}\nfunction zt(e, n, t = {}) {\n  const r = s.useRef([]), o = s.useRef(-1), c = n !== o.current, a = typeof t.customSortFunction == \"function\" ? t.customSortFunction(e) : Ye(e);\n  let i = [...a];\n  if (c === !1)\n    try {\n      i = Xe(r.current, a, n);\n    } catch (u) {\n      V.error(\"Error while running updatePages(): \", u);\n    }\n  return c ? r.current = a : r.current = i, o.current = n, i;\n}\nfunction Fn(e, n) {\n  const [t, r] = s.useState(1), o = Math.max(Math.ceil(n.length / e), 1);\n  t > o && r(o);\n  const c = t * e, a = c - e, i = (d) => {\n    r((l) => d === \"next\" ? l === o ? l : l + 1 : l === 1 ? l : l - 1);\n  }, u = (d) => {\n    d > o ? r(o) : d < 1 ? r(1) : r(d);\n  }, h = zt(n, e).slice(a, c);\n  return {\n    totalPageCount: o,\n    nextPage: () => i(\"next\"),\n    prevPage: () => i(\"previous\"),\n    setPage: u,\n    firstItemIndex: a,\n    lastItemIndex: c,\n    tracks: h,\n    currentPage: t\n  };\n}\nfunction xn(e = {}) {\n  let n = fe();\n  e.participant && (n = e.participant);\n  const t = s.useMemo(() => Ze(n), [n]), { identity: r, name: o, metadata: c } = D(t, {\n    name: n == null ? void 0 : n.name,\n    identity: n == null ? void 0 : n.identity,\n    metadata: n == null ? void 0 : n.metadata\n  });\n  return { identity: r, name: o, metadata: c };\n}\nfunction Un(e = {}) {\n  const n = Q(e.participant), t = s.useMemo(() => Le(n), [n]);\n  return D(t, n.permissions);\n}\nfunction Hn({\n  trackRef: e,\n  onParticipantClick: n,\n  disableSpeakingIndicator: t,\n  htmlProps: r\n}) {\n  const o = ue(e), c = s.useMemo(() => {\n    const { className: l } = et();\n    return G(r, {\n      className: l,\n      onClick: (v) => {\n        var C;\n        if ((C = r.onClick) == null || C.call(r, v), typeof n == \"function\") {\n          const k = o.publication ?? o.participant.getTrackPublication(o.source);\n          n({ participant: o.participant, track: k });\n        }\n      }\n    });\n  }, [\n    r,\n    n,\n    o.publication,\n    o.source,\n    o.participant\n  ]), a = o.participant.getTrackPublication(E.Source.Microphone), i = s.useMemo(() => ({\n    participant: o.participant,\n    source: E.Source.Microphone,\n    publication: a\n  }), [a, o.participant]), u = Se(o), p = Se(i), h = jt(o.participant), d = Bt(o);\n  return {\n    elementProps: {\n      \"data-lk-audio-muted\": p,\n      \"data-lk-video-muted\": u,\n      \"data-lk-speaking\": t === !0 ? !1 : h,\n      \"data-lk-local-participant\": o.participant.isLocal,\n      \"data-lk-source\": o.source,\n      \"data-lk-facing-mode\": d,\n      ...c\n    }\n  };\n}\nfunction pe(e = {}) {\n  const n = U(e.room), [t, r] = s.useState([]);\n  return s.useEffect(() => {\n    const o = tt(n, {\n      additionalRoomEvents: e.updateOnlyOn\n    }).subscribe(r);\n    return () => o.unsubscribe();\n  }, [n, JSON.stringify(e.updateOnlyOn)]), t;\n}\nfunction Wt(e = {}) {\n  const n = pe(e), { localParticipant: t } = Oe(e);\n  return s.useMemo(\n    () => [t, ...n],\n    [t, n]\n  );\n}\nfunction Vn(e) {\n  return e = nt(e), s.useMemo(() => (e == null ? void 0 : e.pin.state) !== void 0 && e.pin.state.length >= 1 ? e.pin.state : [], [e.pin.state]);\n}\nfunction qn(e, n = {}) {\n  const t = oe(), [r] = s.useState(n.updateOnlyOn), o = s.useMemo(() => typeof e == \"string\" ? st(t, e, {\n    additionalEvents: r\n  }) : rt(t, e, {\n    additionalEvents: r\n  }), [t, JSON.stringify(e), r]), [c, a] = s.useState({\n    p: void 0\n  });\n  return s.useEffect(() => {\n    const i = o.subscribe((u) => a({ p: u }));\n    return () => i.unsubscribe();\n  }, [o]), c.p;\n}\nfunction Bn(e = {}) {\n  const n = U(e.room), t = s.useMemo(() => ot(n), [n]), { name: r, metadata: o } = D(t, {\n    name: n.name,\n    metadata: n.metadata\n  });\n  return { name: r, metadata: o };\n}\nfunction Gt(e) {\n  const n = U(e == null ? void 0 : e.room), t = s.useMemo(() => at(n), [n]);\n  return D(t, n.activeSpeakers);\n}\nfunction jn(e) {\n  const [n, t] = s.useState(\n    ve(e)\n  ), r = Gt();\n  return s.useEffect(() => {\n    t(ve(e));\n  }, [r, e]), n;\n}\nfunction zn({ room: e, props: n }) {\n  const t = U(e), { className: r, roomAudioPlaybackAllowedObservable: o, handleStartAudioPlayback: c } = s.useMemo(\n    () => ct(),\n    []\n  ), a = s.useMemo(\n    () => o(t),\n    [t, o]\n  ), { canPlayAudio: i } = D(a, {\n    canPlayAudio: t.canPlaybackAudio\n  });\n  return { mergedProps: s.useMemo(\n    () => G(n, {\n      className: r,\n      onClick: () => {\n        c(t);\n      },\n      style: { display: i ? \"none\" : \"block\" }\n    }),\n    [n, r, i, c, t]\n  ), canPlayAudio: i };\n}\nfunction Wn({ room: e, props: n }) {\n  const t = U(e), { className: r, roomVideoPlaybackAllowedObservable: o, handleStartVideoPlayback: c } = s.useMemo(\n    () => it(),\n    []\n  ), a = s.useMemo(\n    () => o(t),\n    [t, o]\n  ), { canPlayVideo: i } = D(a, {\n    canPlayVideo: t.canPlaybackVideo\n  });\n  return { mergedProps: s.useMemo(\n    () => G(n, {\n      className: r,\n      onClick: () => {\n        c(t);\n      },\n      style: { display: i ? \"none\" : \"block\" }\n    }),\n    [n, r, i, c, t]\n  ), canPlayVideo: i };\n}\nfunction Gn(e, n = {}) {\n  const t = s.useRef(null), r = s.useRef(null), o = n.minSwipeDistance ?? 50, c = (u) => {\n    r.current = null, t.current = u.targetTouches[0].clientX;\n  }, a = (u) => {\n    r.current = u.targetTouches[0].clientX;\n  }, i = s.useCallback(() => {\n    if (!t.current || !r.current)\n      return;\n    const u = t.current - r.current, p = u > o, h = u < -o;\n    p && n.onLeftSwipe && n.onLeftSwipe(), h && n.onRightSwipe && n.onRightSwipe();\n  }, [o, n]);\n  s.useEffect(() => {\n    const u = e.current;\n    return u && (u.addEventListener(\"touchstart\", c, { passive: !0 }), u.addEventListener(\"touchmove\", a, { passive: !0 }), u.addEventListener(\"touchend\", i, { passive: !0 })), () => {\n      u && (u.removeEventListener(\"touchstart\", c), u.removeEventListener(\"touchmove\", a), u.removeEventListener(\"touchend\", i));\n    };\n  }, [e, i]);\n}\nfunction Jn({ props: e }) {\n  const { dispatch: n, state: t } = Pe().widget, { className: r } = s.useMemo(() => ut(), []);\n  return { mergedProps: s.useMemo(() => G(e, {\n    className: r,\n    onClick: () => {\n      n && n({ msg: \"toggle_chat\" });\n    },\n    \"aria-pressed\": t != null && t.showChat ? \"true\" : \"false\",\n    \"data-lk-unread-msgs\": t ? t.unreadMessages < 10 ? t.unreadMessages.toFixed(0) : \"9+\" : \"0\"\n  }), [e, r, n, t]) };\n}\nfunction $n(e, n, t = {}) {\n  const [r, o] = s.useState(void 0);\n  return s.useEffect(() => {\n    var a;\n    if (e === void 0)\n      throw Error(\"token endpoint needs to be defined\");\n    if (((a = t.userInfo) == null ? void 0 : a.identity) === void 0)\n      return;\n    (async () => {\n      V.debug(\"fetching token\");\n      const i = new URLSearchParams({ ...t.userInfo, roomName: n }), u = await fetch(`${e}?${i.toString()}`);\n      if (!u.ok) {\n        V.error(\n          `Could not fetch token. Server responded with status ${u.status}: ${u.statusText}`\n        );\n        return;\n      }\n      const { accessToken: p } = await u.json();\n      o(p);\n    })();\n  }, [e, n, JSON.stringify(t)]), r;\n}\nfunction Qn(e) {\n  var c, a;\n  const n = ue(e), { className: t, mediaMutedObserver: r } = s.useMemo(\n    () => lt(n),\n    [le(n)]\n  );\n  return { isMuted: D(\n    r,\n    !!((c = n.publication) != null && c.isMuted || (a = n.participant.getTrackPublication(n.source)) != null && a.isMuted)\n  ), className: t };\n}\nfunction Kn({\n  source: e,\n  onChange: n,\n  initialState: t,\n  captureOptions: r,\n  publishOptions: o,\n  onDeviceError: c,\n  room: a,\n  ...i\n}) {\n  var m;\n  const u = de(), p = s.useMemo(() => a ?? u, [a, u]), h = (m = p == null ? void 0 : p.localParticipant) == null ? void 0 : m.getTrackPublication(e), d = s.useRef(!1), { toggle: l, className: v, pendingObserver: C, enabledObserver: k } = s.useMemo(\n    () => p ? dt(e, p, r, o, c) : ft(),\n    [p, e, JSON.stringify(r), o]\n  ), A = D(C, !1), w = D(k, t ?? !!(h != null && h.isEnabled));\n  s.useEffect(() => {\n    n == null || n(w, d.current), d.current = !1;\n  }, [w, n]), s.useEffect(() => {\n    t !== void 0 && (V.debug(\"forcing initial toggle state\", e, t), l(t));\n  }, []);\n  const O = s.useMemo(() => G(i, { className: v }), [i, v]), R = s.useCallback(\n    (f) => {\n      var b;\n      d.current = !0, l().catch(() => d.current = !1), (b = i.onClick) == null || b.call(i, f);\n    },\n    [i, l]\n  );\n  return {\n    toggle: l,\n    enabled: w,\n    pending: A,\n    track: h,\n    buttonProps: {\n      ...O,\n      \"aria-pressed\": w,\n      \"data-lk-source\": e,\n      \"data-lk-enabled\": w,\n      disabled: A,\n      onClick: R\n    }\n  };\n}\nfunction Yn(e = [\n  E.Source.Camera,\n  E.Source.Microphone,\n  E.Source.ScreenShare,\n  E.Source.ScreenShareAudio,\n  E.Source.Unknown\n], n = {}) {\n  const t = U(n.room), [r, o] = s.useState([]), [c, a] = s.useState([]), i = s.useMemo(() => e.map((p) => mt(p) ? p.source : p), [JSON.stringify(e)]);\n  return s.useEffect(() => {\n    const p = pt(t, i, {\n      additionalRoomEvents: n.updateOnlyOn,\n      onlySubscribed: n.onlySubscribed\n    }).subscribe(({ trackReferences: h, participants: d }) => {\n      V.debug(\"setting track bundles\", h, d), o(h), a(d);\n    });\n    return () => p.unsubscribe();\n  }, [\n    t,\n    JSON.stringify(n.onlySubscribed),\n    JSON.stringify(n.updateOnlyOn),\n    JSON.stringify(e)\n  ]), s.useMemo(() => {\n    if (Re(e)) {\n      const p = $t(e, c), h = Array.from(r);\n      return c.forEach((d) => {\n        p.has(d.identity) && (p.get(d.identity) ?? []).forEach((v) => {\n          if (r.find(\n            ({ participant: k, publication: A }) => d.identity === k.identity && A.source === v\n          ))\n            return;\n          V.debug(\n            `Add ${v} placeholder for participant ${d.identity}.`\n          );\n          const C = {\n            participant: d,\n            source: v\n          };\n          h.push(C);\n        });\n      }), h;\n    } else\n      return r;\n  }, [r, c, e]);\n}\nfunction Jt(e, n) {\n  const t = new Set(e);\n  for (const r of n)\n    t.delete(r);\n  return t;\n}\nfunction $t(e, n) {\n  const t = /* @__PURE__ */ new Map();\n  if (Re(e)) {\n    const r = e.filter((o) => o.withPlaceholder).map((o) => o.source);\n    n.forEach((o) => {\n      const c = o.getTrackPublications().map((i) => {\n        var u;\n        return (u = i.track) == null ? void 0 : u.source;\n      }).filter((i) => i !== void 0), a = Array.from(\n        Jt(new Set(r), new Set(c))\n      );\n      a.length > 0 && t.set(o.identity, a);\n    });\n  }\n  return t;\n}\nfunction Qt(e) {\n  const [n, t] = s.useState(ht(e)), { trackObserver: r } = s.useMemo(() => bt(e), [e.participant.sid ?? e.participant.identity, e.source]);\n  return s.useEffect(() => {\n    const o = r.subscribe((c) => {\n      t(c);\n    });\n    return () => o == null ? void 0 : o.unsubscribe();\n  }, [r]), {\n    participant: e.participant,\n    source: e.source ?? E.Source.Unknown,\n    publication: n\n  };\n}\nfunction Xn(e, n) {\n  const t = Q(n);\n  return Qt({ name: e, participant: t });\n}\nfunction Kt(e) {\n  const n = U(e == null ? void 0 : e.room), t = te(n), r = s.useMemo(\n    () => t === I.Disconnected,\n    [t]\n  ), o = s.useMemo(\n    () => gt(n, e),\n    [n, e, r]\n  ), c = D(o.isSendingObservable, !1), a = D(o.messageObservable, []);\n  return { send: o.send, chatMessages: a, isSending: c };\n}\nfunction Zn(e = {}) {\n  const [n, t] = s.useState(\n    vt(e.defaults, e.preventLoad ?? !1)\n  ), r = s.useCallback((u) => {\n    t((p) => ({ ...p, audioEnabled: u }));\n  }, []), o = s.useCallback((u) => {\n    t((p) => ({ ...p, videoEnabled: u }));\n  }, []), c = s.useCallback((u) => {\n    t((p) => ({ ...p, audioDeviceId: u }));\n  }, []), a = s.useCallback((u) => {\n    t((p) => ({ ...p, videoDeviceId: u }));\n  }, []), i = s.useCallback((u) => {\n    t((p) => ({ ...p, username: u }));\n  }, []);\n  return s.useEffect(() => {\n    St(n, e.preventSave ?? !1);\n  }, [n, e.preventSave]), {\n    userChoices: n,\n    saveAudioInputEnabled: r,\n    saveVideoInputEnabled: o,\n    saveAudioInputDeviceId: c,\n    saveVideoInputDeviceId: a,\n    saveUsername: i\n  };\n}\nfunction es(e, n = {}) {\n  const t = Q(e), r = U(n.room), o = s.useMemo(() => yt(r, t), [r, t]);\n  return D(\n    o,\n    t.isLocal ? t.isE2EEEnabled : !!(t != null && t.isEncrypted)\n  );\n}\nfunction ts(e, n = { fftSize: 32, smoothingTimeConstant: 0 }) {\n  const t = Ct(e) ? e.publication.track : e, [r, o] = s.useState(0);\n  return s.useEffect(() => {\n    if (!t || !t.mediaStream)\n      return;\n    const { cleanup: c, analyser: a } = me(t, n), i = a.frequencyBinCount, u = new Uint8Array(i), h = setInterval(() => {\n      a.getByteFrequencyData(u);\n      let d = 0;\n      for (let l = 0; l < u.length; l++) {\n        const v = u[l];\n        d += v * v;\n      }\n      o(Math.sqrt(d / u.length) / 255);\n    }, 1e3 / 30);\n    return () => {\n      c(), clearInterval(h);\n    };\n  }, [t, t == null ? void 0 : t.mediaStream, JSON.stringify(n)]), r;\n}\nconst Yt = (e) => {\n  const n = (t) => {\n    let c = 1 - Math.max(-100, Math.min(-10, t)) * -1 / 100;\n    return c = Math.sqrt(c), c;\n  };\n  return e.map((t) => t === -1 / 0 ? 0 : n(t));\n}, Xt = {\n  bands: 5,\n  loPass: 100,\n  hiPass: 600,\n  updateInterval: 32,\n  analyserOptions: { fftSize: 2048 }\n};\nfunction ns(e, n = {}) {\n  var a;\n  const t = e instanceof E ? e : (a = e == null ? void 0 : e.publication) == null ? void 0 : a.track, r = { ...Xt, ...n }, [o, c] = s.useState(\n    new Array(r.bands).fill(0)\n  );\n  return s.useEffect(() => {\n    if (!t || !(t != null && t.mediaStream)) {\n      c((v) => v.slice().fill(0));\n      return;\n    }\n    const { analyser: i, cleanup: u } = me(t, r.analyserOptions), p = i.frequencyBinCount, h = new Float32Array(p), l = setInterval(() => {\n      i.getFloatFrequencyData(h);\n      let v = new Float32Array(h.length);\n      for (let w = 0; w < h.length; w++)\n        v[w] = h[w];\n      v = v.slice(n.loPass, n.hiPass);\n      const C = Yt(v), k = Math.ceil(C.length / r.bands), A = [];\n      for (let w = 0; w < r.bands; w++) {\n        const O = C.slice(w * k, (w + 1) * k).reduce((R, m) => R += m, 0);\n        A.push(O / k);\n      }\n      c(A);\n    }, r.updateInterval);\n    return () => {\n      u(), clearInterval(l);\n    };\n  }, [t, t == null ? void 0 : t.mediaStream, JSON.stringify(n)]), o;\n}\nconst Zt = {\n  barCount: 120,\n  volMultiplier: 5,\n  updateInterval: 20\n};\nfunction ss(e, n = {}) {\n  var h;\n  const t = e instanceof E ? e : (h = e == null ? void 0 : e.publication) == null ? void 0 : h.track, r = { ...Zt, ...n }, o = s.useRef(new Float32Array()), c = s.useRef(performance.now()), a = s.useRef(0), [i, u] = s.useState([]), p = s.useCallback((d) => {\n    u(\n      Array.from(\n        tn(d, r.barCount).map((l) => Math.sqrt(l) * r.volMultiplier)\n        // wave.slice(0, opts.barCount).map((v) => sigmoid(v * opts.volMultiplier, 0.08, 0.2)),\n      )\n    );\n  }, []);\n  return s.useEffect(() => {\n    if (!t || !(t != null && t.mediaStream))\n      return;\n    const { analyser: d, cleanup: l } = me(t, {\n      fftSize: ye(r.barCount)\n    }), v = ye(r.barCount), C = new Float32Array(v), k = () => {\n      if (A = requestAnimationFrame(k), d.getFloatTimeDomainData(C), o.current.map((w, O) => w + C[O]), a.current += 1, performance.now() - c.current >= r.updateInterval) {\n        const w = C.map((O) => O / a.current);\n        p(w), c.current = performance.now(), a.current = 0;\n      }\n    };\n    let A = requestAnimationFrame(k);\n    return () => {\n      l(), cancelAnimationFrame(A);\n    };\n  }, [t, t == null ? void 0 : t.mediaStream, JSON.stringify(n), p]), {\n    bars: i\n  };\n}\nfunction ye(e) {\n  return e < 32 ? 32 : en(e);\n}\nfunction en(e) {\n  let n = 2;\n  for (; e >>= 1; )\n    n <<= 1;\n  return n;\n}\nfunction tn(e, n) {\n  const t = Math.floor(e.length / n), r = new Float32Array(n);\n  for (let o = 0; o < n; o++) {\n    const c = t * o;\n    let a = 0;\n    for (let i = 0; i < t; i++)\n      a = a + Math.abs(e[c + i]);\n    r[o] = a / t;\n  }\n  return r;\n}\nfunction re(e, n = {}) {\n  let t, r;\n  typeof n == \"string\" ? t = n : (t = n == null ? void 0 : n.participantIdentity, r = n == null ? void 0 : n.room);\n  const o = fe(), c = Wt({ room: r, updateOnlyOn: [] }), a = s.useMemo(() => t ? c.find((p) => p.identity === t) : o, [t, c, o]), i = s.useMemo(() => {\n    if (a)\n      return Mt(a, { sources: e });\n  }, [a, JSON.stringify(e)]);\n  return D(i, []);\n}\nfunction nn(e) {\n  var t, r, o;\n  const n = s.useMemo(\n    () => {\n      var c;\n      return (c = e == null ? void 0 : e.publication) != null && c.track ? Tt(e == null ? void 0 : e.publication.track) : void 0;\n    },\n    [(t = e == null ? void 0 : e.publication) == null ? void 0 : t.track]\n  );\n  return D(n, {\n    timestamp: Date.now(),\n    rtpTimestamp: (o = (r = e == null ? void 0 : e.publication) == null ? void 0 : r.track) == null ? void 0 : o.rtpTimestamp\n  });\n}\nconst sn = {\n  bufferSize: 100\n  // maxAge: 2_000,\n};\nfunction rn(e, n) {\n  const t = { ...sn, ...n }, [r, o] = s.useState([]), c = nn(e), a = (i) => {\n    var u;\n    (u = t.onTranscription) == null || u.call(t, i), o(\n      (p) => kt(\n        p,\n        // when first receiving a segment, add the current media timestamp to it\n        i.map((h) => wt(h, c)),\n        t.bufferSize\n      )\n    );\n  };\n  return s.useEffect(() => {\n    if (!(e != null && e.publication))\n      return;\n    const i = Et(e.publication).subscribe((u) => {\n      a(...u);\n    });\n    return () => {\n      i.unsubscribe();\n    };\n  }, [e && le(e), a]), { segments: r };\n}\nfunction on(e = {}) {\n  const n = fe(), t = e.participant ?? n, r = s.useMemo(\n    // weird typescript constraint\n    () => t ? ie(t) : ie(t),\n    [t]\n  );\n  return D(r, {\n    attributes: t == null ? void 0 : t.attributes\n  });\n}\nfunction rs(e, n = {}) {\n  const t = Q(n.participant), [r, o] = s.useState(t.attributes[e]);\n  return s.useEffect(() => {\n    if (!t)\n      return;\n    const c = ie(t).subscribe((a) => {\n      a.changed[e] !== void 0 && o(a.attributes[e]);\n    });\n    return () => {\n      c.unsubscribe();\n    };\n  }, [t, e]), r;\n}\nconst Ce = W.AgentState;\nfunction os() {\n  const e = pe(), n = e.find(\n    (d) => d.kind === se.AGENT && !(W.PublishOnBehalf in d.attributes)\n  ), t = e.find(\n    (d) => d.kind === se.AGENT && d.attributes[W.PublishOnBehalf] === (n == null ? void 0 : n.identity)\n  ), r = re(\n    [E.Source.Microphone, E.Source.Camera],\n    n == null ? void 0 : n.identity\n  ), o = re(\n    [E.Source.Microphone, E.Source.Camera],\n    t == null ? void 0 : t.identity\n  ), c = r.find((d) => d.source === E.Source.Microphone) ?? o.find((d) => d.source === E.Source.Microphone), a = r.find((d) => d.source === E.Source.Camera) ?? o.find((d) => d.source === E.Source.Camera), { segments: i } = rn(c), u = te(), { attributes: p } = on({ participant: n }), h = s.useMemo(() => u === I.Disconnected ? \"disconnected\" : u === I.Connecting || !n || !(p != null && p[Ce]) ? \"connecting\" : p[Ce], [p, n, u]);\n  return {\n    agent: n,\n    state: h,\n    audioTrack: c,\n    videoTrack: a,\n    agentTranscriptions: i,\n    agentAttributes: p\n  };\n}\nfunction as(e) {\n  const n = U(e), t = te(n), r = s.useMemo(() => Pt(n), [n, t]);\n  return D(r, n.isRecording);\n}\nfunction an(e, n) {\n  const t = U(n == null ? void 0 : n.room), o = te(t) === I.Disconnected, c = s.useMemo(() => Lt(t, e), [t, e]);\n  return { textStreams: D(o ? void 0 : c, []) };\n}\nfunction cn(e) {\n  const { participantIdentities: n, trackSids: t } = e ?? {}, { textStreams: r } = an(At.TRANSCRIPTION, { room: e == null ? void 0 : e.room });\n  return s.useMemo(\n    () => r.filter(\n      (c) => n ? n.includes(c.participantInfo.identity) : !0\n    ).filter(\n      (c) => {\n        var a;\n        return t ? t.includes(\n          ((a = c.streamInfo.attributes) == null ? void 0 : a[W.TranscribedTrackId]) ?? \"\"\n        ) : !0;\n      }\n    ),\n    [r, n, t]\n  );\n}\nconst Me = 2, Te = 400, Ee = 3, ke = 1e3;\nfunction cs(e) {\n  const n = ae([]), t = Ne(() => new Nt(), []), r = ee(async () => t.lock().then(async (h) => {\n    for (; ; ) {\n      const d = n.current.pop();\n      if (!d) {\n        h();\n        break;\n      }\n      switch (d.type) {\n        case \"connect\":\n          await d.room.connect(...d.args).then(d.resolve).catch(d.reject);\n          break;\n        case \"disconnect\":\n          await d.room.disconnect(...d.args).then(d.resolve).catch(d.reject);\n          break;\n      }\n    }\n  }), []), o = ae([]), c = ee((h) => {\n    let d = 0;\n    o.current = o.current.filter((l) => {\n      const v = h.getTime() - l.getTime() < ke;\n      return v && (d += 1), v;\n    }), d > Ee && V.warn(\n      `useSequentialRoomConnectDisconnect: room changed reference rapidly (over ${Ee}x in ${ke}ms). This is not recommended.`\n    );\n  }, []);\n  _e(() => {\n    n.current = [];\n    const h = /* @__PURE__ */ new Date();\n    o.current.push(h), c(h);\n  }, [e, c]);\n  const a = ae([]), i = ee((h) => {\n    let d = 0;\n    a.current = a.current.filter((l) => {\n      const v = h.getTime() - l.getTime() < Te;\n      return v && (d += 1), v;\n    }), d > Me && V.warn(\n      `useSequentialRoomConnectDisconnect: room connect / disconnect occurring in rapid sequence (over ${Me}x in ${Te}ms). This is not recommended and may be the sign of a bug like a useEffect dependency changing every render.`\n    );\n  }, []), u = ee(\n    async (...h) => new Promise((d, l) => {\n      if (!e)\n        throw new Error(\"Called connect(), but room was unset\");\n      const v = /* @__PURE__ */ new Date();\n      i(v), n.current.push({ type: \"connect\", room: e, args: h, resolve: d, reject: l }), a.current.push(v), r();\n    }),\n    [e, i, r]\n  ), p = ee(\n    async (...h) => new Promise((d, l) => {\n      if (!e)\n        throw new Error(\"Called discconnect(), but room was unset\");\n      const v = /* @__PURE__ */ new Date();\n      i(v), n.current.push({ type: \"disconnect\", room: e, args: h, resolve: d, reject: l }), a.current.push(v), r();\n    }),\n    [e, i, r]\n  );\n  return {\n    connect: e ? u : null,\n    disconnect: e ? p : null\n  };\n}\nvar ne = { exports: {} }, we;\nfunction un() {\n  if (we) return ne.exports;\n  we = 1;\n  var e = typeof Reflect == \"object\" ? Reflect : null, n = e && typeof e.apply == \"function\" ? e.apply : function(f, b, g) {\n    return Function.prototype.apply.call(f, b, g);\n  }, t;\n  e && typeof e.ownKeys == \"function\" ? t = e.ownKeys : Object.getOwnPropertySymbols ? t = function(f) {\n    return Object.getOwnPropertyNames(f).concat(Object.getOwnPropertySymbols(f));\n  } : t = function(f) {\n    return Object.getOwnPropertyNames(f);\n  };\n  function r(m) {\n    console && console.warn && console.warn(m);\n  }\n  var o = Number.isNaN || function(f) {\n    return f !== f;\n  };\n  function c() {\n    c.init.call(this);\n  }\n  ne.exports = c, ne.exports.once = w, c.EventEmitter = c, c.prototype._events = void 0, c.prototype._eventsCount = 0, c.prototype._maxListeners = void 0;\n  var a = 10;\n  function i(m) {\n    if (typeof m != \"function\")\n      throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof m);\n  }\n  Object.defineProperty(c, \"defaultMaxListeners\", {\n    enumerable: !0,\n    get: function() {\n      return a;\n    },\n    set: function(m) {\n      if (typeof m != \"number\" || m < 0 || o(m))\n        throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + m + \".\");\n      a = m;\n    }\n  }), c.init = function() {\n    (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) && (this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;\n  }, c.prototype.setMaxListeners = function(f) {\n    if (typeof f != \"number\" || f < 0 || o(f))\n      throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + f + \".\");\n    return this._maxListeners = f, this;\n  };\n  function u(m) {\n    return m._maxListeners === void 0 ? c.defaultMaxListeners : m._maxListeners;\n  }\n  c.prototype.getMaxListeners = function() {\n    return u(this);\n  }, c.prototype.emit = function(f) {\n    for (var b = [], g = 1; g < arguments.length; g++) b.push(arguments[g]);\n    var y = f === \"error\", T = this._events;\n    if (T !== void 0)\n      y = y && T.error === void 0;\n    else if (!y)\n      return !1;\n    if (y) {\n      var M;\n      if (b.length > 0 && (M = b[0]), M instanceof Error)\n        throw M;\n      var P = new Error(\"Unhandled error.\" + (M ? \" (\" + M.message + \")\" : \"\"));\n      throw P.context = M, P;\n    }\n    var F = T[f];\n    if (F === void 0)\n      return !1;\n    if (typeof F == \"function\")\n      n(F, this, b);\n    else\n      for (var q = F.length, J = C(F, q), g = 0; g < q; ++g)\n        n(J[g], this, b);\n    return !0;\n  };\n  function p(m, f, b, g) {\n    var y, T, M;\n    if (i(b), T = m._events, T === void 0 ? (T = m._events = /* @__PURE__ */ Object.create(null), m._eventsCount = 0) : (T.newListener !== void 0 && (m.emit(\n      \"newListener\",\n      f,\n      b.listener ? b.listener : b\n    ), T = m._events), M = T[f]), M === void 0)\n      M = T[f] = b, ++m._eventsCount;\n    else if (typeof M == \"function\" ? M = T[f] = g ? [b, M] : [M, b] : g ? M.unshift(b) : M.push(b), y = u(m), y > 0 && M.length > y && !M.warned) {\n      M.warned = !0;\n      var P = new Error(\"Possible EventEmitter memory leak detected. \" + M.length + \" \" + String(f) + \" listeners added. Use emitter.setMaxListeners() to increase limit\");\n      P.name = \"MaxListenersExceededWarning\", P.emitter = m, P.type = f, P.count = M.length, r(P);\n    }\n    return m;\n  }\n  c.prototype.addListener = function(f, b) {\n    return p(this, f, b, !1);\n  }, c.prototype.on = c.prototype.addListener, c.prototype.prependListener = function(f, b) {\n    return p(this, f, b, !0);\n  };\n  function h() {\n    if (!this.fired)\n      return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, arguments.length === 0 ? this.listener.call(this.target) : this.listener.apply(this.target, arguments);\n  }\n  function d(m, f, b) {\n    var g = { fired: !1, wrapFn: void 0, target: m, type: f, listener: b }, y = h.bind(g);\n    return y.listener = b, g.wrapFn = y, y;\n  }\n  c.prototype.once = function(f, b) {\n    return i(b), this.on(f, d(this, f, b)), this;\n  }, c.prototype.prependOnceListener = function(f, b) {\n    return i(b), this.prependListener(f, d(this, f, b)), this;\n  }, c.prototype.removeListener = function(f, b) {\n    var g, y, T, M, P;\n    if (i(b), y = this._events, y === void 0)\n      return this;\n    if (g = y[f], g === void 0)\n      return this;\n    if (g === b || g.listener === b)\n      --this._eventsCount === 0 ? this._events = /* @__PURE__ */ Object.create(null) : (delete y[f], y.removeListener && this.emit(\"removeListener\", f, g.listener || b));\n    else if (typeof g != \"function\") {\n      for (T = -1, M = g.length - 1; M >= 0; M--)\n        if (g[M] === b || g[M].listener === b) {\n          P = g[M].listener, T = M;\n          break;\n        }\n      if (T < 0)\n        return this;\n      T === 0 ? g.shift() : k(g, T), g.length === 1 && (y[f] = g[0]), y.removeListener !== void 0 && this.emit(\"removeListener\", f, P || b);\n    }\n    return this;\n  }, c.prototype.off = c.prototype.removeListener, c.prototype.removeAllListeners = function(f) {\n    var b, g, y;\n    if (g = this._events, g === void 0)\n      return this;\n    if (g.removeListener === void 0)\n      return arguments.length === 0 ? (this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0) : g[f] !== void 0 && (--this._eventsCount === 0 ? this._events = /* @__PURE__ */ Object.create(null) : delete g[f]), this;\n    if (arguments.length === 0) {\n      var T = Object.keys(g), M;\n      for (y = 0; y < T.length; ++y)\n        M = T[y], M !== \"removeListener\" && this.removeAllListeners(M);\n      return this.removeAllListeners(\"removeListener\"), this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0, this;\n    }\n    if (b = g[f], typeof b == \"function\")\n      this.removeListener(f, b);\n    else if (b !== void 0)\n      for (y = b.length - 1; y >= 0; y--)\n        this.removeListener(f, b[y]);\n    return this;\n  };\n  function l(m, f, b) {\n    var g = m._events;\n    if (g === void 0)\n      return [];\n    var y = g[f];\n    return y === void 0 ? [] : typeof y == \"function\" ? b ? [y.listener || y] : [y] : b ? A(y) : C(y, y.length);\n  }\n  c.prototype.listeners = function(f) {\n    return l(this, f, !0);\n  }, c.prototype.rawListeners = function(f) {\n    return l(this, f, !1);\n  }, c.listenerCount = function(m, f) {\n    return typeof m.listenerCount == \"function\" ? m.listenerCount(f) : v.call(m, f);\n  }, c.prototype.listenerCount = v;\n  function v(m) {\n    var f = this._events;\n    if (f !== void 0) {\n      var b = f[m];\n      if (typeof b == \"function\")\n        return 1;\n      if (b !== void 0)\n        return b.length;\n    }\n    return 0;\n  }\n  c.prototype.eventNames = function() {\n    return this._eventsCount > 0 ? t(this._events) : [];\n  };\n  function C(m, f) {\n    for (var b = new Array(f), g = 0; g < f; ++g)\n      b[g] = m[g];\n    return b;\n  }\n  function k(m, f) {\n    for (; f + 1 < m.length; f++)\n      m[f] = m[f + 1];\n    m.pop();\n  }\n  function A(m) {\n    for (var f = new Array(m.length), b = 0; b < f.length; ++b)\n      f[b] = m[b].listener || m[b];\n    return f;\n  }\n  function w(m, f) {\n    return new Promise(function(b, g) {\n      function y(M) {\n        m.removeListener(f, T), g(M);\n      }\n      function T() {\n        typeof m.removeListener == \"function\" && m.removeListener(\"error\", y), b([].slice.call(arguments));\n      }\n      R(m, f, T, { once: !0 }), f !== \"error\" && O(m, y, { once: !0 });\n    });\n  }\n  function O(m, f, b) {\n    typeof m.on == \"function\" && R(m, \"error\", f, b);\n  }\n  function R(m, f, b, g) {\n    if (typeof m.on == \"function\")\n      g.once ? m.once(f, b) : m.on(f, b);\n    else if (typeof m.addEventListener == \"function\")\n      m.addEventListener(f, function y(T) {\n        g.once && m.removeEventListener(f, y), b(T);\n      });\n    else\n      throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof m);\n  }\n  return ne.exports;\n}\nvar he = un();\nconst ln = 2e4;\nvar dn = /* @__PURE__ */ ((e) => (e.CameraChanged = \"cameraChanged\", e.MicrophoneChanged = \"microphoneChanged\", e.StateChanged = \"stateChanged\", e))(dn || {});\nconst x = (e) => ({\n  isConnected: e === \"listening\" || e === \"thinking\" || e === \"speaking\",\n  canListen: e === \"pre-connect-buffering\" || e === \"listening\" || e === \"thinking\" || e === \"speaking\",\n  isFinished: e === \"disconnected\" || e === \"failed\",\n  isPending: e === \"connecting\" || e === \"initializing\" || e === \"idle\"\n}), fn = () => {\n  const [e, n] = s.useState(\n    null\n  ), [t, r] = s.useState(\n    null\n  ), o = s.useRef(\"connecting\"), c = s.useRef(!1), a = (i) => setTimeout(() => {\n    if (!c.current) {\n      n(\"Agent did not join the room.\");\n      return;\n    }\n    const { isConnected: u } = x(o.current);\n    if (!u) {\n      n(\"Agent joined the room but did not complete initializing.\");\n      return;\n    }\n  }, i ?? ln);\n  return {\n    agentTimeoutFailureReason: e,\n    startAgentTimeout: s.useCallback(\n      (i) => {\n        t && clearTimeout(t), n(null), r(a(i)), o.current = \"connecting\", c.current = !1;\n      },\n      [t]\n    ),\n    clearAgentTimeout: s.useCallback(() => {\n      t && clearTimeout(t), n(null), r(null), o.current = \"connecting\", c.current = !1;\n    }, [t]),\n    clearAgentTimeoutFailureReason: s.useCallback(() => {\n      n(null);\n    }, []),\n    updateAgentTimeoutState: s.useCallback((i) => {\n      o.current = i;\n    }, []),\n    updateAgentTimeoutParticipantExists: s.useCallback((i) => {\n      c.current = i;\n    }, [])\n  };\n};\nfunction mn(e, n) {\n  const t = s.useRef(n);\n  s.useEffect(() => {\n    t.current = n;\n  }, [n]);\n  const r = s.useCallback(\n    async (a) => {\n      const { isConnected: i } = x(t.current);\n      if (!i)\n        return new Promise((u, p) => {\n          const h = (v) => {\n            const { isConnected: C } = x(v);\n            C && (l(), u());\n          }, d = () => {\n            l(), p(new Error(\"useAgent(/* ... */).waitUntilConnected - signal aborted\"));\n          }, l = () => {\n            e.off(\"stateChanged\", h), a == null || a.removeEventListener(\"abort\", d);\n          };\n          e.on(\"stateChanged\", h), a == null || a.addEventListener(\"abort\", d);\n        });\n    },\n    [e]\n  ), o = s.useCallback(\n    async (a) => {\n      const { canListen: i } = x(t.current);\n      if (!i)\n        return new Promise((u, p) => {\n          const h = (v) => {\n            const { canListen: C } = x(v);\n            C && (l(), u());\n          }, d = () => {\n            l(), p(new Error(\"useAgent(/* ... */).waitUntilCouldBeListening - signal aborted\"));\n          }, l = () => {\n            e.off(\"stateChanged\", h), a == null || a.removeEventListener(\"abort\", d);\n          };\n          e.on(\"stateChanged\", h), a == null || a.addEventListener(\"abort\", d);\n        });\n    },\n    [e]\n  ), c = s.useCallback(\n    async (a) => {\n      const { isFinished: i } = x(t.current);\n      if (!i)\n        return new Promise((u, p) => {\n          const h = (v) => {\n            const { isFinished: C } = x(v);\n            C && (l(), u());\n          }, d = () => {\n            l(), p(new Error(\"useAgent(/* ... */).waitUntilFinished - signal aborted\"));\n          }, l = () => {\n            e.off(\"stateChanged\", h), a == null || a.removeEventListener(\"abort\", d);\n          };\n          e.on(\"stateChanged\", h), a == null || a.addEventListener(\"abort\", d);\n        });\n    },\n    [e]\n  );\n  return { waitUntilConnected: r, waitUntilCouldBeListening: o, waitUntilFinished: c };\n}\nfunction Ie(e) {\n  const n = Rt();\n  if (e = e ?? n, !e)\n    throw new Error(\n      \"No session provided, make sure you are inside a Session context or pass the session explicitly\"\n    );\n  const {\n    room: t,\n    internal: {\n      agentConnectTimeoutMilliseconds: r,\n      agentTimeoutFailureReason: o,\n      startAgentTimeout: c,\n      clearAgentTimeout: a,\n      clearAgentTimeoutFailureReason: i,\n      updateAgentTimeoutState: u,\n      updateAgentTimeoutParticipantExists: p\n    }\n  } = e, h = s.useMemo(() => new he.EventEmitter(), []), d = pe({ room: t }), l = s.useMemo(() => d.find(\n    (S) => S.kind === se.AGENT && !(W.PublishOnBehalf in S.attributes)\n  ) ?? null, [d]), v = s.useMemo(() => l ? d.find(\n    (S) => S.kind === se.AGENT && S.attributes[W.PublishOnBehalf] === l.identity\n  ) ?? null : null, [l, d]), [C, k] = s.useState({});\n  s.useEffect(() => {\n    if (!l)\n      return;\n    const S = (_) => {\n      k(_);\n    };\n    return l.on(X.AttributesChanged, S), () => {\n      l.off(X.AttributesChanged, S);\n    };\n  }, [l, h]);\n  const A = re([E.Source.Camera, E.Source.Microphone], {\n    room: t,\n    participantIdentity: l == null ? void 0 : l.identity\n  }), w = re([E.Source.Camera, E.Source.Microphone], {\n    room: t,\n    participantIdentity: v == null ? void 0 : v.identity\n  }), O = s.useMemo(\n    () => A.find((S) => S.source === E.Source.Camera) ?? w.find((S) => S.source === E.Source.Camera),\n    [A, w]\n  );\n  s.useEffect(() => {\n    h.emit(\"cameraChanged\", O);\n  }, [h, O]);\n  const R = s.useMemo(\n    () => A.find((S) => S.source === E.Source.Microphone) ?? w.find((S) => S.source === E.Source.Microphone),\n    [A, w]\n  );\n  s.useEffect(() => {\n    h.emit(\"microphoneChanged\", R);\n  }, [h, R]);\n  const [m, f] = s.useState(t.state);\n  s.useEffect(() => {\n    const S = (_) => {\n      f(_);\n    };\n    return t.on(H.ConnectionStateChanged, S), () => {\n      t.off(H.ConnectionStateChanged, S);\n    };\n  }, [t]), s.useEffect(() => {\n    l && i();\n  }, [l]);\n  const [b, g] = s.useState(null);\n  s.useEffect(() => {\n    if (!l)\n      return;\n    const S = (_) => {\n      _.identity === (l == null ? void 0 : l.identity) && g(\"Agent left the room unexpectedly.\");\n    };\n    return t.on(H.ParticipantDisconnected, S), () => {\n      t.off(H.ParticipantDisconnected, S);\n    };\n  }, [l, t]), s.useEffect(() => {\n    m === I.Disconnected && g(null);\n  }, [m]);\n  const [y, T] = s.useState(\n    () => t.localParticipant.getTrackPublication(E.Source.Microphone) ?? null\n  );\n  s.useEffect(() => {\n    const S = () => {\n      T(t.localParticipant.getTrackPublication(E.Source.Microphone) ?? null);\n    }, _ = () => {\n      T(null);\n    };\n    return t.localParticipant.on(\n      X.LocalTrackPublished,\n      S\n    ), t.localParticipant.on(\n      X.LocalTrackUnpublished,\n      _\n    ), () => {\n      t.localParticipant.off(\n        X.LocalTrackPublished,\n        S\n      ), t.localParticipant.off(\n        X.LocalTrackUnpublished,\n        _\n      );\n    };\n  }, [t.localParticipant]);\n  const M = s.useMemo(() => {\n    const S = [];\n    return o && S.push(o), b && S.push(b), S;\n  }, [o, b]), P = s.useMemo(() => {\n    if (M.length > 0)\n      return \"failed\";\n    let S = \"disconnected\";\n    return m !== I.Disconnected && (S = \"connecting\"), y && (S = \"pre-connect-buffering\"), l && C[W.AgentState] && (S = C[W.AgentState]), S;\n  }, [\n    M,\n    m,\n    y,\n    l,\n    C\n  ]);\n  s.useEffect(() => {\n    h.emit(\"stateChanged\", P), u(P);\n  }, [h, P]), s.useEffect(() => {\n    p(l !== null);\n  }, [l]);\n  const F = e.connectionState === \"disconnected\";\n  s.useEffect(() => {\n    if (!F)\n      return c(r), () => {\n        a();\n      };\n  }, [F, r]);\n  const q = s.useMemo(() => {\n    const S = {\n      attributes: C,\n      internal: {\n        agentParticipant: l,\n        workerParticipant: v,\n        emitter: h\n      }\n    };\n    switch (P) {\n      case \"disconnected\":\n        return {\n          ...S,\n          state: P,\n          ...x(P),\n          failureReasons: null,\n          // Clear inner values if no longer connected\n          cameraTrack: void 0,\n          microphoneTrack: void 0\n        };\n      case \"connecting\":\n        return {\n          ...S,\n          state: P,\n          ...x(P),\n          failureReasons: null,\n          // Clear inner values if no longer connected\n          cameraTrack: void 0,\n          microphoneTrack: void 0\n        };\n      case \"initializing\":\n      case \"idle\":\n        return {\n          ...S,\n          state: P,\n          ...x(P),\n          failureReasons: null,\n          cameraTrack: O,\n          microphoneTrack: R\n        };\n      case \"pre-connect-buffering\":\n        return {\n          ...S,\n          state: P,\n          ...x(P),\n          failureReasons: null,\n          cameraTrack: O,\n          microphoneTrack: R\n        };\n      case \"listening\":\n      case \"thinking\":\n      case \"speaking\":\n        return {\n          ...S,\n          state: P,\n          ...x(P),\n          failureReasons: null,\n          cameraTrack: O,\n          microphoneTrack: R\n        };\n      case \"failed\":\n        return {\n          ...S,\n          state: \"failed\",\n          ...x(\"failed\"),\n          failureReasons: M,\n          // Clear inner values if no longer connected\n          cameraTrack: void 0,\n          microphoneTrack: void 0\n        };\n    }\n  }, [C, h, l, P, O, R]), { waitUntilConnected: J, waitUntilCouldBeListening: K, waitUntilFinished: L } = mn(h, P), N = s.useCallback(\n    (S) => new Promise((_, Y) => {\n      const B = (z) => {\n        z && ($(), _(z));\n      }, j = () => {\n        $(), Y(new Error(\"useAgent(/* ... */).waitUntilCamera - signal aborted\"));\n      }, $ = () => {\n        h.off(\"cameraChanged\", B), S == null || S.removeEventListener(\"abort\", j);\n      };\n      h.on(\"cameraChanged\", B), S == null || S.addEventListener(\"abort\", j);\n    }),\n    [h]\n  ), Z = s.useCallback(\n    (S) => new Promise((_, Y) => {\n      const B = (z) => {\n        z && ($(), _(z));\n      }, j = () => {\n        $(), Y(new Error(\"useAgent(/* ... */).waitUntilMicrophone - signal aborted\"));\n      }, $ = () => {\n        h.off(\"microphoneChanged\", B), S == null || S.removeEventListener(\"abort\", j);\n      };\n      h.on(\"microphoneChanged\", B), S == null || S.addEventListener(\"abort\", j);\n    }),\n    [h]\n  );\n  return s.useMemo(() => ({\n    ...q,\n    waitUntilConnected: J,\n    waitUntilCouldBeListening: K,\n    waitUntilFinished: L,\n    waitUntilCamera: N,\n    waitUntilMicrophone: Z\n  }), [\n    q,\n    J,\n    K,\n    L,\n    N,\n    Z\n  ]);\n}\nvar pn = /* @__PURE__ */ ((e) => (e.ConnectionStateChanged = \"connectionStateChanged\", e.MediaDevicesError = \"mediaDevicesError\", e.EncryptionError = \"encryptionError\", e))(pn || {});\nfunction hn(e, n) {\n  const t = /* @__PURE__ */ new Set([...Object.keys(e), ...Object.keys(n)]);\n  for (const r of t)\n    switch (r) {\n      case \"roomName\":\n      case \"participantName\":\n      case \"participantIdentity\":\n      case \"participantMetadata\":\n      case \"participantAttributes\":\n      case \"agentName\":\n      case \"agentMetadata\":\n        if (e[r] !== n[r])\n          return !1;\n        break;\n      default:\n        const o = r;\n        throw new Error(`Options key ${o} not being checked for equality!`);\n    }\n  return !0;\n}\nfunction bn(e, n) {\n  const t = s.useRef(n);\n  return s.useEffect(() => {\n    t.current = n;\n  }, [n]), s.useCallback(\n    async (o, c) => {\n      if (t.current !== o)\n        return new Promise((a, i) => {\n          const u = (d) => {\n            d === o && (h(), a());\n          }, p = () => {\n            h(), i(\n              new Error(\n                `useSession(/* ... */).waitUntilConnectionState(${o}, /* signal */) - signal aborted`\n              )\n            );\n          }, h = () => {\n            e.off(\"connectionStateChanged\", u), c == null || c.removeEventListener(\"abort\", p);\n          };\n          e.on(\"connectionStateChanged\", u), c == null || c.addEventListener(\"abort\", p);\n        });\n    },\n    [e]\n  );\n}\nfunction gn(e, n) {\n  const t = e instanceof Ft, r = s.useRef(\n    t ? n : null\n  );\n  return s.useEffect(() => {\n    if (!t) {\n      r.current = null;\n      return;\n    }\n    r.current !== null && hn(r.current, n) || (r.current = n);\n  }, [t, n]), s.useCallback(async () => {\n    if (t) {\n      if (!r.current)\n        throw new Error(\n          \"AgentSession - memoized token fetch options are not set, but the passed tokenSource was an instance of TokenSourceConfigurable. If you are seeing this please make a new GitHub issue!\"\n        );\n      return e.fetch(r.current);\n    } else\n      return e.fetch();\n  }, [t, e]);\n}\nfunction is(e, n = {}) {\n  const { room: t, agentConnectTimeoutMilliseconds: r, ...o } = n, c = de(), a = s.useMemo(\n    () => c ?? t ?? new De(),\n    [c, t]\n  ), i = s.useMemo(\n    () => new he.EventEmitter(),\n    []\n  ), u = s.useCallback(\n    (L) => ({\n      isConnected: L === I.Connected || L === I.Reconnecting || L === I.SignalReconnecting\n    }),\n    []\n  ), [p, h] = s.useState(a.state);\n  s.useEffect(() => {\n    const L = (N) => {\n      h(N);\n    };\n    return a.on(H.ConnectionStateChanged, L), () => {\n      a.off(H.ConnectionStateChanged, L);\n    };\n  }, [a]), s.useEffect(() => {\n    const L = async (N) => {\n      i.emit(\"mediaDevicesError\", N);\n    };\n    return a.on(H.MediaDevicesError, L), () => {\n      a.off(H.MediaDevicesError, L);\n    };\n  }, [a, i]), s.useEffect(() => {\n    const L = async (N) => {\n      i.emit(\"encryptionError\", N);\n    };\n    return a.on(H.EncryptionError, L), () => {\n      a.off(H.EncryptionError, L);\n    };\n  }, [a, i]);\n  const { localParticipant: d } = Oe({ room: a }), l = d.getTrackPublication(E.Source.Camera), v = s.useMemo(() => !l || l.isMuted ? null : {\n    source: E.Source.Camera,\n    participant: d,\n    publication: l\n  }, [d, l, l == null ? void 0 : l.isMuted]), C = d.getTrackPublication(E.Source.Microphone), k = s.useMemo(() => !C || C.isMuted ? null : {\n    source: E.Source.Microphone,\n    participant: d,\n    publication: C\n  }, [d, C, C == null ? void 0 : C.isMuted]), {\n    agentTimeoutFailureReason: A,\n    startAgentTimeout: w,\n    clearAgentTimeout: O,\n    clearAgentTimeoutFailureReason: R,\n    updateAgentTimeoutState: m,\n    updateAgentTimeoutParticipantExists: f\n  } = fn(), b = s.useMemo(\n    () => ({\n      emitter: i,\n      tokenSource: e,\n      agentConnectTimeoutMilliseconds: r,\n      agentTimeoutFailureReason: A,\n      startAgentTimeout: w,\n      clearAgentTimeout: O,\n      clearAgentTimeoutFailureReason: R,\n      updateAgentTimeoutState: m,\n      updateAgentTimeoutParticipantExists: f\n    }),\n    [\n      i,\n      r,\n      e,\n      A,\n      w,\n      O,\n      R,\n      m,\n      f\n    ]\n  ), g = s.useMemo(() => {\n    const L = {\n      room: a,\n      internal: b\n    };\n    switch (p) {\n      case I.Connecting:\n        return {\n          ...L,\n          connectionState: I.Connecting,\n          ...u(I.Connecting),\n          local: {\n            cameraTrack: null,\n            microphoneTrack: null\n          }\n        };\n      case I.Connected:\n      case I.Reconnecting:\n      case I.SignalReconnecting:\n        return {\n          ...L,\n          connectionState: p,\n          ...u(p),\n          local: {\n            cameraTrack: v,\n            microphoneTrack: k\n          }\n        };\n      case I.Disconnected:\n        return {\n          ...L,\n          connectionState: I.Disconnected,\n          ...u(I.Disconnected),\n          local: {\n            cameraTrack: null,\n            microphoneTrack: null\n          }\n        };\n    }\n  }, [\n    b,\n    a,\n    p,\n    v,\n    k,\n    u\n  ]);\n  s.useEffect(() => {\n    i.emit(\"connectionStateChanged\", g.connectionState);\n  }, [i, g.connectionState]);\n  const y = bn(\n    i,\n    g.connectionState\n  ), T = s.useCallback(\n    async (L) => y(\n      I.Connected,\n      L\n    ),\n    [y]\n  ), M = s.useCallback(\n    async (L) => y(I.Disconnected, L),\n    [y]\n  ), P = Ie(\n    s.useMemo(\n      () => ({\n        connectionState: g.connectionState,\n        room: a,\n        internal: b\n      }),\n      [g, a, b]\n    )\n  ), F = gn(e, o), q = s.useCallback(\n    async (L = {}) => {\n      var B, j;\n      const {\n        signal: N,\n        tracks: Z = { microphone: { enabled: !0, publishOptions: { preConnectBuffer: !0 } } },\n        roomConnectOptions: S\n      } = L;\n      await M(N);\n      const _ = () => {\n        a.disconnect();\n      };\n      N == null || N.addEventListener(\"abort\", _);\n      let Y = !1;\n      await Promise.all([\n        F().then(({ serverUrl: $, participantToken: z }) => {\n          var be, ge;\n          return Y = (((ge = (be = _t(z).roomConfig) == null ? void 0 : be.agents) == null ? void 0 : ge.length) ?? 0) > 0, a.connect($, z, S);\n        }),\n        // Start microphone (with preconnect buffer) by default\n        (B = Z.microphone) != null && B.enabled ? a.localParticipant.setMicrophoneEnabled(\n          !0,\n          void 0,\n          ((j = Z.microphone) == null ? void 0 : j.publishOptions) ?? {}\n        ) : Promise.resolve()\n      ]), await T(N), Y && await P.waitUntilConnected(N), N == null || N.removeEventListener(\"abort\", _);\n    },\n    [a, M, F, T, P.waitUntilConnected]\n  ), J = s.useCallback(async () => {\n    await a.disconnect();\n  }, [a]), K = s.useCallback(async () => {\n    const L = await F();\n    await a.prepareConnection(L.serverUrl, L.participantToken);\n  }, [F, a]);\n  return s.useEffect(\n    () => {\n      K().catch((L) => {\n        console.warn(\"WARNING: Room.prepareConnection failed:\", L);\n      });\n    },\n    [\n      /* note: no prepareConnection here, this effect should only ever run once! */\n    ]\n  ), s.useMemo(\n    () => ({\n      ...g,\n      waitUntilConnected: T,\n      waitUntilDisconnected: M,\n      prepareConnection: K,\n      start: q,\n      end: J\n    }),\n    [g, T, M, K, q, J]\n  );\n}\nfunction us(e, n, t, r) {\n  const o = s.useMemo(() => () => {\n  }, []), c = s.useCallback(t ?? o, r ?? []), a = r ? c : t, i = s.useMemo(() => e ? \"internal\" in e ? e.internal.emitter : e : null, [e]);\n  s.useEffect(() => {\n    if (!(!i || !a))\n      return i.on(n, a), () => {\n        i.off(n, a);\n      };\n  }, [i, n, a]);\n}\nvar vn = /* @__PURE__ */ ((e) => (e.MessageReceived = \"messageReceived\", e))(vn || {});\nfunction ls(e) {\n  const { room: n } = Dt(e), t = s.useMemo(\n    () => new he.EventEmitter(),\n    []\n  ), r = Ie(e), o = cn({ room: n }), c = s.useMemo(() => ({ room: n }), [n]), a = Kt(c), i = s.useMemo(() => o.map((l) => {\n    var v, C, k;\n    switch (l.participantInfo.identity) {\n      case n.localParticipant.identity:\n        return {\n          type: \"userTranscript\",\n          message: l.text,\n          id: l.streamInfo.id,\n          timestamp: l.streamInfo.timestamp,\n          from: n.localParticipant\n        };\n      case ((v = r.internal.agentParticipant) == null ? void 0 : v.identity):\n      case ((C = r.internal.workerParticipant) == null ? void 0 : C.identity):\n        return {\n          type: \"agentTranscript\",\n          message: l.text,\n          id: l.streamInfo.id,\n          timestamp: l.streamInfo.timestamp,\n          from: ((k = r.internal.agentParticipant) == null ? void 0 : k.identity) === l.participantInfo.identity ? r.internal.agentParticipant : r.internal.workerParticipant\n        };\n      default:\n        return {\n          type: \"agentTranscript\",\n          message: l.text,\n          id: l.streamInfo.id,\n          timestamp: l.streamInfo.timestamp,\n          from: Array.from(n.remoteParticipants.values()).find(\n            (A) => A.identity === l.participantInfo.identity\n          )\n        };\n    }\n  }), [o, n]), u = s.useMemo(() => [...i, ...a.chatMessages], [i, a.chatMessages]), p = s.useRef(/* @__PURE__ */ new Map()), h = s.useMemo(() => {\n    const l = /* @__PURE__ */ new Date();\n    for (const v of u)\n      p.current.has(v.id) || p.current.set(v.id, l);\n    return u.sort((v, C) => {\n      const k = p.current.get(v.id), A = p.current.get(C.id);\n      return typeof k > \"u\" || typeof A > \"u\" ? 0 : k.getTime() - A.getTime();\n    });\n  }, [u]), d = s.useRef(/* @__PURE__ */ new Set());\n  return s.useEffect(() => {\n    for (const l of h)\n      d.current.has(l.id) || (d.current.add(l.id), t.emit(\"messageReceived\", l));\n  }, [h]), s.useMemo(\n    () => ({\n      messages: h,\n      send: a.send,\n      isSending: a.isSending,\n      internal: { emitter: t }\n    }),\n    [h, a.send, a.isSending]\n  );\n}\nexport {\n  an as $,\n  In as A,\n  Vn as B,\n  Oe as C,\n  wn as D,\n  An as E,\n  Bt as F,\n  Se as G,\n  jt as H,\n  xn as I,\n  Un as J,\n  Wt as K,\n  qn as L,\n  pe as M,\n  jn as N,\n  Gt as O,\n  $n as P,\n  Xn as Q,\n  dn as R,\n  Ie as S,\n  ts as T,\n  ss as U,\n  re as V,\n  rn as W,\n  os as X,\n  on as Y,\n  rs as Z,\n  as as _,\n  te as a,\n  cn as a0,\n  cs as a1,\n  pn as a2,\n  is as a3,\n  us as a4,\n  vn as a5,\n  ls as a6,\n  Jn as b,\n  Rn as c,\n  Dn as d,\n  Nn as e,\n  zn as f,\n  Wn as g,\n  Kn as h,\n  Ln as i,\n  D as j,\n  Qn as k,\n  Hn as l,\n  es as m,\n  On as n,\n  Fn as o,\n  Gn as p,\n  qt as q,\n  zt as r,\n  ns as s,\n  Yn as t,\n  Pn as u,\n  Bn as v,\n  Kt as w,\n  Zn as x,\n  _n as y,\n  kn as z\n};\n//# sourceMappingURL=hooks-yU-srrIO.mjs.map\n","import * as e from \"react\";\nimport { useState as B, useRef as z, useEffect as V, useMemo as Ne } from \"react\";\nimport { u as Le, a as he, b as ze, c as Ve, d as Fe, e as Ze, f as ge, g as He, h as Be, i as je, j as _e, k as Oe, l as ve, m as We, n as qe, o as $e, p as De, q as Ue, r as Ge, s as Ee, t as Qe, v as Xe } from \"./hooks-yU-srrIO.mjs\";\nimport { a as I, c as ee } from \"./room-Bb6uLxS5.mjs\";\nimport { RoomEvent as Ye, Track as S, ConnectionQuality as Q, RemoteTrackPublication as J, RemoteAudioTrack as Je, ConnectionState as X } from \"livekit-client\";\nimport { ae as te, af as pe, w as Ke, u as et, f as tt, c as at, ag as nt, X as rt, Y as ct, a1 as $, l as j, ah as q, ai as lt, i as _, B as st, aj as we, ak as ae, j as it, al as ot, m as ut, p as ke, am as dt, an as mt, ao as ft, ap as ht, aq as gt, ar as vt, R as Et } from \"./contexts-CsO1QZ3r.mjs\";\nconst ca = /* @__PURE__ */ e.forwardRef(\n  function(n, a) {\n    const { buttonProps: c } = Le(n);\n    return /* @__PURE__ */ e.createElement(\"button\", { ref: a, ...c }, n.children);\n  }\n), la = /* @__PURE__ */ e.forwardRef(\n  function({ room: n, ...a }, c) {\n    const r = he(n);\n    return /* @__PURE__ */ e.createElement(\"div\", { ref: c, ...a }, r);\n  }\n), sa = /* @__PURE__ */ e.forwardRef(\n  function(n, a) {\n    const { mergedProps: c } = ze({ props: n });\n    return /* @__PURE__ */ e.createElement(\"button\", { ref: a, ...c }, n.children);\n  }\n), ia = /* @__PURE__ */ e.forwardRef(\n  function(n, a) {\n    const { buttonProps: c } = Ve(n);\n    return /* @__PURE__ */ e.createElement(\"button\", { ref: a, ...c }, n.children);\n  }\n), pt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentColor\", ...t }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z\" })), wt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentColor\", ...t }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z\" })), oa = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, viewBox: \"0 0 24 24\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"#FFF\",\n    d: \"M4.99 3.99a1 1 0 0 0-.697 1.717L10.586 12l-6.293 6.293a1 1 0 1 0 1.414 1.414L12 13.414l6.293 6.293a1 1 0 1 0 1.414-1.414L13.414 12l6.293-6.293a1 1 0 0 0-.727-1.717 1 1 0 0 0-.687.303L12 10.586 5.707 4.293a1 1 0 0 0-.717-.303z\"\n  }\n)), ua = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 18, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M0 2.75A2.75 2.75 0 0 1 2.75 0h10.5A2.75 2.75 0 0 1 16 2.75v13.594a.75.75 0 0 1-1.234.572l-3.691-3.12a1.25 1.25 0 0 0-.807-.296H2.75A2.75 2.75 0 0 1 0 10.75v-8ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v8c0 .69.56 1.25 1.25 1.25h7.518c.65 0 1.279.23 1.775.65l2.457 2.077V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M3 4.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Z\",\n    clipRule: \"evenodd\"\n  }\n)), ie = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentcolor\",\n    fillRule: \"evenodd\",\n    d: \"M5.293 2.293a1 1 0 0 1 1.414 0l4.823 4.823a1.25 1.25 0 0 1 0 1.768l-4.823 4.823a1 1 0 0 1-1.414-1.414L9.586 8 5.293 3.707a1 1 0 0 1 0-1.414z\",\n    clipRule: \"evenodd\"\n  }\n)), kt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\"g\", { stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 1.5 }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M10 1.75h4.25m0 0V6m0-4.25L9 7M6 14.25H1.75m0 0V10m0 4.25L7 9\" }))), da = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentcolor\",\n    fillRule: \"evenodd\",\n    d: \"M8.961.894C8.875-.298 7.125-.298 7.04.894c-.066.912-1.246 1.228-1.76.472-.67-.99-2.186-.115-1.664.96.399.824-.465 1.688-1.288 1.289-1.076-.522-1.95.994-.961 1.665.756.513.44 1.693-.472 1.759-1.192.086-1.192 1.836 0 1.922.912.066 1.228 1.246.472 1.76-.99.67-.115 2.186.96 1.664.824-.399 1.688.465 1.289 1.288-.522 1.076.994 1.95 1.665.961.513-.756 1.693-.44 1.759.472.086 1.192 1.836 1.192 1.922 0 .066-.912 1.246-1.228 1.76-.472.67.99 2.186.115 1.664-.96-.399-.824.465-1.688 1.288-1.289 1.076.522 1.95-.994.961-1.665-.756-.513-.44-1.693.472-1.759 1.192-.086 1.192-1.836 0-1.922-.912-.066-1.228-1.246-.472-1.76.99-.67.115-2.186-.96-1.664-.824.399-1.688-.465-1.289-1.288.522-1.076-.994-1.95-1.665-.961-.513.756-1.693.44-1.759-.472ZM8 13A5 5 0 1 0 8 3a5 5 0 0 0 0 10Z\",\n    clipRule: \"evenodd\"\n  }\n)), ma = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z\",\n    clipRule: \"evenodd\"\n  }\n)), Rt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentcolor\",\n    fillRule: \"evenodd\",\n    d: \"M4 6.104V4a4 4 0 1 1 8 0v2.104c1.154.326 2 1.387 2 2.646v4.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-4.5c0-1.259.846-2.32 2-2.646ZM5.5 4a2.5 2.5 0 0 1 5 0v2h-5V4Z\",\n    clipRule: \"evenodd\"\n  }\n)), Mt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentColor\", ...t }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z\" })), yt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentColor\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fillRule: \"evenodd\",\n    d: \"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\"path\", { d: \"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z\" })), bt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentcolor\", ...t }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-6a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-6a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" })), St = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentcolor\", ...t }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"g\", { opacity: 0.25 }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M12 .5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M12 .5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }))), Ct = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentcolor\", ...t }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"g\", { opacity: 0.25 }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M6 6.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M6 6.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5zm6-6a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M12 .5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5z\" }))), It = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentColor\", ...t }, /* @__PURE__ */ e.createElement(\"g\", { opacity: 0.25 }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-4Zm6-5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-9Zm6-6a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5V.5Z\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M0 11.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-4Zm6-5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-9Zm6-6a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5V.5Z\" }))), Re = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 20, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z\",\n    clipRule: \"evenodd\"\n  }\n)), xt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 20, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\"g\", { fill: \"currentColor\" }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z\" }), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fillRule: \"evenodd\",\n    d: \"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z\",\n    clipRule: \"evenodd\"\n  }\n))), oe = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M8 0a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0V.75A.75.75 0 0 1 8 0Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M8 12a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0v-2.5A.75.75 0 0 1 8 12Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.7\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M12 1.072a.75.75 0 0 1 .274 1.024l-1.25 2.165a.75.75 0 0 1-1.299-.75l1.25-2.165A.75.75 0 0 1 12 1.072Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M6 11.464a.75.75 0 0 1 .274 1.025l-1.25 2.165a.75.75 0 0 1-1.299-.75l1.25-2.165A.75.75 0 0 1 6 11.464Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.6\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M14.928 4a.75.75 0 0 1-.274 1.025l-2.165 1.25a.75.75 0 1 1-.75-1.3l2.165-1.25A.75.75 0 0 1 14.928 4Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M4.536 10a.75.75 0 0 1-.275 1.024l-2.165 1.25a.75.75 0 0 1-.75-1.298l2.165-1.25A.75.75 0 0 1 4.536 10Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.5\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M16 8a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h2.5A.75.75 0 0 1 16 8Z\",\n    clipRule: \"evenodd\"\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M4 8a.75.75 0 0 1-.75.75H.75a.75.75 0 0 1 0-1.5h2.5A.75.75 0 0 1 4 8Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.4\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M14.928 12a.75.75 0 0 1-1.024.274l-2.165-1.25a.75.75 0 0 1 .75-1.299l2.165 1.25A.75.75 0 0 1 14.928 12Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.9\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M4.536 6a.75.75 0 0 1-1.025.275l-2.165-1.25a.75.75 0 1 1 .75-1.3l2.165 1.25A.75.75 0 0 1 4.536 6Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.3\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M12 14.928a.75.75 0 0 1-1.024-.274l-1.25-2.165a.75.75 0 0 1 1.298-.75l1.25 2.165A.75.75 0 0 1 12 14.928Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.8\n  }\n), /* @__PURE__ */ e.createElement(\n  \"path\",\n  {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M6 4.536a.75.75 0 0 1-1.024-.275l-1.25-2.165a.75.75 0 1 1 1.299-.75l1.25 2.165A.75.75 0 0 1 6 4.536Z\",\n    clipRule: \"evenodd\",\n    opacity: 0.2\n  }\n)), Pt = (t) => /* @__PURE__ */ e.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", ...t }, /* @__PURE__ */ e.createElement(\"g\", { stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 1.5 }, /* @__PURE__ */ e.createElement(\"path\", { d: \"M13.25 7H9m0 0V2.75M9 7l5.25-5.25M2.75 9H7m0 0v4.25M7 9l-5.25 5.25\" }))), Tt = /* @__PURE__ */ e.forwardRef(\n  function({ trackRef: n, ...a }, c) {\n    const r = te(), { mergedProps: s, inFocus: o } = Fe({\n      trackRef: n ?? r,\n      props: a\n    });\n    return /* @__PURE__ */ e.createElement(pe.Consumer, null, (l) => l !== void 0 && /* @__PURE__ */ e.createElement(\"button\", { ref: c, ...s }, a.children ? a.children : o ? /* @__PURE__ */ e.createElement(Pt, null) : /* @__PURE__ */ e.createElement(kt, null)));\n  }\n), fa = /* @__PURE__ */ e.forwardRef(\n  function({\n    kind: n,\n    initialSelection: a,\n    onActiveDeviceChange: c,\n    onDeviceListChange: r,\n    onDeviceSelectError: s,\n    exactMatch: o,\n    track: l,\n    requestPermissions: i,\n    onError: d,\n    ...u\n  }, v) {\n    const f = Ke(), p = e.useRef(\"default\"), E = e.useCallback(\n      (w) => {\n        f && f.emit(Ye.MediaDevicesError, w), d == null || d(w);\n      },\n      [f, d]\n    ), { devices: h, activeDeviceId: m, setActiveMediaDevice: y, className: C } = Ze({\n      kind: n,\n      room: f,\n      track: l,\n      requestPermissions: i,\n      onError: E\n    });\n    e.useEffect(() => {\n      a !== void 0 && y(a);\n    }, [y]), e.useEffect(() => {\n      typeof r == \"function\" && r(h);\n    }, [r, h]), e.useEffect(() => {\n      m !== p.current && (c == null || c(m)), p.current = m;\n    }, [m]);\n    const A = async (w) => {\n      try {\n        await y(w, { exact: o ?? !0 });\n      } catch (M) {\n        if (M instanceof Error)\n          s == null || s(M);\n        else\n          throw M;\n      }\n    }, N = e.useMemo(\n      () => I(u, { className: C }, { className: \"lk-list\" }),\n      [C, u]\n    ), g = !!h.find((w) => w.label.toLowerCase().startsWith(\"default\"));\n    function R(w, M, P) {\n      return w === M || !g && P === 0 && M === \"default\";\n    }\n    return /* @__PURE__ */ e.createElement(\"ul\", { ref: v, ...N }, h.map((w, M) => /* @__PURE__ */ e.createElement(\n      \"li\",\n      {\n        key: w.deviceId,\n        id: w.deviceId,\n        \"data-lk-active\": R(w.deviceId, m, M),\n        \"aria-selected\": R(w.deviceId, m, M),\n        role: \"option\"\n      },\n      /* @__PURE__ */ e.createElement(\"button\", { className: \"lk-button\", onClick: () => A(w.deviceId) }, w.label)\n    )));\n  }\n), ha = /* @__PURE__ */ e.forwardRef(\n  function({ label: n = \"Allow Audio\", ...a }, c) {\n    const r = et(a.room), { mergedProps: s } = ge({ room: r, props: a });\n    return /* @__PURE__ */ e.createElement(\"button\", { ref: c, ...s }, n);\n  }\n), ga = /* @__PURE__ */ e.forwardRef(\n  function({ label: n, ...a }, c) {\n    const r = tt(), { mergedProps: s, canPlayAudio: o } = ge({ room: r, props: a }), { mergedProps: l, canPlayVideo: i } = He({ room: r, props: s }), { style: d, ...u } = l;\n    return d.display = o && i ? \"none\" : \"block\", /* @__PURE__ */ e.createElement(\"button\", { ref: c, style: d, ...u }, n ?? `Start ${o ? \"Video\" : \"Audio\"}`);\n  }\n);\nfunction Me(t, n) {\n  switch (t) {\n    case S.Source.Microphone:\n      return n ? /* @__PURE__ */ e.createElement(yt, null) : /* @__PURE__ */ e.createElement(Mt, null);\n    case S.Source.Camera:\n      return n ? /* @__PURE__ */ e.createElement(wt, null) : /* @__PURE__ */ e.createElement(pt, null);\n    case S.Source.ScreenShare:\n      return n ? /* @__PURE__ */ e.createElement(xt, null) : /* @__PURE__ */ e.createElement(Re, null);\n    default:\n      return;\n  }\n}\nfunction At(t) {\n  switch (t) {\n    case Q.Excellent:\n      return /* @__PURE__ */ e.createElement(bt, null);\n    case Q.Good:\n      return /* @__PURE__ */ e.createElement(St, null);\n    case Q.Poor:\n      return /* @__PURE__ */ e.createElement(Ct, null);\n    default:\n      return /* @__PURE__ */ e.createElement(It, null);\n  }\n}\nconst va = /* @__PURE__ */ e.forwardRef(function({ showIcon: n, ...a }, c) {\n  const { buttonProps: r, enabled: s } = Be(a), [o, l] = e.useState(!1);\n  return e.useEffect(() => {\n    l(!0);\n  }, []), o && /* @__PURE__ */ e.createElement(\"button\", { ref: c, ...r }, (n ?? !0) && Me(a.source, s), a.children);\n}), ye = /* @__PURE__ */ e.forwardRef(function(n, a) {\n  const { className: c, quality: r } = je(n), s = e.useMemo(() => ({ ...I(n, { className: c }), \"data-lk-quality\": r }), [r, n, c]);\n  return /* @__PURE__ */ e.createElement(\"div\", { ref: a, ...s }, n.children ?? At(r));\n}), K = /* @__PURE__ */ e.forwardRef(\n  function({ participant: n, ...a }, c) {\n    const r = at(n), { className: s, infoObserver: o } = e.useMemo(() => nt(r), [r]), { identity: l, name: i } = _e(o, {\n      name: r.name,\n      identity: r.identity,\n      metadata: r.metadata\n    }), d = e.useMemo(() => I(a, { className: s, \"data-lk-participant-name\": i }), [a, s, i]);\n    return /* @__PURE__ */ e.createElement(\"span\", { ref: c, ...d }, i !== \"\" ? i : l, a.children);\n  }\n), be = /* @__PURE__ */ e.forwardRef(\n  function({ trackRef: n, show: a = \"always\", ...c }, r) {\n    const { className: s, isMuted: o } = Oe(n), l = a === \"always\" || a === \"muted\" && o || a === \"unmuted\" && !o, i = e.useMemo(\n      () => I(c, {\n        className: s\n      }),\n      [s, c]\n    );\n    return l ? /* @__PURE__ */ e.createElement(\"div\", { ref: r, ...i, \"data-lk-muted\": o }, c.children ?? Me(n.source, !o)) : null;\n  }\n), Nt = (t) => /* @__PURE__ */ e.createElement(\n  \"svg\",\n  {\n    width: 320,\n    height: 320,\n    viewBox: \"0 0 320 320\",\n    preserveAspectRatio: \"xMidYMid meet\",\n    fill: \"none\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    ...t\n  },\n  /* @__PURE__ */ e.createElement(\n    \"path\",\n    {\n      d: \"M160 180C204.182 180 240 144.183 240 100C240 55.8172 204.182 20 160 20C115.817 20 79.9997 55.8172 79.9997 100C79.9997 144.183 115.817 180 160 180Z\",\n      fill: \"white\",\n      fillOpacity: 0.25\n    }\n  ),\n  /* @__PURE__ */ e.createElement(\n    \"path\",\n    {\n      d: \"M97.6542 194.614C103.267 191.818 109.841 192.481 115.519 195.141C129.025 201.466 144.1 205 159.999 205C175.899 205 190.973 201.466 204.48 195.141C210.158 192.481 216.732 191.818 222.345 194.614C262.703 214.719 291.985 253.736 298.591 300.062C300.15 310.997 291.045 320 280 320H39.9997C28.954 320 19.8495 310.997 21.4087 300.062C28.014 253.736 57.2966 214.72 97.6542 194.614Z\",\n      fill: \"white\",\n      fillOpacity: 0.25\n    }\n  )\n);\nfunction Se(t, n = {}) {\n  const [a, c] = e.useState(rt(t)), [r, s] = e.useState(a == null ? void 0 : a.isMuted), [o, l] = e.useState(a == null ? void 0 : a.isSubscribed), [i, d] = e.useState(a == null ? void 0 : a.track), [u, v] = e.useState(\"landscape\"), f = e.useRef(), { className: p, trackObserver: E } = e.useMemo(() => ct(t), [\n    t.participant.sid ?? t.participant.identity,\n    t.source,\n    $(t) && t.publication.trackSid\n  ]);\n  return e.useEffect(() => {\n    const h = E.subscribe((m) => {\n      j.debug(\"update track\", m), c(m), s(m == null ? void 0 : m.isMuted), l(m == null ? void 0 : m.isSubscribed), d(m == null ? void 0 : m.track);\n    });\n    return () => h == null ? void 0 : h.unsubscribe();\n  }, [E]), e.useEffect(() => {\n    var h, m;\n    return i && (f.current && i.detach(f.current), (h = n.element) != null && h.current && !(t.participant.isLocal && (i == null ? void 0 : i.kind) === \"audio\") && i.attach(n.element.current)), f.current = (m = n.element) == null ? void 0 : m.current, () => {\n      f.current && (i == null || i.detach(f.current));\n    };\n  }, [i, n.element]), e.useEffect(() => {\n    var h, m;\n    if (typeof ((h = a == null ? void 0 : a.dimensions) == null ? void 0 : h.width) == \"number\" && typeof ((m = a == null ? void 0 : a.dimensions) == null ? void 0 : m.height) == \"number\") {\n      const y = a.dimensions.width > a.dimensions.height ? \"landscape\" : \"portrait\";\n      v(y);\n    }\n  }, [a]), {\n    publication: a,\n    isMuted: r,\n    isSubscribed: o,\n    track: i,\n    elementProps: I(n.props, {\n      className: p,\n      \"data-lk-local-participant\": t.participant.isLocal,\n      \"data-lk-source\": a == null ? void 0 : a.source,\n      ...(a == null ? void 0 : a.kind) === \"video\" && { \"data-lk-orientation\": u }\n    })\n  };\n}\nvar Y, ue;\nfunction Lt() {\n  if (ue) return Y;\n  ue = 1;\n  var t = \"Expected a function\", n = NaN, a = \"[object Symbol]\", c = /^\\s+|\\s+$/g, r = /^[-+]0x[0-9a-f]+$/i, s = /^0b[01]+$/i, o = /^0o[0-7]+$/i, l = parseInt, i = typeof q == \"object\" && q && q.Object === Object && q, d = typeof self == \"object\" && self && self.Object === Object && self, u = i || d || Function(\"return this\")(), v = Object.prototype, f = v.toString, p = Math.max, E = Math.min, h = function() {\n    return u.Date.now();\n  };\n  function m(g, R, w) {\n    var M, P, O, L, b, T, F = 0, re = !1, Z = !1, D = !0;\n    if (typeof g != \"function\")\n      throw new TypeError(t);\n    R = N(R) || 0, y(w) && (re = !!w.leading, Z = \"maxWait\" in w, O = Z ? p(N(w.maxWait) || 0, R) : O, D = \"trailing\" in w ? !!w.trailing : D);\n    function U(k) {\n      var x = M, H = P;\n      return M = P = void 0, F = k, L = g.apply(H, x), L;\n    }\n    function xe(k) {\n      return F = k, b = setTimeout(W, R), re ? U(k) : L;\n    }\n    function Pe(k) {\n      var x = k - T, H = k - F, se = R - x;\n      return Z ? E(se, O - H) : se;\n    }\n    function ce(k) {\n      var x = k - T, H = k - F;\n      return T === void 0 || x >= R || x < 0 || Z && H >= O;\n    }\n    function W() {\n      var k = h();\n      if (ce(k))\n        return le(k);\n      b = setTimeout(W, Pe(k));\n    }\n    function le(k) {\n      return b = void 0, D && M ? U(k) : (M = P = void 0, L);\n    }\n    function Te() {\n      b !== void 0 && clearTimeout(b), F = 0, M = T = P = b = void 0;\n    }\n    function Ae() {\n      return b === void 0 ? L : le(h());\n    }\n    function G() {\n      var k = h(), x = ce(k);\n      if (M = arguments, P = this, T = k, x) {\n        if (b === void 0)\n          return xe(T);\n        if (Z)\n          return b = setTimeout(W, R), U(T);\n      }\n      return b === void 0 && (b = setTimeout(W, R)), L;\n    }\n    return G.cancel = Te, G.flush = Ae, G;\n  }\n  function y(g) {\n    var R = typeof g;\n    return !!g && (R == \"object\" || R == \"function\");\n  }\n  function C(g) {\n    return !!g && typeof g == \"object\";\n  }\n  function A(g) {\n    return typeof g == \"symbol\" || C(g) && f.call(g) == a;\n  }\n  function N(g) {\n    if (typeof g == \"number\")\n      return g;\n    if (A(g))\n      return n;\n    if (y(g)) {\n      var R = typeof g.valueOf == \"function\" ? g.valueOf() : g;\n      g = y(R) ? R + \"\" : R;\n    }\n    if (typeof g != \"string\")\n      return g === 0 ? g : +g;\n    g = g.replace(c, \"\");\n    var w = s.test(g);\n    return w || o.test(g) ? l(g.slice(2), w ? 2 : 8) : r.test(g) ? n : +g;\n  }\n  return Y = m, Y;\n}\nvar zt = Lt();\nconst de = /* @__PURE__ */ lt(zt);\nfunction Vt(t) {\n  const n = z(t);\n  n.current = t, V(\n    () => () => {\n      n.current();\n    },\n    []\n  );\n}\nfunction Ft(t, n = 500, a) {\n  const c = z();\n  Vt(() => {\n    c.current && c.current.cancel();\n  });\n  const r = Ne(() => {\n    const s = de(t, n, a), o = (...l) => s(...l);\n    return o.cancel = () => {\n      s.cancel();\n    }, o.isPending = () => !!c.current, o.flush = () => s.flush(), o;\n  }, [t, n, a]);\n  return V(() => {\n    c.current = de(t, n, a);\n  }, [t, n, a]), r;\n}\nfunction Zt(t, n, a) {\n  const c = ((d, u) => d === u), r = t instanceof Function ? t() : t, [s, o] = B(r), l = z(r), i = Ft(\n    o,\n    n,\n    a\n  );\n  return c(l.current, r) || (i(r), l.current = r), [s, i];\n}\nfunction Ht({\n  threshold: t = 0,\n  root: n = null,\n  rootMargin: a = \"0%\",\n  freezeOnceVisible: c = !1,\n  initialIsIntersecting: r = !1,\n  onChange: s\n} = {}) {\n  var o;\n  const [l, i] = B(null), [d, u] = B(() => ({\n    isIntersecting: r,\n    entry: void 0\n  })), v = z();\n  v.current = s;\n  const f = ((o = d.entry) == null ? void 0 : o.isIntersecting) && c;\n  V(() => {\n    if (!l || !(\"IntersectionObserver\" in window) || f)\n      return;\n    const h = new IntersectionObserver(\n      (m) => {\n        const y = Array.isArray(h.thresholds) ? h.thresholds : [h.thresholds];\n        m.forEach((C) => {\n          const A = C.isIntersecting && y.some((N) => C.intersectionRatio >= N);\n          u({ isIntersecting: A, entry: C }), v.current && v.current(A, C);\n        });\n      },\n      { threshold: t, root: n, rootMargin: a }\n    );\n    return h.observe(l), () => {\n      h.disconnect();\n    };\n  }, [\n    l,\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    JSON.stringify(t),\n    n,\n    a,\n    f,\n    c\n  ]);\n  const p = z(null);\n  V(() => {\n    var h;\n    !l && ((h = d.entry) != null && h.target) && !c && !f && p.current !== d.entry.target && (p.current = d.entry.target, u({ isIntersecting: r, entry: void 0 }));\n  }, [l, d.entry, c, f, r]);\n  const E = [\n    i,\n    !!d.isIntersecting,\n    d.entry\n  ];\n  return E.ref = E[0], E.isIntersecting = E[1], E.entry = E[2], E;\n}\nconst Bt = /* @__PURE__ */ e.forwardRef(\n  function({\n    onTrackClick: n,\n    onClick: a,\n    onSubscriptionStatusChanged: c,\n    trackRef: r,\n    manageSubscription: s,\n    ...o\n  }, l) {\n    const i = _(r), d = e.useRef(null);\n    e.useImperativeHandle(l, () => d.current);\n    const u = Ht({ root: d.current }), [v] = Zt(u, 3e3);\n    e.useEffect(() => {\n      s && i.publication instanceof J && (v == null ? void 0 : v.isIntersecting) === !1 && (u == null ? void 0 : u.isIntersecting) === !1 && i.publication.setSubscribed(!1);\n    }, [v, i, s]), e.useEffect(() => {\n      s && i.publication instanceof J && (u == null ? void 0 : u.isIntersecting) === !0 && i.publication.setSubscribed(!0);\n    }, [u, i, s]);\n    const {\n      elementProps: f,\n      publication: p,\n      isSubscribed: E\n    } = Se(i, {\n      element: d,\n      props: o\n    });\n    e.useEffect(() => {\n      c == null || c(!!E);\n    }, [E, c]);\n    const h = (m) => {\n      a == null || a(m), n == null || n({ participant: i == null ? void 0 : i.participant, track: p });\n    };\n    return /* @__PURE__ */ e.createElement(\"video\", { ref: d, ...f, muted: !0, onClick: h });\n  }\n), ne = /* @__PURE__ */ e.forwardRef(\n  function({ trackRef: n, onSubscriptionStatusChanged: a, volume: c, ...r }, s) {\n    const o = _(n), l = e.useRef(null);\n    e.useImperativeHandle(s, () => l.current);\n    const {\n      elementProps: i,\n      isSubscribed: d,\n      track: u,\n      publication: v\n    } = Se(o, {\n      element: l,\n      props: r\n    });\n    return e.useEffect(() => {\n      a == null || a(!!d);\n    }, [d, a]), e.useEffect(() => {\n      u === void 0 || c === void 0 || (u instanceof Je ? u.setVolume(c) : j.warn(\"Volume can only be set on remote audio tracks.\"));\n    }, [c, u]), e.useEffect(() => {\n      v === void 0 || r.muted === void 0 || (v instanceof J ? v.setEnabled(!r.muted) : j.warn(\"Can only call setEnabled on remote track publications.\"));\n    }, [r.muted, v, u]), /* @__PURE__ */ e.createElement(\"audio\", { ref: l, ...i });\n  }\n);\nfunction jt(t) {\n  const n = !!st();\n  return t.participant && !n ? /* @__PURE__ */ e.createElement(we.Provider, { value: t.participant }, t.children) : /* @__PURE__ */ e.createElement(e.Fragment, null, t.children);\n}\nfunction _t(t) {\n  const n = !!te();\n  return t.trackRef && !n ? /* @__PURE__ */ e.createElement(ae.Provider, { value: t.trackRef }, t.children) : /* @__PURE__ */ e.createElement(e.Fragment, null, t.children);\n}\nconst Ot = /* @__PURE__ */ e.forwardRef(\n  function({\n    trackRef: n,\n    children: a,\n    onParticipantClick: c,\n    disableSpeakingIndicator: r,\n    ...s\n  }, o) {\n    var p, E;\n    const l = _(n), { elementProps: i } = ve({\n      htmlProps: s,\n      disableSpeakingIndicator: r,\n      onParticipantClick: c,\n      trackRef: l\n    }), d = We(l.participant), u = it(), v = (p = ot()) == null ? void 0 : p.autoSubscription, f = e.useCallback(\n      (h) => {\n        l.source && !h && u && u.pin.dispatch && ut(l, u.pin.state) && u.pin.dispatch({ msg: \"clear_pin\" });\n      },\n      [l, u]\n    );\n    return /* @__PURE__ */ e.createElement(\"div\", { ref: o, style: { position: \"relative\" }, ...i }, /* @__PURE__ */ e.createElement(_t, { trackRef: l }, /* @__PURE__ */ e.createElement(jt, { participant: l.participant }, a ?? /* @__PURE__ */ e.createElement(e.Fragment, null, $(l) && (((E = l.publication) == null ? void 0 : E.kind) === \"video\" || l.source === S.Source.Camera || l.source === S.Source.ScreenShare) ? /* @__PURE__ */ e.createElement(\n      Bt,\n      {\n        trackRef: l,\n        onSubscriptionStatusChanged: f,\n        manageSubscription: v\n      }\n    ) : $(l) && /* @__PURE__ */ e.createElement(\n      ne,\n      {\n        trackRef: l,\n        onSubscriptionStatusChanged: f\n      }\n    ), /* @__PURE__ */ e.createElement(\"div\", { className: \"lk-participant-placeholder\" }, /* @__PURE__ */ e.createElement(Nt, null)), /* @__PURE__ */ e.createElement(\"div\", { className: \"lk-participant-metadata\" }, /* @__PURE__ */ e.createElement(\"div\", { className: \"lk-participant-metadata-item\" }, l.source === S.Source.Camera ? /* @__PURE__ */ e.createElement(e.Fragment, null, d && /* @__PURE__ */ e.createElement(Rt, { style: { marginRight: \"0.25rem\" } }), /* @__PURE__ */ e.createElement(\n      be,\n      {\n        trackRef: {\n          participant: l.participant,\n          source: S.Source.Microphone\n        },\n        show: \"muted\"\n      }\n    ), /* @__PURE__ */ e.createElement(K, null)) : /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(Re, { style: { marginRight: \"0.25rem\" } }), /* @__PURE__ */ e.createElement(K, null, \"'s screen\"))), /* @__PURE__ */ e.createElement(ye, { className: \"lk-participant-metadata-item\" }))), /* @__PURE__ */ e.createElement(Tt, { trackRef: l }))));\n  }\n);\nfunction Ea(t) {\n  const n = I(t, { className: \"lk-focus-layout\" });\n  return /* @__PURE__ */ e.createElement(\"div\", { ...n }, t.children);\n}\nfunction pa({ trackRef: t, ...n }) {\n  return /* @__PURE__ */ e.createElement(Ot, { trackRef: t, ...n });\n}\nfunction Ce({ tracks: t, ...n }) {\n  return /* @__PURE__ */ e.createElement(e.Fragment, null, t.map((a) => /* @__PURE__ */ e.createElement(\n    ae.Provider,\n    {\n      value: a,\n      key: ke(a)\n    },\n    ee(n.children)\n  )));\n}\nfunction Wt({\n  totalPageCount: t,\n  nextPage: n,\n  prevPage: a,\n  currentPage: c,\n  pagesContainer: r\n}) {\n  const [s, o] = e.useState(!1);\n  return e.useEffect(() => {\n    let l;\n    return r && (l = dt(r.current, 2e3).subscribe(\n      o\n    )), () => {\n      l && l.unsubscribe();\n    };\n  }, [r]), /* @__PURE__ */ e.createElement(\"div\", { className: \"lk-pagination-control\", \"data-lk-user-interaction\": s }, /* @__PURE__ */ e.createElement(\"button\", { className: \"lk-button\", onClick: a }, /* @__PURE__ */ e.createElement(ie, null)), /* @__PURE__ */ e.createElement(\"span\", { className: \"lk-pagination-count\" }, `${c} of ${t}`), /* @__PURE__ */ e.createElement(\"button\", { className: \"lk-button\", onClick: n }, /* @__PURE__ */ e.createElement(ie, null)));\n}\nconst qt = /* @__PURE__ */ e.forwardRef(\n  function({ totalPageCount: n, currentPage: a }, c) {\n    const r = new Array(n).fill(\"\").map((s, o) => o + 1 === a ? /* @__PURE__ */ e.createElement(\"span\", { \"data-lk-active\": !0, key: o }) : /* @__PURE__ */ e.createElement(\"span\", { key: o }));\n    return /* @__PURE__ */ e.createElement(\"div\", { ref: c, className: \"lk-pagination-indicator\" }, r);\n  }\n);\nfunction wa({ tracks: t, ...n }) {\n  const a = e.createRef(), c = e.useMemo(\n    () => I(n, { className: \"lk-grid-layout\" }),\n    [n]\n  ), { layout: r } = qe(a, t.length), s = $e(r.maxTiles, t);\n  return De(a, {\n    onLeftSwipe: s.nextPage,\n    onRightSwipe: s.prevPage\n  }), /* @__PURE__ */ e.createElement(\"div\", { ref: a, \"data-lk-pagination\": s.totalPageCount > 1, ...c }, /* @__PURE__ */ e.createElement(Ce, { tracks: s.tracks }, n.children), t.length > r.maxTiles && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n    qt,\n    {\n      totalPageCount: s.totalPageCount,\n      currentPage: s.currentPage\n    }\n  ), /* @__PURE__ */ e.createElement(Wt, { pagesContainer: a, ...s })));\n}\nconst $t = 130, Dt = 140, me = 1, Ie = 16 / 10, Ut = (1 - Ie) * -1;\nfunction ka({ tracks: t, orientation: n, ...a }) {\n  const c = e.useRef(null), [r, s] = e.useState(0), { width: o, height: l } = Ue(c), i = n || (l >= o ? \"vertical\" : \"horizontal\"), d = i === \"vertical\" ? Math.max(o * Ut, $t) : Math.max(l * Ie, Dt), u = mt(), v = Math.max(i === \"vertical\" ? (l - u) / d : (o - u) / d, me);\n  let f = Math.round(v);\n  Math.abs(v - r) < 0.5 ? f = Math.round(r) : r !== v && s(v);\n  const p = Ge(t, f);\n  return e.useLayoutEffect(() => {\n    c.current && (c.current.dataset.lkOrientation = i, c.current.style.setProperty(\"--lk-max-visible-tiles\", f.toString()));\n  }, [f, i]), /* @__PURE__ */ e.createElement(\"aside\", { key: i, className: \"lk-carousel\", ref: c, ...a }, /* @__PURE__ */ e.createElement(Ce, { tracks: p }, a.children));\n}\nfunction Ra({\n  value: t,\n  onPinChange: n,\n  onWidgetChange: a,\n  children: c\n}) {\n  const r = ft(t);\n  return e.useEffect(() => {\n    j.debug(\"PinState Updated\", { state: r.pin.state }), n && r.pin.state && n(r.pin.state);\n  }, [r.pin.state, n]), e.useEffect(() => {\n    j.debug(\"Widget Updated\", { widgetState: r.widget.state }), a && r.widget.state && a(r.widget.state);\n  }, [a, r.widget.state]), /* @__PURE__ */ e.createElement(pe.Provider, { value: r }, c);\n}\nconst Ma = /* @__PURE__ */ e.forwardRef(\n  function({ trackRef: n, ...a }, c) {\n    const u = _(n), v = Ee(u, { bands: 7, loPass: 300 });\n    return /* @__PURE__ */ e.createElement(\n      \"svg\",\n      {\n        ref: c,\n        width: \"100%\",\n        height: \"100%\",\n        viewBox: \"0 0 200 90\",\n        ...a,\n        className: \"lk-audio-visualizer\"\n      },\n      /* @__PURE__ */ e.createElement(\"rect\", { x: \"0\", y: \"0\", width: \"100%\", height: \"100%\" }),\n      /* @__PURE__ */ e.createElement(\n        \"g\",\n        {\n          style: {\n            transform: `translate(${130 / 2}px, 0)`\n          }\n        },\n        v.map((f, p) => /* @__PURE__ */ e.createElement(\n          \"rect\",\n          {\n            key: p,\n            x: p * 10,\n            y: 90 / 2 - f * 50 / 2,\n            width: 6,\n            height: f * 50\n          }\n        ))\n      )\n    );\n  }\n);\nfunction ya({ participants: t, ...n }) {\n  return /* @__PURE__ */ e.createElement(e.Fragment, null, t.map((a) => /* @__PURE__ */ e.createElement(we.Provider, { value: a, key: a.identity }, ee(n.children))));\n}\nfunction ba({ room: t, volume: n, muted: a }) {\n  const c = Qe(\n    [S.Source.Microphone, S.Source.ScreenShareAudio, S.Source.Unknown],\n    {\n      updateOnlyOn: [],\n      onlySubscribed: !0,\n      room: t\n    }\n  ).filter((r) => !r.participant.isLocal && r.publication.kind === S.Kind.Audio);\n  return /* @__PURE__ */ e.createElement(\"div\", { style: { display: \"none\" } }, c.map((r) => /* @__PURE__ */ e.createElement(\n    ne,\n    {\n      key: ke(r),\n      trackRef: r,\n      volume: n,\n      muted: a\n    }\n  )));\n}\nconst Sa = /* @__PURE__ */ e.forwardRef(function({ childrenPosition: n = \"before\", children: a, ...c }, r) {\n  const { name: s } = Xe();\n  return /* @__PURE__ */ e.createElement(\"span\", { ref: r, ...c }, n === \"before\" && a, s, n === \"after\" && a);\n});\nfunction Gt(t) {\n  const n = e.useMemo(() => I(t, { className: \"lk-toast\" }), [t]);\n  return /* @__PURE__ */ e.createElement(\"div\", { ...n }, t.children);\n}\nconst Qt = (t) => {\n  const n = [];\n  for (let a = 0; a < t; a++)\n    n.push([a, t - 1 - a]);\n  return n;\n}, fe = (t) => [[Math.floor(t / 2)], [-1]], Xt = (t, n, a) => {\n  const [c, r] = B(0), [s, o] = B([[]]);\n  V(() => {\n    if (t === \"thinking\")\n      o(fe(n));\n    else if (t === \"connecting\" || t === \"initializing\") {\n      const i = [...Qt(n)];\n      o(i);\n    } else o(t === \"listening\" ? fe(n) : t === void 0 || t === \"speaking\" ? [new Array(n).fill(0).map((i, d) => d)] : [[]]);\n    r(0);\n  }, [t, n]);\n  const l = z(null);\n  return V(() => {\n    let i = performance.now();\n    const d = (u) => {\n      u - i >= a && (r((f) => f + 1), i = u), l.current = requestAnimationFrame(d);\n    };\n    return l.current = requestAnimationFrame(d), () => {\n      l.current !== null && cancelAnimationFrame(l.current);\n    };\n  }, [a, n, t, s.length]), s[c % s.length];\n}, Yt = /* @__PURE__ */ new Map([\n  [\"connecting\", 2e3],\n  [\"initializing\", 2e3],\n  [\"listening\", 500],\n  [\"thinking\", 150]\n]), Jt = (t, n) => {\n  if (t === void 0)\n    return 1e3;\n  let a = Yt.get(t);\n  if (a)\n    switch (t) {\n      case \"connecting\":\n        a /= n;\n        break;\n    }\n  return a;\n}, Kt = /* @__PURE__ */ e.forwardRef(\n  function({ state: n, options: a, barCount: c = 15, trackRef: r, track: s, children: o, ...l }, i) {\n    const d = I(l, { className: \"lk-audio-bar-visualizer\" });\n    let u = te();\n    (r || s) && (u = r || s);\n    const v = Ee(u, {\n      bands: c,\n      loPass: 100,\n      hiPass: 200\n    }), f = (a == null ? void 0 : a.minHeight) ?? 20, p = (a == null ? void 0 : a.maxHeight) ?? 100, E = Xt(\n      n,\n      c,\n      Jt(n, c) ?? 100\n    );\n    return /* @__PURE__ */ e.createElement(\"div\", { ref: i, ...d, \"data-lk-va-state\": n }, v.map(\n      (h, m) => o ? ee(o, {\n        \"data-lk-highlighted\": E.includes(m),\n        \"data-lk-bar-index\": m,\n        className: \"lk-audio-bar\",\n        style: { height: `${Math.min(p, Math.max(f, h * 100 + 5))}%` }\n      }) : /* @__PURE__ */ e.createElement(\n        \"span\",\n        {\n          key: m,\n          \"data-lk-highlighted\": E.includes(m),\n          \"data-lk-bar-index\": m,\n          className: `lk-audio-bar ${E.includes(m) && \"lk-highlighted\"}`,\n          style: {\n            // TODO transform animations would be more performant, however the border-radius gets distorted when using scale transforms. a 9-slice approach (or 3 in this case) could work\n            // transform: `scale(1, ${Math.min(maxHeight, Math.max(minHeight, volume))}`,\n            height: `${Math.min(p, Math.max(f, h * 100 + 5))}%`\n          }\n        }\n      )\n    ));\n  }\n), Ca = /* @__PURE__ */ e.forwardRef(\n  function({\n    children: n,\n    disableSpeakingIndicator: a,\n    onParticipantClick: c,\n    trackRef: r,\n    ...s\n  }, o) {\n    const l = _(r), { elementProps: i } = ve({\n      trackRef: l,\n      htmlProps: s,\n      disableSpeakingIndicator: a,\n      onParticipantClick: c\n    });\n    return /* @__PURE__ */ e.createElement(\"div\", { ref: o, style: { position: \"relative\", minHeight: \"160px\" }, ...i }, /* @__PURE__ */ e.createElement(ae.Provider, { value: l }, n ?? /* @__PURE__ */ e.createElement(e.Fragment, null, $(l) && /* @__PURE__ */ e.createElement(ne, { trackRef: l }), /* @__PURE__ */ e.createElement(Kt, { barCount: 7, options: { minHeight: 8 } }), /* @__PURE__ */ e.createElement(\"div\", { className: \"lk-participant-metadata\" }, /* @__PURE__ */ e.createElement(\"div\", { className: \"lk-participant-metadata-item\" }, /* @__PURE__ */ e.createElement(be, { trackRef: l }), /* @__PURE__ */ e.createElement(K, null)), /* @__PURE__ */ e.createElement(ye, { className: \"lk-participant-metadata-item\" })))));\n  }\n);\nfunction Ia(t) {\n  const [n, a] = e.useState(void 0), c = he(t.room);\n  return e.useEffect(() => {\n    switch (c) {\n      case X.Reconnecting:\n        a(\n          /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(oe, { className: \"lk-spinner\" }), \" Reconnecting\")\n        );\n        break;\n      case X.Connecting:\n        a(\n          /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(oe, { className: \"lk-spinner\" }), \" Connecting\")\n        );\n        break;\n      case X.Disconnected:\n        a(/* @__PURE__ */ e.createElement(e.Fragment, null, \"Disconnected\"));\n        break;\n      default:\n        a(void 0);\n        break;\n    }\n  }, [c]), n ? /* @__PURE__ */ e.createElement(Gt, { className: \"lk-toast-connection-state\" }, n) : /* @__PURE__ */ e.createElement(e.Fragment, null);\n}\nconst xa = /* @__PURE__ */ e.forwardRef(\n  function({ entry: n, hideName: a = !1, hideTimestamp: c = !1, messageFormatter: r, ...s }, o) {\n    var f, p, E, h;\n    const l = e.useMemo(() => r ? r(n.message) : n.message, [n.message, r]), i = !!n.editTimestamp, d = new Date(n.timestamp), u = typeof navigator < \"u\" ? navigator.language : \"en-US\", v = ((f = n.from) == null ? void 0 : f.name) ?? ((p = n.from) == null ? void 0 : p.identity);\n    return /* @__PURE__ */ e.createElement(\n      \"li\",\n      {\n        ref: o,\n        className: \"lk-chat-entry\",\n        title: d.toLocaleTimeString(u, { timeStyle: \"full\" }),\n        \"data-lk-message-origin\": (E = n.from) != null && E.isLocal ? \"local\" : \"remote\",\n        ...s\n      },\n      (!c || !a || i) && /* @__PURE__ */ e.createElement(\"span\", { className: \"lk-meta-data\" }, !a && /* @__PURE__ */ e.createElement(\"strong\", { className: \"lk-participant-name\" }, v), (!c || i) && /* @__PURE__ */ e.createElement(\"span\", { className: \"lk-timestamp\" }, i && \"edited \", d.toLocaleTimeString(u, { timeStyle: \"short\" }))),\n      /* @__PURE__ */ e.createElement(\"span\", { className: \"lk-message-body\" }, l),\n      /* @__PURE__ */ e.createElement(\"span\", { className: \"lk-message-attachements\" }, (h = n.attachedFiles) == null ? void 0 : h.map(\n        (m) => m.type.startsWith(\"image/\") && /* @__PURE__ */ e.createElement(\n          \"img\",\n          {\n            style: { maxWidth: \"300px\", maxHeight: \"300px\" },\n            key: m.name,\n            src: URL.createObjectURL(m),\n            alt: m.name\n          }\n        )\n      ))\n    );\n  }\n);\nfunction Pa(t) {\n  return ht(t, gt()).map((n, a) => {\n    if (typeof n == \"string\")\n      return n;\n    {\n      const c = n.content.toString(), r = n.type === \"url\" ? /^http(s?):\\/\\//.test(c) ? c : `https://${c}` : `mailto:${c}`;\n      return /* @__PURE__ */ e.createElement(\"a\", { className: \"lk-chat-link\", key: a, href: r, target: \"_blank\", rel: \"noreferrer\" }, c);\n    }\n  });\n}\nfunction Ta(t) {\n  return /* @__PURE__ */ e.createElement(vt.Provider, { value: t.session }, /* @__PURE__ */ e.createElement(Et.Provider, { value: t.session.room }, t.children));\n}\nexport {\n  Pt as $,\n  Ma as A,\n  Kt as B,\n  sa as C,\n  ia as D,\n  pt as E,\n  Ea as F,\n  wa as G,\n  wt as H,\n  ie as I,\n  kt as J,\n  Rt as K,\n  Ra as L,\n  fa as M,\n  Mt as N,\n  yt as O,\n  Ot as P,\n  bt as Q,\n  ba as R,\n  oa as S,\n  va as T,\n  St as U,\n  Bt as V,\n  Ct as W,\n  It as X,\n  Re as Y,\n  xt as Z,\n  oe as _,\n  xa as a,\n  Nt as b,\n  ua as c,\n  da as d,\n  ma as e,\n  ga as f,\n  ka as g,\n  pa as h,\n  Ia as i,\n  Ce as j,\n  Ca as k,\n  Gt as l,\n  Pa as m,\n  ca as n,\n  la as o,\n  Tt as p,\n  ha as q,\n  ye as r,\n  ne as s,\n  K as t,\n  be as u,\n  ya as v,\n  Sa as w,\n  jt as x,\n  _t as y,\n  Ta as z\n};\n//# sourceMappingURL=components-DuRBtGp8.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n//# sourceMappingURL=LayoutGroupContext.mjs.map\n","\"use client\";\nimport { useRef } from 'react';\n\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nfunction useConstant(init) {\n    const ref = useRef(null);\n    if (ref.current === null) {\n        ref.current = init();\n    }\n    return ref.current;\n}\n\nexport { useConstant };\n//# sourceMappingURL=use-constant.mjs.map\n","const isBrowser = typeof window !== \"undefined\";\n\nexport { isBrowser };\n//# sourceMappingURL=is-browser.mjs.map\n","\"use client\";\nimport { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n//# sourceMappingURL=use-isomorphic-effect.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = \n/* @__PURE__ */ createContext(null);\n\nexport { PresenceContext };\n//# sourceMappingURL=PresenceContext.mjs.map\n","function addUniqueItem(arr, item) {\n    if (arr.indexOf(item) === -1)\n        arr.push(item);\n}\nfunction removeItem(arr, item) {\n    const index = arr.indexOf(item);\n    if (index > -1)\n        arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n    const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n    if (startIndex >= 0 && startIndex < arr.length) {\n        const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n        const [item] = arr.splice(fromIndex, 1);\n        arr.splice(endIndex, 0, item);\n    }\n    return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n//# sourceMappingURL=array.mjs.map\n","const clamp = (min, max, v) => {\n    if (v > max)\n        return max;\n    if (v < min)\n        return min;\n    return v;\n};\n\nexport { clamp };\n//# sourceMappingURL=clamp.mjs.map\n","function formatErrorMessage(message, errorCode) {\n    return errorCode\n        ? `${message}. For more information and steps for solving, visit https://motion.dev/troubleshooting/${errorCode}`\n        : message;\n}\n\nexport { formatErrorMessage };\n//# sourceMappingURL=format-error-message.mjs.map\n","import { formatErrorMessage } from './format-error-message.mjs';\n\nlet warning = () => { };\nlet invariant = () => { };\nif (typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV !== \"production\") {\n    warning = (check, message, errorCode) => {\n        if (!check && typeof console !== \"undefined\") {\n            console.warn(formatErrorMessage(message, errorCode));\n        }\n    };\n    invariant = (check, message, errorCode) => {\n        if (!check) {\n            throw new Error(formatErrorMessage(message, errorCode));\n        }\n    };\n}\n\nexport { invariant, warning };\n//# sourceMappingURL=errors.mjs.map\n","const MotionGlobalConfig = {};\n\nexport { MotionGlobalConfig };\n//# sourceMappingURL=global-config.mjs.map\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n//# sourceMappingURL=is-numerical-string.mjs.map\n","function isObject(value) {\n    return typeof value === \"object\" && value !== null;\n}\n\nexport { isObject };\n//# sourceMappingURL=is-object.mjs.map\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n//# sourceMappingURL=is-zero-value-string.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nfunction memo(callback) {\n    let result;\n    return () => {\n        if (result === undefined)\n            result = callback();\n        return result;\n    };\n}\n\nexport { memo };\n//# sourceMappingURL=memo.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst noop = (any) => any;\n\nexport { noop };\n//# sourceMappingURL=noop.mjs.map\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param  {...functions} transformers\n * @return {function}\n */\nconst combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n//# sourceMappingURL=pipe.mjs.map\n","/*\n  Progress within given range\n\n  Given a lower limit and an upper limit, we return the progress\n  (expressed as a number 0-1) represented by the given value, and\n  limit that progress to within 0-1.\n\n  @param [number]: Lower limit\n  @param [number]: Upper limit\n  @param [number]: Value to find progress within given range\n  @return [number]: Progress of value within range as expressed 0-1\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst progress = (from, to, value) => {\n    const toFromDifference = to - from;\n    return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n//# sourceMappingURL=progress.mjs.map\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n    constructor() {\n        this.subscriptions = [];\n    }\n    add(handler) {\n        addUniqueItem(this.subscriptions, handler);\n        return () => removeItem(this.subscriptions, handler);\n    }\n    notify(a, b, c) {\n        const numSubscriptions = this.subscriptions.length;\n        if (!numSubscriptions)\n            return;\n        if (numSubscriptions === 1) {\n            /**\n             * If there's only a single handler we can just call it without invoking a loop.\n             */\n            this.subscriptions[0](a, b, c);\n        }\n        else {\n            for (let i = 0; i < numSubscriptions; i++) {\n                /**\n                 * Check whether the handler exists before firing as it's possible\n                 * the subscriptions were modified during this loop running.\n                 */\n                const handler = this.subscriptions[i];\n                handler && handler(a, b, c);\n            }\n        }\n    }\n    getSize() {\n        return this.subscriptions.length;\n    }\n    clear() {\n        this.subscriptions.length = 0;\n    }\n}\n\nexport { SubscriptionManager };\n//# sourceMappingURL=subscription-manager.mjs.map\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n//# sourceMappingURL=time-conversion.mjs.map\n","/*\n  Convert velocity into velocity per second\n\n  @param [number]: Unit per frame\n  @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n    return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\nexport { velocityPerSecond };\n//# sourceMappingURL=velocity-per-second.mjs.map\n","import { noop } from '../noop.mjs';\n\n/*\n  Bezier function generator\n  This has been modified from Gaëtan Renaudeau's BezierEasing\n  https://github.com/gre/bezier-easing/blob/master/src/index.js\n  https://github.com/gre/bezier-easing/blob/master/LICENSE\n  \n  I've removed the newtonRaphsonIterate algo because in benchmarking it\n  wasn't noticeably faster than binarySubdivision, indeed removing it\n  usually improved times, depending on the curve.\n  I also removed the lookup table, as for the added bundle size and loop we're\n  only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n  to 12 to compensate and this still tended to be faster for no perceivable\n  loss in accuracy.\n  Usage\n    const easeOut = cubicBezier(.17,.67,.83,.67);\n    const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n    t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n    let currentX;\n    let currentT;\n    let i = 0;\n    do {\n        currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - x;\n        if (currentX > 0.0) {\n            upperBound = currentT;\n        }\n        else {\n            lowerBound = currentT;\n        }\n    } while (Math.abs(currentX) > subdivisionPrecision &&\n        ++i < subdivisionMaxIterations);\n    return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n    // If this is a linear gradient, return linear easing\n    if (mX1 === mY1 && mX2 === mY2)\n        return noop;\n    const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n    // If animation is at start/end, return t without easing\n    return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n//# sourceMappingURL=cubic-bezier.mjs.map\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n//# sourceMappingURL=mirror.mjs.map\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n//# sourceMappingURL=reverse.mjs.map\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = /*@__PURE__*/ cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = /*@__PURE__*/ reverseEasing(backOut);\nconst backInOut = /*@__PURE__*/ mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n//# sourceMappingURL=back.mjs.map\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => p >= 1\n    ? 1\n    : (p *= 2) < 1\n        ? 0.5 * backIn(p)\n        : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n//# sourceMappingURL=anticipate.mjs.map\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n//# sourceMappingURL=circ.mjs.map\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = /*@__PURE__*/ cubicBezier(0.42, 0, 1, 1);\nconst easeOut = /*@__PURE__*/ cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = /*@__PURE__*/ cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n//# sourceMappingURL=ease.mjs.map\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n//# sourceMappingURL=is-bezier-definition.mjs.map\n","import { invariant } from '../../errors.mjs';\nimport { noop } from '../../noop.mjs';\nimport { anticipate } from '../anticipate.mjs';\nimport { backOut, backInOut, backIn } from '../back.mjs';\nimport { circOut, circInOut, circIn } from '../circ.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { easeOut, easeInOut, easeIn } from '../ease.mjs';\nimport { isBezierDefinition } from './is-bezier-definition.mjs';\n\nconst easingLookup = {\n    linear: noop,\n    easeIn,\n    easeInOut,\n    easeOut,\n    circIn,\n    circInOut,\n    circOut,\n    backIn,\n    backInOut,\n    backOut,\n    anticipate,\n};\nconst isValidEasing = (easing) => {\n    return typeof easing === \"string\";\n};\nconst easingDefinitionToFunction = (definition) => {\n    if (isBezierDefinition(definition)) {\n        // If cubic bezier definition, create bezier curve\n        invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`, \"cubic-bezier-length\");\n        const [x1, y1, x2, y2] = definition;\n        return cubicBezier(x1, y1, x2, y2);\n    }\n    else if (isValidEasing(definition)) {\n        // Else lookup from table\n        invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`, \"invalid-easing-type\");\n        return easingLookup[definition];\n    }\n    return definition;\n};\n\nexport { easingDefinitionToFunction };\n//# sourceMappingURL=map.mjs.map\n","const stepsOrder = [\n    \"setup\", // Compute\n    \"read\", // Read\n    \"resolveKeyframes\", // Write/Read/Write/Read\n    \"preUpdate\", // Compute\n    \"update\", // Compute\n    \"preRender\", // Compute\n    \"render\", // Write\n    \"postRender\", // Compute\n];\n\nexport { stepsOrder };\n//# sourceMappingURL=order.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { stepsOrder } from './order.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n    let runNextFrame = false;\n    let useDefaultElapsed = true;\n    const state = {\n        delta: 0.0,\n        timestamp: 0.0,\n        isProcessing: false,\n    };\n    const flagRunNextFrame = () => (runNextFrame = true);\n    const steps = stepsOrder.reduce((acc, key) => {\n        acc[key] = createRenderStep(flagRunNextFrame, allowKeepAlive ? key : undefined);\n        return acc;\n    }, {});\n    const { setup, read, resolveKeyframes, preUpdate, update, preRender, render, postRender, } = steps;\n    const processBatch = () => {\n        const useManualTiming = MotionGlobalConfig.useManualTiming;\n        const timestamp = useManualTiming\n            ? state.timestamp\n            : performance.now();\n        runNextFrame = false;\n        if (!useManualTiming) {\n            state.delta = useDefaultElapsed\n                ? 1000 / 60\n                : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n        }\n        state.timestamp = timestamp;\n        state.isProcessing = true;\n        // Unrolled render loop for better per-frame performance\n        setup.process(state);\n        read.process(state);\n        resolveKeyframes.process(state);\n        preUpdate.process(state);\n        update.process(state);\n        preRender.process(state);\n        render.process(state);\n        postRender.process(state);\n        state.isProcessing = false;\n        if (runNextFrame && allowKeepAlive) {\n            useDefaultElapsed = false;\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const wake = () => {\n        runNextFrame = true;\n        useDefaultElapsed = true;\n        if (!state.isProcessing) {\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const schedule = stepsOrder.reduce((acc, key) => {\n        const step = steps[key];\n        acc[key] = (process, keepAlive = false, immediate = false) => {\n            if (!runNextFrame)\n                wake();\n            return step.schedule(process, keepAlive, immediate);\n        };\n        return acc;\n    }, {});\n    const cancel = (process) => {\n        for (let i = 0; i < stepsOrder.length; i++) {\n            steps[stepsOrder[i]].cancel(process);\n        }\n    };\n    return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher };\n//# sourceMappingURL=batcher.mjs.map\n","import { statsBuffer } from '../stats/buffer.mjs';\n\nfunction createRenderStep(runNextFrame, stepName) {\n    /**\n     * We create and reuse two queues, one to queue jobs for the current frame\n     * and one for the next. We reuse to avoid triggering GC after x frames.\n     */\n    let thisFrame = new Set();\n    let nextFrame = new Set();\n    /**\n     * Track whether we're currently processing jobs in this step. This way\n     * we can decide whether to schedule new jobs for this frame or next.\n     */\n    let isProcessing = false;\n    let flushNextFrame = false;\n    /**\n     * A set of processes which were marked keepAlive when scheduled.\n     */\n    const toKeepAlive = new WeakSet();\n    let latestFrameData = {\n        delta: 0.0,\n        timestamp: 0.0,\n        isProcessing: false,\n    };\n    let numCalls = 0;\n    function triggerCallback(callback) {\n        if (toKeepAlive.has(callback)) {\n            step.schedule(callback);\n            runNextFrame();\n        }\n        numCalls++;\n        callback(latestFrameData);\n    }\n    const step = {\n        /**\n         * Schedule a process to run on the next frame.\n         */\n        schedule: (callback, keepAlive = false, immediate = false) => {\n            const addToCurrentFrame = immediate && isProcessing;\n            const queue = addToCurrentFrame ? thisFrame : nextFrame;\n            if (keepAlive)\n                toKeepAlive.add(callback);\n            queue.add(callback);\n            return callback;\n        },\n        /**\n         * Cancel the provided callback from running on the next frame.\n         */\n        cancel: (callback) => {\n            nextFrame.delete(callback);\n            toKeepAlive.delete(callback);\n        },\n        /**\n         * Execute all schedule callbacks.\n         */\n        process: (frameData) => {\n            latestFrameData = frameData;\n            /**\n             * If we're already processing we've probably been triggered by a flushSync\n             * inside an existing process. Instead of executing, mark flushNextFrame\n             * as true and ensure we flush the following frame at the end of this one.\n             */\n            if (isProcessing) {\n                flushNextFrame = true;\n                return;\n            }\n            isProcessing = true;\n            // Swap this frame and the next to avoid GC\n            const prevFrame = thisFrame;\n            thisFrame = nextFrame;\n            nextFrame = prevFrame;\n            // Execute this frame\n            thisFrame.forEach(triggerCallback);\n            /**\n             * If we're recording stats then\n             */\n            if (stepName && statsBuffer.value) {\n                statsBuffer.value.frameloop[stepName].push(numCalls);\n            }\n            numCalls = 0;\n            // Clear the frame so no callbacks remain. This is to avoid\n            // memory leaks should this render step not run for a while.\n            thisFrame.clear();\n            isProcessing = false;\n            if (flushNextFrame) {\n                flushNextFrame = false;\n                step.process(frameData);\n            }\n        },\n    };\n    return step;\n}\n\nexport { createRenderStep };\n//# sourceMappingURL=render-step.mjs.map\n","import { noop } from 'motion-utils';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = /* @__PURE__ */ createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, frameSteps };\n//# sourceMappingURL=frame.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n    now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n    now: () => {\n        if (now === undefined) {\n            time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n                ? frameData.timestamp\n                : performance.now());\n        }\n        return now;\n    },\n    set: (newTime) => {\n        now = newTime;\n        queueMicrotask(clearTime);\n    },\n};\n\nexport { time };\n//# sourceMappingURL=sync-time.mjs.map\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = \n/*@__PURE__*/ checkStringStartsWith(\"--\");\nconst startsAsVariableToken = \n/*@__PURE__*/ checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n    const startsWithToken = startsAsVariableToken(value);\n    if (!startsWithToken)\n        return false;\n    // Ensure any comments are stripped from the value as this can harm performance of the regex.\n    return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n/**\n * Check if a value contains a CSS variable anywhere (e.g. inside calc()).\n * Unlike isCSSVariableToken which checks if the value IS a var() token,\n * this checks if the value CONTAINS var() somewhere in the string.\n */\nfunction containsCSSVariable(value) {\n    if (typeof value !== \"string\")\n        return false;\n    // Strip comments to avoid false positives\n    return value.split(\"/*\")[0].includes(\"var(--\");\n}\n\nexport { containsCSSVariable, isCSSVariableName, isCSSVariableToken };\n//# sourceMappingURL=is-css-variable.mjs.map\n","import { clamp } from 'motion-utils';\n\nconst number = {\n    test: (v) => typeof v === \"number\",\n    parse: parseFloat,\n    transform: (v) => v,\n};\nconst alpha = {\n    ...number,\n    transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n    ...number,\n    default: 1,\n};\n\nexport { alpha, number, scale };\n//# sourceMappingURL=index.mjs.map\n","// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\n\nexport { sanitize };\n//# sourceMappingURL=sanitize.mjs.map\n","const floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\n\nexport { floatRegex };\n//# sourceMappingURL=float-regex.mjs.map\n","const singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\n\nexport { singleColorRegex };\n//# sourceMappingURL=single-color-regex.mjs.map\n","import { floatRegex } from '../utils/float-regex.mjs';\nimport { isNullish } from '../utils/is-nullish.mjs';\nimport { singleColorRegex } from '../utils/single-color-regex.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n    return Boolean((typeof v === \"string\" &&\n        singleColorRegex.test(v) &&\n        v.startsWith(type)) ||\n        (testProp &&\n            !isNullish(v) &&\n            Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n    if (typeof v !== \"string\")\n        return v;\n    const [a, b, c, alpha] = v.match(floatRegex);\n    return {\n        [aName]: parseFloat(a),\n        [bName]: parseFloat(b),\n        [cName]: parseFloat(c),\n        alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n    };\n};\n\nexport { isColorString, splitColor };\n//# sourceMappingURL=utils.mjs.map\n","function isNullish(v) {\n    return v == null;\n}\n\nexport { isNullish };\n//# sourceMappingURL=is-nullish.mjs.map\n","import { clamp } from 'motion-utils';\nimport { number, alpha } from '../numbers/index.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { splitColor, isColorString } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n    ...number,\n    transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n    test: /*@__PURE__*/ isColorString(\"rgb\", \"red\"),\n    parse: /*@__PURE__*/ splitColor(\"red\", \"green\", \"blue\"),\n    transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n        rgbUnit.transform(red) +\n        \", \" +\n        rgbUnit.transform(green) +\n        \", \" +\n        rgbUnit.transform(blue) +\n        \", \" +\n        sanitize(alpha.transform(alpha$1)) +\n        \")\",\n};\n\nexport { rgbUnit, rgba };\n//# sourceMappingURL=rgba.mjs.map\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n    let r = \"\";\n    let g = \"\";\n    let b = \"\";\n    let a = \"\";\n    // If we have 6 characters, ie #FF0000\n    if (v.length > 5) {\n        r = v.substring(1, 3);\n        g = v.substring(3, 5);\n        b = v.substring(5, 7);\n        a = v.substring(7, 9);\n        // Or we have 3 characters, ie #F00\n    }\n    else {\n        r = v.substring(1, 2);\n        g = v.substring(2, 3);\n        b = v.substring(3, 4);\n        a = v.substring(4, 5);\n        r += r;\n        g += g;\n        b += b;\n        a += a;\n    }\n    return {\n        red: parseInt(r, 16),\n        green: parseInt(g, 16),\n        blue: parseInt(b, 16),\n        alpha: a ? parseInt(a, 16) / 255 : 1,\n    };\n}\nconst hex = {\n    test: /*@__PURE__*/ isColorString(\"#\"),\n    parse: parseHex,\n    transform: rgba.transform,\n};\n\nexport { hex };\n//# sourceMappingURL=hex.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst createUnitType = (unit) => ({\n    test: (v) => typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1,\n    parse: parseFloat,\n    transform: (v) => `${v}${unit}`,\n});\nconst degrees = /*@__PURE__*/ createUnitType(\"deg\");\nconst percent = /*@__PURE__*/ createUnitType(\"%\");\nconst px = /*@__PURE__*/ createUnitType(\"px\");\nconst vh = /*@__PURE__*/ createUnitType(\"vh\");\nconst vw = /*@__PURE__*/ createUnitType(\"vw\");\nconst progressPercentage = /*@__PURE__*/ (() => ({\n    ...percent,\n    parse: (v) => percent.parse(v) / 100,\n    transform: (v) => percent.transform(v * 100),\n}))();\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n//# sourceMappingURL=units.mjs.map\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { splitColor, isColorString } from './utils.mjs';\n\nconst hsla = {\n    test: /*@__PURE__*/ isColorString(\"hsl\", \"hue\"),\n    parse: /*@__PURE__*/ splitColor(\"hue\", \"saturation\", \"lightness\"),\n    transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n        return (\"hsla(\" +\n            Math.round(hue) +\n            \", \" +\n            percent.transform(sanitize(saturation)) +\n            \", \" +\n            percent.transform(sanitize(lightness)) +\n            \", \" +\n            sanitize(alpha.transform(alpha$1)) +\n            \")\");\n    },\n};\n\nexport { hsla };\n//# sourceMappingURL=hsla.mjs.map\n","import { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n    test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n    parse: (v) => {\n        if (rgba.test(v)) {\n            return rgba.parse(v);\n        }\n        else if (hsla.test(v)) {\n            return hsla.parse(v);\n        }\n        else {\n            return hex.parse(v);\n        }\n    },\n    transform: (v) => {\n        return typeof v === \"string\"\n            ? v\n            : v.hasOwnProperty(\"red\")\n                ? rgba.transform(v)\n                : hsla.transform(v);\n    },\n    getAnimatableNone: (v) => {\n        const parsed = color.parse(v);\n        parsed.alpha = 0;\n        return color.transform(parsed);\n    },\n};\n\nexport { color };\n//# sourceMappingURL=index.mjs.map\n","const colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\n\nexport { colorRegex };\n//# sourceMappingURL=color-regex.mjs.map\n","import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\n\nfunction test(v) {\n    return (isNaN(v) &&\n        typeof v === \"string\" &&\n        (v.match(floatRegex)?.length || 0) +\n            (v.match(colorRegex)?.length || 0) >\n            0);\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\nfunction analyseComplexValue(value) {\n    const originalValue = value.toString();\n    const values = [];\n    const indexes = {\n        color: [],\n        number: [],\n        var: [],\n    };\n    const types = [];\n    let i = 0;\n    const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n        if (color.test(parsedValue)) {\n            indexes.color.push(i);\n            types.push(COLOR_TOKEN);\n            values.push(color.parse(parsedValue));\n        }\n        else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n            indexes.var.push(i);\n            types.push(VAR_TOKEN);\n            values.push(parsedValue);\n        }\n        else {\n            indexes.number.push(i);\n            types.push(NUMBER_TOKEN);\n            values.push(parseFloat(parsedValue));\n        }\n        ++i;\n        return SPLIT_TOKEN;\n    });\n    const split = tokenised.split(SPLIT_TOKEN);\n    return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n    return analyseComplexValue(v).values;\n}\nfunction buildTransformer({ split, types }) {\n    const numSections = split.length;\n    return (v) => {\n        let output = \"\";\n        for (let i = 0; i < numSections; i++) {\n            output += split[i];\n            if (v[i] !== undefined) {\n                const type = types[i];\n                if (type === NUMBER_TOKEN) {\n                    output += sanitize(v[i]);\n                }\n                else if (type === COLOR_TOKEN) {\n                    output += color.transform(v[i]);\n                }\n                else {\n                    output += v[i];\n                }\n            }\n        }\n        return output;\n    };\n}\nfunction createTransformer(source) {\n    return buildTransformer(analyseComplexValue(source));\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : color.test(v) ? color.getAnimatableNone(v) : v;\n/**\n * Convert a parsed value to its zero equivalent, but preserve numbers\n * that act as divisors in CSS calc() expressions.\n *\n * analyseComplexValue extracts numbers from CSS strings and puts the\n * surrounding text into a `split` template array. For example:\n *   \"calc(var(--gap) / 5)\"  →  values: [var(--gap), 5]\n *                               split:  [\"calc(\", \" / \", \")\"]\n *\n * When building a zero-equivalent for animation, naively zeroing all\n * numbers turns the divisor into 0 → \"calc(var(--gap) / 0)\" → NaN.\n * We detect this by checking whether the text preceding a number\n * (split[i]) ends with \"/\" — the CSS calc division operator.\n */\nconst convertToZero = (value, splitBefore) => {\n    if (typeof value === \"number\") {\n        return splitBefore?.trim().endsWith(\"/\") ? value : 0;\n    }\n    return convertNumbersToZero(value);\n};\nfunction getAnimatableNone(v) {\n    const info = analyseComplexValue(v);\n    const transformer = buildTransformer(info);\n    return transformer(info.values.map((value, i) => convertToZero(value, info.split[i])));\n}\nconst complex = {\n    test,\n    parse: parseComplexValue,\n    createTransformer,\n    getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n//# sourceMappingURL=index.mjs.map\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n    if (t < 0)\n        t += 1;\n    if (t > 1)\n        t -= 1;\n    if (t < 1 / 6)\n        return p + (q - p) * 6 * t;\n    if (t < 1 / 2)\n        return q;\n    if (t < 2 / 3)\n        return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n    hue /= 360;\n    saturation /= 100;\n    lightness /= 100;\n    let red = 0;\n    let green = 0;\n    let blue = 0;\n    if (!saturation) {\n        red = green = blue = lightness;\n    }\n    else {\n        const q = lightness < 0.5\n            ? lightness * (1 + saturation)\n            : lightness + saturation - lightness * saturation;\n        const p = 2 * lightness - q;\n        red = hueToRgb(p, q, hue + 1 / 3);\n        green = hueToRgb(p, q, hue);\n        blue = hueToRgb(p, q, hue - 1 / 3);\n    }\n    return {\n        red: Math.round(red * 255),\n        green: Math.round(green * 255),\n        blue: Math.round(blue * 255),\n        alpha,\n    };\n}\n\nexport { hslaToRgba };\n//# sourceMappingURL=hsla-to-rgba.mjs.map\n","function mixImmediate(a, b) {\n    return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n//# sourceMappingURL=immediate.mjs.map\n","/*\n  Value in range from progress\n\n  Given a lower limit and an upper limit, we return the value within\n  that range as expressed by progress (usually a number from 0 to 1)\n\n  So progress = 0.5 would change\n\n  from -------- to\n\n  to\n\n  from ---- to\n\n  E.g. from = 10, to = 20, progress = 0.5 => 15\n\n  @param [number]: Lower limit of range\n  @param [number]: Upper limit of range\n  @param [number]: The progress between lower and upper limits expressed 0-1\n  @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n    return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n//# sourceMappingURL=number.mjs.map\n","import { warning } from 'motion-utils';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { hslaToRgba } from '../../value/types/color/hsla-to-rgba.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber } from './number.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n    const fromExpo = from * from;\n    const expo = v * (to * to - fromExpo) + fromExpo;\n    return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n    const type = getColorType(color);\n    warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`, \"color-not-animatable\");\n    if (!Boolean(type))\n        return false;\n    let model = type.parse(color);\n    if (type === hsla) {\n        // TODO Remove this cast - needed since Motion's stricter typing\n        model = hslaToRgba(model);\n    }\n    return model;\n}\nconst mixColor = (from, to) => {\n    const fromRGBA = asRGBA(from);\n    const toRGBA = asRGBA(to);\n    if (!fromRGBA || !toRGBA) {\n        return mixImmediate(from, to);\n    }\n    const blended = { ...fromRGBA };\n    return (v) => {\n        blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n        blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n        blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n        blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n        return rgba.transform(blended);\n    };\n};\n\nexport { mixColor, mixLinearColor };\n//# sourceMappingURL=color.mjs.map\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n    if (invisibleValues.has(origin)) {\n        return (p) => (p <= 0 ? origin : target);\n    }\n    else {\n        return (p) => (p >= 1 ? target : origin);\n    }\n}\n\nexport { invisibleValues, mixVisibility };\n//# sourceMappingURL=visibility.mjs.map\n","import { pipe, warning } from 'motion-utils';\nimport { isCSSVariableToken } from '../../animation/utils/is-css-variable.mjs';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { mixColor } from './color.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber as mixNumber$1 } from './number.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\n\nfunction mixNumber(a, b) {\n    return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n    if (typeof a === \"number\") {\n        return mixNumber;\n    }\n    else if (typeof a === \"string\") {\n        return isCSSVariableToken(a)\n            ? mixImmediate\n            : color.test(a)\n                ? mixColor\n                : mixComplex;\n    }\n    else if (Array.isArray(a)) {\n        return mixArray;\n    }\n    else if (typeof a === \"object\") {\n        return color.test(a) ? mixColor : mixObject;\n    }\n    return mixImmediate;\n}\nfunction mixArray(a, b) {\n    const output = [...a];\n    const numValues = output.length;\n    const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n    return (p) => {\n        for (let i = 0; i < numValues; i++) {\n            output[i] = blendValue[i](p);\n        }\n        return output;\n    };\n}\nfunction mixObject(a, b) {\n    const output = { ...a, ...b };\n    const blendValue = {};\n    for (const key in output) {\n        if (a[key] !== undefined && b[key] !== undefined) {\n            blendValue[key] = getMixer(a[key])(a[key], b[key]);\n        }\n    }\n    return (v) => {\n        for (const key in blendValue) {\n            output[key] = blendValue[key](v);\n        }\n        return output;\n    };\n}\nfunction matchOrder(origin, target) {\n    const orderedOrigin = [];\n    const pointers = { color: 0, var: 0, number: 0 };\n    for (let i = 0; i < target.values.length; i++) {\n        const type = target.types[i];\n        const originIndex = origin.indexes[type][pointers[type]];\n        const originValue = origin.values[originIndex] ?? 0;\n        orderedOrigin[i] = originValue;\n        pointers[type]++;\n    }\n    return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n    const template = complex.createTransformer(target);\n    const originStats = analyseComplexValue(origin);\n    const targetStats = analyseComplexValue(target);\n    const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n        originStats.indexes.color.length === targetStats.indexes.color.length &&\n        originStats.indexes.number.length >= targetStats.indexes.number.length;\n    if (canInterpolate) {\n        if ((invisibleValues.has(origin) &&\n            !targetStats.values.length) ||\n            (invisibleValues.has(target) &&\n                !originStats.values.length)) {\n            return mixVisibility(origin, target);\n        }\n        return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n    }\n    else {\n        warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`, \"complex-values-different\");\n        return mixImmediate(origin, target);\n    }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n//# sourceMappingURL=complex.mjs.map\n","import { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\nfunction mix(from, to, p) {\n    if (typeof from === \"number\" &&\n        typeof to === \"number\" &&\n        typeof p === \"number\") {\n        return mixNumber(from, to, p);\n    }\n    const mixer = getMixer(from);\n    return mixer(from, to);\n}\n\nexport { mix };\n//# sourceMappingURL=index.mjs.map\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { frameData, cancelFrame, frame } from '../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n    const passTimestamp = ({ timestamp }) => update(timestamp);\n    return {\n        start: (keepAlive = true) => frame.update(passTimestamp, keepAlive),\n        stop: () => cancelFrame(passTimestamp),\n        /**\n         * If we're processing this frame we can use the\n         * framelocked timestamp to keep things in sync.\n         */\n        now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n    };\n};\n\nexport { frameloopDriver };\n//# sourceMappingURL=frame.mjs.map\n","const generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n    let points = \"\";\n    const numPoints = Math.max(Math.round(duration / resolution), 2);\n    for (let i = 0; i < numPoints; i++) {\n        points += Math.round(easing(i / (numPoints - 1)) * 10000) / 10000 + \", \";\n    }\n    return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n//# sourceMappingURL=linear.mjs.map\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n    let duration = 0;\n    const timeStep = 50;\n    let state = generator.next(duration);\n    while (!state.done && duration < maxGeneratorDuration) {\n        duration += timeStep;\n        state = generator.next(duration);\n    }\n    return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n//# sourceMappingURL=calc-duration.mjs.map\n","import { millisecondsToSeconds, clamp, secondsToMilliseconds, warning } from 'motion-utils';\nimport { generateLinearEasing } from '../waapi/utils/linear.mjs';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './utils/calc-duration.mjs';\nimport { createGeneratorEasing } from './utils/create-generator-easing.mjs';\n\nconst springDefaults = {\n    // Default spring physics\n    stiffness: 100,\n    damping: 10,\n    mass: 1.0,\n    velocity: 0.0,\n    // Default duration/bounce-based options\n    duration: 800, // in ms\n    bounce: 0.3,\n    visualDuration: 0.3, // in seconds\n    // Rest thresholds\n    restSpeed: {\n        granular: 0.01,\n        default: 2,\n    },\n    restDelta: {\n        granular: 0.005,\n        default: 0.5,\n    },\n    // Limits\n    minDuration: 0.01, // in seconds\n    maxDuration: 10.0, // in seconds\n    minDamping: 0.05,\n    maxDamping: 1,\n};\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n    return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n    let result = initialGuess;\n    for (let i = 1; i < rootIterations; i++) {\n        result = result - envelope(result) / derivative(result);\n    }\n    return result;\n}\n/**\n * This is ported from the Framer implementation of duration-based spring resolution.\n */\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n    let envelope;\n    let derivative;\n    warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\", \"spring-duration-limit\");\n    let dampingRatio = 1 - bounce;\n    /**\n     * Restrict dampingRatio and duration to within acceptable ranges.\n     */\n    dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n    duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n    if (dampingRatio < 1) {\n        /**\n         * Underdamped spring\n         */\n        envelope = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const a = exponentialDecay - velocity;\n            const b = calcAngularFreq(undampedFreq, dampingRatio);\n            const c = Math.exp(-delta);\n            return safeMin - (a / b) * c;\n        };\n        derivative = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const d = delta * velocity + velocity;\n            const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n            const f = Math.exp(-delta);\n            const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n            const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n            return (factor * ((d - e) * f)) / g;\n        };\n    }\n    else {\n        /**\n         * Critically-damped spring\n         */\n        envelope = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (undampedFreq - velocity) * duration + 1;\n            return -safeMin + a * b;\n        };\n        derivative = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (velocity - undampedFreq) * (duration * duration);\n            return a * b;\n        };\n    }\n    const initialGuess = 5 / duration;\n    const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n    duration = secondsToMilliseconds(duration);\n    if (isNaN(undampedFreq)) {\n        return {\n            stiffness: springDefaults.stiffness,\n            damping: springDefaults.damping,\n            duration,\n        };\n    }\n    else {\n        const stiffness = Math.pow(undampedFreq, 2) * mass;\n        return {\n            stiffness,\n            damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n            duration,\n        };\n    }\n}\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n    return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n    let springOptions = {\n        velocity: springDefaults.velocity,\n        stiffness: springDefaults.stiffness,\n        damping: springDefaults.damping,\n        mass: springDefaults.mass,\n        isResolvedFromDuration: false,\n        ...options,\n    };\n    // stiffness/damping/mass overrides duration/bounce\n    if (!isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys)) {\n        // Time-defined springs should ignore inherited velocity.\n        // Velocity from interrupted animations can cause findSpring()\n        // to compute wildly different spring parameters, leading to\n        // massive oscillation on small-range animations.\n        springOptions.velocity = 0;\n        if (options.visualDuration) {\n            const visualDuration = options.visualDuration;\n            const root = (2 * Math.PI) / (visualDuration * 1.2);\n            const stiffness = root * root;\n            const damping = 2 *\n                clamp(0.05, 1, 1 - (options.bounce || 0)) *\n                Math.sqrt(stiffness);\n            springOptions = {\n                ...springOptions,\n                mass: springDefaults.mass,\n                stiffness,\n                damping,\n            };\n        }\n        else {\n            const derived = findSpring({ ...options, velocity: 0 });\n            springOptions = {\n                ...springOptions,\n                ...derived,\n                mass: springDefaults.mass,\n            };\n            springOptions.isResolvedFromDuration = true;\n        }\n    }\n    return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n    const options = typeof optionsOrVisualDuration !== \"object\"\n        ? {\n            visualDuration: optionsOrVisualDuration,\n            keyframes: [0, 1],\n            bounce,\n        }\n        : optionsOrVisualDuration;\n    let { restSpeed, restDelta } = options;\n    const origin = options.keyframes[0];\n    const target = options.keyframes[options.keyframes.length - 1];\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = { done: false, value: origin };\n    const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n        ...options,\n        velocity: -millisecondsToSeconds(options.velocity || 0),\n    });\n    const initialVelocity = velocity || 0.0;\n    const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n    const initialDelta = target - origin;\n    const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n    /**\n     * If we're working on a granular scale, use smaller defaults for determining\n     * when the spring is finished.\n     *\n     * These defaults have been selected emprically based on what strikes a good\n     * ratio between feeling good and finishing as soon as changes are imperceptible.\n     */\n    const isGranularScale = Math.abs(initialDelta) < 5;\n    restSpeed || (restSpeed = isGranularScale\n        ? springDefaults.restSpeed.granular\n        : springDefaults.restSpeed.default);\n    restDelta || (restDelta = isGranularScale\n        ? springDefaults.restDelta.granular\n        : springDefaults.restDelta.default);\n    let resolveSpring;\n    let resolveVelocity;\n    // Underdamped coefficients, hoisted for use in the inlined next() hot path\n    let angularFreq;\n    let A;\n    let sinCoeff;\n    let cosCoeff;\n    if (dampingRatio < 1) {\n        angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n        A =\n            (initialVelocity +\n                dampingRatio * undampedAngularFreq * initialDelta) /\n                angularFreq;\n        // Underdamped spring\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            return (target -\n                envelope *\n                    (A * Math.sin(angularFreq * t) +\n                        initialDelta * Math.cos(angularFreq * t)));\n        };\n        // Analytical derivative of underdamped spring (px/ms)\n        sinCoeff =\n            dampingRatio * undampedAngularFreq * A + initialDelta * angularFreq;\n        cosCoeff =\n            dampingRatio * undampedAngularFreq * initialDelta - A * angularFreq;\n        resolveVelocity = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            return envelope *\n                (sinCoeff * Math.sin(angularFreq * t) +\n                    cosCoeff * Math.cos(angularFreq * t));\n        };\n    }\n    else if (dampingRatio === 1) {\n        // Critically damped spring\n        resolveSpring = (t) => target -\n            Math.exp(-undampedAngularFreq * t) *\n                (initialDelta +\n                    (initialVelocity + undampedAngularFreq * initialDelta) * t);\n        // Analytical derivative of critically damped spring (px/ms)\n        const C = initialVelocity + undampedAngularFreq * initialDelta;\n        resolveVelocity = (t) => Math.exp(-undampedAngularFreq * t) *\n            (undampedAngularFreq * C * t - initialVelocity);\n    }\n    else {\n        // Overdamped spring\n        const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            // When performing sinh or cosh values can hit Infinity so we cap them here\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (target -\n                (envelope *\n                    ((initialVelocity +\n                        dampingRatio * undampedAngularFreq * initialDelta) *\n                        Math.sinh(freqForT) +\n                        dampedAngularFreq *\n                            initialDelta *\n                            Math.cosh(freqForT))) /\n                    dampedAngularFreq);\n        };\n        // Analytical derivative of overdamped spring (px/ms)\n        const P = (initialVelocity +\n            dampingRatio * undampedAngularFreq * initialDelta) /\n            dampedAngularFreq;\n        const sinhCoeff = dampingRatio * undampedAngularFreq * P - initialDelta * dampedAngularFreq;\n        const coshCoeff = dampingRatio * undampedAngularFreq * initialDelta - P * dampedAngularFreq;\n        resolveVelocity = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return envelope *\n                (sinhCoeff * Math.sinh(freqForT) +\n                    coshCoeff * Math.cosh(freqForT));\n        };\n    }\n    const generator = {\n        calculatedDuration: isResolvedFromDuration ? duration || null : null,\n        velocity: (t) => secondsToMilliseconds(resolveVelocity(t)),\n        next: (t) => {\n            /**\n             * For underdamped physics springs we need both position and\n             * velocity each tick. Compute shared trig values once to avoid\n             * duplicate Math.exp/sin/cos calls on the hot path.\n             */\n            if (!isResolvedFromDuration && dampingRatio < 1) {\n                const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n                const sin = Math.sin(angularFreq * t);\n                const cos = Math.cos(angularFreq * t);\n                const current = target -\n                    envelope *\n                        (A * sin + initialDelta * cos);\n                const currentVelocity = secondsToMilliseconds(envelope *\n                    (sinCoeff * sin + cosCoeff * cos));\n                state.done =\n                    Math.abs(currentVelocity) <= restSpeed &&\n                        Math.abs(target - current) <= restDelta;\n                state.value = state.done ? target : current;\n                return state;\n            }\n            const current = resolveSpring(t);\n            if (!isResolvedFromDuration) {\n                const currentVelocity = secondsToMilliseconds(resolveVelocity(t));\n                state.done =\n                    Math.abs(currentVelocity) <= restSpeed &&\n                        Math.abs(target - current) <= restDelta;\n            }\n            else {\n                state.done = t >= duration;\n            }\n            state.value = state.done ? target : current;\n            return state;\n        },\n        toString: () => {\n            const calculatedDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n            const easing = generateLinearEasing((progress) => generator.next(calculatedDuration * progress).value, calculatedDuration, 30);\n            return calculatedDuration + \"ms \" + easing;\n        },\n        toTransition: () => { },\n    };\n    return generator;\n}\nspring.applyToOptions = (options) => {\n    const generatorOptions = createGeneratorEasing(options, 100, spring);\n    options.ease = generatorOptions.ease;\n    options.duration = secondsToMilliseconds(generatorOptions.duration);\n    options.type = \"keyframes\";\n    return options;\n};\n\nexport { spring };\n//# sourceMappingURL=spring.mjs.map\n","import { millisecondsToSeconds } from 'motion-utils';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './calc-duration.mjs';\n\n/**\n * Create a progress => progress easing function from a generator.\n */\nfunction createGeneratorEasing(options, scale = 100, createGenerator) {\n    const generator = createGenerator({ ...options, keyframes: [0, scale] });\n    const duration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n    return {\n        type: \"keyframes\",\n        ease: (progress) => {\n            return generator.next(duration * progress).value / scale;\n        },\n        duration: millisecondsToSeconds(duration),\n    };\n}\n\nexport { createGeneratorEasing };\n//# sourceMappingURL=create-generator-easing.mjs.map\n","import { velocityPerSecond } from 'motion-utils';\n\nconst velocitySampleDuration = 5; // ms\nfunction getGeneratorVelocity(resolveValue, t, current) {\n    const prevT = Math.max(t - velocitySampleDuration, 0);\n    return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { getGeneratorVelocity };\n//# sourceMappingURL=velocity.mjs.map\n","import { spring } from './spring.mjs';\nimport { getGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n    const origin = keyframes[0];\n    const state = {\n        done: false,\n        value: origin,\n    };\n    const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n    const nearestBoundary = (v) => {\n        if (min === undefined)\n            return max;\n        if (max === undefined)\n            return min;\n        return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n    };\n    let amplitude = power * velocity;\n    const ideal = origin + amplitude;\n    const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n    /**\n     * If the target has changed we need to re-calculate the amplitude, otherwise\n     * the animation will start from the wrong position.\n     */\n    if (target !== ideal)\n        amplitude = target - origin;\n    const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n    const calcLatest = (t) => target + calcDelta(t);\n    const applyFriction = (t) => {\n        const delta = calcDelta(t);\n        const latest = calcLatest(t);\n        state.done = Math.abs(delta) <= restDelta;\n        state.value = state.done ? target : latest;\n    };\n    /**\n     * Ideally this would resolve for t in a stateless way, we could\n     * do that by always precalculating the animation but as we know\n     * this will be done anyway we can assume that spring will\n     * be discovered during that.\n     */\n    let timeReachedBoundary;\n    let spring$1;\n    const checkCatchBoundary = (t) => {\n        if (!isOutOfBounds(state.value))\n            return;\n        timeReachedBoundary = t;\n        spring$1 = spring({\n            keyframes: [state.value, nearestBoundary(state.value)],\n            velocity: getGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000\n            damping: bounceDamping,\n            stiffness: bounceStiffness,\n            restDelta,\n            restSpeed,\n        });\n    };\n    checkCatchBoundary(0);\n    return {\n        calculatedDuration: null,\n        next: (t) => {\n            /**\n             * We need to resolve the friction to figure out if we need a\n             * spring but we don't want to do this twice per frame. So here\n             * we flag if we updated for this frame and later if we did\n             * we can skip doing it again.\n             */\n            let hasUpdatedFrame = false;\n            if (!spring$1 && timeReachedBoundary === undefined) {\n                hasUpdatedFrame = true;\n                applyFriction(t);\n                checkCatchBoundary(t);\n            }\n            /**\n             * If we have a spring and the provided t is beyond the moment the friction\n             * animation crossed the min/max boundary, use the spring.\n             */\n            if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n                return spring$1.next(t - timeReachedBoundary);\n            }\n            else {\n                !hasUpdatedFrame && applyFriction(t);\n                return state;\n            }\n        },\n    };\n}\n\nexport { inertia };\n//# sourceMappingURL=inertia.mjs.map\n","import { invariant, clamp, MotionGlobalConfig, noop, pipe, progress } from 'motion-utils';\nimport { mix } from './mix/index.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n    const mixers = [];\n    const mixerFactory = customMixer || MotionGlobalConfig.mix || mix;\n    const numMixers = output.length - 1;\n    for (let i = 0; i < numMixers; i++) {\n        let mixer = mixerFactory(output[i], output[i + 1]);\n        if (ease) {\n            const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n            mixer = pipe(easingFunction, mixer);\n        }\n        mixers.push(mixer);\n    }\n    return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n *   - Numbers\n *   - Colors (hex, hsl, hsla, rgb, rgba)\n *   - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revisit this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n    const inputLength = input.length;\n    invariant(inputLength === output.length, \"Both input and output ranges must be the same length\", \"range-length\");\n    /**\n     * If we're only provided a single input, we can just make a function\n     * that returns the output.\n     */\n    if (inputLength === 1)\n        return () => output[0];\n    if (inputLength === 2 && output[0] === output[1])\n        return () => output[1];\n    const isZeroDeltaRange = input[0] === input[1];\n    // If input runs highest -> lowest, reverse both arrays\n    if (input[0] > input[inputLength - 1]) {\n        input = [...input].reverse();\n        output = [...output].reverse();\n    }\n    const mixers = createMixers(output, ease, mixer);\n    const numMixers = mixers.length;\n    const interpolator = (v) => {\n        if (isZeroDeltaRange && v < input[0])\n            return output[0];\n        let i = 0;\n        if (numMixers > 1) {\n            for (; i < input.length - 2; i++) {\n                if (v < input[i + 1])\n                    break;\n            }\n        }\n        const progressInRange = progress(input[i], input[i + 1], v);\n        return mixers[i](progressInRange);\n    };\n    return isClamp\n        ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n        : interpolator;\n}\n\nexport { interpolate };\n//# sourceMappingURL=interpolate.mjs.map\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n    const offset = [0];\n    fillOffset(offset, arr.length - 1);\n    return offset;\n}\n\nexport { defaultOffset };\n//# sourceMappingURL=default.mjs.map\n","import { progress } from 'motion-utils';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\nfunction fillOffset(offset, remaining) {\n    const min = offset[offset.length - 1];\n    for (let i = 1; i <= remaining; i++) {\n        const offsetProgress = progress(0, remaining, i);\n        offset.push(mixNumber(min, 1, offsetProgress));\n    }\n}\n\nexport { fillOffset };\n//# sourceMappingURL=fill.mjs.map\n","import { easeInOut, isEasingArray, easingDefinitionToFunction } from 'motion-utils';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../keyframes/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../keyframes/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n    return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n    /**\n     * Easing functions can be externally defined as strings. Here we convert them\n     * into actual functions.\n     */\n    const easingFunctions = isEasingArray(ease)\n        ? ease.map(easingDefinitionToFunction)\n        : easingDefinitionToFunction(ease);\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = {\n        done: false,\n        value: keyframeValues[0],\n    };\n    /**\n     * Create a times array based on the provided 0-1 offsets\n     */\n    const absoluteTimes = convertOffsetToTimes(\n    // Only use the provided offsets if they're the correct length\n    // TODO Maybe we should warn here if there's a length mismatch\n    times && times.length === keyframeValues.length\n        ? times\n        : defaultOffset(keyframeValues), duration);\n    const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n        ease: Array.isArray(easingFunctions)\n            ? easingFunctions\n            : defaultEasing(keyframeValues, easingFunctions),\n    });\n    return {\n        calculatedDuration: duration,\n        next: (t) => {\n            state.value = mapTimeToKeyframe(t);\n            state.done = t >= duration;\n            return state;\n        },\n    };\n}\n\nexport { defaultEasing, keyframes };\n//# sourceMappingURL=keyframes.mjs.map\n","const isEasingArray = (ease) => {\n    return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n//# sourceMappingURL=is-easing-array.mjs.map\n","function convertOffsetToTimes(offset, duration) {\n    return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n//# sourceMappingURL=time.mjs.map\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe, speed = 1) {\n    const resolvedKeyframes = keyframes.filter(isNotNull);\n    const useFirstKeyframe = speed < 0 || (repeat && repeatType !== \"loop\" && repeat % 2 === 1);\n    const index = useFirstKeyframe ? 0 : resolvedKeyframes.length - 1;\n    return !index || finalKeyframe === undefined\n        ? resolvedKeyframes[index]\n        : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n//# sourceMappingURL=get-final.mjs.map\n","import { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { spring } from '../generators/spring.mjs';\n\nconst transitionTypeMap = {\n    decay: inertia,\n    inertia,\n    tween: keyframes,\n    keyframes: keyframes,\n    spring,\n};\nfunction replaceTransitionType(transition) {\n    if (typeof transition.type === \"string\") {\n        transition.type = transitionTypeMap[transition.type];\n    }\n}\n\nexport { replaceTransitionType };\n//# sourceMappingURL=replace-transition-type.mjs.map\n","class WithPromise {\n    constructor() {\n        this.updateFinished();\n    }\n    get finished() {\n        return this._finished;\n    }\n    updateFinished() {\n        this._finished = new Promise((resolve) => {\n            this.resolve = resolve;\n        });\n    }\n    notifyFinished() {\n        this.resolve();\n    }\n    /**\n     * Allows the animation to be awaited.\n     *\n     * @deprecated Use `finished` instead.\n     */\n    then(onResolve, onReject) {\n        return this.finished.then(onResolve, onReject);\n    }\n}\n\nexport { WithPromise };\n//# sourceMappingURL=WithPromise.mjs.map\n","import { invariant, pipe, clamp, millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { activeAnimations } from '../stats/animation-count.mjs';\nimport { mix } from '../utils/mix/index.mjs';\nimport { frameloopDriver } from './drivers/frame.mjs';\nimport { inertia } from './generators/inertia.mjs';\nimport { keyframes } from './generators/keyframes.mjs';\nimport { calcGeneratorDuration } from './generators/utils/calc-duration.mjs';\nimport { getGeneratorVelocity } from './generators/utils/velocity.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\n\nconst percentToProgress = (percent) => percent / 100;\nclass JSAnimation extends WithPromise {\n    constructor(options) {\n        super();\n        this.state = \"idle\";\n        this.startTime = null;\n        this.isStopped = false;\n        /**\n         * The current time of the animation.\n         */\n        this.currentTime = 0;\n        /**\n         * The time at which the animation was paused.\n         */\n        this.holdTime = null;\n        /**\n         * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n         */\n        this.playbackSpeed = 1;\n        /**\n         * Reusable state object for the delay phase to avoid\n         * allocating a new object every frame.\n         */\n        this.delayState = {\n            done: false,\n            value: undefined,\n        };\n        /**\n         * This method is bound to the instance to fix a pattern where\n         * animation.stop is returned as a reference from a useEffect.\n         */\n        this.stop = () => {\n            const { motionValue } = this.options;\n            if (motionValue && motionValue.updatedAt !== time.now()) {\n                this.tick(time.now());\n            }\n            this.isStopped = true;\n            if (this.state === \"idle\")\n                return;\n            this.teardown();\n            this.options.onStop?.();\n        };\n        activeAnimations.mainThread++;\n        this.options = options;\n        this.initAnimation();\n        this.play();\n        if (options.autoplay === false)\n            this.pause();\n    }\n    initAnimation() {\n        const { options } = this;\n        replaceTransitionType(options);\n        const { type = keyframes, repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = options;\n        let { keyframes: keyframes$1 } = options;\n        const generatorFactory = type || keyframes;\n        if (process.env.NODE_ENV !== \"production\" &&\n            generatorFactory !== keyframes) {\n            invariant(keyframes$1.length <= 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`, \"spring-two-frames\");\n        }\n        if (generatorFactory !== keyframes &&\n            typeof keyframes$1[0] !== \"number\") {\n            this.mixKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n            keyframes$1 = [0, 100];\n        }\n        const generator = generatorFactory({ ...options, keyframes: keyframes$1 });\n        /**\n         * If we have a mirror repeat type we need to create a second generator that outputs the\n         * mirrored (not reversed) animation and later ping pong between the two generators.\n         */\n        if (repeatType === \"mirror\") {\n            this.mirroredGenerator = generatorFactory({\n                ...options,\n                keyframes: [...keyframes$1].reverse(),\n                velocity: -velocity,\n            });\n        }\n        /**\n         * If duration is undefined and we have repeat options,\n         * we need to calculate a duration from the generator.\n         *\n         * We set it to the generator itself to cache the duration.\n         * Any timeline resolver will need to have already precalculated\n         * the duration by this step.\n         */\n        if (generator.calculatedDuration === null) {\n            generator.calculatedDuration = calcGeneratorDuration(generator);\n        }\n        const { calculatedDuration } = generator;\n        this.calculatedDuration = calculatedDuration;\n        this.resolvedDuration = calculatedDuration + repeatDelay;\n        this.totalDuration = this.resolvedDuration * (repeat + 1) - repeatDelay;\n        this.generator = generator;\n    }\n    updateTime(timestamp) {\n        const animationTime = Math.round(timestamp - this.startTime) * this.playbackSpeed;\n        // Update currentTime\n        if (this.holdTime !== null) {\n            this.currentTime = this.holdTime;\n        }\n        else {\n            // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n            // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n            // example.\n            this.currentTime = animationTime;\n        }\n    }\n    tick(timestamp, sample = false) {\n        const { generator, totalDuration, mixKeyframes, mirroredGenerator, resolvedDuration, calculatedDuration, } = this;\n        if (this.startTime === null)\n            return generator.next(0);\n        const { delay = 0, keyframes, repeat, repeatType, repeatDelay, type, onUpdate, finalKeyframe, } = this.options;\n        /**\n         * requestAnimationFrame timestamps can come through as lower than\n         * the startTime as set by performance.now(). Here we prevent this,\n         * though in the future it could be possible to make setting startTime\n         * a pending operation that gets resolved here.\n         */\n        if (this.speed > 0) {\n            this.startTime = Math.min(this.startTime, timestamp);\n        }\n        else if (this.speed < 0) {\n            this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n        }\n        if (sample) {\n            this.currentTime = timestamp;\n        }\n        else {\n            this.updateTime(timestamp);\n        }\n        // Rebase on delay\n        const timeWithoutDelay = this.currentTime - delay * (this.playbackSpeed >= 0 ? 1 : -1);\n        const isInDelayPhase = this.playbackSpeed >= 0\n            ? timeWithoutDelay < 0\n            : timeWithoutDelay > totalDuration;\n        this.currentTime = Math.max(timeWithoutDelay, 0);\n        // If this animation has finished, set the current time  to the total duration.\n        if (this.state === \"finished\" && this.holdTime === null) {\n            this.currentTime = totalDuration;\n        }\n        let elapsed = this.currentTime;\n        let frameGenerator = generator;\n        if (repeat) {\n            /**\n             * Get the current progress (0-1) of the animation. If t is >\n             * than duration we'll get values like 2.5 (midway through the\n             * third iteration)\n             */\n            const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n            /**\n             * Get the current iteration (0 indexed). For instance the floor of\n             * 2.5 is 2.\n             */\n            let currentIteration = Math.floor(progress);\n            /**\n             * Get the current progress of the iteration by taking the remainder\n             * so 2.5 is 0.5 through iteration 2\n             */\n            let iterationProgress = progress % 1.0;\n            /**\n             * If iteration progress is 1 we count that as the end\n             * of the previous iteration.\n             */\n            if (!iterationProgress && progress >= 1) {\n                iterationProgress = 1;\n            }\n            iterationProgress === 1 && currentIteration--;\n            currentIteration = Math.min(currentIteration, repeat + 1);\n            /**\n             * Reverse progress if we're not running in \"normal\" direction\n             */\n            const isOddIteration = Boolean(currentIteration % 2);\n            if (isOddIteration) {\n                if (repeatType === \"reverse\") {\n                    iterationProgress = 1 - iterationProgress;\n                    if (repeatDelay) {\n                        iterationProgress -= repeatDelay / resolvedDuration;\n                    }\n                }\n                else if (repeatType === \"mirror\") {\n                    frameGenerator = mirroredGenerator;\n                }\n            }\n            elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n        }\n        /**\n         * If we're in negative time, set state as the initial keyframe.\n         * This prevents delay: x, duration: 0 animations from finishing\n         * instantly.\n         */\n        let state;\n        if (isInDelayPhase) {\n            this.delayState.value = keyframes[0];\n            state = this.delayState;\n        }\n        else {\n            state = frameGenerator.next(elapsed);\n        }\n        if (mixKeyframes && !isInDelayPhase) {\n            state.value = mixKeyframes(state.value);\n        }\n        let { done } = state;\n        if (!isInDelayPhase && calculatedDuration !== null) {\n            done =\n                this.playbackSpeed >= 0\n                    ? this.currentTime >= totalDuration\n                    : this.currentTime <= 0;\n        }\n        const isAnimationFinished = this.holdTime === null &&\n            (this.state === \"finished\" || (this.state === \"running\" && done));\n        // TODO: The exception for inertia could be cleaner here\n        if (isAnimationFinished && type !== inertia) {\n            state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n        }\n        if (onUpdate) {\n            onUpdate(state.value);\n        }\n        if (isAnimationFinished) {\n            this.finish();\n        }\n        return state;\n    }\n    /**\n     * Allows the returned animation to be awaited or promise-chained. Currently\n     * resolves when the animation finishes at all but in a future update could/should\n     * reject if its cancels.\n     */\n    then(resolve, reject) {\n        return this.finished.then(resolve, reject);\n    }\n    get duration() {\n        return millisecondsToSeconds(this.calculatedDuration);\n    }\n    get iterationDuration() {\n        const { delay = 0 } = this.options || {};\n        return this.duration + millisecondsToSeconds(delay);\n    }\n    get time() {\n        return millisecondsToSeconds(this.currentTime);\n    }\n    set time(newTime) {\n        newTime = secondsToMilliseconds(newTime);\n        this.currentTime = newTime;\n        if (this.startTime === null ||\n            this.holdTime !== null ||\n            this.playbackSpeed === 0) {\n            this.holdTime = newTime;\n        }\n        else if (this.driver) {\n            this.startTime = this.driver.now() - newTime / this.playbackSpeed;\n        }\n        if (this.driver) {\n            this.driver.start(false);\n        }\n        else {\n            this.startTime = 0;\n            this.state = \"paused\";\n            this.holdTime = newTime;\n            this.tick(newTime);\n        }\n    }\n    /**\n     * Returns the generator's velocity at the current time in units/second.\n     * Uses the analytical derivative when available (springs), avoiding\n     * the MotionValue's frame-dependent velocity estimation.\n     */\n    getGeneratorVelocity() {\n        const t = this.currentTime;\n        if (t <= 0)\n            return this.options.velocity || 0;\n        if (this.generator.velocity) {\n            return this.generator.velocity(t);\n        }\n        // Fallback: finite difference\n        const current = this.generator.next(t).value;\n        return getGeneratorVelocity((s) => this.generator.next(s).value, t, current);\n    }\n    get speed() {\n        return this.playbackSpeed;\n    }\n    set speed(newSpeed) {\n        const hasChanged = this.playbackSpeed !== newSpeed;\n        if (hasChanged && this.driver) {\n            this.updateTime(time.now());\n        }\n        this.playbackSpeed = newSpeed;\n        if (hasChanged && this.driver) {\n            this.time = millisecondsToSeconds(this.currentTime);\n        }\n    }\n    play() {\n        if (this.isStopped)\n            return;\n        const { driver = frameloopDriver, startTime } = this.options;\n        if (!this.driver) {\n            this.driver = driver((timestamp) => this.tick(timestamp));\n        }\n        this.options.onPlay?.();\n        const now = this.driver.now();\n        if (this.state === \"finished\") {\n            this.updateFinished();\n            this.startTime = now;\n        }\n        else if (this.holdTime !== null) {\n            this.startTime = now - this.holdTime;\n        }\n        else if (!this.startTime) {\n            this.startTime = startTime ?? now;\n        }\n        if (this.state === \"finished\" && this.speed < 0) {\n            this.startTime += this.calculatedDuration;\n        }\n        this.holdTime = null;\n        /**\n         * Set playState to running only after we've used it in\n         * the previous logic.\n         */\n        this.state = \"running\";\n        this.driver.start();\n    }\n    pause() {\n        this.state = \"paused\";\n        this.updateTime(time.now());\n        this.holdTime = this.currentTime;\n    }\n    complete() {\n        if (this.state !== \"running\") {\n            this.play();\n        }\n        this.state = \"finished\";\n        this.holdTime = null;\n    }\n    finish() {\n        this.notifyFinished();\n        this.teardown();\n        this.state = \"finished\";\n        this.options.onComplete?.();\n    }\n    cancel() {\n        this.holdTime = null;\n        this.startTime = 0;\n        this.tick(0);\n        this.teardown();\n        this.options.onCancel?.();\n    }\n    teardown() {\n        this.state = \"idle\";\n        this.stopDriver();\n        this.startTime = this.holdTime = null;\n        activeAnimations.mainThread--;\n    }\n    stopDriver() {\n        if (!this.driver)\n            return;\n        this.driver.stop();\n        this.driver = undefined;\n    }\n    sample(sampleTime) {\n        this.startTime = 0;\n        return this.tick(sampleTime, true);\n    }\n    attachTimeline(timeline) {\n        if (this.options.allowFlatten) {\n            this.options.type = \"keyframes\";\n            this.options.ease = \"linear\";\n            this.initAnimation();\n        }\n        this.driver?.stop();\n        return timeline.observe(this);\n    }\n}\n// Legacy function support\nfunction animateValue(options) {\n    return new JSAnimation(options);\n}\n\nexport { JSAnimation, animateValue };\n//# sourceMappingURL=JSAnimation.mjs.map\n","const radToDeg = (rad) => (rad * 180) / Math.PI;\nconst rotate = (v) => {\n    const angle = radToDeg(Math.atan2(v[1], v[0]));\n    return rebaseAngle(angle);\n};\nconst matrix2dParsers = {\n    x: 4,\n    y: 5,\n    translateX: 4,\n    translateY: 5,\n    scaleX: 0,\n    scaleY: 3,\n    scale: (v) => (Math.abs(v[0]) + Math.abs(v[3])) / 2,\n    rotate,\n    rotateZ: rotate,\n    skewX: (v) => radToDeg(Math.atan(v[1])),\n    skewY: (v) => radToDeg(Math.atan(v[2])),\n    skew: (v) => (Math.abs(v[1]) + Math.abs(v[2])) / 2,\n};\nconst rebaseAngle = (angle) => {\n    angle = angle % 360;\n    if (angle < 0)\n        angle += 360;\n    return angle;\n};\nconst rotateZ = rotate;\nconst scaleX = (v) => Math.sqrt(v[0] * v[0] + v[1] * v[1]);\nconst scaleY = (v) => Math.sqrt(v[4] * v[4] + v[5] * v[5]);\nconst matrix3dParsers = {\n    x: 12,\n    y: 13,\n    z: 14,\n    translateX: 12,\n    translateY: 13,\n    translateZ: 14,\n    scaleX,\n    scaleY,\n    scale: (v) => (scaleX(v) + scaleY(v)) / 2,\n    rotateX: (v) => rebaseAngle(radToDeg(Math.atan2(v[6], v[5]))),\n    rotateY: (v) => rebaseAngle(radToDeg(Math.atan2(-v[2], v[0]))),\n    rotateZ,\n    rotate: rotateZ,\n    skewX: (v) => radToDeg(Math.atan(v[4])),\n    skewY: (v) => radToDeg(Math.atan(v[1])),\n    skew: (v) => (Math.abs(v[1]) + Math.abs(v[4])) / 2,\n};\nfunction defaultTransformValue(name) {\n    return name.includes(\"scale\") ? 1 : 0;\n}\nfunction parseValueFromTransform(transform, name) {\n    if (!transform || transform === \"none\") {\n        return defaultTransformValue(name);\n    }\n    const matrix3dMatch = transform.match(/^matrix3d\\(([-\\d.e\\s,]+)\\)$/u);\n    let parsers;\n    let match;\n    if (matrix3dMatch) {\n        parsers = matrix3dParsers;\n        match = matrix3dMatch;\n    }\n    else {\n        const matrix2dMatch = transform.match(/^matrix\\(([-\\d.e\\s,]+)\\)$/u);\n        parsers = matrix2dParsers;\n        match = matrix2dMatch;\n    }\n    if (!match) {\n        return defaultTransformValue(name);\n    }\n    const valueParser = parsers[name];\n    const values = match[1].split(\",\").map(convertTransformToNumber);\n    return typeof valueParser === \"function\"\n        ? valueParser(values)\n        : values[valueParser];\n}\nconst readTransformValue = (instance, name) => {\n    const { transform = \"none\" } = getComputedStyle(instance);\n    return parseValueFromTransform(transform, name);\n};\nfunction convertTransformToNumber(value) {\n    return parseFloat(value.trim());\n}\n\nexport { defaultTransformValue, parseValueFromTransform, readTransformValue };\n//# sourceMappingURL=parse-transform.mjs.map\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n    \"transformPerspective\",\n    \"x\",\n    \"y\",\n    \"z\",\n    \"translateX\",\n    \"translateY\",\n    \"translateZ\",\n    \"scale\",\n    \"scaleX\",\n    \"scaleY\",\n    \"rotate\",\n    \"rotateX\",\n    \"rotateY\",\n    \"rotateZ\",\n    \"skew\",\n    \"skewX\",\n    \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n */\nconst transformProps = /*@__PURE__*/ (() => new Set(transformPropOrder))();\n\nexport { transformPropOrder, transformProps };\n//# sourceMappingURL=keys-transform.mjs.map\n","import { parseValueFromTransform } from '../../../render/dom/parse-transform.mjs';\nimport { transformPropOrder } from '../../../render/utils/keys-transform.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst isNumOrPxType = (v) => v === number || v === px;\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n    const removedTransforms = [];\n    nonTranslationalTransformKeys.forEach((key) => {\n        const value = visualElement.getValue(key);\n        if (value !== undefined) {\n            removedTransforms.push([key, value.get()]);\n            value.set(key.startsWith(\"scale\") ? 1 : 0);\n        }\n    });\n    return removedTransforms;\n}\nconst positionalValues = {\n    // Dimensions\n    width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\", boxSizing }) => {\n        const width = x.max - x.min;\n        return boxSizing === \"border-box\"\n            ? width\n            : width - parseFloat(paddingLeft) - parseFloat(paddingRight);\n    },\n    height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\", boxSizing }) => {\n        const height = y.max - y.min;\n        return boxSizing === \"border-box\"\n            ? height\n            : height - parseFloat(paddingTop) - parseFloat(paddingBottom);\n    },\n    top: (_bbox, { top }) => parseFloat(top),\n    left: (_bbox, { left }) => parseFloat(left),\n    bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n    right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n    // Transform\n    x: (_bbox, { transform }) => parseValueFromTransform(transform, \"x\"),\n    y: (_bbox, { transform }) => parseValueFromTransform(transform, \"y\"),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { isNumOrPxType, positionalValues, removeNonTranslationalTransform };\n//# sourceMappingURL=unit-conversion.mjs.map\n","import { fillWildcards } from './utils/fill-wildcards.mjs';\nimport { removeNonTranslationalTransform } from './utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nlet isForced = false;\nfunction measureAllKeyframes() {\n    if (anyNeedsMeasurement) {\n        const resolversToMeasure = Array.from(toResolve).filter((resolver) => resolver.needsMeasurement);\n        const elementsToMeasure = new Set(resolversToMeasure.map((resolver) => resolver.element));\n        const transformsToRestore = new Map();\n        /**\n         * Write pass\n         * If we're measuring elements we want to remove bounding box-changing transforms.\n         */\n        elementsToMeasure.forEach((element) => {\n            const removedTransforms = removeNonTranslationalTransform(element);\n            if (!removedTransforms.length)\n                return;\n            transformsToRestore.set(element, removedTransforms);\n            element.render();\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n        // Write\n        elementsToMeasure.forEach((element) => {\n            element.render();\n            const restore = transformsToRestore.get(element);\n            if (restore) {\n                restore.forEach(([key, value]) => {\n                    element.getValue(key)?.set(value);\n                });\n            }\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n        // Write\n        resolversToMeasure.forEach((resolver) => {\n            if (resolver.suspendedScrollY !== undefined) {\n                window.scrollTo(0, resolver.suspendedScrollY);\n            }\n        });\n    }\n    anyNeedsMeasurement = false;\n    isScheduled = false;\n    toResolve.forEach((resolver) => resolver.complete(isForced));\n    toResolve.clear();\n}\nfunction readAllKeyframes() {\n    toResolve.forEach((resolver) => {\n        resolver.readKeyframes();\n        if (resolver.needsMeasurement) {\n            anyNeedsMeasurement = true;\n        }\n    });\n}\nfunction flushKeyframeResolvers() {\n    isForced = true;\n    readAllKeyframes();\n    measureAllKeyframes();\n    isForced = false;\n}\nclass KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n        this.state = \"pending\";\n        /**\n         * Track whether this resolver is async. If it is, it'll be added to the\n         * resolver queue and flushed in the next frame. Resolvers that aren't going\n         * to trigger read/write thrashing don't need to be async.\n         */\n        this.isAsync = false;\n        /**\n         * Track whether this resolver needs to perform a measurement\n         * to resolve its keyframes.\n         */\n        this.needsMeasurement = false;\n        this.unresolvedKeyframes = [...unresolvedKeyframes];\n        this.onComplete = onComplete;\n        this.name = name;\n        this.motionValue = motionValue;\n        this.element = element;\n        this.isAsync = isAsync;\n    }\n    scheduleResolve() {\n        this.state = \"scheduled\";\n        if (this.isAsync) {\n            toResolve.add(this);\n            if (!isScheduled) {\n                isScheduled = true;\n                frame.read(readAllKeyframes);\n                frame.resolveKeyframes(measureAllKeyframes);\n            }\n        }\n        else {\n            this.readKeyframes();\n            this.complete();\n        }\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, name, element, motionValue } = this;\n        // If initial keyframe is null we need to read it from the DOM\n        if (unresolvedKeyframes[0] === null) {\n            const currentValue = motionValue?.get();\n            // TODO: This doesn't work if the final keyframe is a wildcard\n            const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n            if (currentValue !== undefined) {\n                unresolvedKeyframes[0] = currentValue;\n            }\n            else if (element && name) {\n                const valueAsRead = element.readValue(name, finalKeyframe);\n                if (valueAsRead !== undefined && valueAsRead !== null) {\n                    unresolvedKeyframes[0] = valueAsRead;\n                }\n            }\n            if (unresolvedKeyframes[0] === undefined) {\n                unresolvedKeyframes[0] = finalKeyframe;\n            }\n            if (motionValue && currentValue === undefined) {\n                motionValue.set(unresolvedKeyframes[0]);\n            }\n        }\n        fillWildcards(unresolvedKeyframes);\n    }\n    setFinalKeyframe() { }\n    measureInitialState() { }\n    renderEndStyles() { }\n    measureEndState() { }\n    complete(isForcedComplete = false) {\n        this.state = \"complete\";\n        this.onComplete(this.unresolvedKeyframes, this.finalKeyframe, isForcedComplete);\n        toResolve.delete(this);\n    }\n    cancel() {\n        if (this.state === \"scheduled\") {\n            toResolve.delete(this);\n            this.state = \"pending\";\n        }\n    }\n    resume() {\n        if (this.state === \"pending\")\n            this.scheduleResolve();\n    }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n//# sourceMappingURL=KeyframesResolver.mjs.map\n","function fillWildcards(keyframes) {\n    for (let i = 1; i < keyframes.length; i++) {\n        keyframes[i] ?? (keyframes[i] = keyframes[i - 1]);\n    }\n}\n\nexport { fillWildcards };\n//# sourceMappingURL=fill-wildcards.mjs.map\n","import { isCSSVar } from './is-css-var.mjs';\n\nfunction setStyle(element, name, value) {\n    isCSSVar(name)\n        ? element.style.setProperty(name, value)\n        : (element.style[name] = value);\n}\n\nexport { setStyle };\n//# sourceMappingURL=style-set.mjs.map\n","const isCSSVar = (name) => name.startsWith(\"--\");\n\nexport { isCSSVar };\n//# sourceMappingURL=is-css-var.mjs.map\n","/**\n * Add the ability for test suites to manually set support flags\n * to better test more environments.\n */\nconst supportsFlags = {};\n\nexport { supportsFlags };\n//# sourceMappingURL=flags.mjs.map\n","import { memo } from 'motion-utils';\nimport { supportsFlags } from './flags.mjs';\n\nfunction memoSupports(callback, supportsFlag) {\n    const memoized = memo(callback);\n    return () => supportsFlags[supportsFlag] ?? memoized();\n}\n\nexport { memoSupports };\n//# sourceMappingURL=memo.mjs.map\n","import { memoSupports } from './memo.mjs';\n\nconst supportsScrollTimeline = /* @__PURE__ */ memoSupports(() => window.ScrollTimeline !== undefined, \"scrollTimeline\");\nconst supportsViewTimeline = /* @__PURE__ */ memoSupports(() => window.ViewTimeline !== undefined, \"viewTimeline\");\n\nexport { supportsScrollTimeline, supportsViewTimeline };\n//# sourceMappingURL=scroll-timeline.mjs.map\n","import { memoSupports } from './memo.mjs';\n\nconst supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {\n    try {\n        document\n            .createElement(\"div\")\n            .animate({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}, \"linearEasing\");\n\nexport { supportsLinearEasing };\n//# sourceMappingURL=linear-easing.mjs.map\n","const cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { cubicBezierAsString };\n//# sourceMappingURL=cubic-bezier.mjs.map\n","import { cubicBezierAsString } from './cubic-bezier.mjs';\n\nconst supportedWaapiEasing = {\n    linear: \"linear\",\n    ease: \"ease\",\n    easeIn: \"ease-in\",\n    easeOut: \"ease-out\",\n    easeInOut: \"ease-in-out\",\n    circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),\n    circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),\n    backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n    backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\n\nexport { supportedWaapiEasing };\n//# sourceMappingURL=supported.mjs.map\n","import { isBezierDefinition } from 'motion-utils';\nimport { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { generateLinearEasing } from '../utils/linear.mjs';\nimport { cubicBezierAsString } from './cubic-bezier.mjs';\nimport { supportedWaapiEasing } from './supported.mjs';\n\nfunction mapEasingToNativeEasing(easing, duration) {\n    if (!easing) {\n        return undefined;\n    }\n    else if (typeof easing === \"function\") {\n        return supportsLinearEasing()\n            ? generateLinearEasing(easing, duration)\n            : \"ease-out\";\n    }\n    else if (isBezierDefinition(easing)) {\n        return cubicBezierAsString(easing);\n    }\n    else if (Array.isArray(easing)) {\n        return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||\n            supportedWaapiEasing.easeOut);\n    }\n    else {\n        return supportedWaapiEasing[easing];\n    }\n}\n\nexport { mapEasingToNativeEasing };\n//# sourceMappingURL=map-easing.mjs.map\n","import { activeAnimations } from '../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../stats/buffer.mjs';\nimport { mapEasingToNativeEasing } from './easing/map-easing.mjs';\n\nfunction startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease = \"easeOut\", times, } = {}, pseudoElement = undefined) {\n    const keyframeOptions = {\n        [valueName]: keyframes,\n    };\n    if (times)\n        keyframeOptions.offset = times;\n    const easing = mapEasingToNativeEasing(ease, duration);\n    /**\n     * If this is an easing array, apply to keyframes, not animation as a whole\n     */\n    if (Array.isArray(easing))\n        keyframeOptions.easing = easing;\n    if (statsBuffer.value) {\n        activeAnimations.waapi++;\n    }\n    const options = {\n        delay,\n        duration,\n        easing: !Array.isArray(easing) ? easing : \"linear\",\n        fill: \"both\",\n        iterations: repeat + 1,\n        direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n    };\n    if (pseudoElement)\n        options.pseudoElement = pseudoElement;\n    const animation = element.animate(keyframeOptions, options);\n    if (statsBuffer.value) {\n        animation.finished.finally(() => {\n            activeAnimations.waapi--;\n        });\n    }\n    return animation;\n}\n\nexport { startWaapiAnimation };\n//# sourceMappingURL=start-waapi-animation.mjs.map\n","function isGenerator(type) {\n    return typeof type === \"function\" && \"applyToOptions\" in type;\n}\n\nexport { isGenerator };\n//# sourceMappingURL=is-generator.mjs.map\n","import { invariant, millisecondsToSeconds, secondsToMilliseconds, noop } from 'motion-utils';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { supportsScrollTimeline } from '../utils/supports/scroll-timeline.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { startWaapiAnimation } from './waapi/start-waapi-animation.mjs';\nimport { applyGeneratorOptions } from './waapi/utils/apply-generator.mjs';\n\n/**\n * NativeAnimation implements AnimationPlaybackControls for the browser's Web Animations API.\n */\nclass NativeAnimation extends WithPromise {\n    constructor(options) {\n        super();\n        this.finishedTime = null;\n        this.isStopped = false;\n        /**\n         * Tracks a manually-set start time that takes precedence over WAAPI's\n         * dynamic startTime. This is cleared when play() or time setter is called,\n         * allowing WAAPI to take over timing.\n         */\n        this.manualStartTime = null;\n        if (!options)\n            return;\n        const { element, name, keyframes, pseudoElement, allowFlatten = false, finalKeyframe, onComplete, } = options;\n        this.isPseudoElement = Boolean(pseudoElement);\n        this.allowFlatten = allowFlatten;\n        this.options = options;\n        invariant(typeof options.type !== \"string\", `Mini animate() doesn't support \"type\" as a string.`, \"mini-spring\");\n        const transition = applyGeneratorOptions(options);\n        this.animation = startWaapiAnimation(element, name, keyframes, transition, pseudoElement);\n        if (transition.autoplay === false) {\n            this.animation.pause();\n        }\n        this.animation.onfinish = () => {\n            this.finishedTime = this.time;\n            if (!pseudoElement) {\n                const keyframe = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n                if (this.updateMotionValue) {\n                    this.updateMotionValue(keyframe);\n                }\n                /**\n                 * If we can, we want to commit the final style as set by the user,\n                 * rather than the computed keyframe value supplied by the animation.\n                 * We always do this, even when a motion value is present, to prevent\n                 * a visual flash in Firefox where the WAAPI animation's fill is removed\n                 * during cancel() before the scheduled render can apply the correct value.\n                 */\n                setStyle(element, name, keyframe);\n                this.animation.cancel();\n            }\n            onComplete?.();\n            this.notifyFinished();\n        };\n    }\n    play() {\n        if (this.isStopped)\n            return;\n        this.manualStartTime = null;\n        this.animation.play();\n        if (this.state === \"finished\") {\n            this.updateFinished();\n        }\n    }\n    pause() {\n        this.animation.pause();\n    }\n    complete() {\n        this.animation.finish?.();\n    }\n    cancel() {\n        try {\n            this.animation.cancel();\n        }\n        catch (e) { }\n    }\n    stop() {\n        if (this.isStopped)\n            return;\n        this.isStopped = true;\n        const { state } = this;\n        if (state === \"idle\" || state === \"finished\") {\n            return;\n        }\n        if (this.updateMotionValue) {\n            this.updateMotionValue();\n        }\n        else {\n            this.commitStyles();\n        }\n        if (!this.isPseudoElement)\n            this.cancel();\n    }\n    /**\n     * WAAPI doesn't natively have any interruption capabilities.\n     *\n     * In this method, we commit styles back to the DOM before cancelling\n     * the animation.\n     *\n     * This is designed to be overridden by NativeAnimationExtended, which\n     * will create a renderless JS animation and sample it twice to calculate\n     * its current value, \"previous\" value, and therefore allow\n     * Motion to also correctly calculate velocity for any subsequent animation\n     * while deferring the commit until the next animation frame.\n     */\n    commitStyles() {\n        const element = this.options?.element;\n        if (!this.isPseudoElement && element?.isConnected) {\n            this.animation.commitStyles?.();\n        }\n    }\n    get duration() {\n        const duration = this.animation.effect?.getComputedTiming?.().duration || 0;\n        return millisecondsToSeconds(Number(duration));\n    }\n    get iterationDuration() {\n        const { delay = 0 } = this.options || {};\n        return this.duration + millisecondsToSeconds(delay);\n    }\n    get time() {\n        return millisecondsToSeconds(Number(this.animation.currentTime) || 0);\n    }\n    set time(newTime) {\n        const wasFinished = this.finishedTime !== null;\n        this.manualStartTime = null;\n        this.finishedTime = null;\n        this.animation.currentTime = secondsToMilliseconds(newTime);\n        if (wasFinished) {\n            this.animation.pause();\n        }\n    }\n    /**\n     * The playback speed of the animation.\n     * 1 = normal speed, 2 = double speed, 0.5 = half speed.\n     */\n    get speed() {\n        return this.animation.playbackRate;\n    }\n    set speed(newSpeed) {\n        // Allow backwards playback after finishing\n        if (newSpeed < 0)\n            this.finishedTime = null;\n        this.animation.playbackRate = newSpeed;\n    }\n    get state() {\n        return this.finishedTime !== null\n            ? \"finished\"\n            : this.animation.playState;\n    }\n    get startTime() {\n        return this.manualStartTime ?? Number(this.animation.startTime);\n    }\n    set startTime(newStartTime) {\n        this.manualStartTime = this.animation.startTime = newStartTime;\n    }\n    /**\n     * Attaches a timeline to the animation, for instance the `ScrollTimeline`.\n     */\n    attachTimeline({ timeline, rangeStart, rangeEnd, observe, }) {\n        if (this.allowFlatten) {\n            this.animation.effect?.updateTiming({ easing: \"linear\" });\n        }\n        this.animation.onfinish = null;\n        if (timeline && supportsScrollTimeline()) {\n            this.animation.timeline = timeline;\n            if (rangeStart)\n                this.animation.rangeStart = rangeStart;\n            if (rangeEnd)\n                this.animation.rangeEnd = rangeEnd;\n            return noop;\n        }\n        else {\n            return observe(this);\n        }\n    }\n}\n\nexport { NativeAnimation };\n//# sourceMappingURL=NativeAnimation.mjs.map\n","import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { isGenerator } from '../../generators/utils/is-generator.mjs';\n\nfunction applyGeneratorOptions({ type, ...options }) {\n    if (isGenerator(type) && supportsLinearEasing()) {\n        return type.applyToOptions(options);\n    }\n    else {\n        options.duration ?? (options.duration = 300);\n        options.ease ?? (options.ease = \"easeOut\");\n    }\n    return options;\n}\n\nexport { applyGeneratorOptions };\n//# sourceMappingURL=apply-generator.mjs.map\n","import { circInOut, backInOut, anticipate } from 'motion-utils';\n\nconst unsupportedEasingFunctions = {\n    anticipate,\n    backInOut,\n    circInOut,\n};\nfunction isUnsupportedEase(key) {\n    return key in unsupportedEasingFunctions;\n}\nfunction replaceStringEasing(transition) {\n    if (typeof transition.ease === \"string\" &&\n        isUnsupportedEase(transition.ease)) {\n        transition.ease = unsupportedEasingFunctions[transition.ease];\n    }\n}\n\nexport { replaceStringEasing };\n//# sourceMappingURL=unsupported-easing.mjs.map\n","import { clamp } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { NativeAnimation } from './NativeAnimation.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { replaceStringEasing } from './waapi/utils/unsupported-easing.mjs';\n\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\nclass NativeAnimationExtended extends NativeAnimation {\n    constructor(options) {\n        /**\n         * The base NativeAnimation function only supports a subset\n         * of Motion easings, and WAAPI also only supports some\n         * easing functions via string/cubic-bezier definitions.\n         *\n         * This function replaces those unsupported easing functions\n         * with a JS easing function. This will later get compiled\n         * to a linear() easing function.\n         */\n        replaceStringEasing(options);\n        /**\n         * Ensure we replace the transition type with a generator function\n         * before passing to WAAPI.\n         *\n         * TODO: Does this have a better home? It could be shared with\n         * JSAnimation.\n         */\n        replaceTransitionType(options);\n        super(options);\n        /**\n         * Only set startTime when the animation should autoplay.\n         * Setting startTime on a paused WAAPI animation unpauses it\n         * (per the WAAPI spec), which breaks autoplay: false.\n         */\n        if (options.startTime !== undefined && options.autoplay !== false) {\n            this.startTime = options.startTime;\n        }\n        this.options = options;\n    }\n    /**\n     * WAAPI doesn't natively have any interruption capabilities.\n     *\n     * Rather than read committed styles back out of the DOM, we can\n     * create a renderless JS animation and sample it twice to calculate\n     * its current value, \"previous\" value, and therefore allow\n     * Motion to calculate velocity for any subsequent animation.\n     */\n    updateMotionValue(value) {\n        const { motionValue, onUpdate, onComplete, element, ...options } = this.options;\n        if (!motionValue)\n            return;\n        if (value !== undefined) {\n            motionValue.set(value);\n            return;\n        }\n        const sampleAnimation = new JSAnimation({\n            ...options,\n            autoplay: false,\n        });\n        /**\n         * Use wall-clock elapsed time for sampling.\n         * Under CPU load, WAAPI's currentTime may not reflect actual\n         * elapsed time, causing incorrect sampling and visual jumps.\n         */\n        const sampleTime = Math.max(sampleDelta, time.now() - this.startTime);\n        const delta = clamp(0, sampleDelta, sampleTime - sampleDelta);\n        const current = sampleAnimation.sample(sampleTime).value;\n        /**\n         * Write the estimated value to inline style so it persists\n         * after cancel(), covering the async gap before the next\n         * animation starts.\n         */\n        const { name } = this.options;\n        if (element && name)\n            setStyle(element, name, current);\n        motionValue.setWithVelocity(sampleAnimation.sample(Math.max(0, sampleTime - delta)).value, current, delta);\n        sampleAnimation.stop();\n    }\n}\n\nexport { NativeAnimationExtended };\n//# sourceMappingURL=NativeAnimationExtended.mjs.map\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n    // If the list of keys that might be non-animatable grows, replace with Set\n    if (name === \"zIndex\")\n        return false;\n    // If it's a number or a keyframes array, we can animate it. We might at some point\n    // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n    // but for now lets leave it like this for performance reasons\n    if (typeof value === \"number\" || Array.isArray(value))\n        return true;\n    if (typeof value === \"string\" && // It's animatable if we have a string\n        (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n        !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n    ) {\n        return true;\n    }\n    return false;\n};\n\nexport { isAnimatable };\n//# sourceMappingURL=is-animatable.mjs.map\n","function makeAnimationInstant(options) {\n    options.duration = 0;\n    options.type = \"keyframes\";\n}\n\nexport { makeAnimationInstant };\n//# sourceMappingURL=make-animation-instant.mjs.map\n","/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n    \"opacity\",\n    \"clipPath\",\n    \"filter\",\n    \"transform\",\n    // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved\n    // or until we implement support for linear() easing.\n    // \"background-color\"\n]);\n\nexport { acceleratedValues };\n//# sourceMappingURL=accelerated-values.mjs.map\n","const browserColorFunctions = /^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\\(/;\nfunction hasBrowserOnlyColors(keyframes) {\n    for (let i = 0; i < keyframes.length; i++) {\n        if (typeof keyframes[i] === \"string\" &&\n            browserColorFunctions.test(keyframes[i])) {\n            return true;\n        }\n    }\n    return false;\n}\n\nexport { hasBrowserOnlyColors };\n//# sourceMappingURL=is-browser-color.mjs.map\n","import { memo } from 'motion-utils';\nimport { acceleratedValues } from '../utils/accelerated-values.mjs';\nimport { hasBrowserOnlyColors } from '../utils/is-browser-color.mjs';\n\nconst colorProperties = new Set([\n    \"color\",\n    \"backgroundColor\",\n    \"outlineColor\",\n    \"fill\",\n    \"stroke\",\n    \"borderColor\",\n    \"borderTopColor\",\n    \"borderRightColor\",\n    \"borderBottomColor\",\n    \"borderLeftColor\",\n]);\nconst supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\nfunction supportsBrowserAnimation(options) {\n    const { motionValue, name, repeatDelay, repeatType, damping, type, keyframes, } = options;\n    const subject = motionValue?.owner?.current;\n    /**\n     * We use this check instead of isHTMLElement() because we explicitly\n     * **don't** want elements in different timing contexts (i.e. popups)\n     * to be accelerated, as it's not possible to sync these animations\n     * properly with those driven from the main window frameloop.\n     */\n    if (!(subject instanceof HTMLElement)) {\n        return false;\n    }\n    const { onUpdate, transformTemplate } = motionValue.owner.getProps();\n    return (supportsWaapi() &&\n        name &&\n        /**\n         * Force WAAPI for color properties with browser-only color formats\n         * (oklch, oklab, lab, lch, etc.) that the JS animation path can't parse.\n         */\n        (acceleratedValues.has(name) ||\n            (colorProperties.has(name) &&\n                hasBrowserOnlyColors(keyframes))) &&\n        (name !== \"transform\" || !transformTemplate) &&\n        /**\n         * If we're outputting values to onUpdate then we can't use WAAPI as there's\n         * no way to read the value from WAAPI every frame.\n         */\n        !onUpdate &&\n        !repeatDelay &&\n        repeatType !== \"mirror\" &&\n        damping !== 0 &&\n        type !== \"inertia\");\n}\n\nexport { supportsBrowserAnimation };\n//# sourceMappingURL=waapi.mjs.map\n","import { MotionGlobalConfig, noop } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { KeyframeResolver, flushKeyframeResolvers } from './keyframes/KeyframesResolver.mjs';\nimport { NativeAnimationExtended } from './NativeAnimationExtended.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { makeAnimationInstant } from './utils/make-animation-instant.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { supportsBrowserAnimation } from './waapi/supports/waapi.mjs';\n\n/**\n * Maximum time allowed between an animation being created and it being\n * resolved for us to use the latter as the start time.\n *\n * This is to ensure that while we prefer to \"start\" an animation as soon\n * as it's triggered, we also want to avoid a visual jump if there's a big delay\n * between these two moments.\n */\nconst MAX_RESOLVE_DELAY = 40;\nclass AsyncMotionValueAnimation extends WithPromise {\n    constructor({ autoplay = true, delay = 0, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", keyframes, name, motionValue, element, ...options }) {\n        super();\n        /**\n         * Bound to support return animation.stop pattern\n         */\n        this.stop = () => {\n            if (this._animation) {\n                this._animation.stop();\n                this.stopTimeline?.();\n            }\n            this.keyframeResolver?.cancel();\n        };\n        this.createdAt = time.now();\n        const optionsWithDefaults = {\n            autoplay,\n            delay,\n            type,\n            repeat,\n            repeatDelay,\n            repeatType,\n            name,\n            motionValue,\n            element,\n            ...options,\n        };\n        const KeyframeResolver$1 = element?.KeyframeResolver || KeyframeResolver;\n        this.keyframeResolver = new KeyframeResolver$1(keyframes, (resolvedKeyframes, finalKeyframe, forced) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe, optionsWithDefaults, !forced), name, motionValue, element);\n        this.keyframeResolver?.scheduleResolve();\n    }\n    onKeyframesResolved(keyframes, finalKeyframe, options, sync) {\n        this.keyframeResolver = undefined;\n        const { name, type, velocity, delay, isHandoff, onUpdate } = options;\n        this.resolvedAt = time.now();\n        /**\n         * If we can't animate this value with the resolved keyframes\n         * then we should complete it immediately.\n         */\n        let canAnimateValue = true;\n        if (!canAnimate(keyframes, name, type, velocity)) {\n            canAnimateValue = false;\n            if (MotionGlobalConfig.instantAnimations || !delay) {\n                onUpdate?.(getFinalKeyframe(keyframes, options, finalKeyframe));\n            }\n            keyframes[0] = keyframes[keyframes.length - 1];\n            makeAnimationInstant(options);\n            options.repeat = 0;\n        }\n        /**\n         * Resolve startTime for the animation.\n         *\n         * This method uses the createdAt and resolvedAt to calculate the\n         * animation startTime. *Ideally*, we would use the createdAt time as t=0\n         * as the following frame would then be the first frame of the animation in\n         * progress, which would feel snappier.\n         *\n         * However, if there's a delay (main thread work) between the creation of\n         * the animation and the first committed frame, we prefer to use resolvedAt\n         * to avoid a sudden jump into the animation.\n         */\n        const startTime = sync\n            ? !this.resolvedAt\n                ? this.createdAt\n                : this.resolvedAt - this.createdAt > MAX_RESOLVE_DELAY\n                    ? this.resolvedAt\n                    : this.createdAt\n            : undefined;\n        const resolvedOptions = {\n            startTime,\n            finalKeyframe,\n            ...options,\n            keyframes,\n        };\n        /**\n         * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n         * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n         * optimised animation.\n         *\n         * Also skip WAAPI when keyframes aren't animatable, as the resolved\n         * values may not be valid CSS and would trigger browser warnings.\n         */\n        const useWaapi = canAnimateValue &&\n            !isHandoff &&\n            supportsBrowserAnimation(resolvedOptions);\n        const element = resolvedOptions.motionValue?.owner?.current;\n        let animation;\n        if (useWaapi) {\n            try {\n                animation = new NativeAnimationExtended({\n                    ...resolvedOptions,\n                    element,\n                });\n            }\n            catch {\n                animation = new JSAnimation(resolvedOptions);\n            }\n        }\n        else {\n            animation = new JSAnimation(resolvedOptions);\n        }\n        animation.finished.then(() => {\n            this.notifyFinished();\n        }).catch(noop);\n        if (this.pendingTimeline) {\n            this.stopTimeline = animation.attachTimeline(this.pendingTimeline);\n            this.pendingTimeline = undefined;\n        }\n        this._animation = animation;\n    }\n    get finished() {\n        if (!this._animation) {\n            return this._finished;\n        }\n        else {\n            return this.animation.finished;\n        }\n    }\n    then(onResolve, _onReject) {\n        return this.finished.finally(onResolve).then(() => { });\n    }\n    get animation() {\n        if (!this._animation) {\n            this.keyframeResolver?.resume();\n            flushKeyframeResolvers();\n        }\n        return this._animation;\n    }\n    get duration() {\n        return this.animation.duration;\n    }\n    get iterationDuration() {\n        return this.animation.iterationDuration;\n    }\n    get time() {\n        return this.animation.time;\n    }\n    set time(newTime) {\n        this.animation.time = newTime;\n    }\n    get speed() {\n        return this.animation.speed;\n    }\n    get state() {\n        return this.animation.state;\n    }\n    set speed(newSpeed) {\n        this.animation.speed = newSpeed;\n    }\n    get startTime() {\n        return this.animation.startTime;\n    }\n    attachTimeline(timeline) {\n        if (this._animation) {\n            this.stopTimeline = this.animation.attachTimeline(timeline);\n        }\n        else {\n            this.pendingTimeline = timeline;\n        }\n        return () => this.stop();\n    }\n    play() {\n        this.animation.play();\n    }\n    pause() {\n        this.animation.pause();\n    }\n    complete() {\n        this.animation.complete();\n    }\n    cancel() {\n        if (this._animation) {\n            this.animation.cancel();\n        }\n        this.keyframeResolver?.cancel();\n    }\n}\n\nexport { AsyncMotionValueAnimation };\n//# sourceMappingURL=AsyncMotionValueAnimation.mjs.map\n","import { warning } from 'motion-utils';\nimport { isGenerator } from '../generators/utils/is-generator.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n    const current = keyframes[0];\n    if (keyframes.length === 1)\n        return true;\n    for (let i = 0; i < keyframes.length; i++) {\n        if (keyframes[i] !== current)\n            return true;\n    }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n    /**\n     * Check if we're able to animate between the start and end keyframes,\n     * and throw a warning if we're attempting to animate between one that's\n     * animatable and another that isn't.\n     */\n    const originKeyframe = keyframes[0];\n    if (originKeyframe === null) {\n        return false;\n    }\n    /**\n     * These aren't traditionally animatable but we do support them.\n     * In future we could look into making this more generic or replacing\n     * this function with mix() === mixImmediate\n     */\n    if (name === \"display\" || name === \"visibility\")\n        return true;\n    const targetKeyframe = keyframes[keyframes.length - 1];\n    const isOriginAnimatable = isAnimatable(originKeyframe, name);\n    const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n    warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". \"${isOriginAnimatable ? targetKeyframe : originKeyframe}\" is not an animatable value.`, \"value-not-animatable\");\n    // Always skip if any of these are true\n    if (!isOriginAnimatable || !isTargetAnimatable) {\n        return false;\n    }\n    return (hasKeyframesChanged(keyframes) ||\n        ((type === \"spring\" || isGenerator(type)) && velocity));\n}\n\nexport { canAnimate };\n//# sourceMappingURL=can-animate.mjs.map\n","function calcChildStagger(children, child, delayChildren, staggerChildren = 0, staggerDirection = 1) {\n    const index = Array.from(children)\n        .sort((a, b) => a.sortNodePosition(b))\n        .indexOf(child);\n    const numChildren = children.size;\n    const maxStaggerDuration = (numChildren - 1) * staggerChildren;\n    const delayIsFunction = typeof delayChildren === \"function\";\n    return delayIsFunction\n        ? delayChildren(index, numChildren)\n        : staggerDirection === 1\n            ? index * staggerChildren\n            : maxStaggerDuration - index * staggerChildren;\n}\n\nexport { calcChildStagger };\n//# sourceMappingURL=calc-child-stagger.mjs.map\n","import { invariant, isNumericalString } from 'motion-utils';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n    const match = splitCSSVariableRegex.exec(current);\n    if (!match)\n        return [,];\n    const [, token1, token2, fallback] = match;\n    return [`--${token1 ?? token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n    invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`, \"max-css-var-depth\");\n    const [token, fallback] = parseCSSVariable(current);\n    // No CSS variable detected\n    if (!token)\n        return;\n    // Attempt to read this CSS variable off the element\n    const resolved = window.getComputedStyle(element).getPropertyValue(token);\n    if (resolved) {\n        const trimmed = resolved.trim();\n        return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n    }\n    return isCSSVariableToken(fallback)\n        ? getVariableValue(fallback, element, depth + 1)\n        : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n//# sourceMappingURL=css-variables-conversion.mjs.map\n","import { transformProps } from '../../render/utils/keys-transform.mjs';\n\nconst underDampedSpring = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 25,\n    restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n    type: \"spring\",\n    stiffness: 550,\n    damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n    restSpeed: 10,\n});\nconst keyframesTransition = {\n    type: \"keyframes\",\n    duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n    type: \"keyframes\",\n    ease: [0.25, 0.1, 0.35, 1],\n    duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n    if (keyframes.length > 2) {\n        return keyframesTransition;\n    }\n    else if (transformProps.has(valueKey)) {\n        return valueKey.startsWith(\"scale\")\n            ? criticallyDampedSpring(keyframes[1])\n            : underDampedSpring;\n    }\n    return ease;\n};\n\nexport { getDefaultTransition };\n//# sourceMappingURL=default-transitions.mjs.map\n","/**\n * If `transition` has `inherit: true`, shallow-merge it with\n * `parentTransition` (child keys win) and strip the `inherit` key.\n * Otherwise return `transition` unchanged.\n */\nfunction resolveTransition(transition, parentTransition) {\n    if (transition?.inherit && parentTransition) {\n        const { inherit: _, ...rest } = transition;\n        return { ...parentTransition, ...rest };\n    }\n    return transition;\n}\n\nexport { resolveTransition };\n//# sourceMappingURL=resolve-transition.mjs.map\n","import { resolveTransition } from './resolve-transition.mjs';\n\nfunction getValueTransition(transition, key) {\n    const valueTransition = transition?.[key] ??\n        transition?.[\"default\"] ??\n        transition;\n    if (valueTransition !== transition) {\n        return resolveTransition(valueTransition, transition);\n    }\n    return valueTransition;\n}\n\nexport { getValueTransition };\n//# sourceMappingURL=get-value-transition.mjs.map\n","const orchestrationKeys = new Set([\n    \"when\",\n    \"delay\",\n    \"delayChildren\",\n    \"staggerChildren\",\n    \"staggerDirection\",\n    \"repeat\",\n    \"repeatType\",\n    \"repeatDelay\",\n    \"from\",\n    \"elapsed\",\n]);\n/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined(transition) {\n    for (const key in transition) {\n        if (!orchestrationKeys.has(key))\n            return true;\n    }\n    return false;\n}\n\nexport { isTransitionDefined };\n//# sourceMappingURL=is-transition-defined.mjs.map\n","import { secondsToMilliseconds, MotionGlobalConfig } from 'motion-utils';\nimport { AsyncMotionValueAnimation } from '../AsyncMotionValueAnimation.mjs';\nimport { JSAnimation } from '../JSAnimation.mjs';\nimport { getValueTransition } from '../utils/get-value-transition.mjs';\nimport { makeAnimationInstant } from '../utils/make-animation-instant.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { getFinalKeyframe } from '../keyframes/get-final.mjs';\nimport { isTransitionDefined } from '../utils/is-transition-defined.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n    const valueTransition = getValueTransition(transition, name) || {};\n    /**\n     * Most transition values are currently completely overwritten by value-specific\n     * transitions. In the future it'd be nicer to blend these transitions. But for now\n     * delay actually does inherit from the root transition if not value-specific.\n     */\n    const delay = valueTransition.delay || transition.delay || 0;\n    /**\n     * Elapsed isn't a public transition option but can be passed through from\n     * optimized appear effects in milliseconds.\n     */\n    let { elapsed = 0 } = transition;\n    elapsed = elapsed - secondsToMilliseconds(delay);\n    const options = {\n        keyframes: Array.isArray(target) ? target : [null, target],\n        ease: \"easeOut\",\n        velocity: value.getVelocity(),\n        ...valueTransition,\n        delay: -elapsed,\n        onUpdate: (v) => {\n            value.set(v);\n            valueTransition.onUpdate && valueTransition.onUpdate(v);\n        },\n        onComplete: () => {\n            onComplete();\n            valueTransition.onComplete && valueTransition.onComplete();\n        },\n        name,\n        motionValue: value,\n        element: isHandoff ? undefined : element,\n    };\n    /**\n     * If there's no transition defined for this value, we can generate\n     * unique transition settings for this value.\n     */\n    if (!isTransitionDefined(valueTransition)) {\n        Object.assign(options, getDefaultTransition(name, options));\n    }\n    /**\n     * Both WAAPI and our internal animation functions use durations\n     * as defined by milliseconds, while our external API defines them\n     * as seconds.\n     */\n    options.duration && (options.duration = secondsToMilliseconds(options.duration));\n    options.repeatDelay && (options.repeatDelay = secondsToMilliseconds(options.repeatDelay));\n    /**\n     * Support deprecated way to set initial value. Prefer keyframe syntax.\n     */\n    if (options.from !== undefined) {\n        options.keyframes[0] = options.from;\n    }\n    let shouldSkip = false;\n    if (options.type === false ||\n        (options.duration === 0 && !options.repeatDelay)) {\n        makeAnimationInstant(options);\n        if (options.delay === 0) {\n            shouldSkip = true;\n        }\n    }\n    if (MotionGlobalConfig.instantAnimations ||\n        MotionGlobalConfig.skipAnimations ||\n        element?.shouldSkipAnimations) {\n        shouldSkip = true;\n        makeAnimationInstant(options);\n        options.delay = 0;\n    }\n    /**\n     * If the transition type or easing has been explicitly set by the user\n     * then we don't want to allow flattening the animation.\n     */\n    options.allowFlatten = !valueTransition.type && !valueTransition.ease;\n    /**\n     * If we can or must skip creating the animation, and apply only\n     * the final keyframe, do so. We also check once keyframes are resolved but\n     * this early check prevents the need to create an animation at all.\n     */\n    if (shouldSkip && !isHandoff && value.get() !== undefined) {\n        const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n        if (finalKeyframe !== undefined) {\n            frame.update(() => {\n                options.onUpdate(finalKeyframe);\n                options.onComplete();\n            });\n            return;\n        }\n    }\n    return valueTransition.isSync\n        ? new JSAnimation(options)\n        : new AsyncMotionValueAnimation(options);\n};\n\nexport { animateMotionValue };\n//# sourceMappingURL=motion-value.mjs.map\n","function getValueState(visualElement) {\n    const state = [{}, {}];\n    visualElement?.values.forEach((value, key) => {\n        state[0][key] = value.get();\n        state[1][key] = value.getVelocity();\n    });\n    return state;\n}\nfunction resolveVariantFromProps(props, definition, custom, visualElement) {\n    /**\n     * If the variant definition is a function, resolve.\n     */\n    if (typeof definition === \"function\") {\n        const [current, velocity] = getValueState(visualElement);\n        definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n    }\n    /**\n     * If the variant definition is a variant label, or\n     * the function returned a variant label, resolve.\n     */\n    if (typeof definition === \"string\") {\n        definition = props.variants && props.variants[definition];\n    }\n    /**\n     * At this point we've resolved both functions and variant labels,\n     * but the resolved variant label might itself have been a function.\n     * If so, resolve. This can only have returned a valid target object.\n     */\n    if (typeof definition === \"function\") {\n        const [current, velocity] = getValueState(visualElement);\n        definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n    }\n    return definition;\n}\n\nexport { resolveVariantFromProps };\n//# sourceMappingURL=resolve-variants.mjs.map\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\nfunction resolveVariant(visualElement, definition, custom) {\n    const props = visualElement.getProps();\n    return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, visualElement);\n}\n\nexport { resolveVariant };\n//# sourceMappingURL=resolve-dynamic-variants.mjs.map\n","import { transformPropOrder } from './keys-transform.mjs';\n\nconst positionalKeys = new Set([\n    \"width\",\n    \"height\",\n    \"top\",\n    \"left\",\n    \"right\",\n    \"bottom\",\n    ...transformPropOrder,\n]);\n\nexport { positionalKeys };\n//# sourceMappingURL=keys-position.mjs.map\n","import { warnOnce, SubscriptionManager, velocityPerSecond } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n    return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n    current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n    /**\n     * @param init - The initiating value\n     * @param config - Optional configuration options\n     *\n     * -  `transformer`: A function to transform incoming values with.\n     */\n    constructor(init, options = {}) {\n        /**\n         * Tracks whether this value can output a velocity. Currently this is only true\n         * if the value is numerical, but we might be able to widen the scope here and support\n         * other value types.\n         *\n         * @internal\n         */\n        this.canTrackVelocity = null;\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        this.updateAndNotify = (v) => {\n            const currentTime = time.now();\n            /**\n             * If we're updating the value during another frame or eventloop\n             * than the previous frame, then the we set the previous frame value\n             * to current.\n             */\n            if (this.updatedAt !== currentTime) {\n                this.setPrevFrameValue();\n            }\n            this.prev = this.current;\n            this.setCurrent(v);\n            // Update update subscribers\n            if (this.current !== this.prev) {\n                this.events.change?.notify(this.current);\n                if (this.dependents) {\n                    for (const dependent of this.dependents) {\n                        dependent.dirty();\n                    }\n                }\n            }\n        };\n        this.hasAnimated = false;\n        this.setCurrent(init);\n        this.owner = options.owner;\n    }\n    setCurrent(current) {\n        this.current = current;\n        this.updatedAt = time.now();\n        if (this.canTrackVelocity === null && current !== undefined) {\n            this.canTrackVelocity = isFloat(this.current);\n        }\n    }\n    setPrevFrameValue(prevFrameValue = this.current) {\n        this.prevFrameValue = prevFrameValue;\n        this.prevUpdatedAt = this.updatedAt;\n    }\n    /**\n     * Adds a function that will be notified when the `MotionValue` is updated.\n     *\n     * It returns a function that, when called, will cancel the subscription.\n     *\n     * When calling `onChange` inside a React component, it should be wrapped with the\n     * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n     * from the `useEffect` function to ensure you don't add duplicate subscribers..\n     *\n     * ```jsx\n     * export const MyComponent = () => {\n     *   const x = useMotionValue(0)\n     *   const y = useMotionValue(0)\n     *   const opacity = useMotionValue(1)\n     *\n     *   useEffect(() => {\n     *     function updateOpacity() {\n     *       const maxXY = Math.max(x.get(), y.get())\n     *       const newOpacity = transform(maxXY, [0, 100], [1, 0])\n     *       opacity.set(newOpacity)\n     *     }\n     *\n     *     const unsubscribeX = x.on(\"change\", updateOpacity)\n     *     const unsubscribeY = y.on(\"change\", updateOpacity)\n     *\n     *     return () => {\n     *       unsubscribeX()\n     *       unsubscribeY()\n     *     }\n     *   }, [])\n     *\n     *   return <motion.div style={{ x }} />\n     * }\n     * ```\n     *\n     * @param subscriber - A function that receives the latest value.\n     * @returns A function that, when called, will cancel this subscription.\n     *\n     * @deprecated\n     */\n    onChange(subscription) {\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n        }\n        return this.on(\"change\", subscription);\n    }\n    on(eventName, callback) {\n        if (!this.events[eventName]) {\n            this.events[eventName] = new SubscriptionManager();\n        }\n        const unsubscribe = this.events[eventName].add(callback);\n        if (eventName === \"change\") {\n            return () => {\n                unsubscribe();\n                /**\n                 * If we have no more change listeners by the start\n                 * of the next frame, stop active animations.\n                 */\n                frame.read(() => {\n                    if (!this.events.change.getSize()) {\n                        this.stop();\n                    }\n                });\n            };\n        }\n        return unsubscribe;\n    }\n    clearListeners() {\n        for (const eventManagers in this.events) {\n            this.events[eventManagers].clear();\n        }\n    }\n    /**\n     * Attaches a passive effect to the `MotionValue`.\n     */\n    attach(passiveEffect, stopPassiveEffect) {\n        this.passiveEffect = passiveEffect;\n        this.stopPassiveEffect = stopPassiveEffect;\n    }\n    /**\n     * Sets the state of the `MotionValue`.\n     *\n     * @remarks\n     *\n     * ```jsx\n     * const x = useMotionValue(0)\n     * x.set(10)\n     * ```\n     *\n     * @param latest - Latest value to set.\n     * @param render - Whether to notify render subscribers. Defaults to `true`\n     *\n     * @public\n     */\n    set(v) {\n        if (!this.passiveEffect) {\n            this.updateAndNotify(v);\n        }\n        else {\n            this.passiveEffect(v, this.updateAndNotify);\n        }\n    }\n    setWithVelocity(prev, current, delta) {\n        this.set(current);\n        this.prev = undefined;\n        this.prevFrameValue = prev;\n        this.prevUpdatedAt = this.updatedAt - delta;\n    }\n    /**\n     * Set the state of the `MotionValue`, stopping any active animations,\n     * effects, and resets velocity to `0`.\n     */\n    jump(v, endAnimation = true) {\n        this.updateAndNotify(v);\n        this.prev = v;\n        this.prevUpdatedAt = this.prevFrameValue = undefined;\n        endAnimation && this.stop();\n        if (this.stopPassiveEffect)\n            this.stopPassiveEffect();\n    }\n    dirty() {\n        this.events.change?.notify(this.current);\n    }\n    addDependent(dependent) {\n        if (!this.dependents) {\n            this.dependents = new Set();\n        }\n        this.dependents.add(dependent);\n    }\n    removeDependent(dependent) {\n        if (this.dependents) {\n            this.dependents.delete(dependent);\n        }\n    }\n    /**\n     * Returns the latest state of `MotionValue`\n     *\n     * @returns - The latest state of `MotionValue`\n     *\n     * @public\n     */\n    get() {\n        if (collectMotionValues.current) {\n            collectMotionValues.current.push(this);\n        }\n        return this.current;\n    }\n    /**\n     * @public\n     */\n    getPrevious() {\n        return this.prev;\n    }\n    /**\n     * Returns the latest velocity of `MotionValue`\n     *\n     * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n     *\n     * @public\n     */\n    getVelocity() {\n        const currentTime = time.now();\n        if (!this.canTrackVelocity ||\n            this.prevFrameValue === undefined ||\n            currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n            return 0;\n        }\n        const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n        // Casts because of parseFloat's poor typing\n        return velocityPerSecond(parseFloat(this.current) -\n            parseFloat(this.prevFrameValue), delta);\n    }\n    /**\n     * Registers a new animation to control this `MotionValue`. Only one\n     * animation can drive a `MotionValue` at one time.\n     *\n     * ```jsx\n     * value.start()\n     * ```\n     *\n     * @param animation - A function that starts the provided animation\n     */\n    start(startAnimation) {\n        this.stop();\n        return new Promise((resolve) => {\n            this.hasAnimated = true;\n            this.animation = startAnimation(resolve);\n            if (this.events.animationStart) {\n                this.events.animationStart.notify();\n            }\n        }).then(() => {\n            if (this.events.animationComplete) {\n                this.events.animationComplete.notify();\n            }\n            this.clearAnimation();\n        });\n    }\n    /**\n     * Stop the currently active animation.\n     *\n     * @public\n     */\n    stop() {\n        if (this.animation) {\n            this.animation.stop();\n            if (this.events.animationCancel) {\n                this.events.animationCancel.notify();\n            }\n        }\n        this.clearAnimation();\n    }\n    /**\n     * Returns `true` if this value is currently animating.\n     *\n     * @public\n     */\n    isAnimating() {\n        return !!this.animation;\n    }\n    clearAnimation() {\n        delete this.animation;\n    }\n    /**\n     * Destroy and clean up subscribers to this `MotionValue`.\n     *\n     * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n     * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n     * created a `MotionValue` via the `motionValue` function.\n     *\n     * @public\n     */\n    destroy() {\n        this.dependents?.clear();\n        this.events.destroy?.notify();\n        this.clearListeners();\n        this.stop();\n        if (this.stopPassiveEffect) {\n            this.stopPassiveEffect();\n        }\n    }\n}\nfunction motionValue(init, options) {\n    return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n//# sourceMappingURL=index.mjs.map\n","const isKeyframesTarget = (v) => {\n    return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n//# sourceMappingURL=is-keyframes-target.mjs.map\n","import { motionValue } from '../../value/index.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { isKeyframesTarget } from './is-keyframes-target.mjs';\n\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\nfunction setMotionValue(visualElement, key, value) {\n    if (visualElement.hasValue(key)) {\n        visualElement.getValue(key).set(value);\n    }\n    else {\n        visualElement.addValue(key, motionValue(value));\n    }\n}\nfunction resolveFinalValueInKeyframes(v) {\n    // TODO maybe throw if v.length - 1 is placeholder token?\n    return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n}\nfunction setTarget(visualElement, definition) {\n    const resolved = resolveVariant(visualElement, definition);\n    let { transitionEnd = {}, transition = {}, ...target } = resolved || {};\n    target = { ...target, ...transitionEnd };\n    for (const key in target) {\n        const value = resolveFinalValueInKeyframes(target[key]);\n        setMotionValue(visualElement, key, value);\n    }\n}\n\nexport { setTarget };\n//# sourceMappingURL=setters.mjs.map\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n//# sourceMappingURL=is-motion-value.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { isWillChangeMotionValue } from './is.mjs';\n\nfunction addValueToWillChange(visualElement, key) {\n    const willChange = visualElement.getValue(\"willChange\");\n    /**\n     * It could be that a user has set willChange to a regular MotionValue,\n     * in which case we can't add the value to it.\n     */\n    if (isWillChangeMotionValue(willChange)) {\n        return willChange.add(key);\n    }\n    else if (!willChange && MotionGlobalConfig.WillChange) {\n        const newWillChange = new MotionGlobalConfig.WillChange(\"auto\");\n        visualElement.addValue(\"willChange\", newWillChange);\n        newWillChange.add(key);\n    }\n}\n\nexport { addValueToWillChange };\n//# sourceMappingURL=add-will-change.mjs.map\n","import { isMotionValue } from '../utils/is-motion-value.mjs';\n\nfunction isWillChangeMotionValue(value) {\n    return Boolean(isMotionValue(value) && value.add);\n}\n\nexport { isWillChangeMotionValue };\n//# sourceMappingURL=is.mjs.map\n","function camelToDash(str) {\n    return str.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);\n}\n\nexport { camelToDash };\n//# sourceMappingURL=camel-to-dash.mjs.map\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n//# sourceMappingURL=data-id.mjs.map\n","import { optimizedAppearDataAttribute } from './data-id.mjs';\n\nfunction getOptimisedAppearId(visualElement) {\n    return visualElement.props[optimizedAppearDataAttribute];\n}\n\nexport { getOptimisedAppearId };\n//# sourceMappingURL=get-appear-id.mjs.map\n","import { getValueTransition } from '../utils/get-value-transition.mjs';\nimport { resolveTransition } from '../utils/resolve-transition.mjs';\nimport { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { addValueToWillChange } from '../../value/will-change/add-will-change.mjs';\nimport { getOptimisedAppearId } from '../optimized-appear/get-appear-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n    const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n    needsAnimating[key] = false;\n    return shouldBlock;\n}\nfunction animateTarget(visualElement, targetAndTransition, { delay = 0, transitionOverride, type } = {}) {\n    let { transition, transitionEnd, ...target } = targetAndTransition;\n    const defaultTransition = visualElement.getDefaultTransition();\n    transition = transition\n        ? resolveTransition(transition, defaultTransition)\n        : defaultTransition;\n    const reduceMotion = transition?.reduceMotion;\n    if (transitionOverride)\n        transition = transitionOverride;\n    const animations = [];\n    const animationTypeState = type &&\n        visualElement.animationState &&\n        visualElement.animationState.getState()[type];\n    for (const key in target) {\n        const value = visualElement.getValue(key, visualElement.latestValues[key] ?? null);\n        const valueTarget = target[key];\n        if (valueTarget === undefined ||\n            (animationTypeState &&\n                shouldBlockAnimation(animationTypeState, key))) {\n            continue;\n        }\n        const valueTransition = {\n            delay,\n            ...getValueTransition(transition || {}, key),\n        };\n        /**\n         * If the value is already at the defined target, skip the animation.\n         * We still re-assert the value via frame.update to take precedence\n         * over any stale transitionEnd callbacks from previous animations.\n         */\n        const currentValue = value.get();\n        if (currentValue !== undefined &&\n            !value.isAnimating() &&\n            !Array.isArray(valueTarget) &&\n            valueTarget === currentValue &&\n            !valueTransition.velocity) {\n            frame.update(() => value.set(valueTarget));\n            continue;\n        }\n        /**\n         * If this is the first time a value is being animated, check\n         * to see if we're handling off from an existing animation.\n         */\n        let isHandoff = false;\n        if (window.MotionHandoffAnimation) {\n            const appearId = getOptimisedAppearId(visualElement);\n            if (appearId) {\n                const startTime = window.MotionHandoffAnimation(appearId, key, frame);\n                if (startTime !== null) {\n                    valueTransition.startTime = startTime;\n                    isHandoff = true;\n                }\n            }\n        }\n        addValueToWillChange(visualElement, key);\n        const shouldReduceMotion = reduceMotion ?? visualElement.shouldReduceMotion;\n        value.start(animateMotionValue(key, value, valueTarget, shouldReduceMotion && positionalKeys.has(key)\n            ? { type: false }\n            : valueTransition, visualElement, isHandoff));\n        const animation = value.animation;\n        if (animation) {\n            animations.push(animation);\n        }\n    }\n    if (transitionEnd) {\n        const applyTransitionEnd = () => frame.update(() => {\n            transitionEnd && setTarget(visualElement, transitionEnd);\n        });\n        if (animations.length) {\n            Promise.all(animations).then(applyTransitionEnd);\n        }\n        else {\n            applyTransitionEnd();\n        }\n    }\n    return animations;\n}\n\nexport { animateTarget };\n//# sourceMappingURL=visual-element-target.mjs.map\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { calcChildStagger } from '../utils/calc-child-stagger.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n    const resolved = resolveVariant(visualElement, variant, options.type === \"exit\"\n        ? visualElement.presenceContext?.custom\n        : undefined);\n    let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n    if (options.transitionOverride) {\n        transition = options.transitionOverride;\n    }\n    /**\n     * If we have a variant, create a callback that runs it as an animation.\n     * Otherwise, we resolve a Promise immediately for a composable no-op.\n     */\n    const getAnimation = resolved\n        ? () => Promise.all(animateTarget(visualElement, resolved, options))\n        : () => Promise.resolve();\n    /**\n     * If we have children, create a callback that runs all their animations.\n     * Otherwise, we resolve a Promise immediately for a composable no-op.\n     */\n    const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n        ? (forwardDelay = 0) => {\n            const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n            return animateChildren(visualElement, variant, forwardDelay, delayChildren, staggerChildren, staggerDirection, options);\n        }\n        : () => Promise.resolve();\n    /**\n     * If the transition explicitly defines a \"when\" option, we need to resolve either\n     * this animation or all children animations before playing the other.\n     */\n    const { when } = transition;\n    if (when) {\n        const [first, last] = when === \"beforeChildren\"\n            ? [getAnimation, getChildAnimations]\n            : [getChildAnimations, getAnimation];\n        return first().then(() => last());\n    }\n    else {\n        return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n    }\n}\nfunction animateChildren(visualElement, variant, delay = 0, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n    const animations = [];\n    for (const child of visualElement.variantChildren) {\n        child.notify(\"AnimationStart\", variant);\n        animations.push(animateVariant(child, variant, {\n            ...options,\n            delay: delay +\n                (typeof delayChildren === \"function\" ? 0 : delayChildren) +\n                calcChildStagger(visualElement.variantChildren, child, delayChildren, staggerChildren, staggerDirection),\n        }).then(() => child.notify(\"AnimationComplete\", variant)));\n    }\n    return Promise.all(animations);\n}\n\nexport { animateVariant };\n//# sourceMappingURL=visual-element-variant.mjs.map\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n    test: (v) => v === \"auto\",\n    parse: (v) => v,\n};\n\nexport { auto };\n//# sourceMappingURL=auto.mjs.map\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n//# sourceMappingURL=test.mjs.map\n","import { auto } from './auto.mjs';\nimport { number } from './numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from './numbers/units.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n//# sourceMappingURL=dimensions.mjs.map\n","import { isZeroValueString } from 'motion-utils';\n\nfunction isNone(value) {\n    if (typeof value === \"number\") {\n        return value === 0;\n    }\n    else if (value !== null) {\n        return value === \"none\" || value === \"0\" || isZeroValueString(value);\n    }\n    else {\n        return true;\n    }\n}\n\nexport { isNone };\n//# sourceMappingURL=is-none.mjs.map\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n    const [name, value] = v.slice(0, -1).split(\"(\");\n    if (name === \"drop-shadow\")\n        return v;\n    const [number] = value.match(floatRegex) || [];\n    if (!number)\n        return v;\n    const unit = value.replace(number, \"\");\n    let defaultValue = maxDefaults.has(name) ? 1 : 0;\n    if (number !== value)\n        defaultValue *= 100;\n    return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n    ...complex,\n    getAnimatableNone: (v) => {\n        const functions = v.match(functionRegex);\n        return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n    },\n};\n\nexport { filter };\n//# sourceMappingURL=filter.mjs.map\n","import { complex } from './index.mjs';\n\nconst mask = {\n    ...complex,\n    getAnimatableNone: (v) => {\n        const parsed = complex.parse(v);\n        const transformer = complex.createTransformer(v);\n        return transformer(parsed.map((v) => typeof v === \"number\" ? 0 : typeof v === \"object\" ? { ...v, alpha: 1 } : v));\n    },\n};\n\nexport { mask };\n//# sourceMappingURL=mask.mjs.map\n","import { number } from './numbers/index.mjs';\n\nconst int = {\n    ...number,\n    transform: Math.round,\n};\n\nexport { int };\n//# sourceMappingURL=int.mjs.map\n","import { int } from '../int.mjs';\nimport { alpha } from '../numbers/index.mjs';\nimport { px } from '../numbers/units.mjs';\nimport { transformValueTypes } from './transform.mjs';\n\nconst numberValueTypes = {\n    // Border props\n    borderWidth: px,\n    borderTopWidth: px,\n    borderRightWidth: px,\n    borderBottomWidth: px,\n    borderLeftWidth: px,\n    borderRadius: px,\n    borderTopLeftRadius: px,\n    borderTopRightRadius: px,\n    borderBottomRightRadius: px,\n    borderBottomLeftRadius: px,\n    // Positioning props\n    width: px,\n    maxWidth: px,\n    height: px,\n    maxHeight: px,\n    top: px,\n    right: px,\n    bottom: px,\n    left: px,\n    inset: px,\n    insetBlock: px,\n    insetBlockStart: px,\n    insetBlockEnd: px,\n    insetInline: px,\n    insetInlineStart: px,\n    insetInlineEnd: px,\n    // Spacing props\n    padding: px,\n    paddingTop: px,\n    paddingRight: px,\n    paddingBottom: px,\n    paddingLeft: px,\n    paddingBlock: px,\n    paddingBlockStart: px,\n    paddingBlockEnd: px,\n    paddingInline: px,\n    paddingInlineStart: px,\n    paddingInlineEnd: px,\n    margin: px,\n    marginTop: px,\n    marginRight: px,\n    marginBottom: px,\n    marginLeft: px,\n    marginBlock: px,\n    marginBlockStart: px,\n    marginBlockEnd: px,\n    marginInline: px,\n    marginInlineStart: px,\n    marginInlineEnd: px,\n    // Typography\n    fontSize: px,\n    // Misc\n    backgroundPositionX: px,\n    backgroundPositionY: px,\n    ...transformValueTypes,\n    zIndex: int,\n    // SVG\n    fillOpacity: alpha,\n    strokeOpacity: alpha,\n    numOctaves: int,\n};\n\nexport { numberValueTypes };\n//# sourceMappingURL=number.mjs.map\n","import { alpha, scale } from '../numbers/index.mjs';\nimport { px, progressPercentage, degrees } from '../numbers/units.mjs';\n\nconst transformValueTypes = {\n    rotate: degrees,\n    rotateX: degrees,\n    rotateY: degrees,\n    rotateZ: degrees,\n    scale,\n    scaleX: scale,\n    scaleY: scale,\n    scaleZ: scale,\n    skew: degrees,\n    skewX: degrees,\n    skewY: degrees,\n    distance: px,\n    translateX: px,\n    translateY: px,\n    translateZ: px,\n    x: px,\n    y: px,\n    z: px,\n    perspective: px,\n    transformPerspective: px,\n    opacity: alpha,\n    originX: progressPercentage,\n    originY: progressPercentage,\n    originZ: px,\n};\n\nexport { transformValueTypes };\n//# sourceMappingURL=transform.mjs.map\n","import { color } from '../color/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { mask } from '../complex/mask.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n    ...numberValueTypes,\n    // Color props\n    color,\n    backgroundColor: color,\n    outlineColor: color,\n    fill: color,\n    stroke: color,\n    // Border props\n    borderColor: color,\n    borderTopColor: color,\n    borderRightColor: color,\n    borderBottomColor: color,\n    borderLeftColor: color,\n    filter,\n    WebkitFilter: filter,\n    mask,\n    WebkitMask: mask,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n//# sourceMappingURL=defaults.mjs.map\n","import { complex } from '../complex/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { mask } from '../complex/mask.mjs';\nimport { getDefaultValueType } from '../maps/defaults.mjs';\n\nconst customTypes = /*@__PURE__*/ new Set([filter, mask]);\nfunction getAnimatableNone(key, value) {\n    let defaultValueType = getDefaultValueType(key);\n    if (!customTypes.has(defaultValueType))\n        defaultValueType = complex;\n    // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n    return defaultValueType.getAnimatableNone\n        ? defaultValueType.getAnimatableNone(value)\n        : undefined;\n}\n\nexport { getAnimatableNone };\n//# sourceMappingURL=animatable-none.mjs.map\n","import { analyseComplexValue } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../../value/types/utils/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n    let i = 0;\n    let animatableTemplate = undefined;\n    while (i < unresolvedKeyframes.length && !animatableTemplate) {\n        const keyframe = unresolvedKeyframes[i];\n        if (typeof keyframe === \"string\" &&\n            !invalidTemplates.has(keyframe) &&\n            analyseComplexValue(keyframe).values.length) {\n            animatableTemplate = unresolvedKeyframes[i];\n        }\n        i++;\n    }\n    if (animatableTemplate && name) {\n        for (const noneIndex of noneKeyframeIndexes) {\n            unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n        }\n    }\n}\n\nexport { makeNoneKeyframesAnimatable };\n//# sourceMappingURL=make-none-animatable.mjs.map\n","import { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { findDimensionValueType } from '../../value/types/dimensions.mjs';\nimport { getVariableValue } from '../utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken, containsCSSVariable } from '../utils/is-css-variable.mjs';\nimport { KeyframeResolver } from './KeyframesResolver.mjs';\nimport { isNone } from './utils/is-none.mjs';\nimport { makeNoneKeyframesAnimatable } from './utils/make-none-animatable.mjs';\nimport { positionalValues, isNumOrPxType } from './utils/unit-conversion.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element) {\n        super(unresolvedKeyframes, onComplete, name, motionValue, element, true);\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, element, name } = this;\n        if (!element || !element.current)\n            return;\n        super.readKeyframes();\n        /**\n         * If any keyframe is a CSS variable, we need to find its value by sampling the element\n         */\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            let keyframe = unresolvedKeyframes[i];\n            if (typeof keyframe === \"string\") {\n                keyframe = keyframe.trim();\n                if (isCSSVariableToken(keyframe)) {\n                    const resolved = getVariableValue(keyframe, element.current);\n                    if (resolved !== undefined) {\n                        unresolvedKeyframes[i] = resolved;\n                    }\n                    if (i === unresolvedKeyframes.length - 1) {\n                        this.finalKeyframe = keyframe;\n                    }\n                }\n            }\n        }\n        /**\n         * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n         * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n         * have a far bigger performance impact.\n         */\n        this.resolveNoneKeyframes();\n        /**\n         * Check to see if unit type has changed. If so schedule jobs that will\n         * temporarily set styles to the destination keyframes.\n         * Skip if we have more than two keyframes or this isn't a positional value.\n         * TODO: We can throw if there are multiple keyframes and the value type changes.\n         */\n        if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n            return;\n        }\n        const [origin, target] = unresolvedKeyframes;\n        const originType = findDimensionValueType(origin);\n        const targetType = findDimensionValueType(target);\n        /**\n         * If one keyframe contains embedded CSS variables (e.g. in calc()) and the other\n         * doesn't, we need to measure to convert to pixels. This handles GitHub issue #3410.\n         */\n        const originHasVar = containsCSSVariable(origin);\n        const targetHasVar = containsCSSVariable(target);\n        if (originHasVar !== targetHasVar && positionalValues[name]) {\n            this.needsMeasurement = true;\n            return;\n        }\n        /**\n         * Either we don't recognise these value types or we can animate between them.\n         */\n        if (originType === targetType)\n            return;\n        /**\n         * If both values are numbers or pixels, we can animate between them by\n         * converting them to numbers.\n         */\n        if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n            for (let i = 0; i < unresolvedKeyframes.length; i++) {\n                const value = unresolvedKeyframes[i];\n                if (typeof value === \"string\") {\n                    unresolvedKeyframes[i] = parseFloat(value);\n                }\n            }\n        }\n        else if (positionalValues[name]) {\n            /**\n             * Else, the only way to resolve this is by measuring the element.\n             */\n            this.needsMeasurement = true;\n        }\n    }\n    resolveNoneKeyframes() {\n        const { unresolvedKeyframes, name } = this;\n        const noneKeyframeIndexes = [];\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            if (unresolvedKeyframes[i] === null ||\n                isNone(unresolvedKeyframes[i])) {\n                noneKeyframeIndexes.push(i);\n            }\n        }\n        if (noneKeyframeIndexes.length) {\n            makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n        }\n    }\n    measureInitialState() {\n        const { element, unresolvedKeyframes, name } = this;\n        if (!element || !element.current)\n            return;\n        if (name === \"height\") {\n            this.suspendedScrollY = window.pageYOffset;\n        }\n        this.measuredOrigin = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n        unresolvedKeyframes[0] = this.measuredOrigin;\n        // Set final key frame to measure after next render\n        const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n        if (measureKeyframe !== undefined) {\n            element.getValue(name, measureKeyframe).jump(measureKeyframe, false);\n        }\n    }\n    measureEndState() {\n        const { element, name, unresolvedKeyframes } = this;\n        if (!element || !element.current)\n            return;\n        const value = element.getValue(name);\n        value && value.jump(this.measuredOrigin, false);\n        const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n        const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n        unresolvedKeyframes[finalKeyframeIndex] = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n        if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n            this.finalKeyframe = finalKeyframe;\n        }\n        // If we removed transform values, reapply them before the next render\n        if (this.removedTransforms?.length) {\n            this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n                element\n                    .getValue(unsetTransformName)\n                    .set(unsetTransformValue);\n            });\n        }\n        this.resolveNoneKeyframes();\n    }\n}\n\nexport { DOMKeyframesResolver };\n//# sourceMappingURL=DOMKeyframesResolver.mjs.map\n","function resolveElements(elementOrSelector, scope, selectorCache) {\n    if (elementOrSelector == null) {\n        return [];\n    }\n    if (elementOrSelector instanceof EventTarget) {\n        return [elementOrSelector];\n    }\n    else if (typeof elementOrSelector === \"string\") {\n        let root = document;\n        if (scope) {\n            root = scope.current;\n        }\n        const elements = selectorCache?.[elementOrSelector] ??\n            root.querySelectorAll(elementOrSelector);\n        return elements ? Array.from(elements) : [];\n    }\n    return Array.from(elementOrSelector).filter((element) => element != null);\n}\n\nexport { resolveElements };\n//# sourceMappingURL=resolve-elements.mjs.map\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n    return type && typeof value === \"number\"\n        ? type.transform(value)\n        : value;\n};\n\nexport { getValueAsType };\n//# sourceMappingURL=get-as-type.mjs.map\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an HTML element in a way\n * that works across iframes\n */\nfunction isHTMLElement(element) {\n    return (isObject(element) &&\n        \"offsetHeight\" in element &&\n        !(\"ownerSVGElement\" in element));\n}\n\nexport { isHTMLElement };\n//# sourceMappingURL=is-html-element.mjs.map\n","import { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: microtask, cancel: cancelMicrotask } = \n/* @__PURE__ */ createRenderBatcher(queueMicrotask, false);\n\nexport { cancelMicrotask, microtask };\n//# sourceMappingURL=microtask.mjs.map\n","const isDragging = {\n    x: false,\n    y: false,\n};\nfunction isDragActive() {\n    return isDragging.x || isDragging.y;\n}\n\nexport { isDragActive, isDragging };\n//# sourceMappingURL=is-active.mjs.map\n","import { resolveElements } from '../../utils/resolve-elements.mjs';\n\nfunction setupGesture(elementOrSelector, options) {\n    const elements = resolveElements(elementOrSelector);\n    const gestureAbortController = new AbortController();\n    const eventOptions = {\n        passive: true,\n        ...options,\n        signal: gestureAbortController.signal,\n    };\n    const cancel = () => gestureAbortController.abort();\n    return [elements, eventOptions, cancel];\n}\n\nexport { setupGesture };\n//# sourceMappingURL=setup.mjs.map\n","import { isDragActive } from './drag/state/is-active.mjs';\nimport { setupGesture } from './utils/setup.mjs';\n\nfunction isValidHover(event) {\n    return !(event.pointerType === \"touch\" || isDragActive());\n}\n/**\n * Create a hover gesture. hover() is different to .addEventListener(\"pointerenter\")\n * in that it has an easier syntax, filters out polyfilled touch events, interoperates\n * with drag gestures, and automatically removes the \"pointerennd\" event listener when the hover ends.\n *\n * @public\n */\nfunction hover(elementOrSelector, onHoverStart, options = {}) {\n    const [elements, eventOptions, cancel] = setupGesture(elementOrSelector, options);\n    elements.forEach((element) => {\n        let isPressed = false;\n        let deferredHoverEnd = false;\n        let hoverEndCallback;\n        const removePointerLeave = () => {\n            element.removeEventListener(\"pointerleave\", onPointerLeave);\n        };\n        const endHover = (event) => {\n            if (hoverEndCallback) {\n                hoverEndCallback(event);\n                hoverEndCallback = undefined;\n            }\n            removePointerLeave();\n        };\n        const onPointerUp = (event) => {\n            isPressed = false;\n            window.removeEventListener(\"pointerup\", onPointerUp);\n            window.removeEventListener(\"pointercancel\", onPointerUp);\n            if (deferredHoverEnd) {\n                deferredHoverEnd = false;\n                endHover(event);\n            }\n        };\n        const onPointerDown = () => {\n            isPressed = true;\n            window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n            window.addEventListener(\"pointercancel\", onPointerUp, eventOptions);\n        };\n        const onPointerLeave = (leaveEvent) => {\n            if (leaveEvent.pointerType === \"touch\")\n                return;\n            if (isPressed) {\n                deferredHoverEnd = true;\n                return;\n            }\n            endHover(leaveEvent);\n        };\n        const onPointerEnter = (enterEvent) => {\n            if (!isValidHover(enterEvent))\n                return;\n            deferredHoverEnd = false;\n            const onHoverEnd = onHoverStart(element, enterEvent);\n            if (typeof onHoverEnd !== \"function\")\n                return;\n            hoverEndCallback = onHoverEnd;\n            element.addEventListener(\"pointerleave\", onPointerLeave, eventOptions);\n        };\n        element.addEventListener(\"pointerenter\", onPointerEnter, eventOptions);\n        element.addEventListener(\"pointerdown\", onPointerDown, eventOptions);\n    });\n    return cancel;\n}\n\nexport { hover };\n//# sourceMappingURL=hover.mjs.map\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n    if (!child) {\n        return false;\n    }\n    else if (parent === child) {\n        return true;\n    }\n    else {\n        return isNodeOrChild(parent, child.parentElement);\n    }\n};\n\nexport { isNodeOrChild };\n//# sourceMappingURL=is-node-or-child.mjs.map\n","const isPrimaryPointer = (event) => {\n    if (event.pointerType === \"mouse\") {\n        return typeof event.button !== \"number\" || event.button <= 0;\n    }\n    else {\n        /**\n         * isPrimary is true for all mice buttons, whereas every touch point\n         * is regarded as its own input. So subsequent concurrent touch points\n         * will be false.\n         *\n         * Specifically match against false here as incomplete versions of\n         * PointerEvents in very old browser might have it set as undefined.\n         */\n        return event.isPrimary !== false;\n    }\n};\n\nexport { isPrimaryPointer };\n//# sourceMappingURL=is-primary-pointer.mjs.map\n","const keyboardAccessibleElements = new Set([\n    \"BUTTON\",\n    \"INPUT\",\n    \"SELECT\",\n    \"TEXTAREA\",\n    \"A\",\n]);\n/**\n * Checks if an element is natively keyboard accessible (focusable).\n * Used by the press gesture to determine if we need to add tabIndex.\n */\nfunction isElementKeyboardAccessible(element) {\n    return (keyboardAccessibleElements.has(element.tagName) ||\n        element.isContentEditable === true);\n}\nconst textInputElements = new Set([\"INPUT\", \"SELECT\", \"TEXTAREA\"]);\n/**\n * Checks if an element has text selection or direct interaction behavior\n * that should block drag gestures from starting.\n *\n * This specifically targets form controls where the user might want to select\n * text or interact with the control (e.g., sliders, dropdowns).\n *\n * Buttons and links are NOT included because they don't have click-and-move\n * actions of their own - they only respond to click events, so dragging\n * should still work when initiated from these elements.\n */\nfunction isElementTextInput(element) {\n    return (textInputElements.has(element.tagName) ||\n        element.isContentEditable === true);\n}\n\nexport { isElementKeyboardAccessible, isElementTextInput };\n//# sourceMappingURL=is-keyboard-accessible.mjs.map\n","const isPressing = new WeakSet();\n\nexport { isPressing };\n//# sourceMappingURL=state.mjs.map\n","import { isPressing } from './state.mjs';\n\n/**\n * Filter out events that are not \"Enter\" keys.\n */\nfunction filterEvents(callback) {\n    return (event) => {\n        if (event.key !== \"Enter\")\n            return;\n        callback(event);\n    };\n}\nfunction firePointerEvent(target, type) {\n    target.dispatchEvent(new PointerEvent(\"pointer\" + type, { isPrimary: true, bubbles: true }));\n}\nconst enableKeyboardPress = (focusEvent, eventOptions) => {\n    const element = focusEvent.currentTarget;\n    if (!element)\n        return;\n    const handleKeydown = filterEvents(() => {\n        if (isPressing.has(element))\n            return;\n        firePointerEvent(element, \"down\");\n        const handleKeyup = filterEvents(() => {\n            firePointerEvent(element, \"up\");\n        });\n        const handleBlur = () => firePointerEvent(element, \"cancel\");\n        element.addEventListener(\"keyup\", handleKeyup, eventOptions);\n        element.addEventListener(\"blur\", handleBlur, eventOptions);\n    });\n    element.addEventListener(\"keydown\", handleKeydown, eventOptions);\n    /**\n     * Add an event listener that fires on blur to remove the keydown events.\n     */\n    element.addEventListener(\"blur\", () => element.removeEventListener(\"keydown\", handleKeydown), eventOptions);\n};\n\nexport { enableKeyboardPress };\n//# sourceMappingURL=keyboard.mjs.map\n","import { isHTMLElement } from '../../utils/is-html-element.mjs';\nimport { isDragActive } from '../drag/state/is-active.mjs';\nimport { isNodeOrChild } from '../utils/is-node-or-child.mjs';\nimport { isPrimaryPointer } from '../utils/is-primary-pointer.mjs';\nimport { setupGesture } from '../utils/setup.mjs';\nimport { isElementKeyboardAccessible } from './utils/is-keyboard-accessible.mjs';\nimport { enableKeyboardPress } from './utils/keyboard.mjs';\nimport { isPressing } from './utils/state.mjs';\n\n/**\n * Filter out events that are not primary pointer events, or are triggering\n * while a Motion gesture is active.\n */\nfunction isValidPressEvent(event) {\n    return isPrimaryPointer(event) && !isDragActive();\n}\nconst claimedPointerDownEvents = new WeakSet();\n/**\n * Create a press gesture.\n *\n * Press is different to `\"pointerdown\"`, `\"pointerup\"` in that it\n * automatically filters out secondary pointer events like right\n * click and multitouch.\n *\n * It also adds accessibility support for keyboards, where\n * an element with a press gesture will receive focus and\n *  trigger on Enter `\"keydown\"` and `\"keyup\"` events.\n *\n * This is different to a browser's `\"click\"` event, which does\n * respond to keyboards but only for the `\"click\"` itself, rather\n * than the press start and end/cancel. The element also needs\n * to be focusable for this to work, whereas a press gesture will\n * make an element focusable by default.\n *\n * @public\n */\nfunction press(targetOrSelector, onPressStart, options = {}) {\n    const [targets, eventOptions, cancelEvents] = setupGesture(targetOrSelector, options);\n    const startPress = (startEvent) => {\n        const target = startEvent.currentTarget;\n        if (!isValidPressEvent(startEvent))\n            return;\n        if (claimedPointerDownEvents.has(startEvent))\n            return;\n        isPressing.add(target);\n        if (options.stopPropagation) {\n            claimedPointerDownEvents.add(startEvent);\n        }\n        const onPressEnd = onPressStart(target, startEvent);\n        const onPointerEnd = (endEvent, success) => {\n            window.removeEventListener(\"pointerup\", onPointerUp);\n            window.removeEventListener(\"pointercancel\", onPointerCancel);\n            if (isPressing.has(target)) {\n                isPressing.delete(target);\n            }\n            if (!isValidPressEvent(endEvent)) {\n                return;\n            }\n            if (typeof onPressEnd === \"function\") {\n                onPressEnd(endEvent, { success });\n            }\n        };\n        const onPointerUp = (upEvent) => {\n            onPointerEnd(upEvent, target === window ||\n                target === document ||\n                options.useGlobalTarget ||\n                isNodeOrChild(target, upEvent.target));\n        };\n        const onPointerCancel = (cancelEvent) => {\n            onPointerEnd(cancelEvent, false);\n        };\n        window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n        window.addEventListener(\"pointercancel\", onPointerCancel, eventOptions);\n    };\n    targets.forEach((target) => {\n        const pointerDownTarget = options.useGlobalTarget ? window : target;\n        pointerDownTarget.addEventListener(\"pointerdown\", startPress, eventOptions);\n        if (isHTMLElement(target)) {\n            target.addEventListener(\"focus\", (event) => enableKeyboardPress(event, eventOptions));\n            if (!isElementKeyboardAccessible(target) &&\n                !target.hasAttribute(\"tabindex\")) {\n                target.tabIndex = 0;\n            }\n        }\n    });\n    return cancelEvents;\n}\n\nexport { press };\n//# sourceMappingURL=index.mjs.map\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an SVG element in a way\n * that works across iframes\n */\nfunction isSVGElement(element) {\n    return isObject(element) && \"ownerSVGElement\" in element;\n}\n\nexport { isSVGElement };\n//# sourceMappingURL=is-svg-element.mjs.map\n","import { isSVGElement } from '../utils/is-svg-element.mjs';\nimport { resolveElements } from '../utils/resolve-elements.mjs';\n\nconst resizeHandlers = new WeakMap();\nlet observer;\nconst getSize = (borderBoxAxis, svgAxis, htmlAxis) => (target, borderBoxSize) => {\n    if (borderBoxSize && borderBoxSize[0]) {\n        return borderBoxSize[0][(borderBoxAxis + \"Size\")];\n    }\n    else if (isSVGElement(target) && \"getBBox\" in target) {\n        return target.getBBox()[svgAxis];\n    }\n    else {\n        return target[htmlAxis];\n    }\n};\nconst getWidth = /*@__PURE__*/ getSize(\"inline\", \"width\", \"offsetWidth\");\nconst getHeight = /*@__PURE__*/ getSize(\"block\", \"height\", \"offsetHeight\");\nfunction notifyTarget({ target, borderBoxSize }) {\n    resizeHandlers.get(target)?.forEach((handler) => {\n        handler(target, {\n            get width() {\n                return getWidth(target, borderBoxSize);\n            },\n            get height() {\n                return getHeight(target, borderBoxSize);\n            },\n        });\n    });\n}\nfunction notifyAll(entries) {\n    entries.forEach(notifyTarget);\n}\nfunction createResizeObserver() {\n    if (typeof ResizeObserver === \"undefined\")\n        return;\n    observer = new ResizeObserver(notifyAll);\n}\nfunction resizeElement(target, handler) {\n    if (!observer)\n        createResizeObserver();\n    const elements = resolveElements(target);\n    elements.forEach((element) => {\n        let elementHandlers = resizeHandlers.get(element);\n        if (!elementHandlers) {\n            elementHandlers = new Set();\n            resizeHandlers.set(element, elementHandlers);\n        }\n        elementHandlers.add(handler);\n        observer?.observe(element);\n    });\n    return () => {\n        elements.forEach((element) => {\n            const elementHandlers = resizeHandlers.get(element);\n            elementHandlers?.delete(handler);\n            if (!elementHandlers?.size) {\n                observer?.unobserve(element);\n            }\n        });\n    };\n}\n\nexport { resizeElement };\n//# sourceMappingURL=handle-element.mjs.map\n","const windowCallbacks = new Set();\nlet windowResizeHandler;\nfunction createWindowResizeHandler() {\n    windowResizeHandler = () => {\n        const info = {\n            get width() {\n                return window.innerWidth;\n            },\n            get height() {\n                return window.innerHeight;\n            },\n        };\n        windowCallbacks.forEach((callback) => callback(info));\n    };\n    window.addEventListener(\"resize\", windowResizeHandler);\n}\nfunction resizeWindow(callback) {\n    windowCallbacks.add(callback);\n    if (!windowResizeHandler)\n        createWindowResizeHandler();\n    return () => {\n        windowCallbacks.delete(callback);\n        if (!windowCallbacks.size &&\n            typeof windowResizeHandler === \"function\") {\n            window.removeEventListener(\"resize\", windowResizeHandler);\n            windowResizeHandler = undefined;\n        }\n    };\n}\n\nexport { resizeWindow };\n//# sourceMappingURL=handle-window.mjs.map\n","import { resizeElement } from './handle-element.mjs';\nimport { resizeWindow } from './handle-window.mjs';\n\nfunction resize(a, b) {\n    return typeof a === \"function\" ? resizeWindow(a) : resizeElement(a, b);\n}\n\nexport { resize };\n//# sourceMappingURL=index.mjs.map\n","import { color } from '../color/index.mjs';\nimport { complex } from '../complex/index.mjs';\nimport { dimensionValueTypes } from '../dimensions.mjs';\nimport { testValueType } from '../test.mjs';\n\n/**\n * A list of all ValueTypes\n */\nconst valueTypes = [...dimensionValueTypes, color, complex];\n/**\n * Tests a value against the list of ValueTypes\n */\nconst findValueType = (v) => valueTypes.find(testValueType(v));\n\nexport { findValueType };\n//# sourceMappingURL=find.mjs.map\n","const createAxisDelta = () => ({\n    translate: 0,\n    scale: 1,\n    origin: 0,\n    originPoint: 0,\n});\nconst createDelta = () => ({\n    x: createAxisDelta(),\n    y: createAxisDelta(),\n});\nconst createAxis = () => ({ min: 0, max: 0 });\nconst createBox = () => ({\n    x: createAxis(),\n    y: createAxis(),\n});\n\nexport { createAxis, createAxisDelta, createBox, createDelta };\n//# sourceMappingURL=models.mjs.map\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n//# sourceMappingURL=store.mjs.map\n","function isAnimationControls(v) {\n    return (v !== null &&\n        typeof v === \"object\" &&\n        typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n//# sourceMappingURL=is-animation-controls.mjs.map\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n    return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n//# sourceMappingURL=is-variant-label.mjs.map\n","const variantPriorityOrder = [\n    \"animate\",\n    \"whileInView\",\n    \"whileFocus\",\n    \"whileHover\",\n    \"whileTap\",\n    \"whileDrag\",\n    \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n//# sourceMappingURL=variant-props.mjs.map\n","import { isAnimationControls } from './is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n    return (isAnimationControls(props.animate) ||\n        variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n    return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n//# sourceMappingURL=is-controlling-variants.mjs.map\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n//# sourceMappingURL=state.mjs.map\n","import { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction initPrefersReducedMotion() {\n    hasReducedMotionListener.current = true;\n    if (!isBrowser)\n        return;\n    if (window.matchMedia) {\n        const motionMediaQuery = window.matchMedia(\"(prefers-reduced-motion)\");\n        const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);\n        motionMediaQuery.addEventListener(\"change\", setReducedMotionPreferences);\n        setReducedMotionPreferences();\n    }\n    else {\n        prefersReducedMotion.current = false;\n    }\n}\n\nexport { hasReducedMotionListener, initPrefersReducedMotion, prefersReducedMotion };\n//# sourceMappingURL=index.mjs.map\n","import { warnOnce, secondsToMilliseconds, isNumericalString, isZeroValueString, SubscriptionManager } from 'motion-utils';\nimport { KeyframeResolver } from '../animation/keyframes/KeyframesResolver.mjs';\nimport { NativeAnimation } from '../animation/NativeAnimation.mjs';\nimport { acceleratedValues } from '../animation/waapi/utils/accelerated-values.mjs';\nimport { microtask } from '../frameloop/microtask.mjs';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { complex } from '../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../value/types/utils/animatable-none.mjs';\nimport { findValueType } from '../value/types/utils/find.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { transformProps } from './utils/keys-transform.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { initPrefersReducedMotion } from './utils/reduced-motion/index.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './utils/reduced-motion/state.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst propEventHandlers = [\n    \"AnimationStart\",\n    \"AnimationComplete\",\n    \"Update\",\n    \"BeforeLayoutMeasure\",\n    \"LayoutMeasure\",\n    \"LayoutAnimationStart\",\n    \"LayoutAnimationComplete\",\n];\n/**\n * Static feature definitions - can be injected by framework layer\n */\nlet featureDefinitions = {};\n/**\n * Set feature definitions for all VisualElements.\n * This should be called by the framework layer (e.g., framer-motion) during initialization.\n */\nfunction setFeatureDefinitions(definitions) {\n    featureDefinitions = definitions;\n}\n/**\n * Get the current feature definitions\n */\nfunction getFeatureDefinitions() {\n    return featureDefinitions;\n}\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n    /**\n     * This method takes React props and returns found MotionValues. For example, HTML\n     * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n     *\n     * This isn't an abstract method as it needs calling in the constructor, but it is\n     * intended to be one.\n     */\n    scrapeMotionValuesFromProps(_props, _prevProps, _visualElement) {\n        return {};\n    }\n    constructor({ parent, props, presenceContext, reducedMotionConfig, skipAnimations, blockInitialAnimation, visualState, }, options = {}) {\n        /**\n         * A reference to the current underlying Instance, e.g. a HTMLElement\n         * or Three.Mesh etc.\n         */\n        this.current = null;\n        /**\n         * A set containing references to this VisualElement's children.\n         */\n        this.children = new Set();\n        /**\n         * Determine what role this visual element should take in the variant tree.\n         */\n        this.isVariantNode = false;\n        this.isControllingVariants = false;\n        /**\n         * Decides whether this VisualElement should animate in reduced motion\n         * mode.\n         *\n         * TODO: This is currently set on every individual VisualElement but feels\n         * like it could be set globally.\n         */\n        this.shouldReduceMotion = null;\n        /**\n         * Decides whether animations should be skipped for this VisualElement.\n         * Useful for E2E tests and visual regression testing.\n         */\n        this.shouldSkipAnimations = false;\n        /**\n         * A map of all motion values attached to this visual element. Motion\n         * values are source of truth for any given animated value. A motion\n         * value might be provided externally by the component via props.\n         */\n        this.values = new Map();\n        this.KeyframeResolver = KeyframeResolver;\n        /**\n         * Cleanup functions for active features (hover/tap/exit etc)\n         */\n        this.features = {};\n        /**\n         * A map of every subscription that binds the provided or generated\n         * motion values onChange listeners to this visual element.\n         */\n        this.valueSubscriptions = new Map();\n        /**\n         * A reference to the previously-provided motion values as returned\n         * from scrapeMotionValuesFromProps. We use the keys in here to determine\n         * if any motion values need to be removed after props are updated.\n         */\n        this.prevMotionValues = {};\n        /**\n         * Track whether this element has been mounted before, to detect\n         * remounts after Suspense unmount/remount cycles.\n         */\n        this.hasBeenMounted = false;\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        /**\n         * An object containing an unsubscribe function for each prop event subscription.\n         * For example, every \"Update\" event can have multiple subscribers via\n         * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n         */\n        this.propEventSubscriptions = {};\n        this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n        this.render = () => {\n            if (!this.current)\n                return;\n            this.triggerBuild();\n            this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n        };\n        this.renderScheduledAt = 0.0;\n        this.scheduleRender = () => {\n            const now = time.now();\n            if (this.renderScheduledAt < now) {\n                this.renderScheduledAt = now;\n                frame.render(this.render, false, true);\n            }\n        };\n        const { latestValues, renderState } = visualState;\n        this.latestValues = latestValues;\n        this.baseTarget = { ...latestValues };\n        this.initialValues = props.initial ? { ...latestValues } : {};\n        this.renderState = renderState;\n        this.parent = parent;\n        this.props = props;\n        this.presenceContext = presenceContext;\n        this.depth = parent ? parent.depth + 1 : 0;\n        this.reducedMotionConfig = reducedMotionConfig;\n        this.skipAnimationsConfig = skipAnimations;\n        this.options = options;\n        this.blockInitialAnimation = Boolean(blockInitialAnimation);\n        this.isControllingVariants = isControllingVariants(props);\n        this.isVariantNode = isVariantNode(props);\n        if (this.isVariantNode) {\n            this.variantChildren = new Set();\n        }\n        this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n        /**\n         * Any motion values that are provided to the element when created\n         * aren't yet bound to the element, as this would technically be impure.\n         * However, we iterate through the motion values and set them to the\n         * initial values for this component.\n         *\n         * TODO: This is impure and we should look at changing this to run on mount.\n         * Doing so will break some tests but this isn't necessarily a breaking change,\n         * more a reflection of the test.\n         */\n        const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {}, this);\n        for (const key in initialMotionValues) {\n            const value = initialMotionValues[key];\n            if (latestValues[key] !== undefined && isMotionValue(value)) {\n                value.set(latestValues[key]);\n            }\n        }\n    }\n    mount(instance) {\n        /**\n         * If this element has been mounted before (e.g. after a Suspense\n         * unmount/remount), reset motion values to their initial state\n         * so animations replay correctly from initial → animate.\n         */\n        if (this.hasBeenMounted) {\n            for (const key in this.initialValues) {\n                this.values.get(key)?.jump(this.initialValues[key]);\n                this.latestValues[key] = this.initialValues[key];\n            }\n        }\n        this.current = instance;\n        visualElementStore.set(instance, this);\n        if (this.projection && !this.projection.instance) {\n            this.projection.mount(instance);\n        }\n        if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n            this.removeFromVariantTree = this.parent.addVariantChild(this);\n        }\n        this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n        /**\n         * Determine reduced motion preference. Only initialize the matchMedia\n         * listener if we actually need the dynamic value (i.e., when config\n         * is neither \"never\" nor \"always\").\n         */\n        if (this.reducedMotionConfig === \"never\") {\n            this.shouldReduceMotion = false;\n        }\n        else if (this.reducedMotionConfig === \"always\") {\n            this.shouldReduceMotion = true;\n        }\n        else {\n            if (!hasReducedMotionListener.current) {\n                initPrefersReducedMotion();\n            }\n            this.shouldReduceMotion = prefersReducedMotion.current;\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\", \"reduced-motion-disabled\");\n        }\n        /**\n         * Set whether animations should be skipped based on the config.\n         */\n        this.shouldSkipAnimations = this.skipAnimationsConfig ?? false;\n        this.parent?.addChild(this);\n        this.update(this.props, this.presenceContext);\n        this.hasBeenMounted = true;\n    }\n    unmount() {\n        this.projection && this.projection.unmount();\n        cancelFrame(this.notifyUpdate);\n        cancelFrame(this.render);\n        this.valueSubscriptions.forEach((remove) => remove());\n        this.valueSubscriptions.clear();\n        this.removeFromVariantTree && this.removeFromVariantTree();\n        this.parent?.removeChild(this);\n        for (const key in this.events) {\n            this.events[key].clear();\n        }\n        for (const key in this.features) {\n            const feature = this.features[key];\n            if (feature) {\n                feature.unmount();\n                feature.isMounted = false;\n            }\n        }\n        this.current = null;\n    }\n    addChild(child) {\n        this.children.add(child);\n        this.enteringChildren ?? (this.enteringChildren = new Set());\n        this.enteringChildren.add(child);\n    }\n    removeChild(child) {\n        this.children.delete(child);\n        this.enteringChildren && this.enteringChildren.delete(child);\n    }\n    bindToMotionValue(key, value) {\n        if (this.valueSubscriptions.has(key)) {\n            this.valueSubscriptions.get(key)();\n        }\n        if (value.accelerate &&\n            acceleratedValues.has(key) &&\n            this.current instanceof HTMLElement) {\n            const { factory, keyframes, times, ease, duration } = value.accelerate;\n            const animation = new NativeAnimation({\n                element: this.current,\n                name: key,\n                keyframes,\n                times,\n                ease,\n                duration: secondsToMilliseconds(duration),\n            });\n            const cleanup = factory(animation);\n            this.valueSubscriptions.set(key, () => {\n                cleanup();\n                animation.cancel();\n            });\n            return;\n        }\n        const valueIsTransform = transformProps.has(key);\n        if (valueIsTransform && this.onBindTransform) {\n            this.onBindTransform();\n        }\n        const removeOnChange = value.on(\"change\", (latestValue) => {\n            this.latestValues[key] = latestValue;\n            this.props.onUpdate && frame.preRender(this.notifyUpdate);\n            if (valueIsTransform && this.projection) {\n                this.projection.isTransformDirty = true;\n            }\n            this.scheduleRender();\n        });\n        let removeSyncCheck;\n        if (typeof window !== \"undefined\" &&\n            window.MotionCheckAppearSync) {\n            removeSyncCheck = window.MotionCheckAppearSync(this, key, value);\n        }\n        this.valueSubscriptions.set(key, () => {\n            removeOnChange();\n            if (removeSyncCheck)\n                removeSyncCheck();\n            if (value.owner)\n                value.stop();\n        });\n    }\n    sortNodePosition(other) {\n        /**\n         * If these nodes aren't even of the same type we can't compare their depth.\n         */\n        if (!this.current ||\n            !this.sortInstanceNodePosition ||\n            this.type !== other.type) {\n            return 0;\n        }\n        return this.sortInstanceNodePosition(this.current, other.current);\n    }\n    updateFeatures() {\n        let key = \"animation\";\n        for (key in featureDefinitions) {\n            const featureDefinition = featureDefinitions[key];\n            if (!featureDefinition)\n                continue;\n            const { isEnabled, Feature: FeatureConstructor } = featureDefinition;\n            /**\n             * If this feature is enabled but not active, make a new instance.\n             */\n            if (!this.features[key] &&\n                FeatureConstructor &&\n                isEnabled(this.props)) {\n                this.features[key] = new FeatureConstructor(this);\n            }\n            /**\n             * If we have a feature, mount or update it.\n             */\n            if (this.features[key]) {\n                const feature = this.features[key];\n                if (feature.isMounted) {\n                    feature.update();\n                }\n                else {\n                    feature.mount();\n                    feature.isMounted = true;\n                }\n            }\n        }\n    }\n    triggerBuild() {\n        this.build(this.renderState, this.latestValues, this.props);\n    }\n    /**\n     * Measure the current viewport box with or without transforms.\n     * Only measures axis-aligned boxes, rotate and skew must be manually\n     * removed with a re-render to work.\n     */\n    measureViewportBox() {\n        return this.current\n            ? this.measureInstanceViewportBox(this.current, this.props)\n            : createBox();\n    }\n    getStaticValue(key) {\n        return this.latestValues[key];\n    }\n    setStaticValue(key, value) {\n        this.latestValues[key] = value;\n    }\n    /**\n     * Update the provided props. Ensure any newly-added motion values are\n     * added to our map, old ones removed, and listeners updated.\n     */\n    update(props, presenceContext) {\n        if (props.transformTemplate || this.props.transformTemplate) {\n            this.scheduleRender();\n        }\n        this.prevProps = this.props;\n        this.props = props;\n        this.prevPresenceContext = this.presenceContext;\n        this.presenceContext = presenceContext;\n        /**\n         * Update prop event handlers ie onAnimationStart, onAnimationComplete\n         */\n        for (let i = 0; i < propEventHandlers.length; i++) {\n            const key = propEventHandlers[i];\n            if (this.propEventSubscriptions[key]) {\n                this.propEventSubscriptions[key]();\n                delete this.propEventSubscriptions[key];\n            }\n            const listenerName = (\"on\" + key);\n            const listener = props[listenerName];\n            if (listener) {\n                this.propEventSubscriptions[key] = this.on(key, listener);\n            }\n        }\n        this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps || {}, this), this.prevMotionValues);\n        if (this.handleChildMotionValue) {\n            this.handleChildMotionValue();\n        }\n    }\n    getProps() {\n        return this.props;\n    }\n    /**\n     * Returns the variant definition with a given name.\n     */\n    getVariant(name) {\n        return this.props.variants ? this.props.variants[name] : undefined;\n    }\n    /**\n     * Returns the defined default transition on this component.\n     */\n    getDefaultTransition() {\n        return this.props.transition;\n    }\n    getTransformPagePoint() {\n        return this.props.transformPagePoint;\n    }\n    getClosestVariantNode() {\n        return this.isVariantNode\n            ? this\n            : this.parent\n                ? this.parent.getClosestVariantNode()\n                : undefined;\n    }\n    /**\n     * Add a child visual element to our set of children.\n     */\n    addVariantChild(child) {\n        const closestVariantNode = this.getClosestVariantNode();\n        if (closestVariantNode) {\n            closestVariantNode.variantChildren &&\n                closestVariantNode.variantChildren.add(child);\n            return () => closestVariantNode.variantChildren.delete(child);\n        }\n    }\n    /**\n     * Add a motion value and bind it to this visual element.\n     */\n    addValue(key, value) {\n        // Remove existing value if it exists\n        const existingValue = this.values.get(key);\n        if (value !== existingValue) {\n            if (existingValue)\n                this.removeValue(key);\n            this.bindToMotionValue(key, value);\n            this.values.set(key, value);\n            this.latestValues[key] = value.get();\n        }\n    }\n    /**\n     * Remove a motion value and unbind any active subscriptions.\n     */\n    removeValue(key) {\n        this.values.delete(key);\n        const unsubscribe = this.valueSubscriptions.get(key);\n        if (unsubscribe) {\n            unsubscribe();\n            this.valueSubscriptions.delete(key);\n        }\n        delete this.latestValues[key];\n        this.removeValueFromRenderState(key, this.renderState);\n    }\n    /**\n     * Check whether we have a motion value for this key\n     */\n    hasValue(key) {\n        return this.values.has(key);\n    }\n    getValue(key, defaultValue) {\n        if (this.props.values && this.props.values[key]) {\n            return this.props.values[key];\n        }\n        let value = this.values.get(key);\n        if (value === undefined && defaultValue !== undefined) {\n            value = motionValue(defaultValue === null ? undefined : defaultValue, { owner: this });\n            this.addValue(key, value);\n        }\n        return value;\n    }\n    /**\n     * If we're trying to animate to a previously unencountered value,\n     * we need to check for it in our state and as a last resort read it\n     * directly from the instance (which might have performance implications).\n     */\n    readValue(key, target) {\n        let value = this.latestValues[key] !== undefined || !this.current\n            ? this.latestValues[key]\n            : this.getBaseTargetFromProps(this.props, key) ??\n                this.readValueFromInstance(this.current, key, this.options);\n        if (value !== undefined && value !== null) {\n            if (typeof value === \"string\" &&\n                (isNumericalString(value) || isZeroValueString(value))) {\n                // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n                value = parseFloat(value);\n            }\n            else if (!findValueType(value) && complex.test(target)) {\n                value = getAnimatableNone(key, target);\n            }\n            this.setBaseTarget(key, isMotionValue(value) ? value.get() : value);\n        }\n        return isMotionValue(value) ? value.get() : value;\n    }\n    /**\n     * Set the base target to later animate back to. This is currently\n     * only hydrated on creation and when we first read a value.\n     */\n    setBaseTarget(key, value) {\n        this.baseTarget[key] = value;\n    }\n    /**\n     * Find the base target for a value thats been removed from all animation\n     * props.\n     */\n    getBaseTarget(key) {\n        const { initial } = this.props;\n        let valueFromInitial;\n        if (typeof initial === \"string\" || typeof initial === \"object\") {\n            const variant = resolveVariantFromProps(this.props, initial, this.presenceContext?.custom);\n            if (variant) {\n                valueFromInitial = variant[key];\n            }\n        }\n        /**\n         * If this value still exists in the current initial variant, read that.\n         */\n        if (initial && valueFromInitial !== undefined) {\n            return valueFromInitial;\n        }\n        /**\n         * Alternatively, if this VisualElement config has defined a getBaseTarget\n         * so we can read the value from an alternative source, try that.\n         */\n        const target = this.getBaseTargetFromProps(this.props, key);\n        if (target !== undefined && !isMotionValue(target))\n            return target;\n        /**\n         * If the value was initially defined on initial, but it doesn't any more,\n         * return undefined. Otherwise return the value as initially read from the DOM.\n         */\n        return this.initialValues[key] !== undefined &&\n            valueFromInitial === undefined\n            ? undefined\n            : this.baseTarget[key];\n    }\n    on(eventName, callback) {\n        if (!this.events[eventName]) {\n            this.events[eventName] = new SubscriptionManager();\n        }\n        return this.events[eventName].add(callback);\n    }\n    notify(eventName, ...args) {\n        if (this.events[eventName]) {\n            this.events[eventName].notify(...args);\n        }\n    }\n    scheduleRenderMicrotask() {\n        microtask.render(this.render);\n    }\n}\n\nexport { VisualElement, getFeatureDefinitions, setFeatureDefinitions };\n//# sourceMappingURL=VisualElement.mjs.map\n","import { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\n/**\n * Updates motion values from props changes.\n * Uses `any` type for element to avoid circular dependencies with VisualElement.\n */\nfunction updateMotionValuesFromProps(element, next, prev) {\n    for (const key in next) {\n        const nextValue = next[key];\n        const prevValue = prev[key];\n        if (isMotionValue(nextValue)) {\n            /**\n             * If this is a motion value found in props or style, we want to add it\n             * to our visual element's motion value map.\n             */\n            element.addValue(key, nextValue);\n        }\n        else if (isMotionValue(prevValue)) {\n            /**\n             * If we're swapping from a motion value to a static value,\n             * create a new motion value from that\n             */\n            element.addValue(key, motionValue(nextValue, { owner: element }));\n        }\n        else if (prevValue !== nextValue) {\n            /**\n             * If this is a flat value that has changed, update the motion value\n             * or create one if it doesn't exist. We only want to do this if we're\n             * not handling the value with our animation state.\n             */\n            if (element.hasValue(key)) {\n                const existingValue = element.getValue(key);\n                if (existingValue.liveStyle === true) {\n                    existingValue.jump(nextValue);\n                }\n                else if (!existingValue.hasAnimated) {\n                    existingValue.set(nextValue);\n                }\n            }\n            else {\n                const latestValue = element.getStaticValue(key);\n                element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n            }\n        }\n    }\n    // Handle removed values\n    for (const key in prev) {\n        if (next[key] === undefined)\n            element.removeValue(key);\n    }\n    return next;\n}\n\nexport { updateMotionValuesFromProps };\n//# sourceMappingURL=motion-values.mjs.map\n","import { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { DOMKeyframesResolver } from '../../animation/keyframes/DOMKeyframesResolver.mjs';\nimport { VisualElement } from '../VisualElement.mjs';\n\nclass DOMVisualElement extends VisualElement {\n    constructor() {\n        super(...arguments);\n        this.KeyframeResolver = DOMKeyframesResolver;\n    }\n    sortInstanceNodePosition(a, b) {\n        /**\n         * compareDocumentPosition returns a bitmask, by using the bitwise &\n         * we're returning true if 2 in that bitmask is set to true. 2 is set\n         * to true if b preceeds a.\n         */\n        return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n    }\n    getBaseTargetFromProps(props, key) {\n        const style = props.style;\n        return style ? style[key] : undefined;\n    }\n    removeValueFromRenderState(key, { vars, style }) {\n        delete vars[key];\n        delete style[key];\n    }\n    handleChildMotionValue() {\n        if (this.childSubscription) {\n            this.childSubscription();\n            delete this.childSubscription;\n        }\n        const { children } = this.props;\n        if (isMotionValue(children)) {\n            this.childSubscription = children.on(\"change\", (latest) => {\n                if (this.current) {\n                    this.current.textContent = `${latest}`;\n                }\n            });\n        }\n    }\n}\n\nexport { DOMVisualElement };\n//# sourceMappingURL=DOMVisualElement.mjs.map\n","/**\n * Feature base class for extending VisualElement functionality.\n * Features are plugins that can be mounted/unmounted to add behavior\n * like gestures, animations, or layout tracking.\n */\nclass Feature {\n    constructor(node) {\n        this.isMounted = false;\n        this.node = node;\n    }\n    update() { }\n}\n\nexport { Feature };\n//# sourceMappingURL=Feature.mjs.map\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n    return {\n        x: { min: left, max: right },\n        y: { min: top, max: bottom },\n    };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n    return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n    if (!transformPoint)\n        return point;\n    const topLeft = transformPoint({ x: point.left, y: point.top });\n    const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n    return {\n        top: topLeft.y,\n        left: topLeft.x,\n        bottom: bottomRight.y,\n        right: bottomRight.x,\n    };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n//# sourceMappingURL=conversion.mjs.map\n","function isIdentityScale(scale) {\n    return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n    return (!isIdentityScale(scale) ||\n        !isIdentityScale(scaleX) ||\n        !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n    return (hasScale(values) ||\n        has2DTranslate(values) ||\n        values.z ||\n        values.rotate ||\n        values.rotateX ||\n        values.rotateY ||\n        values.skewX ||\n        values.skewY);\n}\nfunction has2DTranslate(values) {\n    return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n    return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n//# sourceMappingURL=has-transform.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n    const distanceFromOrigin = point - originPoint;\n    const scaled = scale * distanceFromOrigin;\n    return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n    if (boxScale !== undefined) {\n        point = scalePoint(point, boxScale, originPoint);\n    }\n    return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n    axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n    applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n    applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\nconst TREE_SCALE_SNAP_MIN = 0.999999999999;\nconst TREE_SCALE_SNAP_MAX = 1.0000000000001;\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n    const treeLength = treePath.length;\n    if (!treeLength)\n        return;\n    // Reset the treeScale\n    treeScale.x = treeScale.y = 1;\n    let node;\n    let delta;\n    for (let i = 0; i < treeLength; i++) {\n        node = treePath[i];\n        delta = node.projectionDelta;\n        /**\n         * TODO: Prefer to remove this, but currently we have motion components with\n         * display: contents in Framer.\n         */\n        const { visualElement } = node.options;\n        if (visualElement &&\n            visualElement.props.style &&\n            visualElement.props.style.display === \"contents\") {\n            continue;\n        }\n        if (isSharedTransition &&\n            node.options.layoutScroll &&\n            node.scroll &&\n            node !== node.root) {\n            translateAxis(box.x, -node.scroll.offset.x);\n            translateAxis(box.y, -node.scroll.offset.y);\n        }\n        if (delta) {\n            // Incoporate each ancestor's scale into a cumulative treeScale for this component\n            treeScale.x *= delta.x.scale;\n            treeScale.y *= delta.y.scale;\n            // Apply each ancestor's calculated delta into this component's recorded layout box\n            applyBoxDelta(box, delta);\n        }\n        if (isSharedTransition && hasTransform(node.latestValues)) {\n            transformBox(box, node.latestValues, node.layout?.layoutBox);\n        }\n    }\n    /**\n     * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n     * This will help reduce useless scales getting rendered.\n     */\n    if (treeScale.x < TREE_SCALE_SNAP_MAX &&\n        treeScale.x > TREE_SCALE_SNAP_MIN) {\n        treeScale.x = 1.0;\n    }\n    if (treeScale.y < TREE_SCALE_SNAP_MAX &&\n        treeScale.y > TREE_SCALE_SNAP_MIN) {\n        treeScale.y = 1.0;\n    }\n}\nfunction translateAxis(axis, distance) {\n    axis.min += distance;\n    axis.max += distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {\n    const originPoint = mixNumber(axis.min, axis.max, axisOrigin);\n    // Apply the axis delta to the final axis\n    applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);\n}\nfunction resolveAxisTranslate(value, axis) {\n    if (typeof value === \"string\") {\n        return (parseFloat(value) / 100) * (axis.max - axis.min);\n    }\n    return value;\n}\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform, sourceBox) {\n    const resolveBox = sourceBox ?? box;\n    transformAxis(box.x, resolveAxisTranslate(transform.x, resolveBox.x), transform.scaleX, transform.scale, transform.originX);\n    transformAxis(box.y, resolveAxisTranslate(transform.y, resolveBox.y), transform.scaleY, transform.scale, transform.originY);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n//# sourceMappingURL=delta-apply.mjs.map\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n    return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n    const viewportBox = measureViewportBox(element, transformPagePoint);\n    const { scroll } = rootProjectionNode;\n    if (scroll) {\n        translateAxis(viewportBox.x, scroll.offset.x);\n        translateAxis(viewportBox.y, scroll.offset.y);\n    }\n    return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n//# sourceMappingURL=measure.mjs.map\n","import { getValueAsType } from '../../../value/types/utils/get-as-type.mjs';\nimport { numberValueTypes } from '../../../value/types/maps/number.mjs';\nimport { transformPropOrder } from '../../utils/keys-transform.mjs';\n\nconst translateAlias = {\n    x: \"translateX\",\n    y: \"translateY\",\n    z: \"translateZ\",\n    transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(latestValues, transform, transformTemplate) {\n    // The transform string we're going to build into.\n    let transformString = \"\";\n    let transformIsDefault = true;\n    /**\n     * Loop over all possible transforms in order, adding the ones that\n     * are present to the transform string.\n     */\n    for (let i = 0; i < numTransforms; i++) {\n        const key = transformPropOrder[i];\n        const value = latestValues[key];\n        if (value === undefined)\n            continue;\n        let valueIsDefault = true;\n        if (typeof value === \"number\") {\n            valueIsDefault = value === (key.startsWith(\"scale\") ? 1 : 0);\n        }\n        else {\n            const parsed = parseFloat(value);\n            valueIsDefault = key.startsWith(\"scale\") ? parsed === 1 : parsed === 0;\n        }\n        if (!valueIsDefault || transformTemplate) {\n            const valueAsType = getValueAsType(value, numberValueTypes[key]);\n            if (!valueIsDefault) {\n                transformIsDefault = false;\n                const transformName = translateAlias[key] || key;\n                transformString += `${transformName}(${valueAsType}) `;\n            }\n            if (transformTemplate) {\n                transform[key] = valueAsType;\n            }\n        }\n    }\n    transformString = transformString.trim();\n    // If we have a custom `transform` template, pass our transform values and\n    // generated transformString to that before returning\n    if (transformTemplate) {\n        transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n    }\n    else if (transformIsDefault) {\n        transformString = \"none\";\n    }\n    return transformString;\n}\n\nexport { buildTransform };\n//# sourceMappingURL=build-transform.mjs.map\n","import { getValueAsType } from '../../../value/types/utils/get-as-type.mjs';\nimport { numberValueTypes } from '../../../value/types/maps/number.mjs';\nimport { transformProps } from '../../utils/keys-transform.mjs';\nimport { isCSSVariableName } from '../../../animation/utils/is-css-variable.mjs';\nimport { buildTransform } from './build-transform.mjs';\n\nfunction buildHTMLStyles(state, latestValues, transformTemplate) {\n    const { style, vars, transformOrigin } = state;\n    // Track whether we encounter any transform or transformOrigin values.\n    let hasTransform = false;\n    let hasTransformOrigin = false;\n    /**\n     * Loop over all our latest animated values and decide whether to handle them\n     * as a style or CSS variable.\n     *\n     * Transforms and transform origins are kept separately for further processing.\n     */\n    for (const key in latestValues) {\n        const value = latestValues[key];\n        if (transformProps.has(key)) {\n            // If this is a transform, flag to enable further transform processing\n            hasTransform = true;\n            continue;\n        }\n        else if (isCSSVariableName(key)) {\n            vars[key] = value;\n            continue;\n        }\n        else {\n            // Convert the value to its default value type, ie 0 -> \"0px\"\n            const valueAsType = getValueAsType(value, numberValueTypes[key]);\n            if (key.startsWith(\"origin\")) {\n                // If this is a transform origin, flag and enable further transform-origin processing\n                hasTransformOrigin = true;\n                transformOrigin[key] =\n                    valueAsType;\n            }\n            else {\n                style[key] = valueAsType;\n            }\n        }\n    }\n    if (!latestValues.transform) {\n        if (hasTransform || transformTemplate) {\n            style.transform = buildTransform(latestValues, state.transform, transformTemplate);\n        }\n        else if (style.transform) {\n            /**\n             * If we have previously created a transform but currently don't have any,\n             * reset transform style to none.\n             */\n            style.transform = \"none\";\n        }\n    }\n    /**\n     * Build a transformOrigin style. Uses the same defaults as the browser for\n     * undefined origins.\n     */\n    if (hasTransformOrigin) {\n        const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n        style.transformOrigin = `${originX} ${originY} ${originZ}`;\n    }\n}\n\nexport { buildHTMLStyles };\n//# sourceMappingURL=build-styles.mjs.map\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n    const elementStyle = element.style;\n    let key;\n    for (key in style) {\n        // CSSStyleDeclaration has [index: number]: string; in the types, so we use that as key type.\n        elementStyle[key] = style[key];\n    }\n    // Write projection styles directly to element style\n    projection?.applyProjectionStyles(elementStyle, styleProp);\n    for (key in vars) {\n        // Loop over any CSS variables and assign those.\n        // They can only be assigned using `setProperty`.\n        elementStyle.setProperty(key, vars[key]);\n    }\n}\n\nexport { renderHTML };\n//# sourceMappingURL=render.mjs.map\n","import { px } from '../../value/types/numbers/units.mjs';\n\nfunction pixelsToPercent(pixels, axis) {\n    if (axis.max === axis.min)\n        return 0;\n    return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n    correct: (latest, node) => {\n        if (!node.target)\n            return latest;\n        /**\n         * If latest is a string, if it's a percentage we can return immediately as it's\n         * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n         */\n        if (typeof latest === \"string\") {\n            if (px.test(latest)) {\n                latest = parseFloat(latest);\n            }\n            else {\n                return latest;\n            }\n        }\n        /**\n         * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n         * pixel value as a percentage of each axis\n         */\n        const x = pixelsToPercent(latest, node.target.x);\n        const y = pixelsToPercent(latest, node.target.y);\n        return `${x}% ${y}%`;\n    },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n//# sourceMappingURL=scale-border-radius.mjs.map\n","import { complex } from '../../value/types/complex/index.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\n\nconst correctBoxShadow = {\n    correct: (latest, { treeScale, projectionDelta }) => {\n        const original = latest;\n        const shadow = complex.parse(latest);\n        // TODO: Doesn't support multiple shadows\n        if (shadow.length > 5)\n            return original;\n        const template = complex.createTransformer(latest);\n        const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n        // Calculate the overall context scale\n        const xScale = projectionDelta.x.scale * treeScale.x;\n        const yScale = projectionDelta.y.scale * treeScale.y;\n        shadow[0 + offset] /= xScale;\n        shadow[1 + offset] /= yScale;\n        /**\n         * Ideally we'd correct x and y scales individually, but because blur and\n         * spread apply to both we have to take a scale average and apply that instead.\n         * We could potentially improve the outcome of this by incorporating the ratio between\n         * the two scales.\n         */\n        const averageScale = mixNumber(xScale, yScale, 0.5);\n        // Blur\n        if (typeof shadow[2 + offset] === \"number\")\n            shadow[2 + offset] /= averageScale;\n        // Spread\n        if (typeof shadow[3 + offset] === \"number\")\n            shadow[3 + offset] /= averageScale;\n        return template(shadow);\n    },\n};\n\nexport { correctBoxShadow };\n//# sourceMappingURL=scale-box-shadow.mjs.map\n","import { isCSSVariableName } from '../../animation/utils/is-css-variable.mjs';\nimport { correctBorderRadius } from './scale-border-radius.mjs';\nimport { correctBoxShadow } from './scale-box-shadow.mjs';\n\nconst scaleCorrectors = {\n    borderRadius: {\n        ...correctBorderRadius,\n        applyTo: [\n            \"borderTopLeftRadius\",\n            \"borderTopRightRadius\",\n            \"borderBottomLeftRadius\",\n            \"borderBottomRightRadius\",\n        ],\n    },\n    borderTopLeftRadius: correctBorderRadius,\n    borderTopRightRadius: correctBorderRadius,\n    borderBottomLeftRadius: correctBorderRadius,\n    borderBottomRightRadius: correctBorderRadius,\n    boxShadow: correctBoxShadow,\n};\nfunction addScaleCorrector(correctors) {\n    for (const key in correctors) {\n        scaleCorrectors[key] = correctors[key];\n        if (isCSSVariableName(key)) {\n            scaleCorrectors[key].isCSSVariable = true;\n        }\n    }\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n//# sourceMappingURL=scale-correction.mjs.map\n","import { transformProps } from './keys-transform.mjs';\nimport { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nexport { addScaleCorrector } from '../../projection/styles/scale-correction.mjs';\n\nfunction isForcedMotionValue(key, { layout, layoutId }) {\n    return (transformProps.has(key) ||\n        key.startsWith(\"origin\") ||\n        ((layout || layoutId !== undefined) &&\n            (!!scaleCorrectors[key] || key === \"opacity\")));\n}\n\nexport { isForcedMotionValue, scaleCorrectors };\n//# sourceMappingURL=is-forced-motion-value.mjs.map\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { isForcedMotionValue } from '../../utils/is-forced-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n    const style = props.style;\n    const prevStyle = prevProps?.style;\n    const newValues = {};\n    if (!style)\n        return newValues;\n    for (const key in style) {\n        if (isMotionValue(style[key]) ||\n            (prevStyle && isMotionValue(prevStyle[key])) ||\n            isForcedMotionValue(key, props) ||\n            visualElement?.getValue(key)?.liveStyle !== undefined) {\n            newValues[key] = style[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n//# sourceMappingURL=scrape-motion-values.mjs.map\n","import { isCSSVariableName } from '../../animation/utils/is-css-variable.mjs';\nimport { transformProps } from '../utils/keys-transform.mjs';\nimport { defaultTransformValue, readTransformValue } from '../dom/parse-transform.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nfunction getComputedStyle(element) {\n    return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.type = \"html\";\n        this.renderInstance = renderHTML;\n    }\n    readValueFromInstance(instance, key) {\n        if (transformProps.has(key)) {\n            return this.projection?.isProjecting\n                ? defaultTransformValue(key)\n                : readTransformValue(instance, key);\n        }\n        else {\n            const computedStyle = getComputedStyle(instance);\n            const value = (isCSSVariableName(key)\n                ? computedStyle.getPropertyValue(key)\n                : computedStyle[key]) || 0;\n            return typeof value === \"string\" ? value.trim() : value;\n        }\n    }\n    measureInstanceViewportBox(instance, { transformPagePoint }) {\n        return measureViewportBox(instance, transformPagePoint);\n    }\n    build(renderState, latestValues, props) {\n        buildHTMLStyles(renderState, latestValues, props.transformTemplate);\n    }\n    scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n        return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n    }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n//# sourceMappingURL=HTMLVisualElement.mjs.map\n","const dashKeys = {\n    offset: \"stroke-dashoffset\",\n    array: \"stroke-dasharray\",\n};\nconst camelKeys = {\n    offset: \"strokeDashoffset\",\n    array: \"strokeDasharray\",\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n *\n * Note: We use unitless values for stroke-dasharray and stroke-dashoffset\n * because Safari incorrectly scales px values when the page is zoomed.\n */\nfunction buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {\n    // Normalise path length by setting SVG attribute pathLength to 1\n    attrs.pathLength = 1;\n    // We use dash case when setting attributes directly to the DOM node and camel case\n    // when defining props on a React component.\n    const keys = useDashCase ? dashKeys : camelKeys;\n    // Build the dash offset (unitless to avoid Safari zoom bug)\n    attrs[keys.offset] = `${-offset}`;\n    // Build the dash array (unitless to avoid Safari zoom bug)\n    attrs[keys.array] = `${length} ${spacing}`;\n}\n\nexport { buildSVGPath };\n//# sourceMappingURL=path.mjs.map\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { buildSVGPath } from './path.mjs';\n\n/**\n * CSS Motion Path properties that should remain as CSS styles on SVG elements.\n */\nconst cssMotionPathProperties = [\n    \"offsetDistance\",\n    \"offsetPath\",\n    \"offsetRotate\",\n    \"offsetAnchor\",\n];\n/**\n * Build SVG visual attributes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, isSVGTag, transformTemplate, styleProp) {\n    buildHTMLStyles(state, latest, transformTemplate);\n    /**\n     * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n     * as normal HTML tags.\n     */\n    if (isSVGTag) {\n        if (state.style.viewBox) {\n            state.attrs.viewBox = state.style.viewBox;\n        }\n        return;\n    }\n    state.attrs = state.style;\n    state.style = {};\n    const { attrs, style } = state;\n    /**\n     * However, we apply transforms as CSS transforms.\n     * So if we detect a transform, transformOrigin we take it from attrs and copy it into style.\n     */\n    if (attrs.transform) {\n        style.transform = attrs.transform;\n        delete attrs.transform;\n    }\n    if (style.transform || attrs.transformOrigin) {\n        style.transformOrigin = attrs.transformOrigin ?? \"50% 50%\";\n        delete attrs.transformOrigin;\n    }\n    if (style.transform) {\n        /**\n         * SVG's element transform-origin uses its own median as a reference.\n         * Therefore, transformBox becomes a fill-box\n         */\n        style.transformBox = styleProp?.transformBox ?? \"fill-box\";\n        delete attrs.transformBox;\n    }\n    for (const key of cssMotionPathProperties) {\n        if (attrs[key] !== undefined) {\n            style[key] = attrs[key];\n            delete attrs[key];\n        }\n    }\n    // Render attrX/attrY/attrScale as attributes\n    if (attrX !== undefined)\n        attrs.x = attrX;\n    if (attrY !== undefined)\n        attrs.y = attrY;\n    if (attrScale !== undefined)\n        attrs.scale = attrScale;\n    // Build SVG path if one has been defined\n    if (pathLength !== undefined) {\n        buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n    }\n}\n\nexport { buildSVGAttrs };\n//# sourceMappingURL=build-attrs.mjs.map\n","/**\n * A set of attribute names that are always read/written as camel case.\n */\nconst camelCaseAttributes = new Set([\n    \"baseFrequency\",\n    \"diffuseConstant\",\n    \"kernelMatrix\",\n    \"kernelUnitLength\",\n    \"keySplines\",\n    \"keyTimes\",\n    \"limitingConeAngle\",\n    \"markerHeight\",\n    \"markerWidth\",\n    \"numOctaves\",\n    \"targetX\",\n    \"targetY\",\n    \"surfaceScale\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"stdDeviation\",\n    \"tableValues\",\n    \"viewBox\",\n    \"gradientTransform\",\n    \"pathLength\",\n    \"startOffset\",\n    \"textLength\",\n    \"lengthAdjust\",\n]);\n\nexport { camelCaseAttributes };\n//# sourceMappingURL=camel-case-attrs.mjs.map\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n//# sourceMappingURL=is-svg-tag.mjs.map\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { transformPropOrder } from '../../utils/keys-transform.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n    const newValues = scrapeMotionValuesFromProps$1(props, prevProps, visualElement);\n    for (const key in props) {\n        if (isMotionValue(props[key]) ||\n            isMotionValue(prevProps[key])) {\n            const targetKey = transformPropOrder.indexOf(key) !== -1\n                ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n                : key;\n            newValues[targetKey] = props[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n//# sourceMappingURL=scrape-motion-values.mjs.map\n","import { transformProps } from '../utils/keys-transform.mjs';\nimport { getDefaultValueType } from '../../value/types/maps/defaults.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.type = \"svg\";\n        this.isSVGTag = false;\n        this.measureInstanceViewportBox = createBox;\n    }\n    getBaseTargetFromProps(props, key) {\n        return props[key];\n    }\n    readValueFromInstance(instance, key) {\n        if (transformProps.has(key)) {\n            const defaultType = getDefaultValueType(key);\n            return defaultType ? defaultType.default || 0 : 0;\n        }\n        key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n        return instance.getAttribute(key);\n    }\n    scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n        return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n    }\n    build(renderState, latestValues, props) {\n        buildSVGAttrs(renderState, latestValues, this.isSVGTag, props.transformTemplate, props.style);\n    }\n    renderInstance(instance, renderState, styleProp, projection) {\n        renderSVG(instance, renderState, styleProp, projection);\n    }\n    mount(instance) {\n        this.isSVGTag = isSVGTag(instance.tagName);\n        super.mount(instance);\n    }\n}\n\nexport { SVGVisualElement };\n//# sourceMappingURL=SVGVisualElement.mjs.map\n","import { camelToDash } from '../../dom/utils/camel-to-dash.mjs';\nimport { renderHTML } from '../../html/utils/render.mjs';\nimport { camelCaseAttributes } from './camel-case-attrs.mjs';\n\nfunction renderSVG(element, renderState, _styleProp, projection) {\n    renderHTML(element, renderState, undefined, projection);\n    for (const key in renderState.attrs) {\n        element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]);\n    }\n}\n\nexport { renderSVG };\n//# sourceMappingURL=render.mjs.map\n","import { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nconst numVariantProps = variantProps.length;\n/**\n * Get variant context from a visual element's parent chain.\n * Uses `any` type for visualElement to avoid circular dependencies.\n */\nfunction getVariantContext(visualElement) {\n    if (!visualElement)\n        return undefined;\n    if (!visualElement.isControllingVariants) {\n        const context = visualElement.parent\n            ? getVariantContext(visualElement.parent) || {}\n            : {};\n        if (visualElement.props.initial !== undefined) {\n            context.initial = visualElement.props.initial;\n        }\n        return context;\n    }\n    const context = {};\n    for (let i = 0; i < numVariantProps; i++) {\n        const name = variantProps[i];\n        const prop = visualElement.props[name];\n        if (isVariantLabel(prop) || prop === false) {\n            context[name] = prop;\n        }\n    }\n    return context;\n}\n\nexport { getVariantContext };\n//# sourceMappingURL=get-variant-context.mjs.map\n","function shallowCompare(next, prev) {\n    if (!Array.isArray(prev))\n        return false;\n    const prevLength = prev.length;\n    if (prevLength !== next.length)\n        return false;\n    for (let i = 0; i < prevLength; i++) {\n        if (prev[i] !== next[i])\n            return false;\n    }\n    return true;\n}\n\nexport { shallowCompare };\n//# sourceMappingURL=shallow-compare.mjs.map\n","import { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\nimport { calcChildStagger } from '../../animation/utils/calc-child-stagger.mjs';\nimport { getVariantContext } from './get-variant-context.mjs';\nimport { isAnimationControls } from './is-animation-controls.mjs';\nimport { isKeyframesTarget } from './is-keyframes-target.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { shallowCompare } from './shallow-compare.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction createAnimateFunction(visualElement) {\n    return (animations) => {\n        return Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n    };\n}\nfunction createAnimationState(visualElement) {\n    let animate = createAnimateFunction(visualElement);\n    let state = createState();\n    let isInitialRender = true;\n    /**\n     * Track whether the animation state has been reset (e.g. via StrictMode\n     * double-invocation or Suspense unmount/remount). On the first\n     * animateChanges() call after a reset we need to behave like the initial\n     * render for variant-inheritance checks, even though isInitialRender is\n     * already false.\n     */\n    let wasReset = false;\n    /**\n     * This function will be used to reduce the animation definitions for\n     * each active animation type into an object of resolved values for it.\n     */\n    const buildResolvedTypeValues = (type) => (acc, definition) => {\n        const resolved = resolveVariant(visualElement, definition, type === \"exit\"\n            ? visualElement.presenceContext?.custom\n            : undefined);\n        if (resolved) {\n            const { transition, transitionEnd, ...target } = resolved;\n            acc = { ...acc, ...target, ...transitionEnd };\n        }\n        return acc;\n    };\n    /**\n     * This just allows us to inject mocked animation functions\n     * @internal\n     */\n    function setAnimateFunction(makeAnimator) {\n        animate = makeAnimator(visualElement);\n    }\n    /**\n     * When we receive new props, we need to:\n     * 1. Create a list of protected keys for each type. This is a directory of\n     *    value keys that are currently being \"handled\" by types of a higher priority\n     *    so that whenever an animation is played of a given type, these values are\n     *    protected from being animated.\n     * 2. Determine if an animation type needs animating.\n     * 3. Determine if any values have been removed from a type and figure out\n     *    what to animate those to.\n     */\n    function animateChanges(changedActiveType) {\n        const { props } = visualElement;\n        const context = getVariantContext(visualElement.parent) || {};\n        /**\n         * A list of animations that we'll build into as we iterate through the animation\n         * types. This will get executed at the end of the function.\n         */\n        const animations = [];\n        /**\n         * Keep track of which values have been removed. Then, as we hit lower priority\n         * animation types, we can check if they contain removed values and animate to that.\n         */\n        const removedKeys = new Set();\n        /**\n         * A dictionary of all encountered keys. This is an object to let us build into and\n         * copy it without iteration. Each time we hit an animation type we set its protected\n         * keys - the keys its not allowed to animate - to the latest version of this object.\n         */\n        let encounteredKeys = {};\n        /**\n         * If a variant has been removed at a given index, and this component is controlling\n         * variant animations, we want to ensure lower-priority variants are forced to animate.\n         */\n        let removedVariantIndex = Infinity;\n        /**\n         * Iterate through all animation types in reverse priority order. For each, we want to\n         * detect which values it's handling and whether or not they've changed (and therefore\n         * need to be animated). If any values have been removed, we want to detect those in\n         * lower priority props and flag for animation.\n         */\n        for (let i = 0; i < numAnimationTypes; i++) {\n            const type = reversePriorityOrder[i];\n            const typeState = state[type];\n            const prop = props[type] !== undefined\n                ? props[type]\n                : context[type];\n            const propIsVariant = isVariantLabel(prop);\n            /**\n             * If this type has *just* changed isActive status, set activeDelta\n             * to that status. Otherwise set to null.\n             */\n            const activeDelta = type === changedActiveType ? typeState.isActive : null;\n            if (activeDelta === false)\n                removedVariantIndex = i;\n            /**\n             * If this prop is an inherited variant, rather than been set directly on the\n             * component itself, we want to make sure we allow the parent to trigger animations.\n             *\n             * TODO: Can probably change this to a !isControllingVariants check\n             */\n            let isInherited = prop === context[type] &&\n                prop !== props[type] &&\n                propIsVariant;\n            if (isInherited &&\n                (isInitialRender || wasReset) &&\n                visualElement.manuallyAnimateOnMount) {\n                isInherited = false;\n            }\n            /**\n             * Set all encountered keys so far as the protected keys for this type. This will\n             * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n             */\n            typeState.protectedKeys = { ...encounteredKeys };\n            // Check if we can skip analysing this prop early\n            if (\n            // If it isn't active and hasn't *just* been set as inactive\n            (!typeState.isActive && activeDelta === null) ||\n                // If we didn't and don't have any defined prop for this animation type\n                (!prop && !typeState.prevProp) ||\n                // Or if the prop doesn't define an animation\n                isAnimationControls(prop) ||\n                typeof prop === \"boolean\") {\n                continue;\n            }\n            /**\n             * If exit is already active and wasn't just activated, skip\n             * re-processing to prevent interrupting running exit animations.\n             * Re-resolving exit with a changed custom value can start new\n             * value animations that stop the originals, leaving the exit\n             * animation promise unresolved and the component stuck in the DOM.\n             */\n            if (type === \"exit\" && typeState.isActive && activeDelta !== true) {\n                if (typeState.prevResolvedValues) {\n                    encounteredKeys = {\n                        ...encounteredKeys,\n                        ...typeState.prevResolvedValues,\n                    };\n                }\n                continue;\n            }\n            /**\n             * As we go look through the values defined on this type, if we detect\n             * a changed value or a value that was removed in a higher priority, we set\n             * this to true and add this prop to the animation list.\n             */\n            const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n            let shouldAnimateType = variantDidChange ||\n                // If we're making this variant active, we want to always make it active\n                (type === changedActiveType &&\n                    typeState.isActive &&\n                    !isInherited &&\n                    propIsVariant) ||\n                // If we removed a higher-priority variant (i is in reverse order)\n                (i > removedVariantIndex && propIsVariant);\n            let handledRemovedValues = false;\n            /**\n             * As animations can be set as variant lists, variants or target objects, we\n             * coerce everything to an array if it isn't one already\n             */\n            const definitionList = Array.isArray(prop) ? prop : [prop];\n            /**\n             * Build an object of all the resolved values. We'll use this in the subsequent\n             * animateChanges calls to determine whether a value has changed.\n             */\n            let resolvedValues = definitionList.reduce(buildResolvedTypeValues(type), {});\n            if (activeDelta === false)\n                resolvedValues = {};\n            /**\n             * Now we need to loop through all the keys in the prev prop and this prop,\n             * and decide:\n             * 1. If the value has changed, and needs animating\n             * 2. If it has been removed, and needs adding to the removedKeys set\n             * 3. If it has been removed in a higher priority type and needs animating\n             * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n             *    needs adding to the type's protectedKeys list.\n             */\n            const { prevResolvedValues = {} } = typeState;\n            const allKeys = {\n                ...prevResolvedValues,\n                ...resolvedValues,\n            };\n            const markToAnimate = (key) => {\n                shouldAnimateType = true;\n                if (removedKeys.has(key)) {\n                    handledRemovedValues = true;\n                    removedKeys.delete(key);\n                }\n                typeState.needsAnimating[key] = true;\n                const motionValue = visualElement.getValue(key);\n                if (motionValue)\n                    motionValue.liveStyle = false;\n            };\n            for (const key in allKeys) {\n                const next = resolvedValues[key];\n                const prev = prevResolvedValues[key];\n                // If we've already handled this we can just skip ahead\n                if (encounteredKeys.hasOwnProperty(key))\n                    continue;\n                /**\n                 * If the value has changed, we probably want to animate it.\n                 */\n                let valueHasChanged = false;\n                if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n                    valueHasChanged = !shallowCompare(next, prev);\n                }\n                else {\n                    valueHasChanged = next !== prev;\n                }\n                if (valueHasChanged) {\n                    if (next !== undefined && next !== null) {\n                        // If next is defined and doesn't equal prev, it needs animating\n                        markToAnimate(key);\n                    }\n                    else {\n                        // If it's undefined, it's been removed.\n                        removedKeys.add(key);\n                    }\n                }\n                else if (next !== undefined && removedKeys.has(key)) {\n                    /**\n                     * If next hasn't changed and it isn't undefined, we want to check if it's\n                     * been removed by a higher priority\n                     */\n                    markToAnimate(key);\n                }\n                else {\n                    /**\n                     * If it hasn't changed, we add it to the list of protected values\n                     * to ensure it doesn't get animated.\n                     */\n                    typeState.protectedKeys[key] = true;\n                }\n            }\n            /**\n             * Update the typeState so next time animateChanges is called we can compare the\n             * latest prop and resolvedValues to these.\n             */\n            typeState.prevProp = prop;\n            typeState.prevResolvedValues = resolvedValues;\n            if (typeState.isActive) {\n                encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n            }\n            if ((isInitialRender || wasReset) &&\n                visualElement.blockInitialAnimation) {\n                shouldAnimateType = false;\n            }\n            /**\n             * If this is an inherited prop we want to skip this animation\n             * unless the inherited variants haven't changed on this render.\n             */\n            const willAnimateViaParent = isInherited && variantDidChange;\n            const needsAnimating = !willAnimateViaParent || handledRemovedValues;\n            if (shouldAnimateType && needsAnimating) {\n                animations.push(...definitionList.map((animation) => {\n                    const options = { type };\n                    /**\n                     * If we're performing the initial animation, but we're not\n                     * rendering at the same time as the variant-controlling parent,\n                     * we want to use the parent's transition to calculate the stagger.\n                     */\n                    if (typeof animation === \"string\" &&\n                        (isInitialRender || wasReset) &&\n                        !willAnimateViaParent &&\n                        visualElement.manuallyAnimateOnMount &&\n                        visualElement.parent) {\n                        const { parent } = visualElement;\n                        const parentVariant = resolveVariant(parent, animation);\n                        if (parent.enteringChildren && parentVariant) {\n                            const { delayChildren } = parentVariant.transition || {};\n                            options.delay = calcChildStagger(parent.enteringChildren, visualElement, delayChildren);\n                        }\n                    }\n                    return {\n                        animation: animation,\n                        options,\n                    };\n                }));\n            }\n        }\n        /**\n         * If there are some removed value that haven't been dealt with,\n         * we need to create a new animation that falls back either to the value\n         * defined in the style prop, or the last read value.\n         */\n        if (removedKeys.size) {\n            const fallbackAnimation = {};\n            /**\n             * If the initial prop contains a transition we can use that, otherwise\n             * allow the animation function to use the visual element's default.\n             */\n            if (typeof props.initial !== \"boolean\") {\n                const initialTransition = resolveVariant(visualElement, Array.isArray(props.initial)\n                    ? props.initial[0]\n                    : props.initial);\n                if (initialTransition && initialTransition.transition) {\n                    fallbackAnimation.transition = initialTransition.transition;\n                }\n            }\n            removedKeys.forEach((key) => {\n                const fallbackTarget = visualElement.getBaseTarget(key);\n                const motionValue = visualElement.getValue(key);\n                if (motionValue)\n                    motionValue.liveStyle = true;\n                // @ts-expect-error - @mattgperry to figure if we should do something here\n                fallbackAnimation[key] = fallbackTarget ?? null;\n            });\n            animations.push({ animation: fallbackAnimation });\n        }\n        let shouldAnimate = Boolean(animations.length);\n        if (isInitialRender &&\n            (props.initial === false || props.initial === props.animate) &&\n            !visualElement.manuallyAnimateOnMount) {\n            shouldAnimate = false;\n        }\n        isInitialRender = false;\n        wasReset = false;\n        return shouldAnimate ? animate(animations) : Promise.resolve();\n    }\n    /**\n     * Change whether a certain animation type is active.\n     */\n    function setActive(type, isActive) {\n        // If the active state hasn't changed, we can safely do nothing here\n        if (state[type].isActive === isActive)\n            return Promise.resolve();\n        // Propagate active change to children\n        visualElement.variantChildren?.forEach((child) => child.animationState?.setActive(type, isActive));\n        state[type].isActive = isActive;\n        const animations = animateChanges(type);\n        for (const key in state) {\n            state[key].protectedKeys = {};\n        }\n        return animations;\n    }\n    return {\n        animateChanges,\n        setActive,\n        setAnimateFunction,\n        getState: () => state,\n        reset: () => {\n            state = createState();\n            wasReset = true;\n        },\n    };\n}\nfunction checkVariantsDidChange(prev, next) {\n    if (typeof next === \"string\") {\n        return next !== prev;\n    }\n    else if (Array.isArray(next)) {\n        return !shallowCompare(next, prev);\n    }\n    return false;\n}\nfunction createTypeState(isActive = false) {\n    return {\n        isActive,\n        protectedKeys: {},\n        needsAnimating: {},\n        prevResolvedValues: {},\n    };\n}\nfunction createState() {\n    return {\n        animate: createTypeState(true),\n        whileInView: createTypeState(),\n        whileHover: createTypeState(),\n        whileTap: createTypeState(),\n        whileDrag: createTypeState(),\n        whileFocus: createTypeState(),\n        exit: createTypeState(),\n    };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n//# sourceMappingURL=animation-state.mjs.map\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n    visualElement.notify(\"AnimationStart\", definition);\n    let animation;\n    if (Array.isArray(definition)) {\n        const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n        animation = Promise.all(animations);\n    }\n    else if (typeof definition === \"string\") {\n        animation = animateVariant(visualElement, definition, options);\n    }\n    else {\n        const resolvedDefinition = typeof definition === \"function\"\n            ? resolveVariant(visualElement, definition, options.custom)\n            : definition;\n        animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n    }\n    return animation.then(() => {\n        visualElement.notify(\"AnimationComplete\", definition);\n    });\n}\n\nexport { animateVisualElement };\n//# sourceMappingURL=visual-element.mjs.map\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n    axis.min = originAxis.min;\n    axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n    copyAxisInto(box.x, originBox.x);\n    copyAxisInto(box.y, originBox.y);\n}\n/**\n * Reset a delta to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisDeltaInto(delta, originDelta) {\n    delta.translate = originDelta.translate;\n    delta.scale = originDelta.scale;\n    delta.originPoint = originDelta.originPoint;\n    delta.origin = originDelta.origin;\n}\n\nexport { copyAxisDeltaInto, copyAxisInto, copyBoxInto };\n//# sourceMappingURL=copy.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\n\nconst SCALE_PRECISION = 0.0001;\nconst SCALE_MIN = 1 - SCALE_PRECISION;\nconst SCALE_MAX = 1 + SCALE_PRECISION;\nconst TRANSLATE_PRECISION = 0.01;\nconst TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;\nconst TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;\nfunction calcLength(axis) {\n    return axis.max - axis.min;\n}\nfunction isNear(value, target, maxDistance) {\n    return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n    delta.origin = origin;\n    delta.originPoint = mixNumber(source.min, source.max, delta.origin);\n    delta.scale = calcLength(target) / calcLength(source);\n    delta.translate =\n        mixNumber(target.min, target.max, delta.origin) - delta.originPoint;\n    if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||\n        isNaN(delta.scale)) {\n        delta.scale = 1.0;\n    }\n    if ((delta.translate >= TRANSLATE_MIN &&\n        delta.translate <= TRANSLATE_MAX) ||\n        isNaN(delta.translate)) {\n        delta.translate = 0.0;\n    }\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n    calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n    calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent, anchor = 0) {\n    const anchorPoint = anchor\n        ? mixNumber(parent.min, parent.max, anchor)\n        : parent.min;\n    target.min = anchorPoint + relative.min;\n    target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent, anchor) {\n    calcRelativeAxis(target.x, relative.x, parent.x, anchor?.x);\n    calcRelativeAxis(target.y, relative.y, parent.y, anchor?.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent, anchor = 0) {\n    const anchorPoint = anchor\n        ? mixNumber(parent.min, parent.max, anchor)\n        : parent.min;\n    target.min = layout.min - anchorPoint;\n    target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent, anchor) {\n    calcRelativeAxisPosition(target.x, layout.x, parent.x, anchor?.x);\n    calcRelativeAxisPosition(target.y, layout.y, parent.y, anchor?.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n//# sourceMappingURL=delta-calc.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n    point -= translate;\n    point = scalePoint(point, 1 / scale, originPoint);\n    if (boxScale !== undefined) {\n        point = scalePoint(point, 1 / boxScale, originPoint);\n    }\n    return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n    if (percent.test(translate)) {\n        translate = parseFloat(translate);\n        const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);\n        translate = relativeProgress - sourceAxis.min;\n    }\n    if (typeof translate !== \"number\")\n        return;\n    let originPoint = mixNumber(originAxis.min, originAxis.max, origin);\n    if (axis === originAxis)\n        originPoint -= translate;\n    axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n    removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n    removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n    removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n//# sourceMappingURL=delta-remove.mjs.map\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n    return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n    return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction axisEquals(a, b) {\n    return a.min === b.min && a.max === b.max;\n}\nfunction boxEquals(a, b) {\n    return axisEquals(a.x, b.x) && axisEquals(a.y, b.y);\n}\nfunction axisEqualsRounded(a, b) {\n    return (Math.round(a.min) === Math.round(b.min) &&\n        Math.round(a.max) === Math.round(b.max));\n}\nfunction boxEqualsRounded(a, b) {\n    return axisEqualsRounded(a.x, b.x) && axisEqualsRounded(a.y, b.y);\n}\nfunction aspectRatio(box) {\n    return calcLength(box.x) / calcLength(box.y);\n}\nfunction axisDeltaEquals(a, b) {\n    return (a.translate === b.translate &&\n        a.scale === b.scale &&\n        a.originPoint === b.originPoint);\n}\n\nexport { aspectRatio, axisDeltaEquals, axisEquals, axisEqualsRounded, boxEquals, boxEqualsRounded, isDeltaZero };\n//# sourceMappingURL=utils.mjs.map\n","function eachAxis(callback) {\n    return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n//# sourceMappingURL=each-axis.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\nimport { progress, circOut, noop } from 'motion-utils';\n\nconst borderLabels = [\n    \"borderTopLeftRadius\",\n    \"borderTopRightRadius\",\n    \"borderBottomLeftRadius\",\n    \"borderBottomRightRadius\",\n];\nconst numBorders = borderLabels.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n    if (shouldCrossfadeOpacity) {\n        target.opacity = mixNumber(0, lead.opacity ?? 1, easeCrossfadeIn(progress));\n        target.opacityExit = mixNumber(follow.opacity ?? 1, 0, easeCrossfadeOut(progress));\n    }\n    else if (isOnlyMember) {\n        target.opacity = mixNumber(follow.opacity ?? 1, lead.opacity ?? 1, progress);\n    }\n    /**\n     * Mix border radius\n     */\n    for (let i = 0; i < numBorders; i++) {\n        const borderLabel = borderLabels[i];\n        let followRadius = getRadius(follow, borderLabel);\n        let leadRadius = getRadius(lead, borderLabel);\n        if (followRadius === undefined && leadRadius === undefined)\n            continue;\n        followRadius || (followRadius = 0);\n        leadRadius || (leadRadius = 0);\n        const canMix = followRadius === 0 ||\n            leadRadius === 0 ||\n            isPx(followRadius) === isPx(leadRadius);\n        if (canMix) {\n            target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n            if (percent.test(leadRadius) || percent.test(followRadius)) {\n                target[borderLabel] += \"%\";\n            }\n        }\n        else {\n            target[borderLabel] = leadRadius;\n        }\n    }\n    /**\n     * Mix rotation\n     */\n    if (follow.rotate || lead.rotate) {\n        target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);\n    }\n}\nfunction getRadius(values, radiusName) {\n    return values[radiusName] !== undefined\n        ? values[radiusName]\n        : values.borderRadius;\n}\nconst easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);\nconst easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n    return (p) => {\n        // Could replace ifs with clamp\n        if (p < min)\n            return 0;\n        if (p > max)\n            return 1;\n        return easing(progress(min, max, p));\n    };\n}\n\nexport { mixValues };\n//# sourceMappingURL=mix-values.mjs.map\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n    target.addEventListener(eventName, handler, options);\n    return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n//# sourceMappingURL=add-dom-event.mjs.map\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n//# sourceMappingURL=compare-by-depth.mjs.map\n","import { addUniqueItem, removeItem } from 'motion-utils';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n    constructor() {\n        this.children = [];\n        this.isDirty = false;\n    }\n    add(child) {\n        addUniqueItem(this.children, child);\n        this.isDirty = true;\n    }\n    remove(child) {\n        removeItem(this.children, child);\n        this.isDirty = true;\n    }\n    forEach(callback) {\n        this.isDirty && this.children.sort(compareByDepth);\n        this.isDirty = false;\n        this.children.forEach(callback);\n    }\n}\n\nexport { FlatTree };\n//# sourceMappingURL=flat-tree.mjs.map\n","import { isMotionValue } from './is-motion-value.mjs';\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n */\nfunction resolveMotionValue(value) {\n    return isMotionValue(value) ? value.get() : value;\n}\n\nexport { resolveMotionValue };\n//# sourceMappingURL=resolve-motion-value.mjs.map\n","import { addUniqueItem, removeItem } from 'motion-utils';\n\nclass NodeStack {\n    constructor() {\n        this.members = [];\n    }\n    add(node) {\n        addUniqueItem(this.members, node);\n        for (let i = this.members.length - 1; i >= 0; i--) {\n            const member = this.members[i];\n            if (member === node || member === this.lead || member === this.prevLead)\n                continue;\n            const inst = member.instance;\n            if ((!inst || inst.isConnected === false) && !member.snapshot) {\n                removeItem(this.members, member);\n                member.unmount();\n            }\n        }\n        node.scheduleRender();\n    }\n    remove(node) {\n        removeItem(this.members, node);\n        if (node === this.prevLead)\n            this.prevLead = undefined;\n        if (node === this.lead) {\n            const prevLead = this.members[this.members.length - 1];\n            if (prevLead)\n                this.promote(prevLead);\n        }\n    }\n    relegate(node) {\n        for (let i = this.members.indexOf(node) - 1; i >= 0; i--) {\n            const member = this.members[i];\n            if (member.isPresent !== false && member.instance?.isConnected !== false) {\n                this.promote(member);\n                return true;\n            }\n        }\n        return false;\n    }\n    promote(node, preserveFollowOpacity) {\n        const prevLead = this.lead;\n        if (node === prevLead)\n            return;\n        this.prevLead = prevLead;\n        this.lead = node;\n        node.show();\n        if (prevLead) {\n            prevLead.updateSnapshot();\n            node.scheduleRender();\n            const { layoutDependency: prevDep } = prevLead.options;\n            const { layoutDependency: nextDep } = node.options;\n            if (prevDep === undefined || prevDep !== nextDep) {\n                node.resumeFrom = prevLead;\n                if (preserveFollowOpacity)\n                    prevLead.preserveOpacity = true;\n                if (prevLead.snapshot) {\n                    node.snapshot = prevLead.snapshot;\n                    node.snapshot.latestValues =\n                        prevLead.animationValues || prevLead.latestValues;\n                }\n                if (node.root?.isUpdating)\n                    node.isLayoutDirty = true;\n            }\n            if (node.options.crossfade === false)\n                prevLead.hide();\n        }\n    }\n    exitAnimationComplete() {\n        this.members.forEach((member) => {\n            member.options.onExitComplete?.();\n            member.resumingFrom?.options.onExitComplete?.();\n        });\n    }\n    scheduleRender() {\n        this.members.forEach((member) => member.instance && member.scheduleRender(false));\n    }\n    removeLeadSnapshot() {\n        if (this.lead?.snapshot)\n            this.lead.snapshot = undefined;\n    }\n}\n\nexport { NodeStack };\n//# sourceMappingURL=stack.mjs.map\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n    /**\n     * Global flag as to whether the tree has animated since the last time\n     * we resized the window\n     */\n    hasAnimatedSinceResize: true,\n    /**\n     * We set this to true once, on the first update. Any nodes added to the tree beyond that\n     * update will be given a `data-projection-id` attribute.\n     */\n    hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n//# sourceMappingURL=state.mjs.map\n","import { SubscriptionManager, clamp, noop } from 'motion-utils';\nimport { animateSingleValue } from '../../animation/animate/single-value.mjs';\nimport { getOptimisedAppearId } from '../../animation/optimized-appear/get-appear-id.mjs';\nimport { getValueTransition } from '../../animation/utils/get-value-transition.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { time } from '../../frameloop/sync-time.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { activeAnimations } from '../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../stats/buffer.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { isSVGElement } from '../../utils/is-svg-element.mjs';\nimport { isSVGSVGElement } from '../../utils/is-svg-svg-element.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto, copyAxisDeltaInto, copyAxisInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcLength, calcRelativeBox, calcRelativePosition, calcBoxDelta, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { boxEqualsRounded, isDeltaZero, axisDeltaEquals, boxEquals, aspectRatio } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { FlatTree } from '../utils/flat-tree.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { globalProjectionState } from './state.mjs';\nimport { frame, cancelFrame, frameData, frameSteps } from '../../frameloop/frame.mjs';\n\nconst metrics = {\n    nodes: 0,\n    calculatedTargetDeltas: 0,\n    calculatedProjections: 0,\n};\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\nfunction resetDistortingTransform(key, visualElement, values, sharedAnimationValues) {\n    const { latestValues } = visualElement;\n    // Record the distorting transform and then temporarily set it to 0\n    if (latestValues[key]) {\n        values[key] = latestValues[key];\n        visualElement.setStaticValue(key, 0);\n        if (sharedAnimationValues) {\n            sharedAnimationValues[key] = 0;\n        }\n    }\n}\nfunction cancelTreeOptimisedTransformAnimations(projectionNode) {\n    projectionNode.hasCheckedOptimisedAppear = true;\n    if (projectionNode.root === projectionNode)\n        return;\n    const { visualElement } = projectionNode.options;\n    if (!visualElement)\n        return;\n    const appearId = getOptimisedAppearId(visualElement);\n    if (window.MotionHasOptimisedAnimation(appearId, \"transform\")) {\n        const { layout, layoutId } = projectionNode.options;\n        window.MotionCancelOptimisedAnimation(appearId, \"transform\", frame, !(layout || layoutId));\n    }\n    const { parent } = projectionNode;\n    if (parent && !parent.hasCheckedOptimisedAppear) {\n        cancelTreeOptimisedTransformAnimations(parent);\n    }\n}\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n    return class ProjectionNode {\n        constructor(latestValues = {}, parent = defaultParent?.()) {\n            /**\n             * A unique ID generated for every projection node.\n             */\n            this.id = id++;\n            /**\n             * An id that represents a unique session instigated by startUpdate.\n             */\n            this.animationId = 0;\n            this.animationCommitId = 0;\n            /**\n             * A Set containing all this component's children. This is used to iterate\n             * through the children.\n             *\n             * TODO: This could be faster to iterate as a flat array stored on the root node.\n             */\n            this.children = new Set();\n            /**\n             * Options for the node. We use this to configure what kind of layout animations\n             * we should perform (if any).\n             */\n            this.options = {};\n            /**\n             * We use this to detect when its safe to shut down part of a projection tree.\n             * We have to keep projecting children for scale correction and relative projection\n             * until all their parents stop performing layout animations.\n             */\n            this.isTreeAnimating = false;\n            this.isAnimationBlocked = false;\n            /**\n             * Flag to true if we think this layout has been changed. We can't always know this,\n             * currently we set it to true every time a component renders, or if it has a layoutDependency\n             * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n             * and if one node is dirtied, they all are.\n             */\n            this.isLayoutDirty = false;\n            /**\n             * Flag to true if we think the projection calculations for this node needs\n             * recalculating as a result of an updated transform or layout animation.\n             */\n            this.isProjectionDirty = false;\n            /**\n             * Flag to true if the layout *or* transform has changed. This then gets propagated\n             * throughout the projection tree, forcing any element below to recalculate on the next frame.\n             */\n            this.isSharedProjectionDirty = false;\n            /**\n             * Flag transform dirty. This gets propagated throughout the whole tree but is only\n             * respected by shared nodes.\n             */\n            this.isTransformDirty = false;\n            /**\n             * Block layout updates for instant layout transitions throughout the tree.\n             */\n            this.updateManuallyBlocked = false;\n            this.updateBlockedByResize = false;\n            /**\n             * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n             * call.\n             */\n            this.isUpdating = false;\n            /**\n             * If this is an SVG element we currently disable projection transforms\n             */\n            this.isSVG = false;\n            /**\n             * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n             * its projection styles.\n             */\n            this.needsReset = false;\n            /**\n             * Flags whether this node should have its transform reset prior to measuring.\n             */\n            this.shouldResetTransform = false;\n            /**\n             * Store whether this node has been checked for optimised appear animations. As\n             * effects fire bottom-up, and we want to look up the tree for appear animations,\n             * this makes sure we only check each path once, stopping at nodes that\n             * have already been checked.\n             */\n            this.hasCheckedOptimisedAppear = false;\n            /**\n             * An object representing the calculated contextual/accumulated/tree scale.\n             * This will be used to scale calculcated projection transforms, as these are\n             * calculated in screen-space but need to be scaled for elements to layoutly\n             * make it to their calculated destinations.\n             *\n             * TODO: Lazy-init\n             */\n            this.treeScale = { x: 1, y: 1 };\n            /**\n             *\n             */\n            this.eventHandlers = new Map();\n            this.hasTreeAnimated = false;\n            this.layoutVersion = 0;\n            // Note: Currently only running on root node\n            this.updateScheduled = false;\n            this.scheduleUpdate = () => this.update();\n            this.projectionUpdateScheduled = false;\n            this.checkUpdateFailed = () => {\n                if (this.isUpdating) {\n                    this.isUpdating = false;\n                    this.clearAllSnapshots();\n                }\n            };\n            /**\n             * This is a multi-step process as shared nodes might be of different depths. Nodes\n             * are sorted by depth order, so we need to resolve the entire tree before moving to\n             * the next step.\n             */\n            this.updateProjection = () => {\n                this.projectionUpdateScheduled = false;\n                /**\n                 * Reset debug counts. Manually resetting rather than creating a new\n                 * object each frame.\n                 */\n                if (statsBuffer.value) {\n                    metrics.nodes =\n                        metrics.calculatedTargetDeltas =\n                            metrics.calculatedProjections =\n                                0;\n                }\n                this.nodes.forEach(propagateDirtyNodes);\n                this.nodes.forEach(resolveTargetDelta);\n                this.nodes.forEach(calcProjection);\n                this.nodes.forEach(cleanDirtyNodes);\n                if (statsBuffer.addProjectionMetrics) {\n                    statsBuffer.addProjectionMetrics(metrics);\n                }\n            };\n            /**\n             * Frame calculations\n             */\n            this.resolvedRelativeTargetAt = 0.0;\n            this.linkedParentVersion = 0;\n            this.hasProjected = false;\n            this.isVisible = true;\n            this.animationProgress = 0;\n            /**\n             * Shared layout\n             */\n            // TODO Only running on root node\n            this.sharedNodes = new Map();\n            this.latestValues = latestValues;\n            this.root = parent ? parent.root || parent : this;\n            this.path = parent ? [...parent.path, parent] : [];\n            this.parent = parent;\n            this.depth = parent ? parent.depth + 1 : 0;\n            for (let i = 0; i < this.path.length; i++) {\n                this.path[i].shouldResetTransform = true;\n            }\n            if (this.root === this)\n                this.nodes = new FlatTree();\n        }\n        addEventListener(name, handler) {\n            if (!this.eventHandlers.has(name)) {\n                this.eventHandlers.set(name, new SubscriptionManager());\n            }\n            return this.eventHandlers.get(name).add(handler);\n        }\n        notifyListeners(name, ...args) {\n            const subscriptionManager = this.eventHandlers.get(name);\n            subscriptionManager && subscriptionManager.notify(...args);\n        }\n        hasListeners(name) {\n            return this.eventHandlers.has(name);\n        }\n        /**\n         * Lifecycles\n         */\n        mount(instance) {\n            if (this.instance)\n                return;\n            this.isSVG = isSVGElement(instance) && !isSVGSVGElement(instance);\n            this.instance = instance;\n            const { layoutId, layout, visualElement } = this.options;\n            if (visualElement && !visualElement.current) {\n                visualElement.mount(instance);\n            }\n            this.root.nodes.add(this);\n            this.parent && this.parent.children.add(this);\n            if (this.root.hasTreeAnimated && (layout || layoutId)) {\n                this.isLayoutDirty = true;\n            }\n            if (attachResizeListener) {\n                let cancelDelay;\n                let innerWidth = 0;\n                const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n                // Set initial innerWidth in a frame.read callback to batch the read\n                frame.read(() => {\n                    innerWidth = window.innerWidth;\n                });\n                attachResizeListener(instance, () => {\n                    const newInnerWidth = window.innerWidth;\n                    if (newInnerWidth === innerWidth)\n                        return;\n                    innerWidth = newInnerWidth;\n                    this.root.updateBlockedByResize = true;\n                    cancelDelay && cancelDelay();\n                    cancelDelay = delay(resizeUnblockUpdate, 250);\n                    if (globalProjectionState.hasAnimatedSinceResize) {\n                        globalProjectionState.hasAnimatedSinceResize = false;\n                        this.nodes.forEach(finishAnimation);\n                    }\n                });\n            }\n            if (layoutId) {\n                this.root.registerSharedNode(layoutId, this);\n            }\n            // Only register the handler if it requires layout animation\n            if (this.options.animate !== false &&\n                visualElement &&\n                (layoutId || layout)) {\n                this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeLayoutChanged, layout: newLayout, }) => {\n                    if (this.isTreeAnimationBlocked()) {\n                        this.target = undefined;\n                        this.relativeTarget = undefined;\n                        return;\n                    }\n                    // TODO: Check here if an animation exists\n                    const layoutTransition = this.options.transition ||\n                        visualElement.getDefaultTransition() ||\n                        defaultLayoutTransition;\n                    const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n                    /**\n                     * The target layout of the element might stay the same,\n                     * but its position relative to its parent has changed.\n                     */\n                    const hasTargetChanged = !this.targetLayout ||\n                        !boxEqualsRounded(this.targetLayout, newLayout);\n                    /*\n                     * Note: Disabled to fix relative animations always triggering new\n                     * layout animations. If this causes further issues, we can try\n                     * a different approach to detecting relative target changes.\n                     */\n                    // || hasRelativeLayoutChanged\n                    /**\n                     * If the layout hasn't seemed to have changed, it might be that the\n                     * element is visually in the same place in the document but its position\n                     * relative to its parent has indeed changed. So here we check for that.\n                     */\n                    const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeLayoutChanged;\n                    if (this.options.layoutRoot ||\n                        this.resumeFrom ||\n                        hasOnlyRelativeTargetChanged ||\n                        (hasLayoutChanged &&\n                            (hasTargetChanged || !this.currentAnimation))) {\n                        if (this.resumeFrom) {\n                            this.resumingFrom = this.resumeFrom;\n                            this.resumingFrom.resumingFrom = undefined;\n                        }\n                        const animationOptions = {\n                            ...getValueTransition(layoutTransition, \"layout\"),\n                            onPlay: onLayoutAnimationStart,\n                            onComplete: onLayoutAnimationComplete,\n                        };\n                        if (visualElement.shouldReduceMotion ||\n                            this.options.layoutRoot) {\n                            animationOptions.delay = 0;\n                            animationOptions.type = false;\n                        }\n                        this.startAnimation(animationOptions);\n                        /**\n                         * Set animation origin after starting animation to avoid layout jump\n                         * caused by stopping previous layout animation\n                         */\n                        this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\n                    }\n                    else {\n                        /**\n                         * If the layout hasn't changed and we have an animation that hasn't started yet,\n                         * finish it immediately. Otherwise it will be animating from a location\n                         * that was probably never committed to screen and look like a jumpy box.\n                         */\n                        if (!hasLayoutChanged) {\n                            finishAnimation(this);\n                        }\n                        if (this.isLead() && this.options.onExitComplete) {\n                            this.options.onExitComplete();\n                        }\n                    }\n                    this.targetLayout = newLayout;\n                });\n            }\n        }\n        unmount() {\n            this.options.layoutId && this.willUpdate();\n            this.root.nodes.remove(this);\n            const stack = this.getStack();\n            stack && stack.remove(this);\n            this.parent && this.parent.children.delete(this);\n            this.instance = undefined;\n            this.eventHandlers.clear();\n            cancelFrame(this.updateProjection);\n        }\n        // only on the root\n        blockUpdate() {\n            this.updateManuallyBlocked = true;\n        }\n        unblockUpdate() {\n            this.updateManuallyBlocked = false;\n        }\n        isUpdateBlocked() {\n            return this.updateManuallyBlocked || this.updateBlockedByResize;\n        }\n        isTreeAnimationBlocked() {\n            return (this.isAnimationBlocked ||\n                (this.parent && this.parent.isTreeAnimationBlocked()) ||\n                false);\n        }\n        // Note: currently only running on root node\n        startUpdate() {\n            if (this.isUpdateBlocked())\n                return;\n            this.isUpdating = true;\n            this.nodes && this.nodes.forEach(resetSkewAndRotation);\n            this.animationId++;\n        }\n        getTransformTemplate() {\n            const { visualElement } = this.options;\n            return visualElement && visualElement.getProps().transformTemplate;\n        }\n        willUpdate(shouldNotifyListeners = true) {\n            this.root.hasTreeAnimated = true;\n            if (this.root.isUpdateBlocked()) {\n                this.options.onExitComplete && this.options.onExitComplete();\n                return;\n            }\n            /**\n             * If we're running optimised appear animations then these must be\n             * cancelled before measuring the DOM. This is so we can measure\n             * the true layout of the element rather than the WAAPI animation\n             * which will be unaffected by the resetSkewAndRotate step.\n             *\n             * Note: This is a DOM write. Worst case scenario is this is sandwiched\n             * between other snapshot reads which will cause unnecessary style recalculations.\n             * This has to happen here though, as we don't yet know which nodes will need\n             * snapshots in startUpdate(), but we only want to cancel optimised animations\n             * if a layout animation measurement is actually going to be affected by them.\n             */\n            if (window.MotionCancelOptimisedAnimation &&\n                !this.hasCheckedOptimisedAppear) {\n                cancelTreeOptimisedTransformAnimations(this);\n            }\n            !this.root.isUpdating && this.root.startUpdate();\n            if (this.isLayoutDirty)\n                return;\n            this.isLayoutDirty = true;\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                node.shouldResetTransform = true;\n                /**\n                 * Percentage translates resolve against layoutBox dimensions,\n                 * so ancestors with them must be re-measured after transform reset.\n                 */\n                if (typeof node.latestValues.x === \"string\" ||\n                    typeof node.latestValues.y === \"string\") {\n                    node.isLayoutDirty = true;\n                }\n                node.updateScroll(\"snapshot\");\n                if (node.options.layoutRoot) {\n                    node.willUpdate(false);\n                }\n            }\n            const { layoutId, layout } = this.options;\n            if (layoutId === undefined && !layout)\n                return;\n            const transformTemplate = this.getTransformTemplate();\n            this.prevTransformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            this.updateSnapshot();\n            shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n        }\n        update() {\n            this.updateScheduled = false;\n            const updateWasBlocked = this.isUpdateBlocked();\n            // When doing an instant transition, we skip the layout update,\n            // but should still clean up the measurements so that the next\n            // snapshot could be taken correctly.\n            if (updateWasBlocked) {\n                const wasBlockedByResize = this.updateBlockedByResize;\n                this.unblockUpdate();\n                this.updateBlockedByResize = false;\n                this.clearAllSnapshots();\n                /**\n                 * When blocked by resize, still measure layouts so\n                 * callbacks like onLayoutMeasure fire (e.g. Reorder).\n                 * Skip notifyLayoutUpdate to prevent animations.\n                 */\n                if (wasBlockedByResize) {\n                    this.nodes.forEach(forceLayoutMeasure);\n                }\n                this.nodes.forEach(clearMeasurements);\n                return;\n            }\n            /**\n             * If this is a repeat of didUpdate then ignore the animation.\n             */\n            if (this.animationId <= this.animationCommitId) {\n                this.nodes.forEach(clearIsLayoutDirty);\n                return;\n            }\n            this.animationCommitId = this.animationId;\n            if (!this.isUpdating) {\n                this.nodes.forEach(clearIsLayoutDirty);\n            }\n            else {\n                this.isUpdating = false;\n                /**\n                 * Ensure animation-blocked nodes (e.g. during drag)\n                 * get measured even when memoized (willUpdate skipped).\n                 */\n                this.nodes.forEach(ensureDraggedNodesSnapshotted);\n                /**\n                 * Write\n                 */\n                this.nodes.forEach(resetTransformStyle);\n                /**\n                 * Read ==================\n                 */\n                // Update layout measurements of updated children\n                this.nodes.forEach(updateLayout);\n                /**\n                 * Write\n                 */\n                // Notify listeners that the layout is updated\n                this.nodes.forEach(notifyLayoutUpdate);\n            }\n            this.clearAllSnapshots();\n            /**\n             * Manually flush any pending updates. Ideally\n             * we could leave this to the following requestAnimationFrame but this seems\n             * to leave a flash of incorrectly styled content.\n             */\n            const now = time.now();\n            frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n            frameData.timestamp = now;\n            frameData.isProcessing = true;\n            frameSteps.update.process(frameData);\n            frameSteps.preRender.process(frameData);\n            frameSteps.render.process(frameData);\n            frameData.isProcessing = false;\n        }\n        didUpdate() {\n            if (!this.updateScheduled) {\n                this.updateScheduled = true;\n                microtask.read(this.scheduleUpdate);\n            }\n        }\n        clearAllSnapshots() {\n            this.nodes.forEach(clearSnapshot);\n            this.sharedNodes.forEach(removeLeadSnapshots);\n        }\n        scheduleUpdateProjection() {\n            if (!this.projectionUpdateScheduled) {\n                this.projectionUpdateScheduled = true;\n                frame.preRender(this.updateProjection, false, true);\n            }\n        }\n        scheduleCheckAfterUnmount() {\n            /**\n             * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n             * we manually call didUpdate to give a chance to the siblings to animate.\n             * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n             */\n            frame.postRender(() => {\n                if (this.isLayoutDirty) {\n                    this.root.didUpdate();\n                }\n                else {\n                    this.root.checkUpdateFailed();\n                }\n            });\n        }\n        /**\n         * Update measurements\n         */\n        updateSnapshot() {\n            if (this.snapshot || !this.instance)\n                return;\n            this.snapshot = this.measure();\n            if (this.snapshot &&\n                !calcLength(this.snapshot.measuredBox.x) &&\n                !calcLength(this.snapshot.measuredBox.y)) {\n                this.snapshot = undefined;\n            }\n        }\n        updateLayout() {\n            if (!this.instance)\n                return;\n            this.updateScroll();\n            if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n                !this.isLayoutDirty) {\n                return;\n            }\n            /**\n             * When a node is mounted, it simply resumes from the prevLead's\n             * snapshot instead of taking a new one, but the ancestors scroll\n             * might have updated while the prevLead is unmounted. We need to\n             * update the scroll again to make sure the layout we measure is\n             * up to date.\n             */\n            if (this.resumeFrom && !this.resumeFrom.instance) {\n                for (let i = 0; i < this.path.length; i++) {\n                    const node = this.path[i];\n                    node.updateScroll();\n                }\n            }\n            const prevLayout = this.layout;\n            this.layout = this.measure(false);\n            this.layoutVersion++;\n            if (!this.layoutCorrected)\n                this.layoutCorrected = createBox();\n            this.isLayoutDirty = false;\n            this.projectionDelta = undefined;\n            this.notifyListeners(\"measure\", this.layout.layoutBox);\n            const { visualElement } = this.options;\n            visualElement &&\n                visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n        }\n        updateScroll(phase = \"measure\") {\n            let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n            if (this.scroll &&\n                this.scroll.animationId === this.root.animationId &&\n                this.scroll.phase === phase) {\n                needsMeasurement = false;\n            }\n            if (needsMeasurement && this.instance) {\n                const isRoot = checkIsScrollRoot(this.instance);\n                this.scroll = {\n                    animationId: this.root.animationId,\n                    phase,\n                    isRoot,\n                    offset: measureScroll(this.instance),\n                    wasRoot: this.scroll ? this.scroll.isRoot : isRoot,\n                };\n            }\n        }\n        resetTransform() {\n            if (!resetTransform)\n                return;\n            const isResetRequested = this.isLayoutDirty ||\n                this.shouldResetTransform ||\n                this.options.alwaysMeasureLayout;\n            const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n            const transformTemplate = this.getTransformTemplate();\n            const transformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n            if (isResetRequested &&\n                this.instance &&\n                (hasProjection ||\n                    hasTransform(this.latestValues) ||\n                    transformTemplateHasChanged)) {\n                resetTransform(this.instance, transformTemplateValue);\n                this.shouldResetTransform = false;\n                this.scheduleRender();\n            }\n        }\n        measure(removeTransform = true) {\n            const pageBox = this.measurePageBox();\n            let layoutBox = this.removeElementScroll(pageBox);\n            /**\n             * Measurements taken during the pre-render stage\n             * still have transforms applied so we remove them\n             * via calculation.\n             */\n            if (removeTransform) {\n                layoutBox = this.removeTransform(layoutBox);\n            }\n            roundBox(layoutBox);\n            return {\n                animationId: this.root.animationId,\n                measuredBox: pageBox,\n                layoutBox,\n                latestValues: {},\n                source: this.id,\n            };\n        }\n        measurePageBox() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return createBox();\n            const box = visualElement.measureViewportBox();\n            const wasInScrollRoot = this.scroll?.wasRoot || this.path.some(checkNodeWasScrollRoot);\n            if (!wasInScrollRoot) {\n                // Remove viewport scroll to give page-relative coordinates\n                const { scroll } = this.root;\n                if (scroll) {\n                    translateAxis(box.x, scroll.offset.x);\n                    translateAxis(box.y, scroll.offset.y);\n                }\n            }\n            return box;\n        }\n        removeElementScroll(box) {\n            const boxWithoutScroll = createBox();\n            copyBoxInto(boxWithoutScroll, box);\n            if (this.scroll?.wasRoot) {\n                return boxWithoutScroll;\n            }\n            /**\n             * Performance TODO: Keep a cumulative scroll offset down the tree\n             * rather than loop back up the path.\n             */\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                const { scroll, options } = node;\n                if (node !== this.root && scroll && options.layoutScroll) {\n                    /**\n                     * If this is a new scroll root, we want to remove all previous scrolls\n                     * from the viewport box.\n                     */\n                    if (scroll.wasRoot) {\n                        copyBoxInto(boxWithoutScroll, box);\n                    }\n                    translateAxis(boxWithoutScroll.x, scroll.offset.x);\n                    translateAxis(boxWithoutScroll.y, scroll.offset.y);\n                }\n            }\n            return boxWithoutScroll;\n        }\n        applyTransform(box, transformOnly = false, output) {\n            const withTransforms = output || createBox();\n            copyBoxInto(withTransforms, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!transformOnly &&\n                    node.options.layoutScroll &&\n                    node.scroll &&\n                    node !== node.root) {\n                    translateAxis(withTransforms.x, -node.scroll.offset.x);\n                    translateAxis(withTransforms.y, -node.scroll.offset.y);\n                }\n                if (!hasTransform(node.latestValues))\n                    continue;\n                transformBox(withTransforms, node.latestValues, node.layout?.layoutBox);\n            }\n            if (hasTransform(this.latestValues)) {\n                transformBox(withTransforms, this.latestValues, this.layout?.layoutBox);\n            }\n            return withTransforms;\n        }\n        removeTransform(box) {\n            const boxWithoutTransform = createBox();\n            copyBoxInto(boxWithoutTransform, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!hasTransform(node.latestValues))\n                    continue;\n                let sourceBox;\n                if (node.instance) {\n                    hasScale(node.latestValues) && node.updateSnapshot();\n                    sourceBox = createBox();\n                    copyBoxInto(sourceBox, node.measurePageBox());\n                }\n                removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot?.layoutBox, sourceBox);\n            }\n            if (hasTransform(this.latestValues)) {\n                removeBoxTransforms(boxWithoutTransform, this.latestValues);\n            }\n            return boxWithoutTransform;\n        }\n        setTargetDelta(delta) {\n            this.targetDelta = delta;\n            this.root.scheduleUpdateProjection();\n            this.isProjectionDirty = true;\n        }\n        setOptions(options) {\n            this.options = {\n                ...this.options,\n                ...options,\n                crossfade: options.crossfade !== undefined ? options.crossfade : true,\n            };\n        }\n        clearMeasurements() {\n            this.scroll = undefined;\n            this.layout = undefined;\n            this.snapshot = undefined;\n            this.prevTransformTemplateValue = undefined;\n            this.targetDelta = undefined;\n            this.target = undefined;\n            this.isLayoutDirty = false;\n        }\n        forceRelativeParentToResolveTarget() {\n            if (!this.relativeParent)\n                return;\n            /**\n             * If the parent target isn't up-to-date, force it to update.\n             * This is an unfortunate de-optimisation as it means any updating relative\n             * projection will cause all the relative parents to recalculate back\n             * up the tree.\n             */\n            if (this.relativeParent.resolvedRelativeTargetAt !==\n                frameData.timestamp) {\n                this.relativeParent.resolveTargetDelta(true);\n            }\n        }\n        resolveTargetDelta(forceRecalculation = false) {\n            /**\n             * Once the dirty status of nodes has been spread through the tree, we also\n             * need to check if we have a shared node of a different depth that has itself\n             * been dirtied.\n             */\n            const lead = this.getLead();\n            this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n            this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n            this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            /**\n             * We don't use transform for this step of processing so we don't\n             * need to check whether any nodes have changed transform.\n             */\n            const canSkip = !(forceRecalculation ||\n                (isShared && this.isSharedProjectionDirty) ||\n                this.isProjectionDirty ||\n                this.parent?.isProjectionDirty ||\n                this.attemptToResolveRelativeTarget ||\n                this.root.updateBlockedByResize);\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If we have no layout, we can't perform projection, so early return\n             */\n            if (!this.layout || !(layout || layoutId))\n                return;\n            this.resolvedRelativeTargetAt = frameData.timestamp;\n            const relativeParent = this.getClosestProjectingParent();\n            if (relativeParent &&\n                this.linkedParentVersion !== relativeParent.layoutVersion &&\n                !relativeParent.options.layoutRoot) {\n                this.removeRelativeTarget();\n            }\n            /**\n             * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n             * a relativeParent. This will allow a component to perform scale correction\n             * even if no animation has started.\n             */\n            if (!this.targetDelta && !this.relativeTarget) {\n                if (this.options.layoutAnchor !== false &&\n                    relativeParent &&\n                    relativeParent.layout) {\n                    this.createRelativeTarget(relativeParent, this.layout.layoutBox, relativeParent.layout.layoutBox);\n                }\n                else {\n                    this.removeRelativeTarget();\n                }\n            }\n            /**\n             * If we have no relative target or no target delta our target isn't valid\n             * for this frame.\n             */\n            if (!this.relativeTarget && !this.targetDelta)\n                return;\n            /**\n             * Lazy-init target data structure\n             */\n            if (!this.target) {\n                this.target = createBox();\n                this.targetWithTransforms = createBox();\n            }\n            /**\n             * If we've got a relative box for this component, resolve it into a target relative to the parent.\n             */\n            if (this.relativeTarget &&\n                this.relativeTargetOrigin &&\n                this.relativeParent &&\n                this.relativeParent.target) {\n                this.forceRelativeParentToResolveTarget();\n                calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target, this.options.layoutAnchor || undefined);\n                /**\n                 * If we've only got a targetDelta, resolve it into a target\n                 */\n            }\n            else if (this.targetDelta) {\n                if (Boolean(this.resumingFrom)) {\n                    this.applyTransform(this.layout.layoutBox, false, this.target);\n                }\n                else {\n                    copyBoxInto(this.target, this.layout.layoutBox);\n                }\n                applyBoxDelta(this.target, this.targetDelta);\n            }\n            else {\n                /**\n                 * If no target, use own layout as target\n                 */\n                copyBoxInto(this.target, this.layout.layoutBox);\n            }\n            /**\n             * If we've been told to attempt to resolve a relative target, do so.\n             */\n            if (this.attemptToResolveRelativeTarget) {\n                this.attemptToResolveRelativeTarget = false;\n                if (this.options.layoutAnchor !== false &&\n                    relativeParent &&\n                    Boolean(relativeParent.resumingFrom) ===\n                        Boolean(this.resumingFrom) &&\n                    !relativeParent.options.layoutScroll &&\n                    relativeParent.target &&\n                    this.animationProgress !== 1) {\n                    this.createRelativeTarget(relativeParent, this.target, relativeParent.target);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * Increase debug counter for resolved target deltas\n             */\n            if (statsBuffer.value) {\n                metrics.calculatedTargetDeltas++;\n            }\n        }\n        getClosestProjectingParent() {\n            if (!this.parent ||\n                hasScale(this.parent.latestValues) ||\n                has2DTranslate(this.parent.latestValues)) {\n                return undefined;\n            }\n            if (this.parent.isProjecting()) {\n                return this.parent;\n            }\n            else {\n                return this.parent.getClosestProjectingParent();\n            }\n        }\n        isProjecting() {\n            return Boolean((this.relativeTarget ||\n                this.targetDelta ||\n                this.options.layoutRoot) &&\n                this.layout);\n        }\n        createRelativeTarget(relativeParent, layout, parentLayout) {\n            this.relativeParent = relativeParent;\n            this.linkedParentVersion = relativeParent.layoutVersion;\n            this.forceRelativeParentToResolveTarget();\n            this.relativeTarget = createBox();\n            this.relativeTargetOrigin = createBox();\n            calcRelativePosition(this.relativeTargetOrigin, layout, parentLayout, this.options.layoutAnchor || undefined);\n            copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n        }\n        removeRelativeTarget() {\n            this.relativeParent = this.relativeTarget = undefined;\n        }\n        calcProjection() {\n            const lead = this.getLead();\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            let canSkip = true;\n            /**\n             * If this is a normal layout animation and neither this node nor its nearest projecting\n             * is dirty then we can't skip.\n             */\n            if (this.isProjectionDirty || this.parent?.isProjectionDirty) {\n                canSkip = false;\n            }\n            /**\n             * If this is a shared layout animation and this node's shared projection is dirty then\n             * we can't skip.\n             */\n            if (isShared &&\n                (this.isSharedProjectionDirty || this.isTransformDirty)) {\n                canSkip = false;\n            }\n            /**\n             * If we have resolved the target this frame we must recalculate the\n             * projection to ensure it visually represents the internal calculations.\n             */\n            if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n                canSkip = false;\n            }\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If this section of the tree isn't animating we can\n             * delete our target sources for the following frame.\n             */\n            this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n                this.currentAnimation ||\n                this.pendingAnimation);\n            if (!this.isTreeAnimating) {\n                this.targetDelta = this.relativeTarget = undefined;\n            }\n            if (!this.layout || !(layout || layoutId))\n                return;\n            /**\n             * Reset the corrected box with the latest values from box, as we're then going\n             * to perform mutative operations on it.\n             */\n            copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n            /**\n             * Record previous tree scales before updating.\n             */\n            const prevTreeScaleX = this.treeScale.x;\n            const prevTreeScaleY = this.treeScale.y;\n            /**\n             * Apply all the parent deltas to this box to produce the corrected box. This\n             * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n             */\n            applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n            /**\n             * If this layer needs to perform scale correction but doesn't have a target,\n             * use the layout as the target.\n             */\n            if (lead.layout &&\n                !lead.target &&\n                (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n                lead.target = lead.layout.layoutBox;\n                lead.targetWithTransforms = createBox();\n            }\n            const { target } = lead;\n            if (!target) {\n                /**\n                 * If we don't have a target to project into, but we were previously\n                 * projecting, we want to remove the stored transform and schedule\n                 * a render to ensure the elements reflect the removed transform.\n                 */\n                if (this.prevProjectionDelta) {\n                    this.createProjectionDeltas();\n                    this.scheduleRender();\n                }\n                return;\n            }\n            if (!this.projectionDelta || !this.prevProjectionDelta) {\n                this.createProjectionDeltas();\n            }\n            else {\n                copyAxisDeltaInto(this.prevProjectionDelta.x, this.projectionDelta.x);\n                copyAxisDeltaInto(this.prevProjectionDelta.y, this.projectionDelta.y);\n            }\n            /**\n             * Update the delta between the corrected box and the target box before user-set transforms were applied.\n             * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n             * for our layout reprojection, but still allow them to be scaled correctly by the user.\n             * It might be that to simplify this we may want to accept that user-set scale is also corrected\n             * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n             * to allow people to choose whether these styles are corrected based on just the\n             * layout reprojection or the final bounding box.\n             */\n            calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n            if (this.treeScale.x !== prevTreeScaleX ||\n                this.treeScale.y !== prevTreeScaleY ||\n                !axisDeltaEquals(this.projectionDelta.x, this.prevProjectionDelta.x) ||\n                !axisDeltaEquals(this.projectionDelta.y, this.prevProjectionDelta.y)) {\n                this.hasProjected = true;\n                this.scheduleRender();\n                this.notifyListeners(\"projectionUpdate\", target);\n            }\n            /**\n             * Increase debug counter for recalculated projections\n             */\n            if (statsBuffer.value) {\n                metrics.calculatedProjections++;\n            }\n        }\n        hide() {\n            this.isVisible = false;\n            // TODO: Schedule render\n        }\n        show() {\n            this.isVisible = true;\n            // TODO: Schedule render\n        }\n        scheduleRender(notifyAll = true) {\n            this.options.visualElement?.scheduleRender();\n            if (notifyAll) {\n                const stack = this.getStack();\n                stack && stack.scheduleRender();\n            }\n            if (this.resumingFrom && !this.resumingFrom.instance) {\n                this.resumingFrom = undefined;\n            }\n        }\n        createProjectionDeltas() {\n            this.prevProjectionDelta = createDelta();\n            this.projectionDelta = createDelta();\n            this.projectionDeltaWithTransform = createDelta();\n        }\n        setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n            const snapshot = this.snapshot;\n            const snapshotLatestValues = snapshot ? snapshot.latestValues : {};\n            const mixedValues = { ...this.latestValues };\n            const targetDelta = createDelta();\n            if (!this.relativeParent ||\n                !this.relativeParent.options.layoutRoot) {\n                this.relativeTarget = this.relativeTargetOrigin = undefined;\n            }\n            this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n            const relativeLayout = createBox();\n            const snapshotSource = snapshot ? snapshot.source : undefined;\n            const layoutSource = this.layout ? this.layout.source : undefined;\n            const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n            const stack = this.getStack();\n            const isOnlyMember = !stack || stack.members.length <= 1;\n            const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n                !isOnlyMember &&\n                this.options.crossfade === true &&\n                !this.path.some(hasOpacityCrossfade));\n            this.animationProgress = 0;\n            let prevRelativeTarget;\n            this.mixTargetDelta = (latest) => {\n                const progress = latest / 1000;\n                mixAxisDelta(targetDelta.x, delta.x, progress);\n                mixAxisDelta(targetDelta.y, delta.y, progress);\n                this.setTargetDelta(targetDelta);\n                if (this.relativeTarget &&\n                    this.relativeTargetOrigin &&\n                    this.layout &&\n                    this.relativeParent &&\n                    this.relativeParent.layout) {\n                    calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox, this.options.layoutAnchor || undefined);\n                    mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n                    /**\n                     * If this is an unchanged relative target we can consider the\n                     * projection not dirty.\n                     */\n                    if (prevRelativeTarget &&\n                        boxEquals(this.relativeTarget, prevRelativeTarget)) {\n                        this.isProjectionDirty = false;\n                    }\n                    if (!prevRelativeTarget)\n                        prevRelativeTarget = createBox();\n                    copyBoxInto(prevRelativeTarget, this.relativeTarget);\n                }\n                if (isSharedLayoutAnimation) {\n                    this.animationValues = mixedValues;\n                    mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n                }\n                this.root.scheduleUpdateProjection();\n                this.scheduleRender();\n                this.animationProgress = progress;\n            };\n            this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n        }\n        startAnimation(options) {\n            this.notifyListeners(\"animationStart\");\n            this.currentAnimation?.stop();\n            this.resumingFrom?.currentAnimation?.stop();\n            if (this.pendingAnimation) {\n                cancelFrame(this.pendingAnimation);\n                this.pendingAnimation = undefined;\n            }\n            /**\n             * Start the animation in the next frame to have a frame with progress 0,\n             * where the target is the same as when the animation started, so we can\n             * calculate the relative positions correctly for instant transitions.\n             */\n            this.pendingAnimation = frame.update(() => {\n                globalProjectionState.hasAnimatedSinceResize = true;\n                activeAnimations.layout++;\n                this.motionValue || (this.motionValue = motionValue(0));\n                this.motionValue.jump(0, false);\n                this.currentAnimation = animateSingleValue(this.motionValue, [0, 1000], {\n                    ...options,\n                    velocity: 0,\n                    isSync: true,\n                    onUpdate: (latest) => {\n                        this.mixTargetDelta(latest);\n                        options.onUpdate && options.onUpdate(latest);\n                    },\n                    onStop: () => {\n                        activeAnimations.layout--;\n                    },\n                    onComplete: () => {\n                        activeAnimations.layout--;\n                        options.onComplete && options.onComplete();\n                        this.completeAnimation();\n                    },\n                });\n                if (this.resumingFrom) {\n                    this.resumingFrom.currentAnimation = this.currentAnimation;\n                }\n                this.pendingAnimation = undefined;\n            });\n        }\n        completeAnimation() {\n            if (this.resumingFrom) {\n                this.resumingFrom.currentAnimation = undefined;\n                this.resumingFrom.preserveOpacity = undefined;\n            }\n            const stack = this.getStack();\n            stack && stack.exitAnimationComplete();\n            this.resumingFrom =\n                this.currentAnimation =\n                    this.animationValues =\n                        undefined;\n            this.notifyListeners(\"animationComplete\");\n        }\n        finishAnimation() {\n            if (this.currentAnimation) {\n                this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n                this.currentAnimation.stop();\n            }\n            this.completeAnimation();\n        }\n        applyTransformsToTarget() {\n            const lead = this.getLead();\n            let { targetWithTransforms, target, layout, latestValues } = lead;\n            if (!targetWithTransforms || !target || !layout)\n                return;\n            /**\n             * If we're only animating position, and this element isn't the lead element,\n             * then instead of projecting into the lead box we instead want to calculate\n             * a new target that aligns the two boxes but maintains the layout shape.\n             */\n            if (this !== lead &&\n                this.layout &&\n                layout &&\n                shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n                target = this.target || createBox();\n                const xLength = calcLength(this.layout.layoutBox.x);\n                target.x.min = lead.target.x.min;\n                target.x.max = target.x.min + xLength;\n                const yLength = calcLength(this.layout.layoutBox.y);\n                target.y.min = lead.target.y.min;\n                target.y.max = target.y.min + yLength;\n            }\n            copyBoxInto(targetWithTransforms, target);\n            /**\n             * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n             * This is the final box that we will then project into by calculating a transform delta and\n             * applying it to the corrected box.\n             */\n            transformBox(targetWithTransforms, latestValues);\n            /**\n             * Update the delta between the corrected box and the final target box, after\n             * user-set transforms are applied to it. This will be used by the renderer to\n             * create a transform style that will reproject the element from its layout layout\n             * into the desired bounding box.\n             */\n            calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n        }\n        registerSharedNode(layoutId, node) {\n            if (!this.sharedNodes.has(layoutId)) {\n                this.sharedNodes.set(layoutId, new NodeStack());\n            }\n            const stack = this.sharedNodes.get(layoutId);\n            stack.add(node);\n            const config = node.options.initialPromotionConfig;\n            node.promote({\n                transition: config ? config.transition : undefined,\n                preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n                    ? config.shouldPreserveFollowOpacity(node)\n                    : undefined,\n            });\n        }\n        isLead() {\n            const stack = this.getStack();\n            return stack ? stack.lead === this : true;\n        }\n        getLead() {\n            const { layoutId } = this.options;\n            return layoutId ? this.getStack()?.lead || this : this;\n        }\n        getPrevLead() {\n            const { layoutId } = this.options;\n            return layoutId ? this.getStack()?.prevLead : undefined;\n        }\n        getStack() {\n            const { layoutId } = this.options;\n            if (layoutId)\n                return this.root.sharedNodes.get(layoutId);\n        }\n        promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n            const stack = this.getStack();\n            if (stack)\n                stack.promote(this, preserveFollowOpacity);\n            if (needsReset) {\n                this.projectionDelta = undefined;\n                this.needsReset = true;\n            }\n            if (transition)\n                this.setOptions({ transition });\n        }\n        relegate() {\n            const stack = this.getStack();\n            if (stack) {\n                return stack.relegate(this);\n            }\n            else {\n                return false;\n            }\n        }\n        resetSkewAndRotation() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return;\n            // If there's no detected skew or rotation values, we can early return without a forced render.\n            let hasDistortingTransform = false;\n            /**\n             * An unrolled check for rotation values. Most elements don't have any rotation and\n             * skipping the nested loop and new object creation is 50% faster.\n             */\n            const { latestValues } = visualElement;\n            if (latestValues.z ||\n                latestValues.rotate ||\n                latestValues.rotateX ||\n                latestValues.rotateY ||\n                latestValues.rotateZ ||\n                latestValues.skewX ||\n                latestValues.skewY) {\n                hasDistortingTransform = true;\n            }\n            // If there's no distorting values, we don't need to do any more.\n            if (!hasDistortingTransform)\n                return;\n            const resetValues = {};\n            if (latestValues.z) {\n                resetDistortingTransform(\"z\", visualElement, resetValues, this.animationValues);\n            }\n            // Check the skew and rotate value of all axes and reset to 0\n            for (let i = 0; i < transformAxes.length; i++) {\n                resetDistortingTransform(`rotate${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n                resetDistortingTransform(`skew${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n            }\n            // Force a render of this element to apply the transform with all skews and rotations\n            // set to 0.\n            visualElement.render();\n            // Put back all the values we reset\n            for (const key in resetValues) {\n                visualElement.setStaticValue(key, resetValues[key]);\n                if (this.animationValues) {\n                    this.animationValues[key] = resetValues[key];\n                }\n            }\n            // Schedule a render for the next frame. This ensures we won't visually\n            // see the element with the reset rotate value applied.\n            visualElement.scheduleRender();\n        }\n        applyProjectionStyles(targetStyle, // CSSStyleDeclaration - doesn't allow numbers to be assigned to properties\n        styleProp) {\n            if (!this.instance || this.isSVG)\n                return;\n            if (!this.isVisible) {\n                targetStyle.visibility = \"hidden\";\n                return;\n            }\n            const transformTemplate = this.getTransformTemplate();\n            if (this.needsReset) {\n                this.needsReset = false;\n                targetStyle.visibility = \"\";\n                targetStyle.opacity = \"\";\n                targetStyle.pointerEvents =\n                    resolveMotionValue(styleProp?.pointerEvents) || \"\";\n                targetStyle.transform = transformTemplate\n                    ? transformTemplate(this.latestValues, \"\")\n                    : \"none\";\n                return;\n            }\n            const lead = this.getLead();\n            if (!this.projectionDelta || !this.layout || !lead.target) {\n                if (this.options.layoutId) {\n                    targetStyle.opacity =\n                        this.latestValues.opacity !== undefined\n                            ? this.latestValues.opacity\n                            : 1;\n                    targetStyle.pointerEvents =\n                        resolveMotionValue(styleProp?.pointerEvents) || \"\";\n                }\n                if (this.hasProjected && !hasTransform(this.latestValues)) {\n                    targetStyle.transform = transformTemplate\n                        ? transformTemplate({}, \"\")\n                        : \"none\";\n                    this.hasProjected = false;\n                }\n                return;\n            }\n            targetStyle.visibility = \"\";\n            const valuesToRender = lead.animationValues || lead.latestValues;\n            this.applyTransformsToTarget();\n            let transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n            if (transformTemplate) {\n                transform = transformTemplate(valuesToRender, transform);\n            }\n            targetStyle.transform = transform;\n            const { x, y } = this.projectionDelta;\n            targetStyle.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n            if (lead.animationValues) {\n                /**\n                 * If the lead component is animating, assign this either the entering/leaving\n                 * opacity\n                 */\n                targetStyle.opacity =\n                    lead === this\n                        ? valuesToRender.opacity ??\n                            this.latestValues.opacity ??\n                            1\n                        : this.preserveOpacity\n                            ? this.latestValues.opacity\n                            : valuesToRender.opacityExit;\n            }\n            else {\n                /**\n                 * Or we're not animating at all, set the lead component to its layout\n                 * opacity and other components to hidden.\n                 */\n                targetStyle.opacity =\n                    lead === this\n                        ? valuesToRender.opacity !== undefined\n                            ? valuesToRender.opacity\n                            : \"\"\n                        : valuesToRender.opacityExit !== undefined\n                            ? valuesToRender.opacityExit\n                            : 0;\n            }\n            /**\n             * Apply scale correction\n             */\n            for (const key in scaleCorrectors) {\n                if (valuesToRender[key] === undefined)\n                    continue;\n                const { correct, applyTo, isCSSVariable } = scaleCorrectors[key];\n                /**\n                 * Only apply scale correction to the value if we have an\n                 * active projection transform. Otherwise these values become\n                 * vulnerable to distortion if the element changes size without\n                 * a corresponding layout animation.\n                 */\n                const corrected = transform === \"none\"\n                    ? valuesToRender[key]\n                    : correct(valuesToRender[key], lead);\n                if (applyTo) {\n                    const num = applyTo.length;\n                    for (let i = 0; i < num; i++) {\n                        targetStyle[applyTo[i]] = corrected;\n                    }\n                }\n                else {\n                    // If this is a CSS variable, set it directly on the instance.\n                    // Replacing this function from creating styles to setting them\n                    // would be a good place to remove per frame object creation\n                    if (isCSSVariable) {\n                        this.options.visualElement.renderState.vars[key] = corrected;\n                    }\n                    else {\n                        targetStyle[key] = corrected;\n                    }\n                }\n            }\n            /**\n             * Disable pointer events on follow components. This is to ensure\n             * that if a follow component covers a lead component it doesn't block\n             * pointer events on the lead.\n             */\n            if (this.options.layoutId) {\n                targetStyle.pointerEvents =\n                    lead === this\n                        ? resolveMotionValue(styleProp?.pointerEvents) || \"\"\n                        : \"none\";\n            }\n        }\n        clearSnapshot() {\n            this.resumeFrom = this.snapshot = undefined;\n        }\n        // Only run on root\n        resetTree() {\n            this.root.nodes.forEach((node) => node.currentAnimation?.stop());\n            this.root.nodes.forEach(clearMeasurements);\n            this.root.sharedNodes.clear();\n        }\n    };\n}\nfunction updateLayout(node) {\n    node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n    const snapshot = node.resumeFrom?.snapshot || node.snapshot;\n    if (node.isLead() &&\n        node.layout &&\n        snapshot &&\n        node.hasListeners(\"didUpdate\")) {\n        const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n        const { animationType } = node.options;\n        const isShared = snapshot.source !== node.layout.source;\n        // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n        // animations for instance if layout=\"size\" and an element has only changed position\n        if (animationType === \"size\") {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(axisSnapshot);\n                axisSnapshot.min = layout[axis].min;\n                axisSnapshot.max = axisSnapshot.min + length;\n            });\n        }\n        else if (animationType === \"x\" || animationType === \"y\") {\n            const snapAxis = animationType === \"x\" ? \"y\" : \"x\";\n            copyAxisInto(isShared\n                ? snapshot.measuredBox[snapAxis]\n                : snapshot.layoutBox[snapAxis], layout[snapAxis]);\n        }\n        else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(layout[axis]);\n                axisSnapshot.max = axisSnapshot.min + length;\n                /**\n                 * Ensure relative target gets resized and rerendererd\n                 */\n                if (node.relativeTarget && !node.currentAnimation) {\n                    node.isProjectionDirty = true;\n                    node.relativeTarget[axis].max =\n                        node.relativeTarget[axis].min + length;\n                }\n            });\n        }\n        const layoutDelta = createDelta();\n        calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n        const visualDelta = createDelta();\n        if (isShared) {\n            calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n        }\n        else {\n            calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n        }\n        const hasLayoutChanged = !isDeltaZero(layoutDelta);\n        let hasRelativeLayoutChanged = false;\n        if (!node.resumeFrom) {\n            const relativeParent = node.getClosestProjectingParent();\n            /**\n             * If the relativeParent is itself resuming from a different element then\n             * the relative snapshot is not relavent\n             */\n            if (relativeParent && !relativeParent.resumeFrom) {\n                const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n                if (parentSnapshot && parentLayout) {\n                    const anchor = node.options.layoutAnchor || undefined;\n                    const relativeSnapshot = createBox();\n                    calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox, anchor);\n                    const relativeLayout = createBox();\n                    calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox, anchor);\n                    if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n                        hasRelativeLayoutChanged = true;\n                    }\n                    if (relativeParent.options.layoutRoot) {\n                        node.relativeTarget = relativeLayout;\n                        node.relativeTargetOrigin = relativeSnapshot;\n                        node.relativeParent = relativeParent;\n                    }\n                }\n            }\n        }\n        node.notifyListeners(\"didUpdate\", {\n            layout,\n            snapshot,\n            delta: visualDelta,\n            layoutDelta,\n            hasLayoutChanged,\n            hasRelativeLayoutChanged,\n        });\n    }\n    else if (node.isLead()) {\n        const { onExitComplete } = node.options;\n        onExitComplete && onExitComplete();\n    }\n    /**\n     * Clearing transition\n     * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n     * and why we need it at all\n     */\n    node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n    /**\n     * Increase debug counter for nodes encountered this frame\n     */\n    if (statsBuffer.value) {\n        metrics.nodes++;\n    }\n    if (!node.parent)\n        return;\n    /**\n     * If this node isn't projecting, propagate isProjectionDirty. It will have\n     * no performance impact but it will allow the next child that *is* projecting\n     * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n     * correcting.\n     */\n    if (!node.isProjecting()) {\n        node.isProjectionDirty = node.parent.isProjectionDirty;\n    }\n    /**\n     * Propagate isSharedProjectionDirty and isTransformDirty\n     * throughout the whole tree. A future revision can take another look at\n     * this but for safety we still recalcualte shared nodes.\n     */\n    node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n        node.parent.isProjectionDirty ||\n        node.parent.isSharedProjectionDirty));\n    node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n    node.isProjectionDirty =\n        node.isSharedProjectionDirty =\n            node.isTransformDirty =\n                false;\n}\nfunction clearSnapshot(node) {\n    node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n    node.clearMeasurements();\n}\nfunction forceLayoutMeasure(node) {\n    node.isLayoutDirty = true;\n    node.updateLayout();\n}\nfunction clearIsLayoutDirty(node) {\n    node.isLayoutDirty = false;\n}\n/**\n * When a node is animation-blocked (e.g. during drag) and its component\n * didn't re-render (memoized), willUpdate() is never called so there's\n * no snapshot. Use the previous layout as a snapshot and mark dirty so\n * resetTransform/updateLayout/notifyLayoutUpdate process it normally.\n */\nfunction ensureDraggedNodesSnapshotted(node) {\n    if (node.isAnimationBlocked && node.layout && !node.isLayoutDirty) {\n        node.snapshot = node.layout;\n        node.isLayoutDirty = true;\n    }\n}\nfunction resetTransformStyle(node) {\n    const { visualElement } = node.options;\n    if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n        visualElement.notify(\"BeforeLayoutMeasure\");\n    }\n    node.resetTransform();\n}\nfunction finishAnimation(node) {\n    node.finishAnimation();\n    node.targetDelta = node.relativeTarget = node.target = undefined;\n    node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n    node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n    node.calcProjection();\n}\nfunction resetSkewAndRotation(node) {\n    node.resetSkewAndRotation();\n}\nfunction removeLeadSnapshots(stack) {\n    stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n    output.translate = mixNumber(delta.translate, 0, p);\n    output.scale = mixNumber(delta.scale, 1, p);\n    output.origin = delta.origin;\n    output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n    output.min = mixNumber(from.min, to.min, p);\n    output.max = mixNumber(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n    mixAxis(output.x, from.x, to.x, p);\n    mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n    return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n    duration: 0.45,\n    ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n    navigator.userAgent &&\n    navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n    ? Math.round\n    : noop;\nfunction roundAxis(axis) {\n    // Round to the nearest .5 pixels to support subpixel layouts\n    axis.min = roundPoint(axis.min);\n    axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n    roundAxis(box.x);\n    roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n    return (animationType === \"position\" ||\n        (animationType === \"preserve-aspect\" &&\n            !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\nfunction checkNodeWasScrollRoot(node) {\n    return node !== node.root && node.scroll?.wasRoot;\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n//# sourceMappingURL=create-projection-node.mjs.map\n","import { isSVGElement } from './is-svg-element.mjs';\n\n/**\n * Checks if an element is specifically an SVGSVGElement (the root SVG element)\n * in a way that works across iframes\n */\nfunction isSVGSVGElement(element) {\n    return isSVGElement(element) && element.tagName === \"svg\";\n}\n\nexport { isSVGSVGElement };\n//# sourceMappingURL=is-svg-svg-element.mjs.map\n","import { time } from '../frameloop/sync-time.mjs';\nimport { secondsToMilliseconds } from 'motion-utils';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n    const start = time.now();\n    const checkElapsed = ({ timestamp }) => {\n        const elapsed = timestamp - start;\n        if (elapsed >= timeout) {\n            cancelFrame(checkElapsed);\n            callback(elapsed - timeout);\n        }\n    };\n    frame.setup(checkElapsed, true);\n    return () => cancelFrame(checkElapsed);\n}\nfunction delayInSeconds(callback, timeout) {\n    return delay(callback, secondsToMilliseconds(timeout));\n}\n\nexport { delay, delayInSeconds };\n//# sourceMappingURL=delay.mjs.map\n","import { animateMotionValue } from '../interfaces/motion-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n    const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n    motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n    return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n//# sourceMappingURL=single-value.mjs.map\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n    let transform = \"\";\n    /**\n     * The translations we use to calculate are always relative to the viewport coordinate space.\n     * But when we apply scales, we also scale the coordinate space of an element and its children.\n     * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n     * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n     */\n    const xTranslate = delta.x.translate / treeScale.x;\n    const yTranslate = delta.y.translate / treeScale.y;\n    const zTranslate = latestTransform?.z || 0;\n    if (xTranslate || yTranslate || zTranslate) {\n        transform = `translate3d(${xTranslate}px, ${yTranslate}px, ${zTranslate}px) `;\n    }\n    /**\n     * Apply scale correction for the tree transform.\n     * This will apply scale to the screen-orientated axes.\n     */\n    if (treeScale.x !== 1 || treeScale.y !== 1) {\n        transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n    }\n    if (latestTransform) {\n        const { transformPerspective, rotate, rotateX, rotateY, skewX, skewY } = latestTransform;\n        if (transformPerspective)\n            transform = `perspective(${transformPerspective}px) ${transform}`;\n        if (rotate)\n            transform += `rotate(${rotate}deg) `;\n        if (rotateX)\n            transform += `rotateX(${rotateX}deg) `;\n        if (rotateY)\n            transform += `rotateY(${rotateY}deg) `;\n        if (skewX)\n            transform += `skewX(${skewX}deg) `;\n        if (skewY)\n            transform += `skewY(${skewY}deg) `;\n    }\n    /**\n     * Apply scale to match the size of the element to the size we want it.\n     * This will apply scale to the element-orientated axes.\n     */\n    const elementScaleX = delta.x.scale * treeScale.x;\n    const elementScaleY = delta.y.scale * treeScale.y;\n    if (elementScaleX !== 1 || elementScaleY !== 1) {\n        transform += `scale(${elementScaleX}, ${elementScaleY})`;\n    }\n    return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n//# sourceMappingURL=transform.mjs.map\n","import { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { createProjectionNode } from './create-projection-node.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n    attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n    measureScroll: () => ({\n        x: document.documentElement.scrollLeft || document.body?.scrollLeft || 0,\n        y: document.documentElement.scrollTop || document.body?.scrollTop || 0,\n    }),\n    checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n//# sourceMappingURL=DocumentProjectionNode.mjs.map\n","const notify = (node) => !node.isLayoutDirty && node.willUpdate(false);\nfunction nodeGroup() {\n    const nodes = new Set();\n    const subscriptions = new WeakMap();\n    const dirtyAll = () => nodes.forEach(notify);\n    return {\n        add: (node) => {\n            nodes.add(node);\n            subscriptions.set(node, node.addEventListener(\"willUpdate\", dirtyAll));\n        },\n        remove: (node) => {\n            nodes.delete(node);\n            const unsubscribe = subscriptions.get(node);\n            if (unsubscribe) {\n                unsubscribe();\n                subscriptions.delete(node);\n            }\n            dirtyAll();\n        },\n        dirty: dirtyAll,\n    };\n}\n\nexport { nodeGroup };\n//# sourceMappingURL=group.mjs.map\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n    current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n    measureScroll: (instance) => ({\n        x: instance.scrollLeft,\n        y: instance.scrollTop,\n    }),\n    defaultParent: () => {\n        if (!rootProjectionNode.current) {\n            const documentNode = new DocumentProjectionNode({});\n            documentNode.mount(window);\n            documentNode.setOptions({ layoutScroll: true });\n            rootProjectionNode.current = documentNode;\n        }\n        return rootProjectionNode.current;\n    },\n    resetTransform: (instance, value) => {\n        instance.style.transform = value !== undefined ? value : \"none\";\n    },\n    checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n//# sourceMappingURL=HTMLProjectionNode.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n    transformPagePoint: (p) => p,\n    isStatic: false,\n    reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n//# sourceMappingURL=MotionConfigContext.mjs.map\n","import * as React from 'react';\n\n/**\n * Taken from https://github.com/radix-ui/primitives/blob/main/packages/react/compose-refs/src/compose-refs.tsx\n */\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef(ref, value) {\n    if (typeof ref === \"function\") {\n        return ref(value);\n    }\n    else if (ref !== null && ref !== undefined) {\n        ref.current = value;\n    }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs(...refs) {\n    return (node) => {\n        let hasCleanup = false;\n        const cleanups = refs.map((ref) => {\n            const cleanup = setRef(ref, node);\n            if (!hasCleanup && typeof cleanup === \"function\") {\n                hasCleanup = true;\n            }\n            return cleanup;\n        });\n        // React <19 will log an error to the console if a callback ref returns a\n        // value. We don't use ref cleanups internally so this will only happen if a\n        // user's ref callback returns a value, which we only expect if they are\n        // using the cleanup functionality added in React 19.\n        if (hasCleanup) {\n            return () => {\n                for (let i = 0; i < cleanups.length; i++) {\n                    const cleanup = cleanups[i];\n                    if (typeof cleanup === \"function\") {\n                        cleanup();\n                    }\n                    else {\n                        setRef(refs[i], null);\n                    }\n                }\n            };\n        }\n    };\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs(...refs) {\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { useComposedRefs };\n//# sourceMappingURL=use-composed-ref.mjs.map\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { isHTMLElement } from 'motion-dom';\nimport * as React from 'react';\nimport { useId, useRef, useContext, useInsertionEffect } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { useComposedRefs } from '../../utils/use-composed-ref.mjs';\n\n/**\n * Measurement functionality has to be within a separate component\n * to leverage snapshot lifecycle.\n */\nclass PopChildMeasure extends React.Component {\n    getSnapshotBeforeUpdate(prevProps) {\n        const element = this.props.childRef.current;\n        if (isHTMLElement(element) && prevProps.isPresent && !this.props.isPresent && this.props.pop !== false) {\n            const parent = element.offsetParent;\n            const parentWidth = isHTMLElement(parent)\n                ? parent.offsetWidth || 0\n                : 0;\n            const parentHeight = isHTMLElement(parent)\n                ? parent.offsetHeight || 0\n                : 0;\n            const computedStyle = getComputedStyle(element);\n            const size = this.props.sizeRef.current;\n            size.height = parseFloat(computedStyle.height);\n            size.width = parseFloat(computedStyle.width);\n            size.top = element.offsetTop;\n            size.left = element.offsetLeft;\n            size.right = parentWidth - size.width - size.left;\n            size.bottom = parentHeight - size.height - size.top;\n        }\n        return null;\n    }\n    /**\n     * Required with getSnapshotBeforeUpdate to stop React complaining.\n     */\n    componentDidUpdate() { }\n    render() {\n        return this.props.children;\n    }\n}\nfunction PopChild({ children, isPresent, anchorX, anchorY, root, pop }) {\n    const id = useId();\n    const ref = useRef(null);\n    const size = useRef({\n        width: 0,\n        height: 0,\n        top: 0,\n        left: 0,\n        right: 0,\n        bottom: 0,\n    });\n    const { nonce } = useContext(MotionConfigContext);\n    /**\n     * In React 19, refs are passed via props.ref instead of element.ref.\n     * We check props.ref first (React 19) and fall back to element.ref (React 18).\n     */\n    const childRef = children.props?.ref ??\n        children?.ref;\n    const composedRef = useComposedRefs(ref, childRef);\n    /**\n     * We create and inject a style block so we can apply this explicit\n     * sizing in a non-destructive manner by just deleting the style block.\n     *\n     * We can't apply size via render as the measurement happens\n     * in getSnapshotBeforeUpdate (post-render), likewise if we apply the\n     * styles directly on the DOM node, we might be overwriting\n     * styles set via the style prop.\n     */\n    useInsertionEffect(() => {\n        const { width, height, top, left, right, bottom } = size.current;\n        if (isPresent || pop === false || !ref.current || !width || !height)\n            return;\n        const x = anchorX === \"left\" ? `left: ${left}` : `right: ${right}`;\n        const y = anchorY === \"bottom\" ? `bottom: ${bottom}` : `top: ${top}`;\n        ref.current.dataset.motionPopId = id;\n        const style = document.createElement(\"style\");\n        if (nonce)\n            style.nonce = nonce;\n        const parent = root ?? document.head;\n        parent.appendChild(style);\n        if (style.sheet) {\n            style.sheet.insertRule(`\n          [data-motion-pop-id=\"${id}\"] {\n            position: absolute !important;\n            width: ${width}px !important;\n            height: ${height}px !important;\n            ${x}px !important;\n            ${y}px !important;\n          }\n        `);\n        }\n        return () => {\n            ref.current?.removeAttribute(\"data-motion-pop-id\");\n            if (parent.contains(style)) {\n                parent.removeChild(style);\n            }\n        };\n    }, [isPresent]);\n    return (jsx(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size, pop: pop, children: pop === false\n            ? children\n            : React.cloneElement(children, { ref: composedRef }) }));\n}\n\nexport { PopChild };\n//# sourceMappingURL=PopChild.mjs.map\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useMemo } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PopChild } from './PopChild.mjs';\n\nconst PresenceChild = ({ children, initial, isPresent, onExitComplete, custom, presenceAffectsLayout, mode, anchorX, anchorY, root }) => {\n    const presenceChildren = useConstant(newChildrenMap);\n    const id = useId();\n    let isReusedContext = true;\n    let context = useMemo(() => {\n        isReusedContext = false;\n        return {\n            id,\n            initial,\n            isPresent,\n            custom,\n            onExitComplete: (childId) => {\n                presenceChildren.set(childId, true);\n                for (const isComplete of presenceChildren.values()) {\n                    if (!isComplete)\n                        return; // can stop searching when any is incomplete\n                }\n                onExitComplete && onExitComplete();\n            },\n            register: (childId) => {\n                presenceChildren.set(childId, false);\n                return () => presenceChildren.delete(childId);\n            },\n        };\n    }, [isPresent, presenceChildren, onExitComplete]);\n    /**\n     * If the presence of a child affects the layout of the components around it,\n     * we want to make a new context value to ensure they get re-rendered\n     * so they can detect that layout change.\n     */\n    if (presenceAffectsLayout && isReusedContext) {\n        context = { ...context };\n    }\n    useMemo(() => {\n        presenceChildren.forEach((_, key) => presenceChildren.set(key, false));\n    }, [isPresent]);\n    /**\n     * If there's no `motion` components to fire exit animations, we want to remove this\n     * component immediately.\n     */\n    React.useEffect(() => {\n        !isPresent &&\n            !presenceChildren.size &&\n            onExitComplete &&\n            onExitComplete();\n    }, [isPresent]);\n    children = (jsx(PopChild, { pop: mode === \"popLayout\", isPresent: isPresent, anchorX: anchorX, anchorY: anchorY, root: root, children: children }));\n    return (jsx(PresenceContext.Provider, { value: context, children: children }));\n};\nfunction newChildrenMap() {\n    return new Map();\n}\n\nexport { PresenceChild };\n//# sourceMappingURL=PresenceChild.mjs.map\n","\"use client\";\nimport { useContext, useId, useEffect, useCallback } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const [isPresent, safeToRemove] = usePresence()\n *\n *   useEffect(() => {\n *     !isPresent && setTimeout(safeToRemove, 1000)\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed from the tree,\n * but `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence(subscribe = true) {\n    const context = useContext(PresenceContext);\n    if (context === null)\n        return [true, null];\n    const { isPresent, onExitComplete, register } = context;\n    // It's safe to call the following hooks conditionally (after an early return) because the context will always\n    // either be null or non-null for the lifespan of the component.\n    const id = useId();\n    useEffect(() => {\n        if (subscribe) {\n            return register(id);\n        }\n    }, [subscribe]);\n    const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id), [id, onExitComplete, subscribe]);\n    return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const isPresent = useIsPresent()\n *\n *   useEffect(() => {\n *     !isPresent && console.log(\"I've been removed!\")\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * @public\n */\nfunction useIsPresent() {\n    return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n    return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\n//# sourceMappingURL=use-presence.mjs.map\n","import { Children, isValidElement } from 'react';\n\nconst getChildKey = (child) => child.key || \"\";\nfunction onlyElements(children) {\n    const filtered = [];\n    // We use forEach here instead of map as map mutates the component key by preprending `.$`\n    Children.forEach(children, (child) => {\n        if (isValidElement(child))\n            filtered.push(child);\n    });\n    return filtered;\n}\n\nexport { getChildKey, onlyElements };\n//# sourceMappingURL=utils.mjs.map\n","\"use client\";\nimport { jsx, Fragment } from 'react/jsx-runtime';\nimport { useMemo, useRef, useState, useContext } from 'react';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { usePresence } from './use-presence.mjs';\nimport { onlyElements, getChildKey } from './utils.mjs';\n\n/**\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\n *\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\n *\n * Any `motion` components that have an `exit` property defined will animate out when removed from\n * the tree.\n *\n * ```jsx\n * import { motion, AnimatePresence } from 'framer-motion'\n *\n * export const Items = ({ items }) => (\n *   <AnimatePresence>\n *     {items.map(item => (\n *       <motion.div\n *         key={item.id}\n *         initial={{ opacity: 0 }}\n *         animate={{ opacity: 1 }}\n *         exit={{ opacity: 0 }}\n *       />\n *     ))}\n *   </AnimatePresence>\n * )\n * ```\n *\n * You can sequence exit animations throughout a tree using variants.\n *\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\n * once all `motion` components have finished animating out. Likewise, any components using\n * `usePresence` all need to call `safeToRemove`.\n *\n * @public\n */\nconst AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = \"sync\", propagate = false, anchorX = \"left\", anchorY = \"top\", root }) => {\n    const [isParentPresent, safeToRemove] = usePresence(propagate);\n    /**\n     * Filter any children that aren't ReactElements. We can only track components\n     * between renders with a props.key.\n     */\n    const presentChildren = useMemo(() => onlyElements(children), [children]);\n    /**\n     * Track the keys of the currently rendered children. This is used to\n     * determine which children are exiting.\n     */\n    const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);\n    /**\n     * If `initial={false}` we only want to pass this to components in the first render.\n     */\n    const isInitialRender = useRef(true);\n    /**\n     * A ref containing the currently present children. When all exit animations\n     * are complete, we use this to re-render the component with the latest children\n     * *committed* rather than the latest children *rendered*.\n     */\n    const pendingPresentChildren = useRef(presentChildren);\n    /**\n     * Track which exiting children have finished animating out.\n     */\n    const exitComplete = useConstant(() => new Map());\n    /**\n     * Track which components are currently processing exit to prevent duplicate processing.\n     */\n    const exitingComponents = useRef(new Set());\n    /**\n     * Save children to render as React state. To ensure this component is concurrent-safe,\n     * we check for exiting children via an effect.\n     */\n    const [diffedChildren, setDiffedChildren] = useState(presentChildren);\n    const [renderedChildren, setRenderedChildren] = useState(presentChildren);\n    useIsomorphicLayoutEffect(() => {\n        isInitialRender.current = false;\n        pendingPresentChildren.current = presentChildren;\n        /**\n         * Update complete status of exiting children.\n         */\n        for (let i = 0; i < renderedChildren.length; i++) {\n            const key = getChildKey(renderedChildren[i]);\n            if (!presentKeys.includes(key)) {\n                if (exitComplete.get(key) !== true) {\n                    exitComplete.set(key, false);\n                }\n            }\n            else {\n                exitComplete.delete(key);\n                exitingComponents.current.delete(key);\n            }\n        }\n    }, [renderedChildren, presentKeys.length, presentKeys.join(\"-\")]);\n    const exitingChildren = [];\n    if (presentChildren !== diffedChildren) {\n        let nextChildren = [...presentChildren];\n        /**\n         * Loop through all the currently rendered components and decide which\n         * are exiting.\n         */\n        for (let i = 0; i < renderedChildren.length; i++) {\n            const child = renderedChildren[i];\n            const key = getChildKey(child);\n            if (!presentKeys.includes(key)) {\n                nextChildren.splice(i, 0, child);\n                exitingChildren.push(child);\n            }\n        }\n        /**\n         * If we're in \"wait\" mode, and we have exiting children, we want to\n         * only render these until they've all exited.\n         */\n        if (mode === \"wait\" && exitingChildren.length) {\n            nextChildren = exitingChildren;\n        }\n        setRenderedChildren(onlyElements(nextChildren));\n        setDiffedChildren(presentChildren);\n        /**\n         * Early return to ensure once we've set state with the latest diffed\n         * children, we can immediately re-render.\n         */\n        return null;\n    }\n    if (process.env.NODE_ENV !== \"production\" &&\n        mode === \"wait\" &&\n        renderedChildren.length > 1) {\n        console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to \"wait\". This will lead to odd visual behaviour.`);\n    }\n    /**\n     * If we've been provided a forceRender function by the LayoutGroupContext,\n     * we can use it to force a re-render amongst all surrounding components once\n     * all components have finished animating out.\n     */\n    const { forceRender } = useContext(LayoutGroupContext);\n    return (jsx(Fragment, { children: renderedChildren.map((child) => {\n            const key = getChildKey(child);\n            const isPresent = propagate && !isParentPresent\n                ? false\n                : presentChildren === renderedChildren ||\n                    presentKeys.includes(key);\n            const onExit = () => {\n                if (exitingComponents.current.has(key)) {\n                    return;\n                }\n                if (exitComplete.has(key)) {\n                    exitingComponents.current.add(key);\n                    exitComplete.set(key, true);\n                }\n                else {\n                    return;\n                }\n                let isEveryExitComplete = true;\n                exitComplete.forEach((isExitComplete) => {\n                    if (!isExitComplete)\n                        isEveryExitComplete = false;\n                });\n                if (isEveryExitComplete) {\n                    forceRender?.();\n                    setRenderedChildren(pendingPresentChildren.current);\n                    propagate && safeToRemove?.();\n                    onExitComplete && onExitComplete();\n                }\n            };\n            return (jsx(PresenceChild, { isPresent: isPresent, initial: !isInitialRender.current || initial\n                    ? undefined\n                    : false, custom: custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode, root: root, onExitComplete: isPresent ? undefined : onExit, anchorX: anchorX, anchorY: anchorY, children: child }, key));\n        }) }));\n};\n\nexport { AnimatePresence };\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * Note: Still used by components generated by old versions of Framer\n *\n * @deprecated\n */\nconst DeprecatedLayoutGroupContext = createContext(null);\n\nexport { DeprecatedLayoutGroupContext };\n//# sourceMappingURL=DeprecatedLayoutGroupContext.mjs.map\n","\"use client\";\nimport { frame } from 'motion-dom';\nimport { useState, useCallback } from 'react';\nimport { useIsMounted } from './use-is-mounted.mjs';\n\nfunction useForceUpdate() {\n    const isMounted = useIsMounted();\n    const [forcedRenderCount, setForcedRenderCount] = useState(0);\n    const forceRender = useCallback(() => {\n        isMounted.current && setForcedRenderCount(forcedRenderCount + 1);\n    }, [forcedRenderCount]);\n    /**\n     * Defer this to the end of the next animation frame in case there are multiple\n     * synchronous calls.\n     */\n    const deferredForceRender = useCallback(() => frame.postRender(forceRender), [forceRender]);\n    return [deferredForceRender, forcedRenderCount];\n}\n\nexport { useForceUpdate };\n//# sourceMappingURL=use-force-update.mjs.map\n","\"use client\";\nimport { useRef } from 'react';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-effect.mjs';\n\nfunction useIsMounted() {\n    const isMounted = useRef(false);\n    useIsomorphicLayoutEffect(() => {\n        isMounted.current = true;\n        return () => {\n            isMounted.current = false;\n        };\n    }, []);\n    return isMounted;\n}\n\nexport { useIsMounted };\n//# sourceMappingURL=use-is-mounted.mjs.map\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { useContext, useRef, useMemo } from 'react';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { DeprecatedLayoutGroupContext } from '../../context/DeprecatedLayoutGroupContext.mjs';\nimport { useForceUpdate } from '../../utils/use-force-update.mjs';\nimport { nodeGroup } from 'motion-dom';\n\nconst shouldInheritGroup = (inherit) => inherit === true;\nconst shouldInheritId = (inherit) => shouldInheritGroup(inherit === true) || inherit === \"id\";\nconst LayoutGroup = ({ children, id, inherit = true }) => {\n    const layoutGroupContext = useContext(LayoutGroupContext);\n    const deprecatedLayoutGroupContext = useContext(DeprecatedLayoutGroupContext);\n    const [forceRender, key] = useForceUpdate();\n    const context = useRef(null);\n    const upstreamId = layoutGroupContext.id || deprecatedLayoutGroupContext;\n    if (context.current === null) {\n        if (shouldInheritId(inherit) && upstreamId) {\n            id = id ? upstreamId + \"-\" + id : upstreamId;\n        }\n        context.current = {\n            id,\n            group: shouldInheritGroup(inherit)\n                ? layoutGroupContext.group || nodeGroup()\n                : nodeGroup(),\n        };\n    }\n    const memoizedContext = useMemo(() => ({ ...context.current, forceRender }), [key]);\n    return (jsx(LayoutGroupContext.Provider, { value: memoizedContext, children: children }));\n};\n\nexport { LayoutGroup };\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n//# sourceMappingURL=LazyContext.mjs.map\n","import { getFeatureDefinitions, setFeatureDefinitions } from 'motion-dom';\n\nconst featureProps = {\n    animation: [\n        \"animate\",\n        \"variants\",\n        \"whileHover\",\n        \"whileTap\",\n        \"exit\",\n        \"whileInView\",\n        \"whileFocus\",\n        \"whileDrag\",\n    ],\n    exit: [\"exit\"],\n    drag: [\"drag\", \"dragControls\"],\n    focus: [\"whileFocus\"],\n    hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n    tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n    pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n    inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n    layout: [\"layout\", \"layoutId\"],\n};\nlet isInitialized = false;\n/**\n * Initialize feature definitions with isEnabled checks.\n * This must be called before any motion components are rendered.\n */\nfunction initFeatureDefinitions() {\n    if (isInitialized)\n        return;\n    const initialFeatureDefinitions = {};\n    for (const key in featureProps) {\n        initialFeatureDefinitions[key] = {\n            isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n        };\n    }\n    setFeatureDefinitions(initialFeatureDefinitions);\n    isInitialized = true;\n}\n/**\n * Get the current feature definitions, initializing if needed.\n */\nfunction getInitializedFeatureDefinitions() {\n    initFeatureDefinitions();\n    return getFeatureDefinitions();\n}\n\nexport { getInitializedFeatureDefinitions, initFeatureDefinitions };\n//# sourceMappingURL=definitions.mjs.map\n","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n    \"animate\",\n    \"exit\",\n    \"variants\",\n    \"initial\",\n    \"style\",\n    \"values\",\n    \"variants\",\n    \"transition\",\n    \"transformTemplate\",\n    \"custom\",\n    \"inherit\",\n    \"onBeforeLayoutMeasure\",\n    \"onAnimationStart\",\n    \"onAnimationComplete\",\n    \"onUpdate\",\n    \"onDragStart\",\n    \"onDrag\",\n    \"onDragEnd\",\n    \"onMeasureDragConstraints\",\n    \"onDirectionLock\",\n    \"onDragTransitionEnd\",\n    \"_dragX\",\n    \"_dragY\",\n    \"onHoverStart\",\n    \"onHoverEnd\",\n    \"onViewportEnter\",\n    \"onViewportLeave\",\n    \"globalTapTarget\",\n    \"propagate\",\n    \"ignoreStrict\",\n    \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nfunction isValidMotionProp(key) {\n    return (key.startsWith(\"while\") ||\n        (key.startsWith(\"drag\") && key !== \"draggable\") ||\n        key.startsWith(\"layout\") ||\n        key.startsWith(\"onTap\") ||\n        key.startsWith(\"onPan\") ||\n        key.startsWith(\"onLayout\") ||\n        validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n//# sourceMappingURL=valid-prop.mjs.map\n","import { isMotionValue } from 'motion-dom';\nimport { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n    if (typeof isValidProp !== \"function\")\n        return;\n    // Explicitly filter our events\n    shouldForward = (key) => key.startsWith(\"on\") ? !isValidMotionProp(key) : isValidProp(key);\n}\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\ntry {\n    /**\n     * We attempt to import this package but require won't be defined in esm environments, in that case\n     * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed\n     * in favour of explicit injection.\n     *\n     * String concatenation prevents bundlers like webpack (e.g. Storybook)\n     * from statically resolving this optional dependency at build time.\n     */\n    const emotionPkg = \"@emotion/is-prop-\" + \"valid\";\n    loadExternalIsValidProp(require(emotionPkg).default);\n}\ncatch {\n    // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction filterProps(props, isDom, forwardMotionProps) {\n    const filteredProps = {};\n    for (const key in props) {\n        /**\n         * values is considered a valid prop by Emotion, so if it's present\n         * this will be rendered out to the DOM unless explicitly filtered.\n         *\n         * We check the type as it could be used with the `feColorMatrix`\n         * element, which we support.\n         */\n        if (key === \"values\" && typeof props.values === \"object\")\n            continue;\n        if (isMotionValue(props[key]))\n            continue;\n        if (shouldForward(key) ||\n            (forwardMotionProps === true && isValidMotionProp(key)) ||\n            (!isDom && !isValidMotionProp(key)) ||\n            // If trying to use native HTML drag events, forward drag listeners\n            (props[\"draggable\"] &&\n                key.startsWith(\"onDrag\"))) {\n            filteredProps[key] =\n                props[key];\n        }\n    }\n    return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n//# sourceMappingURL=filter-props.mjs.map\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { useContext, useMemo } from 'react';\nimport { resolveTransition } from 'motion-dom';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { loadExternalIsValidProp } from '../../render/dom/utils/filter-props.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\n\n/**\n * `MotionConfig` is used to set configuration options for all children `motion` components.\n *\n * ```jsx\n * import { motion, MotionConfig } from \"framer-motion\"\n *\n * export function App() {\n *   return (\n *     <MotionConfig transition={{ type: \"spring\" }}>\n *       <motion.div animate={{ x: 100 }} />\n *     </MotionConfig>\n *   )\n * }\n * ```\n *\n * @public\n */\nfunction MotionConfig({ children, isValidProp, ...config }) {\n    isValidProp && loadExternalIsValidProp(isValidProp);\n    /**\n     * Inherit props from any parent MotionConfig components\n     */\n    const parentConfig = useContext(MotionConfigContext);\n    config = { ...parentConfig, ...config };\n    config.transition = resolveTransition(config.transition, parentConfig.transition);\n    /**\n     * Don't allow isStatic to change between renders as it affects how many hooks\n     * motion components fire.\n     */\n    config.isStatic = useConstant(() => config.isStatic);\n    /**\n     * Creating a new config context object will re-render every `motion` component\n     * every time it renders. So we only want to create a new one sparingly.\n     */\n    const context = useMemo(() => config, [\n        JSON.stringify(config.transition),\n        config.transformPagePoint,\n        config.reducedMotion,\n        config.skipAnimations,\n    ]);\n    return (jsx(MotionConfigContext.Provider, { value: context, children: children }));\n}\n\nexport { MotionConfig };\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\nconst MotionContext = /* @__PURE__ */ createContext({});\n\nexport { MotionContext };\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nimport { useContext, useMemo } from 'react';\nimport { MotionContext } from './index.mjs';\nimport { getCurrentTreeVariants } from './utils.mjs';\n\nfunction useCreateMotionContext(props) {\n    const { initial, animate } = getCurrentTreeVariants(props, useContext(MotionContext));\n    return useMemo(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n    return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n\nexport { useCreateMotionContext };\n//# sourceMappingURL=create.mjs.map\n","import { isControllingVariants, isVariantLabel } from 'motion-dom';\n\nfunction getCurrentTreeVariants(props, context) {\n    if (isControllingVariants(props)) {\n        const { initial, animate } = props;\n        return {\n            initial: initial === false || isVariantLabel(initial)\n                ? initial\n                : undefined,\n            animate: isVariantLabel(animate) ? animate : undefined,\n        };\n    }\n    return props.inherit !== false ? context : {};\n}\n\nexport { getCurrentTreeVariants };\n//# sourceMappingURL=utils.mjs.map\n","const createHtmlRenderState = () => ({\n    style: {},\n    transform: {},\n    transformOrigin: {},\n    vars: {},\n});\n\nexport { createHtmlRenderState };\n//# sourceMappingURL=create-render-state.mjs.map\n","\"use client\";\nimport { isMotionValue, isForcedMotionValue, buildHTMLStyles } from 'motion-dom';\nimport { useMemo } from 'react';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction copyRawValuesOnly(target, source, props) {\n    for (const key in source) {\n        if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n            target[key] = source[key];\n        }\n    }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState) {\n    return useMemo(() => {\n        const state = createHtmlRenderState();\n        buildHTMLStyles(state, visualState, transformTemplate);\n        return Object.assign({}, state.vars, state.style);\n    }, [visualState]);\n}\nfunction useStyle(props, visualState) {\n    const styleProp = props.style || {};\n    const style = {};\n    /**\n     * Copy non-Motion Values straight into style\n     */\n    copyRawValuesOnly(style, styleProp, props);\n    Object.assign(style, useInitialMotionValues(props, visualState));\n    return style;\n}\nfunction useHTMLProps(props, visualState) {\n    // The `any` isn't ideal but it is the type of createElement props argument\n    const htmlProps = {};\n    const style = useStyle(props, visualState);\n    if (props.drag && props.dragListener !== false) {\n        // Disable the ghost element when a user drags\n        htmlProps.draggable = false;\n        // Disable text selection\n        style.userSelect =\n            style.WebkitUserSelect =\n                style.WebkitTouchCallout =\n                    \"none\";\n        // Disable scrolling on the draggable direction\n        style.touchAction =\n            props.drag === true\n                ? \"none\"\n                : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n    }\n    if (props.tabIndex === undefined &&\n        (props.onTap || props.onTapStart || props.whileTap)) {\n        htmlProps.tabIndex = 0;\n    }\n    htmlProps.style = style;\n    return htmlProps;\n}\n\nexport { copyRawValuesOnly, useHTMLProps };\n//# sourceMappingURL=use-props.mjs.map\n","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n    ...createHtmlRenderState(),\n    attrs: {},\n});\n\nexport { createSvgRenderState };\n//# sourceMappingURL=create-render-state.mjs.map\n","\"use client\";\nimport { buildSVGAttrs, isSVGTag } from 'motion-dom';\nimport { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n    const visualProps = useMemo(() => {\n        const state = createSvgRenderState();\n        buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate, props.style);\n        return {\n            ...state.attrs,\n            style: { ...state.style },\n        };\n    }, [visualState]);\n    if (props.style) {\n        const rawStyles = {};\n        copyRawValuesOnly(rawStyles, props.style, props);\n        visualProps.style = { ...rawStyles, ...visualProps.style };\n    }\n    return visualProps;\n}\n\nexport { useSVGProps };\n//# sourceMappingURL=use-props.mjs.map\n","/**\n * We keep these listed separately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst lowercaseSVGElements = [\n    \"animate\",\n    \"circle\",\n    \"defs\",\n    \"desc\",\n    \"ellipse\",\n    \"g\",\n    \"image\",\n    \"line\",\n    \"filter\",\n    \"marker\",\n    \"mask\",\n    \"metadata\",\n    \"path\",\n    \"pattern\",\n    \"polygon\",\n    \"polyline\",\n    \"rect\",\n    \"stop\",\n    \"switch\",\n    \"symbol\",\n    \"svg\",\n    \"text\",\n    \"tspan\",\n    \"use\",\n    \"view\",\n];\n\nexport { lowercaseSVGElements };\n//# sourceMappingURL=lowercase-elements.mjs.map\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction isSVGComponent(Component) {\n    if (\n    /**\n     * If it's not a string, it's a custom React component. Currently we only support\n     * HTML custom React components.\n     */\n    typeof Component !== \"string\" ||\n        /**\n         * If it contains a dash, the element is a custom HTML webcomponent.\n         */\n        Component.includes(\"-\")) {\n        return false;\n    }\n    else if (\n    /**\n     * If it's in our list of lowercase SVG tags, it's an SVG component\n     */\n    lowercaseSVGElements.indexOf(Component) > -1 ||\n        /**\n         * If it contains a capital letter, it's an SVG component\n         */\n        /[A-Z]/u.test(Component)) {\n        return true;\n    }\n    return false;\n}\n\nexport { isSVGComponent };\n//# sourceMappingURL=is-svg-component.mjs.map\n","\"use client\";\nimport { isMotionValue } from 'motion-dom';\nimport { Fragment, useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nfunction useRender(Component, props, ref, { latestValues, }, isStatic, forwardMotionProps = false, isSVG) {\n    const useVisualProps = (isSVG ?? isSVGComponent(Component)) ? useSVGProps : useHTMLProps;\n    const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n    const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n    const elementProps = Component !== Fragment ? { ...filteredProps, ...visualProps, ref } : {};\n    /**\n     * If component has been handed a motion value as its child,\n     * memoise its initial value and render that. Subsequent updates\n     * will be handled by the onChange handler\n     */\n    const { children } = props;\n    const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n    return createElement(Component, {\n        ...elementProps,\n        children: renderedChildren,\n    });\n}\n\nexport { useRender };\n//# sourceMappingURL=use-render.mjs.map\n","\"use client\";\nimport { resolveMotionValue, isControllingVariants, isVariantNode, isAnimationControls, resolveVariantFromProps } from 'motion-dom';\nimport { useContext } from 'react';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, }, props, context, presenceContext) {\n    const state = {\n        latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n        renderState: createRenderState(),\n    };\n    return state;\n}\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n    const values = {};\n    const motionValues = scrapeMotionValues(props, {});\n    for (const key in motionValues) {\n        values[key] = resolveMotionValue(motionValues[key]);\n    }\n    let { initial, animate } = props;\n    const isControllingVariants$1 = isControllingVariants(props);\n    const isVariantNode$1 = isVariantNode(props);\n    if (context &&\n        isVariantNode$1 &&\n        !isControllingVariants$1 &&\n        props.inherit !== false) {\n        if (initial === undefined)\n            initial = context.initial;\n        if (animate === undefined)\n            animate = context.animate;\n    }\n    let isInitialAnimationBlocked = presenceContext\n        ? presenceContext.initial === false\n        : false;\n    isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n    const variantToSet = isInitialAnimationBlocked ? animate : initial;\n    if (variantToSet &&\n        typeof variantToSet !== \"boolean\" &&\n        !isAnimationControls(variantToSet)) {\n        const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n        for (let i = 0; i < list.length; i++) {\n            const resolved = resolveVariantFromProps(props, list[i]);\n            if (resolved) {\n                const { transitionEnd, transition, ...target } = resolved;\n                for (const key in target) {\n                    let valueTarget = target[key];\n                    if (Array.isArray(valueTarget)) {\n                        /**\n                         * Take final keyframe if the initial animation is blocked because\n                         * we want to initialise at the end of that blocked animation.\n                         */\n                        const index = isInitialAnimationBlocked\n                            ? valueTarget.length - 1\n                            : 0;\n                        valueTarget = valueTarget[index];\n                    }\n                    if (valueTarget !== null) {\n                        values[key] = valueTarget;\n                    }\n                }\n                for (const key in transitionEnd) {\n                    values[key] = transitionEnd[key];\n                }\n            }\n        }\n    }\n    return values;\n}\nconst makeUseVisualState = (config) => (props, isStatic) => {\n    const context = useContext(MotionContext);\n    const presenceContext = useContext(PresenceContext);\n    const make = () => makeState(config, props, context, presenceContext);\n    return isStatic ? make() : useConstant(make);\n};\n\nexport { makeUseVisualState };\n//# sourceMappingURL=use-visual-state.mjs.map\n","\"use client\";\nimport { scrapeHTMLMotionValuesFromProps } from 'motion-dom';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nconst useHTMLVisualState = /*@__PURE__*/ makeUseVisualState({\n    scrapeMotionValuesFromProps: scrapeHTMLMotionValuesFromProps,\n    createRenderState: createHtmlRenderState,\n});\n\nexport { useHTMLVisualState };\n//# sourceMappingURL=use-html-visual-state.mjs.map\n","\"use client\";\nimport { scrapeSVGMotionValuesFromProps } from 'motion-dom';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\n\nconst useSVGVisualState = /*@__PURE__*/ makeUseVisualState({\n    scrapeMotionValuesFromProps: scrapeSVGMotionValuesFromProps,\n    createRenderState: createSvgRenderState,\n});\n\nexport { useSVGVisualState };\n//# sourceMappingURL=use-svg-visual-state.mjs.map\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n//# sourceMappingURL=symbol.mjs.map\n","\"use client\";\nimport { useRef, useInsertionEffect, useCallback } from 'react';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n    /**\n     * Store externalRef in a ref to avoid including it in the useCallback\n     * dependency array. Including externalRef in dependencies causes issues\n     * with libraries like Radix UI that create new callback refs on each render\n     * when using asChild - this would cause the callback to be recreated,\n     * triggering element remounts and breaking AnimatePresence exit animations.\n     */\n    const externalRefContainer = useRef(externalRef);\n    useInsertionEffect(() => {\n        externalRefContainer.current = externalRef;\n    });\n    // Store cleanup function returned by callback refs (React 19 feature)\n    const refCleanup = useRef(null);\n    return useCallback((instance) => {\n        if (instance) {\n            visualState.onMount?.(instance);\n        }\n        const ref = externalRefContainer.current;\n        if (typeof ref === \"function\") {\n            if (instance) {\n                const cleanup = ref(instance);\n                if (typeof cleanup === \"function\") {\n                    refCleanup.current = cleanup;\n                }\n            }\n            else if (refCleanup.current) {\n                refCleanup.current();\n                refCleanup.current = null;\n            }\n            else {\n                ref(instance);\n            }\n        }\n        else if (ref) {\n            ref.current = instance;\n        }\n        if (visualElement) {\n            instance ? visualElement.mount(instance) : visualElement.unmount();\n        }\n    }, [visualElement]);\n}\n\nexport { useMotionRef };\n//# sourceMappingURL=use-motion-ref.mjs.map\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n//# sourceMappingURL=SwitchLayoutGroupContext.mjs.map\n","function isRefObject(ref) {\n    return (ref &&\n        typeof ref === \"object\" &&\n        Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n//# sourceMappingURL=is-ref-object.mjs.map\n","\"use client\";\nimport { optimizedAppearDataAttribute } from 'motion-dom';\nimport { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../context/SwitchLayoutGroupContext.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor, isSVG) {\n    const { visualElement: parent } = useContext(MotionContext);\n    const lazyContext = useContext(LazyContext);\n    const presenceContext = useContext(PresenceContext);\n    const motionConfig = useContext(MotionConfigContext);\n    const reducedMotionConfig = motionConfig.reducedMotion;\n    const skipAnimations = motionConfig.skipAnimations;\n    const visualElementRef = useRef(null);\n    /**\n     * Track whether the component has been through React's commit phase.\n     * Used to detect when LazyMotion features load after the component has mounted.\n     */\n    const hasMountedOnce = useRef(false);\n    /**\n     * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n     */\n    createVisualElement =\n        createVisualElement ||\n            lazyContext.renderer;\n    if (!visualElementRef.current && createVisualElement) {\n        visualElementRef.current = createVisualElement(Component, {\n            visualState,\n            parent,\n            props,\n            presenceContext,\n            blockInitialAnimation: presenceContext\n                ? presenceContext.initial === false\n                : false,\n            reducedMotionConfig,\n            skipAnimations,\n            isSVG,\n        });\n        /**\n         * If the component has already mounted before features loaded (e.g. via\n         * LazyMotion with async feature loading), we need to force the initial\n         * animation to run. Otherwise state changes that occurred before features\n         * loaded will be lost and the element will snap to its final state.\n         */\n        if (hasMountedOnce.current && visualElementRef.current) {\n            visualElementRef.current.manuallyAnimateOnMount = true;\n        }\n    }\n    const visualElement = visualElementRef.current;\n    /**\n     * Load Motion gesture and animation features. These are rendered as renderless\n     * components so each feature can optionally make use of React lifecycle methods.\n     */\n    const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n    if (visualElement &&\n        !visualElement.projection &&\n        ProjectionNodeConstructor &&\n        (visualElement.type === \"html\" || visualElement.type === \"svg\")) {\n        createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);\n    }\n    const isMounted = useRef(false);\n    useInsertionEffect(() => {\n        /**\n         * Check the component has already mounted before calling\n         * `update` unnecessarily. This ensures we skip the initial update.\n         */\n        if (visualElement && isMounted.current) {\n            visualElement.update(props, presenceContext);\n        }\n    });\n    /**\n     * Cache this value as we want to know whether HandoffAppearAnimations\n     * was present on initial render - it will be deleted after this.\n     */\n    const optimisedAppearId = props[optimizedAppearDataAttribute];\n    const wantsHandoff = useRef(Boolean(optimisedAppearId) &&\n        typeof window !== \"undefined\" &&\n        !window.MotionHandoffIsComplete?.(optimisedAppearId) &&\n        window.MotionHasOptimisedAnimation?.(optimisedAppearId));\n    useIsomorphicLayoutEffect(() => {\n        /**\n         * Track that this component has mounted. This is used to detect when\n         * LazyMotion features load after the component has already committed.\n         */\n        hasMountedOnce.current = true;\n        if (!visualElement)\n            return;\n        isMounted.current = true;\n        window.MotionIsMounted = true;\n        visualElement.updateFeatures();\n        visualElement.scheduleRenderMicrotask();\n        /**\n         * Ideally this function would always run in a useEffect.\n         *\n         * However, if we have optimised appear animations to handoff from,\n         * it needs to happen synchronously to ensure there's no flash of\n         * incorrect styles in the event of a hydration error.\n         *\n         * So if we detect a situtation where optimised appear animations\n         * are running, we use useLayoutEffect to trigger animations.\n         */\n        if (wantsHandoff.current && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n    });\n    useEffect(() => {\n        if (!visualElement)\n            return;\n        if (!wantsHandoff.current && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n        if (wantsHandoff.current) {\n            // This ensures all future calls to animateChanges() in this component will run in useEffect\n            queueMicrotask(() => {\n                window.MotionHandoffMarkAsComplete?.(optimisedAppearId);\n            });\n            wantsHandoff.current = false;\n        }\n        /**\n         * Now we've finished triggering animations for this element we\n         * can wipe the enteringChildren set for the next render.\n         */\n        visualElement.enteringChildren = undefined;\n    });\n    return visualElement;\n}\nfunction createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {\n    const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, layoutAnchor, layoutCrossfade, } = props;\n    visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props[\"data-framer-portal-id\"]\n        ? undefined\n        : getClosestProjectingNode(visualElement.parent));\n    visualElement.projection.setOptions({\n        layoutId,\n        layout,\n        alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),\n        visualElement,\n        /**\n         * TODO: Update options in an effect. This could be tricky as it'll be too late\n         * to update by the time layout animations run.\n         * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n         * ensuring it gets called if there's no potential layout animations.\n         *\n         */\n        animationType: typeof layout === \"string\" ? layout : \"both\",\n        initialPromotionConfig,\n        crossfade: layoutCrossfade,\n        layoutScroll,\n        layoutRoot,\n        layoutAnchor,\n    });\n}\nfunction getClosestProjectingNode(visualElement) {\n    if (!visualElement)\n        return undefined;\n    return visualElement.options.allowProjection !== false\n        ? visualElement.projection\n        : getClosestProjectingNode(visualElement.parent);\n}\n\nexport { useVisualElement };\n//# sourceMappingURL=use-visual-element.mjs.map\n","\"use client\";\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { warning, invariant } from 'motion-utils';\nimport { forwardRef, useContext } from 'react';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { useRender } from '../render/dom/use-render.mjs';\nimport { isSVGComponent } from '../render/dom/utils/is-svg-component.mjs';\nimport { useHTMLVisualState } from '../render/html/use-html-visual-state.mjs';\nimport { useSVGVisualState } from '../render/svg/use-svg-visual-state.mjs';\nimport { getInitializedFeatureDefinitions } from './features/definitions.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\n\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nfunction createMotionComponent(Component, { forwardMotionProps = false, type } = {}, preloadedFeatures, createVisualElement) {\n    preloadedFeatures && loadFeatures(preloadedFeatures);\n    /**\n     * Determine whether to use SVG or HTML rendering based on:\n     * 1. Explicit `type` option (highest priority)\n     * 2. Auto-detection via `isSVGComponent`\n     */\n    const isSVG = type ? type === \"svg\" : isSVGComponent(Component);\n    const useVisualState = isSVG ? useSVGVisualState : useHTMLVisualState;\n    function MotionDOMComponent(props, externalRef) {\n        /**\n         * If we need to measure the element we load this functionality in a\n         * separate class component in order to gain access to getSnapshotBeforeUpdate.\n         */\n        let MeasureLayout;\n        const configAndProps = {\n            ...useContext(MotionConfigContext),\n            ...props,\n            layoutId: useLayoutId(props),\n        };\n        const { isStatic } = configAndProps;\n        const context = useCreateMotionContext(props);\n        const visualState = useVisualState(props, isStatic);\n        if (!isStatic && typeof window !== \"undefined\") {\n            useStrictMode(configAndProps, preloadedFeatures);\n            const layoutProjection = getProjectionFunctionality(configAndProps);\n            MeasureLayout = layoutProjection.MeasureLayout;\n            /**\n             * Create a VisualElement for this component. A VisualElement provides a common\n             * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n             * providing a way of rendering to these APIs outside of the React render loop\n             * for more performant animations and interactions\n             */\n            context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement, layoutProjection.ProjectionNode, isSVG);\n        }\n        /**\n         * The mount order and hierarchy is specific to ensure our element ref\n         * is hydrated by the time features fire their effects.\n         */\n        return (jsxs(MotionContext.Provider, { value: context, children: [MeasureLayout && context.visualElement ? (jsx(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null, useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, forwardMotionProps, isSVG)] }));\n    }\n    MotionDOMComponent.displayName = `motion.${typeof Component === \"string\"\n        ? Component\n        : `create(${Component.displayName ?? Component.name ?? \"\"})`}`;\n    const ForwardRefMotionComponent = forwardRef(MotionDOMComponent);\n    ForwardRefMotionComponent[motionComponentSymbol] = Component;\n    return ForwardRefMotionComponent;\n}\nfunction useLayoutId({ layoutId }) {\n    const layoutGroupId = useContext(LayoutGroupContext).id;\n    return layoutGroupId && layoutId !== undefined\n        ? layoutGroupId + \"-\" + layoutId\n        : layoutId;\n}\nfunction useStrictMode(configAndProps, preloadedFeatures) {\n    const isStrict = useContext(LazyContext).strict;\n    /**\n     * If we're in development mode, check to make sure we're not rendering a motion component\n     * as a child of LazyMotion, as this will break the file-size benefits of using it.\n     */\n    if (process.env.NODE_ENV !== \"production\" &&\n        preloadedFeatures &&\n        isStrict) {\n        const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n        configAndProps.ignoreStrict\n            ? warning(false, strictMessage, \"lazy-strict-mode\")\n            : invariant(false, strictMessage, \"lazy-strict-mode\");\n    }\n}\nfunction getProjectionFunctionality(props) {\n    const featureDefinitions = getInitializedFeatureDefinitions();\n    const { drag, layout } = featureDefinitions;\n    if (!drag && !layout)\n        return {};\n    const combined = { ...drag, ...layout };\n    return {\n        MeasureLayout: drag?.isEnabled(props) || layout?.isEnabled(props)\n            ? combined.MeasureLayout\n            : undefined,\n        ProjectionNode: combined.ProjectionNode,\n    };\n}\n\nexport { createMotionComponent };\n//# sourceMappingURL=index.mjs.map\n","import { setFeatureDefinitions } from 'motion-dom';\nimport { getInitializedFeatureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n    const featureDefinitions = getInitializedFeatureDefinitions();\n    for (const key in features) {\n        featureDefinitions[key] = {\n            ...featureDefinitions[key],\n            ...features[key],\n        };\n    }\n    setFeatureDefinitions(featureDefinitions);\n}\n\nexport { loadFeatures };\n//# sourceMappingURL=load-features.mjs.map\n","import { warnOnce } from 'motion-utils';\nimport { createMotionComponent } from '../../motion/index.mjs';\n\nfunction createMotionProxy(preloadedFeatures, createVisualElement) {\n    if (typeof Proxy === \"undefined\") {\n        return createMotionComponent;\n    }\n    /**\n     * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n     * Rather than generating them anew every render.\n     */\n    const componentCache = new Map();\n    const factory = (Component, options) => {\n        return createMotionComponent(Component, options, preloadedFeatures, createVisualElement);\n    };\n    /**\n     * Support for deprecated`motion(Component)` pattern\n     */\n    const deprecatedFactoryFunction = (Component, options) => {\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, \"motion() is deprecated. Use motion.create() instead.\");\n        }\n        return factory(Component, options);\n    };\n    return new Proxy(deprecatedFactoryFunction, {\n        /**\n         * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n         * The prop name is passed through as `key` and we can use that to generate a `motion`\n         * DOM component with that name.\n         */\n        get: (_target, key) => {\n            if (key === \"create\")\n                return factory;\n            /**\n             * If this element doesn't exist in the component cache, create it and cache.\n             */\n            if (!componentCache.has(key)) {\n                componentCache.set(key, createMotionComponent(key, undefined, preloadedFeatures, createVisualElement));\n            }\n            return componentCache.get(key);\n        },\n    });\n}\n\nexport { createMotionProxy };\n//# sourceMappingURL=create-proxy.mjs.map\n","import { SVGVisualElement, HTMLVisualElement } from 'motion-dom';\nimport { Fragment } from 'react';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n    /**\n     * Use explicit isSVG override if provided, otherwise auto-detect\n     */\n    const isSVG = options.isSVG ?? isSVGComponent(Component);\n    return isSVG\n        ? new SVGVisualElement(options)\n        : new HTMLVisualElement(options, {\n            allowProjection: Component !== Fragment,\n        });\n};\n\nexport { createDomVisualElement };\n//# sourceMappingURL=create-visual-element.mjs.map\n","import { Feature, resolveVariant } from 'motion-dom';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n    constructor() {\n        super(...arguments);\n        this.id = id++;\n        this.isExitComplete = false;\n    }\n    update() {\n        if (!this.node.presenceContext)\n            return;\n        const { isPresent, onExitComplete } = this.node.presenceContext;\n        const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n        if (!this.node.animationState || isPresent === prevIsPresent) {\n            return;\n        }\n        if (isPresent && prevIsPresent === false) {\n            /**\n             * When re-entering, if the exit animation already completed\n             * (element is at rest), reset to initial values so the enter\n             * animation replays from the correct position.\n             */\n            if (this.isExitComplete) {\n                const { initial, custom } = this.node.getProps();\n                if (typeof initial === \"string\") {\n                    const resolved = resolveVariant(this.node, initial, custom);\n                    if (resolved) {\n                        const { transition, transitionEnd, ...target } = resolved;\n                        for (const key in target) {\n                            this.node\n                                .getValue(key)\n                                ?.jump(target[key]);\n                        }\n                    }\n                }\n                this.node.animationState.reset();\n                this.node.animationState.animateChanges();\n            }\n            else {\n                this.node.animationState.setActive(\"exit\", false);\n            }\n            this.isExitComplete = false;\n            return;\n        }\n        const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent);\n        if (onExitComplete && !isPresent) {\n            exitAnimation.then(() => {\n                this.isExitComplete = true;\n                onExitComplete(this.id);\n            });\n        }\n    }\n    mount() {\n        const { register, onExitComplete } = this.node.presenceContext || {};\n        if (onExitComplete) {\n            onExitComplete(this.id);\n        }\n        if (register) {\n            this.unmount = register(this.id);\n        }\n    }\n    unmount() { }\n}\n\nexport { ExitAnimationFeature };\n//# sourceMappingURL=exit.mjs.map\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n    animation: {\n        Feature: AnimationFeature,\n    },\n    exit: {\n        Feature: ExitAnimationFeature,\n    },\n};\n\nexport { animations };\n//# sourceMappingURL=animations.mjs.map\n","import { Feature, createAnimationState, isAnimationControls } from 'motion-dom';\n\nclass AnimationFeature extends Feature {\n    /**\n     * We dynamically generate the AnimationState manager as it contains a reference\n     * to the underlying animation library. We only want to load that if we load this,\n     * so people can optionally code split it out using the `m` component.\n     */\n    constructor(node) {\n        super(node);\n        node.animationState || (node.animationState = createAnimationState(node));\n    }\n    updateAnimationControlsSubscription() {\n        const { animate } = this.node.getProps();\n        if (isAnimationControls(animate)) {\n            this.unmountControls = animate.subscribe(this.node);\n        }\n    }\n    /**\n     * Subscribe any provided AnimationControls to the component's VisualElement\n     */\n    mount() {\n        this.updateAnimationControlsSubscription();\n    }\n    update() {\n        const { animate } = this.node.getProps();\n        const { animate: prevAnimate } = this.node.prevProps || {};\n        if (animate !== prevAnimate) {\n            this.updateAnimationControlsSubscription();\n        }\n    }\n    unmount() {\n        this.node.animationState.reset();\n        this.unmountControls?.();\n    }\n}\n\nexport { AnimationFeature };\n//# sourceMappingURL=index.mjs.map\n","import { isPrimaryPointer } from 'motion-dom';\n\nfunction extractEventInfo(event) {\n    return {\n        point: {\n            x: event.pageX,\n            y: event.pageY,\n        },\n    };\n}\nconst addPointerInfo = (handler) => (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n\nexport { addPointerInfo, extractEventInfo };\n//# sourceMappingURL=event-info.mjs.map\n","import { addDomEvent } from 'motion-dom';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n    return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\n//# sourceMappingURL=add-pointer-event.mjs.map\n","// Fixes https://github.com/motiondivision/motion/issues/2270\nconst getContextWindow = ({ current }) => {\n    return current ? current.ownerDocument.defaultView : null;\n};\n\nexport { getContextWindow };\n//# sourceMappingURL=get-context-window.mjs.map\n","const distance = (a, b) => Math.abs(a - b);\nfunction distance2D(a, b) {\n    // Multi-dimensional\n    const xDelta = distance(a.x, b.x);\n    const yDelta = distance(a.y, b.y);\n    return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n\nexport { distance, distance2D };\n//# sourceMappingURL=distance.mjs.map\n","import { frameData, frame, isPrimaryPointer, cancelFrame } from 'motion-dom';\nimport { pipe, secondsToMilliseconds, millisecondsToSeconds } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\n\nconst overflowStyles = /*#__PURE__*/ new Set([\"auto\", \"scroll\"]);\n/**\n * @internal\n */\nclass PanSession {\n    constructor(event, handlers, { transformPagePoint, contextWindow = window, dragSnapToOrigin = false, distanceThreshold = 3, element, } = {}) {\n        /**\n         * @internal\n         */\n        this.startEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEventInfo = null;\n        /**\n         * Raw (untransformed) event info, re-transformed each frame\n         * so transformPagePoint sees the current parent matrix.\n         * @internal\n         */\n        this.lastRawMoveEventInfo = null;\n        /**\n         * @internal\n         */\n        this.handlers = {};\n        /**\n         * @internal\n         */\n        this.contextWindow = window;\n        /**\n         * Scroll positions of scrollable ancestors and window.\n         * @internal\n         */\n        this.scrollPositions = new Map();\n        /**\n         * Cleanup function for scroll listeners.\n         * @internal\n         */\n        this.removeScrollListeners = null;\n        this.onElementScroll = (event) => {\n            this.handleScroll(event.target);\n        };\n        this.onWindowScroll = () => {\n            this.handleScroll(window);\n        };\n        this.updatePoint = () => {\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            // Re-transform raw point through current transformPagePoint so\n            // animated parent transforms (e.g. rotation) are picked up each frame\n            if (this.lastRawMoveEventInfo) {\n                this.lastMoveEventInfo = transformPoint(this.lastRawMoveEventInfo, this.transformPagePoint);\n            }\n            const info = getPanInfo(this.lastMoveEventInfo, this.history);\n            const isPanStarted = this.startEvent !== null;\n            // Only start panning if the offset is larger than 3 pixels. If we make it\n            // any larger than this we'll want to reset the pointer history\n            // on the first update to avoid visual snapping to the cursor.\n            const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= this.distanceThreshold;\n            if (!isPanStarted && !isDistancePastThreshold)\n                return;\n            const { point } = info;\n            const { timestamp } = frameData;\n            this.history.push({ ...point, timestamp });\n            const { onStart, onMove } = this.handlers;\n            if (!isPanStarted) {\n                onStart && onStart(this.lastMoveEvent, info);\n                this.startEvent = this.lastMoveEvent;\n            }\n            onMove && onMove(this.lastMoveEvent, info);\n        };\n        this.handlePointerMove = (event, info) => {\n            this.lastMoveEvent = event;\n            this.lastRawMoveEventInfo = info;\n            this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n            // Throttle mouse move event to once per frame\n            frame.update(this.updatePoint, true);\n        };\n        this.handlePointerUp = (event, info) => {\n            this.end();\n            const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n            // Resume animation if dragSnapToOrigin is set OR if no drag started (user just clicked)\n            // This ensures constraint animations continue when interrupted by a click\n            if (this.dragSnapToOrigin || !this.startEvent) {\n                resumeAnimation && resumeAnimation();\n            }\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const panInfo = getPanInfo(event.type === \"pointercancel\"\n                ? this.lastMoveEventInfo\n                : transformPoint(info, this.transformPagePoint), this.history);\n            if (this.startEvent && onEnd) {\n                onEnd(event, panInfo);\n            }\n            onSessionEnd && onSessionEnd(event, panInfo);\n        };\n        // If we have more than one touch, don't start detecting this gesture\n        if (!isPrimaryPointer(event))\n            return;\n        this.dragSnapToOrigin = dragSnapToOrigin;\n        this.handlers = handlers;\n        this.transformPagePoint = transformPagePoint;\n        this.distanceThreshold = distanceThreshold;\n        this.contextWindow = contextWindow || window;\n        const info = extractEventInfo(event);\n        const initialInfo = transformPoint(info, this.transformPagePoint);\n        const { point } = initialInfo;\n        const { timestamp } = frameData;\n        this.history = [{ ...point, timestamp }];\n        const { onSessionStart } = handlers;\n        onSessionStart &&\n            onSessionStart(event, getPanInfo(initialInfo, this.history));\n        this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n        // Start scroll tracking if element provided\n        if (element) {\n            this.startScrollTracking(element);\n        }\n    }\n    /**\n     * Start tracking scroll on ancestors and window.\n     */\n    startScrollTracking(element) {\n        // Store initial scroll positions for scrollable ancestors\n        let current = element.parentElement;\n        while (current) {\n            const style = getComputedStyle(current);\n            if (overflowStyles.has(style.overflowX) ||\n                overflowStyles.has(style.overflowY)) {\n                this.scrollPositions.set(current, {\n                    x: current.scrollLeft,\n                    y: current.scrollTop,\n                });\n            }\n            current = current.parentElement;\n        }\n        // Track window scroll\n        this.scrollPositions.set(window, {\n            x: window.scrollX,\n            y: window.scrollY,\n        });\n        // Capture listener catches element scroll events as they bubble\n        window.addEventListener(\"scroll\", this.onElementScroll, {\n            capture: true,\n        });\n        // Direct window scroll listener (window scroll doesn't bubble)\n        window.addEventListener(\"scroll\", this.onWindowScroll);\n        this.removeScrollListeners = () => {\n            window.removeEventListener(\"scroll\", this.onElementScroll, {\n                capture: true,\n            });\n            window.removeEventListener(\"scroll\", this.onWindowScroll);\n        };\n    }\n    /**\n     * Handle scroll compensation during drag.\n     *\n     * For element scroll: adjusts history origin since pageX/pageY doesn't change.\n     * For window scroll: adjusts lastMoveEventInfo since pageX/pageY would change.\n     */\n    handleScroll(target) {\n        const initial = this.scrollPositions.get(target);\n        if (!initial)\n            return;\n        const isWindow = target === window;\n        const current = isWindow\n            ? { x: window.scrollX, y: window.scrollY }\n            : {\n                x: target.scrollLeft,\n                y: target.scrollTop,\n            };\n        const delta = { x: current.x - initial.x, y: current.y - initial.y };\n        if (delta.x === 0 && delta.y === 0)\n            return;\n        if (isWindow) {\n            // Window scroll: pageX/pageY changes, so update lastMoveEventInfo\n            if (this.lastMoveEventInfo) {\n                this.lastMoveEventInfo.point.x += delta.x;\n                this.lastMoveEventInfo.point.y += delta.y;\n            }\n        }\n        else {\n            // Element scroll: pageX/pageY unchanged, so adjust history origin\n            if (this.history.length > 0) {\n                this.history[0].x -= delta.x;\n                this.history[0].y -= delta.y;\n            }\n        }\n        this.scrollPositions.set(target, current);\n        frame.update(this.updatePoint, true);\n    }\n    updateHandlers(handlers) {\n        this.handlers = handlers;\n    }\n    end() {\n        this.removeListeners && this.removeListeners();\n        this.removeScrollListeners && this.removeScrollListeners();\n        this.scrollPositions.clear();\n        cancelFrame(this.updatePoint);\n    }\n}\nfunction transformPoint(info, transformPagePoint) {\n    return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n    return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n    return {\n        point,\n        delta: subtractPoint(point, lastDevicePoint(history)),\n        offset: subtractPoint(point, startDevicePoint(history)),\n        velocity: getVelocity(history, 0.1),\n    };\n}\nfunction startDevicePoint(history) {\n    return history[0];\n}\nfunction lastDevicePoint(history) {\n    return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n    if (history.length < 2) {\n        return { x: 0, y: 0 };\n    }\n    let i = history.length - 1;\n    let timestampedPoint = null;\n    const lastPoint = lastDevicePoint(history);\n    while (i >= 0) {\n        timestampedPoint = history[i];\n        if (lastPoint.timestamp - timestampedPoint.timestamp >\n            secondsToMilliseconds(timeDelta)) {\n            break;\n        }\n        i--;\n    }\n    if (!timestampedPoint) {\n        return { x: 0, y: 0 };\n    }\n    /**\n     * If the selected point is the pointer-down origin (history[0]),\n     * there are better movement points available, and the time gap\n     * is suspiciously large (>2x timeDelta), use the next point instead.\n     * This prevents stale pointer-down points from diluting velocity\n     * in hold-then-flick gestures.\n     */\n    if (timestampedPoint === history[0] &&\n        history.length > 2 &&\n        lastPoint.timestamp - timestampedPoint.timestamp >\n            secondsToMilliseconds(timeDelta) * 2) {\n        timestampedPoint = history[1];\n    }\n    const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n    if (time === 0) {\n        return { x: 0, y: 0 };\n    }\n    const currentVelocity = {\n        x: (lastPoint.x - timestampedPoint.x) / time,\n        y: (lastPoint.y - timestampedPoint.y) / time,\n    };\n    if (currentVelocity.x === Infinity) {\n        currentVelocity.x = 0;\n    }\n    if (currentVelocity.y === Infinity) {\n        currentVelocity.y = 0;\n    }\n    return currentVelocity;\n}\n\nexport { PanSession };\n//# sourceMappingURL=PanSession.mjs.map\n","import { mixNumber, calcLength } from 'motion-dom';\nimport { progress, clamp } from 'motion-utils';\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nfunction applyConstraints(point, { min, max }, elastic) {\n    if (min !== undefined && point < min) {\n        // If we have a min point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(min, point, elastic.min)\n            : Math.max(point, min);\n    }\n    else if (max !== undefined && point > max) {\n        // If we have a max point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(max, point, elastic.max)\n            : Math.min(point, max);\n    }\n    return point;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nfunction calcRelativeAxisConstraints(axis, min, max) {\n    return {\n        min: min !== undefined ? axis.min + min : undefined,\n        max: max !== undefined\n            ? axis.max + max - (axis.max - axis.min)\n            : undefined,\n    };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nfunction calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n    return {\n        x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n        y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n    };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nfunction calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n    let min = constraintsAxis.min - layoutAxis.min;\n    let max = constraintsAxis.max - layoutAxis.max;\n    // If the constraints axis is actually smaller than the layout axis then we can\n    // flip the constraints\n    if (constraintsAxis.max - constraintsAxis.min <\n        layoutAxis.max - layoutAxis.min) {\n        [min, max] = [max, min];\n    }\n    return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction calcViewportConstraints(layoutBox, constraintsBox) {\n    return {\n        x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n        y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n    };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nfunction calcOrigin(source, target) {\n    let origin = 0.5;\n    const sourceLength = calcLength(source);\n    const targetLength = calcLength(target);\n    if (targetLength > sourceLength) {\n        origin = progress(target.min, target.max - sourceLength, source.min);\n    }\n    else if (sourceLength > targetLength) {\n        origin = progress(source.min, source.max - targetLength, target.min);\n    }\n    return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction rebaseAxisConstraints(layout, constraints) {\n    const relativeConstraints = {};\n    if (constraints.min !== undefined) {\n        relativeConstraints.min = constraints.min - layout.min;\n    }\n    if (constraints.max !== undefined) {\n        relativeConstraints.max = constraints.max - layout.min;\n    }\n    return relativeConstraints;\n}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction resolveDragElastic(dragElastic = defaultElastic) {\n    if (dragElastic === false) {\n        dragElastic = 0;\n    }\n    else if (dragElastic === true) {\n        dragElastic = defaultElastic;\n    }\n    return {\n        x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n        y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n    };\n}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n    return {\n        min: resolvePointElastic(dragElastic, minLabel),\n        max: resolvePointElastic(dragElastic, maxLabel),\n    };\n}\nfunction resolvePointElastic(dragElastic, label) {\n    return typeof dragElastic === \"number\"\n        ? dragElastic\n        : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\n//# sourceMappingURL=constraints.mjs.map\n","import { createBox, frame, eachAxis, measurePageBox, convertBoxToBoundingBox, convertBoundingBoxToBox, addValueToWillChange, animateMotionValue, mixNumber, addDomEvent, setDragLock, percent, calcLength, resize, isElementTextInput } from 'motion-dom';\nimport { invariant } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, rebaseAxisConstraints, calcViewportConstraints, calcOrigin, defaultElastic } from './utils/constraints.mjs';\n\nconst elementDragControls = new WeakMap();\nclass VisualElementDragControls {\n    constructor(visualElement) {\n        this.openDragLock = null;\n        this.isDragging = false;\n        this.currentDirection = null;\n        this.originPoint = { x: 0, y: 0 };\n        /**\n         * The permitted boundaries of travel, in pixels.\n         */\n        this.constraints = false;\n        this.hasMutatedConstraints = false;\n        /**\n         * The per-axis resolved elastic values.\n         */\n        this.elastic = createBox();\n        /**\n         * The latest pointer event. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n         */\n        this.latestPointerEvent = null;\n        /**\n         * The latest pan info. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n         */\n        this.latestPanInfo = null;\n        this.visualElement = visualElement;\n    }\n    start(originEvent, { snapToCursor = false, distanceThreshold } = {}) {\n        /**\n         * Don't start dragging if this component is exiting\n         */\n        const { presenceContext } = this.visualElement;\n        if (presenceContext && presenceContext.isPresent === false)\n            return;\n        const onSessionStart = (event) => {\n            if (snapToCursor) {\n                this.snapToCursor(extractEventInfo(event).point);\n            }\n            this.stopAnimation();\n        };\n        const onStart = (event, info) => {\n            // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n            const { drag, dragPropagation, onDragStart } = this.getProps();\n            if (drag && !dragPropagation) {\n                if (this.openDragLock)\n                    this.openDragLock();\n                this.openDragLock = setDragLock(drag);\n                // If we don 't have the lock, don't start dragging\n                if (!this.openDragLock)\n                    return;\n            }\n            this.latestPointerEvent = event;\n            this.latestPanInfo = info;\n            this.isDragging = true;\n            this.currentDirection = null;\n            this.resolveConstraints();\n            if (this.visualElement.projection) {\n                this.visualElement.projection.isAnimationBlocked = true;\n                this.visualElement.projection.target = undefined;\n            }\n            /**\n             * Record gesture origin and pointer offset\n             */\n            eachAxis((axis) => {\n                let current = this.getAxisMotionValue(axis).get() || 0;\n                /**\n                 * If the MotionValue is a percentage value convert to px\n                 */\n                if (percent.test(current)) {\n                    const { projection } = this.visualElement;\n                    if (projection && projection.layout) {\n                        const measuredAxis = projection.layout.layoutBox[axis];\n                        if (measuredAxis) {\n                            const length = calcLength(measuredAxis);\n                            current = length * (parseFloat(current) / 100);\n                        }\n                    }\n                }\n                this.originPoint[axis] = current;\n            });\n            // Fire onDragStart event\n            if (onDragStart) {\n                frame.update(() => onDragStart(event, info), false, true);\n            }\n            addValueToWillChange(this.visualElement, \"transform\");\n            const { animationState } = this.visualElement;\n            animationState && animationState.setActive(\"whileDrag\", true);\n        };\n        const onMove = (event, info) => {\n            this.latestPointerEvent = event;\n            this.latestPanInfo = info;\n            const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n            // If we didn't successfully receive the gesture lock, early return.\n            if (!dragPropagation && !this.openDragLock)\n                return;\n            const { offset } = info;\n            // Attempt to detect drag direction if directionLock is true\n            if (dragDirectionLock && this.currentDirection === null) {\n                this.currentDirection = getCurrentDirection(offset);\n                // If we've successfully set a direction, notify listener\n                if (this.currentDirection !== null) {\n                    onDirectionLock && onDirectionLock(this.currentDirection);\n                }\n                return;\n            }\n            // Update each point with the latest position\n            this.updateAxis(\"x\", info.point, offset);\n            this.updateAxis(\"y\", info.point, offset);\n            /**\n             * Ideally we would leave the renderer to fire naturally at the end of\n             * this frame but if the element is about to change layout as the result\n             * of a re-render we want to ensure the browser can read the latest\n             * bounding box to ensure the pointer and element don't fall out of sync.\n             */\n            this.visualElement.render();\n            /**\n             * This must fire after the render call as it might trigger a state\n             * change which itself might trigger a layout update.\n             */\n            if (onDrag) {\n                frame.update(() => onDrag(event, info), false, true);\n            }\n        };\n        const onSessionEnd = (event, info) => {\n            this.latestPointerEvent = event;\n            this.latestPanInfo = info;\n            this.stop(event, info);\n            this.latestPointerEvent = null;\n            this.latestPanInfo = null;\n        };\n        const resumeAnimation = () => {\n            const { dragSnapToOrigin: snap } = this.getProps();\n            if (snap || this.constraints) {\n                this.startAnimation({ x: 0, y: 0 });\n            }\n        };\n        const { dragSnapToOrigin } = this.getProps();\n        this.panSession = new PanSession(originEvent, {\n            onSessionStart,\n            onStart,\n            onMove,\n            onSessionEnd,\n            resumeAnimation,\n        }, {\n            transformPagePoint: this.visualElement.getTransformPagePoint(),\n            dragSnapToOrigin,\n            distanceThreshold,\n            contextWindow: getContextWindow(this.visualElement),\n            element: this.visualElement.current,\n        });\n    }\n    /**\n     * @internal\n     */\n    stop(event, panInfo) {\n        const finalEvent = event || this.latestPointerEvent;\n        const finalPanInfo = panInfo || this.latestPanInfo;\n        const isDragging = this.isDragging;\n        this.cancel();\n        if (!isDragging || !finalPanInfo || !finalEvent)\n            return;\n        const { velocity } = finalPanInfo;\n        this.startAnimation(velocity);\n        const { onDragEnd } = this.getProps();\n        if (onDragEnd) {\n            frame.postRender(() => onDragEnd(finalEvent, finalPanInfo));\n        }\n    }\n    /**\n     * @internal\n     */\n    cancel() {\n        this.isDragging = false;\n        const { projection, animationState } = this.visualElement;\n        if (projection) {\n            projection.isAnimationBlocked = false;\n        }\n        this.endPanSession();\n        const { dragPropagation } = this.getProps();\n        if (!dragPropagation && this.openDragLock) {\n            this.openDragLock();\n            this.openDragLock = null;\n        }\n        animationState && animationState.setActive(\"whileDrag\", false);\n    }\n    /**\n     * Clean up the pan session without modifying other drag state.\n     * This is used during unmount to ensure event listeners are removed\n     * without affecting projection animations or drag locks.\n     * @internal\n     */\n    endPanSession() {\n        this.panSession && this.panSession.end();\n        this.panSession = undefined;\n    }\n    updateAxis(axis, _point, offset) {\n        const { drag } = this.getProps();\n        // If we're not dragging this axis, do an early return.\n        if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n            return;\n        const axisValue = this.getAxisMotionValue(axis);\n        let next = this.originPoint[axis] + offset[axis];\n        // Apply constraints\n        if (this.constraints && this.constraints[axis]) {\n            next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n        }\n        axisValue.set(next);\n    }\n    resolveConstraints() {\n        const { dragConstraints, dragElastic } = this.getProps();\n        const layout = this.visualElement.projection &&\n            !this.visualElement.projection.layout\n            ? this.visualElement.projection.measure(false)\n            : this.visualElement.projection?.layout;\n        const prevConstraints = this.constraints;\n        if (dragConstraints && isRefObject(dragConstraints)) {\n            if (!this.constraints) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        }\n        else {\n            if (dragConstraints && layout) {\n                this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n            }\n            else {\n                this.constraints = false;\n            }\n        }\n        this.elastic = resolveDragElastic(dragElastic);\n        /**\n         * If we're outputting to external MotionValues, we want to rebase the measured constraints\n         * from viewport-relative to component-relative. This only applies to relative (non-ref)\n         * constraints, as ref-based constraints from calcViewportConstraints are already in the\n         * correct coordinate space for the motion value transform offset.\n         */\n        if (prevConstraints !== this.constraints &&\n            !isRefObject(dragConstraints) &&\n            layout &&\n            this.constraints &&\n            !this.hasMutatedConstraints) {\n            eachAxis((axis) => {\n                if (this.constraints !== false &&\n                    this.getAxisMotionValue(axis)) {\n                    this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n                }\n            });\n        }\n    }\n    resolveRefConstraints() {\n        const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n        if (!constraints || !isRefObject(constraints))\n            return false;\n        const constraintsElement = constraints.current;\n        invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\", \"drag-constraints-ref\");\n        const { projection } = this.visualElement;\n        // TODO\n        if (!projection || !projection.layout)\n            return false;\n        const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n        let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n        /**\n         * If there's an onMeasureDragConstraints listener we call it and\n         * if different constraints are returned, set constraints to that\n         */\n        if (onMeasureDragConstraints) {\n            const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n            this.hasMutatedConstraints = !!userConstraints;\n            if (userConstraints) {\n                measuredConstraints = convertBoundingBoxToBox(userConstraints);\n            }\n        }\n        return measuredConstraints;\n    }\n    startAnimation(velocity) {\n        const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n        const constraints = this.constraints || {};\n        const momentumAnimations = eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, this.currentDirection)) {\n                return;\n            }\n            let transition = (constraints && constraints[axis]) || {};\n            if (dragSnapToOrigin === true ||\n                dragSnapToOrigin === axis)\n                transition = { min: 0, max: 0 };\n            /**\n             * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n             * of spring animations so we should look into adding a disable spring option to `inertia`.\n             * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n             * using the value of `dragElastic`.\n             */\n            const bounceStiffness = dragElastic ? 200 : 1000000;\n            const bounceDamping = dragElastic ? 40 : 10000000;\n            const inertia = {\n                type: \"inertia\",\n                velocity: dragMomentum ? velocity[axis] : 0,\n                bounceStiffness,\n                bounceDamping,\n                timeConstant: 750,\n                restDelta: 1,\n                restSpeed: 10,\n                ...dragTransition,\n                ...transition,\n            };\n            // If we're not animating on an externally-provided `MotionValue` we can use the\n            // component's animation controls which will handle interactions with whileHover (etc),\n            // otherwise we just have to animate the `MotionValue` itself.\n            return this.startAxisValueAnimation(axis, inertia);\n        });\n        // Run all animations and then resolve the new drag constraints.\n        return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n    }\n    startAxisValueAnimation(axis, transition) {\n        const axisValue = this.getAxisMotionValue(axis);\n        addValueToWillChange(this.visualElement, axis);\n        return axisValue.start(animateMotionValue(axis, axisValue, 0, transition, this.visualElement, false));\n    }\n    stopAnimation() {\n        eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n    }\n    /**\n     * Drag works differently depending on which props are provided.\n     *\n     * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n     * - Otherwise, we apply the delta to the x/y motion values.\n     */\n    getAxisMotionValue(axis) {\n        const dragKey = `_drag${axis.toUpperCase()}`;\n        const props = this.visualElement.getProps();\n        const externalMotionValue = props[dragKey];\n        return externalMotionValue\n            ? externalMotionValue\n            : this.visualElement.getValue(axis, (props.initial\n                ? props.initial[axis]\n                : undefined) || 0);\n    }\n    snapToCursor(point) {\n        eachAxis((axis) => {\n            const { drag } = this.getProps();\n            // If we're not dragging this axis, do an early return.\n            if (!shouldDrag(axis, drag, this.currentDirection))\n                return;\n            const { projection } = this.visualElement;\n            const axisValue = this.getAxisMotionValue(axis);\n            if (projection && projection.layout) {\n                const { min, max } = projection.layout.layoutBox[axis];\n                /**\n                 * The layout measurement includes the current transform value,\n                 * so we need to add it back to get the correct snap position.\n                 * This fixes an issue where elements with initial coordinates\n                 * would snap to the wrong position on the first drag.\n                 */\n                const current = axisValue.get() || 0;\n                axisValue.set(point[axis] - mixNumber(min, max, 0.5) + current);\n            }\n        });\n    }\n    /**\n     * When the viewport resizes we want to check if the measured constraints\n     * have changed and, if so, reposition the element within those new constraints\n     * relative to where it was before the resize.\n     */\n    scalePositionWithinConstraints() {\n        if (!this.visualElement.current)\n            return;\n        const { drag, dragConstraints } = this.getProps();\n        const { projection } = this.visualElement;\n        if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n            return;\n        /**\n         * Stop current animations as there can be visual glitching if we try to do\n         * this mid-animation\n         */\n        this.stopAnimation();\n        /**\n         * Record the relative position of the dragged element relative to the\n         * constraints box and save as a progress value.\n         */\n        const boxProgress = { x: 0, y: 0 };\n        eachAxis((axis) => {\n            const axisValue = this.getAxisMotionValue(axis);\n            if (axisValue && this.constraints !== false) {\n                const latest = axisValue.get();\n                boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n            }\n        });\n        /**\n         * Update the layout of this element and resolve the latest drag constraints\n         */\n        const { transformTemplate } = this.visualElement.getProps();\n        this.visualElement.current.style.transform = transformTemplate\n            ? transformTemplate({}, \"\")\n            : \"none\";\n        projection.root && projection.root.updateScroll();\n        projection.updateLayout();\n        /**\n         * Reset constraints so resolveConstraints() will recalculate them\n         * with the freshly measured layout rather than returning the cached value.\n         */\n        this.constraints = false;\n        this.resolveConstraints();\n        /**\n         * For each axis, calculate the current progress of the layout axis\n         * within the new constraints.\n         */\n        eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, null))\n                return;\n            /**\n             * Calculate a new transform based on the previous box progress\n             */\n            const axisValue = this.getAxisMotionValue(axis);\n            const { min, max } = this.constraints[axis];\n            axisValue.set(mixNumber(min, max, boxProgress[axis]));\n        });\n        /**\n         * Flush the updated transform to the DOM synchronously to prevent\n         * a visual flash at the element's CSS layout position (0,0) when\n         * the transform was stripped for measurement.\n         */\n        this.visualElement.render();\n    }\n    addListeners() {\n        if (!this.visualElement.current)\n            return;\n        elementDragControls.set(this.visualElement, this);\n        const element = this.visualElement.current;\n        /**\n         * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n         */\n        const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n            const { drag, dragListener = true } = this.getProps();\n            const target = event.target;\n            /**\n             * Only block drag if clicking on a text input child element\n             * (input, textarea, select, contenteditable) where users might\n             * want to select text or interact with the control.\n             *\n             * Buttons and links don't block drag since they don't have\n             * click-and-move actions of their own.\n             */\n            const isClickingTextInputChild = target !== element && isElementTextInput(target);\n            if (drag && dragListener && !isClickingTextInputChild) {\n                this.start(event);\n            }\n        });\n        /**\n         * If using ref-based constraints, observe both the draggable element\n         * and the constraint container for size changes via ResizeObserver.\n         * Setup is deferred because dragConstraints.current is null when\n         * addListeners first runs (React hasn't committed the ref yet).\n         */\n        let stopResizeObservers;\n        const measureDragConstraints = () => {\n            const { dragConstraints } = this.getProps();\n            if (isRefObject(dragConstraints) && dragConstraints.current) {\n                this.constraints = this.resolveRefConstraints();\n                if (!stopResizeObservers) {\n                    stopResizeObservers = startResizeObservers(element, dragConstraints.current, () => this.scalePositionWithinConstraints());\n                }\n            }\n        };\n        const { projection } = this.visualElement;\n        const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n        if (projection && !projection.layout) {\n            projection.root && projection.root.updateScroll();\n            projection.updateLayout();\n        }\n        frame.read(measureDragConstraints);\n        /**\n         * Attach a window resize listener to scale the draggable target within its defined\n         * constraints as the window resizes.\n         */\n        const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n        /**\n         * If the element's layout changes, calculate the delta and apply that to\n         * the drag gesture's origin point.\n         */\n        const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n            if (this.isDragging && hasLayoutChanged) {\n                eachAxis((axis) => {\n                    const motionValue = this.getAxisMotionValue(axis);\n                    if (!motionValue)\n                        return;\n                    this.originPoint[axis] += delta[axis].translate;\n                    motionValue.set(motionValue.get() + delta[axis].translate);\n                });\n                this.visualElement.render();\n            }\n        }));\n        return () => {\n            stopResizeListener();\n            stopPointerListener();\n            stopMeasureLayoutListener();\n            stopLayoutUpdateListener && stopLayoutUpdateListener();\n            stopResizeObservers && stopResizeObservers();\n        };\n    }\n    getProps() {\n        const props = this.visualElement.getProps();\n        const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n        return {\n            ...props,\n            drag,\n            dragDirectionLock,\n            dragPropagation,\n            dragConstraints,\n            dragElastic,\n            dragMomentum,\n        };\n    }\n}\nfunction skipFirstCall(callback) {\n    let isFirst = true;\n    return () => {\n        if (isFirst) {\n            isFirst = false;\n            return;\n        }\n        callback();\n    };\n}\nfunction startResizeObservers(element, constraintsElement, onResize) {\n    const stopElement = resize(element, skipFirstCall(onResize));\n    const stopContainer = resize(constraintsElement, skipFirstCall(onResize));\n    return () => {\n        stopElement();\n        stopContainer();\n    };\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n    return ((drag === true || drag === direction) &&\n        (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n    let direction = null;\n    if (Math.abs(offset.y) > lockThreshold) {\n        direction = \"y\";\n    }\n    else if (Math.abs(offset.x) > lockThreshold) {\n        direction = \"x\";\n    }\n    return direction;\n}\n\nexport { VisualElementDragControls, elementDragControls };\n//# sourceMappingURL=VisualElementDragControls.mjs.map\n","import { isDragging } from './is-active.mjs';\n\nfunction setDragLock(axis) {\n    if (axis === \"x\" || axis === \"y\") {\n        if (isDragging[axis]) {\n            return null;\n        }\n        else {\n            isDragging[axis] = true;\n            return () => {\n                isDragging[axis] = false;\n            };\n        }\n    }\n    else {\n        if (isDragging.x || isDragging.y) {\n            return null;\n        }\n        else {\n            isDragging.x = isDragging.y = true;\n            return () => {\n                isDragging.x = isDragging.y = false;\n            };\n        }\n    }\n}\n\nexport { setDragLock };\n//# sourceMappingURL=set-active.mjs.map\n","import { Feature, frame } from 'motion-dom';\nimport { noop } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { PanSession } from './PanSession.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n    if (handler) {\n        frame.update(() => handler(event, info), false, true);\n    }\n};\nclass PanGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.removePointerDownListener = noop;\n    }\n    onPointerDown(pointerDownEvent) {\n        this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n            transformPagePoint: this.node.getTransformPagePoint(),\n            contextWindow: getContextWindow(this.node),\n        });\n    }\n    createPanHandlers() {\n        const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n        return {\n            onSessionStart: asyncHandler(onPanSessionStart),\n            onStart: asyncHandler(onPanStart),\n            onMove: asyncHandler(onPan),\n            onEnd: (event, info) => {\n                delete this.session;\n                if (onPanEnd) {\n                    frame.postRender(() => onPanEnd(event, info));\n                }\n            },\n        };\n    }\n    mount() {\n        this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n    }\n    update() {\n        this.session && this.session.updateHandlers(this.createPanHandlers());\n    }\n    unmount() {\n        this.removePointerDownListener();\n        this.session && this.session.end();\n    }\n}\n\nexport { PanGesture };\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { globalProjectionState, frame, microtask } from 'motion-dom';\nimport { useContext, Component } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\n\n/**\n * Track whether we've taken any snapshots yet. If not,\n * we can safely skip notification of didUpdate.\n *\n * Difficult to capture in a test but to prevent flickering\n * we must set this to true either on update or unmount.\n * Running `next-env/layout-id` in Safari will show this behaviour if broken.\n */\nlet hasTakenAnySnapshot = false;\nclass MeasureLayoutWithContext extends Component {\n    /**\n     * This only mounts projection nodes for components that\n     * need measuring, we might want to do it for all components\n     * in order to incorporate transforms\n     */\n    componentDidMount() {\n        const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n        const { projection } = visualElement;\n        if (projection) {\n            if (layoutGroup.group)\n                layoutGroup.group.add(projection);\n            if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n                switchLayoutGroup.register(projection);\n            }\n            if (hasTakenAnySnapshot) {\n                projection.root.didUpdate();\n            }\n            projection.addEventListener(\"animationComplete\", () => {\n                this.safeToRemove();\n            });\n            projection.setOptions({\n                ...projection.options,\n                layoutDependency: this.props.layoutDependency,\n                onExitComplete: () => this.safeToRemove(),\n            });\n        }\n        globalProjectionState.hasEverUpdated = true;\n    }\n    getSnapshotBeforeUpdate(prevProps) {\n        const { layoutDependency, visualElement, drag, isPresent } = this.props;\n        const { projection } = visualElement;\n        if (!projection)\n            return null;\n        /**\n         * TODO: We use this data in relegate to determine whether to\n         * promote a previous element. There's no guarantee its presence data\n         * will have updated by this point - if a bug like this arises it will\n         * have to be that we markForRelegation and then find a new lead some other way,\n         * perhaps in didUpdate\n         */\n        projection.isPresent = isPresent;\n        if (prevProps.layoutDependency !== layoutDependency) {\n            projection.setOptions({\n                ...projection.options,\n                layoutDependency,\n            });\n        }\n        hasTakenAnySnapshot = true;\n        if (drag ||\n            prevProps.layoutDependency !== layoutDependency ||\n            layoutDependency === undefined ||\n            prevProps.isPresent !== isPresent) {\n            projection.willUpdate();\n        }\n        else {\n            this.safeToRemove();\n        }\n        if (prevProps.isPresent !== isPresent) {\n            if (isPresent) {\n                projection.promote();\n            }\n            else if (!projection.relegate()) {\n                /**\n                 * If there's another stack member taking over from this one,\n                 * it's in charge of the exit animation and therefore should\n                 * be in charge of the safe to remove. Otherwise we call it here.\n                 */\n                frame.postRender(() => {\n                    const stack = projection.getStack();\n                    if (!stack || !stack.members.length) {\n                        this.safeToRemove();\n                    }\n                });\n            }\n        }\n        return null;\n    }\n    componentDidUpdate() {\n        const { visualElement, layoutAnchor } = this.props;\n        const { projection } = visualElement;\n        if (projection) {\n            projection.options.layoutAnchor = layoutAnchor;\n            projection.root.didUpdate();\n            microtask.postRender(() => {\n                if (!projection.currentAnimation && projection.isLead()) {\n                    this.safeToRemove();\n                }\n            });\n        }\n    }\n    componentWillUnmount() {\n        const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n        const { projection } = visualElement;\n        hasTakenAnySnapshot = true;\n        if (projection) {\n            projection.scheduleCheckAfterUnmount();\n            if (layoutGroup && layoutGroup.group)\n                layoutGroup.group.remove(projection);\n            if (promoteContext && promoteContext.deregister)\n                promoteContext.deregister(projection);\n        }\n    }\n    safeToRemove() {\n        const { safeToRemove } = this.props;\n        safeToRemove && safeToRemove();\n    }\n    render() {\n        return null;\n    }\n}\nfunction MeasureLayout(props) {\n    const [isPresent, safeToRemove] = usePresence();\n    const layoutGroup = useContext(LayoutGroupContext);\n    return (jsx(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\n\nexport { MeasureLayout };\n//# sourceMappingURL=MeasureLayout.mjs.map\n","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from 'motion-dom';\n\nconst drag = {\n    pan: {\n        Feature: PanGesture,\n    },\n    drag: {\n        Feature: DragGesture,\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { drag };\n//# sourceMappingURL=drag.mjs.map\n","import { Feature } from 'motion-dom';\nimport { noop } from 'motion-utils';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass DragGesture extends Feature {\n    constructor(node) {\n        super(node);\n        this.removeGroupControls = noop;\n        this.removeListeners = noop;\n        this.controls = new VisualElementDragControls(node);\n    }\n    mount() {\n        // If we've been provided a DragControls for manual control over the drag gesture,\n        // subscribe this component to it on mount.\n        const { dragControls } = this.node.getProps();\n        if (dragControls) {\n            this.removeGroupControls = dragControls.subscribe(this.controls);\n        }\n        this.removeListeners = this.controls.addListeners() || noop;\n    }\n    update() {\n        const { dragControls } = this.node.getProps();\n        const { dragControls: prevDragControls } = this.node.prevProps || {};\n        if (dragControls !== prevDragControls) {\n            this.removeGroupControls();\n            if (dragControls) {\n                this.removeGroupControls = dragControls.subscribe(this.controls);\n            }\n        }\n    }\n    unmount() {\n        this.removeGroupControls();\n        this.removeListeners();\n        /**\n         * In React 19, during list reorder reconciliation, components may\n         * briefly unmount and remount while the drag is still active. If we're\n         * actively dragging, we should NOT end the pan session - it will\n         * continue tracking pointer events via its window-level listeners.\n         *\n         * The pan session will be properly cleaned up when:\n         * 1. The drag ends naturally (pointerup/pointercancel)\n         * 2. The component is truly removed from the DOM\n         */\n        if (!this.controls.isDragging) {\n            this.controls.endPanSession();\n        }\n    }\n}\n\nexport { DragGesture };\n//# sourceMappingURL=index.mjs.map\n","import { Feature, hover, frame } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\n\nfunction handleHoverEvent(node, event, lifecycle) {\n    const { props } = node;\n    if (node.animationState && props.whileHover) {\n        node.animationState.setActive(\"whileHover\", lifecycle === \"Start\");\n    }\n    const eventName = (\"onHover\" + lifecycle);\n    const callback = props[eventName];\n    if (callback) {\n        frame.postRender(() => callback(event, extractEventInfo(event)));\n    }\n}\nclass HoverGesture extends Feature {\n    mount() {\n        const { current } = this.node;\n        if (!current)\n            return;\n        this.unmount = hover(current, (_element, startEvent) => {\n            handleHoverEvent(this.node, startEvent, \"Start\");\n            return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\");\n        });\n    }\n    unmount() { }\n}\n\nexport { HoverGesture };\n//# sourceMappingURL=hover.mjs.map\n","import { Feature, press, frame } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\n\nfunction handlePressEvent(node, event, lifecycle) {\n    const { props } = node;\n    if (node.current instanceof HTMLButtonElement && node.current.disabled) {\n        return;\n    }\n    if (node.animationState && props.whileTap) {\n        node.animationState.setActive(\"whileTap\", lifecycle === \"Start\");\n    }\n    const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle));\n    const callback = props[eventName];\n    if (callback) {\n        frame.postRender(() => callback(event, extractEventInfo(event)));\n    }\n}\nclass PressGesture extends Feature {\n    mount() {\n        const { current } = this.node;\n        if (!current)\n            return;\n        const { globalTapTarget, propagate } = this.node.props;\n        this.unmount = press(current, (_element, startEvent) => {\n            handlePressEvent(this.node, startEvent, \"Start\");\n            return (endEvent, { success }) => handlePressEvent(this.node, endEvent, success ? \"End\" : \"Cancel\");\n        }, {\n            useGlobalTarget: globalTapTarget,\n            stopPropagation: propagate?.tap === false,\n        });\n    }\n    unmount() { }\n}\n\nexport { PressGesture };\n//# sourceMappingURL=press.mjs.map\n","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n    const callback = observerCallbacks.get(entry.target);\n    callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n    entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n    const lookupRoot = root || document;\n    /**\n     * If we don't have an observer lookup map for this root, create one.\n     */\n    if (!observers.has(lookupRoot)) {\n        observers.set(lookupRoot, {});\n    }\n    const rootObservers = observers.get(lookupRoot);\n    const key = JSON.stringify(options);\n    /**\n     * If we don't have an observer for this combination of root and settings,\n     * create one.\n     */\n    if (!rootObservers[key]) {\n        rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n    }\n    return rootObservers[key];\n}\nfunction observeIntersection(element, options, callback) {\n    const rootInteresectionObserver = initIntersectionObserver(options);\n    observerCallbacks.set(element, callback);\n    rootInteresectionObserver.observe(element);\n    return () => {\n        observerCallbacks.delete(element);\n        rootInteresectionObserver.unobserve(element);\n    };\n}\n\nexport { observeIntersection };\n//# sourceMappingURL=observers.mjs.map\n","import { Feature } from 'motion-dom';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n    some: 0,\n    all: 1,\n};\nclass InViewFeature extends Feature {\n    constructor() {\n        super(...arguments);\n        this.hasEnteredView = false;\n        this.isInView = false;\n    }\n    startObserver() {\n        this.stopObserver?.();\n        const { viewport = {} } = this.node.getProps();\n        const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n        const options = {\n            root: root ? root.current : undefined,\n            rootMargin,\n            threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n        };\n        const onIntersectionUpdate = (entry) => {\n            const { isIntersecting } = entry;\n            /**\n             * If there's been no change in the viewport state, early return.\n             */\n            if (this.isInView === isIntersecting)\n                return;\n            this.isInView = isIntersecting;\n            /**\n             * Handle hasEnteredView. If this is only meant to run once, and\n             * element isn't visible, early return. Otherwise set hasEnteredView to true.\n             */\n            if (once && !isIntersecting && this.hasEnteredView) {\n                return;\n            }\n            else if (isIntersecting) {\n                this.hasEnteredView = true;\n            }\n            if (this.node.animationState) {\n                this.node.animationState.setActive(\"whileInView\", isIntersecting);\n            }\n            /**\n             * Use the latest committed props rather than the ones in scope\n             * when this observer is created\n             */\n            const { onViewportEnter, onViewportLeave } = this.node.getProps();\n            const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n            callback && callback(entry);\n        };\n        this.stopObserver = observeIntersection(this.node.current, options, onIntersectionUpdate);\n    }\n    mount() {\n        this.startObserver();\n    }\n    update() {\n        if (typeof IntersectionObserver === \"undefined\")\n            return;\n        const { props, prevProps } = this.node;\n        const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n        if (hasOptionsChanged) {\n            this.startObserver();\n        }\n    }\n    unmount() {\n        this.stopObserver?.();\n        this.hasEnteredView = false;\n        this.isInView = false;\n    }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n    return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n//# sourceMappingURL=index.mjs.map\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst gestureAnimations = {\n    inView: {\n        Feature: InViewFeature,\n    },\n    tap: {\n        Feature: PressGesture,\n    },\n    focus: {\n        Feature: FocusGesture,\n    },\n    hover: {\n        Feature: HoverGesture,\n    },\n};\n\nexport { gestureAnimations };\n//# sourceMappingURL=gestures.mjs.map\n","import { Feature, addDomEvent } from 'motion-dom';\nimport { pipe } from 'motion-utils';\n\nclass FocusGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.isActive = false;\n    }\n    onFocus() {\n        let isFocusVisible = false;\n        /**\n         * If this element doesn't match focus-visible then don't\n         * apply whileHover. But, if matches throws that focus-visible\n         * is not a valid selector then in that browser outline styles will be applied\n         * to the element by default and we want to match that behaviour with whileFocus.\n         */\n        try {\n            isFocusVisible = this.node.current.matches(\":focus-visible\");\n        }\n        catch (e) {\n            isFocusVisible = true;\n        }\n        if (!isFocusVisible || !this.node.animationState)\n            return;\n        this.node.animationState.setActive(\"whileFocus\", true);\n        this.isActive = true;\n    }\n    onBlur() {\n        if (!this.isActive || !this.node.animationState)\n            return;\n        this.node.animationState.setActive(\"whileFocus\", false);\n        this.isActive = false;\n    }\n    mount() {\n        this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n    }\n    unmount() { }\n}\n\nexport { FocusGesture };\n//# sourceMappingURL=focus.mjs.map\n","import { createDomVisualElement } from '../../dom/create-visual-element.mjs';\nimport { createMotionProxy } from '../create-proxy.mjs';\nimport { featureBundle } from './feature-bundle.mjs';\n\nconst motion = /*@__PURE__*/ createMotionProxy(featureBundle, createDomVisualElement);\n\nexport { motion };\n//# sourceMappingURL=proxy.mjs.map\n","import { animations } from '../../../motion/features/animations.mjs';\nimport { drag } from '../../../motion/features/drag.mjs';\nimport { gestureAnimations } from '../../../motion/features/gestures.mjs';\nimport { layout } from '../../../motion/features/layout.mjs';\n\nconst featureBundle = {\n    ...animations,\n    ...gestureAnimations,\n    ...drag,\n    ...layout,\n};\n\nexport { featureBundle };\n//# sourceMappingURL=feature-bundle.mjs.map\n","import { HTMLProjectionNode } from 'motion-dom';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n    layout: {\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { layout };\n//# sourceMappingURL=layout.mjs.map\n","import happyBlack from \"./assets/chatbot/chatbot_logo_happy_black.svg\";\nimport happyColor from \"./assets/chatbot/chatbot_logo_happy_color.svg\";\nimport happyWhite from \"./assets/chatbot/chatbot_logo_happy_white.svg\";\nimport sleepyBlack from \"./assets/chatbot/chatbot_logo_sleepy_black.svg\";\nimport sleepyColor from \"./assets/chatbot/chatbot_logo_sleepy_color.svg\";\nimport sleepyWhite from \"./assets/chatbot/chatbot_logo_sleepy_white.svg\";\n\nexport type ChatbotLogoMood = \"happy\" | \"sleepy\";\nexport type ChatbotLogoVariant = \"black\" | \"white\" | \"color\";\n\n/**\n * Asset imports return different shapes depending on the consumer's bundler:\n *   - Vite (apps/widget): a plain string URL.\n *   - Next.js (apps/app):  a `StaticImageData` object `{ src, height, width, … }`.\n * The TypeScript shim in `svg.d.ts` declares them as `string` for ergonomic\n * imports, but at runtime we must normalise both shapes to a URL before\n * feeding it into `<img src>`. Without this, the dashboard renders\n * `src=\"[object Object]\"` and the header logo turns into a broken image.\n */\ntype AssetImport = string | { src: string };\n\nfunction toUrl(asset: AssetImport): string {\n  return typeof asset === \"string\" ? asset : asset.src;\n}\n\nconst LOGOS: Record<ChatbotLogoMood, Record<ChatbotLogoVariant, AssetImport>> = {\n  happy: { black: happyBlack, white: happyWhite, color: happyColor },\n  sleepy: { black: sleepyBlack, white: sleepyWhite, color: sleepyColor },\n};\n\nconst SLEEPY_START_HOUR = 1;\nconst SLEEPY_END_HOUR = 4;\n\nfunction moodFromLocalHour(hour: number): ChatbotLogoMood {\n  return hour >= SLEEPY_START_HOUR && hour < SLEEPY_END_HOUR ? \"sleepy\" : \"happy\";\n}\n\nfunction variantFromPrimaryColor(hex: string): ChatbotLogoVariant {\n  let raw = hex.replace(\"#\", \"\");\n  if (raw.length === 3) {\n    raw = raw[0] + raw[0] + raw[1] + raw[1] + raw[2] + raw[2];\n  }\n  if (raw.length !== 6) return \"white\";\n  const r = Number.parseInt(raw.substring(0, 2), 16) / 255;\n  const g = Number.parseInt(raw.substring(2, 4), 16) / 255;\n  const b = Number.parseInt(raw.substring(4, 6), 16) / 255;\n  const toLinear = (c: number) => (c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);\n  const luminance = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n  return luminance > 0.4 ? \"black\" : \"white\";\n}\n\n/**\n * Resolve the default chatbot avatar URL given the widget's primary color.\n * Mood is derived from the user's current browser-local hour.\n */\nexport function selectChatbotLogo(primaryColor: string, now: Date = new Date()): string {\n  const mood = moodFromLocalHour(now.getHours());\n  const variant = variantFromPrimaryColor(primaryColor);\n  return toUrl(LOGOS[mood][variant]);\n}\n","export default \"data:image/svg+xml,%3csvg%20width='410'%20height='364'%20viewBox='0%200%20410%20364'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M107.859%204.42822C157.813%20-2.79445%20255.67%20-0.00375843%20285.171%204.46555C314.671%208.93486%20339.307%2018.0056%20359.194%2029.4839C379.082%2040.9622%20391.266%2060.3046%20399.753%2074.9996C407.998%2089.276%20409.161%20108.587%20409.276%20117.869C409.358%20124.601%20409.483%20131.175%20409.606%20137.651C410.108%20164.1%20410.579%20188.91%20407.998%20216.198C402.949%20269.593%20358.22%20313.38%20304.916%20320.147C254.911%20326.491%20204.685%20329.135%20154.344%20324.04C145.592%20323.154%20138.261%20324.823%20130.767%20330.152C108.346%20346.096%2082.8587%20355.647%2056.5171%20362.953C45.5756%20365.987%2041.4556%20362.57%2041.6924%20350.833L41.7048%20350.221C42.1046%20330.58%2042.5048%20310.925%2043.3675%20291.302C43.7551%20282.486%2041.1637%20275.725%2034.5312%20269.7C11.0379%20248.362%20-0.0299578%20221.543%200.254163%20189.844C0.328085%20181.591%200.234223%20173.334%200.14037%20165.077C-0.00388899%20152.386%20-0.148127%20139.696%200.31698%20127.027C2.05897%2079.5975%2022.0385%2041.8364%2063.8458%2018.2225C76.9768%2010.8057%2092.7775%206.60971%20107.859%204.42822ZM233.342%2029.5819C232.086%2029.6134%20230.843%2029.6445%20229.766%2029.6095C216.887%2030.0919%20204.088%2030.4562%20191.349%2030.8188C174.652%2031.2941%20158.056%2031.7665%20141.508%2032.4981C133.826%2032.8272%20126.327%2033.2021%20119.146%2033.6494L114.895%2033.9843C113.494%2034.1267%20112.106%2034.3127%20110.728%2034.5076C94.1682%2036.8509%2079.3068%2042.962%2067.1122%2052.1743C62.0269%2056.0151%2057.4002%2060.3887%2053.3135%2065.2568C52.0681%2066.7406%2050.8979%2068.2887%2049.7538%2069.8619C42.5173%2079.8112%2037.3406%2091.5089%2034.7406%20104.63C34.2474%20107.119%2033.831%20109.662%2033.5262%20112.249C30.881%20134.717%2031.4245%20157.605%2032.1442%20180.446C32.19%20181.893%2032.2368%20183.347%2032.2834%20184.794C32.4818%20190.958%2032.6802%20197.119%2032.8142%20203.262C32.8369%20204.295%2032.8812%20205.322%2032.9608%20206.339C33.1199%20208.369%2033.3975%20210.366%2033.7774%20212.326C34.1582%20214.291%2034.6488%20216.22%2035.2432%20218.103C35.7664%20219.759%2036.3826%20221.376%2037.0648%20222.959C40.6417%20231.267%2046.3597%20238.529%2053.816%20244.163C70.8018%20256.998%2076.2528%20273.023%2074.1477%20293.186C73.8805%20295.743%2073.7983%20298.327%2073.7708%20300.91C73.7383%20303.966%2073.8124%20307.036%2073.8866%20310.104C73.9343%20312.079%2073.982%20314.054%2074.0012%20316.023C74.0115%20317.036%2074.1414%20318.048%2074.2943%20319.058C74.3383%20319.342%2074.3836%20319.626%2074.4289%20319.91C74.5441%20320.633%2074.6596%20321.358%2074.755%20322.072C77.8546%20321.735%2081.0141%20321.053%2084.1984%20320.147C86.0769%20319.611%2087.9601%20318.978%2089.8519%20318.263C92.7858%20317.155%2095.7378%20315.867%2098.6672%20314.369C103.713%20311.789%20108.703%20308.649%20113.555%20305.117C117.723%20302.085%20121.779%20298.75%20125.649%20295.196C130.169%20291.259%20158.151%20292.439%20171.577%20293.521C172.489%20293.674%20173.24%20293.815%20173.89%20293.938C174.979%20294.143%20175.787%20294.295%20176.602%20294.358C181.244%20294.717%20185.887%20294.977%20190.526%20295.196C200.675%20295.674%20210.817%20295.84%20220.951%20295.719C245.566%20295.422%20270.127%20293.51%20294.593%20290.653C296.173%20290.469%20297.738%20290.25%20299.283%20290.004C300.83%20289.758%20302.358%20289.474%20303.869%20289.167C306.895%20288.553%20309.848%20287.818%20312.726%20286.969C322.791%20283.999%20331.934%20279.63%20339.989%20274.033C342.294%20272.432%20344.502%20270.721%20346.626%20268.926C348.748%20267.132%20350.786%20265.253%20352.72%20263.274C363.358%20252.393%20371.106%20238.785%20375.355%20223.21C376.513%20218.963%20377.409%20214.568%20378.035%20210.044C378.661%20205.523%20379.012%20200.87%20379.082%20196.103C379.422%20172.729%20379.449%20149.332%20379.082%20125.96C378.995%20120.471%20378.072%20114.989%20377.111%20109.286C376.708%20106.894%20376.298%20104.459%20375.941%20101.972C375.923%20101.915%20375.9%20101.858%20375.877%20101.802C375.855%20101.747%20375.833%20101.691%20375.815%20101.637C375.81%20101.601%20375.805%20101.565%20375.8%20101.529C375.792%20101.46%20375.784%20101.391%20375.773%20101.323C365.976%2071.1155%20346.891%2051.5285%20319.887%2041.1012C313.652%2038.6892%20306.995%2036.7732%20299.932%2035.324C289.257%2032.6223%20261.916%2027.6971%20237.953%2029.6095C237.88%2029.6024%20237.805%2029.5997%20237.729%2029.5969C237.672%2029.5948%20237.614%2029.5926%20237.555%2029.5886L237.639%2029.4839C237.184%2029.501%20236.727%2029.5085%20236.27%2029.5161C235.827%2029.5234%20235.383%2029.5307%20234.938%2029.5467C234.411%2029.5551%20233.876%2029.5686%20233.342%2029.5819Z'%20fill='black'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M174.368%20287.797C174.395%20287.74%20174.422%20287.684%20174.449%20287.628C174.422%20287.684%20174.394%20287.741%20174.368%20287.797Z'%20fill='black'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M335.189%20150C329.189%20154.5%20316.189%20151.5%20314.689%20149.5C313.189%20147.5%20310.689%20144.5%20310.689%20144.5C310.689%20144.5%20305.179%20138.822%20301.689%20136C288.792%20125.575%20273.604%20125.497%20259.989%20135.945C259.084%20136.638%20258.184%20137.379%20257.287%20138.163C256.874%20138.525%20256.46%20138.89%20256.046%20139.256C252.994%20141.946%20249.895%20144.678%20246.399%20146.62C242.508%20148.78%20238.538%20149.337%20234.967%20148.399C233.17%20147.926%20231.476%20147.074%20229.941%20145.866C228.416%20144.668%20227.048%20143.111%20225.9%20141.219C224.248%20138.496%20222.97%20135.437%20222.026%20132.323C221.712%20131.29%20221.429%20130.24%20221.189%20129.204C220.78%20127.439%20220.689%20125.5%20224.645%20120.5C228.602%20115.5%20241.974%20107.212%20251.404%20102.432C251.578%20102.381%20251.752%20102.329%20251.927%20102.277L252.273%20102.174C252.7%20102.047%20253.128%20101.921%20253.557%20101.793L253.578%20101.787C255.62%20101.183%20257.684%20100.571%20259.737%2099.9414C262.412%2099.121%20265.091%2098.4896%20267.757%2098.0157C269.205%2097.7581%20270.651%2097.5677%20272.091%2097.4086C275.962%2096.9817%20279.796%2096.8866%20283.566%2097.1365C284.866%2097.2225%20286.157%2097.3508%20287.44%2097.5133C289.986%2097.8361%20292.495%2098.3038%20294.957%2098.9157C296.197%2099.224%20297.427%2099.5629%20298.642%2099.9414C308.313%20102.956%20317.135%20108.167%20324.418%20115.054C325.328%20115.915%20326.216%20116.8%20327.077%20117.713C330.518%20121.359%20333.558%20125.404%20336.102%20129.791C336.739%20130.89%20337.328%20132.02%20337.902%20133.161C339.622%20136.577%20341.189%20145.5%20335.189%20150Z'%20fill='black'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M189.189%20150C183.189%20154.5%20170.189%20151.5%20168.689%20149.5C167.189%20147.5%20164.689%20144.5%20164.689%20144.5C164.689%20144.5%20159.179%20138.822%20155.689%20136C142.792%20125.575%20127.604%20125.497%20113.989%20135.945C113.084%20136.638%20112.184%20137.379%20111.287%20138.163C110.874%20138.525%20110.46%20138.89%20110.046%20139.256C106.994%20141.946%20103.895%20144.678%20100.399%20146.62C96.5084%20148.78%2092.538%20149.337%2088.9666%20148.399C87.1696%20147.926%2085.4763%20147.074%2083.9412%20145.866C82.4159%20144.668%2081.0479%20143.111%2079.9%20141.219C78.2484%20138.496%2076.9701%20135.437%2076.0263%20132.323C75.7124%20131.29%2075.4285%20130.24%2075.1887%20129.204C74.7803%20127.439%2074.6887%20125.5%2078.6452%20120.5C82.6018%20115.5%2095.9742%20107.212%20105.404%20102.432C105.578%20102.381%20105.752%20102.329%20105.927%20102.277L106.273%20102.174C106.7%20102.047%20107.128%20101.921%20107.557%20101.793L107.578%20101.787C109.62%20101.183%20111.684%20100.571%20113.737%2099.9414C116.412%2099.121%20119.091%2098.4896%20121.757%2098.0157C123.205%2097.7581%20124.651%2097.5677%20126.091%2097.4086C129.962%2096.9817%20133.796%2096.8866%20137.566%2097.1365C138.866%2097.2225%20140.157%2097.3508%20141.44%2097.5133C143.986%2097.8361%20146.495%2098.3038%20148.957%2098.9157C150.197%2099.224%20151.427%2099.5629%20152.642%2099.9414C162.313%20102.956%20171.135%20108.167%20178.418%20115.054C179.328%20115.915%20180.216%20116.8%20181.077%20117.713C184.518%20121.359%20187.558%20125.404%20190.102%20129.791C190.739%20130.89%20191.328%20132.02%20191.902%20133.161C193.622%20136.577%20195.189%20145.5%20189.189%20150Z'%20fill='black'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='410'%20height='364'%20viewBox='0%200%20410%20364'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M107.859%204.42822C157.813%20-2.79445%20255.67%20-0.00375843%20285.171%204.46555C314.671%208.93486%20339.307%2018.0056%20359.194%2029.4839C379.082%2040.9622%20391.266%2060.3046%20399.753%2074.9996C407.998%2089.276%20409.161%20108.587%20409.276%20117.869C409.358%20124.601%20409.483%20131.175%20409.606%20137.651C410.108%20164.1%20410.579%20188.91%20407.998%20216.198C402.949%20269.593%20358.22%20313.38%20304.916%20320.147C254.911%20326.491%20204.685%20329.135%20154.344%20324.04C145.592%20323.154%20138.261%20324.823%20130.767%20330.152C108.346%20346.096%2082.8587%20355.647%2056.5171%20362.953C45.5756%20365.987%2041.4556%20362.57%2041.6924%20350.833L41.7048%20350.221C42.1046%20330.58%2042.5048%20310.925%2043.3675%20291.302C43.7551%20282.486%2041.1637%20275.725%2034.5312%20269.7C11.0379%20248.362%20-0.0299578%20221.543%200.254163%20189.844C0.328085%20181.591%200.234223%20173.334%200.14037%20165.077C-0.00388899%20152.386%20-0.148127%20139.696%200.31698%20127.027C2.05897%2079.5975%2022.0385%2041.8364%2063.8458%2018.2225C76.9768%2010.8057%2092.7775%206.60971%20107.859%204.42822ZM233.342%2029.5819C232.086%2029.6134%20230.843%2029.6445%20229.766%2029.6095C216.887%2030.0919%20204.088%2030.4562%20191.349%2030.8188C174.652%2031.2941%20158.056%2031.7665%20141.508%2032.4981C133.826%2032.8272%20126.327%2033.2021%20119.146%2033.6494L114.895%2033.9843C113.494%2034.1267%20112.106%2034.3127%20110.728%2034.5076C94.1682%2036.8509%2079.3068%2042.962%2067.1122%2052.1743C62.0269%2056.0151%2057.4002%2060.3887%2053.3135%2065.2568C52.0681%2066.7406%2050.8979%2068.2887%2049.7538%2069.8619C42.5173%2079.8112%2037.3406%2091.5089%2034.7406%20104.63C34.2474%20107.119%2033.831%20109.662%2033.5262%20112.249C30.881%20134.717%2031.4245%20157.605%2032.1442%20180.446C32.19%20181.893%2032.2368%20183.347%2032.2834%20184.794C32.4818%20190.958%2032.6802%20197.119%2032.8142%20203.262C32.8369%20204.295%2032.8812%20205.322%2032.9608%20206.339C33.1199%20208.369%2033.3975%20210.366%2033.7774%20212.326C34.1582%20214.291%2034.6488%20216.22%2035.2432%20218.103C35.7664%20219.759%2036.3826%20221.376%2037.0648%20222.959C40.6417%20231.267%2046.3597%20238.529%2053.816%20244.163C70.8018%20256.998%2076.2528%20273.023%2074.1477%20293.186C73.8805%20295.743%2073.7983%20298.327%2073.7708%20300.91C73.7383%20303.966%2073.8124%20307.036%2073.8866%20310.104C73.9343%20312.079%2073.982%20314.054%2074.0012%20316.023C74.0115%20317.036%2074.1414%20318.048%2074.2943%20319.058C74.3383%20319.342%2074.3836%20319.626%2074.4289%20319.91C74.5441%20320.633%2074.6596%20321.358%2074.755%20322.072C77.8546%20321.735%2081.0141%20321.053%2084.1984%20320.147C86.0769%20319.611%2087.9601%20318.978%2089.8519%20318.263C92.7858%20317.155%2095.7378%20315.867%2098.6672%20314.369C103.713%20311.789%20108.703%20308.649%20113.555%20305.117C117.723%20302.085%20121.779%20298.75%20125.649%20295.196C130.169%20291.259%20158.151%20292.439%20171.577%20293.521C172.489%20293.674%20173.24%20293.815%20173.89%20293.938C174.979%20294.143%20175.787%20294.295%20176.602%20294.358C181.244%20294.717%20185.887%20294.977%20190.526%20295.196C200.675%20295.674%20210.817%20295.84%20220.951%20295.719C245.566%20295.422%20270.127%20293.51%20294.593%20290.653C296.173%20290.469%20297.738%20290.25%20299.283%20290.004C300.83%20289.758%20302.358%20289.474%20303.869%20289.167C306.895%20288.553%20309.848%20287.818%20312.726%20286.969C322.791%20283.999%20331.934%20279.63%20339.989%20274.033C342.294%20272.432%20344.502%20270.721%20346.626%20268.926C348.748%20267.132%20350.786%20265.253%20352.72%20263.274C363.358%20252.393%20371.106%20238.785%20375.355%20223.21C376.513%20218.963%20377.409%20214.568%20378.035%20210.044C378.661%20205.523%20379.012%20200.87%20379.082%20196.103C379.422%20172.729%20379.449%20149.332%20379.082%20125.96C378.995%20120.471%20378.072%20114.989%20377.111%20109.286C376.708%20106.894%20376.298%20104.459%20375.941%20101.972C375.923%20101.915%20375.9%20101.858%20375.877%20101.802C375.855%20101.747%20375.833%20101.691%20375.815%20101.637C375.81%20101.601%20375.805%20101.565%20375.8%20101.529C375.792%20101.46%20375.784%20101.391%20375.773%20101.323C365.976%2071.1155%20346.891%2051.5285%20319.887%2041.1012C313.652%2038.6892%20306.995%2036.7732%20299.932%2035.324C289.257%2032.6223%20261.916%2027.6971%20237.953%2029.6095C237.88%2029.6024%20237.805%2029.5997%20237.729%2029.5969C237.672%2029.5948%20237.614%2029.5926%20237.555%2029.5886L237.639%2029.4839C237.184%2029.501%20236.727%2029.5085%20236.27%2029.5161C235.827%2029.5234%20235.383%2029.5307%20234.938%2029.5467C234.411%2029.5551%20233.876%2029.5686%20233.342%2029.5819Z'%20fill='white'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M174.368%20287.797C174.395%20287.74%20174.422%20287.684%20174.449%20287.628C174.422%20287.684%20174.394%20287.741%20174.368%20287.797Z'%20fill='white'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M335.189%20150C329.189%20154.5%20316.189%20151.5%20314.689%20149.5C313.189%20147.5%20310.689%20144.5%20310.689%20144.5C310.689%20144.5%20305.179%20138.822%20301.689%20136C288.792%20125.575%20273.604%20125.497%20259.989%20135.945C259.084%20136.638%20258.184%20137.379%20257.287%20138.163C256.874%20138.525%20256.46%20138.89%20256.046%20139.256C252.994%20141.946%20249.895%20144.678%20246.399%20146.62C242.508%20148.78%20238.538%20149.337%20234.967%20148.399C233.17%20147.926%20231.476%20147.074%20229.941%20145.866C228.416%20144.668%20227.048%20143.111%20225.9%20141.219C224.248%20138.496%20222.97%20135.437%20222.026%20132.323C221.712%20131.29%20221.429%20130.24%20221.189%20129.204C220.78%20127.439%20220.689%20125.5%20224.645%20120.5C228.602%20115.5%20241.974%20107.212%20251.404%20102.432C251.578%20102.381%20251.752%20102.329%20251.927%20102.277L252.273%20102.174C252.7%20102.047%20253.128%20101.921%20253.557%20101.793L253.578%20101.787C255.62%20101.183%20257.684%20100.571%20259.737%2099.9414C262.412%2099.121%20265.091%2098.4896%20267.757%2098.0157C269.205%2097.7581%20270.651%2097.5677%20272.091%2097.4086C275.962%2096.9817%20279.796%2096.8866%20283.566%2097.1365C284.866%2097.2225%20286.157%2097.3508%20287.44%2097.5133C289.986%2097.8361%20292.495%2098.3038%20294.957%2098.9157C296.197%2099.224%20297.427%2099.5629%20298.642%2099.9414C308.313%20102.956%20317.135%20108.167%20324.418%20115.054C325.328%20115.915%20326.216%20116.8%20327.077%20117.713C330.518%20121.359%20333.558%20125.404%20336.102%20129.791C336.739%20130.89%20337.328%20132.02%20337.902%20133.161C339.622%20136.577%20341.189%20145.5%20335.189%20150Z'%20fill='white'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M189.189%20150C183.189%20154.5%20170.189%20151.5%20168.689%20149.5C167.189%20147.5%20164.689%20144.5%20164.689%20144.5C164.689%20144.5%20159.179%20138.822%20155.689%20136C142.792%20125.575%20127.604%20125.497%20113.989%20135.945C113.084%20136.638%20112.184%20137.379%20111.287%20138.163C110.874%20138.525%20110.46%20138.89%20110.046%20139.256C106.994%20141.946%20103.895%20144.678%20100.399%20146.62C96.5084%20148.78%2092.538%20149.337%2088.9666%20148.399C87.1696%20147.926%2085.4763%20147.074%2083.9412%20145.866C82.4159%20144.668%2081.0479%20143.111%2079.9%20141.219C78.2484%20138.496%2076.9701%20135.437%2076.0263%20132.323C75.7124%20131.29%2075.4285%20130.24%2075.1887%20129.204C74.7803%20127.439%2074.6887%20125.5%2078.6452%20120.5C82.6018%20115.5%2095.9742%20107.212%20105.404%20102.432C105.578%20102.381%20105.752%20102.329%20105.927%20102.277L106.273%20102.174C106.7%20102.047%20107.128%20101.921%20107.557%20101.793L107.578%20101.787C109.62%20101.183%20111.684%20100.571%20113.737%2099.9414C116.412%2099.121%20119.091%2098.4896%20121.757%2098.0157C123.205%2097.7581%20124.651%2097.5677%20126.091%2097.4086C129.962%2096.9817%20133.796%2096.8866%20137.566%2097.1365C138.866%2097.2225%20140.157%2097.3508%20141.44%2097.5133C143.986%2097.8361%20146.495%2098.3038%20148.957%2098.9157C150.197%2099.224%20151.427%2099.5629%20152.642%2099.9414C162.313%20102.956%20171.135%20108.167%20178.418%20115.054C179.328%20115.915%20180.216%20116.8%20181.077%20117.713C184.518%20121.359%20187.558%20125.404%20190.102%20129.791C190.739%20130.89%20191.328%20132.02%20191.902%20133.161C193.622%20136.577%20195.189%20145.5%20189.189%20150Z'%20fill='white'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='410'%20height='364'%20viewBox='0%200%20410%20364'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M107.859%204.42822C157.813%20-2.79445%20255.67%20-0.00375843%20285.171%204.46555C314.671%208.93486%20339.307%2018.0056%20359.194%2029.4839C379.082%2040.9622%20391.266%2060.3046%20399.753%2074.9996C407.998%2089.276%20409.161%20108.587%20409.276%20117.869C409.358%20124.601%20409.483%20131.175%20409.606%20137.651C410.108%20164.1%20410.579%20188.91%20407.998%20216.198C402.949%20269.593%20358.22%20313.38%20304.916%20320.147C254.911%20326.491%20204.685%20329.135%20154.344%20324.04C145.592%20323.154%20138.261%20324.823%20130.767%20330.152C108.346%20346.096%2082.8587%20355.647%2056.5171%20362.953C45.5756%20365.987%2041.4556%20362.57%2041.6924%20350.833L41.7048%20350.221C42.1046%20330.58%2042.5048%20310.925%2043.3675%20291.302C43.7551%20282.486%2041.1637%20275.725%2034.5312%20269.7C11.0379%20248.362%20-0.0299578%20221.543%200.254163%20189.844C0.328085%20181.591%200.234223%20173.334%200.14037%20165.077C-0.00388899%20152.386%20-0.148127%20139.696%200.31698%20127.027C2.05897%2079.5975%2022.0385%2041.8364%2063.8458%2018.2225C76.9768%2010.8057%2092.7775%206.60971%20107.859%204.42822ZM233.342%2029.5819C232.086%2029.6134%20230.843%2029.6445%20229.766%2029.6095C216.887%2030.0919%20204.088%2030.4562%20191.349%2030.8188C174.652%2031.2941%20158.056%2031.7665%20141.508%2032.4981C133.826%2032.8272%20126.327%2033.2021%20119.146%2033.6494L114.895%2033.9843C113.494%2034.1267%20112.106%2034.3127%20110.728%2034.5076C94.1682%2036.8509%2079.3068%2042.962%2067.1122%2052.1743C62.0269%2056.0151%2057.4002%2060.3887%2053.3135%2065.2568C52.0681%2066.7406%2050.8979%2068.2887%2049.7538%2069.8619C42.5173%2079.8112%2037.3406%2091.5089%2034.7406%20104.63C34.2474%20107.119%2033.831%20109.662%2033.5262%20112.249C30.881%20134.717%2031.4245%20157.605%2032.1442%20180.446C32.19%20181.893%2032.2368%20183.347%2032.2834%20184.794C32.4818%20190.958%2032.6802%20197.119%2032.8142%20203.262C32.8369%20204.295%2032.8812%20205.322%2032.9608%20206.339C33.1199%20208.369%2033.3975%20210.366%2033.7774%20212.326C34.1582%20214.291%2034.6488%20216.22%2035.2432%20218.103C35.7664%20219.759%2036.3826%20221.376%2037.0648%20222.959C40.6417%20231.267%2046.3597%20238.529%2053.816%20244.163C70.8018%20256.998%2076.2528%20273.023%2074.1477%20293.186C73.8805%20295.743%2073.7983%20298.327%2073.7708%20300.91C73.7383%20303.966%2073.8124%20307.036%2073.8866%20310.104C73.9343%20312.079%2073.982%20314.054%2074.0012%20316.023C74.0115%20317.036%2074.1414%20318.048%2074.2943%20319.058C74.3383%20319.342%2074.3836%20319.626%2074.4289%20319.91C74.5441%20320.633%2074.6596%20321.358%2074.755%20322.072C77.8546%20321.735%2081.0141%20321.053%2084.1984%20320.147C86.0769%20319.611%2087.9601%20318.978%2089.8519%20318.263C92.7858%20317.155%2095.7378%20315.867%2098.6672%20314.369C103.713%20311.789%20108.703%20308.649%20113.555%20305.117C117.723%20302.085%20121.779%20298.75%20125.649%20295.196C130.169%20291.259%20158.151%20292.439%20171.577%20293.521C172.489%20293.674%20173.24%20293.815%20173.89%20293.938C174.979%20294.143%20175.787%20294.295%20176.602%20294.358C181.244%20294.717%20185.887%20294.977%20190.526%20295.196C200.675%20295.674%20210.817%20295.84%20220.951%20295.719C245.566%20295.422%20270.127%20293.51%20294.593%20290.653C296.173%20290.469%20297.738%20290.25%20299.283%20290.004C300.83%20289.758%20302.358%20289.474%20303.869%20289.167C306.895%20288.553%20309.848%20287.818%20312.726%20286.969C322.791%20283.999%20331.934%20279.63%20339.989%20274.033C342.294%20272.432%20344.502%20270.721%20346.626%20268.926C348.748%20267.132%20350.786%20265.253%20352.72%20263.274C363.358%20252.393%20371.106%20238.785%20375.355%20223.21C376.513%20218.963%20377.409%20214.568%20378.035%20210.044C378.661%20205.523%20379.012%20200.87%20379.082%20196.103C379.422%20172.729%20379.449%20149.332%20379.082%20125.96C378.995%20120.471%20378.072%20114.989%20377.111%20109.286C376.708%20106.894%20376.298%20104.459%20375.941%20101.972C375.923%20101.915%20375.9%20101.858%20375.877%20101.802C375.855%20101.747%20375.833%20101.691%20375.815%20101.637C375.81%20101.601%20375.805%20101.565%20375.8%20101.529C375.792%20101.46%20375.784%20101.391%20375.773%20101.323C365.976%2071.1155%20346.891%2051.5285%20319.887%2041.1012C313.652%2038.6892%20306.995%2036.7732%20299.932%2035.324C289.257%2032.6223%20261.916%2027.6971%20237.953%2029.6095C237.88%2029.6024%20237.805%2029.5997%20237.729%2029.5969C237.672%2029.5948%20237.614%2029.5926%20237.555%2029.5886L237.639%2029.4839C237.184%2029.501%20236.727%2029.5085%20236.27%2029.5161C235.827%2029.5234%20235.383%2029.5307%20234.938%2029.5467C234.411%2029.5551%20233.876%2029.5686%20233.342%2029.5819Z'%20fill='url(%23paint0_linear_393_5327)'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M174.368%20287.797C174.395%20287.74%20174.422%20287.684%20174.449%20287.628C174.422%20287.684%20174.394%20287.741%20174.368%20287.797Z'%20fill='url(%23paint1_linear_393_5327)'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M335.189%20150C329.189%20154.5%20316.189%20151.5%20314.689%20149.5C313.189%20147.5%20310.689%20144.5%20310.689%20144.5C310.689%20144.5%20305.179%20138.822%20301.689%20136C288.792%20125.575%20273.604%20125.497%20259.989%20135.945C259.084%20136.638%20258.184%20137.379%20257.287%20138.163C256.874%20138.525%20256.46%20138.89%20256.046%20139.256C252.994%20141.946%20249.895%20144.678%20246.399%20146.62C242.508%20148.78%20238.538%20149.337%20234.967%20148.399C233.17%20147.926%20231.476%20147.074%20229.941%20145.866C228.416%20144.668%20227.048%20143.111%20225.9%20141.219C224.248%20138.496%20222.97%20135.437%20222.026%20132.323C221.712%20131.29%20221.429%20130.24%20221.189%20129.204C220.78%20127.439%20220.689%20125.5%20224.645%20120.5C228.602%20115.5%20241.974%20107.212%20251.404%20102.432C251.578%20102.381%20251.752%20102.329%20251.927%20102.277L252.273%20102.174C252.7%20102.047%20253.128%20101.921%20253.557%20101.793L253.578%20101.787C255.62%20101.183%20257.684%20100.571%20259.737%2099.9414C262.412%2099.121%20265.091%2098.4896%20267.757%2098.0157C269.205%2097.7581%20270.651%2097.5677%20272.091%2097.4086C275.962%2096.9817%20279.796%2096.8866%20283.566%2097.1365C284.866%2097.2225%20286.157%2097.3508%20287.44%2097.5133C289.986%2097.8361%20292.495%2098.3038%20294.957%2098.9157C296.197%2099.224%20297.427%2099.5629%20298.642%2099.9414C308.313%20102.956%20317.135%20108.167%20324.418%20115.054C325.328%20115.915%20326.216%20116.8%20327.077%20117.713C330.518%20121.359%20333.558%20125.404%20336.102%20129.791C336.739%20130.89%20337.328%20132.02%20337.902%20133.161C339.622%20136.577%20341.189%20145.5%20335.189%20150Z'%20fill='url(%23paint2_linear_393_5327)'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M189.189%20150C183.189%20154.5%20170.189%20151.5%20168.689%20149.5C167.189%20147.5%20164.689%20144.5%20164.689%20144.5C164.689%20144.5%20159.179%20138.822%20155.689%20136C142.792%20125.575%20127.604%20125.497%20113.989%20135.945C113.084%20136.638%20112.184%20137.379%20111.287%20138.163C110.874%20138.525%20110.46%20138.89%20110.046%20139.256C106.994%20141.946%20103.895%20144.678%20100.399%20146.62C96.5084%20148.78%2092.538%20149.337%2088.9666%20148.399C87.1696%20147.926%2085.4763%20147.074%2083.9412%20145.866C82.4159%20144.668%2081.0479%20143.111%2079.9%20141.219C78.2484%20138.496%2076.9701%20135.437%2076.0263%20132.323C75.7124%20131.29%2075.4285%20130.24%2075.1887%20129.204C74.7803%20127.439%2074.6887%20125.5%2078.6452%20120.5C82.6018%20115.5%2095.9742%20107.212%20105.404%20102.432C105.578%20102.381%20105.752%20102.329%20105.927%20102.277L106.273%20102.174C106.7%20102.047%20107.128%20101.921%20107.557%20101.793L107.578%20101.787C109.62%20101.183%20111.684%20100.571%20113.737%2099.9414C116.412%2099.121%20119.091%2098.4896%20121.757%2098.0157C123.205%2097.7581%20124.651%2097.5677%20126.091%2097.4086C129.962%2096.9817%20133.796%2096.8866%20137.566%2097.1365C138.866%2097.2225%20140.157%2097.3508%20141.44%2097.5133C143.986%2097.8361%20146.495%2098.3038%20148.957%2098.9157C150.197%2099.224%20151.427%2099.5629%20152.642%2099.9414C162.313%20102.956%20171.135%20108.167%20178.418%20115.054C179.328%20115.915%20180.216%20116.8%20181.077%20117.713C184.518%20121.359%20187.558%20125.404%20190.102%20129.791C190.739%20130.89%20191.328%20132.02%20191.902%20133.161C193.622%20136.577%20195.189%20145.5%20189.189%20150Z'%20fill='url(%23paint3_linear_393_5327)'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_393_5327'%20x1='1012.33'%20y1='288.851'%20x2='1012.33'%20y2='654.105'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint1_linear_393_5327'%20x1='1012.33'%20y1='288.851'%20x2='1012.33'%20y2='654.105'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint2_linear_393_5327'%20x1='46.9748'%20y1='108.427'%20x2='46.9748'%20y2='52.8886'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint3_linear_393_5327'%20x1='-99.0252'%20y1='108.427'%20x2='-99.0252'%20y2='52.8886'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='410'%20height='364'%20viewBox='0%200%20410%20364'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M107.859%204.42822C157.813%20-2.79445%20255.67%20-0.00375843%20285.171%204.46555C314.671%208.93486%20339.307%2018.0056%20359.194%2029.4839C379.082%2040.9622%20391.266%2060.3046%20399.753%2074.9996C407.998%2089.276%20409.161%20108.587%20409.276%20117.869C409.358%20124.601%20409.483%20131.175%20409.606%20137.651C410.108%20164.1%20410.579%20188.91%20407.998%20216.198C402.949%20269.593%20358.22%20313.38%20304.916%20320.147C254.911%20326.491%20204.685%20329.135%20154.344%20324.04C145.592%20323.154%20138.261%20324.823%20130.767%20330.152C108.346%20346.096%2082.8587%20355.647%2056.5171%20362.953C45.5756%20365.987%2041.4556%20362.57%2041.6924%20350.833L41.7048%20350.221C42.1046%20330.58%2042.5048%20310.925%2043.3675%20291.302C43.7551%20282.486%2041.1637%20275.725%2034.5312%20269.7C11.0379%20248.362%20-0.0299578%20221.543%200.254163%20189.844C0.328085%20181.591%200.234223%20173.334%200.14037%20165.077C-0.00388899%20152.386%20-0.148127%20139.696%200.31698%20127.027C2.05897%2079.5975%2022.0385%2041.8364%2063.8458%2018.2225C76.9768%2010.8057%2092.7775%206.60971%20107.859%204.42822ZM233.342%2029.5819C232.086%2029.6134%20230.843%2029.6445%20229.766%2029.6095C216.887%2030.0919%20204.088%2030.4562%20191.349%2030.8188C174.652%2031.2941%20158.056%2031.7665%20141.508%2032.4981C133.826%2032.8272%20126.327%2033.2021%20119.146%2033.6494L114.895%2033.9843C113.494%2034.1267%20112.106%2034.3127%20110.728%2034.5076C94.1682%2036.8509%2079.3068%2042.962%2067.1122%2052.1743C62.0269%2056.0151%2057.4002%2060.3887%2053.3135%2065.2568C52.0681%2066.7406%2050.8979%2068.2887%2049.7538%2069.8619C42.5173%2079.8112%2037.3406%2091.5089%2034.7406%20104.63C34.2474%20107.119%2033.831%20109.662%2033.5262%20112.249C30.881%20134.717%2031.4245%20157.605%2032.1442%20180.446C32.19%20181.893%2032.2368%20183.347%2032.2834%20184.794C32.4818%20190.958%2032.6802%20197.119%2032.8142%20203.262C32.8369%20204.295%2032.8812%20205.322%2032.9608%20206.339C33.1199%20208.369%2033.3975%20210.366%2033.7774%20212.326C34.1582%20214.291%2034.6488%20216.22%2035.2432%20218.103C35.7664%20219.759%2036.3826%20221.376%2037.0648%20222.959C40.6417%20231.267%2046.3597%20238.529%2053.816%20244.163C70.8018%20256.998%2076.2528%20273.023%2074.1477%20293.186C73.8805%20295.743%2073.7983%20298.327%2073.7708%20300.91C73.7383%20303.966%2073.8124%20307.036%2073.8866%20310.104C73.9343%20312.079%2073.982%20314.054%2074.0012%20316.023C74.0115%20317.036%2074.1414%20318.048%2074.2943%20319.058C74.3383%20319.342%2074.3836%20319.626%2074.4289%20319.91C74.5441%20320.633%2074.6596%20321.358%2074.755%20322.072C77.8546%20321.735%2081.0141%20321.053%2084.1984%20320.147C86.0769%20319.611%2087.9601%20318.978%2089.8519%20318.263C92.7858%20317.155%2095.7378%20315.867%2098.6672%20314.369C103.713%20311.789%20108.703%20308.649%20113.555%20305.117C117.723%20302.085%20121.779%20298.75%20125.649%20295.196C130.169%20291.259%20158.151%20292.439%20171.577%20293.521C172.489%20293.674%20173.24%20293.815%20173.89%20293.938C174.979%20294.143%20175.787%20294.295%20176.602%20294.358C181.244%20294.717%20185.887%20294.977%20190.526%20295.196C200.675%20295.674%20210.817%20295.84%20220.951%20295.719C245.566%20295.422%20270.127%20293.51%20294.593%20290.653C296.173%20290.469%20297.738%20290.25%20299.283%20290.004C300.83%20289.758%20302.358%20289.474%20303.869%20289.167C306.895%20288.553%20309.848%20287.818%20312.726%20286.969C322.791%20283.999%20331.934%20279.63%20339.989%20274.033C342.294%20272.432%20344.502%20270.721%20346.626%20268.926C348.748%20267.132%20350.786%20265.253%20352.72%20263.274C363.358%20252.393%20371.106%20238.785%20375.355%20223.21C376.513%20218.963%20377.409%20214.568%20378.035%20210.044C378.661%20205.523%20379.012%20200.87%20379.082%20196.103C379.422%20172.729%20379.449%20149.332%20379.082%20125.96C378.995%20120.471%20378.072%20114.989%20377.111%20109.286C376.708%20106.894%20376.298%20104.459%20375.941%20101.972C375.923%20101.915%20375.9%20101.858%20375.877%20101.802C375.855%20101.747%20375.833%20101.691%20375.815%20101.637C375.81%20101.601%20375.805%20101.565%20375.8%20101.529C375.792%20101.46%20375.784%20101.391%20375.773%20101.323C365.976%2071.1155%20346.891%2051.5285%20319.887%2041.1012C313.652%2038.6892%20306.995%2036.7732%20299.932%2035.324C289.257%2032.6223%20261.916%2027.6971%20237.953%2029.6095C237.88%2029.6024%20237.805%2029.5997%20237.729%2029.5969C237.672%2029.5948%20237.614%2029.5926%20237.555%2029.5886L237.639%2029.4839C237.184%2029.501%20236.727%2029.5085%20236.27%2029.5161C235.827%2029.5234%20235.383%2029.5307%20234.938%2029.5467C234.411%2029.5551%20233.876%2029.5686%20233.342%2029.5819Z'%20fill='black'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M174.368%20287.797C174.395%20287.74%20174.422%20287.684%20174.449%20287.628C174.422%20287.684%20174.394%20287.741%20174.368%20287.797Z'%20fill='black'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M79.2682%20179.348C85.2683%20174.848%2098.2683%20177.848%2099.7683%20179.848C101.268%20181.848%20103.768%20184.848%20103.768%20184.848C103.768%20184.848%20109.278%20190.525%20112.768%20193.348C125.665%20203.773%20140.853%20203.851%20154.468%20193.403C155.373%20192.71%20156.273%20191.969%20157.17%20191.184C157.583%20190.822%20157.997%20190.458%20158.411%20190.092C161.463%20187.401%20164.562%20184.67%20168.058%20182.728C171.949%20180.568%20175.919%20180.011%20179.49%20180.948C181.287%20181.421%20182.981%20182.274%20184.516%20183.481C186.041%20184.68%20187.409%20186.237%20188.557%20188.128C190.209%20190.852%20191.487%20193.911%20192.431%20197.024C192.745%20198.058%20193.029%20199.107%20193.268%20200.143C193.677%20201.909%20193.768%20203.848%20189.812%20208.848C185.855%20213.848%20172.483%20222.136%20163.053%20226.915C162.879%20226.967%20162.705%20227.019%20162.53%20227.071L162.184%20227.174C161.757%20227.3%20161.329%20227.427%20160.9%20227.554L160.879%20227.56C158.837%20228.165%20156.774%20228.776%20154.72%20229.406C152.045%20230.227%20149.366%20230.858%20146.7%20231.332C145.252%20231.59%20143.806%20231.78%20142.366%20231.939C138.495%20232.366%20134.661%20232.461%20130.891%20232.211C129.591%20232.125%20128.3%20231.997%20127.017%20231.834C124.472%20231.512%20121.962%20231.044%20119.5%20230.432C118.26%20230.124%20117.03%20229.785%20115.815%20229.406C106.144%20226.392%2097.3221%20221.181%2090.0392%20214.293C89.1289%20213.432%2088.2409%20212.547%2087.38%20211.635C83.9395%20207.989%2080.8985%20203.943%2078.3553%20199.557C77.7179%20198.458%2077.1288%20197.328%2076.5546%20196.187C74.8346%20192.771%2073.2682%20183.848%2079.2682%20179.348Z'%20fill='black'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M225.268%20179.348C231.268%20174.848%20244.268%20177.848%20245.768%20179.848C247.268%20181.848%20249.768%20184.848%20249.768%20184.848C249.768%20184.848%20255.278%20190.525%20258.768%20193.348C271.665%20203.773%20286.853%20203.851%20300.468%20193.403C301.373%20192.71%20302.273%20191.969%20303.17%20191.184C303.583%20190.822%20303.997%20190.458%20304.411%20190.092C307.463%20187.401%20310.562%20184.67%20314.058%20182.728C317.949%20180.568%20321.919%20180.011%20325.49%20180.948C327.287%20181.421%20328.981%20182.274%20330.516%20183.481C332.041%20184.68%20333.409%20186.237%20334.557%20188.128C336.209%20190.852%20337.487%20193.911%20338.431%20197.024C338.745%20198.058%20339.029%20199.107%20339.268%20200.143C339.677%20201.909%20339.768%20203.848%20335.812%20208.848C331.855%20213.848%20318.483%20222.136%20309.053%20226.915C308.879%20226.967%20308.705%20227.019%20308.53%20227.071L308.184%20227.174C307.757%20227.3%20307.329%20227.427%20306.9%20227.554L306.879%20227.56C304.837%20228.165%20302.774%20228.776%20300.72%20229.406C298.045%20230.227%20295.366%20230.858%20292.7%20231.332C291.252%20231.59%20289.806%20231.78%20288.366%20231.939C284.495%20232.366%20280.661%20232.461%20276.891%20232.211C275.591%20232.125%20274.3%20231.997%20273.017%20231.834C270.472%20231.512%20267.962%20231.044%20265.5%20230.432C264.26%20230.124%20263.03%20229.785%20261.815%20229.406C252.144%20226.392%20243.322%20221.181%20236.039%20214.293C235.129%20213.432%20234.241%20212.547%20233.38%20211.635C229.939%20207.989%20226.899%20203.943%20224.355%20199.557C223.718%20198.458%20223.129%20197.328%20222.555%20196.187C220.835%20192.771%20219.268%20183.848%20225.268%20179.348Z'%20fill='black'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='410'%20height='364'%20viewBox='0%200%20410%20364'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M107.859%204.42822C157.813%20-2.79445%20255.67%20-0.00375843%20285.171%204.46555C314.671%208.93486%20339.307%2018.0056%20359.194%2029.4839C379.082%2040.9622%20391.266%2060.3046%20399.753%2074.9996C407.998%2089.276%20409.161%20108.587%20409.276%20117.869C409.358%20124.601%20409.483%20131.175%20409.606%20137.651C410.108%20164.1%20410.579%20188.91%20407.998%20216.198C402.949%20269.593%20358.22%20313.38%20304.916%20320.147C254.911%20326.491%20204.685%20329.135%20154.344%20324.04C145.592%20323.154%20138.261%20324.823%20130.767%20330.152C108.346%20346.096%2082.8587%20355.647%2056.5171%20362.953C45.5756%20365.987%2041.4556%20362.57%2041.6924%20350.833L41.7048%20350.221C42.1046%20330.58%2042.5048%20310.925%2043.3675%20291.302C43.7551%20282.486%2041.1637%20275.725%2034.5312%20269.7C11.0379%20248.362%20-0.0299578%20221.543%200.254163%20189.844C0.328085%20181.591%200.234223%20173.334%200.14037%20165.077C-0.00388899%20152.386%20-0.148127%20139.696%200.31698%20127.027C2.05897%2079.5975%2022.0385%2041.8364%2063.8458%2018.2225C76.9768%2010.8057%2092.7775%206.60971%20107.859%204.42822ZM233.342%2029.5819C232.086%2029.6134%20230.843%2029.6445%20229.766%2029.6095C216.887%2030.0919%20204.088%2030.4562%20191.349%2030.8188C174.652%2031.2941%20158.056%2031.7665%20141.508%2032.4981C133.826%2032.8272%20126.327%2033.2021%20119.146%2033.6494L114.895%2033.9843C113.494%2034.1267%20112.106%2034.3127%20110.728%2034.5076C94.1682%2036.8509%2079.3068%2042.962%2067.1122%2052.1743C62.0269%2056.0151%2057.4002%2060.3887%2053.3135%2065.2568C52.0681%2066.7406%2050.8979%2068.2887%2049.7538%2069.8619C42.5173%2079.8112%2037.3406%2091.5089%2034.7406%20104.63C34.2474%20107.119%2033.831%20109.662%2033.5262%20112.249C30.881%20134.717%2031.4245%20157.605%2032.1442%20180.446C32.19%20181.893%2032.2368%20183.347%2032.2834%20184.794C32.4818%20190.958%2032.6802%20197.119%2032.8142%20203.262C32.8369%20204.295%2032.8812%20205.322%2032.9608%20206.339C33.1199%20208.369%2033.3975%20210.366%2033.7774%20212.326C34.1582%20214.291%2034.6488%20216.22%2035.2432%20218.103C35.7664%20219.759%2036.3826%20221.376%2037.0648%20222.959C40.6417%20231.267%2046.3597%20238.529%2053.816%20244.163C70.8018%20256.998%2076.2528%20273.023%2074.1477%20293.186C73.8805%20295.743%2073.7983%20298.327%2073.7708%20300.91C73.7383%20303.966%2073.8124%20307.036%2073.8866%20310.104C73.9343%20312.079%2073.982%20314.054%2074.0012%20316.023C74.0115%20317.036%2074.1414%20318.048%2074.2943%20319.058C74.3383%20319.342%2074.3836%20319.626%2074.4289%20319.91C74.5441%20320.633%2074.6596%20321.358%2074.755%20322.072C77.8546%20321.735%2081.0141%20321.053%2084.1984%20320.147C86.0769%20319.611%2087.9601%20318.978%2089.8519%20318.263C92.7858%20317.155%2095.7378%20315.867%2098.6672%20314.369C103.713%20311.789%20108.703%20308.649%20113.555%20305.117C117.723%20302.085%20121.779%20298.75%20125.649%20295.196C130.169%20291.259%20158.151%20292.439%20171.577%20293.521C172.489%20293.674%20173.24%20293.815%20173.89%20293.938C174.979%20294.143%20175.787%20294.295%20176.602%20294.358C181.244%20294.717%20185.887%20294.977%20190.526%20295.196C200.675%20295.674%20210.817%20295.84%20220.951%20295.719C245.566%20295.422%20270.127%20293.51%20294.593%20290.653C296.173%20290.469%20297.738%20290.25%20299.283%20290.004C300.83%20289.758%20302.358%20289.474%20303.869%20289.167C306.895%20288.553%20309.848%20287.818%20312.726%20286.969C322.791%20283.999%20331.934%20279.63%20339.989%20274.033C342.294%20272.432%20344.502%20270.721%20346.626%20268.926C348.748%20267.132%20350.786%20265.253%20352.72%20263.274C363.358%20252.393%20371.106%20238.785%20375.355%20223.21C376.513%20218.963%20377.409%20214.568%20378.035%20210.044C378.661%20205.523%20379.012%20200.87%20379.082%20196.103C379.422%20172.729%20379.449%20149.332%20379.082%20125.96C378.995%20120.471%20378.072%20114.989%20377.111%20109.286C376.708%20106.894%20376.298%20104.459%20375.941%20101.972C375.923%20101.915%20375.9%20101.858%20375.877%20101.802C375.855%20101.747%20375.833%20101.691%20375.815%20101.637C375.81%20101.601%20375.805%20101.565%20375.8%20101.529C375.792%20101.46%20375.784%20101.391%20375.773%20101.323C365.976%2071.1155%20346.891%2051.5285%20319.887%2041.1012C313.652%2038.6892%20306.995%2036.7732%20299.932%2035.324C289.257%2032.6223%20261.916%2027.6971%20237.953%2029.6095C237.88%2029.6024%20237.805%2029.5997%20237.729%2029.5969C237.672%2029.5948%20237.614%2029.5926%20237.555%2029.5886L237.639%2029.4839C237.184%2029.501%20236.727%2029.5085%20236.27%2029.5161C235.827%2029.5234%20235.383%2029.5307%20234.938%2029.5467C234.411%2029.5551%20233.876%2029.5686%20233.342%2029.5819Z'%20fill='white'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M174.368%20287.797C174.395%20287.74%20174.422%20287.684%20174.449%20287.628C174.422%20287.684%20174.394%20287.741%20174.368%20287.797Z'%20fill='white'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M79.2682%20179.348C85.2683%20174.848%2098.2683%20177.848%2099.7683%20179.848C101.268%20181.848%20103.768%20184.848%20103.768%20184.848C103.768%20184.848%20109.278%20190.525%20112.768%20193.348C125.665%20203.773%20140.853%20203.851%20154.468%20193.403C155.373%20192.71%20156.273%20191.969%20157.17%20191.184C157.583%20190.822%20157.997%20190.458%20158.411%20190.092C161.463%20187.401%20164.562%20184.67%20168.058%20182.728C171.949%20180.568%20175.919%20180.011%20179.49%20180.948C181.287%20181.421%20182.981%20182.274%20184.516%20183.481C186.041%20184.68%20187.409%20186.237%20188.557%20188.128C190.209%20190.852%20191.487%20193.911%20192.431%20197.024C192.745%20198.058%20193.029%20199.107%20193.268%20200.143C193.677%20201.909%20193.768%20203.848%20189.812%20208.848C185.855%20213.848%20172.483%20222.136%20163.053%20226.915C162.879%20226.967%20162.705%20227.019%20162.53%20227.071L162.184%20227.174C161.757%20227.3%20161.329%20227.427%20160.9%20227.554L160.879%20227.56C158.837%20228.165%20156.774%20228.776%20154.72%20229.406C152.045%20230.227%20149.366%20230.858%20146.7%20231.332C145.252%20231.59%20143.806%20231.78%20142.366%20231.939C138.495%20232.366%20134.661%20232.461%20130.891%20232.211C129.591%20232.125%20128.3%20231.997%20127.017%20231.834C124.472%20231.512%20121.962%20231.044%20119.5%20230.432C118.26%20230.124%20117.03%20229.785%20115.815%20229.406C106.144%20226.392%2097.3221%20221.181%2090.0392%20214.293C89.1289%20213.432%2088.2409%20212.547%2087.38%20211.635C83.9395%20207.989%2080.8985%20203.943%2078.3553%20199.557C77.7179%20198.458%2077.1288%20197.328%2076.5546%20196.187C74.8346%20192.771%2073.2682%20183.848%2079.2682%20179.348Z'%20fill='white'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M225.268%20179.348C231.268%20174.848%20244.268%20177.848%20245.768%20179.848C247.268%20181.848%20249.768%20184.848%20249.768%20184.848C249.768%20184.848%20255.278%20190.525%20258.768%20193.348C271.665%20203.773%20286.853%20203.851%20300.468%20193.403C301.373%20192.71%20302.273%20191.969%20303.17%20191.184C303.583%20190.822%20303.997%20190.458%20304.411%20190.092C307.463%20187.401%20310.562%20184.67%20314.058%20182.728C317.949%20180.568%20321.919%20180.011%20325.49%20180.948C327.287%20181.421%20328.981%20182.274%20330.516%20183.481C332.041%20184.68%20333.409%20186.237%20334.557%20188.128C336.209%20190.852%20337.487%20193.911%20338.431%20197.024C338.745%20198.058%20339.029%20199.107%20339.268%20200.143C339.677%20201.909%20339.768%20203.848%20335.812%20208.848C331.855%20213.848%20318.483%20222.136%20309.053%20226.915C308.879%20226.967%20308.705%20227.019%20308.53%20227.071L308.184%20227.174C307.757%20227.3%20307.329%20227.427%20306.9%20227.554L306.879%20227.56C304.837%20228.165%20302.774%20228.776%20300.72%20229.406C298.045%20230.227%20295.366%20230.858%20292.7%20231.332C291.252%20231.59%20289.806%20231.78%20288.366%20231.939C284.495%20232.366%20280.661%20232.461%20276.891%20232.211C275.591%20232.125%20274.3%20231.997%20273.017%20231.834C270.472%20231.512%20267.962%20231.044%20265.5%20230.432C264.26%20230.124%20263.03%20229.785%20261.815%20229.406C252.144%20226.392%20243.322%20221.181%20236.039%20214.293C235.129%20213.432%20234.241%20212.547%20233.38%20211.635C229.939%20207.989%20226.899%20203.943%20224.355%20199.557C223.718%20198.458%20223.129%20197.328%20222.555%20196.187C220.835%20192.771%20219.268%20183.848%20225.268%20179.348Z'%20fill='white'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='410'%20height='364'%20viewBox='0%200%20410%20364'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M107.859%204.42822C157.813%20-2.79445%20255.67%20-0.00375843%20285.171%204.46555C314.671%208.93486%20339.307%2018.0056%20359.194%2029.4839C379.082%2040.9622%20391.266%2060.3046%20399.753%2074.9996C407.998%2089.276%20409.161%20108.587%20409.276%20117.869C409.358%20124.601%20409.483%20131.175%20409.606%20137.651C410.108%20164.1%20410.579%20188.91%20407.998%20216.198C402.949%20269.593%20358.22%20313.38%20304.916%20320.147C254.911%20326.491%20204.685%20329.135%20154.344%20324.04C145.592%20323.154%20138.261%20324.823%20130.767%20330.152C108.346%20346.096%2082.8587%20355.647%2056.5171%20362.953C45.5756%20365.987%2041.4556%20362.57%2041.6924%20350.833L41.7048%20350.221C42.1046%20330.58%2042.5048%20310.925%2043.3675%20291.302C43.7551%20282.486%2041.1637%20275.725%2034.5312%20269.7C11.0379%20248.362%20-0.0299578%20221.543%200.254163%20189.844C0.328085%20181.591%200.234223%20173.334%200.14037%20165.077C-0.00388899%20152.386%20-0.148127%20139.696%200.31698%20127.027C2.05897%2079.5975%2022.0385%2041.8364%2063.8458%2018.2225C76.9768%2010.8057%2092.7775%206.60971%20107.859%204.42822ZM233.342%2029.5819C232.086%2029.6134%20230.843%2029.6445%20229.766%2029.6095C216.887%2030.0919%20204.088%2030.4562%20191.349%2030.8188C174.652%2031.2941%20158.056%2031.7665%20141.508%2032.4981C133.826%2032.8272%20126.327%2033.2021%20119.146%2033.6494L114.895%2033.9843C113.494%2034.1267%20112.106%2034.3127%20110.728%2034.5076C94.1682%2036.8509%2079.3068%2042.962%2067.1122%2052.1743C62.0269%2056.0151%2057.4002%2060.3887%2053.3135%2065.2568C52.0681%2066.7406%2050.8979%2068.2887%2049.7538%2069.8619C42.5173%2079.8112%2037.3406%2091.5089%2034.7406%20104.63C34.2474%20107.119%2033.831%20109.662%2033.5262%20112.249C30.881%20134.717%2031.4245%20157.605%2032.1442%20180.446C32.19%20181.893%2032.2368%20183.347%2032.2834%20184.794C32.4818%20190.958%2032.6802%20197.119%2032.8142%20203.262C32.8369%20204.295%2032.8812%20205.322%2032.9608%20206.339C33.1199%20208.369%2033.3975%20210.366%2033.7774%20212.326C34.1582%20214.291%2034.6488%20216.22%2035.2432%20218.103C35.7664%20219.759%2036.3826%20221.376%2037.0648%20222.959C40.6417%20231.267%2046.3597%20238.529%2053.816%20244.163C70.8018%20256.998%2076.2528%20273.023%2074.1477%20293.186C73.8805%20295.743%2073.7983%20298.327%2073.7708%20300.91C73.7383%20303.966%2073.8124%20307.036%2073.8866%20310.104C73.9343%20312.079%2073.982%20314.054%2074.0012%20316.023C74.0115%20317.036%2074.1414%20318.048%2074.2943%20319.058C74.3383%20319.342%2074.3836%20319.626%2074.4289%20319.91C74.5441%20320.633%2074.6596%20321.358%2074.755%20322.072C77.8546%20321.735%2081.0141%20321.053%2084.1984%20320.147C86.0769%20319.611%2087.9601%20318.978%2089.8519%20318.263C92.7858%20317.155%2095.7378%20315.867%2098.6672%20314.369C103.713%20311.789%20108.703%20308.649%20113.555%20305.117C117.723%20302.085%20121.779%20298.75%20125.649%20295.196C130.169%20291.259%20158.151%20292.439%20171.577%20293.521C172.489%20293.674%20173.24%20293.815%20173.89%20293.938C174.979%20294.143%20175.787%20294.295%20176.602%20294.358C181.244%20294.717%20185.887%20294.977%20190.526%20295.196C200.675%20295.674%20210.817%20295.84%20220.951%20295.719C245.566%20295.422%20270.127%20293.51%20294.593%20290.653C296.173%20290.469%20297.738%20290.25%20299.283%20290.004C300.83%20289.758%20302.358%20289.474%20303.869%20289.167C306.895%20288.553%20309.848%20287.818%20312.726%20286.969C322.791%20283.999%20331.934%20279.63%20339.989%20274.033C342.294%20272.432%20344.502%20270.721%20346.626%20268.926C348.748%20267.132%20350.786%20265.253%20352.72%20263.274C363.358%20252.393%20371.106%20238.785%20375.355%20223.21C376.513%20218.963%20377.409%20214.568%20378.035%20210.044C378.661%20205.523%20379.012%20200.87%20379.082%20196.103C379.422%20172.729%20379.449%20149.332%20379.082%20125.96C378.995%20120.471%20378.072%20114.989%20377.111%20109.286C376.708%20106.894%20376.298%20104.459%20375.941%20101.972C375.923%20101.915%20375.9%20101.858%20375.877%20101.802C375.855%20101.747%20375.833%20101.691%20375.815%20101.637C375.81%20101.601%20375.805%20101.565%20375.8%20101.529C375.792%20101.46%20375.784%20101.391%20375.773%20101.323C365.976%2071.1155%20346.891%2051.5285%20319.887%2041.1012C313.652%2038.6892%20306.995%2036.7732%20299.932%2035.324C289.257%2032.6223%20261.916%2027.6971%20237.953%2029.6095C237.88%2029.6024%20237.805%2029.5997%20237.729%2029.5969C237.672%2029.5948%20237.614%2029.5926%20237.555%2029.5886L237.639%2029.4839C237.184%2029.501%20236.727%2029.5085%20236.27%2029.5161C235.827%2029.5234%20235.383%2029.5307%20234.938%2029.5467C234.411%2029.5551%20233.876%2029.5686%20233.342%2029.5819Z'%20fill='url(%23paint0_linear_393_5321)'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M174.368%20287.797C174.395%20287.74%20174.422%20287.684%20174.449%20287.628C174.422%20287.684%20174.394%20287.741%20174.368%20287.797Z'%20fill='url(%23paint1_linear_393_5321)'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M79.2682%20179.348C85.2683%20174.848%2098.2683%20177.848%2099.7683%20179.848C101.268%20181.848%20103.768%20184.848%20103.768%20184.848C103.768%20184.848%20109.278%20190.525%20112.768%20193.348C125.665%20203.773%20140.853%20203.851%20154.468%20193.403C155.373%20192.71%20156.273%20191.969%20157.17%20191.184C157.583%20190.822%20157.997%20190.458%20158.411%20190.092C161.463%20187.401%20164.562%20184.67%20168.058%20182.728C171.949%20180.568%20175.919%20180.011%20179.49%20180.948C181.287%20181.421%20182.981%20182.274%20184.516%20183.481C186.041%20184.68%20187.409%20186.237%20188.557%20188.128C190.209%20190.852%20191.487%20193.911%20192.431%20197.024C192.745%20198.058%20193.029%20199.107%20193.268%20200.143C193.677%20201.909%20193.768%20203.848%20189.812%20208.848C185.855%20213.848%20172.483%20222.136%20163.053%20226.915C162.879%20226.967%20162.705%20227.019%20162.53%20227.071L162.184%20227.174C161.757%20227.3%20161.329%20227.427%20160.9%20227.554L160.879%20227.56C158.837%20228.165%20156.774%20228.776%20154.72%20229.406C152.045%20230.227%20149.366%20230.858%20146.7%20231.332C145.252%20231.59%20143.806%20231.78%20142.366%20231.939C138.495%20232.366%20134.661%20232.461%20130.891%20232.211C129.591%20232.125%20128.3%20231.997%20127.017%20231.834C124.472%20231.512%20121.962%20231.044%20119.5%20230.432C118.26%20230.124%20117.03%20229.785%20115.815%20229.406C106.144%20226.392%2097.3221%20221.181%2090.0392%20214.293C89.1289%20213.432%2088.2409%20212.547%2087.38%20211.635C83.9395%20207.989%2080.8985%20203.943%2078.3553%20199.557C77.7179%20198.458%2077.1288%20197.328%2076.5546%20196.187C74.8346%20192.771%2073.2682%20183.848%2079.2682%20179.348Z'%20fill='url(%23paint2_linear_393_5321)'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M225.268%20179.348C231.268%20174.848%20244.268%20177.848%20245.768%20179.848C247.268%20181.848%20249.768%20184.848%20249.768%20184.848C249.768%20184.848%20255.278%20190.525%20258.768%20193.348C271.665%20203.773%20286.853%20203.851%20300.468%20193.403C301.373%20192.71%20302.273%20191.969%20303.17%20191.184C303.583%20190.822%20303.997%20190.458%20304.411%20190.092C307.463%20187.401%20310.562%20184.67%20314.058%20182.728C317.949%20180.568%20321.919%20180.011%20325.49%20180.948C327.287%20181.421%20328.981%20182.274%20330.516%20183.481C332.041%20184.68%20333.409%20186.237%20334.557%20188.128C336.209%20190.852%20337.487%20193.911%20338.431%20197.024C338.745%20198.058%20339.029%20199.107%20339.268%20200.143C339.677%20201.909%20339.768%20203.848%20335.812%20208.848C331.855%20213.848%20318.483%20222.136%20309.053%20226.915C308.879%20226.967%20308.705%20227.019%20308.53%20227.071L308.184%20227.174C307.757%20227.3%20307.329%20227.427%20306.9%20227.554L306.879%20227.56C304.837%20228.165%20302.774%20228.776%20300.72%20229.406C298.045%20230.227%20295.366%20230.858%20292.7%20231.332C291.252%20231.59%20289.806%20231.78%20288.366%20231.939C284.495%20232.366%20280.661%20232.461%20276.891%20232.211C275.591%20232.125%20274.3%20231.997%20273.017%20231.834C270.472%20231.512%20267.962%20231.044%20265.5%20230.432C264.26%20230.124%20263.03%20229.785%20261.815%20229.406C252.144%20226.392%20243.322%20221.181%20236.039%20214.293C235.129%20213.432%20234.241%20212.547%20233.38%20211.635C229.939%20207.989%20226.899%20203.943%20224.355%20199.557C223.718%20198.458%20223.129%20197.328%20222.555%20196.187C220.835%20192.771%20219.268%20183.848%20225.268%20179.348Z'%20fill='url(%23paint3_linear_393_5321)'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_393_5321'%20x1='1012.33'%20y1='288.851'%20x2='1012.33'%20y2='654.105'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint1_linear_393_5321'%20x1='1012.33'%20y1='288.851'%20x2='1012.33'%20y2='654.105'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint2_linear_393_5321'%20x1='367.482'%20y1='220.921'%20x2='367.482'%20y2='276.459'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint3_linear_393_5321'%20x1='513.482'%20y1='220.921'%20x2='513.482'%20y2='276.459'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F77348'/%3e%3cstop%20offset='1'%20stop-color='%23F55019'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e\"","import { selectChatbotLogo } from \"../chatbot-logo\";\n\nexport interface ChatHeaderLabels {\n  closeAriaLabel?: string;\n}\n\nexport interface ChatHeaderProps {\n  primaryColor: string;\n  /** Display name shown as the modal title */\n  displayName: string;\n  /** Optional tagline rendered beneath the display name */\n  subheader?: string | null;\n  /** Optional brand logo. When set, replaces the chatbot avatar in the tile. */\n  logoUrl?: string | null;\n  /** Show the green presence dot when fully connected and healthy */\n  isHealthy: boolean;\n  titleId?: string;\n  onClose: () => void;\n  /**\n   * Slim variant — renders only the logo tile + close button, no title or\n   * subheader. Used by the chat surface where the visitor has already seen\n   * the title on the overview screen and the conversation needs maximum\n   * vertical space.\n   */\n  compact?: boolean;\n  labels?: ChatHeaderLabels;\n}\n\n/**\n * Header strip used by both the runtime widget and the dashboard test panel.\n * Brand-tinted background (`color-mix(...primary, bg, 88%)` defined in\n * `widget-ui/styles.css`), white logo tile on the left, optional title +\n * subheader in the middle, close button on the right. Status dot appears\n * outside the tile when `isHealthy` is true.\n */\nexport function ChatHeader({ primaryColor, displayName, subheader, logoUrl, isHealthy, titleId, onClose, compact = false, labels }: ChatHeaderProps) {\n  const resolvedLogo = logoUrl ?? selectChatbotLogo(primaryColor);\n\n  return (\n    <div className={compact ? \"vw-header--compact vw-header\" : \"vw-header\"}>\n      <div className=\"vw-header-topbar\">\n        <div className=\"vw-header-logo-wrap\">\n          <div aria-hidden=\"true\" className=\"vw-header-visualizer\">\n            <img alt=\"\" className=\"vw-header-logo\" src={resolvedLogo} />\n          </div>\n          {isHealthy && <span aria-hidden=\"true\" className=\"vw-header-status-dot\" />}\n        </div>\n        <button aria-label={labels?.closeAriaLabel ?? \"Close\"} className=\"vw-header-close\" onClick={onClose} type=\"button\">\n          <svg\n            aria-hidden=\"true\"\n            fill=\"none\"\n            height=\"20\"\n            stroke=\"currentColor\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth=\"2\"\n            viewBox=\"0 0 24 24\"\n            width=\"20\"\n          >\n            <path d=\"M18 6L6 18M6 6l12 12\" />\n          </svg>\n        </button>\n      </div>\n      {compact ? null : (\n        <>\n          <h2 className=\"vw-header-title\" id={titleId}>\n            {displayName}\n          </h2>\n          {subheader && <p className=\"vw-header-subtitle\">{subheader}</p>}\n        </>\n      )}\n    </div>\n  );\n}\n","/**\n * Lightweight markdown-to-HTML converter for chat bubbles.\n * Zero dependencies — keeps the widget bundle small.\n *\n * Block model:\n *   - Lines are grouped into blocks separated by blank lines.\n *   - Each block becomes a single <p>, <ul>, or <ol>.\n *   - Consecutive non-blank lines inside a paragraph block join with a\n *     space (standard markdown: single newlines collapse). Blank lines are\n *     paragraph breaks — they do NOT emit <br>. Vertical spacing between\n *     blocks is provided by the `.vw-md` CSS (8px top/bottom with\n *     :first-child / :last-child resets).\n *\n * Supported inline: bold, italic, bold-italic, strikethrough, inline code,\n * autolinked URLs. Links use a URL-scheme allowlist to prevent XSS.\n */\n\nconst UL_LINE = /^(\\s*)[-*]\\s+(.+)/;\nconst OL_LINE = /^(\\s*)\\d+[.)]\\s+(.+)/;\n\ntype ListItem = { indent: number; kind: \"ul\" | \"ol\"; content: string };\ntype Block = { kind: \"p\"; lines: string[] } | { kind: \"list\"; items: ListItem[] };\n\n// Leading whitespace → indent depth. Tabs count as two spaces so tab- and\n// space-indented sub-bullets nest consistently.\nfunction indentOf(whitespace: string): number {\n  return whitespace.replace(/\\t/g, \"  \").length;\n}\n\nfunction escapeHtml(text: string): string {\n  return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction escapeAttr(value: string): string {\n  return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\nfunction safeUrl(raw: string): string {\n  const trimmed = raw.trim();\n  if (!/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) return escapeAttr(trimmed);\n  if (/^(https?|mailto|tel):/i.test(trimmed)) return escapeAttr(trimmed);\n  return \"#\";\n}\n\nfunction inlineMarkdown(text: string): string {\n  return text\n    .replace(/`([^`]+)`/g, '<code class=\"vw-md-code\">$1</code>')\n    .replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, \"<strong><em>$1</em></strong>\")\n    .replace(/\\*\\*(.+?)\\*\\*/g, \"<strong>$1</strong>\")\n    .replace(/\\*(.+?)\\*/g, \"<em>$1</em>\")\n    .replace(/~~(.+?)~~/g, \"<del>$1</del>\")\n    .replace(\n      /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n      (_match, linkText, url) => `<a href=\"${safeUrl(url)}\" target=\"_blank\" rel=\"noopener noreferrer\">${linkText}</a>`\n    );\n}\n\nfunction parseBlocks(input: string): Block[] {\n  const blocks: Block[] = [];\n  const lines = input.split(\"\\n\");\n  let current: Block | null = null;\n\n  const flush = () => {\n    if (current) {\n      blocks.push(current);\n      current = null;\n    }\n  };\n\n  // A blank line inside a list only ends the list when no further list item\n  // follows. Otherwise it's a \"loose\" list (blank lines between items) and\n  // must stay a single list rather than splitting into several.\n  const listContinuesAfter = (from: number): boolean => {\n    for (let j = from; j < lines.length; j++) {\n      if (lines[j].trim() === \"\") continue;\n      return UL_LINE.test(lines[j]) || OL_LINE.test(lines[j]);\n    }\n    return false;\n  };\n\n  for (let i = 0; i < lines.length; i++) {\n    const line = lines[i].trimEnd();\n\n    if (line.trim() === \"\") {\n      if (current?.kind === \"list\" && listContinuesAfter(i + 1)) continue;\n      flush();\n      continue;\n    }\n\n    const ulMatch = UL_LINE.exec(line);\n    if (ulMatch) {\n      if (current?.kind !== \"list\") {\n        flush();\n        current = { kind: \"list\", items: [] };\n      }\n      current.items.push({ indent: indentOf(ulMatch[1]), kind: \"ul\", content: ulMatch[2] });\n      continue;\n    }\n\n    const olMatch = OL_LINE.exec(line);\n    if (olMatch) {\n      if (current?.kind !== \"list\") {\n        flush();\n        current = { kind: \"list\", items: [] };\n      }\n      current.items.push({ indent: indentOf(olMatch[1]), kind: \"ol\", content: olMatch[2] });\n      continue;\n    }\n\n    if (current?.kind !== \"p\") {\n      flush();\n      current = { kind: \"p\", lines: [] };\n    }\n    current.lines.push(line);\n  }\n\n  flush();\n  return blocks;\n}\n\n// Build nested <ul>/<ol> from a flat item list using indent depth. Each call\n// emits one list at the current item's indent; items indented further become\n// a child list nested inside the preceding <li>. The marker (bullet vs number)\n// is taken from the first item of each (sub)list.\nfunction renderList(items: ListItem[]): string {\n  let pos = 0;\n\n  const build = (): string => {\n    const groupIndent = items[pos].indent;\n    const kind = items[pos].kind;\n    let html = \"\";\n\n    // Same indent + different marker (bullet vs number) = a sibling list, not\n    // part of this one — stop so the outer loop emits it as its own <ul>/<ol>.\n    while (\n      pos < items.length &&\n      items[pos].indent >= groupIndent &&\n      !(items[pos].indent === groupIndent && items[pos].kind !== kind)\n    ) {\n      const item = items[pos];\n      pos++;\n      let li = inlineMarkdown(escapeHtml(item.content));\n      // Deeper items nest inside this item — including consecutive sub-lists\n      // of differing markers, each becoming its own nested list.\n      while (pos < items.length && items[pos].indent > groupIndent) {\n        li += build();\n      }\n      html += `<li>${li}</li>`;\n    }\n\n    return `<${kind}>${html}</${kind}>`;\n  };\n\n  let out = \"\";\n  while (pos < items.length) out += build();\n  return out;\n}\n\nfunction renderBlock(block: Block): string {\n  if (block.kind === \"p\") {\n    // Standard markdown: single newlines collapse to spaces. Blank lines\n    // are paragraph breaks (handled by block splitting), so within a\n    // paragraph we never emit <br>.\n    const text = block.lines.map((l) => inlineMarkdown(escapeHtml(l.trim()))).join(\" \");\n    return `<p>${text}</p>`;\n  }\n  return renderList(block.items);\n}\n\nexport function renderMarkdown(input: string): string {\n  return parseBlocks(input).map(renderBlock).join(\"\");\n}\n","import { renderMarkdown } from \"./markdown\";\n\nexport interface MarkdownBodyProps {\n  /** Raw markdown text, e.g. one agent chat message. */\n  markdown: string;\n  /** Extra classes merged onto the rendered element, alongside the `.vw-md` block-spacing rules. */\n  className?: string;\n}\n\n/**\n * Renders markdown text as HTML through the shared `renderMarkdown` pipeline.\n * This is the one place across the widget and the dashboard that opens\n * `dangerouslySetInnerHTML` for a chat message: every surface that needs an\n * agent message to read as markdown mounts this component rather than\n * building a second unescaped-HTML site.\n */\nexport function MarkdownBody({ markdown, className }: MarkdownBodyProps) {\n  return (\n    <div\n      className={className ? `vw-md ${className}` : \"vw-md\"}\n      // biome-ignore lint/security/noDangerouslySetInnerHtml: markdown rendered by our own escaping pipeline (./markdown.ts)\n      dangerouslySetInnerHTML={{ __html: renderMarkdown(markdown) }}\n    />\n  );\n}\n","import { type KeyboardEvent, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { MarkdownBody } from \"./MarkdownBody\";\nimport type { ChatSurfaceProps, ChatTranscriptMessage } from \"./types\";\n\n/**\n * Pure presentation. Renders a flat message list and an input. No LiveKit\n * hooks — safe to mount before a Room context exists. Callers wire\n * `messages`/`onSend` from either pre-connection state or `LiveKitChatBridge`.\n *\n * Localised strings flow through `labels`. The widget runtime passes values\n * from its visitor-language dictionary; the dashboard passes operator-language\n * strings from `Dictionary`. English fallbacks apply when omitted.\n *\n * Extensibility:\n *   - `renderMessage(msg, defaultNode)` lets a host (e.g., the dashboard test\n *     panel) intercept rendering — used to draw `sender === \"system\"` debug\n *     rows for tool-calls, KB injections, procedure events.\n *   - `beforeInput` lets a host insert auxiliary controls between the\n *     transcript and the composer (e.g., a \"system events: N\" chip).\n */\nexport function ChatSurface({\n  messages,\n  isConnected,\n  isAgentThinking,\n  isSending,\n  onSend,\n  labels,\n  showTimestamps = false,\n  endedNotice,\n  startNewLabel,\n  onStartNew,\n  autoFocus = true,\n  renderMessage,\n  beforeInput,\n  hideInput = false,\n  className,\n}: ChatSurfaceProps) {\n  const hasEnded = Boolean(endedNotice);\n  const showComposer = !hasEnded && !hideInput;\n  const [inputValue, setInputValue] = useState(\"\");\n  const messagesEndRef = useRef<HTMLDivElement>(null);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  useEffect(() => {\n    messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n  }, [messages.length, isAgentThinking]);\n\n  useEffect(() => {\n    if (!autoFocus) return;\n    inputRef.current?.focus();\n  }, [autoFocus]);\n\n  const handleSend = useCallback(() => {\n    if (hasEnded) return;\n    const text = inputValue.trim();\n    if (!text) return;\n    if (isConnected && isSending) return;\n    onSend(text);\n    setInputValue(\"\");\n    if (inputRef.current) inputRef.current.style.height = \"auto\";\n    // Post-send focus follows `autoFocus`: where the composer auto-focuses\n    // (desktop dashboard / widget) keep focus so the user keeps typing and the\n    // send BUTTON doesn't strand focus on itself; where it doesn't (mobile\n    // widget, autoFocus={!isMobile}) blur to dismiss the soft keyboard.\n    requestAnimationFrame(() => {\n      if (autoFocus) inputRef.current?.focus();\n      else inputRef.current?.blur();\n    });\n  }, [autoFocus, hasEnded, inputValue, isConnected, isSending, onSend]);\n\n  const handleKeyDown = useCallback(\n    (e: KeyboardEvent) => {\n      if (e.key === \"Enter\" && !e.shiftKey) {\n        e.preventDefault();\n        handleSend();\n      }\n    },\n    [handleSend]\n  );\n\n  const formatTime = (ts: number) => {\n    if (ts === 0) return \"\";\n    return new Date(ts).toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n  };\n\n  const sendDisabled = !inputValue.trim() || (isConnected && isSending);\n\n  const defaultMessageNode = (msg: ChatTranscriptMessage): ReactNode => (\n    <div className={`vw-chat-message vw-chat-message-${msg.sender}`} key={msg.id}>\n      {msg.sender === \"agent\" ? (\n        <MarkdownBody className=\"vw-chat-bubble\" markdown={msg.text} />\n      ) : msg.sender === \"user\" ? (\n        <div className=\"vw-chat-bubble\">{msg.text}</div>\n      ) : null}\n      {showTimestamps && msg.timestamp > 0 && <span className=\"vw-chat-timestamp\">{formatTime(msg.timestamp)}</span>}\n    </div>\n  );\n\n  return (\n    <div className={className ? `vw-chat ${className}` : \"vw-chat\"}>\n      <div className=\"vw-chat-messages\">\n        {messages.length === 0 ? (\n          <div className=\"vw-chat-empty\">{labels?.empty ?? \"Start a conversation...\"}</div>\n        ) : (\n          messages.map((msg) => {\n            const node = defaultMessageNode(msg);\n            if (!renderMessage) return node;\n            const rendered = renderMessage(msg, node);\n            if (rendered === node) return node;\n            // Block-level wrapper so custom renderers (e.g., the dashboard's\n            // design-system ChatBubble, which uses `flex w-full`) lay out\n            // correctly inside the `.vw-chat-messages` flex column.\n            return (\n              <div className=\"vw-chat-message-slot\" key={msg.id}>\n                {rendered}\n              </div>\n            );\n          })\n        )}\n        {isAgentThinking && !hasEnded && (\n          <div className=\"vw-chat-message vw-chat-message-agent\">\n            <div className=\"vw-chat-thinking\">\n              <span className=\"vw-chat-thinking-dots\">\n                <span />\n                <span />\n                <span />\n              </span>\n              <span className=\"vw-chat-thinking-text\">{labels?.thinking ?? \"Thinking...\"}</span>\n            </div>\n          </div>\n        )}\n        {hasEnded && (\n          <div className=\"vw-chat-ended\" role=\"status\">\n            <span className=\"vw-chat-ended-text\">{endedNotice}</span>\n            {onStartNew && startNewLabel && (\n              <button className=\"vw-chat-ended-action\" onClick={onStartNew} type=\"button\">\n                {startNewLabel}\n              </button>\n            )}\n          </div>\n        )}\n        <div ref={messagesEndRef} />\n      </div>\n\n      {beforeInput}\n\n      {showComposer && (\n        <div className=\"vw-chat-input-container\">\n          <div className=\"vw-chat-composer\">\n            <textarea\n              className=\"vw-chat-input\"\n              disabled={isConnected && isSending}\n              enterKeyHint=\"send\"\n              onChange={(e) => {\n                setInputValue(e.target.value);\n                e.target.style.height = \"auto\";\n                e.target.style.height = `${e.target.scrollHeight}px`;\n              }}\n              onKeyDown={handleKeyDown}\n              placeholder={labels?.placeholder ?? \"Type a message...\"}\n              ref={inputRef}\n              rows={1}\n              value={inputValue}\n            />\n            <button aria-label={labels?.send ?? \"Send\"} className=\"vw-chat-send\" disabled={sendDisabled} onClick={handleSend} type=\"button\">\n              <svg\n                aria-hidden=\"true\"\n                fill=\"none\"\n                height=\"16\"\n                stroke=\"currentColor\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth=\"2.4\"\n                viewBox=\"0 0 24 24\"\n                width=\"16\"\n              >\n                <path d=\"M12 19V5\" />\n                <path d=\"M5 12l7-7 7 7\" />\n              </svg>\n            </button>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n","import { useChat, useConnectionState, useLocalParticipant, useTranscriptions } from \"@livekit/components-react\";\nimport { ConnectionState } from \"livekit-client\";\nimport { type ReactNode, useEffect, useMemo, useRef } from \"react\";\nimport { ChatSurface } from \"./ChatSurface\";\nimport type { ChatSurfaceLabels, ChatTranscriptMessage } from \"./types\";\n\n/**\n * Compare-only normalisation for begin-message dedup. Collapses all\n * whitespace runs to a single space and trims edges, so trailing newlines,\n * curly quotes around emoji, or LLM-side line-wrap differences don't break\n * exact-equality matching. NOT used for display — bubbles render the\n * original text verbatim.\n */\nfunction normalizeForCompare(s: string | null | undefined): string {\n  if (!s) return \"\";\n  return s.replace(/\\s+/g, \" \").trim();\n}\n\nexport interface LiveKitChatBridgeProps {\n  /** Agent's optimistic first greeting bubble. Pass `null` to suppress. */\n  beginMessage?: string | null;\n  /**\n   * Visitor-side preset messages (from quick-start prompts). Sent to LiveKit\n   * once the room is fully connected. Entries remain populated in parent\n   * state — the bridge renders them with stable ids and swallows their\n   * matching LiveKit echoes to avoid an id-change remount flicker.\n   */\n  pendingUserMessages?: string[];\n  /**\n   * Synthetic chat history rendered before any real LiveKit messages.\n   * Persists across the pre→post-connect transition. Never sent to the agent.\n   */\n  seedMessages?: { agent: string; user: string } | null;\n  showTimestamps?: boolean;\n  /** Fires whenever the displayed message list changes — used for frozen-chat snapshots. */\n  onMessagesChange?: (messages: ChatTranscriptMessage[]) => void;\n  autoFocus?: boolean;\n  labels?: ChatSurfaceLabels;\n  renderMessage?: (msg: ChatTranscriptMessage, defaultNode: ReactNode) => ReactNode;\n  beforeInput?: ReactNode;\n  /**\n   * Optional extra messages to merge into the transcript before sorting.\n   * Lets hosts inject `sender === \"system\"` debug rows (tool_call,\n   * procedure_start, kb_injection, etc.) sourced from a separate data channel.\n   */\n  extraMessages?: ChatTranscriptMessage[];\n  /** Hide the chat composer. Voice-mode hosts supply their own controls. */\n  hideInput?: boolean;\n}\n\n/**\n * Mounts inside `<LiveKitRoom>`. Bridges the Room's chat + transcription state\n * into a flat `messages[]` and forwards user input via `useChat().send`. On\n * first mount with queued pre-connection messages, flushes them to the agent\n * once and notifies the parent.\n */\nexport function LiveKitChatBridge({\n  beginMessage,\n  pendingUserMessages = [],\n  seedMessages,\n  showTimestamps,\n  onMessagesChange,\n  autoFocus,\n  labels,\n  renderMessage,\n  beforeInput,\n  extraMessages,\n  hideInput,\n}: LiveKitChatBridgeProps) {\n  const { chatMessages, send, isSending } = useChat();\n  const { localParticipant } = useLocalParticipant();\n  const transcriptions = useTranscriptions();\n  const connectionState = useConnectionState();\n\n  const transcriptionTimestampsRef = useRef<Map<string, number>>(new Map());\n  const sentRef = useRef(false);\n\n  // Send pending pre-connection messages once the room is connected. 2s gives\n  // the Python agent time to spin up its worker and subscribe to the chat\n  // data channel — sending before the agent is listening silently drops.\n  useEffect(() => {\n    if (sentRef.current) return;\n    if (pendingUserMessages.length === 0) return;\n    if (connectionState !== ConnectionState.Connected) return;\n    if (!localParticipant) return;\n\n    sentRef.current = true;\n    const messagesToSend = [...pendingUserMessages];\n\n    const timer = setTimeout(async () => {\n      for (const msg of messagesToSend) {\n        try {\n          await send(msg);\n        } catch (error) {\n          console.error(\"[LiveKitChatBridge] Failed to send pending message, will retry:\", error);\n          sentRef.current = false;\n          return;\n        }\n      }\n    }, 2000);\n\n    return () => clearTimeout(timer);\n  }, [pendingUserMessages, send, connectionState, localParticipant]);\n\n  const messages = useMemo<ChatTranscriptMessage[]>(() => {\n    const out: ChatTranscriptMessage[] = [];\n\n    if (seedMessages) {\n      out.push({ id: \"seed-agent\", text: seedMessages.agent, sender: \"agent\", timestamp: -2 });\n      out.push({ id: \"seed-user\", text: seedMessages.user, sender: \"user\", timestamp: -1 });\n    }\n    if (beginMessage) out.push({ id: \"begin\", text: beginMessage, sender: \"agent\", timestamp: 0 });\n\n    for (let i = 0; i < pendingUserMessages.length; i++) {\n      out.push({\n        id: `pending-${i}`,\n        text: pendingUserMessages[i],\n        sender: \"user\",\n        timestamp: 0.5 + i / 1000,\n      });\n    }\n\n    const pendingTextsRemaining = new Set(pendingUserMessages);\n    // Suppress the agent echo of the optimistic begin_message bubble at most\n    // once — when the live agent's first chat message OR transcription\n    // matches the configured greeting, render it as a single bubble instead\n    // of two. Comparison normalises whitespace because the agent runtime may\n    // collapse internal newlines while the operator's stored greeting keeps\n    // them (and vice versa) — strict equality fails on every such mismatch.\n    const normalizedBegin = normalizeForCompare(beginMessage);\n    let beginEchoConsumed = !normalizedBegin;\n\n    for (const msg of chatMessages) {\n      const isLocal = msg.from?.identity === localParticipant?.identity;\n      if (isLocal && pendingTextsRemaining.has(msg.message)) {\n        pendingTextsRemaining.delete(msg.message);\n        continue;\n      }\n      if (!isLocal && !beginEchoConsumed && normalizeForCompare(msg.message) === normalizedBegin) {\n        beginEchoConsumed = true;\n        continue;\n      }\n      const timestamp = Number(msg.timestamp) || Date.now();\n      out.push({\n        id: `chat-${timestamp}-${msg.message.slice(0, 10)}`,\n        text: msg.message,\n        sender: isLocal ? \"user\" : \"agent\",\n        timestamp,\n      });\n    }\n\n    const stamps = transcriptionTimestampsRef.current;\n    for (let i = 0; i < transcriptions.length; i++) {\n      const tr = transcriptions[i];\n      const identity = tr.participantInfo?.identity ?? \"\";\n      const isAgent = identity.startsWith(\"agent\");\n      const sender: ChatTranscriptMessage[\"sender\"] = isAgent ? \"agent\" : \"user\";\n      const text = tr.text ?? \"\";\n      if (text) {\n        if (isAgent && !beginEchoConsumed && normalizeForCompare(text) === normalizedBegin) {\n          beginEchoConsumed = true;\n          continue;\n        }\n        const streamId = tr.streamInfo?.id ?? `${identity || sender}-${i}`;\n        if (!stamps.has(streamId)) stamps.set(streamId, Date.now());\n        out.push({\n          id: `transcription-${sender}-${streamId}`,\n          text,\n          sender,\n          timestamp: stamps.get(streamId) ?? Date.now(),\n        });\n      }\n    }\n\n    if (extraMessages) {\n      for (const m of extraMessages) out.push(m);\n    }\n\n    out.sort((a, b) => a.timestamp - b.timestamp);\n    return out.filter((m, idx, self) => idx === self.findIndex((s) => s.id === m.id));\n  }, [beginMessage, chatMessages, localParticipant?.identity, pendingUserMessages, seedMessages, transcriptions, extraMessages]);\n\n  // Walk from the end to find the most recent non-system message — system\n  // events (tool_call, kb_injection, …) shouldn't gate the thinking dots.\n  let lastSender: ChatTranscriptMessage[\"sender\"] | undefined;\n  for (let i = messages.length - 1; i >= 0; i--) {\n    if (messages[i].sender !== \"system\") {\n      lastSender = messages[i].sender;\n      break;\n    }\n  }\n  const isAgentThinking = messages.length === 0 || lastSender === \"user\";\n\n  useEffect(() => {\n    if (!onMessagesChange) return;\n    onMessagesChange(messages);\n  }, [messages, onMessagesChange]);\n\n  return (\n    <ChatSurface\n      autoFocus={autoFocus}\n      beforeInput={beforeInput}\n      hideInput={hideInput}\n      isAgentThinking={isAgentThinking}\n      isConnected={true}\n      isSending={isSending}\n      labels={labels}\n      messages={messages}\n      onSend={send}\n      renderMessage={renderMessage}\n      showTimestamps={showTimestamps}\n    />\n  );\n}\n","import { type ReactNode, useMemo } from \"react\";\nimport { ChatSurface } from \"./ChatSurface\";\nimport type { ChatSurfaceLabels, ChatTranscriptMessage } from \"./types\";\n\nexport interface PreConnectChatPaneProps {\n  /**\n   * Agent's optimistic first greeting bubble. Pass `null` when an entry\n   * procedure is pinned — the agent will suppress its greeting and instead\n   * deliver the procedure's first step, so rendering the begin_message here\n   * would lie.\n   */\n  beginMessage?: string | null;\n  pendingUserMessages: string[];\n  /**\n   * Synthetic chat history rendered before any real messages. Display-only:\n   * never enters the send loop. Real LiveKit messages append below.\n   */\n  seedMessages?: { agent: string; user: string } | null;\n  onPendingMessage: (text: string) => void;\n  showTimestamps?: boolean;\n  autoFocus?: boolean;\n  labels?: ChatSurfaceLabels;\n  renderMessage?: (msg: ChatTranscriptMessage, defaultNode: ReactNode) => ReactNode;\n  beforeInput?: ReactNode;\n}\n\n/** Used before LiveKit connects. Echoes the begin message + queued user input. */\nexport function PreConnectChatPane({\n  beginMessage,\n  pendingUserMessages,\n  seedMessages,\n  onPendingMessage,\n  showTimestamps,\n  autoFocus,\n  labels,\n  renderMessage,\n  beforeInput,\n}: PreConnectChatPaneProps) {\n  const messages = useMemo<ChatTranscriptMessage[]>(() => {\n    const out: ChatTranscriptMessage[] = [];\n    if (seedMessages) {\n      out.push({ id: \"seed-agent\", text: seedMessages.agent, sender: \"agent\", timestamp: -2 });\n      out.push({ id: \"seed-user\", text: seedMessages.user, sender: \"user\", timestamp: -1 });\n    }\n    if (beginMessage) out.push({ id: \"begin\", text: beginMessage, sender: \"agent\", timestamp: 0 });\n    for (let i = 0; i < pendingUserMessages.length; i++) {\n      out.push({ id: `pending-${i}`, text: pendingUserMessages[i], sender: \"user\", timestamp: i + 1 });\n    }\n    return out;\n  }, [beginMessage, pendingUserMessages, seedMessages]);\n\n  // Thinking dots fire when nothing has been said yet OR the last bubble is\n  // from the user. begin_message at timestamp 0 keeps last=agent in normal\n  // chat, suppressing dots until the user actually types.\n  const lastSender = messages.at(-1)?.sender;\n  const isAgentThinking = messages.length === 0 || lastSender === \"user\";\n\n  return (\n    <ChatSurface\n      autoFocus={autoFocus}\n      beforeInput={beforeInput}\n      isAgentThinking={isAgentThinking}\n      isConnected={false}\n      isSending={false}\n      labels={labels}\n      messages={messages}\n      onSend={onPendingMessage}\n      renderMessage={renderMessage}\n      showTimestamps={showTimestamps}\n    />\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { ChatSurface } from \"./ChatSurface\";\nimport type { ChatSurfaceLabels, ChatTranscriptMessage } from \"./types\";\n\nexport interface FrozenChatPaneProps {\n  messages: ChatTranscriptMessage[];\n  showTimestamps?: boolean;\n  endedNotice: string;\n  startNewLabel: string;\n  onStartNew: () => void;\n  labels?: ChatSurfaceLabels;\n  renderMessage?: (msg: ChatTranscriptMessage, defaultNode: ReactNode) => ReactNode;\n}\n\n/**\n * Read-only chat view rendered after a session ends. Input hidden so the\n * user can't try to send into a dead session.\n */\nexport function FrozenChatPane({ messages, showTimestamps, endedNotice, startNewLabel, onStartNew, labels, renderMessage }: FrozenChatPaneProps) {\n  return (\n    <ChatSurface\n      endedNotice={endedNotice}\n      isAgentThinking={false}\n      isConnected={false}\n      isSending={false}\n      labels={labels}\n      messages={messages}\n      onSend={() => {\n        // No-op; input is hidden when endedNotice is set.\n      }}\n      onStartNew={onStartNew}\n      renderMessage={renderMessage}\n      showTimestamps={showTimestamps}\n      startNewLabel={startNewLabel}\n    />\n  );\n}\n","/**\n * The chat-modal header now lives in `@repo/widget-ui/chat` so the dashboard\n * test panel renders the exact same header strip the live widget does. This\n * file remains as a thin re-export so existing imports keep working.\n *\n * Visitor-language labels come from the widget's i18n context here; the\n * shared component reads them from props (`labels.closeAriaLabel`).\n */\nimport { ChatHeader, type ChatHeaderProps } from \"@repo/widget-ui/chat\";\nimport { useTranslations } from \"../i18n/I18nContext\";\n\ntype ModalHeaderProps = Omit<ChatHeaderProps, \"labels\">;\n\nexport function ModalHeader(props: ModalHeaderProps) {\n  const t = useTranslations();\n  return <ChatHeader {...props} labels={{ closeAriaLabel: t.header.closeAriaLabel }} />;\n}\n","import type { CSSProperties } from \"react\";\n\nexport type WidgetRuntimeQuickStart = { kind: \"procedure\"; label: string; procedure_id: string } | { kind: \"prompt\"; label: string; prompt: string };\n\nexport interface WidgetRuntimeOverviewConfig {\n  enabled: boolean;\n  heading?: string | null;\n  start_chat_label?: string | null;\n  quick_starts: WidgetRuntimeQuickStart[];\n  bookmarks: Array<{\n    label: string;\n    url: string;\n    icon?: string | null;\n  }>;\n}\n\nexport interface OverviewScreenProps {\n  overview: WidgetRuntimeOverviewConfig;\n  displayName: string;\n  subheader?: string | null;\n  logoUrl?: string | null;\n  primaryColor: string;\n  titleId?: string;\n  /** Optional close handler. When omitted (e.g., in the dashboard preview), the close button is rendered but inert. */\n  onClose?: () => void;\n  /** Optional handler for the \"start chat\" row. Omit for static previews. */\n  onStartChat?: () => void;\n  /** Optional handler for a quick-start row. Receives the full row so the caller can branch on `kind` (procedure pin vs preset prompt). */\n  onQuickStart?: (quickStart: WidgetRuntimeQuickStart) => void;\n  /**\n   * Localised chrome strings. Callers in `apps/widget` pass values from the\n   * visitor-language i18n dictionary; the dashboard preview passes values\n   * from the operator-language dashboard dictionary. English fallbacks are\n   * used when omitted.\n   */\n  labels?: {\n    closeAriaLabel?: string;\n    defaultAssistantName?: string;\n    defaultStartChatLabel?: string;\n    quickStartHeading?: string;\n    bookmarksHeading?: string;\n  };\n}\n\n/**\n * Pre-chat overview screen — the first thing visitors see when the widget opens\n * (when `overview.enabled` is true). Pure presentation: no LiveKit, no session\n * state, no API calls. Safe to reuse in the dashboard preview.\n */\nexport function OverviewScreen({\n  overview,\n  displayName,\n  subheader,\n  logoUrl,\n  primaryColor,\n  titleId,\n  onClose,\n  onStartChat,\n  onQuickStart,\n  labels,\n}: OverviewScreenProps) {\n  const heading = displayName.trim() || labels?.defaultAssistantName || \"Voice Assistant\";\n  const startChatLabel = overview.start_chat_label?.trim() || labels?.defaultStartChatLabel || \"Start new chat\";\n\n  // Expose `primaryColor` to descendant CSS rules that read `var(--voice-widget-primary)`.\n  // This is how the live widget injects the brand colour into its stylesheet, so mirroring\n  // it here keeps the dashboard preview pixel-identical without duplicating styles.\n  const rootStyle = { \"--voice-widget-primary\": primaryColor } as CSSProperties;\n\n  return (\n    <div className=\"vw-overview\" style={rootStyle}>\n      <div className=\"vw-overview-hero\">\n        <div className=\"vw-overview-hero-bg\" style={{ backgroundColor: primaryColor }} />\n        <div className=\"vw-overview-topbar\">\n          <div className=\"vw-overview-logo\">\n            {logoUrl ? (\n              <img alt=\"\" src={logoUrl} />\n            ) : (\n              <svg aria-hidden=\"true\" fill=\"none\" height=\"20\" viewBox=\"0 0 24 24\" width=\"20\">\n                <path d=\"M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v8Z\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n              </svg>\n            )}\n          </div>\n          <button aria-label={labels?.closeAriaLabel ?? \"Close\"} className=\"vw-overview-close\" onClick={onClose} type=\"button\">\n            <svg aria-hidden=\"true\" fill=\"none\" height=\"16\" viewBox=\"0 0 24 24\" width=\"16\">\n              <path d=\"m18 6-12 12M6 6l12 12\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"2\" />\n            </svg>\n          </button>\n        </div>\n        <h2 className=\"vw-overview-title\" id={titleId}>\n          {heading}\n        </h2>\n        {subheader ? <p className=\"vw-overview-subtitle\">{subheader}</p> : null}\n      </div>\n\n      <button className=\"vw-overview-start\" onClick={onStartChat} type=\"button\">\n        {/* Left icon mirrors `.vw-overview-logo` (white background, primary\n         *  border) and shows the same logo image as the hero — keeps the\n         *  brand identity consistent between the header and the primary CTA. */}\n        <span className=\"vw-overview-start-icon\" style={{ color: primaryColor }}>\n          {logoUrl ? (\n            <img alt=\"\" src={logoUrl} />\n          ) : (\n            <svg aria-hidden=\"true\" fill=\"none\" height=\"20\" viewBox=\"0 0 24 24\" width=\"20\">\n              <path d=\"M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v8Z\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n            </svg>\n          )}\n        </span>\n        <span className=\"vw-overview-start-text\">\n          <span>{startChatLabel}</span>\n        </span>\n        {/* Right-side action chip — brand-coloured rounded square with a\n         *  chat icon. Replaces the chevron on the start row to signal\n         *  \"this opens the chat\" more concretely than a generic arrow. */}\n        <span aria-hidden=\"true\" className=\"vw-overview-start-action\">\n          <svg fill=\"none\" height=\"16\" viewBox=\"0 0 24 24\" width=\"16\">\n            <path d=\"M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v8Z\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n          </svg>\n        </span>\n      </button>\n\n      {/* Flexible middle slot — auto-expands to fill the space between the\n       *  start-chat row and the bookmarks footer. Holds quick-starts today;\n       *  forthcoming procedure surfaces will mount inside this same container.\n       *  Empty when no quick-starts exist — its `flex: 1` is what pushes the\n       *  bookmarks section to the bottom (replaces the previous\n       *  `margin-top: auto` trick on bookmarks). */}\n      <div className=\"vw-overview-middle\">\n        {overview.quick_starts.length > 0 ? (\n          <section className=\"vw-overview-section\">\n            <h3>{labels?.quickStartHeading ?? \"Quick start\"}</h3>\n            <div className=\"vw-overview-list\">\n              {overview.quick_starts.map((quickStart, index) => {\n                const key = quickStart.kind === \"procedure\" ? `proc:${quickStart.procedure_id}` : `prompt:${index}`;\n                return (\n                  <button className=\"vw-overview-row\" key={key} onClick={() => onQuickStart?.(quickStart)} type=\"button\">\n                    <span className=\"vw-overview-row-icon\" style={{ color: primaryColor }}>\n                      <svg aria-hidden=\"true\" fill=\"none\" height=\"16\" viewBox=\"0 0 24 24\" width=\"16\">\n                        <path d=\"M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n                      </svg>\n                    </span>\n                    <span className=\"vw-overview-row-text\">\n                      <span>{quickStart.label}</span>\n                    </span>\n                    <svg aria-hidden=\"true\" className=\"vw-overview-chevron\" fill=\"none\" height=\"16\" viewBox=\"0 0 24 24\" width=\"16\">\n                      <path d=\"m9 18 6-6-6-6\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" />\n                    </svg>\n                  </button>\n                );\n              })}\n            </div>\n          </section>\n        ) : null}\n      </div>\n\n      {overview.bookmarks.length > 0 ? (\n        <section className=\"vw-overview-section\">\n          <h3>{labels?.bookmarksHeading ?? \"Bookmarks\"}</h3>\n          <div className=\"vw-overview-bookmarks\">\n            {overview.bookmarks.map((bookmark) => (\n              <a className=\"vw-overview-bookmark\" href={bookmark.url} key={`${bookmark.label}:${bookmark.url}`} rel=\"noreferrer\" target=\"_blank\">\n                <span>{bookmark.icon || \"\"}</span>\n                <span>{bookmark.label}</span>\n              </a>\n            ))}\n          </div>\n        </section>\n      ) : null}\n    </div>\n  );\n}\n","/**\n * Tight white Verbu mark — embedded as inline SVG so the widget bundle stays\n * self-contained (no external asset fetch). Source: design-system \"logo-mark\".\n * Currentcolor-aware: stroke + fill follow the parent's `color`.\n */\nexport function VerbuMark({ size = 22 }: { size?: number }) {\n  return (\n    <svg aria-hidden=\"true\" fill=\"none\" height={size} viewBox=\"0 0 20 19\" width={size} xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        clipRule=\"evenodd\"\n        d=\"M5.03041 1.2156C7.36016 0.878631 11.9241 1.00883 13.2999 1.21734C14.6758 1.42585 15.8248 1.84903 16.7523 2.38454C17.6798 2.92005 18.2481 3.82245 18.6439 4.50803C19.0285 5.17408 19.0827 6.07503 19.088 6.50803C19.1075 8.10502 19.1783 9.51068 19.0285 11.0955C18.7929 13.5866 16.7069 15.6294 14.2208 15.9451C11.8887 16.2411 9.54623 16.3644 7.19838 16.1267C6.79022 16.0854 6.4483 16.1633 6.09877 16.4119C5.05309 17.1557 3.86441 17.6013 2.63588 17.9422C2.12558 18.0837 1.93343 17.9243 1.94447 17.3767C1.96331 16.4509 1.98194 15.5244 2.0226 14.5994C2.04067 14.1881 1.91982 13.8726 1.61049 13.5916C0.514793 12.5961 -0.00139719 11.3448 0.0118538 9.86598C0.0206006 8.88911 -0.021021 7.91091 0.0147835 6.93532C0.0960272 4.72253 1.02784 2.96083 2.97767 1.85915C3.59009 1.51313 4.32701 1.31737 5.03041 1.2156ZM10.9572 2.38747C10.8747 2.38879 10.7875 2.39273 10.716 2.3904C9.32802 2.4424 7.96036 2.46499 6.59974 2.52517C6.24144 2.54052 5.89169 2.55801 5.55678 2.57888L5.35853 2.5945C5.29319 2.60114 5.22847 2.60982 5.1642 2.61892C4.39187 2.72824 3.69875 3.01335 3.13002 3.44314C2.89284 3.62232 2.67706 3.82637 2.48646 4.05349C2.42838 4.12271 2.37381 4.19494 2.32045 4.26833C1.98295 4.7325 1.74151 5.27825 1.62025 5.8904C1.59725 6.00651 1.57783 6.12514 1.56361 6.24587C1.44024 7.29408 1.46559 8.36187 1.49916 9.42751C1.51039 9.78276 1.52269 10.138 1.53041 10.492C1.53146 10.5402 1.53353 10.5881 1.53724 10.6355C1.54467 10.7302 1.55761 10.8234 1.57533 10.9148C1.59309 11.0065 1.61597 11.0965 1.64369 11.1843C1.66809 11.2616 1.69683 11.337 1.72865 11.4109C1.89547 11.7985 2.16215 12.1373 2.5099 12.4002C3.3021 12.999 3.55632 13.7466 3.45814 14.6873C3.44568 14.8066 3.44185 14.9271 3.44056 15.0476C3.43807 15.282 3.44902 15.5182 3.45131 15.7527C3.45179 15.7999 3.45785 15.8472 3.46498 15.8943C3.47226 15.9412 3.48026 15.9885 3.48646 16.0349C3.63103 16.0192 3.77838 15.9874 3.92689 15.9451C4.0145 15.9201 4.10233 15.8905 4.19056 15.8572C4.3274 15.8055 4.46507 15.7454 4.6017 15.6756C4.83701 15.5552 5.06974 15.4087 5.29603 15.2439C6.60624 14.2904 7.67765 12.6968 7.47767 11.6394L7.44056 11.4949C7.31243 11.533 7.18185 11.5712 7.05189 11.6111C6.92714 11.6494 6.80221 11.6788 6.67787 11.7009C6.61035 11.713 6.54289 11.7218 6.47572 11.7293C6.29521 11.7492 6.1164 11.7536 5.94056 11.742C5.87994 11.7379 5.81972 11.732 5.7599 11.7244C5.64116 11.7093 5.52413 11.6875 5.40931 11.659C5.35146 11.6446 5.29411 11.6288 5.23744 11.6111C4.7864 11.4705 4.37495 11.2273 4.03529 10.906C3.99283 10.8659 3.95142 10.8246 3.91127 10.782C3.75081 10.6119 3.60898 10.4232 3.49037 10.2185C3.46064 10.1672 3.43317 10.1145 3.40638 10.0613C3.32617 9.90191 3.25871 9.73437 3.20717 9.55934C3.18997 9.50093 3.17502 9.44158 3.16127 9.38161C3.13384 9.26205 3.11273 9.13959 3.09974 9.01442C3.09324 8.95159 3.08875 8.88809 3.08607 8.82399C3.0834 8.76013 3.08287 8.69566 3.08412 8.63063C3.0858 8.54372 3.09066 8.45793 3.09779 8.3738C3.11202 8.20599 3.13627 8.04371 3.17201 7.88747C3.19828 7.77261 3.23285 7.6618 3.27064 7.55349C3.31995 7.41223 3.37864 7.27686 3.4474 7.14724C3.49667 7.05434 3.55033 6.96438 3.60951 6.8777C3.63957 6.83369 3.67163 6.79117 3.70424 6.7488C3.76605 6.66846 3.83157 6.59066 3.90248 6.51638C4.2369 6.16613 4.67117 5.88325 5.20424 5.67946C6.12145 5.32883 6.94421 5.42108 7.68275 5.85817C7.9539 6.0186 8.21441 6.22447 8.46303 6.47341C8.96478 6.97581 9.46649 7.47837 9.96889 7.98024C10.4714 8.4821 10.9747 8.9837 11.4806 9.4822C11.6956 9.69406 11.9289 9.90152 12.1876 10.0525C12.9184 10.4787 13.7702 10.2728 14.2745 9.57888C14.6398 9.07598 14.676 8.42399 14.4093 7.88942C14.3206 7.71131 14.1978 7.5465 14.0431 7.40407C13.764 7.14716 13.4618 7.00316 13.1525 6.97341C13.1084 6.96915 13.064 6.96816 13.0197 6.96852C12.7975 6.97041 12.5728 7.02956 12.3517 7.14724C12.3076 7.17069 12.2636 7.19633 12.2199 7.22438C12.132 7.28069 12.0451 7.34683 11.9591 7.42165C11.8732 7.49648 11.792 7.57755 11.7042 7.65017C11.6682 7.67997 11.6323 7.70712 11.5968 7.7322C11.4542 7.83311 11.3165 7.8957 11.1867 7.92067C10.9593 7.96437 10.7565 7.89269 10.5939 7.70778C10.5474 7.65489 10.5045 7.59257 10.465 7.52126C10.4255 7.45003 10.3893 7.36953 10.3576 7.28005C10.3449 7.24438 10.3342 7.20825 10.3224 7.17263C10.278 7.03828 10.2375 6.90494 10.2052 6.77126C10.0823 6.2626 10.0464 5.75868 10.0851 5.25954C10.098 5.09331 10.1194 4.92765 10.1486 4.76247C10.1631 4.68003 10.179 4.59759 10.1974 4.5154C10.2344 4.35051 10.2791 4.18609 10.3312 4.02224C10.3572 3.94034 10.3856 3.85876 10.4152 3.77712C10.4743 3.61417 10.5405 3.45174 10.6134 3.28982C10.7471 2.9927 10.9809 2.67957 11.0978 2.3904C11.0917 2.38982 11.0855 2.38986 11.0792 2.38942L11.0831 2.38454C11.0414 2.38611 10.9993 2.38595 10.9572 2.38747ZM13.9884 2.657C13.742 2.60644 13.5129 2.60479 13.2999 2.64919C12.9308 2.72579 12.6107 2.9397 12.3341 3.27126C12.1447 3.49841 11.9964 3.74285 11.88 3.99978C11.7283 4.33468 11.6323 4.69256 11.5851 5.07009C11.5701 5.19007 11.5611 5.31095 11.5538 5.43825L11.5314 5.84645C11.6947 5.79383 11.7782 5.77358 11.8566 5.74099C12.1966 5.59945 12.5641 5.52788 12.9337 5.52224C13.0076 5.52111 13.0816 5.52305 13.1554 5.52712C13.8205 5.56374 14.4766 5.80884 14.9757 6.23513C15.0312 6.28251 15.0845 6.33273 15.1359 6.38454C15.1739 6.42285 15.2106 6.46197 15.2462 6.50173C15.3177 6.58149 15.3846 6.66376 15.4464 6.7488C15.5082 6.83374 15.5652 6.92106 15.6173 7.01052C16.1807 7.97779 16.1812 9.18644 15.6242 10.158C15.4979 10.3781 15.3429 10.5859 15.1593 10.7761C15.1408 10.7953 15.1227 10.815 15.1037 10.8338C14.8977 11.0366 14.6707 11.2033 14.4318 11.3367C13.2425 12.0002 11.7268 11.8066 10.6994 10.7742C10.1492 10.2213 9.59571 9.67137 9.04115 9.12282C8.48672 8.57412 7.93119 8.02635 7.37806 7.47634C6.37038 6.47442 5.16414 7.05144 4.7433 7.83571C4.36159 8.54743 4.51758 9.43977 5.13392 9.93825C5.73543 10.4246 6.40517 10.4188 7.04017 9.93141C7.08234 9.89906 7.12432 9.8645 7.16615 9.8279C7.32749 9.68672 7.48876 9.53628 7.67396 9.43337C7.85543 9.33259 8.0406 9.30662 8.20717 9.35036C8.29098 9.37242 8.36995 9.41219 8.44154 9.46852C8.51268 9.52445 8.57648 9.59707 8.63002 9.68532C8.70705 9.8124 8.76666 9.95512 8.81068 10.1004C8.82532 10.1486 8.83856 10.1975 8.84974 10.2459C8.91182 10.5142 8.95111 10.7791 8.96986 11.0408C9.05088 12.1748 8.7431 13.2486 8.20619 14.2849C8.17028 14.3542 8.13768 14.4252 8.1017 14.4998C8.07081 14.5636 8.03751 14.6304 8.00209 14.7029C8.11589 14.7219 8.17578 14.7373 8.23646 14.742C8.45296 14.7587 8.66949 14.7708 8.88588 14.781C9.35921 14.8034 9.83221 14.8111 10.3048 14.8054C11.4528 14.7916 12.5983 14.7024 13.7394 14.5691C13.8131 14.5605 13.8861 14.5503 13.9581 14.5388C14.0303 14.5273 14.1015 14.5141 14.172 14.4998C14.3131 14.4711 14.4509 14.4369 14.5851 14.3972C15.0545 14.2587 15.4809 14.0548 15.8566 13.7937C15.9641 13.719 16.0671 13.6392 16.1662 13.5554C16.2651 13.4718 16.3601 13.3841 16.4503 13.2918C16.9465 12.7841 17.3079 12.1492 17.506 11.4226C17.56 11.2245 17.6018 11.0194 17.631 10.8084C17.6602 10.5974 17.6766 10.3804 17.6798 10.158C17.6957 9.06748 17.697 7.97592 17.6798 6.88552C17.6741 6.52195 17.5897 6.15921 17.5333 5.76638C17.5317 5.76117 17.5292 5.75595 17.5275 5.75075C17.5267 5.74591 17.5263 5.74096 17.5255 5.7361C17.0686 4.32682 16.1785 3.41301 14.9191 2.92654C14.6283 2.814 14.3178 2.72462 13.9884 2.657Z\"\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n      />\n    </svg>\n  );\n}\n","import { useTranslations } from \"../i18n/I18nContext\";\nimport { VerbuMark } from \"./VerbuMark\";\n\nexport function PoweredByFooter() {\n  const t = useTranslations();\n\n  return (\n    <a aria-label={t.footer.ariaLabel} className=\"voice-widget-footer\" href=\"https://www.verbu.com\" rel=\"noopener noreferrer\" target=\"_blank\">\n      <span className=\"voice-widget-footer-text\">{t.footer.poweredBy}</span>\n      <span className=\"voice-widget-footer-mark\">\n        <VerbuMark size={13} />\n      </span>\n    </a>\n  );\n}\n","import { useState } from \"react\";\n\ninterface StarRatingProps {\n  value: number | null;\n  onChange: (rating: number) => void;\n  disabled?: boolean;\n}\n\n/**\n * 5-star interactive rating component\n * Supports hover states and click selection\n */\nexport function StarRating({ value, onChange, disabled = false }: StarRatingProps) {\n  const [hoverValue, setHoverValue] = useState<number | null>(null);\n\n  const displayValue = hoverValue ?? value ?? 0;\n\n  return (\n    <div className=\"voice-widget-star-rating\" onMouseLeave={() => setHoverValue(null)}>\n      {[1, 2, 3, 4, 5].map((star) => (\n        <button\n          aria-label={`Rate ${star} star${star > 1 ? \"s\" : \"\"}`}\n          className={`voice-widget-star ${displayValue >= star ? \"filled\" : \"\"}`}\n          disabled={disabled}\n          key={star}\n          onClick={() => onChange(star)}\n          onMouseEnter={() => !disabled && setHoverValue(star)}\n          type=\"button\"\n        >\n          <StarIcon filled={displayValue >= star} />\n        </button>\n      ))}\n    </div>\n  );\n}\n\nfunction StarIcon({ filled }: { filled: boolean }) {\n  return (\n    <svg\n      aria-hidden=\"true\"\n      fill={filled ? \"currentColor\" : \"none\"}\n      height=\"32\"\n      stroke=\"currentColor\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"1.5\"\n      viewBox=\"0 0 24 24\"\n      width=\"32\"\n    >\n      <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n    </svg>\n  );\n}\n","import { useState } from \"react\";\nimport { useTranslations } from \"../i18n/I18nContext\";\nimport { StarRating } from \"./StarRating\";\n\nfunction noop(): void {\n  // Intentionally empty - used as default callback\n}\n\ninterface RatingScreenProps {\n  onSubmitRating: (rating: number) => void;\n  onSubmitFeedback: (feedback: string) => void;\n  onClose: () => void;\n  primaryColor: string;\n  selectedMode: \"voice\" | \"chat\" | null;\n  collectTextFeedback?: boolean;\n  /**\n   * When set, render the screen as an overlay card on top of the underlying\n   * conversation view, with a \"No thanks\" dismiss button. Used for chat — the\n   * user keeps the transcript visible behind the rating prompt and can dismiss\n   * the prompt to read/copy it without rating.\n   */\n  variant?: \"fullscreen\" | \"overlay\";\n  onDismiss?: () => void;\n}\n\n/**\n * Post-call/chat rating screen with 2-step flow:\n * 1. Stars shown after conversation ends - click to rate\n * 2. After rating, optional feedback textarea appears (if collectTextFeedback is true)\n */\nexport function RatingScreen({\n  onSubmitRating,\n  onSubmitFeedback,\n  onClose,\n  primaryColor,\n  selectedMode,\n  collectTextFeedback = true,\n  variant = \"fullscreen\",\n  onDismiss,\n}: RatingScreenProps) {\n  const t = useTranslations();\n  const [rating, setRating] = useState<number | null>(null);\n  const [feedback, setFeedback] = useState(\"\");\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const ratingTitle = selectedMode === \"chat\" ? t.rating.titleChat : t.rating.titleCall;\n\n  // After submission, overlay mode dismisses the rating card so the user is\n  // returned to the (still visible) frozen chat — they can copy details and\n  // exit when ready via the header X. Fullscreen mode (voice) keeps the\n  // legacy behavior of closing the whole widget.\n  const finishAfterSubmit = () => {\n    if (variant === \"overlay\" && onDismiss) {\n      onDismiss();\n    } else {\n      onClose();\n    }\n  };\n\n  const handleRatingChange = (newRating: number) => {\n    setRating(newRating);\n    onSubmitRating(newRating);\n\n    // If not collecting text feedback, finish after a short delay so the\n    // user gets a beat of \"thanks!\" feedback before the card goes away.\n    if (!collectTextFeedback) {\n      setTimeout(() => finishAfterSubmit(), 1000);\n    }\n  };\n\n  const handleFeedbackSubmit = async () => {\n    if (feedback.trim()) {\n      setIsSubmitting(true);\n      await onSubmitFeedback(feedback);\n      setIsSubmitting(false);\n    }\n    finishAfterSubmit();\n  };\n\n  const className = variant === \"overlay\" ? \"vw-rating vw-rating-overlay\" : \"vw-rating\";\n\n  // The \"No thanks\" affordance is rendered only in overlay mode (chat) and\n  // only on the initial star step — once the user has actually rated, the\n  // dismiss is handled implicitly by submission/auto-close.\n  const renderDismiss = () =>\n    variant === \"overlay\" && onDismiss && rating === null ? (\n      <button className=\"vw-rating-dismiss\" onClick={onDismiss} type=\"button\">\n        {t.rating.noThanks ?? \"No thanks\"}\n      </button>\n    ) : null;\n\n  // Step 1: Show stars\n  if (rating === null) {\n    return (\n      <div className={className} role={variant === \"overlay\" ? \"dialog\" : undefined}>\n        <h2 className=\"vw-rating-title\">{ratingTitle}</h2>\n        <StarRating onChange={handleRatingChange} value={rating} />\n        {renderDismiss()}\n      </div>\n    );\n  }\n\n  // Step 2: Show thank you + optional feedback (or auto-close)\n  if (!collectTextFeedback) {\n    return (\n      <div className={className}>\n        <h2 className=\"vw-rating-title\">{t.rating.thankYou}</h2>\n        <div className=\"vw-rating-stars-display\">\n          <StarRating disabled onChange={noop} value={rating} />\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={className}>\n      <h2 className=\"vw-rating-title\">{t.rating.thankYou}</h2>\n      <div className=\"vw-rating-stars-display\">\n        <StarRating disabled onChange={noop} value={rating} />\n      </div>\n      <textarea\n        className=\"vw-rating-feedback\"\n        disabled={isSubmitting}\n        onChange={(e) => setFeedback(e.target.value)}\n        placeholder={t.rating.placeholder}\n        rows={3}\n        value={feedback}\n      />\n      <button\n        className=\"vw-rating-submit\"\n        disabled={isSubmitting}\n        onClick={handleFeedbackSubmit}\n        style={{ backgroundColor: primaryColor }}\n        type=\"button\"\n      >\n        {isSubmitting ? \"...\" : t.rating.submit}\n      </button>\n    </div>\n  );\n}\n","/*!\n* tabbable 6.4.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n//  `:not([inert], [inert] *)` (Feb 2023)\nvar candidateSelectors = ['input:not([inert]):not([inert] *)', 'select:not([inert]):not([inert] *)', 'textarea:not([inert]):not([inert] *)', 'a[href]:not([inert]):not([inert] *)', 'button:not([inert]):not([inert] *)', '[tabindex]:not(slot):not([inert]):not([inert] *)', 'audio[controls]:not([inert]):not([inert] *)', 'video[controls]:not([inert]):not([inert] *)', '[contenteditable]:not([contenteditable=\"false\"]):not([inert]):not([inert] *)', 'details>summary:first-of-type:not([inert]):not([inert] *)', 'details:not([inert]):not([inert] *)'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n  var _element$getRootNode;\n  return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n  return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Node} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n *  see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n *  False if `node` is falsy.\n */\nvar _isInert = function isInert(node, lookUp) {\n  var _node$getAttribute;\n  if (lookUp === void 0) {\n    lookUp = true;\n  }\n  // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n  //  JS API property; we have to check the attribute, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's an active element\n  var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n  var inert = inertAtt === '' || inertAtt === 'true';\n\n  // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n  //  if it weren't for `matches()` not being a function on shadow roots; the following\n  //  code works for any kind of node\n  var result = inert || lookUp && node && (\n  // closest does not exist on shadow roots, so we fall back to a manual\n  // lookup upward, in case it is not defined.\n  typeof node.closest === 'function' ? node.closest('[inert]') : _isInert(node.parentNode));\n  return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n  var _node$getAttribute2;\n  // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n  //  to use the attribute directly to check for this, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's a non-editable element\n  var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n  return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n  // even if `includeContainer=false`, we still have to check it for inertness because\n  //  if it's inert (either by itself or via its parent), then all its children are inert\n  if (_isInert(el)) {\n    return [];\n  }\n  var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n  if (includeContainer && matches.call(el, candidateSelector)) {\n    candidates.unshift(el);\n  }\n  candidates = candidates.filter(filter);\n  return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n *  if a function, implies shadow support is enabled and either returns the shadow root of an element\n *  or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nvar _getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n  var candidates = [];\n  var elementsToCheck = Array.from(elements);\n  while (elementsToCheck.length) {\n    var element = elementsToCheck.shift();\n    if (_isInert(element, false)) {\n      // no need to look up since we're drilling down\n      // anything inside this container will also be inert\n      continue;\n    }\n    if (element.tagName === 'SLOT') {\n      // add shadow dom slot scope (slot itself cannot be focusable)\n      var assigned = element.assignedElements();\n      var content = assigned.length ? assigned : element.children;\n      var nestedCandidates = _getCandidatesIteratively(content, true, options);\n      if (options.flatten) {\n        candidates.push.apply(candidates, nestedCandidates);\n      } else {\n        candidates.push({\n          scopeParent: element,\n          candidates: nestedCandidates\n        });\n      }\n    } else {\n      // check candidate element\n      var validCandidate = matches.call(element, candidateSelector);\n      if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n        candidates.push(element);\n      }\n\n      // iterate over shadow content if possible\n      var shadowRoot = element.shadowRoot ||\n      // check for an undisclosed shadow\n      typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n      // no inert look up because we're already drilling down and checking for inertness\n      //  on the way down, so all containers to this root node should have already been\n      //  vetted as non-inert\n      var validShadowRoot = !_isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n      if (shadowRoot && validShadowRoot) {\n        // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n        //  shadow exists, so look at light dom children as fallback BUT create a scope for any\n        //  child candidates found because they're likely slotted elements (elements that are\n        //  children of the web component element (which has the shadow), in the light dom, but\n        //  slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n        //  _after_ we return from this recursive call\n        var _nestedCandidates = _getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n        if (options.flatten) {\n          candidates.push.apply(candidates, _nestedCandidates);\n        } else {\n          candidates.push({\n            scopeParent: element,\n            candidates: _nestedCandidates\n          });\n        }\n      } else {\n        // there's not shadow so just dig into the element's (light dom) children\n        //  __without__ giving the element special scope treatment\n        elementsToCheck.unshift.apply(elementsToCheck, element.children);\n      }\n    }\n  }\n  return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n  return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (node.tabIndex < 0) {\n    // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n    // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n    // yet they are still part of the regular tab order; in FF, they get a default\n    // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n    // order, consider their tab index to be 0.\n    // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n    // so if they don't have a tabindex attribute specifically set, assume it's 0.\n    if ((/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || isContentEditable(node)) && !hasTabIndex(node)) {\n      return 0;\n    }\n  }\n  return node.tabIndex;\n};\n\n/**\n * Determine the tab index of a given node __for sort order purposes__.\n * @param {HTMLElement} node\n * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,\n *  has tabIndex -1, but needs to be sorted by document order in order for its content to be\n *  inserted into the correct sort position.\n * @returns {number} Tab order (negative, 0, or positive number).\n */\nvar getSortOrderTabIndex = function getSortOrderTabIndex(node, isScope) {\n  var tabIndex = getTabIndex(node);\n  if (tabIndex < 0 && isScope && !hasTabIndex(node)) {\n    return 0;\n  }\n  return tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n  return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput(node) {\n  return node.tagName === 'INPUT';\n};\nvar isHiddenInput = function isHiddenInput(node) {\n  return isInput(node) && node.type === 'hidden';\n};\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n  var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n    return child.tagName === 'SUMMARY';\n  });\n  return r;\n};\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n  for (var i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked && nodes[i].form === form) {\n      return nodes[i];\n    }\n  }\n};\nvar isTabbableRadio = function isTabbableRadio(node) {\n  if (!node.name) {\n    return true;\n  }\n  var radioScope = node.form || getRootNode(node);\n  var queryRadios = function queryRadios(name) {\n    return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n  };\n  var radioSet;\n  if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n    radioSet = queryRadios(window.CSS.escape(node.name));\n  } else {\n    try {\n      radioSet = queryRadios(node.name);\n    } catch (err) {\n      // eslint-disable-next-line no-console\n      console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n      return false;\n    }\n  }\n  var checked = getCheckedRadio(radioSet, node.form);\n  return !checked || checked === node;\n};\nvar isRadio = function isRadio(node) {\n  return isInput(node) && node.type === 'radio';\n};\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n  return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nvar isNodeAttached = function isNodeAttached(node) {\n  var _nodeRoot;\n  // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n  //  (but NOT _the_ document; see second 'If' comment below for more).\n  // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n  //  is attached, and the one we need to check if it's in the document or not (because the\n  //  shadow, and all nodes it contains, is never considered in the document since shadows\n  //  behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n  //  is hidden, or is not in the document itself but is detached, it will affect the shadow's\n  //  visibility, including all the nodes it contains). The host could be any normal node,\n  //  or a custom element (i.e. web component). Either way, that's the one that is considered\n  //  part of the document, not the shadow root, nor any of its children (i.e. the node being\n  //  tested).\n  // To further complicate things, we have to look all the way up until we find a shadow HOST\n  //  that is attached (or find none) because the node might be in nested shadows...\n  // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n  //  document (per the docs) and while it's a Document-type object, that document does not\n  //  appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n  //  to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n  //  using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n  //  node is actually detached.\n  // NOTE: If `nodeRootHost` or `node` happens to be the `document` itself (which is possible\n  //  if a tabbable/focusable node was quickly added to the DOM, focused, and then removed\n  //  from the DOM as in https://github.com/focus-trap/focus-trap-react/issues/905), then\n  //  `ownerDocument` will be `null`, hence the optional chaining on it.\n  var nodeRoot = node && getRootNode(node);\n  var nodeRootHost = (_nodeRoot = nodeRoot) === null || _nodeRoot === void 0 ? void 0 : _nodeRoot.host;\n\n  // in some cases, a detached node will return itself as the root instead of a document or\n  //  shadow root object, in which case, we shouldn't try to look further up the host chain\n  var attached = false;\n  if (nodeRoot && nodeRoot !== node) {\n    var _nodeRootHost, _nodeRootHost$ownerDo, _node$ownerDocument;\n    attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && (_nodeRootHost$ownerDo = _nodeRootHost.ownerDocument) !== null && _nodeRootHost$ownerDo !== void 0 && _nodeRootHost$ownerDo.contains(nodeRootHost) || node !== null && node !== void 0 && (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 && _node$ownerDocument.contains(node));\n    while (!attached && nodeRootHost) {\n      var _nodeRoot2, _nodeRootHost2, _nodeRootHost2$ownerD;\n      // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n      //  which means we need to get the host's host and check if that parent host is contained\n      //  in (i.e. attached to) the document\n      nodeRoot = getRootNode(nodeRootHost);\n      nodeRootHost = (_nodeRoot2 = nodeRoot) === null || _nodeRoot2 === void 0 ? void 0 : _nodeRoot2.host;\n      attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && (_nodeRootHost2$ownerD = _nodeRootHost2.ownerDocument) !== null && _nodeRootHost2$ownerD !== void 0 && _nodeRootHost2$ownerD.contains(nodeRootHost));\n    }\n  }\n  return attached;\n};\nvar isZeroArea = function isZeroArea(node) {\n  var _node$getBoundingClie = node.getBoundingClientRect(),\n    width = _node$getBoundingClie.width,\n    height = _node$getBoundingClie.height;\n  return width === 0 && height === 0;\n};\nvar isHidden = function isHidden(node, _ref) {\n  var displayCheck = _ref.displayCheck,\n    getShadowRoot = _ref.getShadowRoot;\n  if (displayCheck === 'full-native') {\n    if ('checkVisibility' in node) {\n      // Chrome >= 105, Edge >= 105, Firefox >= 106, Safari >= 17.4\n      // @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility#browser_compatibility\n      var visible = node.checkVisibility({\n        // Checking opacity might be desirable for some use cases, but natively,\n        // opacity zero elements _are_ focusable and tabbable.\n        checkOpacity: false,\n        opacityProperty: false,\n        contentVisibilityAuto: true,\n        visibilityProperty: true,\n        // This is an alias for `visibilityProperty`. Contemporary browsers\n        // support both. However, this alias has wider browser support (Chrome\n        // >= 105 and Firefox >= 106, vs. Chrome >= 121 and Firefox >= 122), so\n        // we include it anyway.\n        checkVisibilityCSS: true\n      });\n      return !visible;\n    }\n    // Fall through to manual visibility checks\n  }\n\n  // NOTE: visibility will be `undefined` if node is detached from the document\n  //  (see notes about this further down), which means we will consider it visible\n  //  (this is legacy behavior from a very long way back)\n  // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n  //  _visibility_ check, not a _display_ check\n  if (getComputedStyle(node).visibility === 'hidden') {\n    return true;\n  }\n  var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n  var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n  if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n    return true;\n  }\n  if (!displayCheck || displayCheck === 'full' ||\n  // full-native can run this branch when it falls through in case\n  // Element#checkVisibility is unsupported\n  displayCheck === 'full-native' || displayCheck === 'legacy-full') {\n    if (typeof getShadowRoot === 'function') {\n      // figure out if we should consider the node to be in an undisclosed shadow and use the\n      //  'non-zero-area' fallback\n      var originalNode = node;\n      while (node) {\n        var parentElement = node.parentElement;\n        var rootNode = getRootNode(node);\n        if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n        ) {\n          // node has an undisclosed shadow which means we can only treat it as a black box, so we\n          //  fall back to a non-zero-area test\n          return isZeroArea(node);\n        } else if (node.assignedSlot) {\n          // iterate up slot\n          node = node.assignedSlot;\n        } else if (!parentElement && rootNode !== node.ownerDocument) {\n          // cross shadow boundary\n          node = rootNode.host;\n        } else {\n          // iterate up normal dom\n          node = parentElement;\n        }\n      }\n      node = originalNode;\n    }\n    // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n    //  (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n    //  it might be a falsy value, which means shadow DOM support is disabled\n\n    // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n    //  now we can just test to see if it would normally be visible or not, provided it's\n    //  attached to the main document.\n    // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n    //  `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n    if (isNodeAttached(node)) {\n      // this works wherever the node is: if there's at least one client rect, it's\n      //  somehow displayed; it also covers the CSS 'display: contents' case where the\n      //  node itself is hidden in place of its contents; and there's no need to search\n      //  up the hierarchy either\n      return !node.getClientRects().length;\n    }\n\n    // Else, the node isn't attached to the document, which means the `getClientRects()`\n    //  API will __always__ return zero rects (this can happen, for example, if React\n    //  is used to render nodes onto a detached tree, as confirmed in this thread:\n    //  https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n    //\n    // It also means that even window.getComputedStyle(node).display will return `undefined`\n    //  because styles are only computed for nodes that are in the document.\n    //\n    // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n    //  somehow. Though it was never stated officially, anyone who has ever used tabbable\n    //  APIs on nodes in detached containers has actually implicitly used tabbable in what\n    //  was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n    //  considering __everything__ to be visible because of the innability to determine styles.\n    //\n    // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n    //  nodes as visible with the 'none' fallback.__\n    if (displayCheck !== 'legacy-full') {\n      return true; // hidden\n    }\n    // else, fallback to 'none' mode and consider the node visible\n  } else if (displayCheck === 'non-zero-area') {\n    // NOTE: Even though this tests that the node's client rect is non-zero to determine\n    //  whether it's displayed, and that a detached node will __always__ have a zero-area\n    //  client rect, we don't special-case for whether the node is attached or not. In\n    //  this mode, we do want to consider nodes that have a zero area to be hidden at all\n    //  times, and that includes attached or not.\n    return isZeroArea(node);\n  }\n\n  // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n  //  it's visible\n  return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n//  unless they are in the _first_ <legend> element of the top-most disabled\n//  fieldset\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n  if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n    var parentNode = node.parentElement;\n    // check if `node` is contained in a disabled <fieldset>\n    while (parentNode) {\n      if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n        // look for the first <legend> among the children of the disabled <fieldset>\n        for (var i = 0; i < parentNode.children.length; i++) {\n          var child = parentNode.children.item(i);\n          // when the first <legend> (in document order) is found\n          if (child.tagName === 'LEGEND') {\n            // if its parent <fieldset> is not nested in another disabled <fieldset>,\n            // return whether `node` is a descendant of its first <legend>\n            return matches.call(parentNode, 'fieldset[disabled] *') ? true : !child.contains(node);\n          }\n        }\n        // the disabled <fieldset> containing `node` has no <legend>\n        return true;\n      }\n      parentNode = parentNode.parentElement;\n    }\n  }\n\n  // else, node's tabbable/focusable state should not be affected by a fieldset's\n  //  enabled/disabled state\n  return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n  if (node.disabled || isHiddenInput(node) || isHidden(node, options) ||\n  // For a details element with a summary, the summary element gets the focus\n  isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n    return false;\n  }\n  return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n  if (isNonTabbableRadio(node) || getTabIndex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n    return false;\n  }\n  return true;\n};\nvar isShadowRootTabbable = function isShadowRootTabbable(shadowHostNode) {\n  var tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n  if (isNaN(tabIndex) || tabIndex >= 0) {\n    return true;\n  }\n  // If a custom element has an explicit negative tabindex,\n  // browsers will not allow tab targeting said element's children.\n  return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nvar _sortByOrder = function sortByOrder(candidates) {\n  var regularTabbables = [];\n  var orderedTabbables = [];\n  candidates.forEach(function (item, i) {\n    var isScope = !!item.scopeParent;\n    var element = isScope ? item.scopeParent : item;\n    var candidateTabindex = getSortOrderTabIndex(element, isScope);\n    var elements = isScope ? _sortByOrder(item.candidates) : element;\n    if (candidateTabindex === 0) {\n      isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n    } else {\n      orderedTabbables.push({\n        documentOrder: i,\n        tabIndex: candidateTabindex,\n        item: item,\n        isScope: isScope,\n        content: elements\n      });\n    }\n  });\n  return orderedTabbables.sort(sortOrderedTabbables).reduce(function (acc, sortable) {\n    sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n    return acc;\n  }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable(container, options) {\n  options = options || {};\n  var candidates;\n  if (options.getShadowRoot) {\n    candidates = _getCandidatesIteratively([container], options.includeContainer, {\n      filter: isNodeMatchingSelectorTabbable.bind(null, options),\n      flatten: false,\n      getShadowRoot: options.getShadowRoot,\n      shadowRootFilter: isShadowRootTabbable\n    });\n  } else {\n    candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n  }\n  return _sortByOrder(candidates);\n};\nvar focusable = function focusable(container, options) {\n  options = options || {};\n  var candidates;\n  if (options.getShadowRoot) {\n    candidates = _getCandidatesIteratively([container], options.includeContainer, {\n      filter: isNodeMatchingSelectorFocusable.bind(null, options),\n      flatten: true,\n      getShadowRoot: options.getShadowRoot\n    });\n  } else {\n    candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n  }\n  return candidates;\n};\nvar isTabbable = function isTabbable(node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, candidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe:not([inert]):not([inert] *)').join(',');\nvar isFocusable = function isFocusable(node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, focusableCandidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, getTabIndex, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n* focus-trap 8.1.0\n* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n*/\nimport { isFocusable, tabbable, focusable, isTabbable, getTabIndex } from 'tabbable';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nfunction _createForOfIteratorHelper(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (!t) {\n    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {\n      t && (r = t);\n      var n = 0,\n        F = function () {};\n      return {\n        s: F,\n        n: function () {\n          return n >= r.length ? {\n            done: true\n          } : {\n            done: false,\n            value: r[n++]\n          };\n        },\n        e: function (r) {\n          throw r;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var o,\n    a = true,\n    u = false;\n  return {\n    s: function () {\n      t = t.call(r);\n    },\n    n: function () {\n      var r = t.next();\n      return a = r.done, r;\n    },\n    e: function (r) {\n      u = true, o = r;\n    },\n    f: function () {\n      try {\n        a || null == t.return || t.return();\n      } finally {\n        if (u) throw o;\n      }\n    }\n  };\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _regenerator() {\n  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\n  var e,\n    t,\n    r = \"function\" == typeof Symbol ? Symbol : {},\n    n = r.iterator || \"@@iterator\",\n    o = r.toStringTag || \"@@toStringTag\";\n  function i(r, n, o, i) {\n    var c = n && n.prototype instanceof Generator ? n : Generator,\n      u = Object.create(c.prototype);\n    return _regeneratorDefine(u, \"_invoke\", function (r, n, o) {\n      var i,\n        c,\n        u,\n        f = 0,\n        p = o || [],\n        y = false,\n        G = {\n          p: 0,\n          n: 0,\n          v: e,\n          a: d,\n          f: d.bind(e, 4),\n          d: function (t, r) {\n            return i = t, c = 0, u = e, G.n = r, a;\n          }\n        };\n      function d(r, n) {\n        for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {\n          var o,\n            i = p[t],\n            d = G.p,\n            l = i[2];\n          r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));\n        }\n        if (o || r > 1) return a;\n        throw y = true, n;\n      }\n      return function (o, p, l) {\n        if (f > 1) throw TypeError(\"Generator is already running\");\n        for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {\n          i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);\n          try {\n            if (f = 2, i) {\n              if (c || (o = \"next\"), t = i[o]) {\n                if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\");\n                if (!t.done) return t;\n                u = t.value, c < 2 && (c = 0);\n              } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1);\n              i = e;\n            } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;\n          } catch (t) {\n            i = e, c = 1, u = t;\n          } finally {\n            f = 1;\n          }\n        }\n        return {\n          value: t,\n          done: y\n        };\n      };\n    }(r, o, i), true), u;\n  }\n  var a = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  t = Object.getPrototypeOf;\n  var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {\n      return this;\n    }), t),\n    u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);\n  function f(e) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e;\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine(u), _regeneratorDefine(u, o, \"Generator\"), _regeneratorDefine(u, n, function () {\n    return this;\n  }), _regeneratorDefine(u, \"toString\", function () {\n    return \"[object Generator]\";\n  }), (_regenerator = function () {\n    return {\n      w: i,\n      m: f\n    };\n  })();\n}\nfunction _regeneratorDefine(e, r, n, t) {\n  var i = Object.defineProperty;\n  try {\n    i({}, \"\", {});\n  } catch (e) {\n    i = 0;\n  }\n  _regeneratorDefine = function (e, r, n, t) {\n    function o(r, n) {\n      _regeneratorDefine(e, r, function (e) {\n        return this._invoke(r, n, e);\n      });\n    }\n    r ? i ? i(e, r, {\n      value: n,\n      enumerable: !t,\n      configurable: !t,\n      writable: !t\n    }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2));\n  }, _regeneratorDefine(e, r, n, t);\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar activeFocusTraps = {\n  // Returns the trap from the top of the stack.\n  getActiveTrap: function getActiveTrap(trapStack) {\n    if ((trapStack === null || trapStack === void 0 ? void 0 : trapStack.length) > 0) {\n      return trapStack[trapStack.length - 1];\n    }\n    return null;\n  },\n  // Pauses the currently active trap, then adds a new trap to the stack.\n  activateTrap: function activateTrap(trapStack, trap) {\n    var activeTrap = activeFocusTraps.getActiveTrap(trapStack);\n    if (trap !== activeTrap) {\n      activeFocusTraps.pauseTrap(trapStack);\n    }\n    var trapIndex = trapStack.indexOf(trap);\n    if (trapIndex === -1) {\n      trapStack.push(trap);\n    } else {\n      // move this existing trap to the front of the queue\n      trapStack.splice(trapIndex, 1);\n      trapStack.push(trap);\n    }\n  },\n  // Removes the trap from the top of the stack, then unpauses the next trap down.\n  deactivateTrap: function deactivateTrap(trapStack, trap) {\n    var trapIndex = trapStack.indexOf(trap);\n    if (trapIndex !== -1) {\n      trapStack.splice(trapIndex, 1);\n    }\n    activeFocusTraps.unpauseTrap(trapStack);\n  },\n  // Pauses the trap at the top of the stack.\n  pauseTrap: function pauseTrap(trapStack) {\n    var activeTrap = activeFocusTraps.getActiveTrap(trapStack);\n    activeTrap === null || activeTrap === void 0 || activeTrap._setPausedState(true);\n  },\n  // Unpauses the trap at the top of the stack.\n  unpauseTrap: function unpauseTrap(trapStack) {\n    var activeTrap = activeFocusTraps.getActiveTrap(trapStack);\n    if (activeTrap && !activeTrap._isManuallyPaused()) {\n      activeTrap._setPausedState(false);\n    }\n  }\n};\nvar isSelectableInput = function isSelectableInput(node) {\n  return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';\n};\nvar isEscapeEvent = function isEscapeEvent(e) {\n  return (e === null || e === void 0 ? void 0 : e.key) === 'Escape' || (e === null || e === void 0 ? void 0 : e.key) === 'Esc' || (e === null || e === void 0 ? void 0 : e.keyCode) === 27;\n};\nvar isTabEvent = function isTabEvent(e) {\n  return (e === null || e === void 0 ? void 0 : e.key) === 'Tab' || (e === null || e === void 0 ? void 0 : e.keyCode) === 9;\n};\n\n// checks for TAB by default\nvar isKeyForward = function isKeyForward(e) {\n  return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nvar isKeyBackward = function isKeyBackward(e) {\n  return isTabEvent(e) && e.shiftKey;\n};\nvar delay = function delay(fn) {\n  return setTimeout(fn, 0);\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n *  the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nvar valueOrHandler = function valueOrHandler(value) {\n  for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    params[_key - 1] = arguments[_key];\n  }\n  return typeof value === 'function' ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget(event) {\n  // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n  //  shadow host. However, event.target.composedPath() will be an array of\n  //  nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n  //  outer-most (the host HTML document). If we have access to composedPath(),\n  //  then use its first element; otherwise, fall back to event.target (and\n  //  this only works for an _open_ shadow DOM; otherwise,\n  //  composedPath()[0] === event.target always).\n  return event.target.shadowRoot && typeof event.composedPath === 'function' ? event.composedPath()[0] : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n//  current instance use the same stack if `userOptions.trapStack` isn't specified\nvar internalTrapStack = [];\nvar createFocusTrap = function createFocusTrap(elements, userOptions) {\n  // SSR: a live trap shouldn't be created in this type of environment so this\n  //  should be safe code to execute if the `document` option isn't specified\n  var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n  var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack;\n  var config = _objectSpread2({\n    returnFocusOnDeactivate: true,\n    escapeDeactivates: true,\n    delayInitialFocus: true,\n    isolateSubtrees: false,\n    isKeyForward: isKeyForward,\n    isKeyBackward: isKeyBackward\n  }, userOptions);\n  var state = {\n    // containers given to createFocusTrap()\n    /** @type {Array<HTMLElement>} */\n    containers: [],\n    // list of objects identifying tabbable nodes in `containers` in the trap\n    // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n    //  is active, but the trap should never get to a state where there isn't at least one group\n    //  with at least one tabbable node in it (that would lead to an error condition that would\n    //  result in an error being thrown)\n    /** @type {Array<{\n     *    container: HTMLElement,\n     *    tabbableNodes: Array<HTMLElement>, // empty if none\n     *    focusableNodes: Array<HTMLElement>, // empty if none\n     *    posTabIndexesFound: boolean,\n     *    firstTabbableNode: HTMLElement|undefined,\n     *    lastTabbableNode: HTMLElement|undefined,\n     *    firstDomTabbableNode: HTMLElement|undefined,\n     *    lastDomTabbableNode: HTMLElement|undefined,\n     *    nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n     *  }>}\n     */\n    containerGroups: [],\n    // same order/length as `containers` list\n\n    // references to objects in `containerGroups`, but only those that actually have\n    //  tabbable nodes in them\n    // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n    //  the same length\n    tabbableGroups: [],\n    // references to nodes that are siblings to the ancestors of this trap's containers.\n    /** @type {Set<HTMLElement>} */\n    adjacentElements: new Set(),\n    // references to nodes that were inert or aria-hidden before the trap was activated.\n    /** @type {Set<HTMLElement>} */\n    alreadySilent: new Set(),\n    nodeFocusedBeforeActivation: null,\n    mostRecentlyFocusedNode: null,\n    active: false,\n    paused: false,\n    manuallyPaused: false,\n    // timer ID for when delayInitialFocus is true and initial focus in this trap\n    //  has been delayed during activation\n    delayInitialFocusTimer: undefined,\n    // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n    recentNavEvent: undefined\n  };\n  var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n  /**\n   * Gets a configuration option value.\n   * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n   *  value will be taken from this object. Otherwise, value will be taken from base configuration.\n   * @param {string} optionName Name of the option whose value is sought.\n   * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n   *  IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n   */\n  var getOption = function getOption(configOverrideOptions, optionName, configOptionName) {\n    return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n  };\n\n  /**\n   * Finds the index of the container that contains the element.\n   * @param {HTMLElement} element\n   * @param {Event} [event] If available, and `element` isn't directly found in any container,\n   *  the event's composed path is used to see if includes any known trap containers in the\n   *  case where the element is inside a Shadow DOM.\n   * @returns {number} Index of the container in either `state.containers` or\n   *  `state.containerGroups` (the order/length of these lists are the same); -1\n   *  if the element isn't found.\n   */\n  var findContainerIndex = function findContainerIndex(element, event) {\n    var composedPath = typeof (event === null || event === void 0 ? void 0 : event.composedPath) === 'function' ? event.composedPath() : undefined;\n    // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n    //  nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n    //  and we still need to find the element in there\n    return state.containerGroups.findIndex(function (_ref) {\n      var container = _ref.container,\n        tabbableNodes = _ref.tabbableNodes;\n      return container.contains(element) || (// fall back to explicit tabbable search which will take into consideration any\n      //  web components if the `tabbableOptions.getShadowRoot` option was used for\n      //  the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n      //  look inside web components even if open)\n      composedPath === null || composedPath === void 0 ? void 0 : composedPath.includes(container)) || tabbableNodes.find(function (node) {\n        return node === element;\n      });\n    });\n  };\n\n  /**\n   * Gets the node for the given option, which is expected to be an option that\n   *  can be either a DOM node, a string that is a selector to get a node, `false`\n   *  (if a node is explicitly NOT given), or a function that returns any of these\n   *  values.\n   * @param {string} optionName\n   * @param {Object} options\n   * @param {boolean} [options.hasFallback] True if the option could be a selector string\n   *  and the option allows for a fallback scenario in the case where the selector is\n   *  valid but does not match a node (i.e. the queried node doesn't exist in the DOM).\n   * @param {Array} [options.params] Params to pass to the option if it's a function.\n   * @returns {undefined | null | false | HTMLElement | SVGElement} Returns\n   *  `undefined` if the option is not specified; `null` if the option didn't resolve\n   *  to a node but `options.hasFallback=true`, `false` if the option resolved to `false`\n   *  (node explicitly not given); otherwise, the resolved DOM node.\n   * @throws {Error} If the option is set, not `false`, and is not, or does not\n   *  resolve to a node, unless the option is a selector string and `options.hasFallback=true`.\n   */\n  var getNodeForOption = function getNodeForOption(optionName) {\n    var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref2$hasFallback = _ref2.hasFallback,\n      hasFallback = _ref2$hasFallback === void 0 ? false : _ref2$hasFallback,\n      _ref2$params = _ref2.params,\n      params = _ref2$params === void 0 ? [] : _ref2$params;\n    var optionValue = config[optionName];\n    if (typeof optionValue === 'function') {\n      optionValue = optionValue.apply(void 0, _toConsumableArray(params));\n    }\n    if (optionValue === true) {\n      optionValue = undefined; // use default value\n    }\n    if (!optionValue) {\n      if (optionValue === undefined || optionValue === false) {\n        return optionValue;\n      }\n      // else, empty string (invalid), null (invalid), 0 (invalid)\n\n      throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n    }\n    var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n    if (typeof optionValue === 'string') {\n      try {\n        node = doc.querySelector(optionValue); // resolve to node, or null if fails\n      } catch (err) {\n        throw new Error(\"`\".concat(optionName, \"` appears to be an invalid selector; error=\\\"\").concat(err.message, \"\\\"\"));\n      }\n      if (!node) {\n        if (!hasFallback) {\n          throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n        }\n        // else, `node` MUST be `null` because that's what `Document.querySelector()` returns\n        //  if the selector is valid but doesn't match anything\n      }\n    }\n    return node;\n  };\n  var getInitialFocusNode = function getInitialFocusNode() {\n    var node = getNodeForOption('initialFocus', {\n      hasFallback: true\n    });\n\n    // false explicitly indicates we want no initialFocus at all\n    if (node === false) {\n      return false;\n    }\n    if (node === undefined || node && !isFocusable(node, config.tabbableOptions)) {\n      // option not specified nor focusable: use fallback options\n      if (findContainerIndex(doc.activeElement) >= 0) {\n        node = doc.activeElement;\n      } else {\n        var firstTabbableGroup = state.tabbableGroups[0];\n        var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n        // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n        node = firstTabbableNode || getNodeForOption('fallbackFocus');\n      }\n    } else if (node === null) {\n      // option is a VALID selector string that doesn't yield a node: use the `fallbackFocus`\n      //  option instead of the default behavior when the option isn't specified at all\n      node = getNodeForOption('fallbackFocus');\n    }\n    if (!node) {\n      throw new Error('Your focus-trap needs to have at least one focusable element');\n    }\n    return node;\n  };\n  var updateTabbableNodes = function updateTabbableNodes() {\n    state.containerGroups = state.containers.map(function (container) {\n      var tabbableNodes = tabbable(container, config.tabbableOptions);\n\n      // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n      //  are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n      //  are focusable but not tabbable\n      var focusableNodes = focusable(container, config.tabbableOptions);\n      var firstTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n      var lastTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : undefined;\n      var firstDomTabbableNode = focusableNodes.find(function (node) {\n        return isTabbable(node);\n      });\n      var lastDomTabbableNode = focusableNodes.slice().reverse().find(function (node) {\n        return isTabbable(node);\n      });\n      var posTabIndexesFound = !!tabbableNodes.find(function (node) {\n        return getTabIndex(node) > 0;\n      });\n      return {\n        container: container,\n        tabbableNodes: tabbableNodes,\n        focusableNodes: focusableNodes,\n        /** True if at least one node with positive `tabindex` was found in this container. */\n        posTabIndexesFound: posTabIndexesFound,\n        /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n        firstTabbableNode: firstTabbableNode,\n        /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n        lastTabbableNode: lastTabbableNode,\n        // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n        //  would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n        //  because that API doesn't work with Shadow DOM as well as it should (@see\n        //  https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n        //  to address an edge case related to positive tabindex support, this seems like a much easier,\n        //  \"close enough most of the time\" alternative for positive tabindexes which should generally\n        //  be avoided anyway...\n        /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n        firstDomTabbableNode: firstDomTabbableNode,\n        /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n        lastDomTabbableNode: lastDomTabbableNode,\n        /**\n         * Finds the __tabbable__ node that follows the given node in the specified direction,\n         *  in this container, if any.\n         * @param {HTMLElement} node\n         * @param {boolean} [forward] True if going in forward tab order; false if going\n         *  in reverse.\n         * @returns {HTMLElement|undefined} The next tabbable node, if any.\n         */\n        nextTabbableNode: function nextTabbableNode(node) {\n          var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n          var nodeIdx = tabbableNodes.indexOf(node);\n          if (nodeIdx < 0) {\n            // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n            //  since `node` should at least have been focusable, we assume that's the case and mimic\n            //  what browsers do, which is set focus to the next node in __document position order__,\n            //  regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n            //  above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n            //  basic DOM order\n            if (forward) {\n              return focusableNodes.slice(focusableNodes.indexOf(node) + 1).find(function (el) {\n                return isTabbable(el);\n              });\n            }\n            return focusableNodes.slice(0, focusableNodes.indexOf(node)).reverse().find(function (el) {\n              return isTabbable(el);\n            });\n          }\n          return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n        }\n      };\n    });\n    state.tabbableGroups = state.containerGroups.filter(function (group) {\n      return group.tabbableNodes.length > 0;\n    });\n\n    // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n    if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus') // returning false not supported for this option\n    ) {\n      throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times');\n    }\n\n    // NOTE: Positive tabindexes are only properly supported in single-container traps because\n    //  doing it across multiple containers where tabindexes could be all over the place\n    //  would require Tabbable to support multiple containers, would require additional\n    //  specialized Shadow DOM support, and would require Tabbable's multi-container support\n    //  to look at those containers in document position order rather than user-provided\n    //  order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n    //  https://github.com/focus-trap/focus-trap/issues/375 for more details.\n    if (state.containerGroups.find(function (g) {\n      return g.posTabIndexesFound;\n    }) && state.containerGroups.length > 1) {\n      throw new Error(\"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\");\n    }\n  };\n\n  /**\n   * Gets the current activeElement. If it's a web-component and has open shadow-root\n   * it will recursively search inside shadow roots for the \"true\" activeElement.\n   *\n   * @param {Document | ShadowRoot} el\n   *\n   * @returns {HTMLElement} The element that currently has the focus\n   **/\n  var _getActiveElement = function getActiveElement(el) {\n    var activeElement = el.activeElement;\n    if (!activeElement) {\n      return;\n    }\n    if (activeElement.shadowRoot && activeElement.shadowRoot.activeElement !== null) {\n      return _getActiveElement(activeElement.shadowRoot);\n    }\n    return activeElement;\n  };\n  var _tryFocus = function tryFocus(node) {\n    if (node === false) {\n      return;\n    }\n    if (node === _getActiveElement(document)) {\n      return;\n    }\n    if (!node || !node.focus) {\n      _tryFocus(getInitialFocusNode());\n      return;\n    }\n    node.focus({\n      preventScroll: !!config.preventScroll\n    });\n    // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n    state.mostRecentlyFocusedNode = node;\n    if (isSelectableInput(node)) {\n      node.select();\n    }\n  };\n  var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) {\n    var node = getNodeForOption('setReturnFocus', {\n      params: [previousActiveElement]\n    });\n    return node ? node : node === false ? false : previousActiveElement;\n  };\n\n  /**\n   * Finds the next node (in either direction) where focus should move according to a\n   *  keyboard focus-in event.\n   * @param {Object} params\n   * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n   * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n   *  will be used to determine the `target`). Ignored if `target` is specified.\n   * @param {boolean} [params.isBackward] True if focus should move backward.\n   * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n   *  determined given the current state of the trap.\n   */\n  var findNextNavNode = function findNextNavNode(_ref3) {\n    var target = _ref3.target,\n      event = _ref3.event,\n      _ref3$isBackward = _ref3.isBackward,\n      isBackward = _ref3$isBackward === void 0 ? false : _ref3$isBackward;\n    target = target || getActualTarget(event);\n    updateTabbableNodes();\n    var destinationNode = null;\n    if (state.tabbableGroups.length > 0) {\n      // make sure the target is actually contained in a group\n      // NOTE: the target may also be the container itself if it's focusable\n      //  with tabIndex='-1' and was given initial focus\n      var containerIndex = findContainerIndex(target, event);\n      var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n      if (containerIndex < 0) {\n        // target not found in any group: quite possible focus has escaped the trap,\n        //  so bring it back into...\n        if (isBackward) {\n          // ...the last node in the last group\n          destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n        } else {\n          // ...the first node in the first group\n          destinationNode = state.tabbableGroups[0].firstTabbableNode;\n        }\n      } else if (isBackward) {\n        // REVERSE\n\n        // is the target the first tabbable node in a group?\n        var startOfGroupIndex = state.tabbableGroups.findIndex(function (_ref4) {\n          var firstTabbableNode = _ref4.firstTabbableNode;\n          return target === firstTabbableNode;\n        });\n        if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n          // an exception case where the target is either the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle shift+tab as if focus were on the container's\n          //  first tabbable node, and go to the last tabbable node of the LAST group\n          startOfGroupIndex = containerIndex;\n        }\n        if (startOfGroupIndex >= 0) {\n          // YES: then shift+tab should go to the last tabbable node in the\n          //  previous group (and wrap around to the last tabbable node of\n          //  the LAST group if it's the first tabbable node of the FIRST group)\n          var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n          var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n          destinationNode = getTabIndex(target) >= 0 ? destinationGroup.lastTabbableNode : destinationGroup.lastDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target, false);\n        }\n      } else {\n        // FORWARD\n\n        // is the target the last tabbable node in a group?\n        var lastOfGroupIndex = state.tabbableGroups.findIndex(function (_ref5) {\n          var lastTabbableNode = _ref5.lastTabbableNode;\n          return target === lastTabbableNode;\n        });\n        if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n          // an exception case where the target is the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle tab as if focus were on the container's\n          //  last tabbable node, and go to the first tabbable node of the FIRST group\n          lastOfGroupIndex = containerIndex;\n        }\n        if (lastOfGroupIndex >= 0) {\n          // YES: then tab should go to the first tabbable node in the next\n          //  group (and wrap around to the first tabbable node of the FIRST\n          //  group if it's the last tabbable node of the LAST group)\n          var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n          var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n          destinationNode = getTabIndex(target) >= 0 ? _destinationGroup.firstTabbableNode : _destinationGroup.firstDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target);\n        }\n      }\n    } else {\n      // no groups available\n      // NOTE: the fallbackFocus option does not support returning false to opt-out\n      destinationNode = getNodeForOption('fallbackFocus');\n    }\n    return destinationNode;\n  };\n\n  // This needs to be done on mousedown and touchstart instead of click\n  // so that it precedes the focus event.\n  var checkPointerDown = function checkPointerDown(e) {\n    var target = getActualTarget(e);\n    if (findContainerIndex(target, e) >= 0) {\n      // allow the click since it occurred inside the trap\n      return;\n    }\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      // immediately deactivate the trap\n      trap.deactivate({\n        // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n        //  which will result in the outside click setting focus to the node\n        //  that was clicked (and if not focusable, to \"nothing\"); by setting\n        //  `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n        //  on activation (or the configured `setReturnFocus` node), whether the\n        //  outside click was on a focusable node or not\n        returnFocus: config.returnFocusOnDeactivate\n      });\n      return;\n    }\n\n    // This is needed for mobile devices.\n    // (If we'll only let `click` events through,\n    // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      // allow the click outside the trap to take place\n      return;\n    }\n\n    // otherwise, prevent the click\n    e.preventDefault();\n  };\n\n  // In case focus escapes the trap for some strange reason, pull it back in.\n  // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n  //  scrolling if the node that got focused was out of view; there's nothing we can do to\n  //  prevent that from happening by the time we discover that focus escaped\n  var checkFocusIn = function checkFocusIn(event) {\n    var target = getActualTarget(event);\n    var targetContained = findContainerIndex(target, event) >= 0;\n\n    // In Firefox when you Tab out of an iframe the Document is briefly focused.\n    if (targetContained || target instanceof Document) {\n      if (targetContained) {\n        state.mostRecentlyFocusedNode = target;\n      }\n    } else {\n      // escaped! pull it back in to where it just left\n      event.stopImmediatePropagation();\n\n      // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n      //  it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n      //  toward a node with a positive tab index\n      var nextNode; // next node to focus, if we find one\n      var navAcrossContainers = true;\n      if (state.mostRecentlyFocusedNode) {\n        if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n          // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n          var mruContainerIdx = findContainerIndex(state.mostRecentlyFocusedNode);\n          // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n          //  and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n          //  with at least one tabbable node in order to function, so this could be the other container\n          //  with nothing tabbable in it)\n          var tabbableNodes = state.containerGroups[mruContainerIdx].tabbableNodes;\n          if (tabbableNodes.length > 0) {\n            // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n            var mruTabIdx = tabbableNodes.findIndex(function (node) {\n              return node === state.mostRecentlyFocusedNode;\n            });\n            if (mruTabIdx >= 0) {\n              if (config.isKeyForward(state.recentNavEvent)) {\n                if (mruTabIdx + 1 < tabbableNodes.length) {\n                  nextNode = tabbableNodes[mruTabIdx + 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              } else {\n                if (mruTabIdx - 1 >= 0) {\n                  nextNode = tabbableNodes[mruTabIdx - 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              }\n              // else, don't find in container order without considering direction too\n            }\n          }\n          // else, no tabbable nodes in that container (which means we must have at least one other\n          //  container with at least one tabbable node in it, otherwise focus-trap would've thrown\n          //  an error the last time updateTabbableNodes() was run): find next node among all known\n          //  containers\n        } else {\n          // check to see if there's at least one tabbable node with a positive tab index inside\n          //  the trap because focus seems to escape when navigating backward from a tabbable node\n          //  with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n          //  the greatest positive tab index like it should)\n          if (!state.containerGroups.some(function (g) {\n            return g.tabbableNodes.some(function (n) {\n              return getTabIndex(n) > 0;\n            });\n          })) {\n            // no containers with tabbable nodes with positive tab indexes which means the focus\n            //  escaped for some other reason and we should just execute the fallback to the\n            //  MRU node or initial focus node, if any\n            navAcrossContainers = false;\n          }\n        }\n      } else {\n        // no MRU node means we're likely in some initial condition when the trap has just\n        //  been activated and initial focus hasn't been given yet, in which case we should\n        //  fall through to trying to focus the initial focus node, which is what should\n        //  happen below at this point in the logic\n        navAcrossContainers = false;\n      }\n      if (navAcrossContainers) {\n        nextNode = findNextNavNode({\n          // move FROM the MRU node, not event-related node (which will be the node that is\n          //  outside the trap causing the focus escape we're trying to fix)\n          target: state.mostRecentlyFocusedNode,\n          isBackward: config.isKeyBackward(state.recentNavEvent)\n        });\n      }\n      if (nextNode) {\n        _tryFocus(nextNode);\n      } else {\n        _tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n      }\n    }\n    state.recentNavEvent = undefined; // clear\n  };\n\n  // Hijack key nav events on the first and last focusable nodes of the trap,\n  // in order to prevent focus from escaping. If it escapes for even a\n  // moment it can end up scrolling the page and causing confusion so we\n  // kind of need to capture the action at the keydown phase.\n  var checkKeyNav = function checkKeyNav(event) {\n    var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    state.recentNavEvent = event;\n    var destinationNode = findNextNavNode({\n      event: event,\n      isBackward: isBackward\n    });\n    if (destinationNode) {\n      if (isTabEvent(event)) {\n        // since tab natively moves focus, we wouldn't have a destination node unless we\n        //  were on the edge of a container and had to move to the next/previous edge, in\n        //  which case we want to prevent default to keep the browser from moving focus\n        //  to where it normally would\n        event.preventDefault();\n      }\n      _tryFocus(destinationNode);\n    }\n    // else, let the browser take care of [shift+]tab and move the focus\n  };\n  var checkTabKey = function checkTabKey(event) {\n    if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n      checkKeyNav(event, config.isKeyBackward(event));\n    }\n  };\n\n  // we use a different event phase for the Escape key to allow canceling the event and checking for this in escapeDeactivates\n  var checkEscapeKey = function checkEscapeKey(event) {\n    if (isEscapeEvent(event) && valueOrHandler(config.escapeDeactivates, event) !== false) {\n      event.preventDefault();\n      trap.deactivate();\n    }\n  };\n  var checkClick = function checkClick(e) {\n    var target = getActualTarget(e);\n    if (findContainerIndex(target, e) >= 0) {\n      return;\n    }\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      return;\n    }\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  };\n\n  //\n  // EVENT LISTENERS\n  //\n\n  /**\n   * Adds listeners to the document necessary for trapping focus and attempts to set focus\n   *  to the configured initial focus node. Does nothing if the trap isn't active.\n   * @returns {Promise<void>} Resolved (always) once the initial focus node has been focused.\n   *  Also resolved if the trap isn't active.\n   */\n  var addListeners = function addListeners() {\n    if (!state.active) {\n      return Promise.resolve();\n    }\n\n    // There can be only one listening focus trap at a time\n    activeFocusTraps.activateTrap(trapStack, trap);\n\n    // Delay ensures that the focused element doesn't capture the event\n    // that caused the focus trap activation.\n    /** @type {Promise<void>} */\n    var promise;\n    if (config.delayInitialFocus) {\n      // NOTE: Promise constructor callback is called synchronously, which is what we want\n      //  since we need to capture the timer ID immediately\n      promise = new Promise(function (resolve) {\n        state.delayInitialFocusTimer = delay(function () {\n          _tryFocus(getInitialFocusNode());\n          resolve();\n        });\n      });\n    } else {\n      promise = Promise.resolve();\n      _tryFocus(getInitialFocusNode());\n    }\n    doc.addEventListener('focusin', checkFocusIn, true);\n    doc.addEventListener('mousedown', checkPointerDown, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('touchstart', checkPointerDown, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('click', checkClick, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('keydown', checkTabKey, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('keydown', checkEscapeKey);\n    return promise;\n  };\n\n  /**\n   * Traverses up the DOM from each of `containers`, collecting references to\n   * the elements that are siblings to `container` or an ancestor of `container`.\n   * @param {Array<HTMLElement>} containers\n   */\n  var collectAdjacentElements = function collectAdjacentElements(containers) {\n    // Re-activate all adjacent elements & clear previous collection.\n    if (state.active && !state.paused) {\n      trap._setSubtreeIsolation(false);\n    }\n    state.adjacentElements.clear();\n    state.alreadySilent.clear();\n\n    // Collect all ancestors of all containers to avoid redundant processing.\n    var containerAncestors = new Set();\n    var adjacentElements = new Set();\n\n    // Compile all elements adjacent to the focus trap containers & lineage.\n    var _iterator = _createForOfIteratorHelper(containers),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var container = _step.value;\n        containerAncestors.add(container);\n        var insideShadowRoot = typeof ShadowRoot !== 'undefined' && container.getRootNode() instanceof ShadowRoot;\n        var current = container;\n        while (current) {\n          containerAncestors.add(current);\n          var parent = current.parentElement;\n          var siblings = [];\n          if (parent) {\n            siblings = parent.children;\n          } else if (!parent && insideShadowRoot) {\n            siblings = current.getRootNode().children;\n            parent = current.getRootNode().host;\n            insideShadowRoot = typeof ShadowRoot !== 'undefined' && parent.getRootNode() instanceof ShadowRoot;\n          }\n\n          // Add all the children, we'll remove container lineage later.\n          var _iterator2 = _createForOfIteratorHelper(siblings),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var child = _step2.value;\n              adjacentElements.add(child);\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n          current = parent;\n        }\n      }\n\n      // Multi-container traps may overlap.\n      // Remove elements within container lineages.\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    containerAncestors.forEach(function (el) {\n      adjacentElements[\"delete\"](el);\n    });\n    state.adjacentElements = adjacentElements;\n  };\n  var removeListeners = function removeListeners() {\n    if (!state.active) {\n      return;\n    }\n    doc.removeEventListener('focusin', checkFocusIn, true);\n    doc.removeEventListener('mousedown', checkPointerDown, true);\n    doc.removeEventListener('touchstart', checkPointerDown, true);\n    doc.removeEventListener('click', checkClick, true);\n    doc.removeEventListener('keydown', checkTabKey, true);\n    doc.removeEventListener('keydown', checkEscapeKey);\n    return trap;\n  };\n\n  //\n  // MUTATION OBSERVER\n  //\n\n  var checkDomRemoval = function checkDomRemoval(mutations) {\n    var isFocusedNodeRemoved = mutations.some(function (mutation) {\n      var removedNodes = Array.from(mutation.removedNodes);\n      return removedNodes.some(function (node) {\n        return node === state.mostRecentlyFocusedNode;\n      });\n    });\n\n    // If the currently focused is removed then browsers will move focus to the\n    // <body> element. If this happens, try to move focus back into the trap.\n    if (isFocusedNodeRemoved) {\n      _tryFocus(getInitialFocusNode());\n    }\n  };\n\n  // Use MutationObserver - if supported - to detect if focused node is removed\n  // from the DOM.\n  var mutationObserver = typeof window !== 'undefined' && 'MutationObserver' in window ? new MutationObserver(checkDomRemoval) : undefined;\n  var updateObservedNodes = function updateObservedNodes() {\n    if (!mutationObserver) {\n      return;\n    }\n    mutationObserver.disconnect();\n    if (state.active && !state.paused) {\n      state.containers.map(function (container) {\n        mutationObserver.observe(container, {\n          subtree: true,\n          childList: true\n        });\n      });\n    }\n  };\n\n  //\n  // TRAP DEFINITION\n  //\n\n  trap = {\n    get active() {\n      return state.active;\n    },\n    get paused() {\n      return state.paused;\n    },\n    activate: function activate(activateOptions) {\n      if (state.active) {\n        return this;\n      }\n      var onActivate = getOption(activateOptions, 'onActivate');\n      var onPostActivate = getOption(activateOptions, 'onPostActivate');\n      var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n      // If a currently-active trap is isolating its subtree, we need to remove\n      // that isolation to allow the new trap to find tabbable nodes.\n      var preexistingTrap = activeFocusTraps.getActiveTrap(trapStack);\n      var revertState = false;\n      if (preexistingTrap && !preexistingTrap.paused) {\n        var _preexistingTrap$_set;\n        // [#1729] method MAY not exist if using `trapStack` option to share stack with older\n        //  versions of Focus-trap in the same DOM so use optional chaining here just in case\n        //  since this is a trap we may not have created from this instance of the library\n        (_preexistingTrap$_set = preexistingTrap._setSubtreeIsolation) === null || _preexistingTrap$_set === void 0 || _preexistingTrap$_set.call(preexistingTrap, false);\n        revertState = true;\n      }\n      try {\n        if (!checkCanFocusTrap) {\n          updateTabbableNodes();\n        }\n        state.active = true;\n        state.paused = false;\n        state.nodeFocusedBeforeActivation = _getActiveElement(doc);\n        onActivate === null || onActivate === void 0 || onActivate({\n          trap: trap\n        });\n        var finishActivation = /*#__PURE__*/function () {\n          var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n            return _regenerator().w(function (_context) {\n              while (1) switch (_context.n) {\n                case 0:\n                  if (checkCanFocusTrap) {\n                    updateTabbableNodes();\n                  }\n\n                  // NOTE: wait for initial focus node to get focused before we potentially isolate\n                  //  the subtrees with aria-hidden while focus is still in some other subtree and\n                  //  not yet in the trap, resulting in some browsers (e.g. Chrome) logging to the\n                  //  console that they, \"Blocked aria-hidden on an element because its descendant\n                  //  retained focus...\"\n                  _context.n = 1;\n                  return addListeners();\n                case 1:\n                  trap._setSubtreeIsolation(true);\n                  updateObservedNodes();\n                  onPostActivate === null || onPostActivate === void 0 || onPostActivate({\n                    trap: trap\n                  });\n                case 2:\n                  return _context.a(2);\n              }\n            }, _callee);\n          }));\n          return function finishActivation() {\n            return _ref6.apply(this, arguments);\n          };\n        }();\n        if (checkCanFocusTrap) {\n          checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n          return this;\n        }\n        finishActivation();\n      } catch (error) {\n        // If our activation throws an exception and the stack hasn't changed,\n        // we need to re-enable the prior trap's subtree isolation.\n        if (preexistingTrap === activeFocusTraps.getActiveTrap(trapStack) && revertState) {\n          var _preexistingTrap$_set2;\n          // [#1729] method MAY not exist if using `trapStack` option to share stack with older\n          //  versions of Focus-trap in the same DOM so use optional chaining here just in case\n          //  since this is a trap we may not have created from this instance of the library\n          (_preexistingTrap$_set2 = preexistingTrap._setSubtreeIsolation) === null || _preexistingTrap$_set2 === void 0 || _preexistingTrap$_set2.call(preexistingTrap, true);\n        }\n        throw error;\n      }\n      return this;\n    },\n    deactivate: function deactivate(deactivateOptions) {\n      if (!state.active) {\n        return this;\n      }\n      var options = _objectSpread2({\n        onDeactivate: config.onDeactivate,\n        onPostDeactivate: config.onPostDeactivate,\n        checkCanReturnFocus: config.checkCanReturnFocus\n      }, deactivateOptions);\n      clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n      state.delayInitialFocusTimer = undefined;\n\n      // Prior to removing this trap from the trapStack, we need to remove any applications of `inert`.\n      // This allows the next trap down to update its tabbable nodes properly.\n      //\n      // If this trap is not top of the stack, don't change any current isolation.\n      if (!state.paused) {\n        trap._setSubtreeIsolation(false);\n      }\n      state.alreadySilent.clear();\n      removeListeners();\n      state.active = false;\n      state.paused = false;\n      updateObservedNodes();\n      activeFocusTraps.deactivateTrap(trapStack, trap);\n      var onDeactivate = getOption(options, 'onDeactivate');\n      var onPostDeactivate = getOption(options, 'onPostDeactivate');\n      var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n      var returnFocus = getOption(options, 'returnFocus', 'returnFocusOnDeactivate');\n      onDeactivate === null || onDeactivate === void 0 || onDeactivate({\n        trap: trap\n      });\n      var finishDeactivation = function finishDeactivation() {\n        delay(function () {\n          if (returnFocus) {\n            _tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n          }\n          onPostDeactivate === null || onPostDeactivate === void 0 || onPostDeactivate({\n            trap: trap\n          });\n        });\n      };\n      if (returnFocus && checkCanReturnFocus) {\n        checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n        return this;\n      }\n      finishDeactivation();\n      return this;\n    },\n    pause: function pause(pauseOptions) {\n      if (!state.active) {\n        return this;\n      }\n      state.manuallyPaused = true;\n      return this._setPausedState(true, pauseOptions);\n    },\n    unpause: function unpause(unpauseOptions) {\n      if (!state.active) {\n        return this;\n      }\n      state.manuallyPaused = false;\n      if (trapStack[trapStack.length - 1] !== this) {\n        return this;\n      }\n      return this._setPausedState(false, unpauseOptions);\n    },\n    updateContainerElements: function updateContainerElements(containerElements) {\n      var elementsAsArray = [].concat(containerElements).filter(Boolean);\n      state.containers = elementsAsArray.map(function (element) {\n        return typeof element === 'string' ? doc.querySelector(element) : element;\n      });\n      if (config.isolateSubtrees) {\n        collectAdjacentElements(state.containers);\n      }\n      if (state.active) {\n        updateTabbableNodes();\n        if (!state.paused) {\n          trap._setSubtreeIsolation(true);\n        }\n      }\n      updateObservedNodes();\n      return this;\n    }\n  };\n  Object.defineProperties(trap, {\n    _isManuallyPaused: {\n      value: function value() {\n        return state.manuallyPaused;\n      }\n    },\n    _setPausedState: {\n      value: function value(paused, options) {\n        if (state.paused === paused) {\n          return this;\n        }\n        state.paused = paused;\n        if (paused) {\n          var onPause = getOption(options, 'onPause');\n          var onPostPause = getOption(options, 'onPostPause');\n          onPause === null || onPause === void 0 || onPause({\n            trap: trap\n          });\n          removeListeners();\n          trap._setSubtreeIsolation(false);\n          updateObservedNodes();\n          onPostPause === null || onPostPause === void 0 || onPostPause({\n            trap: trap\n          });\n        } else {\n          var onUnpause = getOption(options, 'onUnpause');\n          var onPostUnpause = getOption(options, 'onPostUnpause');\n          onUnpause === null || onUnpause === void 0 || onUnpause({\n            trap: trap\n          });\n          var finishUnpause = /*#__PURE__*/function () {\n            var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n              return _regenerator().w(function (_context2) {\n                while (1) switch (_context2.n) {\n                  case 0:\n                    updateTabbableNodes();\n\n                    // NOTE: wait for initial focus node to get focused before we potentially isolate\n                    //  the subtrees with aria-hidden while focus is still in some other subtree and\n                    //  not yet in the trap, resulting in some browsers (e.g. Chrome) logging to the\n                    //  console that they, \"Blocked aria-hidden on an element because its descendant\n                    //  retained focus...\"\n                    _context2.n = 1;\n                    return addListeners();\n                  case 1:\n                    trap._setSubtreeIsolation(true);\n                    updateObservedNodes();\n                    onPostUnpause === null || onPostUnpause === void 0 || onPostUnpause({\n                      trap: trap\n                    });\n                  case 2:\n                    return _context2.a(2);\n                }\n              }, _callee2);\n            }));\n            return function finishUnpause() {\n              return _ref7.apply(this, arguments);\n            };\n          }();\n          finishUnpause();\n        }\n        return this;\n      }\n    },\n    _setSubtreeIsolation: {\n      value: function value(isEnabled) {\n        if (config.isolateSubtrees) {\n          state.adjacentElements.forEach(function (el) {\n            var _el$getAttribute;\n            if (isEnabled) {\n              switch (config.isolateSubtrees) {\n                case 'aria-hidden':\n                  // check both attribute and property to ensure initial state is captured\n                  // correctly across different browsers and test environments (like JSDOM)\n                  if (el.ariaHidden === 'true' || ((_el$getAttribute = el.getAttribute('aria-hidden')) === null || _el$getAttribute === void 0 ? void 0 : _el$getAttribute.toLowerCase()) === 'true') {\n                    state.alreadySilent.add(el);\n                  }\n                  el.setAttribute('aria-hidden', 'true');\n                  break;\n                default:\n                  // check both attribute and property to ensure initial state is captured\n                  // correctly across different browsers and test environments (like JSDOM)\n                  if (el.inert || el.hasAttribute('inert')) {\n                    state.alreadySilent.add(el);\n                  }\n                  el.setAttribute('inert', true);\n                  break;\n              }\n            } else {\n              if (state.alreadySilent.has(el)) ; else {\n                switch (config.isolateSubtrees) {\n                  case 'aria-hidden':\n                    el.removeAttribute('aria-hidden');\n                    break;\n                  default:\n                    el.removeAttribute('inert');\n                    break;\n                }\n              }\n            }\n          });\n        }\n      }\n    }\n  });\n\n  // initialize container elements\n  trap.updateContainerElements(elements);\n  return trap;\n};\n\nexport { createFocusTrap };\n//# sourceMappingURL=focus-trap.esm.js.map\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _exec$, _exec;\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar React = require('react');\nvar _require = require('focus-trap'),\n  createFocusTrap = _require.createFocusTrap;\nvar _require2 = require('tabbable'),\n  isFocusable = _require2.isFocusable;\n\n/**\n * The major version of React currently running.\n * @type {number}\n */\nvar reactVerMajor = parseInt((_exec$ = (_exec = /^(\\d+)\\./.exec(React.version)) === null || _exec === void 0 ? void 0 : _exec[1]) !== null && _exec$ !== void 0 ? _exec$ : 0, 10);\n\n/**\n * @type {import('../index.d.ts').FocusTrap}\n */\nvar FocusTrap = /*#__PURE__*/function (_React$Component) {\n  function FocusTrap(props) {\n    var _this;\n    _classCallCheck(this, FocusTrap);\n    _this = _callSuper(this, FocusTrap, [props]);\n    /**\n     * Gets the node for the given option, which is expected to be an option that\n     *  can be either a DOM node, a string that is a selector to get a node, `false`\n     *  (if a node is explicitly NOT given), or a function that returns any of these\n     *  values.\n     * @param {string} optionName\n     * @returns {undefined | false | HTMLElement | SVGElement} Returns\n     *  `undefined` if the option is not specified; `false` if the option\n     *  resolved to `false` (node explicitly not given); otherwise, the resolved\n     *  DOM node.\n     * @throws {Error} If the option is set, not `false`, and is not, or does not\n     *  resolve to a node.\n     */\n    _defineProperty(_this, \"getNodeForOption\", function (optionName) {\n      var _this$internalOptions;\n      // use internal options first, falling back to original options\n      var optionValue = (_this$internalOptions = this.internalOptions[optionName]) !== null && _this$internalOptions !== void 0 ? _this$internalOptions : this.originalOptions[optionName];\n      if (typeof optionValue === 'function') {\n        for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          params[_key - 1] = arguments[_key];\n        }\n        optionValue = optionValue.apply(void 0, params);\n      }\n      if (optionValue === true) {\n        optionValue = undefined; // use default value\n      }\n      if (!optionValue) {\n        if (optionValue === undefined || optionValue === false) {\n          return optionValue;\n        }\n        // else, empty string (invalid), null (invalid), 0 (invalid)\n\n        throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n      }\n      var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n      if (typeof optionValue === 'string') {\n        var _this$getDocument;\n        node = (_this$getDocument = this.getDocument()) === null || _this$getDocument === void 0 ? void 0 : _this$getDocument.querySelector(optionValue); // resolve to node, or null if fails\n        if (!node) {\n          throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n        }\n      }\n      return node;\n    });\n    _this.handleDeactivate = _this.handleDeactivate.bind(_this);\n    _this.handlePostDeactivate = _this.handlePostDeactivate.bind(_this);\n    _this.handleClickOutsideDeactivates = _this.handleClickOutsideDeactivates.bind(_this);\n\n    // focus-trap options used internally when creating the trap\n    _this.internalOptions = {\n      // We need to hijack the returnFocusOnDeactivate option,\n      // because React can move focus into the element before we arrived at\n      // this lifecycle hook (e.g. with autoFocus inputs). So the component\n      // captures the previouslyFocusedElement in componentWillMount,\n      // then (optionally) returns focus to it in componentWillUnmount.\n      returnFocusOnDeactivate: false,\n      // the rest of these are also related to deactivation of the trap, and we\n      //  need to use them and control them as well\n      checkCanReturnFocus: null,\n      onDeactivate: _this.handleDeactivate,\n      onPostDeactivate: _this.handlePostDeactivate,\n      // we need to special-case this setting as well so that we can know if we should\n      //  NOT return focus if the trap gets auto-deactivated as the result of an\n      //  outside click (otherwise, we'll always think we should return focus because\n      //  of how we manage that flag internally here)\n      clickOutsideDeactivates: _this.handleClickOutsideDeactivates\n    };\n\n    // original options provided by the consumer\n    _this.originalOptions = {\n      // because of the above `internalOptions`, we maintain our own flag for\n      //  this option, and default it to `true` because that's focus-trap's default\n      returnFocusOnDeactivate: true,\n      // because of the above `internalOptions`, we keep these separate since\n      //  they're part of the deactivation process which we configure (internally) to\n      //  be shared between focus-trap and focus-trap-react\n      onDeactivate: null,\n      onPostDeactivate: null,\n      checkCanReturnFocus: null,\n      // the user's setting, defaulted to false since focus-trap defaults this to false\n      clickOutsideDeactivates: false\n    };\n    var focusTrapOptions = props.focusTrapOptions;\n    for (var optionName in focusTrapOptions) {\n      if (!Object.prototype.hasOwnProperty.call(focusTrapOptions, optionName)) {\n        continue;\n      }\n      if (optionName === 'returnFocusOnDeactivate' || optionName === 'onDeactivate' || optionName === 'onPostDeactivate' || optionName === 'checkCanReturnFocus' || optionName === 'clickOutsideDeactivates') {\n        _this.originalOptions[optionName] = focusTrapOptions[optionName];\n        continue; // exclude from internalOptions\n      }\n      _this.internalOptions[optionName] = focusTrapOptions[optionName];\n    }\n\n    // if set, `{ target: Node, allowDeactivation: boolean }` where `target` is the outside\n    //  node that was clicked, and `allowDeactivation` is the result of the consumer's\n    //  option (stored in `this.originalOptions.clickOutsideDeactivates`, which may be a\n    //  function) whether to allow or deny auto-deactivation on click on this outside node\n    _this.outsideClick = null;\n\n    // elements from which to create the focus trap on mount; if a child is used\n    //  instead of the `containerElements` prop, we'll get the child's related\n    //  element when the trap renders and then is declared 'mounted'\n    _this.focusTrapElements = props.containerElements || [];\n\n    // now we remember what the currently focused element is, not relying on focus-trap\n    _this.updatePreviousElement();\n    return _this;\n  }\n\n  /**\n   * Gets the configured document.\n   * @returns {Document|undefined} Configured document, falling back to the main\n   *  document, if it exists. During SSR, `undefined` is returned since the\n   *  document doesn't exist.\n   */\n  _inherits(FocusTrap, _React$Component);\n  return _createClass(FocusTrap, [{\n    key: \"getDocument\",\n    value: function getDocument() {\n      // SSR: careful to check if `document` exists before accessing it as a variable\n      return this.props.focusTrapOptions.document || (typeof document !== 'undefined' ? document : undefined);\n    }\n  }, {\n    key: \"getReturnFocusNode\",\n    value: function getReturnFocusNode() {\n      var node = this.getNodeForOption('setReturnFocus', this.previouslyFocusedElement);\n      return node ? node : node === false ? false : this.previouslyFocusedElement;\n    }\n\n    /** Update the previously focused element with the currently focused element. */\n  }, {\n    key: \"updatePreviousElement\",\n    value: function updatePreviousElement() {\n      var currentDocument = this.getDocument();\n      if (currentDocument) {\n        this.previouslyFocusedElement = currentDocument.activeElement;\n      }\n    }\n  }, {\n    key: \"deactivateTrap\",\n    value: function deactivateTrap() {\n      // NOTE: it's possible the focus trap has already been deactivated without our knowing it,\n      //  especially if the user set the `clickOutsideDeactivates: true` option on the trap,\n      //  and the mouse was clicked on some element outside the trap; at that point, focus-trap\n      //  will initiate its auto-deactivation process, which will call our own\n      //  handleDeactivate(), which will call into this method\n      if (!this.focusTrap || !this.focusTrap.active) {\n        return;\n      }\n      this.focusTrap.deactivate({\n        // NOTE: we never let the trap return the focus since we do that ourselves\n        returnFocus: false,\n        // we'll call this in our own post deactivate handler so make sure the trap doesn't\n        //  do it prematurely\n        checkCanReturnFocus: null,\n        // let it call the user's original deactivate handler, if any, instead of\n        //  our own which calls back into this function\n        onDeactivate: this.originalOptions.onDeactivate\n        // NOTE: for post deactivate, don't specify anything so that it calls the\n        //  onPostDeactivate handler specified on `this.internalOptions`\n        //  which will always be our own `handlePostDeactivate()` handler, which\n        //  will finish things off by calling the user's provided onPostDeactivate\n        //  handler, if any, at the right time\n        // onPostDeactivate: NOTHING\n      });\n    }\n  }, {\n    key: \"handleClickOutsideDeactivates\",\n    value: function handleClickOutsideDeactivates(event) {\n      // use consumer's option (or call their handler) as the permission or denial\n      var allowDeactivation = typeof this.originalOptions.clickOutsideDeactivates === 'function' ? this.originalOptions.clickOutsideDeactivates.call(null, event) // call out of context\n      : this.originalOptions.clickOutsideDeactivates; // boolean\n\n      if (allowDeactivation) {\n        // capture the outside target that was clicked so we can use it in the deactivation\n        //  process since the consumer allowed it to cause auto-deactivation\n        this.outsideClick = {\n          target: event.target,\n          allowDeactivation: allowDeactivation\n        };\n      }\n      return allowDeactivation;\n    }\n  }, {\n    key: \"handleDeactivate\",\n    value: function handleDeactivate() {\n      if (this.originalOptions.onDeactivate) {\n        this.originalOptions.onDeactivate.call(null); // call user's handler out of context\n      }\n      this.deactivateTrap();\n    }\n  }, {\n    key: \"handlePostDeactivate\",\n    value: function handlePostDeactivate() {\n      var _this2 = this;\n      var finishDeactivation = function finishDeactivation() {\n        var returnFocusNode = _this2.getReturnFocusNode();\n        var canReturnFocus = !!(\n        // did the consumer allow it?\n\n        _this2.originalOptions.returnFocusOnDeactivate && // can we actually focus the node?\n        returnFocusNode !== null && returnFocusNode !== void 0 && returnFocusNode.focus && (\n        // was there an outside click that allowed deactivation?\n        !_this2.outsideClick ||\n        // did the consumer allow deactivation when the outside node was clicked?\n        _this2.outsideClick.allowDeactivation &&\n        // is the outside node NOT focusable (implying that it did NOT receive focus\n        //  as a result of the click-through) -- in which case do NOT restore focus\n        //  to `returnFocusNode` because focus should remain on the outside node\n        !isFocusable(_this2.outsideClick.target, _this2.internalOptions.tabbableOptions))\n\n        // if no, the restore focus to `returnFocusNode` at this point\n        );\n        var _this2$internalOption = _this2.internalOptions.preventScroll,\n          preventScroll = _this2$internalOption === void 0 ? false : _this2$internalOption;\n        if (canReturnFocus) {\n          // return focus to the element that had focus when the trap was activated\n          returnFocusNode.focus({\n            preventScroll: preventScroll\n          });\n        }\n        if (_this2.originalOptions.onPostDeactivate) {\n          _this2.originalOptions.onPostDeactivate.call(null); // don't call it in context of \"this\"\n        }\n        _this2.outsideClick = null; // reset: no longer needed\n      };\n      if (this.originalOptions.checkCanReturnFocus) {\n        this.originalOptions.checkCanReturnFocus.call(null, this.getReturnFocusNode()) // call out of context\n        .then(finishDeactivation, finishDeactivation);\n      } else {\n        finishDeactivation();\n      }\n    }\n  }, {\n    key: \"setupFocusTrap\",\n    value: function setupFocusTrap() {\n      if (this.focusTrap) {\n        // trap already exists: it's possible we're in StrictMode and we're being remounted,\n        //  in which case, we will have deactivated the trap when we got unmounted (remember,\n        //  StrictMode, in development, purposely unmounts and remounts components after\n        //  mounting them the first time to make sure they have reusable state,\n        //  @see https://reactjs.org/docs/strict-mode.html#ensuring-reusable-state) so now\n        //  we need to restore the state of the trap according to our component state\n        // NOTE: Strict mode __violates__ assumptions about the `componentWillUnmount()` API\n        //  which clearly states -- even for React 18 -- that, \"Once a component instance is\n        //  unmounted, __it will never be mounted again.__\" (emphasis ours). So when we get\n        //  unmounted, we assume we're gone forever and we deactivate the trap. But then\n        //  we get remounted and we're supposed to restore state. But if you had paused,\n        //  we've now deactivated (we don't know we're amount to get remounted again)\n        //  which means we need to reactivate and then pause. Otherwise, do nothing.\n        if (this.props.active && !this.focusTrap.active) {\n          this.focusTrap.activate();\n          if (this.props.paused) {\n            this.focusTrap.pause();\n          }\n        }\n      } else {\n        var nodesExist = this.focusTrapElements.some(Boolean);\n        if (nodesExist) {\n          this.focusTrap = this.props._createFocusTrap(this.focusTrapElements, this.internalOptions);\n          if (this.props.active) {\n            this.focusTrap.activate();\n          }\n          if (this.props.paused) {\n            this.focusTrap.pause();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (this.props.active) {\n        this.setupFocusTrap();\n      }\n      // else, wait for later activation in case the `focusTrapOptions` will be updated\n      //  again before the trap is activated (e.g. if waiting to know what the document\n      //  object will be, so the Trap must be rendered, but the consumer is waiting to\n      //  activate until they have obtained the document from a ref)\n      //  @see https://github.com/focus-trap/focus-trap-react/issues/539\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (this.focusTrap) {\n        if (prevProps.containerElements !== this.props.containerElements) {\n          this.focusTrap.updateContainerElements(this.props.containerElements);\n        }\n        var hasActivated = !prevProps.active && this.props.active;\n        var hasDeactivated = prevProps.active && !this.props.active;\n        var hasPaused = !prevProps.paused && this.props.paused;\n        var hasUnpaused = prevProps.paused && !this.props.paused;\n        if (hasActivated) {\n          this.updatePreviousElement();\n          this.focusTrap.activate();\n        }\n        if (hasDeactivated) {\n          this.deactivateTrap();\n          return; // un/pause does nothing on an inactive trap\n        }\n        if (hasPaused) {\n          this.focusTrap.pause();\n        }\n        if (hasUnpaused) {\n          this.focusTrap.unpause();\n        }\n      } else {\n        // NOTE: if we're in `componentDidUpdate` and we don't have a trap yet,\n        //  it either means it shouldn't be active, or it should be but none of\n        //  of given `containerElements` were present in the DOM the last time\n        //  we tried to create the trap\n\n        if (prevProps.containerElements !== this.props.containerElements) {\n          this.focusTrapElements = this.props.containerElements;\n        }\n\n        // don't create the trap unless it should be active in case the consumer\n        //  is still updating `focusTrapOptions`\n        //  @see https://github.com/focus-trap/focus-trap-react/issues/539\n        if (this.props.active) {\n          this.updatePreviousElement();\n          this.setupFocusTrap();\n        }\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.deactivateTrap();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this3 = this;\n      var child = this.props.children ? React.Children.only(this.props.children) : undefined;\n      if (child) {\n        if (child.type && child.type === React.Fragment) {\n          throw new Error('A focus-trap cannot use a Fragment as its child container. Try replacing it with a <div> element.');\n        }\n        var callbackRef = function callbackRef(element) {\n          var containerElements = _this3.props.containerElements;\n          if (child) {\n            // React 19 moved the `ref` to an official prop\n            if (reactVerMajor >= 19) {\n              if (typeof child.props.ref === 'function') {\n                child.props.ref(element);\n              } else if (child.props.ref) {\n                child.props.ref.current = element;\n              }\n            } else {\n              // older versions of React had the `ref` separate from props (still works in R19\n              //  but results in a deprecation warning in Dev builds)\n              if (typeof child.ref === 'function') {\n                child.ref(element);\n              } else if (child.ref) {\n                child.ref.current = element;\n              }\n            }\n          }\n          _this3.focusTrapElements = containerElements ? containerElements : [element];\n        };\n        var childWithRef = React.cloneElement(child, {\n          ref: callbackRef\n        });\n        return childWithRef;\n      }\n      return null;\n    }\n  }]);\n}(React.Component); // NOTE: While React 19 REMOVED support for `propTypes`, support for `defaultProps`\n//  __for class components ONLY__ remains: \"Class components will continue to support\n//  defaultProps since there is no ES6 alternative.\"\n//  @see https://react.dev/blog/2024/04/25/react-19-upgrade-guide#removed-proptypes-and-defaultprops\nFocusTrap.defaultProps = {\n  active: true,\n  paused: false,\n  focusTrapOptions: {},\n  _createFocusTrap: createFocusTrap\n};\n\n// 🔺 DEPRECATED: default export\nmodule.exports = FocusTrap;\n\n// named export\nmodule.exports.FocusTrap = FocusTrap;","import FocusTrap from \"focus-trap-react\";\nimport { motion } from \"framer-motion\";\nimport type { ReactNode } from \"react\";\nimport { STAGE_SPRING } from \"../constants\";\n\ninterface StageProps {\n  isMobile: boolean;\n  width: number;\n  height: number;\n  titleId?: string;\n  /** Called when the user dismisses via Escape, click outside, or focus escape */\n  onDismiss: () => void;\n  children: ReactNode;\n}\n\n/**\n * The opened widget shell. Shares `layoutId=\"widget-stage\"` with `<Trigger />`\n * so framer-motion morphs from trigger to modal continuously. Tagged with\n * dialog semantics for AT users and wrapped in a focus trap so Tab can't\n * escape the widget into the host page.\n *\n * The internals are passed in by the orchestrator — Stage owns size/shape only.\n */\nexport function Stage({ isMobile, width, height, titleId, onDismiss, children }: StageProps) {\n  const sizing = isMobile ? { width: \"100%\", height: \"100%\", borderRadius: 0 } : { width, height, borderRadius: 18 };\n\n  return (\n    <FocusTrap\n      focusTrapOptions={{\n        // Soft return: focus restoration is handled in the orchestrator's\n        // close-effect so we can choose between the trigger and the user's\n        // pre-open active element.\n        returnFocusOnDeactivate: false,\n        // Escape closes the modal — *unless* the chat textarea is focused.\n        // In that case the user is mid-typing and likely just wants to\n        // unfocus / clear; ending the conversation would be destructive.\n        escapeDeactivates: (event: KeyboardEvent) => {\n          const active = document.activeElement;\n          if (active instanceof HTMLTextAreaElement && active.classList.contains(\"vw-chat-input\")) {\n            // Blur the textarea so a second Escape (now hitting the modal\n            // root) does close, matching standard dialog conventions.\n            active.blur();\n            event.preventDefault();\n            return false;\n          }\n          return true;\n        },\n        onDeactivate: onDismiss,\n        // Allow the click on the trigger that closes the modal to land\n        // (otherwise focus-trap intercepts pointer events outside the modal).\n        clickOutsideDeactivates: true,\n        allowOutsideClick: true,\n        // Some screens (rating, error) initially have no focusable child. Fall\n        // back to the modal container so the trap can still mount.\n        initialFocus: \".vw-stage\",\n        fallbackFocus: \".vw-stage\",\n      }}\n    >\n      <motion.div\n        aria-labelledby={titleId}\n        aria-modal=\"true\"\n        className=\"vw-stage\"\n        data-mobile={isMobile ? \"true\" : \"false\"}\n        // Desktop: share `layoutId` with the Trigger so framer morphs between\n        // the closed pill and the open modal. Mobile: skip the layoutId so\n        // framer doesn't track layout — the modal is fullscreen anyway, and\n        // any size change (e.g., iOS keyboard shrinking `100dvh`) would\n        // otherwise re-trigger a spring animation that reads as a bounce.\n        layout={false}\n        layoutId={isMobile ? undefined : \"widget-stage\"}\n        role=\"dialog\"\n        style={sizing}\n        tabIndex={-1}\n        transition={STAGE_SPRING}\n      >\n        {children}\n      </motion.div>\n    </FocusTrap>\n  );\n}\n","import { motion } from \"framer-motion\";\nimport type { TriggerVariant } from \"../constants\";\nimport { DEFAULT_PRIMARY_COLOR, STAGE_SPRING } from \"../constants\";\nimport { useTranslations } from \"../i18n/I18nContext\";\nimport { selectChatbotLogo } from \"../utils/chatbot-logo\";\nimport { getContrastTextColor } from \"../utils/color\";\n\ninterface TriggerProps {\n  variant: TriggerVariant;\n  primaryColor: string | null;\n  cta?: string;\n  /** Custom logo URL rendered inside the badge variant. Falls back to the auto-selected chatbot avatar when null. */\n  pillLogo?: string | null;\n  /** When true, renders a small red \"1\" notification badge on the top-right of the trigger. Pure marketing nudge — not tied to real unread state. */\n  showNotification?: boolean;\n  /** Whether the widget is rendering on a mobile viewport. When true, the trigger drops its shared `layoutId` so framer-motion doesn't try to morph into a fullscreen modal (which would re-trigger the morph on every focus-induced viewport shift). */\n  isMobile?: boolean;\n  onClick: () => void;\n}\n\n/** Inner-content fade: the modal→trigger morph completes via framer's\n *  layoutId, and only then does the trigger's label/logo fade in on top. */\nconst CONTENT_FADE = {\n  initial: { opacity: 0 },\n  animate: { opacity: 1 },\n  exit: { opacity: 0 },\n  transition: { duration: 0.22, delay: 0.12 },\n};\n\n/**\n * Closed-state widget. Shares `layoutId=\"widget-stage\"` with `<Stage />` so\n * framer-motion morphs the bounding box / border-radius continuously between\n * the two when the open state toggles.\n *\n * Variants:\n *   - \"bar\": rounded pill with the chatbot avatar + a single-line CTA (uses `cta`).\n *   - \"badge\": same shape language as the bar but icon-only (no label).\n *\n * The badge variant carries an asymmetric top-right corner (0.25em) as the\n * brand mark; the bar variant stays a fully-rounded pill.\n */\nexport function Trigger({ variant, primaryColor, cta, pillLogo, showNotification, isMobile = false, onClick }: TriggerProps) {\n  const t = useTranslations();\n  const resolvedPrimary = primaryColor || DEFAULT_PRIMARY_COLOR;\n  const fg = getContrastTextColor(resolvedPrimary);\n  const label = cta ?? t.collapsed.cta;\n\n  // Border-radius lives in `widget.css` keyed on `[data-variant=…]` so the\n  // visible bg-colored container (this button) owns the corner shape.\n  const triggerLogo = pillLogo ?? selectChatbotLogo(resolvedPrimary);\n\n  return (\n    <motion.button\n      aria-label={t.floatingButton.ariaLabel}\n      className=\"vw-trigger\"\n      data-variant={variant}\n      layoutId={isMobile ? undefined : \"widget-stage\"}\n      onClick={onClick}\n      // Background + corner shape live in CSS so they can read\n      // --voice-widget-primary and the data-variant attribute. Only the\n      // per-render foreground colour stays inline.\n      style={{ color: fg, \"--vw-trigger-fg\": fg } as React.CSSProperties}\n      transition={STAGE_SPRING}\n      type=\"button\"\n      whileHover={{ scale: 1.02 }}\n    >\n      <motion.span className=\"vw-trigger-content\" {...CONTENT_FADE}>\n        <img alt=\"\" className=\"vw-trigger-logo\" src={triggerLogo} />\n        {variant === \"bar\" ? <span className=\"vw-trigger-label\">{label}</span> : null}\n      </motion.span>\n      {showNotification ? (\n        <span aria-hidden=\"true\" className=\"vw-trigger-notification\">\n          1\n        </span>\n      ) : null}\n    </motion.button>\n  );\n}\n","/**\n * Decide whether to render text as light or dark on a given hex background,\n * using the WCAG relative-luminance formula. Threshold tuned at 0.4 so that\n * mid-tone primary colors (typical brand palettes) bias toward white text.\n */\nexport function getContrastTextColor(hex: string): string {\n  let raw = hex.replace(\"#\", \"\");\n  if (raw.length === 3) {\n    raw = raw[0] + raw[0] + raw[1] + raw[1] + raw[2] + raw[2];\n  }\n  if (raw.length !== 6) return \"#ffffff\";\n  const r = Number.parseInt(raw.substring(0, 2), 16) / 255;\n  const g = Number.parseInt(raw.substring(2, 4), 16) / 255;\n  const b = Number.parseInt(raw.substring(4, 6), 16) / 255;\n\n  const toLinear = (c: number) => (c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);\n  const luminance = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n\n  return luminance > 0.4 ? \"#1a1a1a\" : \"#ffffff\";\n}\n\n/** Convert \"#RRGGBB\" or \"#RGB\" to [r,g,b] floats in [0,1]. Returns [1,1,1] on parse failure. */\nexport function hexToRgbFloat(hex: string): [number, number, number] {\n  let raw = hex.replace(\"#\", \"\");\n  if (raw.length === 3) {\n    raw = raw[0] + raw[0] + raw[1] + raw[1] + raw[2] + raw[2];\n  }\n  if (raw.length !== 6) return [1, 1, 1];\n  const r = Number.parseInt(raw.substring(0, 2), 16) / 255;\n  const g = Number.parseInt(raw.substring(2, 4), 16) / 255;\n  const b = Number.parseInt(raw.substring(4, 6), 16) / 255;\n  return [r, g, b];\n}\n","import { type AgentState, useMultibandTrackVolume } from \"@livekit/components-react\";\nimport type { LocalAudioTrack, RemoteAudioTrack } from \"livekit-client\";\nimport { type CSSProperties, useMemo } from \"react\";\n\n/* Geometry of the circular dot field. The disc is GRID_SIZE × GRID_SIZE\n * cells; we keep only those whose centre-distance is ≤ RADIUS, producing\n * a visually circular cluster. CELL_PX + GAP_PX define cell pitch.\n *\n * GRID_SIZE = 11 with RADIUS = 5 yields ~89 dots in a clean disc.\n */\nconst GRID_SIZE = 11;\nconst RADIUS = 5;\nconst CELL_PX = 6;\nconst GAP_PX = 6;\nconst ANIM_INTERVAL_MS = 90;\n\n/** Number of frequency bands → must match the disc's column count to feed\n * one band per visible column. The disc is GRID_SIZE columns wide. */\nconst BAND_COUNT = GRID_SIZE;\n\ninterface DotPosition {\n  /** Grid column 0..GRID_SIZE-1 (left → right). */\n  x: number;\n  /** Grid row 0..GRID_SIZE-1 (top → bottom). */\n  y: number;\n  /** Signed offset from centre, in grid units. Used by patterns. */\n  dx: number;\n  dy: number;\n  /** Euclidean distance from centre, in grid units. */\n  dist: number;\n  /** Angle from centre, [0, 2π) — used for the connecting \"spinner\". */\n  angle: number;\n}\n\n/** Build the static set of dot positions inside the circular mask. */\nfunction buildDots(): DotPosition[] {\n  const cx = (GRID_SIZE - 1) / 2;\n  const cy = (GRID_SIZE - 1) / 2;\n  const dots: DotPosition[] = [];\n  for (let y = 0; y < GRID_SIZE; y++) {\n    for (let x = 0; x < GRID_SIZE; x++) {\n      const dx = x - cx;\n      const dy = y - cy;\n      const dist = Math.sqrt(dx * dx + dy * dy);\n      if (dist > RADIUS + 0.001) continue;\n      const angle = Math.atan2(dy, dx); // (-π, π]\n      const norm = angle < 0 ? angle + Math.PI * 2 : angle;\n      dots.push({ x, y, dx, dy, dist, angle: norm });\n    }\n  }\n  return dots;\n}\n\ninterface AgentGridVisualizerProps {\n  state: AgentState | \"connecting\" | \"disconnected\";\n  audioTrack?: LocalAudioTrack | RemoteAudioTrack | null;\n  /** Hex color, e.g. \"#5048e5\" */\n  primaryColor: string;\n}\n\n/**\n * Circular dot-disc visualizer that responds to agent state:\n *\n *   - **listening** — centre dot pulses (slow heartbeat).\n *   - **thinking** — a soft ripple expands from centre outward, repeating.\n *   - **connecting** / **initializing** — a comet-like sweep travels around\n *     the disc's outer ring.\n *   - **speaking** — true mirrored waveform across the disc: each grid\n *     column has a frequency band amplitude; dots in that column light up\n *     when their vertical distance from centre is **within** the band's\n *     amplitude. So louder audio fills more rows around the centre, and\n *     the disc looks like a horizontally-scrolling waveform clipped to a\n *     circle.\n *   - **disconnected** / fallback — just the centre dot.\n */\nexport function AgentGridVisualizer({ state, audioTrack, primaryColor }: AgentGridVisualizerProps) {\n  const dots = useMemo(buildDots, []);\n\n  const volumeBands = useMultibandTrackVolume(audioTrack ?? undefined, {\n    bands: BAND_COUNT,\n    loPass: 100,\n    hiPass: 200,\n  });\n\n  // Time tick for the non-speaking animation patterns. Re-renders every\n  // ANIM_INTERVAL_MS while the agent is in a state that needs animation;\n  // stops when speaking (volume drives that frame instead) or idle.\n  const tick = useAnimationTick(state);\n\n  const containerStyle: CSSProperties = {\n    display: \"grid\",\n    gridTemplateColumns: `repeat(${GRID_SIZE}, ${CELL_PX}px)`,\n    gridTemplateRows: `repeat(${GRID_SIZE}, ${CELL_PX}px)`,\n    gap: `${GAP_PX}px`,\n    color: primaryColor,\n  };\n\n  return (\n    <div aria-hidden=\"true\" className=\"vw-grid-viz\" data-lk-state={state} style={containerStyle}>\n      {Array.from({ length: GRID_SIZE * GRID_SIZE }, (_, idx) => {\n        const x = idx % GRID_SIZE;\n        const y = Math.floor(idx / GRID_SIZE);\n        const dot = dots.find((d) => d.x === x && d.y === y);\n        if (!dot) {\n          // Empty grid slot outside the disc — render an invisible spacer\n          // so the CSS grid keeps its rectangular footprint.\n          return <div className=\"vw-grid-cell vw-grid-cell-empty\" key={idx} />;\n        }\n        const isHighlighted = isCellHighlighted({ state, dot, tick, volumeBands });\n        const transitionMs = isHighlighted ? ANIM_INTERVAL_MS : ANIM_INTERVAL_MS * 4;\n        return <div className=\"vw-grid-cell\" data-lk-highlighted={isHighlighted} key={idx} style={{ transitionDuration: `${transitionMs}ms` }} />;\n      })}\n    </div>\n  );\n}\n\n/* ─── Animation patterns ─────────────────────────────────────────────── */\n\nimport { useEffect, useState } from \"react\";\n\n/** Frame counter that re-renders every ANIM_INTERVAL_MS. Stops while\n *  speaking (volume is the source of truth) and while disconnected. */\nfunction useAnimationTick(state: AgentState | \"connecting\" | \"disconnected\"): number {\n  const [tick, setTick] = useState(0);\n  useEffect(() => {\n    if (state === \"speaking\" || state === \"disconnected\") return;\n    const id = setInterval(() => setTick((t) => t + 1), ANIM_INTERVAL_MS);\n    return () => clearInterval(id);\n  }, [state]);\n  return tick;\n}\n\nfunction isCellHighlighted({\n  state,\n  dot,\n  tick,\n  volumeBands,\n}: {\n  state: AgentState | \"connecting\" | \"disconnected\";\n  dot: DotPosition;\n  tick: number;\n  volumeBands: number[];\n}): boolean {\n  switch (state) {\n    case \"speaking\":\n      return isSpeakingHighlight(dot, volumeBands);\n    case \"thinking\":\n      return isThinkingHighlight(dot, tick);\n    case \"connecting\":\n    case \"initializing\":\n      return isConnectingHighlight(dot, tick);\n    case \"listening\":\n      return isListeningHighlight(dot, tick);\n    default:\n      // disconnected / fallback: only the centre dot\n      return dot.dx === 0 && dot.dy === 0;\n  }\n}\n\n/* SPEAKING — mirrored waveform across the disc.\n *\n * Each grid column gets one frequency band's amplitude. A dot lights up\n * iff |dy| ≤ amp * RADIUS — i.e. the louder the band, the more rows light\n * up symmetrically above and below the centre row in that column. With\n * BAND_COUNT === GRID_SIZE we get a clean column-per-band mapping that\n * forms a horizontal waveform shape clipped to the circular mask.\n *\n * A small floor (0.06) ensures even silent columns show their centre dot\n * so the disc never goes fully dark mid-utterance during pauses. */\nfunction isSpeakingHighlight(dot: DotPosition, volumeBands: number[]): boolean {\n  const amp = Math.max(volumeBands[dot.x] ?? 0, 0.06);\n  // Map amp ∈ [0, 1] to a half-height in grid rows.\n  const halfHeight = amp * RADIUS;\n  return Math.abs(dot.dy) <= halfHeight;\n}\n\n/* LISTENING — calm heartbeat. Centre dot blinks every ~9 frames (~810ms)\n * for a single frame, then off. Quiet, unobtrusive. */\nfunction isListeningHighlight(dot: DotPosition, tick: number): boolean {\n  if (dot.dx !== 0 || dot.dy !== 0) return false;\n  return tick % 9 === 0;\n}\n\n/* THINKING — concentric ripple expanding from centre. Highlight the ring\n * at radius ≈ phase, where phase walks 0 → RADIUS and wraps. Half-unit\n * tolerance means each ring lights up cleanly without seams. */\nfunction isThinkingHighlight(dot: DotPosition, tick: number): boolean {\n  // 8 frames per ring step → ~720ms per full ripple cycle.\n  const phase = (tick / 2) % (RADIUS + 1);\n  return Math.abs(dot.dist - phase) < 0.7;\n}\n\n/* CONNECTING — comet on the outer ring. Two dots near the leading edge\n * light up; trail fades implicitly thanks to the slow opacity transition. */\nfunction isConnectingHighlight(dot: DotPosition, tick: number): boolean {\n  // Only outermost ring participates.\n  if (dot.dist < RADIUS - 0.6) return false;\n  // 24 steps for a full revolution → ~2.16s per loop.\n  const totalSteps = 24;\n  const phase = (tick % totalSteps) / totalSteps; // [0, 1)\n  const targetAngle = phase * Math.PI * 2;\n  // Shortest angular distance dot ↔ target.\n  let delta = Math.abs(dot.angle - targetAngle);\n  if (delta > Math.PI) delta = Math.PI * 2 - delta;\n  // Light up dots within ~30° of the target — gives a small \"head\" cluster.\n  return delta < 0.55;\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __pow = Math.pow;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __async = (__this, __arguments, generator) => {\n  return new Promise((resolve, reject) => {\n    var fulfilled = (value) => {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n    step((generator = generator.apply(__this, __arguments)).next());\n  });\n};\n\n// core/index.tsx\nimport React, { Component } from \"react\";\n\n// core/logging.ts\nvar RSLOG = (text) => `react-shaders: ${text}`;\n\n// core/texture.ts\nvar NearestFilter = 9728;\nvar LinearFilter = 9729;\nvar NearestMipMapNearestFilter = 9984;\nvar LinearMipMapNearestFilter = 9985;\nvar NearestMipMapLinearFilter = 9986;\nvar LinearMipMapLinearFilter = 9987;\nvar ClampToEdgeWrapping = 33071;\nvar MirroredRepeatWrapping = 33648;\nvar RepeatWrapping = 10497;\nvar isPowerOf2 = (value) => (value & value - 1) == 0;\nvar floorPowerOfTwo = (value) => __pow(2, Math.floor(Math.log(value) / Math.LN2));\nvar textureNeedsGenerateMipmaps = (texture, isPowerOfTwo) => isPowerOfTwo && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\nvar textureNeedsPowerOfTwo = (texture) => {\n  if (texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping)\n    return true;\n  if (texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter)\n    return true;\n  return false;\n};\nvar Texture = class {\n  constructor(gl) {\n    this.isLoaded = false;\n    this.isVideo = false;\n    this.flipY = -1;\n    this.width = 0;\n    this.height = 0;\n    this._webglTexture = null;\n    this.updateTexture = (texture, video, flipY) => {\n      const { gl } = this;\n      const level = 0;\n      const internalFormat = gl.RGBA;\n      const srcFormat = gl.RGBA;\n      const srcType = gl.UNSIGNED_BYTE;\n      gl.bindTexture(gl.TEXTURE_2D, texture);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        level,\n        internalFormat,\n        srcFormat,\n        srcType,\n        video\n      );\n    };\n    this.setupVideo = (url) => {\n      const video = document.createElement(\"video\");\n      let playing = false;\n      let timeupdate = false;\n      video.autoplay = true;\n      video.muted = true;\n      video.loop = true;\n      video.crossOrigin = \"anonymous\";\n      const checkReady = () => {\n        if (playing && timeupdate) {\n          this.isLoaded = true;\n        }\n      };\n      video.addEventListener(\n        \"playing\",\n        () => {\n          playing = true;\n          this.width = video.videoWidth || 0;\n          this.height = video.videoHeight || 0;\n          checkReady();\n        },\n        true\n      );\n      video.addEventListener(\n        \"timeupdate\",\n        () => {\n          timeupdate = true;\n          checkReady();\n        },\n        true\n      );\n      video.src = url;\n      return video;\n    };\n    this.makePowerOfTwo = (image) => {\n      if (image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap) {\n        if (this.pow2canvas === void 0)\n          this.pow2canvas = document.createElement(\"canvas\");\n        this.pow2canvas.width = floorPowerOfTwo(image.width);\n        this.pow2canvas.height = floorPowerOfTwo(image.height);\n        const context = this.pow2canvas.getContext(\"2d\");\n        context == null ? void 0 : context.drawImage(\n          image,\n          0,\n          0,\n          this.pow2canvas.width,\n          this.pow2canvas.height\n        );\n        console.warn(\n          RSLOG(\n            `Image is not power of two ${image.width} x ${image.height}. Resized to ${this.pow2canvas.width} x ${this.pow2canvas.height};`\n          )\n        );\n        return this.pow2canvas;\n      }\n      return image;\n    };\n    this.load = (textureArgs) => __async(this, null, function* () {\n      const { gl } = this;\n      const {\n        url,\n        wrapS,\n        wrapT,\n        minFilter,\n        magFilter,\n        flipY = -1\n      } = textureArgs;\n      if (!url) {\n        return Promise.reject(\n          new Error(\n            RSLOG(\n              \"Missing url, please make sure to pass the url of your texture { url: ... }\"\n            )\n          )\n        );\n      }\n      const isImage = /(\\.jpg|\\.jpeg|\\.png|\\.gif|\\.bmp)$/i.exec(url);\n      const isVideo = /(\\.mp4|\\.3gp|\\.webm|\\.ogv)$/i.exec(url);\n      if (isImage === null && isVideo === null) {\n        return Promise.reject(\n          new Error(\n            RSLOG(\n              `Please upload a video or an image with a valid format (url: ${url})`\n            )\n          )\n        );\n      }\n      Object.assign(this, {\n        url,\n        wrapS,\n        wrapT,\n        minFilter,\n        magFilter,\n        flipY\n      });\n      const level = 0;\n      const internalFormat = gl.RGBA;\n      const width = 1;\n      const height = 1;\n      const border = 0;\n      const srcFormat = gl.RGBA;\n      const srcType = gl.UNSIGNED_BYTE;\n      const pixel = new Uint8Array([255, 255, 255, 0]);\n      const texture = gl.createTexture();\n      gl.bindTexture(gl.TEXTURE_2D, texture);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        level,\n        internalFormat,\n        width,\n        height,\n        border,\n        srcFormat,\n        srcType,\n        pixel\n      );\n      if (isVideo) {\n        const video = this.setupVideo(url);\n        gl.texParameteri(\n          gl.TEXTURE_2D,\n          gl.TEXTURE_WRAP_S,\n          gl.CLAMP_TO_EDGE\n        );\n        gl.texParameteri(\n          gl.TEXTURE_2D,\n          gl.TEXTURE_WRAP_T,\n          gl.CLAMP_TO_EDGE\n        );\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n        this._webglTexture = texture;\n        this.source = video;\n        this.isVideo = true;\n        return video.play().then(() => this);\n      }\n      function loadImage() {\n        return __async(this, null, function* () {\n          return new Promise((resolve, reject) => {\n            const image2 = new Image();\n            image2.crossOrigin = \"anonymous\";\n            image2.onload = () => {\n              resolve(image2);\n            };\n            image2.onerror = () => {\n              reject(new Error(RSLOG(`failed loading url: ${url}`)));\n            };\n            image2.src = url != null ? url : \"\";\n          });\n        });\n      }\n      let image = yield loadImage();\n      let isPowerOfTwoImage = isPowerOf2(image.width) && isPowerOf2(image.height);\n      if (textureNeedsPowerOfTwo(textureArgs) && !isPowerOfTwoImage) {\n        image = this.makePowerOfTwo(image);\n        isPowerOfTwoImage = true;\n      }\n      gl.bindTexture(gl.TEXTURE_2D, texture);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        level,\n        internalFormat,\n        srcFormat,\n        srcType,\n        image\n      );\n      if (textureNeedsGenerateMipmaps(textureArgs, isPowerOfTwoImage)) {\n        gl.generateMipmap(gl.TEXTURE_2D);\n      }\n      gl.texParameteri(\n        gl.TEXTURE_2D,\n        gl.TEXTURE_WRAP_S,\n        this.wrapS || RepeatWrapping\n      );\n      gl.texParameteri(\n        gl.TEXTURE_2D,\n        gl.TEXTURE_WRAP_T,\n        this.wrapT || RepeatWrapping\n      );\n      gl.texParameteri(\n        gl.TEXTURE_2D,\n        gl.TEXTURE_MIN_FILTER,\n        this.minFilter || LinearMipMapLinearFilter\n      );\n      gl.texParameteri(\n        gl.TEXTURE_2D,\n        gl.TEXTURE_MAG_FILTER,\n        this.magFilter || LinearFilter\n      );\n      this._webglTexture = texture;\n      this.source = image;\n      this.isVideo = false;\n      this.isLoaded = true;\n      this.width = image.width || 0;\n      this.height = image.height || 0;\n      return this;\n    });\n    this.gl = gl;\n  }\n};\n\n// core/uniforms.ts\nvar processUniform = (gl, location, t, value) => {\n  switch (t) {\n    case \"1f\":\n      gl.uniform1f(location, value);\n      break;\n    case \"2f\":\n      gl.uniform2f(location, value[0], value[1]);\n      break;\n    case \"3f\":\n      gl.uniform3f(location, value[0], value[1], value[2]);\n      break;\n    case \"4f\":\n      gl.uniform4f(location, value[0], value[1], value[2], value[3]);\n      break;\n    case \"1i\":\n      gl.uniform1i(location, value);\n      break;\n    case \"2i\":\n      gl.uniform2i(location, value[0], value[1]);\n      break;\n    case \"3i\":\n      gl.uniform3i(location, value[0], value[1], value[2]);\n      break;\n    case \"4i\":\n      gl.uniform3i(location, value[0], value[1], value[2], value[3]);\n      break;\n    case \"1iv\":\n      gl.uniform1iv(location, value);\n      break;\n    case \"2iv\":\n      gl.uniform2iv(location, value);\n      break;\n    case \"3iv\":\n      gl.uniform3iv(location, value);\n      break;\n    case \"4iv\":\n      gl.uniform4iv(location, value);\n      break;\n    case \"1fv\":\n      gl.uniform1fv(location, value);\n      break;\n    case \"2fv\":\n      gl.uniform2fv(location, value);\n      break;\n    case \"3fv\":\n      gl.uniform3fv(location, value);\n      break;\n    case \"4fv\":\n      gl.uniform4fv(location, value);\n      break;\n    case \"Matrix2fv\":\n      gl.uniformMatrix2fv(location, false, value);\n      break;\n    case \"Matrix3fv\":\n      gl.uniformMatrix3fv(location, false, value);\n      break;\n    case \"Matrix4fv\":\n      gl.uniformMatrix4fv(location, false, value);\n      break;\n    default:\n      break;\n  }\n};\nvar uniformTypeToGLSLType = (t) => {\n  switch (t) {\n    case \"1f\":\n      return \"float\";\n    case \"2f\":\n      return \"vec2\";\n    case \"3f\":\n      return \"vec3\";\n    case \"4f\":\n      return \"vec4\";\n    case \"1i\":\n      return \"int\";\n    case \"2i\":\n      return \"ivec2\";\n    case \"3i\":\n      return \"ivec3\";\n    case \"4i\":\n      return \"ivec4\";\n    case \"1iv\":\n      return \"int\";\n    case \"2iv\":\n      return \"ivec2\";\n    case \"3iv\":\n      return \"ivec3\";\n    case \"4iv\":\n      return \"ivec4\";\n    case \"1fv\":\n      return \"float\";\n    case \"2fv\":\n      return \"vec2\";\n    case \"3fv\":\n      return \"vec3\";\n    case \"4fv\":\n      return \"vec4\";\n    case \"Matrix2fv\":\n      return \"mat2\";\n    case \"Matrix3fv\":\n      return \"mat3\";\n    case \"Matrix4fv\":\n      return \"mat4\";\n    default:\n      console.error(\n        RSLOG(\n          `The uniform type \"${t}\" is not valid, please make sure your uniform type is valid`\n        )\n      );\n  }\n};\n\n// core/index.tsx\nvar PRECISIONS = [\"lowp\", \"mediump\", \"highp\"];\nvar FS_MAIN_SHADER = `\nvoid main(void){\n    vec4 color = vec4(0.0,0.0,0.0,1.0);\n    mainImage( color, gl_FragCoord.xy );\n    gl_FragColor = color;\n}`;\nvar BASIC_FS = `void mainImage( out vec4 fragColor, in vec2 fragCoord ) {\n    vec2 uv = fragCoord/iResolution.xy;\n    vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4));\n    fragColor = vec4(col,1.0);\n}`;\nvar BASIC_VS = `attribute vec3 aVertexPosition;\nvoid main(void) {\n    gl_Position = vec4(aVertexPosition, 1.0);\n}`;\nvar UNIFORM_TIME = \"iTime\";\nvar UNIFORM_TIMEDELTA = \"iTimeDelta\";\nvar UNIFORM_DATE = \"iDate\";\nvar UNIFORM_FRAME = \"iFrame\";\nvar UNIFORM_MOUSE = \"iMouse\";\nvar UNIFORM_RESOLUTION = \"iResolution\";\nvar UNIFORM_CHANNEL = \"iChannel\";\nvar UNIFORM_CHANNELRESOLUTION = \"iChannelResolution\";\nvar UNIFORM_DEVICEORIENTATION = \"iDeviceOrientation\";\nvar latestPointerClientCoords = (e) => {\n  return [\n    // @ts-expect-error TODO: Deal with this.\n    e.clientX || e.changedTouches[0].clientX,\n    // @ts-expect-error TODO: Deal with this.\n    clientY = e.clientY || e.changedTouches[0].clientY\n  ];\n};\nvar lerpVal = (v0, v1, t) => v0 * (1 - t) + v1 * t;\nvar insertStringAtIndex = (currentString, string, index) => index > 0 ? currentString.substring(0, index) + string + currentString.substring(index, currentString.length) : string + currentString;\nvar Shader = class extends Component {\n  constructor(props) {\n    super(props);\n    this.componentDidMount = () => {\n      this.initWebGL();\n      const { fs, vs, clearColor = [0, 0, 0, 1] } = this.props;\n      const { gl } = this;\n      if (gl && this.canvas) {\n        gl.clearColor(...clearColor);\n        gl.clearDepth(1);\n        gl.enable(gl.DEPTH_TEST);\n        gl.depthFunc(gl.LEQUAL);\n        gl.viewport(0, 0, this.canvas.width, this.canvas.height);\n        this.canvas.height = this.canvas.clientHeight;\n        this.canvas.width = this.canvas.clientWidth;\n        this.processCustomUniforms();\n        this.processTextures();\n        const shaders = this.preProcessShaders(\n          fs || BASIC_FS,\n          vs || BASIC_VS\n        );\n        this.initShaders(shaders);\n        this.initBuffers();\n        this.drawScene();\n        this.addEventListeners();\n        this.onResize();\n      }\n    };\n    this.shouldComponentUpdate = () => false;\n    this.setupChannelRes = ({ width, height }, id) => {\n      const { devicePixelRatio = 1 } = this.props;\n      this.uniforms.iChannelResolution.value[id * 3] = width * devicePixelRatio;\n      this.uniforms.iChannelResolution.value[id * 3 + 1] = height * devicePixelRatio;\n      this.uniforms.iChannelResolution.value[id * 3 + 2] = 0;\n    };\n    this.initWebGL = () => {\n      var _a, _b;\n      const { contextAttributes } = this.props;\n      if (!this.canvas)\n        return;\n      this.gl = this.canvas.getContext(\"webgl\", contextAttributes) || this.canvas.getContext(\n        \"experimental-webgl\",\n        contextAttributes\n      );\n      (_a = this.gl) == null ? void 0 : _a.getExtension(\"OES_standard_derivatives\");\n      (_b = this.gl) == null ? void 0 : _b.getExtension(\"EXT_shader_texture_lod\");\n    };\n    this.initBuffers = () => {\n      var _a;\n      const { gl } = this;\n      this.squareVerticesBuffer = gl == null ? void 0 : gl.createBuffer();\n      gl == null ? void 0 : gl.bindBuffer(gl.ARRAY_BUFFER, (_a = this.squareVerticesBuffer) != null ? _a : null);\n      const vertices = [\n        1,\n        1,\n        0,\n        -1,\n        1,\n        0,\n        1,\n        -1,\n        0,\n        -1,\n        -1,\n        0\n      ];\n      gl == null ? void 0 : gl.bufferData(\n        gl.ARRAY_BUFFER,\n        new Float32Array(vertices),\n        gl.STATIC_DRAW\n      );\n    };\n    this.addEventListeners = () => {\n      var _a, _b;\n      const options = {\n        passive: true\n      };\n      if (((_a = this.uniforms.iMouse) == null ? void 0 : _a.isNeeded) && this.canvas) {\n        this.canvas.addEventListener(\"mousemove\", this.mouseMove, options);\n        this.canvas.addEventListener(\"mouseout\", this.mouseUp, options);\n        this.canvas.addEventListener(\"mouseup\", this.mouseUp, options);\n        this.canvas.addEventListener(\"mousedown\", this.mouseDown, options);\n        this.canvas.addEventListener(\"touchmove\", this.mouseMove, options);\n        this.canvas.addEventListener(\"touchend\", this.mouseUp, options);\n        this.canvas.addEventListener(\n          \"touchstart\",\n          this.mouseDown,\n          options\n        );\n      }\n      if ((_b = this.uniforms.iDeviceOrientation) == null ? void 0 : _b.isNeeded) {\n        window.addEventListener(\n          \"deviceorientation\",\n          this.onDeviceOrientationChange,\n          options\n        );\n      }\n      window.addEventListener(\"resize\", this.onResize, options);\n    };\n    this.removeEventListeners = () => {\n      var _a, _b;\n      const options = {\n        passive: true\n      };\n      if (((_a = this.uniforms.iMouse) == null ? void 0 : _a.isNeeded) && this.canvas) {\n        this.canvas.removeEventListener(\n          \"mousemove\",\n          this.mouseMove,\n          options\n        );\n        this.canvas.removeEventListener(\"mouseout\", this.mouseUp, options);\n        this.canvas.removeEventListener(\"mouseup\", this.mouseUp, options);\n        this.canvas.removeEventListener(\n          \"mousedown\",\n          this.mouseDown,\n          options\n        );\n        this.canvas.removeEventListener(\n          \"touchmove\",\n          this.mouseMove,\n          options\n        );\n        this.canvas.removeEventListener(\"touchend\", this.mouseUp, options);\n        this.canvas.removeEventListener(\n          \"touchstart\",\n          this.mouseDown,\n          options\n        );\n      }\n      if ((_b = this.uniforms.iDeviceOrientation) == null ? void 0 : _b.isNeeded) {\n        window.removeEventListener(\n          \"deviceorientation\",\n          this.onDeviceOrientationChange,\n          options\n        );\n      }\n      window.removeEventListener(\"resize\", this.onResize, options);\n    };\n    this.onDeviceOrientationChange = ({\n      alpha,\n      beta,\n      gamma\n    }) => {\n      this.uniforms.iDeviceOrientation.value = [\n        alpha != null ? alpha : 0,\n        beta != null ? beta : 0,\n        gamma != null ? gamma : 0,\n        window.orientation || 0\n      ];\n    };\n    this.mouseDown = (e) => {\n      var _a, _b, _c, _d, _e, _f;\n      const [clientX, clientY2] = latestPointerClientCoords(e);\n      const mouseX = clientX - ((_b = (_a = this.canvasPosition) == null ? void 0 : _a.left) != null ? _b : 0) - window.pageXOffset;\n      const mouseY = ((_d = (_c = this.canvasPosition) == null ? void 0 : _c.height) != null ? _d : 0) - clientY2 - ((_f = (_e = this.canvasPosition) == null ? void 0 : _e.top) != null ? _f : 0) - window.pageYOffset;\n      this.mousedown = true;\n      this.uniforms.iMouse.value[2] = mouseX;\n      this.uniforms.iMouse.value[3] = mouseY;\n      this.lastMouseArr[0] = mouseX;\n      this.lastMouseArr[1] = mouseY;\n    };\n    this.mouseMove = (e) => {\n      var _a, _b, _c, _d, _e, _f, _g;\n      this.canvasPosition = (_a = this.canvas) == null ? void 0 : _a.getBoundingClientRect();\n      const { lerp = 1 } = this.props;\n      const [clientX, clientY2] = latestPointerClientCoords(e);\n      const mouseX = clientX - ((_c = (_b = this.canvasPosition) == null ? void 0 : _b.left) != null ? _c : 0);\n      const mouseY = ((_e = (_d = this.canvasPosition) == null ? void 0 : _d.height) != null ? _e : 0) - clientY2 - ((_g = (_f = this.canvasPosition) == null ? void 0 : _f.top) != null ? _g : 0);\n      if (lerp !== 1) {\n        this.lastMouseArr[0] = mouseX;\n        this.lastMouseArr[1] = mouseY;\n      } else {\n        this.uniforms.iMouse.value[0] = mouseX;\n        this.uniforms.iMouse.value[1] = mouseY;\n      }\n    };\n    this.mouseUp = () => {\n      this.uniforms.iMouse.value[2] = 0;\n      this.uniforms.iMouse.value[3] = 0;\n    };\n    this.onResize = () => {\n      var _a, _b, _c, _d, _e, _f;\n      const { gl } = this;\n      const { devicePixelRatio = 1 } = this.props;\n      if (!gl)\n        return;\n      this.canvasPosition = (_a = this.canvas) == null ? void 0 : _a.getBoundingClientRect();\n      const realToCSSPixels = devicePixelRatio;\n      const displayWidth = Math.floor(\n        ((_c = (_b = this.canvasPosition) == null ? void 0 : _b.width) != null ? _c : 1) * realToCSSPixels\n      );\n      const displayHeight = Math.floor(\n        ((_e = (_d = this.canvasPosition) == null ? void 0 : _d.height) != null ? _e : 1) * realToCSSPixels\n      );\n      gl.canvas.width = displayWidth;\n      gl.canvas.height = displayHeight;\n      if (((_f = this.uniforms.iResolution) == null ? void 0 : _f.isNeeded) && this.shaderProgram) {\n        const rUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_RESOLUTION\n        );\n        gl.uniform2fv(rUniform, [gl.canvas.width, gl.canvas.height]);\n      }\n    };\n    this.drawScene = (timestamp) => {\n      var _a, _b, _c;\n      const { gl } = this;\n      const { lerp = 1 } = this.props;\n      if (!gl)\n        return;\n      gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n      gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n      gl.bindBuffer(gl.ARRAY_BUFFER, (_a = this.squareVerticesBuffer) != null ? _a : null);\n      gl.vertexAttribPointer(\n        (_b = this.vertexPositionAttribute) != null ? _b : 0,\n        3,\n        gl.FLOAT,\n        false,\n        0,\n        0\n      );\n      this.setUniforms(timestamp);\n      gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n      if (((_c = this.uniforms.iMouse) == null ? void 0 : _c.isNeeded) && lerp !== 1) {\n        this.uniforms.iMouse.value[0] = lerpVal(\n          // @ts-expect-error TODO: Deal with this.\n          this.uniforms.iMouse.value[0],\n          // @ts-expect-error TODO: Deal with this.\n          this.lastMouseArr[0],\n          lerp\n        );\n        this.uniforms.iMouse.value[1] = lerpVal(\n          // @ts-expect-error TODO: Deal with this.\n          this.uniforms.iMouse.value[1],\n          // @ts-expect-error TODO: Deal with this.\n          this.lastMouseArr[1],\n          lerp\n        );\n      }\n      this.animFrameId = requestAnimationFrame(this.drawScene);\n    };\n    this.createShader = (type, shaderCodeAsText) => {\n      var _a, _b, _c, _d;\n      const { gl } = this;\n      if (!gl)\n        return null;\n      const shader = gl.createShader(type);\n      if (!shader)\n        return null;\n      gl.shaderSource(shader, shaderCodeAsText);\n      gl.compileShader(shader);\n      if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n        (_b = (_a = this.props).onWarning) == null ? void 0 : _b.call(\n          _a,\n          RSLOG(`Error compiling the shader:\n${shaderCodeAsText}`)\n        );\n        const compilationLog = gl.getShaderInfoLog(shader);\n        gl.deleteShader(shader);\n        (_d = (_c = this.props).onError) == null ? void 0 : _d.call(\n          _c,\n          RSLOG(`Shader compiler log: ${compilationLog}`)\n        );\n      }\n      return shader;\n    };\n    this.initShaders = ({ fs, vs }) => {\n      var _a, _b;\n      const { gl } = this;\n      if (!gl)\n        return;\n      const fragmentShader = this.createShader(gl.FRAGMENT_SHADER, fs);\n      const vertexShader = this.createShader(gl.VERTEX_SHADER, vs);\n      this.shaderProgram = gl.createProgram();\n      if (!this.shaderProgram || !vertexShader || !fragmentShader)\n        return;\n      gl.attachShader(this.shaderProgram, vertexShader);\n      gl.attachShader(this.shaderProgram, fragmentShader);\n      gl.linkProgram(this.shaderProgram);\n      if (!gl.getProgramParameter(this.shaderProgram, gl.LINK_STATUS)) {\n        (_b = (_a = this.props).onError) == null ? void 0 : _b.call(\n          _a,\n          RSLOG(\n            `Unable to initialize the shader program: ${gl.getProgramInfoLog(\n              this.shaderProgram\n            )}`\n          )\n        );\n        return;\n      }\n      gl.useProgram(this.shaderProgram);\n      this.vertexPositionAttribute = gl.getAttribLocation(\n        this.shaderProgram,\n        \"aVertexPosition\"\n      );\n      gl.enableVertexAttribArray(this.vertexPositionAttribute);\n    };\n    this.processCustomUniforms = () => {\n      const { uniforms } = this.props;\n      if (uniforms) {\n        Object.keys(uniforms).forEach((name) => {\n          var _a;\n          const uniform = (_a = this.props.uniforms) == null ? void 0 : _a[name];\n          if (!uniform)\n            return;\n          const { value, type } = uniform;\n          const glslType = uniformTypeToGLSLType(type);\n          if (!glslType)\n            return;\n          function isMatrixType(t, v) {\n            return t.includes(\"Matrix\") && Array.isArray(v);\n          }\n          function isVectorListType(t, v) {\n            return t.includes(\"v\") && Array.isArray(v) && v.length > parseInt(t.charAt(0));\n          }\n          const tempObject = {};\n          if (isMatrixType(type, value)) {\n            const arrayLength = type.length;\n            const val = parseInt(type.charAt(arrayLength - 3));\n            const numberOfMatrices = Math.floor(\n              value.length / (val * val)\n            );\n            if (value.length > val * val) {\n              tempObject.arraySize = `[${numberOfMatrices}]`;\n            }\n          } else if (isVectorListType(type, value)) {\n            tempObject.arraySize = `[${Math.floor(\n              value.length / parseInt(type.charAt(0))\n            )}]`;\n          }\n          this.uniforms[name] = __spreadValues({\n            type: glslType,\n            isNeeded: false,\n            value\n          }, tempObject);\n        });\n      }\n    };\n    this.processTextures = () => {\n      const { gl } = this;\n      const { textures, onDoneLoadingTextures } = this.props;\n      if (!gl)\n        return;\n      if (textures && textures.length > 0) {\n        this.uniforms[`${UNIFORM_CHANNELRESOLUTION}`] = {\n          type: \"vec3\",\n          isNeeded: false,\n          arraySize: `[${textures.length}]`,\n          value: []\n        };\n        const texturePromisesArr = textures.map(\n          (texture, id) => {\n            var _a;\n            this.uniforms[`${UNIFORM_CHANNEL}${id}`] = {\n              type: \"sampler2D\",\n              isNeeded: false\n            };\n            this.setupChannelRes(texture, id);\n            this.texturesArr[id] = new Texture(gl);\n            return (_a = this.texturesArr[id]) == null ? void 0 : _a.load(texture, id).then((t) => {\n              this.setupChannelRes(t, id);\n            });\n          }\n        );\n        Promise.all(texturePromisesArr).then(() => {\n          if (onDoneLoadingTextures)\n            onDoneLoadingTextures();\n        }).catch((e) => {\n          var _a, _b;\n          (_b = (_a = this.props).onError) == null ? void 0 : _b.call(_a, e);\n          if (onDoneLoadingTextures)\n            onDoneLoadingTextures();\n        });\n      } else {\n        if (onDoneLoadingTextures)\n          onDoneLoadingTextures();\n      }\n    };\n    this.preProcessShaders = (fs, vs) => {\n      var _a, _b;\n      const { precision, devicePixelRatio = 1 } = this.props;\n      const dprString = `#define DPR ${devicePixelRatio.toFixed(1)}\n`;\n      const isValidPrecision = PRECISIONS.includes(precision != null ? precision : \"highp\");\n      const precisionString = `precision ${isValidPrecision ? precision : PRECISIONS[1]} float;\n`;\n      if (!isValidPrecision)\n        (_b = (_a = this.props).onWarning) == null ? void 0 : _b.call(\n          _a,\n          RSLOG(\n            `wrong precision type ${precision}, please make sure to pass one of a valid precision lowp, mediump, highp, by default you shader precision will be set to highp.`\n          )\n        );\n      let fsString = precisionString.concat(dprString).concat(fs).replace(/texture\\(/g, \"texture2D(\");\n      const indexOfPrecisionString = fsString.lastIndexOf(precisionString);\n      Object.keys(this.uniforms).forEach((uniform) => {\n        if (fs.includes(uniform)) {\n          const u = this.uniforms[uniform];\n          if (!u)\n            return;\n          fsString = insertStringAtIndex(\n            fsString,\n            `uniform ${u.type} ${uniform}${u.arraySize || \"\"}; \n`,\n            indexOfPrecisionString + precisionString.length\n          );\n          u.isNeeded = true;\n        }\n      });\n      const isShadertoy = fs.includes(\"mainImage\");\n      if (isShadertoy)\n        fsString = fsString.concat(FS_MAIN_SHADER);\n      return {\n        fs: fsString,\n        vs\n      };\n    };\n    this.setUniforms = (timestamp) => {\n      var _a, _b, _c, _d, _e, _f;\n      const { gl } = this;\n      if (!gl || !this.shaderProgram)\n        return;\n      const delta = this.lastTime ? (timestamp - this.lastTime) / 1e3 : 0;\n      this.lastTime = timestamp;\n      if (this.props.uniforms) {\n        Object.keys(this.props.uniforms).forEach((name) => {\n          var _a2, _b2;\n          const currentUniform = (_a2 = this.props.uniforms) == null ? void 0 : _a2[name];\n          if (!currentUniform)\n            return;\n          if ((_b2 = this.uniforms[name]) == null ? void 0 : _b2.isNeeded) {\n            if (!this.shaderProgram)\n              return;\n            const customUniformLocation = gl.getUniformLocation(\n              this.shaderProgram,\n              name\n            );\n            if (!customUniformLocation)\n              return;\n            processUniform(\n              gl,\n              customUniformLocation,\n              currentUniform.type,\n              currentUniform.value\n            );\n          }\n        });\n      }\n      if ((_a = this.uniforms.iMouse) == null ? void 0 : _a.isNeeded) {\n        const mouseUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_MOUSE\n        );\n        gl.uniform4fv(\n          mouseUniform,\n          this.uniforms.iMouse.value\n        );\n      }\n      if (this.uniforms.iChannelResolution && this.uniforms.iChannelResolution.isNeeded) {\n        const channelResUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_CHANNELRESOLUTION\n        );\n        gl.uniform3fv(\n          channelResUniform,\n          this.uniforms.iChannelResolution.value\n        );\n      }\n      if ((_b = this.uniforms.iDeviceOrientation) == null ? void 0 : _b.isNeeded) {\n        const deviceOrientationUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_DEVICEORIENTATION\n        );\n        gl.uniform4fv(\n          deviceOrientationUniform,\n          this.uniforms.iDeviceOrientation.value\n        );\n      }\n      if ((_c = this.uniforms.iTime) == null ? void 0 : _c.isNeeded) {\n        const timeUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_TIME\n        );\n        gl.uniform1f(timeUniform, this.timer += delta);\n      }\n      if ((_d = this.uniforms.iTimeDelta) == null ? void 0 : _d.isNeeded) {\n        const timeDeltaUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_TIMEDELTA\n        );\n        gl.uniform1f(timeDeltaUniform, delta);\n      }\n      if ((_e = this.uniforms.iDate) == null ? void 0 : _e.isNeeded) {\n        const d = /* @__PURE__ */ new Date();\n        const month = d.getMonth() + 1;\n        const day = d.getDate();\n        const year = d.getFullYear();\n        const time = d.getHours() * 60 * 60 + d.getMinutes() * 60 + d.getSeconds() + d.getMilliseconds() * 1e-3;\n        const dateUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_DATE\n        );\n        gl.uniform4fv(dateUniform, [year, month, day, time]);\n      }\n      if ((_f = this.uniforms.iFrame) == null ? void 0 : _f.isNeeded) {\n        const timeDeltaUniform = gl.getUniformLocation(\n          this.shaderProgram,\n          UNIFORM_FRAME\n        );\n        gl.uniform1i(\n          timeDeltaUniform,\n          this.uniforms.iFrame.value++\n        );\n      }\n      if (this.texturesArr.length > 0) {\n        this.texturesArr.forEach((texture, id) => {\n          var _a2;\n          const { isVideo, _webglTexture, source, flipY, isLoaded } = texture;\n          if (!isLoaded)\n            return;\n          if ((_a2 = this.uniforms[`iChannel${id}`]) == null ? void 0 : _a2.isNeeded) {\n            if (!this.shaderProgram)\n              return;\n            const iChannel = gl.getUniformLocation(\n              this.shaderProgram,\n              `iChannel${id}`\n            );\n            gl.activeTexture(gl[`TEXTURE${id}`]);\n            gl.bindTexture(gl.TEXTURE_2D, _webglTexture);\n            gl.uniform1i(iChannel, id);\n            if (isVideo) {\n              texture.updateTexture(_webglTexture, source, flipY);\n            }\n          }\n        });\n      }\n    };\n    this.registerCanvas = (r) => {\n      this.canvas = r;\n    };\n    this.mousedown = false;\n    this.timer = 0;\n    this.lastMouseArr = [0, 0];\n    this.texturesArr = [];\n    this.lastTime = 0;\n    this.render = () => {\n      const { style } = this.props;\n      const currentStyle = {\n        glCanvas: __spreadValues({\n          height: \"100%\",\n          width: \"100%\"\n        }, style)\n      };\n      return (\n        // @ts-expect-error TODO: Deal with this.\n        /* @__PURE__ */ React.createElement(\"canvas\", { ref: this.registerCanvas, style: currentStyle.glCanvas })\n      );\n    };\n    this.uniforms = {\n      [UNIFORM_TIME]: {\n        type: \"float\",\n        isNeeded: false,\n        value: 0\n      },\n      [UNIFORM_TIMEDELTA]: {\n        type: \"float\",\n        isNeeded: false,\n        value: 0\n      },\n      [UNIFORM_DATE]: {\n        type: \"vec4\",\n        isNeeded: false,\n        value: [0, 0, 0, 0]\n      },\n      [UNIFORM_MOUSE]: {\n        type: \"vec4\",\n        isNeeded: false,\n        value: [0, 0, 0, 0]\n      },\n      [UNIFORM_RESOLUTION]: {\n        type: \"vec2\",\n        isNeeded: false,\n        value: [0, 0]\n      },\n      [UNIFORM_FRAME]: {\n        type: \"int\",\n        isNeeded: false,\n        value: 0\n      },\n      [UNIFORM_DEVICEORIENTATION]: {\n        type: \"vec4\",\n        isNeeded: false,\n        value: [0, 0, 0, 0]\n      }\n    };\n  }\n  componentWillUnmount() {\n    var _a, _b, _c;\n    const { gl } = this;\n    if (gl) {\n      (_a = gl.getExtension(\"WEBGL_lose_context\")) == null ? void 0 : _a.loseContext();\n      gl.useProgram(null);\n      gl.deleteProgram((_b = this.shaderProgram) != null ? _b : null);\n      if (this.texturesArr.length > 0) {\n        this.texturesArr.forEach((texture) => {\n          gl.deleteTexture(texture._webglTexture);\n        });\n      }\n      this.shaderProgram = null;\n    }\n    this.removeEventListeners();\n    cancelAnimationFrame((_c = this.animFrameId) != null ? _c : 0);\n  }\n};\nShader.defaultProps = {\n  textures: [],\n  contextAttributes: {},\n  devicePixelRatio: 1,\n  vs: BASIC_VS,\n  precision: \"highp\",\n  onError: console.error,\n  onWarn: console.warn\n};\nexport {\n  ClampToEdgeWrapping,\n  LinearFilter,\n  LinearMipMapLinearFilter,\n  LinearMipMapNearestFilter,\n  MirroredRepeatWrapping,\n  NearestFilter,\n  NearestMipMapLinearFilter,\n  NearestMipMapNearestFilter,\n  RepeatWrapping,\n  Shader\n};\n","import { type AgentState, useVoiceAssistant } from \"@livekit/components-react\";\nimport { LocalAudioTrack, RemoteAudioTrack } from \"livekit-client\";\nimport { useTranslations } from \"../i18n/I18nContext\";\nimport { AgentGridVisualizer } from \"./visualizer\";\n\ninterface VoicePaneProps {\n  primaryColor: string;\n  isConnecting: boolean;\n  isConnected: boolean;\n  onHangup: () => void;\n}\n\n/**\n * Voice mode body. Pre-connection: idle grid + \"Connecting…\". Connected: the\n * grid visualizer reads `useVoiceAssistant().state` + agent audio track and\n * animates accordingly:\n *\n *   - listening → centre cell pulses on a slow heartbeat\n *   - speaking  → 5 columns rise from middle row outward, driven by 5\n *     frequency bands of the agent track\n *   - thinking  → \"Knight Rider\" sweep across the middle row\n *   - connecting/initializing → clockwise ring around the perimeter\n */\nexport function VoicePane({ primaryColor, isConnecting, isConnected, onHangup }: VoicePaneProps) {\n  const t = useTranslations();\n\n  if (!isConnected) {\n    const stateLabel = isConnecting ? t.modal.connecting : t.voiceState.disconnected;\n    const agentState: AgentState | \"connecting\" | \"disconnected\" = isConnecting ? \"connecting\" : \"disconnected\";\n    return (\n      <VoicePaneShell agentState={agentState} onHangup={onHangup} stateLabel={stateLabel} t={t}>\n        <AgentGridVisualizer audioTrack={null} primaryColor={primaryColor} state={agentState} />\n      </VoicePaneShell>\n    );\n  }\n\n  return <ConnectedVoicePane onHangup={onHangup} primaryColor={primaryColor} t={t} />;\n}\n\n/** Calls `useVoiceAssistant`; only mount inside `<LiveKitRoom>`. */\nfunction ConnectedVoicePane({ primaryColor, onHangup, t }: { primaryColor: string; onHangup: () => void; t: ReturnType<typeof useTranslations> }) {\n  const { audioTrack, state } = useVoiceAssistant();\n  // `useMultibandTrackVolume` wants the LiveKit-typed track. The publication\n  // exposes it as the union LocalAudioTrack | RemoteAudioTrack | undefined;\n  // narrow with an instanceof check so we don't pass a video/data track.\n  const livekitTrack = audioTrack?.publication?.track ?? null;\n  const safeAudioTrack = livekitTrack instanceof LocalAudioTrack || livekitTrack instanceof RemoteAudioTrack ? livekitTrack : null;\n\n  const stateLabel = labelForAgentState(state, t);\n\n  return (\n    <VoicePaneShell agentState={state} onHangup={onHangup} stateLabel={stateLabel} t={t}>\n      <AgentGridVisualizer audioTrack={safeAudioTrack} primaryColor={primaryColor} state={state} />\n    </VoicePaneShell>\n  );\n}\n\nfunction VoicePaneShell({\n  agentState,\n  stateLabel,\n  onHangup,\n  t,\n  children,\n}: {\n  agentState: AgentState | \"connecting\" | \"disconnected\";\n  stateLabel: string;\n  onHangup: () => void;\n  t: ReturnType<typeof useTranslations>;\n  children: React.ReactNode;\n}) {\n  return (\n    <div className=\"vw-voice\">\n      <div className=\"vw-voice-stage\" data-agent-state={agentState}>\n        <div className=\"vw-voice-visualizer-wrap\">{children}</div>\n        <span className=\"vw-voice-state\" data-agent-state={agentState}>\n          {stateLabel}\n        </span>\n      </div>\n\n      <div className=\"vw-voice-controls\">\n        <button aria-label={t.controls.endCall} className=\"vw-voice-hangup\" onClick={onHangup} type=\"button\">\n          <svg\n            aria-hidden=\"true\"\n            fill=\"none\"\n            height=\"22\"\n            stroke=\"currentColor\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth=\"2\"\n            viewBox=\"0 0 24 24\"\n            width=\"22\"\n          >\n            <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n          </svg>\n        </button>\n      </div>\n    </div>\n  );\n}\n\nfunction labelForAgentState(state: AgentState | \"connecting\" | \"disconnected\" | undefined, t: ReturnType<typeof useTranslations>): string {\n  switch (state) {\n    case \"speaking\":\n      return t.voiceState.speaking ?? \"Speaking\";\n    case \"thinking\":\n      return t.voiceState.thinking ?? \"Thinking...\";\n    case \"listening\":\n      return t.voiceState.listening ?? \"Listening\";\n    case \"initializing\":\n    case \"connecting\":\n      return t.voiceState.initializing ?? t.modal.connecting ?? \"Connecting...\";\n    case \"disconnected\":\n      return t.voiceState.disconnected ?? \"Disconnected\";\n    default:\n      return t.voiceState.listening ?? \"Listening\";\n  }\n}\n","import { useEffect, useRef } from \"react\";\n\ninterface UseIdleTimeoutOptions {\n  enabled: boolean;\n  timeoutMs: number;\n  onTimeout: () => void;\n}\n\nfunction idleNoop(): void {\n  // Replaced once listeners are wired.\n}\n\n/**\n * Calls `onTimeout` after `timeoutMs` of no user activity while `enabled` is true.\n * Activity = keydown, pointerdown, touchstart, or an explicit ping() call\n * (used by chat send / mic events that don't always produce a raw DOM event).\n */\nexport function useIdleTimeout({ enabled, timeoutMs, onTimeout }: UseIdleTimeoutOptions) {\n  const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const onTimeoutRef = useRef(onTimeout);\n  const pingRef = useRef<() => void>(idleNoop);\n\n  useEffect(() => {\n    onTimeoutRef.current = onTimeout;\n  }, [onTimeout]);\n\n  useEffect(() => {\n    if (!enabled) {\n      if (timerRef.current) {\n        clearTimeout(timerRef.current);\n        timerRef.current = null;\n      }\n      return;\n    }\n\n    const reset = () => {\n      if (timerRef.current) clearTimeout(timerRef.current);\n      timerRef.current = setTimeout(() => {\n        onTimeoutRef.current();\n      }, timeoutMs);\n    };\n\n    pingRef.current = reset;\n    reset();\n\n    const events: Array<keyof DocumentEventMap> = [\"keydown\", \"pointerdown\", \"touchstart\"];\n    for (const event of events) {\n      document.addEventListener(event, reset, { passive: true });\n    }\n\n    return () => {\n      if (timerRef.current) clearTimeout(timerRef.current);\n      for (const event of events) {\n        document.removeEventListener(event, reset);\n      }\n    };\n  }, [enabled, timeoutMs]);\n\n  return {\n    ping: () => pingRef.current(),\n  };\n}\n","/**\n * Retry utility with exponential backoff for network requests.\n * Used for session creation to handle transient failures.\n */\n\nexport interface RetryOptions {\n  /** Maximum number of retry attempts (default: 3) */\n  maxAttempts?: number;\n  /** Initial delay in milliseconds (default: 1000) */\n  initialDelayMs?: number;\n  /** Maximum delay in milliseconds (default: 10000) */\n  maxDelayMs?: number;\n  /** Multiplier for exponential backoff (default: 2) */\n  backoffMultiplier?: number;\n  /** Optional callback for each retry attempt */\n  onRetry?: (attempt: number, error: Error, nextDelayMs: number) => void;\n  /** Optional function to determine if error is retryable */\n  isRetryable?: (error: Error) => boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<RetryOptions, \"onRetry\" | \"isRetryable\">> = {\n  maxAttempts: 3,\n  initialDelayMs: 1000,\n  maxDelayMs: 10000,\n  backoffMultiplier: 2,\n};\n\n/**\n * Default retry eligibility check.\n * Retries on network errors and 5xx server errors.\n */\nfunction defaultIsRetryable(error: Error): boolean {\n  // Network errors (fetch failed)\n  if (error.name === \"TypeError\" && error.message.includes(\"fetch\")) {\n    return true;\n  }\n\n  // Check for HTTP status errors\n  const message = error.message.toLowerCase();\n\n  // Retry on server errors (5xx)\n  if (message.includes(\"500\") || message.includes(\"502\") || message.includes(\"503\") || message.includes(\"504\")) {\n    return true;\n  }\n\n  // Retry on rate limiting\n  if (message.includes(\"429\") || message.includes(\"rate limit\")) {\n    return true;\n  }\n\n  // Don't retry on client errors (4xx) except rate limiting\n  if (message.includes(\"400\") || message.includes(\"401\") || message.includes(\"403\") || message.includes(\"404\")) {\n    return false;\n  }\n\n  // Default: retry on unknown errors\n  return true;\n}\n\n/**\n * Sleep for a given number of milliseconds.\n */\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculate delay with exponential backoff and jitter.\n */\nfunction calculateDelay(attempt: number, initialDelayMs: number, maxDelayMs: number, backoffMultiplier: number): number {\n  // Exponential backoff\n  const exponentialDelay = initialDelayMs * backoffMultiplier ** (attempt - 1);\n\n  // Cap at max delay\n  const cappedDelay = Math.min(exponentialDelay, maxDelayMs);\n\n  // Add jitter (±25%) to prevent thundering herd\n  const jitter = cappedDelay * 0.25 * (Math.random() * 2 - 1);\n\n  return Math.round(cappedDelay + jitter);\n}\n\n/**\n * Execute a function with retry logic and exponential backoff.\n *\n * @example\n * ```typescript\n * const session = await withRetry(\n *   () => fetchSession(config),\n *   {\n *     maxAttempts: 3,\n *     onRetry: (attempt, error) => {\n *       console.log(`Retry ${attempt}: ${error.message}`);\n *     }\n *   }\n * );\n * ```\n */\nexport async function withRetry<T>(fn: () => Promise<T>, options: RetryOptions = {}): Promise<T> {\n  const {\n    maxAttempts = DEFAULT_OPTIONS.maxAttempts,\n    initialDelayMs = DEFAULT_OPTIONS.initialDelayMs,\n    maxDelayMs = DEFAULT_OPTIONS.maxDelayMs,\n    backoffMultiplier = DEFAULT_OPTIONS.backoffMultiplier,\n    onRetry,\n    isRetryable = defaultIsRetryable,\n  } = options;\n\n  let lastError: Error | null = null;\n\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n    try {\n      return await fn();\n    } catch (error) {\n      lastError = error instanceof Error ? error : new Error(String(error));\n\n      // Check if we should retry\n      const isLastAttempt = attempt >= maxAttempts;\n      const shouldRetry = !isLastAttempt && isRetryable(lastError);\n\n      if (!shouldRetry) {\n        throw lastError;\n      }\n\n      // Calculate delay for next attempt\n      const delayMs = calculateDelay(attempt, initialDelayMs, maxDelayMs, backoffMultiplier);\n\n      // Notify about retry\n      onRetry?.(attempt, lastError, delayMs);\n\n      // Wait before retrying\n      await sleep(delayMs);\n    }\n  }\n\n  // Should never reach here, but TypeScript needs it\n  throw lastError || new Error(\"Retry failed\");\n}\n\n/**\n * Wrapper for fetch with automatic retry.\n */\nexport async function fetchWithRetry(url: string, options?: RequestInit, retryOptions?: RetryOptions): Promise<Response> {\n  return await withRetry(async () => {\n    const response = await fetch(url, options);\n\n    // Throw on non-ok responses so they can be retried\n    if (!response.ok) {\n      const errorBody = await response.text().catch(() => \"\");\n      throw new Error(`HTTP ${response.status}: ${response.statusText}${errorBody ? ` - ${errorBody}` : \"\"}`);\n    }\n\n    return response;\n  }, retryOptions);\n}\n","import { LiveKitRoom, RoomAudioRenderer, useConnectionState } from \"@livekit/components-react\";\nimport { AnimatePresence, LayoutGroup, MotionConfig } from \"framer-motion\";\nimport { ConnectionState } from \"livekit-client\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\n\nimport { type ChatTranscriptMessage, FrozenChatPane, LiveKitChatBridge, PreConnectChatPane } from \"./components/ChatPane\";\nimport { ModalHeader } from \"./components/ModalHeader\";\nimport { OverviewScreen } from \"./components/OverviewScreen\";\nimport { PoweredByFooter } from \"./components/PoweredByFooter\";\nimport { RatingScreen } from \"./components/RatingScreen\";\nimport { Stage } from \"./components/Stage\";\nimport { Trigger } from \"./components/Trigger\";\nimport { VoicePane } from \"./components/VoicePane\";\nimport { DEFAULT_OFFSET, DEFAULT_POSITION, DEFAULT_PRIMARY_COLOR, DEFAULT_UI_CONFIG, mergeUIConfig } from \"./constants\";\nimport { useBodyScrollLock } from \"./hooks/useBodyScrollLock\";\nimport { useIdleTimeout } from \"./hooks/useIdleTimeout\";\nimport { useViewport } from \"./hooks/useViewport\";\nimport { useLocale, useTranslations } from \"./i18n/I18nContext\";\nimport type {\n  InteractionMode,\n  SessionResponse,\n  UIConfig,\n  WidgetBranding,\n  WidgetConfig,\n  WidgetConfigResponse,\n  WidgetPosition,\n  WidgetState,\n} from \"./types\";\nimport { fetchWithRetry } from \"./utils/retry\";\n\n/** Hold the \"ended\" view this long before flipping to rating/closed */\nconst END_TRANSITION_DELAY_MS = 2500;\n\n/** Auto-end the session after this long with no user activity */\nconst IDLE_TIMEOUT_MS = 5 * 60 * 1000;\n\n/** Public handle for programmatic widget control */\nexport interface WidgetHandle {\n  startWithAgent: (agentId: string, mode?: \"voice\" | \"chat\") => void;\n  startChat: () => void;\n  /** Opens the widget in chat mode the way the launcher does: the overview screen when the widget has one, else the chat. */\n  openChat: () => void;\n  startVoiceCall: () => void;\n  getAgentIds: () => string[];\n  getDefaultAgentId: () => string | null;\n  isOpen: () => boolean;\n  isConnected: () => boolean;\n  getCurrentMode: () => \"voice\" | \"chat\" | null;\n  getCurrentAgentId: () => string | null;\n}\n\n/** Resolved widget config (locale stays optional for browser detection) */\ntype ResolvedConfig = Omit<Required<WidgetConfig>, \"locale\"> & {\n  locale: WidgetConfig[\"locale\"];\n};\n\ninterface WidgetProps {\n  config: ResolvedConfig;\n  onRef?: (ref: WidgetHandle | null) => void;\n}\n\n/** Pick the session mode from explicit override → setting → chat default */\nfunction resolveMode(setting: InteractionMode, explicit?: \"voice\" | \"chat\"): \"voice\" | \"chat\" {\n  if (explicit !== undefined) return explicit;\n  if (setting === \"voice\") return \"voice\";\n  return \"chat\";\n}\n\n/** Bridges LiveKit connection-state into the orchestrator's reconnecting flag */\nfunction ConnectionMonitor({ onReconnecting, onReconnected }: { onReconnecting: () => void; onReconnected: () => void }) {\n  const connectionState = useConnectionState();\n  const prevStateRef = useRef<ConnectionState>(connectionState);\n\n  useEffect(() => {\n    const prev = prevStateRef.current;\n    prevStateRef.current = connectionState;\n    if (connectionState === ConnectionState.Reconnecting && prev !== ConnectionState.Reconnecting) onReconnecting();\n    if (prev === ConnectionState.Reconnecting && connectionState === ConnectionState.Connected) onReconnected();\n  }, [connectionState, onReconnecting, onReconnected]);\n\n  return null;\n}\n\nexport function Widget({ config, onRef }: WidgetProps) {\n  const locale = useLocale();\n  const t = useTranslations();\n  const { isMobile } = useViewport();\n  // No more JS-based viewport tracking — the mobile fullscreen layout uses\n  // CSS `100dvh` (dynamic viewport height) which auto-shrinks when the\n  // keyboard opens, and the existing `useBodyScrollLock` keeps the host page\n  // from drifting. Browsers without `dvh` support are vanishingly rare in\n  // 2026 (Safari 15.4+, Chrome 108+, Firefox 101+).\n\n  const [widgetConfig, setWidgetConfig] = useState<WidgetConfigResponse | null>(null);\n  const [configError, setConfigError] = useState<string | null>(null);\n\n  const [state, setState] = useState<WidgetState>({\n    isOpen: false,\n    isConnecting: false,\n    isConnected: false,\n    isReconnecting: false,\n    selectedMode: null,\n    currentAgentId: null,\n    error: null,\n    rating: null,\n    showRating: false,\n    isEnding: false,\n    endReason: null,\n  });\n\n  const [session, setSession] = useState<SessionResponse | null>(null);\n  const [showOverview, setShowOverview] = useState(false);\n  const [retryCount, setRetryCount] = useState(0);\n  const [pendingUserMessages, setPendingUserMessages] = useState<string[]>([]);\n  /**\n   * True when the chat session was started by a procedure quick-start click.\n   * Suppresses the optimistic begin_message render — the agent will silence\n   * its greeting and deliver the procedure's first step instead, so showing\n   * a fake greeting bubble while we wait would be misleading.\n   */\n  const [entryProcedurePinned, setEntryProcedurePinned] = useState(false);\n  /**\n   * Optional \"synthetic chat history\" rendered at the top of the transcript.\n   * Used when a procedure quick-start launches the chat: we want the\n   * conversation to look populated before LiveKit connects, so we render a\n   * friendly agent wave and a user bubble matching what the visitor clicked.\n   *\n   * These bubbles are *display-only* — they never enter `pendingUserMessages`\n   * and so never get sent to the agent. LiveKit's real messages append after\n   * them as they arrive. Cleared on session reset.\n   */\n  const [seedMessages, setSeedMessages] = useState<{ agent: string; user: string } | null>(null);\n  const [sessionDataForRating, setSessionDataForRating] = useState<{ roomName: string } | null>(null);\n  // Live mirror of the chat transcript while connected — captured into\n  // `frozenTranscript` at end-time so the user can keep reading after the\n  // LiveKit Room tears down.\n  const liveTranscriptRef = useRef<ChatTranscriptMessage[]>([]);\n  const [frozenTranscript, setFrozenTranscript] = useState<ChatTranscriptMessage[] | null>(null);\n  // True after the user dismisses the rating overlay with \"No thanks\". Keeps\n  // the frozen chat visible until they hit X.\n  const [ratingDismissed, setRatingDismissed] = useState(false);\n\n  const retryTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const endTransitionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const agentOverrideRef = useRef<string | null>(null);\n  const isSessionInProgressRef = useRef(false);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const lastFocusedTriggerRef = useRef<HTMLElement | null>(null);\n  const headerId = useId();\n\n  useBodyScrollLock(isMobile && state.isOpen);\n\n  const uiConfig: UIConfig = useMemo(() => mergeUIConfig(widgetConfig?.ui), [widgetConfig?.ui]);\n\n  const agentIds = useMemo(() => {\n    if (!widgetConfig) return [];\n    const ids = new Set<string>();\n    if (widgetConfig.defaultAgentId) ids.add(widgetConfig.defaultAgentId);\n    for (const id of widgetConfig.agentIds ?? []) ids.add(id);\n    return [...ids];\n  }, [widgetConfig]);\n\n  const defaultAgentId = widgetConfig?.defaultAgentId ?? null;\n  const interactionMode: InteractionMode = widgetConfig?.interactionMode ?? \"both\";\n\n  // Fetch widget config on mount\n  useEffect(() => {\n    async function fetchConfig() {\n      try {\n        const response = await fetch(`${config.apiUrl}/api/widget/config?widgetId=${encodeURIComponent(config.widgetId)}`);\n        if (!response.ok) {\n          const error = await response.json().catch(() => ({ error: \"Failed to load widget\" }));\n          throw new Error(error.error || \"Failed to load widget\");\n        }\n        const data: WidgetConfigResponse = await response.json();\n        if (!data.ui) data.ui = DEFAULT_UI_CONFIG;\n        setWidgetConfig(data);\n      } catch (error) {\n        console.error(\"[VoiceWidget] Failed to fetch config:\", error);\n        setConfigError(error instanceof Error ? error.message : \"Failed to load widget\");\n      }\n    }\n    fetchConfig();\n  }, [config.apiUrl, config.widgetId]);\n\n  // Cleanup timers on unmount\n  useEffect(() => {\n    return () => {\n      if (retryTimeoutRef.current) clearTimeout(retryTimeoutRef.current);\n      if (endTransitionTimeoutRef.current) clearTimeout(endTransitionTimeoutRef.current);\n    };\n  }, []);\n\n  // Establish a LiveKit session for the picked mode\n  const startSessionWithAgent = useCallback(\n    async (agentId: string | undefined, sessionMode: \"voice\" | \"chat\", entryProcedureId?: string | null) => {\n      if (isSessionInProgressRef.current) {\n        console.warn(\"[VoiceWidget] Session already in progress, ignoring\");\n        return;\n      }\n      isSessionInProgressRef.current = true;\n      setShowOverview(false);\n\n      const resolvedAgentId = agentId ?? agentOverrideRef.current ?? defaultAgentId;\n\n      setState((prev) => ({\n        ...prev,\n        isOpen: true,\n        isConnecting: true,\n        selectedMode: sessionMode,\n        currentAgentId: resolvedAgentId ?? null,\n        error: null,\n      }));\n      setRetryCount(0);\n\n      try {\n        const response = await fetchWithRetry(\n          `${config.apiUrl}/api/widget/session`,\n          {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({\n              widgetId: config.widgetId,\n              agentId: resolvedAgentId ?? undefined,\n              visitorId: config.visitorId,\n              locale,\n              channel: sessionMode,\n              entryProcedureId: entryProcedureId ?? undefined,\n              metadata: {\n                ...config.metadata,\n                page: window.location.pathname,\n                referrer: document.referrer,\n              },\n            }),\n          },\n          {\n            maxAttempts: 3,\n            initialDelayMs: 1000,\n            onRetry: (attempt, error, nextDelayMs) => {\n              console.warn(`[VoiceWidget] Session creation failed (attempt ${attempt}), retrying in ${nextDelayMs}ms:`, error.message);\n              setRetryCount(attempt);\n            },\n          }\n        );\n\n        const sessionData: SessionResponse = await response.json();\n        setSession(sessionData);\n        setState((prev) => ({ ...prev, isConnecting: false, isConnected: true }));\n        agentOverrideRef.current = null;\n        // The session itself is now represented by `session !== null`; clear the\n        // creation-in-flight flag so subsequent WidgetHandle calls (after this\n        // session ends) aren't blocked.\n        isSessionInProgressRef.current = false;\n      } catch (error) {\n        console.error(\"[VoiceWidget] Session creation failed:\", error);\n        isSessionInProgressRef.current = false;\n        setState((prev) => ({\n          ...prev,\n          isConnecting: false,\n          error: error instanceof Error ? error.message : \"Connection failed\",\n        }));\n      }\n    },\n    [config.apiUrl, config.widgetId, config.visitorId, config.metadata, locale, defaultAgentId]\n  );\n\n  const handleOpen = useCallback(\n    (explicit?: \"voice\" | \"chat\") => {\n      if (isSessionInProgressRef.current) return;\n      const mode = resolveMode(interactionMode, explicit);\n      setState((prev) => ({ ...prev, isOpen: true, selectedMode: mode, error: null }));\n      if (mode === \"chat\" && widgetConfig?.overview?.enabled) {\n        setShowOverview(true);\n        return;\n      }\n      startSessionWithAgent(agentOverrideRef.current ?? undefined, mode).catch((error: unknown) => {\n        console.error(\"[VoiceWidget] Failed to start session:\", error);\n      });\n    },\n    [interactionMode, startSessionWithAgent, widgetConfig?.overview?.enabled]\n  );\n\n  const resetWidget = useCallback(() => {\n    setState({\n      isOpen: false,\n      isConnecting: false,\n      isConnected: false,\n      isReconnecting: false,\n      selectedMode: null,\n      currentAgentId: null,\n      error: null,\n      rating: null,\n      showRating: false,\n      isEnding: false,\n      endReason: null,\n    });\n    setSession(null);\n    setShowOverview(false);\n    setSessionDataForRating(null);\n    setRetryCount(0);\n    setPendingUserMessages([]);\n    setEntryProcedurePinned(false);\n    setSeedMessages(null);\n    setFrozenTranscript(null);\n    setRatingDismissed(false);\n    liveTranscriptRef.current = [];\n    agentOverrideRef.current = null;\n    isSessionInProgressRef.current = false;\n  }, []);\n\n  /**\n   * End the conversation with a short held \"ended\" state before transitioning\n   * to the rating screen or closing. Rating only fires when:\n   *   - we were actually connected,\n   *   - feedback is enabled in the widget UI config,\n   *   - the widget has `askForRating` enabled in Supabase.\n   */\n  const finalizeEnd = useCallback(\n    (reason: \"user\" | \"timeout\" | \"disconnect\") => {\n      if (endTransitionTimeoutRef.current) return;\n      const askForRating = widgetConfig?.askForRating ?? true;\n      const canShowRating = state.isConnected && !!session && uiConfig.feedback.enabled && askForRating;\n      const isChat = state.selectedMode === \"chat\";\n\n      setState((prev) => ({ ...prev, isEnding: true, endReason: reason }));\n      if (canShowRating && session) {\n        setSessionDataForRating({ roomName: session.roomName });\n      }\n\n      // Freeze the current chat transcript so the user can keep reading after\n      // the LiveKit Room is torn down. Voice mode has no transcript to keep,\n      // so this is a no-op there.\n      if (isChat) {\n        setFrozenTranscript(liveTranscriptRef.current.slice());\n      }\n\n      endTransitionTimeoutRef.current = setTimeout(() => {\n        endTransitionTimeoutRef.current = null;\n        if (canShowRating) {\n          setSession(null);\n          setState((prev) => ({\n            ...prev,\n            isConnected: false,\n            showRating: true,\n            isEnding: false,\n            endReason: null,\n          }));\n        } else if (isChat) {\n          // No rating to show, but keep the chat readable until the user\n          // hits X — they may still want to copy something.\n          setSession(null);\n          setState((prev) => ({\n            ...prev,\n            isConnected: false,\n            isEnding: false,\n            endReason: null,\n          }));\n        } else {\n          resetWidget();\n        }\n      }, END_TRANSITION_DELAY_MS);\n    },\n    [widgetConfig?.askForRating, state.isConnected, state.selectedMode, session, uiConfig.feedback.enabled, resetWidget]\n  );\n\n  const handleEndCall = useCallback(() => finalizeEnd(\"user\"), [finalizeEnd]);\n\n  const handleStartChatFromOverview = useCallback(\n    (entry?: { procedureId?: string; procedureLabel?: string; prompt?: string }) => {\n      const entryProcedureId = entry?.procedureId?.trim() || null;\n      const entryProcedureLabel = entry?.procedureLabel?.trim() || null;\n      const promptText = entry?.prompt?.trim() || null;\n      if (promptText) {\n        // Prompt quick-start: push the preset as the visitor's first chat\n        // message — same machinery as if they had typed it. The agent has\n        // no awareness this came from a button.\n        setPendingUserMessages((prev) => [...prev, promptText]);\n      }\n      // Procedure quick-start gets the thinking-dots-only treatment; every\n      // other entry path keeps the optimistic begin_message render.\n      setEntryProcedurePinned(Boolean(entryProcedureId));\n      // Seed synthetic chat history for procedure quick-starts so the\n      // transcript looks populated before the LiveKit greeting arrives.\n      // The wave is locale-agnostic; the user bubble echoes whatever\n      // label the visitor clicked, giving the agent's first procedure\n      // turn a clear \"in reply to\" anchor.\n      if (entryProcedureId && entryProcedureLabel) {\n        setSeedMessages({ agent: \"👋\", user: entryProcedureLabel });\n      } else {\n        setSeedMessages(null);\n      }\n      setShowOverview(false);\n      startSessionWithAgent(agentOverrideRef.current ?? undefined, \"chat\", entryProcedureId).catch((error: unknown) => {\n        console.error(\"[VoiceWidget] Failed to start chat:\", error);\n      });\n    },\n    [startSessionWithAgent]\n  );\n\n  /**\n   * X-button / focus-trap dismiss / Escape. Routes through `finalizeEnd` whenever\n   * a session exists (or is being created) so the `ask_for_rating` config decides\n   * whether to show the rating screen or close. With no session in flight, just\n   * close — there's nothing to rate.\n   */\n  const handleClose = useCallback(() => {\n    if (state.showRating) {\n      resetWidget();\n      return;\n    }\n    if (session || state.isConnecting || state.isConnected) {\n      finalizeEnd(\"user\");\n    } else {\n      resetWidget();\n    }\n  }, [state.showRating, state.isConnecting, state.isConnected, session, finalizeEnd, resetWidget]);\n\n  const handleDisconnected = useCallback(() => {\n    if (state.showRating || state.isEnding) return;\n    finalizeEnd(\"disconnect\");\n  }, [state.showRating, state.isEnding, finalizeEnd]);\n\n  // Auto-close after 5 minutes of no user activity\n  useIdleTimeout({\n    enabled: state.isConnected && !state.isEnding && !state.showRating,\n    timeoutMs: IDLE_TIMEOUT_MS,\n    onTimeout: () => finalizeEnd(\"timeout\"),\n  });\n\n  // Capture the trigger element when opening, restore focus when closing\n  // (Escape is handled by the focus-trap inside <Stage />)\n  useEffect(() => {\n    if (state.isOpen) {\n      lastFocusedTriggerRef.current = document.activeElement as HTMLElement | null;\n      return;\n    }\n    // Closed — return focus to whatever the user clicked, falling back to the\n    // first trigger button inside our container\n    const saved = lastFocusedTriggerRef.current;\n    if (saved && document.contains(saved)) {\n      saved.focus({ preventScroll: true });\n      return;\n    }\n    const fallback = containerRef.current?.querySelector<HTMLElement>(\".vw-trigger\");\n    fallback?.focus({ preventScroll: true });\n  }, [state.isOpen]);\n\n  const handleReconnecting = useCallback(() => setState((prev) => ({ ...prev, isReconnecting: true })), []);\n  const handleReconnected = useCallback(() => setState((prev) => ({ ...prev, isReconnecting: false })), []);\n\n  const handleSubmitRating = useCallback(\n    async (rating: number) => {\n      const sessionId = sessionDataForRating?.roomName;\n      if (!sessionId) return;\n      setState((prev) => ({ ...prev, rating }));\n      try {\n        await fetch(`${config.apiUrl}/api/widget/feedback`, {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({ sessionId, widgetId: config.widgetId, rating }),\n        });\n      } catch (error) {\n        console.error(\"[VoiceWidget] Failed to submit rating:\", error);\n      }\n    },\n    [config.apiUrl, config.widgetId, sessionDataForRating]\n  );\n\n  const handleSubmitFeedback = useCallback(\n    async (feedback: string) => {\n      const sessionId = sessionDataForRating?.roomName;\n      if (!sessionId || !state.rating) return;\n      try {\n        await fetch(`${config.apiUrl}/api/widget/feedback`, {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({ sessionId, widgetId: config.widgetId, rating: state.rating, feedback }),\n        });\n      } catch (error) {\n        console.error(\"[VoiceWidget] Failed to submit feedback:\", error);\n      }\n    },\n    [config.apiUrl, config.widgetId, sessionDataForRating, state.rating]\n  );\n\n  // Programmatic API\n  useEffect(() => {\n    if (!onRef) return;\n    const handle: WidgetHandle = {\n      startWithAgent: (agentId, mode) => {\n        if (isSessionInProgressRef.current) return;\n        if (agentIds.length > 0 && !agentIds.includes(agentId)) {\n          console.warn(`[VoiceWidget] Agent ${agentId} not in configured list`);\n        }\n        agentOverrideRef.current = agentId;\n        const sessionMode = resolveMode(interactionMode, mode);\n        startSessionWithAgent(agentId, sessionMode).catch((error: unknown) => {\n          console.error(\"[VoiceWidget] Failed to start session:\", error);\n        });\n      },\n      startChat: () => {\n        if (isSessionInProgressRef.current) return;\n        if (interactionMode === \"voice\") throw new Error(\"Chat mode is not enabled for this widget\");\n        if (!defaultAgentId) throw new Error(\"Widget not configured with a default agent\");\n        agentOverrideRef.current = defaultAgentId;\n        startSessionWithAgent(defaultAgentId, \"chat\").catch((error: unknown) => {\n          console.error(\"[VoiceWidget] Failed to start chat:\", error);\n        });\n      },\n      openChat: () => {\n        if (interactionMode === \"voice\") throw new Error(\"Chat mode is not enabled for this widget\");\n        handleOpen(\"chat\");\n      },\n      startVoiceCall: () => {\n        if (isSessionInProgressRef.current) return;\n        if (interactionMode === \"chat\") throw new Error(\"Voice mode is not enabled for this widget\");\n        if (!defaultAgentId) throw new Error(\"Widget not configured with a default agent\");\n        agentOverrideRef.current = defaultAgentId;\n        startSessionWithAgent(defaultAgentId, \"voice\").catch((error: unknown) => {\n          console.error(\"[VoiceWidget] Failed to start voice call:\", error);\n        });\n      },\n      getAgentIds: () => agentIds,\n      getDefaultAgentId: () => defaultAgentId,\n      isOpen: () => state.isOpen,\n      isConnected: () => state.isConnected,\n      getCurrentMode: () => state.selectedMode,\n      getCurrentAgentId: () => state.currentAgentId,\n    };\n    onRef(handle);\n    return () => onRef(null);\n  }, [\n    onRef,\n    interactionMode,\n    agentIds,\n    defaultAgentId,\n    startSessionWithAgent,\n    handleOpen,\n    state.isOpen,\n    state.isConnected,\n    state.selectedMode,\n    state.currentAgentId,\n  ]);\n\n  // Position\n  const position: WidgetPosition = widgetConfig?.position ?? DEFAULT_POSITION;\n  const offset = widgetConfig?.offset ?? DEFAULT_OFFSET;\n\n  const closedPositionStyles = useMemo(() => {\n    const base = { position: \"fixed\" as const, zIndex: config.zIndex };\n    if (position === \"bottom-right\") return { ...base, right: offset.x, bottom: offset.y };\n    if (position === \"bottom-left\") return { ...base, left: offset.x, bottom: offset.y };\n    if (position === \"middle-right\") return { ...base, right: offset.x, top: \"50%\", transform: \"translateY(-50%)\" };\n    return { ...base, right: offset.x, top: offset.y };\n  }, [position, offset.x, offset.y, config.zIndex]);\n\n  // Mobile fullscreen: let the browser handle keyboard avoidance via CSS\n  // `100dvh` (dynamic viewport height — shrinks when the on-screen keyboard\n  // appears) and `env(safe-area-inset-bottom)` for the iOS home indicator.\n  // No more JS measurement — the platform primitives are reliable in 2026.\n  const openPositionStyles = isMobile\n    ? {\n        position: \"fixed\" as const,\n        zIndex: config.zIndex,\n        top: 0,\n        left: 0,\n        right: 0,\n        height: \"100dvh\",\n      }\n    : closedPositionStyles;\n\n  // Branding (session can override widget defaults)\n  const defaultBranding: WidgetBranding = {\n    primary_color: DEFAULT_PRIMARY_COLOR,\n    logo_url: null,\n    name: \"Voice Assistant\",\n    website: null,\n    theme: \"system\",\n  };\n  const branding = session?.branding ?? widgetConfig?.branding ?? defaultBranding;\n  const themeAttribute = branding.theme === \"system\" ? undefined : branding.theme;\n  const primaryColor = branding.primary_color || DEFAULT_PRIMARY_COLOR;\n\n  if (!widgetConfig && !configError) return null;\n  if (configError) {\n    console.error(\"[VoiceWidget] Config error:\", configError);\n    return null;\n  }\n\n  const isVoice = state.selectedMode === \"voice\";\n  const displayName = branding.name;\n  const subheaderText = widgetConfig?.subheader ?? null;\n  const triggerVariant = widgetConfig?.displayStyle ?? \"bar\";\n  const showPoweredByFooter = uiConfig.expanded.showPoweredBy && !isMobile;\n  // Suppressed when a procedure quick-start is pinned — the agent silences\n  // its greeting in that case and the chat panes show thinking dots until\n  // the procedure speaks.\n  const beginMessage = entryProcedurePinned ? null : (widgetConfig?.beginMessage ?? uiConfig.chat.welcomeMessage ?? null);\n  const errorWithRetries = state.error && retryCount > 0 ? `${state.error} (after ${retryCount} retries)` : state.error;\n  const titleId = `${headerId}-title`;\n\n  // Fade subtitle to a transient status while connecting / reconnecting / ending\n  const headerStatus = state.isReconnecting\n    ? \"Reconnecting...\"\n    : state.isConnecting\n      ? t.modal.connecting\n      : state.isEnding\n        ? state.endReason === \"timeout\"\n          ? t.ending.timeout\n          : state.endReason === \"disconnect\"\n            ? t.ending.disconnect\n            : t.ending.user\n        : null;\n  const isHealthy = state.isConnected && !state.isReconnecting && !state.isEnding && !state.showRating;\n\n  // Localised chat labels passed into the shared @repo/widget-ui/chat\n  // components. The runtime widget reads them from the visitor-language\n  // dictionary; the dashboard test panel passes operator-language strings.\n  const chatLabels = {\n    empty: t.chat?.empty,\n    thinking: t.chat?.thinking,\n    placeholder: t.chat?.placeholder,\n    send: t.chat?.send,\n  };\n\n  const renderChat = (room: boolean) => {\n    // Post-end \"frozen\" view: as soon as the orchestrator captures a\n    // transcript snapshot in `finalizeEnd`, we render the frozen pane —\n    // even while the LiveKit Room is still mounted underneath during the\n    // 2.5s end-transition hold. This prevents a flicker through\n    // PreConnectChatPane (which would briefly flash just the begin_message)\n    // when the session is finally torn down. The Room stays mounted in the\n    // background only because `<LiveKitRoom>` wraps the whole shell; we\n    // simply stop rendering its chat output the moment we've snapshotted it.\n    if (frozenTranscript) {\n      return (\n        <FrozenChatPane\n          endedNotice={t.chat?.endedNotice ?? \"Conversation ended\"}\n          labels={chatLabels}\n          messages={frozenTranscript}\n          onStartNew={() => {\n            // Reset transcript + state, then re-open in chat mode.\n            const mode = state.selectedMode ?? \"chat\";\n            resetWidget();\n            setState((prev) => ({ ...prev, isOpen: true, selectedMode: mode }));\n            startSessionWithAgent(agentOverrideRef.current ?? undefined, mode).catch((error: unknown) => {\n              console.error(\"[VoiceWidget] Failed to start new session:\", error);\n            });\n          }}\n          showTimestamps={uiConfig.chat.showTimestamps}\n          startNewLabel={t.chat?.startNew ?? \"Start new conversation\"}\n        />\n      );\n    }\n    return room ? (\n      <LiveKitChatBridge\n        autoFocus={!isMobile}\n        beginMessage={beginMessage}\n        labels={chatLabels}\n        onMessagesChange={(msgs) => {\n          liveTranscriptRef.current = msgs;\n        }}\n        pendingUserMessages={pendingUserMessages}\n        seedMessages={seedMessages}\n        showTimestamps={uiConfig.chat.showTimestamps}\n      />\n    ) : (\n      <PreConnectChatPane\n        autoFocus={!isMobile}\n        beginMessage={beginMessage}\n        labels={chatLabels}\n        onPendingMessage={(text) => setPendingUserMessages((prev) => [...prev, text])}\n        pendingUserMessages={pendingUserMessages}\n        seedMessages={seedMessages}\n        showTimestamps={uiConfig.chat.showTimestamps}\n      />\n    );\n  };\n\n  const renderBody = (room: boolean) => {\n    if (errorWithRetries) {\n      return (\n        <div className=\"vw-stage-error\">\n          <p>{errorWithRetries}</p>\n          <button onClick={resetWidget} type=\"button\">\n            {t.modal.tryAgain}\n          </button>\n        </div>\n      );\n    }\n    // Chat: rating renders as an overlay on top of the frozen transcript so\n    // the user can still read/copy what was said. \"No thanks\" dismisses the\n    // overlay; X closes the whole widget.\n    if (state.showRating && !isVoice) {\n      return (\n        <div className=\"vw-stage-chat-end\">\n          {renderChat(room)}\n          {!ratingDismissed && (\n            <div className=\"vw-rating-overlay-backdrop\">\n              <RatingScreen\n                collectTextFeedback={uiConfig.feedback.collectTextFeedback}\n                onClose={resetWidget}\n                onDismiss={() => setRatingDismissed(true)}\n                onSubmitFeedback={handleSubmitFeedback}\n                onSubmitRating={handleSubmitRating}\n                primaryColor={primaryColor}\n                selectedMode={state.selectedMode}\n                variant=\"overlay\"\n              />\n            </div>\n          )}\n        </div>\n      );\n    }\n    // Voice: rating still renders as a full-screen replacement — there's no\n    // transcript to preserve.\n    if (state.showRating) {\n      return (\n        <RatingScreen\n          collectTextFeedback={uiConfig.feedback.collectTextFeedback}\n          onClose={resetWidget}\n          onSubmitFeedback={handleSubmitFeedback}\n          onSubmitRating={handleSubmitRating}\n          primaryColor={primaryColor}\n          selectedMode={state.selectedMode}\n        />\n      );\n    }\n    if (isVoice) {\n      return (\n        <VoicePane\n          isConnected={state.isConnected && room}\n          isConnecting={state.isConnecting || (!room && !state.error)}\n          onHangup={handleEndCall}\n          primaryColor={primaryColor}\n        />\n      );\n    }\n    return renderChat(room);\n  };\n\n  const renderShell = (room: boolean) => {\n    if (showOverview && widgetConfig?.overview) {\n      return (\n        <>\n          <OverviewScreen\n            displayName={displayName}\n            labels={{\n              closeAriaLabel: t.header.closeAriaLabel,\n              defaultAssistantName: t.overview.defaultAssistantName,\n              defaultStartChatLabel: t.overview.defaultStartChatLabel,\n              quickStartHeading: t.overview.quickStartHeading,\n              bookmarksHeading: t.overview.bookmarksHeading,\n            }}\n            logoUrl={branding.logo_url}\n            onClose={handleClose}\n            onQuickStart={(quickStart) =>\n              handleStartChatFromOverview(\n                quickStart.kind === \"procedure\"\n                  ? { procedureId: quickStart.procedure_id, procedureLabel: quickStart.label }\n                  : { prompt: quickStart.prompt }\n              )\n            }\n            onStartChat={() => handleStartChatFromOverview()}\n            overview={widgetConfig.overview}\n            primaryColor={primaryColor}\n            subheader={subheaderText}\n            titleId={titleId}\n          />\n          {showPoweredByFooter && <PoweredByFooter />}\n        </>\n      );\n    }\n\n    return (\n      <>\n        <ModalHeader\n          compact={state.selectedMode === \"chat\"}\n          displayName={displayName}\n          isHealthy={isHealthy}\n          logoUrl={branding.logo_url}\n          onClose={handleClose}\n          primaryColor={primaryColor}\n          subheader={headerStatus ?? subheaderText}\n          titleId={titleId}\n        />\n        <div className=\"vw-stage-body\">{renderBody(room)}</div>\n        {showPoweredByFooter && <PoweredByFooter />}\n      </>\n    );\n  };\n\n  const stage = (\n    <Stage\n      height={uiConfig.expanded.height}\n      isMobile={isMobile}\n      key=\"stage\"\n      onDismiss={handleClose}\n      titleId={titleId}\n      width={uiConfig.expanded.width}\n    >\n      {session ? (\n        <LiveKitRoom\n          audio={isVoice}\n          connect={true}\n          onDisconnected={handleDisconnected}\n          onError={(error) => {\n            console.error(\"[VoiceWidget] LiveKit error:\", error);\n            setState((prev) => ({ ...prev, error: error.message }));\n          }}\n          serverUrl={session.wsUrl}\n          token={session.token}\n          video={false}\n        >\n          <ConnectionMonitor onReconnected={handleReconnected} onReconnecting={handleReconnecting} />\n          {!state.showRating && isVoice && <RoomAudioRenderer />}\n          {renderShell(true)}\n        </LiveKitRoom>\n      ) : (\n        renderShell(false)\n      )}\n    </Stage>\n  );\n\n  const trigger = (\n    <Trigger\n      // Resolution order for the bar trigger's text:\n      //   1. Operator-overridden `ctaLabel` from /api/widget/config (set in\n      //      the agent2/[id]/chatbot editor → widgets.cta_label column)\n      //   2. Embedder-supplied `uiConfig.collapsed.cta` (init-time override)\n      //   3. Localized fallback in `Trigger` itself (i18n dictionary)\n      cta={widgetConfig?.ctaLabel ?? uiConfig.collapsed.cta}\n      isMobile={isMobile}\n      key=\"trigger\"\n      onClick={() => handleOpen()}\n      pillLogo={widgetConfig?.pillLogo ?? null}\n      primaryColor={primaryColor}\n      showNotification={widgetConfig?.showPillNotification ?? false}\n      variant={triggerVariant}\n    />\n  );\n\n  // Wrapper position: keep parent anchored at the trigger corner on desktop so\n  // the Stage's layoutId morph isn't fighting a parent-level reposition. Mobile\n  // does need the fullscreen anchor flip; the morph is masked by the host page\n  // there anyway.\n  // Also exposes the customer's primary color as a CSS custom property so the\n  // stylesheet's `var(--voice-widget-primary)` references (focus rings, hangup\n  // ring, trigger gradient/glow) all follow the brand.\n  const wrapperStyle = {\n    ...(isMobile && state.isOpen ? openPositionStyles : closedPositionStyles),\n    [\"--voice-widget-primary\" as string]: primaryColor,\n  } as unknown as React.CSSProperties;\n\n  return (\n    <div\n      className={`voice-widget ${isMobile && state.isOpen ? \"voice-widget-mobile\" : \"\"}`}\n      data-position={position}\n      data-theme={themeAttribute}\n      ref={containerRef}\n      style={wrapperStyle}\n    >\n      <MotionConfig reducedMotion=\"user\">\n        <LayoutGroup>\n          <AnimatePresence initial={false} mode=\"popLayout\">\n            {state.isOpen ? stage : trigger}\n          </AnimatePresence>\n        </LayoutGroup>\n      </MotionConfig>\n    </div>\n  );\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { MOBILE_BREAKPOINT } from \"../constants\";\n\ninterface ViewportState {\n  width: number;\n  height: number;\n  isMobile: boolean;\n}\n\n/**\n * Hook to detect viewport size and mobile state.\n * Used for responsive widget behavior (full-screen on mobile).\n */\nexport function useViewport(): ViewportState {\n  const [state, setState] = useState<ViewportState>(() => ({\n    width: typeof window !== \"undefined\" ? window.innerWidth : 0,\n    height: typeof window !== \"undefined\" ? window.innerHeight : 0,\n    isMobile: typeof window !== \"undefined\" ? window.innerWidth <= MOBILE_BREAKPOINT : false,\n  }));\n\n  const handleResize = useCallback(() => {\n    setState({\n      width: window.innerWidth,\n      height: window.innerHeight,\n      isMobile: window.innerWidth <= MOBILE_BREAKPOINT,\n    });\n  }, []);\n\n  useEffect(() => {\n    // Set initial state\n    handleResize();\n\n    window.addEventListener(\"resize\", handleResize);\n    return () => window.removeEventListener(\"resize\", handleResize);\n  }, [handleResize]);\n\n  return state;\n}\n","import { useEffect, useRef } from \"react\";\n\n/**\n * Hook to lock body scroll when the widget is open on mobile.\n * Prevents the parent page from scrolling when the widget modal is displayed.\n *\n * Features:\n * - Preserves scroll position when locking\n * - Restores scroll position when unlocking\n * - Handles scrollbar width to prevent layout shift\n * - Only applies lock logic when enabled (typically on mobile)\n */\nexport function useBodyScrollLock(locked: boolean): void {\n  const scrollPositionRef = useRef(0);\n  const originalStylesRef = useRef<{\n    overflow: string;\n    position: string;\n    top: string;\n    left: string;\n    right: string;\n    width: string;\n  } | null>(null);\n\n  useEffect(() => {\n    if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n      return;\n    }\n\n    const body = document.body;\n\n    if (locked) {\n      // Store current scroll position\n      scrollPositionRef.current = window.scrollY;\n\n      // Store original body styles\n      originalStylesRef.current = {\n        overflow: body.style.overflow,\n        position: body.style.position,\n        top: body.style.top,\n        left: body.style.left,\n        right: body.style.right,\n        width: body.style.width,\n      };\n\n      // Calculate scrollbar width to prevent layout shift\n      const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n      // Apply scroll lock styles\n      body.style.overflow = \"hidden\";\n      body.style.position = \"fixed\";\n      body.style.top = `-${scrollPositionRef.current}px`;\n      body.style.left = \"0\";\n      body.style.right = \"0\";\n      body.style.width = `calc(100% - ${scrollbarWidth}px)`;\n    } else if (originalStylesRef.current) {\n      // Restore original styles\n      body.style.overflow = originalStylesRef.current.overflow;\n      body.style.position = originalStylesRef.current.position;\n      body.style.top = originalStylesRef.current.top;\n      body.style.left = originalStylesRef.current.left;\n      body.style.right = originalStylesRef.current.right;\n      body.style.width = originalStylesRef.current.width;\n\n      // Restore scroll position\n      window.scrollTo(0, scrollPositionRef.current);\n\n      originalStylesRef.current = null;\n    }\n\n    // Cleanup on unmount\n    return () => {\n      if (originalStylesRef.current) {\n        body.style.overflow = originalStylesRef.current.overflow;\n        body.style.position = originalStylesRef.current.position;\n        body.style.top = originalStylesRef.current.top;\n        body.style.left = originalStylesRef.current.left;\n        body.style.right = originalStylesRef.current.right;\n        body.style.width = originalStylesRef.current.width;\n        window.scrollTo(0, scrollPositionRef.current);\n      }\n    };\n  }, [locked]);\n}\n","import \"@livekit/components-styles\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { ErrorBoundary } from \"./components/ErrorBoundary\";\nimport { DEFAULT_Z_INDEX } from \"./constants\";\nimport { I18nProvider } from \"./i18n/I18nContext\";\nimport \"@repo/widget-ui/styles.css\";\nimport \"./styles/widget.css\";\nimport type { WidgetConfig } from \"./types\";\nimport { Widget, type WidgetHandle } from \"./Widget\";\n\n// Resolved config type - locale stays optional to allow browser detection\ntype ResolvedConfig = Omit<Required<WidgetConfig>, \"locale\"> & {\n  locale: WidgetConfig[\"locale\"];\n};\n\n// Internal state\nlet root: Root | null = null;\nlet container: HTMLElement | null = null;\nlet currentConfig: ResolvedConfig | null = null;\nlet widgetRef: WidgetHandle | null = null;\n\n/**\n * Initialize the Voice Widget\n */\nfunction init(config: WidgetConfig): WidgetHandle {\n  // Validate required config\n  if (!config.widgetId) {\n    throw new Error(\"[VoiceWidget] widgetId is required\");\n  }\n  if (!config.apiUrl) {\n    throw new Error(\"[VoiceWidget] apiUrl is required\");\n  }\n\n  // Clean up existing instance\n  if (root && container) {\n    root.unmount();\n    container.remove();\n  }\n\n  // Create container element\n  container = document.createElement(\"div\");\n  container.id = \"voice-widget-container\";\n  container.setAttribute(\"data-voice-widget\", \"true\");\n  document.body.appendChild(container);\n\n  // Generate visitorId if not provided\n  const visitorId = config.visitorId || `visitor-${Date.now()}`;\n\n  // Apply default config (position/offset now come from server)\n  const finalConfig: ResolvedConfig = {\n    widgetId: config.widgetId,\n    apiUrl: config.apiUrl,\n    zIndex: config.zIndex ?? DEFAULT_Z_INDEX,\n    visitorId,\n    metadata: config.metadata ?? {},\n    locale: config.locale,\n    showLanguageSelector: config.showLanguageSelector ?? true,\n  };\n\n  currentConfig = finalConfig;\n\n  // Handle errors at the top level\n  const handleError = (error: Error): void => {\n    console.error(\"[VoiceWidget] Unhandled error:\", error);\n  };\n\n  // Callback to receive widget ref for programmatic control\n  const setWidgetRef = (ref: WidgetHandle | null): void => {\n    widgetRef = ref;\n  };\n\n  // Render widget with error boundary and i18n provider\n  root = createRoot(container);\n  root.render(\n    <ErrorBoundary onError={handleError}>\n      <I18nProvider locale={finalConfig.locale}>\n        <Widget config={finalConfig} onRef={setWidgetRef} />\n      </I18nProvider>\n    </ErrorBoundary>\n  );\n\n  // Return a handle for immediate programmatic control\n  // Note: The actual widgetRef may not be set immediately due to async rendering\n  return {\n    startWithAgent: (agentId: string, mode?: \"voice\" | \"chat\") => {\n      if (!widgetRef) {\n        console.warn(\"[VoiceWidget] Widget still initializing, command queued\");\n        setTimeout(() => widgetRef?.startWithAgent(agentId, mode), 100);\n        return;\n      }\n      widgetRef.startWithAgent(agentId, mode);\n    },\n    startChat: () => {\n      if (!widgetRef) {\n        console.warn(\"[VoiceWidget] Widget still initializing, command queued\");\n        setTimeout(() => widgetRef?.startChat(), 100);\n        return;\n      }\n      widgetRef.startChat();\n    },\n    openChat: () => {\n      if (!widgetRef) {\n        console.warn(\"[VoiceWidget] Widget still initializing, command queued\");\n        setTimeout(() => widgetRef?.openChat(), 100);\n        return;\n      }\n      widgetRef.openChat();\n    },\n    startVoiceCall: () => {\n      if (!widgetRef) {\n        console.warn(\"[VoiceWidget] Widget still initializing, command queued\");\n        setTimeout(() => widgetRef?.startVoiceCall(), 100);\n        return;\n      }\n      widgetRef.startVoiceCall();\n    },\n    getAgentIds: () => widgetRef?.getAgentIds() ?? [],\n    getDefaultAgentId: () => widgetRef?.getDefaultAgentId() ?? null,\n    isOpen: () => widgetRef?.isOpen() ?? false,\n    isConnected: () => widgetRef?.isConnected() ?? false,\n    getCurrentMode: () => widgetRef?.getCurrentMode() ?? null,\n    getCurrentAgentId: () => widgetRef?.getCurrentAgentId() ?? null,\n  };\n}\n\n/**\n * Start a session with a specific agent\n * @param agentId - UUID of the agent to start with\n * @param mode - Optional interaction mode (\"voice\" or \"chat\")\n */\nfunction startWithAgent(agentId: string, mode?: \"voice\" | \"chat\"): void {\n  if (!widgetRef) {\n    console.error(\"[VoiceWidget] Widget not initialized. Call init() first.\");\n    return;\n  }\n  widgetRef.startWithAgent(agentId, mode);\n}\n\n/**\n * Start a chat session with the default agent\n */\nfunction startChat(): void {\n  if (!widgetRef) {\n    console.error(\"[VoiceWidget] Widget not initialized. Call init() first.\");\n    return;\n  }\n  widgetRef.startChat();\n}\n\n/**\n * Open the widget in chat mode, the same as clicking the launcher: the\n * overview screen when the widget has one, otherwise the chat itself\n */\nfunction openChat(): void {\n  if (!widgetRef) {\n    console.error(\"[VoiceWidget] Widget not initialized. Call init() first.\");\n    return;\n  }\n  widgetRef.openChat();\n}\n\n/**\n * Start a voice call session with the default agent\n */\nfunction startVoiceCall(): void {\n  if (!widgetRef) {\n    console.error(\"[VoiceWidget] Widget not initialized. Call init() first.\");\n    return;\n  }\n  widgetRef.startVoiceCall();\n}\n\n/**\n * Get list of available agent IDs\n */\nfunction getAgentIds(): string[] {\n  return widgetRef?.getAgentIds() ?? [];\n}\n\n/**\n * Get the default agent ID\n */\nfunction getDefaultAgentId(): string | null {\n  return widgetRef?.getDefaultAgentId() ?? null;\n}\n\n/**\n * Check if widget is currently open\n */\nfunction isOpen(): boolean {\n  return widgetRef?.isOpen() ?? false;\n}\n\n/**\n * Check if widget is currently connected\n */\nfunction isConnected(): boolean {\n  return widgetRef?.isConnected() ?? false;\n}\n\n/**\n * Destroy the widget instance\n */\nfunction destroy(): void {\n  if (root && container) {\n    root.unmount();\n    container.remove();\n    root = null;\n    container = null;\n    currentConfig = null;\n    widgetRef = null;\n  }\n}\n\n/**\n * Get current configuration (for debugging)\n */\nfunction getConfig(): ResolvedConfig | null {\n  return currentConfig;\n}\n\n// Type definitions for the global VoiceWidget object\ninterface VoiceWidgetAPI {\n  init: (config: WidgetConfig) => WidgetHandle;\n  destroy: () => void;\n  getConfig: () => ResolvedConfig | null;\n  startWithAgent: (agentId: string, mode?: \"voice\" | \"chat\") => void;\n  startChat: () => void;\n  openChat: () => void;\n  startVoiceCall: () => void;\n  getAgentIds: () => string[];\n  getDefaultAgentId: () => string | null;\n  isOpen: () => boolean;\n  isConnected: () => boolean;\n  _loaded: boolean;\n  _q?: Array<\n    [\"init\", WidgetConfig] | [\"destroy\"] | [\"startWithAgent\", string, (\"voice\" | \"chat\")?] | [\"startChat\"] | [\"openChat\"] | [\"startVoiceCall\"]\n  >;\n}\n\n// Expose to window for script tag usage\nconst VoiceWidget: VoiceWidgetAPI = {\n  init,\n  destroy,\n  getConfig,\n  startWithAgent,\n  startChat,\n  openChat,\n  startVoiceCall,\n  getAgentIds,\n  getDefaultAgentId,\n  isOpen,\n  isConnected,\n  _loaded: true,\n};\n\n// Declare global type\ndeclare global {\n  interface Window {\n    VoiceWidget: VoiceWidgetAPI;\n  }\n}\n\n// Process any queued commands from loader script\nfunction processQueue(): void {\n  const existingWidget = window.VoiceWidget as VoiceWidgetAPI | undefined;\n  const queue = existingWidget?._q;\n\n  if (queue && Array.isArray(queue)) {\n    for (const command of queue) {\n      const [action, ...args] = command;\n      if (action === \"init\" && args[0]) {\n        init(args[0] as WidgetConfig);\n      } else if (action === \"destroy\") {\n        destroy();\n      } else if (action === \"startWithAgent\" && args[0]) {\n        startWithAgent(args[0] as string, args[1] as \"voice\" | \"chat\");\n      } else if (action === \"startChat\") {\n        startChat();\n      } else if (action === \"openChat\") {\n        openChat();\n      } else if (action === \"startVoiceCall\") {\n        startVoiceCall();\n      }\n    }\n    existingWidget._q = undefined;\n  }\n}\n\n// Auto-initialize from script data attributes\nfunction autoInit(): void {\n  const scripts = document.querySelectorAll<HTMLScriptElement>('script[src*=\"voice-widget\"]');\n  const currentScript = Array.from(scripts).at(-1);\n\n  if (!currentScript) return;\n\n  const widgetId = currentScript.dataset.widgetId;\n  if (!widgetId) return;\n\n  const config: WidgetConfig = {\n    widgetId,\n    apiUrl: currentScript.dataset.apiUrl || \"https://api.verbu.com\",\n    zIndex: currentScript.dataset.zIndex ? Number.parseInt(currentScript.dataset.zIndex, 10) : undefined,\n    locale: currentScript.dataset.locale,\n    showLanguageSelector: currentScript.dataset.showLanguageSelector !== \"false\",\n  };\n\n  init(config);\n}\n\n// Install the widget API and process queue\nwindow.VoiceWidget = VoiceWidget;\nprocessQueue();\nautoInit();\n\nexport {\n  VoiceWidget,\n  init,\n  destroy,\n  getConfig,\n  startWithAgent,\n  startChat,\n  openChat,\n  startVoiceCall,\n  getAgentIds,\n  getDefaultAgentId,\n  isOpen,\n  isConnected,\n};\nexport default VoiceWidget;\n"],"names":["jsxRuntimeModule","exports","REACT_ELEMENT_TYPE","Symbol","for","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","ref","$$typeof","props","reactJsxRuntime_production","Fragment","jsx","jsxs","require$$0","schedulerModule","push","heap","node","index","length","a","parentIndex","parent","compare","peek","pop","first","last","halfLength","leftIndex","left","rightIndex","right","b","diff","sortIndex","id","unstable_now","performance","now","localPerformance","localDate","Date","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","setTimeout","localClearTimeout","clearTimeout","localSetImmediate","setImmediate","advanceTimers","currentTime","timer","callback","startTime","expirationTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","channel","port","port2","port1","onmessage","postMessage","ms","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","task","unstable_forceFrameRate","fps","console","error","Math","floor","unstable_getCurrentPriorityLevel","unstable_next","eventHandler","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","options","delay","timeout","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","apply","this","arguments","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","MAYBE_ITERATOR_SYMBOL","iterator","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","assign","Object","emptyObject","Component","context","updater","refs","ComponentDummy","PureComponent","prototype","isReactComponent","setState","partialState","Error","forceUpdate","pureComponentPrototype","constructor","isPureReactComponent","isArrayImpl","Array","isArray","ReactSharedInternals","H","A","T","S","V","hasOwnProperty","ReactElement","self","source","owner","isValidElement","object","userProvidedKeyEscapeRegex","getElementKey","element","escaperLookup","replace","match","toString","noop$1","mapIntoArray","children","array","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","_init","_payload","c","maybeIterable","nextNamePrefix","i","call","next","done","value","then","thenable","status","reason","fulfilledValue","resolveThenable","String","keys","join","mapChildren","func","result","count","child","lazyInitializer","payload","_status","ctor","_result","moduleObject","default","reportGlobalError","reportError","window","ErrorEvent","event","bubbles","cancelable","message","dispatchEvent","process","emit","noop","react_production","Children","map","forEach","forEachFunc","forEachContext","n","toArray","only","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","__COMPILER_RUNTIME","__proto__","size","useMemoCache","cache","fn","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createElement","childrenLength","defaultProps","createRef","current","forwardRef","render","lazy","memo","startTransition","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","action","initialState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","create","createDeps","update","dispatcher","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","init","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","version","reactModule","React","formatProdErrorMessage","code","url","encodeURIComponent","Internals","d","f","r","D","C","L","m","X","M","p","findDOMNode","getCrossOriginStringAs","as","input","reactDom_production","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","createPortal","container","nodeType","containerInfo","implementation","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","href","crossOrigin","prefetchDNS","preinit","integrity","fetchPriority","precedence","nonce","preinitModule","preload","referrerPolicy","imageSrcSet","imageSizes","media","preloadModule","requestFormReset","form","unstable_batchedUpdates","useFormState","useFormStatus","useHostTransitionStatus","Scheduler","require$$1","ReactDOM","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","err","reactDomModule","isValidContainer","getNearestMountedFiber","fiber","nearestMounted","alternate","return","flags","tag","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentHostFiberImpl","sibling","REACT_LEGACY_ELEMENT_TYPE","REACT_PROVIDER_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","getIteratorFn","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","name","innerType","x","ReactDOMSharedInternals","sharedNotPendingObject","pending","data","method","valueStack","createCursor","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","log","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","LN2","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","root","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$6","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","randomKey","random","slice","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","parentNode","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","Map","hoistableScripts","markNodeAsHoistable","allNativeEvents","Set","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","add","prefix","suffix","VALID_ATTRIBUTE_NAME_REGEX","RegExp","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","attributeName","test","removeAttribute","prefix$8","toLowerCase","setAttribute","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","describeBuiltInComponentFrame","stack","trim","indexOf","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","defineProperty","set","Reflect","control","x$9","x$10","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","configurable","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","split","controlLines","includes","frame","describeFiber","getStackByFiberInDevAndProd","workInProgress","info","getToStringValue","isCheckable","elem","nodeName","track","_valueTracker","valueField","descriptor","currentValue","get","enumerable","getValue","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","checked","getActiveElement","doc","document","activeElement","body","e","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","ch","charCodeAt","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","selected","defaultSelected","disabled","updateTextarea","initTextarea","textContent","setTextContent","text","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","style","styleName","isCustomProperty","setProperty","cssFloat","has","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","nativeEvent","target","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","addEventListener","removeEventListener","startText","fallbackText","getData","start","end","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","view","detail","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","fromCharCode","location","repeat","locale","which","SyntheticPointerEvent","pointerId","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","newState","oldState","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","color","date","datetime","email","month","number","password","range","search","tel","time","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","listeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$282","isSupported$jscomp$inline_417","element$jscomp$inline_418","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","is","y","shallowEqual","objA","objB","keysA","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","offset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","contains","compareDocumentPosition","getActiveElementDeep","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","CapturedStacks","WeakMap","createCapturedValueAtFiber","existing","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","queue","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","mode","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","fiberTag","hostContext","itemProp","rel","onLoad","onError","async","src","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","content","createFiberFromPortal","portal","pendingChildren","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratable","isSingletonScope","previousHydratableOnEnteringScopedSingleton","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","list","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","signal","aborted","listener","abort","scheduleCallback$2","NormalPriority","CacheContext","createCache","controller","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","entangledListeners","requestTransitionLane","resolve","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","shellSuspendCounter","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","rejectedReason","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","clone","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter$1","thenableState$1","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","basicStateReducer","state","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$32","revertLane","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffectImpl","subscribeToStore","bind","pushSimpleEffect","destroy","resource","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$38","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","mountEffect","updateEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","concat","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","previousPriority","thenableWithOverride","dispatchSetStateInternal","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","updateId","updateRefresh","refreshCache","provider","root$41","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","identifierPrefix","booleanOrThenable","thenableIndexCounter","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","fragment","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","delete","reconcileChildrenArray","step","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","row","isSuspenseInstanceFallback","revealOrder","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","markRef","replayFunctionComponent","updateClassComponent","contextType","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","JSCompiler_temp$jscomp$0","nextInstance","overflow","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","_pendingMarkers","_retryCache","_transitions","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","beginWork","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","lazyComponent","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","hasAttribute","getAttribute","title","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","markUpdate","preloadResourceAndSuspendIfNeeded","loading","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$113","bubbleProperties","completedWork","didBailout","newChildLanes","child$114","completeWork","pendingContext","createElementNS","innerHTML","removeChild","appendChild","autoFocus","createTextNode","cache$127","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$143","commitHostMount","focus","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$205","propKey$221","propKey$226","propKey$231","setPropOnCustomElement","propKey$236","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","before","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$142","commitSuspenseHydrationCallbacks","readyState","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearSuspenseBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","head","querySelector","maybeNodes","getHydratableHoistableCache","splice","property","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","display","hostParentFiber","parent$144","parent$146","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendedState","matchMedia","matches","getStyleKey","getStylesheetSelectorFromKey","_p","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","Promise","reject","onload","onerror","stylesheets","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","Infinity","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$169","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","unsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$4","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$2","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$167","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","cause","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$5","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","min","win","start$jscomp$0","end$jscomp$0","extend","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","wasDelayedCommit","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$174","performSyncWorkOnRoot","currentPopstateTransitionEvent","shouldAttemptEagerTransition","prev","scheduleTaskForRootDuringMicrotask","index$3","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","i$jscomp$inline_1528","eventName$jscomp$inline_1529","toUpperCase","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","char","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","unshift","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","__html","muted","isNaN","endsWith","hasSrc","hasSrcSet","propValue$188","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","possiblePreambleContribution","depth","nextNode","nextNode$jscomp$0","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","getRootNode","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","globalDocument","preloadSelector","getScriptKey","getScriptSelectorFromKey","scripts","adoptPreloadPropsForScript","link","insertStylesheet","limitedEscapedHref","currentProps","preloadProps","styles$244","resource$245","hrefLang","rawProps","styleProps","instance$250","nodes","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","priority","runWithPriority","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","shift","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1785","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2256","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","hook$jscomp$inline_2257","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","unstable_transitionCallbacks","hydrateRoot","clientModule","DEFAULT_PRIMARY_COLOR","DEFAULT_OFFSET","STAGE_SPRING","stiffness","damping","DEFAULT_UI_CONFIG","collapsed","showLogo","showTitle","cta","expanded","showHeader","showAvatar","showPoweredBy","chat","welcomeMessage","inputPlaceholder","showTimestamps","voice","showTranscript","avatarSize","feedback","enabled","collectTextFeedback","ErrorBoundary","super","__publicField","hasError","_b","_a","primaryColor","className","fill","stroke","strokeWidth","viewBox","cx","cy","x1","x2","y1","y2","handleRetry","backgroundColor","dictionaries","en","da","de","es","fr","it","nl","pt","pl","sv","getDictionary","isValidLocale","LOCALE_STORAGE_KEY","I18nContext","getInitialLocale","localeProp","saved","localStorage","getItem","navigator","browserLang","language","detectLocale","I18nProvider","setLocaleState","setLocale","newLocale","setItem","t","useTranslations","_mergeNamespaces","k","freeze","o","s","writable","h","_","_locking","_locks","isLocked","lock","l","assert","condition","msg","assertInt32","arg","Number","isInteger","assertUInt32","assertFloat32","isFinite","enumTypeSymbol","getEnumType","enumObject","setEnumType","typeName","values","opt","makeEnumType","v","no","localName","_opt","names","numbers","normalValues","normalizeEnumValue","findName","findNumber","makeEnum","Message","equals","other","getType","runtime","util","fromBinary","bytes","format","bin","makeReadOptions","readMessage","readerFactory","byteLength","fromJson","jsonValue","json","fromJsonString","jsonString","JSON","parse","toBinary","makeWriteOptions","writer","writerFactory","writeMessage","finish","toJson","toJsonString","stringify","prettySpaces","toJSON","emitDefaultValues","getPrototypeOf","varint64read","lowBits","highBits","buf","pos","assertBounds","middleByte","varint64write","lo","hi","hasNext","byte","splitBits","hasMoreBits","TWO_PWR_32_DBL","int64FromString","dec","minus","base","add1e6digit","begin","digit1e6","negate","newBits","uInt64ToString","_toUnsigned","toUnsigned","mid","high","digitA","digitB","digitC","decimalFrom1e7WithLeadingZeros","digit1e7","partial","varint32write","varint32read","readBytes","protoInt64","dv","DataView","ArrayBuffer","BigInt","getBigInt64","getBigUint64","setBigInt64","setBigUint64","env","BUF_BIGINT_DISABLE","MIN","MAX","UMIN","UMAX","zero","supported","bi","uParse","enc","getInt32","uEnc","setInt32","uDec","assertInt64String","assertUInt64String","bits","negative","int64ToString","makeInt64Support","ScalarType","LongType","WireType","scalarEquals","BYTES","Uint8Array","UINT64","FIXED64","INT64","SFIXED64","SINT64","scalarZeroValue","longType","BOOL","DOUBLE","FLOAT","STRING","isScalarZeroValue","_arrayLikeToArray","_defineProperty","toPrimitive","TypeError","_toPrimitive","_toPropertyKey","_slicedToArray","_arrayWithHoles","u","_iterableToArrayLimit","from","_unsupportedIterableToArray","_nonIterableRest","BinaryWriter","textEncoder","TextEncoder","chunks","len","fork","chunk","uint32","raw","fieldNo","int32","bool","string","encode","float","buffer","setFloat32","double","setFloat64","fixed32","setUint32","sfixed32","sint32","sfixed64","tc","fixed64","int64","sint64","sign","uint64","BinaryReader","textDecoder","varint64","byteOffset","TextDecoder","wireType","skip","Varint","Bit64","Bit32","LengthDelimited","StartGroup","_this$tag2","wt","EndGroup","subarray","RangeError","zze","_this$varint2","_this$varint4","getUint32","getFloat32","getFloat64","decode","createExtensionContainer","extension","field","ext","repeated","kind","fieldWrapper","unwrapField","initExtensionField","encTable","decTable","protoBase64","base64Str","bytePos","groupPos","base64","getExtension","assertExtendee","ufs","unknownFields","filter","uf","filterUnknownFields","listUnknownFields","_createExtensionConta2","readField","setExtension","readOpt","writeOpt","hasExtension","discardUnknownFields","onUnknownField","writeField","reader","_reader$tag2","messageType","extendee","find","isFieldSet","oneof","case","req","clearField","implicitPresence","isMessage","getOwnPropertyNames","every","actualType","wrapField","INT32","UINT32","jsonReadDefaults","ignoreUnknownFields","jsonWriteDefaults","enumAsInteger","useProtoFieldName","makeReadOptions$1","makeWriteOptions$1","tokenNull","tokenIgnoredUnknownEnum","debugJsonValue","readField$1","parentType","targetArray","jsonItem","enumValue","readEnum","readScalar$1","targetMap","_ref3","entries","_ref4","jsonMapKey","jsonMapValue","readMapKey","K","BIGINT","scalarValue","nullAsZeroValue","NaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","FIXED32","SFIXED32","SINT32","long","uLong","canEmitFieldDefaultValue","writeField$1","jsonObj","_ref5","_ref6","entryKey","entryValue","writeScalar$1","_ref7","_ref8","enumType","_ref9","_ref0","writeEnum","jsonArr","val","unknownFieldsSymbol","readDefaults","readUnknownFields","writeDefaults","writeUnknownFields","scalarType","read","readScalar","readScalarLTString","arr","readMessageField","_readMapEntry","readMapEntry","_readMapEntry2","mapKey","mapVal","delimited","packed","scalarTypeInfo","writePacked","item","writeScalar","writeMessageField","_ref","_ref2","writeMapEntry","keyValue","parseInt","_scalarTypeInfo2","cloneSingularField","toU8Arr","InternalFieldList","fields","normalizer","_fields","_normalizer","findJsonName","jsonName","jsonNames","all","byNumber","numbersAsc","sort","byMember","members","localFieldName","protoName","inOneof","protoCamelCase","safeObjectProperty","safeMessageProperty","fieldJsonName","snakeCase","capNext","charAt","reservedObjectProperties","reservedMessageProperties","InternalOneofInfo","addField","findField","_lookup","proto3","newFieldList","fieldInfos","_c","_d","_e","_f","ooname","normalizeFieldInfos","initFields","member","syntax","oneofSeen","registry","typeRegistry","jsonKey","seen","found","findExtension","startsWith","substring","findExtensionFor","debug","lengthOrEndTagFieldNo","delimitedMessageEncoding","initPartial","sk","sourceField","copy","mt","va","vb","any","makeMessageType","lastIndexOf","setPrototypeOf","makeExtension","fi","Timestamp","seconds","nanos","z","nanosStr","toISOString","toDate","ceil","fromDate","getTime","MetricsBatch","TimeSeriesMetric","EventMetric","MetricSample","BackupCodecPolicy$1","TrackType","TrackSource","VideoQuality$1","ConnectionQuality$1","ClientConfigSetting","DisconnectReason","ReconnectReason","SubscriptionError","AudioTrackFeature","PacketTrailerFeature","Room$1","Codec","TimedVersion","ParticipantPermission","ParticipantInfo","ParticipantInfo_State","TrackInfo","ParticipantInfo_Kind","ParticipantInfo_KindDetail","DataTrackInfo$1","Encryption_Type","SimulcastCodecInfo","VideoLayer","VideoLayer_Mode","DataTrackSubscriptionOptions","DataPacket","DataPacket_Kind","UserPacket","ActiveSpeakerUpdate","SipDTMF","Transcription","ChatMessage","RpcRequest","RpcAck","RpcResponse","DataStream_Header","DataStream_Chunk","DataStream_Trailer","EncryptedPacket","EncryptedPacketPayload","SpeakerInfo","TranscriptionSegment","RpcError$1","ParticipantTracks","ServerInfo","ServerInfo_Edition","ClientInfo","ClientInfo_SDK","ClientInfo_Capability","ClientConfiguration","VideoConfiguration","DisabledCodecs","DataStream_OperationType","DataStream_TextHeader","DataStream_ByteHeader","SubscribedAudioCodec","SignalTarget","StreamState","CandidateProtocol","SignalRequest","SessionDescription","TrickleRequest","AddTrackRequest","MuteTrackRequest","UpdateSubscription","UpdateTrackSettings","LeaveRequest","UpdateVideoLayers","SubscriptionPermission","SyncState","SimulateScenario","UpdateParticipantMetadata","Ping","UpdateLocalAudioTrack","UpdateLocalVideoTrack","PublishDataTrackRequest","UnpublishDataTrackRequest","UpdateDataSubscription","SignalResponse","JoinResponse","ParticipantUpdate","TrackPublishedResponse","SpeakersChanged","RoomUpdate","ConnectionQualityUpdate","StreamStateUpdate","SubscribedQualityUpdate","SubscriptionPermissionUpdate","TrackUnpublishedResponse","ReconnectResponse","Pong","SubscriptionResponse","RequestResponse","TrackSubscribed","RoomMovedResponse","MediaSectionsRequirement","SubscribedAudioCodecUpdate","PublishDataTrackResponse","UnpublishDataTrackResponse","DataTrackSubscriberHandles","SimulcastCodec","DataTrackSubscriberHandles_PublishedDataTrack","ICEServer","UpdateDataSubscription_Update","LeaveRequest_Action","RegionSettings","ConnectionQualityInfo","StreamStateInfo","SubscribedQuality","SubscribedCodec","TrackPermission","DataChannelInfo","DataChannelReceiveState","RegionInfo","RequestResponse_Reason","ConnectionSettings","JoinRequest","WrappedJoinRequest","WrappedJoinRequest_Compression","getDefaultExportFromCjs","__esModule","hasRequiredLoglevel","loglevel$1","module","definition","LogLevel","LoggerNames","loglevelExports","undefinedType","isIE","userAgent","logMethods","_loggersByName","defaultLogger","bindMethod","obj","methodName","Function","traceForIE","trace","replaceLoggingMethods","level","getLevel","methodFactory","levels","SILENT","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","realMethod","Logger","factory","inheritedLevel","defaultLevel","userLevel","storageKey","getPersistedLevel","storedLevel","ignore","cookie","cookieName","exec","normalizeLevel","TRACE","DEBUG","INFO","WARN","ERROR","setLevel","levelNum","levelName","persistLevelIfPossible","setDefaultLevel","resetLevel","removeItem","clearPersistedLevel","enableAll","disableAll","rebuild","childName","initialLevel","getLogger","logger","_log","noConflict","getLoggers","livekitLogger","Default","ctxFn","wrap","extra","ctx","merged","proxy","warn","wrapWithContext","workerLogger","E2EE","maxRetryDelay","DEFAULT_RETRY_DELAYS_IN_MS","__awaiter","thisArg","_arguments","P","generator","fulfilled","rejected","__values","__await","__asyncGenerator","asyncIterator","g","q","AsyncIterator","verb","resume","fulfill","settle","__asyncValues","SuppressedError","hasRequiredEvents","eventsExports","ReflectOwnKeys","R","ReflectApply","receiver","args","ownKeys","getOwnPropertySymbols","NumberIsNaN","EventEmitter","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","that","_addListener","prepend","warning","newListener","warned","w","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","wrapListener","setMaxListeners","getMaxListeners","doError","er","addListener","prependListener","prependOnceListener","position","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","requireEvents","logDisabled_","deprecationWarnings_","extractVersion","uastring","expr","parseFloat","wrapPeerConnectionEvent","eventNameToWrap","wrapper","RTCPeerConnection","EventTarget","log$4","proto","nativeAddEventListener","nativeEventName","cb","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","disableLog","disableWarnings","deprecated","oldMethod","newMethod","isObject$1","compactObject","reduce","accumulator","isObj","isEmptyObject","walkStats","stats","resultSet","filterStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","trackId","logging","shimGetUserMedia$2","browserDetails","mediaDevices","constraintsToChrome_","mandatory","optional","cc","ideal","exact","max","oldname_","oc","mix","advanced","shimConstraints_","constraints","audio","remap","video","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","enumerateDevices","devices","dev","some","label","deviceId","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","getUserMedia","onSuccess","webkitGetUserMedia","origGetUserMedia","cs","stream","getAudioTracks","getVideoTracks","getTracks","stop","DOMException","shimMediaStream","MediaStream","webkitMediaStream","shimOnTrack$1","_ontrack","origSetRemoteDescription","setRemoteDescription","_ontrackpoly","te","getReceivers","Event","transceiver","streams","shimGetSendersWithDtmf","shimSenderWithDtmf","pc","dtmf","_dtmf","createDTMFSender","_pc","getSenders","_senders","origAddTrack","addTrack","sender","origRemoveTrack","removeTrack","idx","origAddStream","addStream","origRemoveStream","removeStream","RTCRtpSender","origGetSenders","senders","shimSenderReceiverGetStats","RTCRtpReceiver","getStats","origGetReceivers","receivers","origGetStats","MediaStreamTrack","shimAddTrackRemoveTrackWithNative","getLocalStreams","_shimmedLocalStreams","streamId","existingSenders","newSenders","newSender","shimAddTrackRemoveTrack","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","replaceInternalStreamId","description","sdp","internalId","externalStream","internalStream","RTCSessionDescription","signalingState","oldStream","nativeMethod","methodObj","desc","origSetLocalDescription","setLocalDescription","replaceExternalStreamId","origLocalDescription","streamid","shimPeerConnection$1","webkitRTCPeerConnection","RTCIceCandidate","fixNegotiationNeeded","getConfiguration","sdpSemantics","chromeShim","shimGetUserMedia","shimOnTrack","shimPeerConnection","shimGetUserMedia$1","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","RTCTrackEvent","mozRTCPeerConnection","shimGetStats","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","localcandidate","remotecandidate","nativeGetStats","selector","onSucc","onErr","stat","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","DataChannel","RTCDataChannel","shimAddTransceiver","origAddTransceiver","addTransceiver","setParametersPromises","sendEncodings","shouldPerformCheck","encodingParam","rid","scaleResolutionDownBy","maxFramerate","params","getParameters","encodings","setParameters","shimGetParameters","origGetParameters","shimCreateOffer","origCreateOffer","createOffer","finally","shimCreateAnswer","origCreateAnswer","createAnswer","firefoxShim","shimGetDisplayMedia","preferredMediaSource","getDisplayMedia","mediaSource","shimLocalStreamsAPI","_localStreams","_addTrack","_len","_key","tracks","shimRemoteStreamsAPI","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","shimCallbacksAPI","addIceCandidate","successCallback","failureCallback","promise","withCallback","candidate","_getUserMedia","shimConstraints","errcb","shimRTCIceServerUrls","OrigPeerConnection","pcConfig","pcConstraints","iceServers","newIceServers","server","urls","generateCertificate","shimTrackEventTransceiver","shimCreateOfferLegacy","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","direction","setDirection","offerToReceiveVideo","videoTransceiver","shimAudioContext","AudioContext","webkitAudioContext","hasRequiredSdp","safariShim","sdp$1","sdpExports","SDPUtils","localCName","generateIdentifier","splitLines","blob","line","splitSections","part","getDescription","sections","getMediaSections","matchPrefix","parseCandidate","parts","foundation","component","protocol","ip","address","relatedAddress","relatedPort","tcpType","ufrag","usernameFragment","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","codec","preferredPayloadType","parseExtmap","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mediaSection","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","writeIceParameters","iceLite","parseRtpParameters","codecs","headerExtensions","fecMechanisms","rtcp","mline","profile","rtpmapline","fmtps","wildcardRtcpFb","existingFeedback","writeRtpDescription","caps","maxptime","parseRtpEncodingParameters","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","parseMLine","maxSizeLine","maxMessageSize","sctpPort","fmt","sctpMapLines","writeSctpDescription","sctp","output","generateSessionId","substr","writeSessionBoilerplate","sessId","sessVer","sessUser","sessionId","getDirection","getKind","isRejected","parseOLine","username","sessionVersion","netType","addressType","isValidSDP","shimRTCIceCandidate","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","sdpMid","sdpMLineIndex","shimRTCIceCandidateRelayProtocol","relayProtocol","shimMaxMessageSize","_sctp","browser","mLine","sctpInDescription","isFirefox","getRemoteFirefoxVersion","canSendMMS","remoteIsFirefox","canSendMaxMessageSize","getCanSendMaxMessageSize","remoteMMS","getMaxMessageSize","shimSendThrowTypeError","wrapDcSend","dc","origDataChannelSend","send","origCreateDataChannel","createDataChannel","dataChannel","shimConnectionState","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","removeExtmapAllowMixed","_safariVersion","nativeSRD","shimAddIceCandidateNullOrEmpty","nativeAddIceCandidate","shimParameterlessSetLocalDescription","nativeSetLocalDescription","commonShim","shimChrome","shimFirefox","shimSafari","userAgentData","brands","chromium","brand","mozGetUserMedia","isSecureContext","supportsUnifiedPlan","RTCRtpTransceiver","detectBrowser","adapter","browserShim","adapterFactory","TypedPromise","executor","onrejected","race","commonVersionIdentifier","getBrowser","force","ua","browsersList","describe","getMatch","os","osVersion","getOSVersion","exp","LivekitError","LivekitReasonedError","ConnectionErrorReason","DataStreamErrorReason","MediaDeviceFailure","RoomEvent","ParticipantEvent","EngineEvent","TrackEvent","ConnectionError","reasonName","notAllowed","NotAllowed","Timeout","leaveRequest","internal","InternalError","cancelled","Cancelled","serverUnreachable","ServerUnreachable","websocket","WebSocket","serviceNotFound","serviceName","ServiceNotFound","DeviceUnsupportedError","TrackInvalidError","UnsupportedServer","UnexpectedConnectionState","NegotiationError","PublishDataError","PublishTrackError","SignalRequestError","DataStreamError","SignalReconnectError","getFailure","NotFound","PermissionDenied","DeviceInUse","Other","CriticalTimers","setInterval","clearInterval","VideoPreset","widthOrOptions","aspectRatio","encoding","resolution","frameRate","backupVideoCodecs","videoCodecs","isBackupVideoCodec","backup","isBackupCodec","BackupCodecPolicy","AudioPresets","telephone","speech","music","musicStereo","musicHighQuality","musicHighQualityStereo","VideoPresets","h90","h180","h216","h360","h540","h720","h1080","h1440","h2160","VideoPresets43","h120","h240","h480","ScreenSharePresets","h360fps3","h360fps15","h720fps5","h720fps15","h720fps30","h1080fps15","h1080fps30","original","mergeDefaultOptions","audioDefaults","videoDefaults","_extractProcessorsFro","extractProcessorsFromOptions","optionsWithoutProcessor","audioProcessor","videoProcessor","defaultAudioProcessor","processor","defaultVideoProcessor","clonedOptions","mergeObjectWithoutOverwriting","mainObject","objectToMerge","constraintsForOptions","videoOptions","detectSilence","track_1","timeOffset","getNewAudioContext","analyser","createAnalyser","fftSize","bufferLength","frequencyBinCount","dataArray","createMediaStreamSource","mediaStreamTrack","connect","sleep","getByteTimeDomainData","someNoise","close","audioContext","latencyHint","handleResume","kindToSource","Track","Source","Microphone","Camera","Unknown","sourceToKind","mimeTypeToVideoCodecString","mimeType","getTrackPublicationInfo","infos","cid","mediaStreamID","trackInfo","getLogContextFromTrack","trackID","sid","isMuted","streamID","streamTrackID","trackSid","isEnabled","trackName","encrypted","isEncrypted","newOptions","structuredClone","areDimensionsSmaller","recycledElements","VideoQuality","streamState","_streamState","setStreamState","mediaTrack","loggerOptions","attachedElements","Active","isInBackground","_currentBitrate","appVisibilityChangedListener","backgroundTimeout","visibilityState","handleAppVisibilityChanged","loggerName","loggerContextCb","_mediaStreamTrack","_mediaStreamID","logContext","currentBitrate","attach","Kind","Video","addAppVisibilityListener","parentElement","attachToElement","allMediaStreamTracks","srcObject","hasAudio","tr","play","AudioPlaybackStarted","VideoPlaybackStarted","AudioPlaybackFailed","VideoPlaybackFailed","ElementAttached","detach","detachTrack","recycleElement","ElementDetached","detached","elm","removeAppVisibilityListener","stopMonitor","enable","disable","monitorInterval","timeSyncHandle","cancelAnimationFrame","updateLoggerOptions","HTMLAudioElement","shouldCache","pause","el","isWeb","mediaStream","existingTracks","et","isSafari","HTMLVideoElement","autoplay","playsInline","isFireFox","StreamState$1","kindToProto","Audio","AUDIO","VIDEO","DATA","kindFromProto","sourceToProto","CAMERA","MICROPHONE","ScreenShare","SCREEN_SHARE","ScreenShareAudio","SCREEN_SHARE_AUDIO","UNKNOWN","sourceFromProto","streamStateFromProto","ACTIVE","PAUSED","Paused","ddExtensionURI","duration","supportsTransceiver","supportsAddTrack","isSVCCodec","supportsSetSinkId","isSafariBased","isScriptTransformSupportedForWorker","RTCRtpScriptTransform","isChromiumBased","isMobile","mobile","isReactNative","product","isCloud","serverUrl","hostname","extractProjectFromUrl","getLKReactNativeInfo","global","LiveKitReactNativeGlobal","getReactNativeOs","platform","getDevicePixelRatio","devicePixelRatio","compareVersions","v1","v2","parts1","parts2","p1","p2","roDispatchCallback","entry","handleResize","ioDispatchCallback","handleVisibilityChanged","resizeObserver","getResizeObserver","ResizeObserver","intersectionObserver","getIntersectionObserver","IntersectionObserver","rootMargin","createDummyVideoStreamTrack","paintContent","canvas","getContext","fillRect","beginPath","arc","PI","closePath","fillStyle","dummyTrack","captureStream","emptyAudioStreamTrack","getEmptyAudioStreamTrack","oscillator","createOscillator","gain","createGain","setValueAtTime","dst","createMediaStreamDestination","_dst$stream$getAudioT2","Future","isResolved","_isResolved","futureBase","onFinally","unwrapConstraint","toHttpUrl","getDisconnectReasonFromConnectionError","CLIENT_INITIATED","USER_REJECTED","JOIN_FAILURE","UNKNOWN_REASON","bigIntToNumber","numberToBigInt","isLocalTrack","isLocal","isAudioTrack","isVideoTrack","isLocalVideoTrack","isLocalAudioTrack","isRemoteTrack","isRemotePub","pub","isRemoteVideoTrack","isCompressionStreamSupported","CompressionStream","createRtcUrl","searchParams","useV0Path","v0Url","urlObj","URL","toWebsocketUrl","appendUrlPath","createV0RtcUrl","ensureTrailingSlash","path","pathname","parseSignalResponse","E2EE_FLAG","KeyProviderEvent","KeyHandlerEvent","EncryptionEvent","CryptorEvent","CryptorErrorReason","isE2EESupported","isInsertableStreamSupported","createEncodedStreams","shouldUseFrameMetadataScriptTransform","isFrameMetadataSupported","worker","hasFrameMetadataPublishOptions","timestamp","frameId","debounce","waitMilliseconds","timeoutId","isImmediate","maxWait","lastInvokeTime","promises","debouncedFunction","shouldCallNow","timeSinceLastInvocation","nextInvokeTimeout","cancel","monitorFrequency","computeBitrate","currentStats","prevStats","bytesNow","bytesPrev","bytesReceived","bytesSent","RemoteTrack","setMuted","Muted","Unmuted","setMediaStream","onRemoveTrack","playoutDelayHint","Ended","startMonitor","getRTCStatsReport","setPlayoutDelay","delayInSeconds","getPlayoutDelay","monitorReceiver","getSynchronizationSources","registerTimeSyncUpdate","loop","requestAnimationFrame","sources","rtpTimestamp","TimeSyncUpdate","RemoteVideoTrack","adaptiveStreamSettings","elementInfos","getReceiverStats","debouncedHandleResize","updateDimensions","isAdaptiveStream","lookupFrameMetadata","frameMetadataExtractor","lookupMetadata","updateVisibility","elementInfo","HTMLElementInfo","observeElementInfo","observe","stopObservingElementInfo","stopElementInfos","stopObserving","stopObservingElement","detachedElements","getDecoderImplementation","decoderImplementation","receiverStats","codecID","codecId","framesDecoded","framesDropped","framesReceived","packetsReceived","packetsLost","frameWidth","frameHeight","pliCount","firCount","nackCount","jitter","_super","forceEmit","lastVisibilityChange","visibilityChangedAt","backgroundPause","pauseVideoInBackground","isPiPMode","pictureInPicture","isVisible","visible","lastVisible","VisibilityChanged","maxWidth","maxHeight","pixelDensity","getPixelDensity","currentElementWidth","currentElementHeight","lastDimensions","VideoDimensionsChanged","isPiP","isIntersecting","onVisibilityChanged","isElementInPiP","onEnterPiP","documentPictureInPicture","onLeavePiP","isElementInViewport","clientWidth","clientHeight","unobserve","pictureInPictureElement","viewportWindow","offsetTop","offsetLeft","offsetWidth","offsetHeight","hidden","getComputedStyle","offsetParent","pageYOffset","innerHeight","pageXOffset","innerWidth","E2EEManager","dcEncryptionEnabled","decryptDataRequests","encryptDataRequests","onWorkerMessage","ev","_ev$data","uuid","decryptFuture","encryptFuture","EncryptionError","participantIdentity","keyProvider","getKeys","keyInfo","postKey","encryptionEnabled","room","localParticipant","identity","ParticipantEncryptionStatusChanged","participant","getParticipantByIdentity","KeyRatcheted","ratchetResult","keyIndex","handleFrameMetadata","metadata","onWorkerError","dataChannelEncryptionEnabled","isDataChannelEncryptionEnabled","setup","setupEventListeners","keyProviderOptions","getOptions","loglevel","setParticipantCryptorEnabled","postEnable","setSifTrailer","trailer","postSifTrailer","remoteParticipants","trackPublications","storeMetadata","setupEngine","engine","RTPVideoMapUpdate","rtpMap","postRTPMap","TrackPublished","encryption","NONE","ConnectionStateChanged","ConnectionState","Connected","TrackUnsubscribed","setupE2EEReceiver","SignalConnected","latestKeyIndex","getLatestManuallySetKeyIndex","isE2EEEnabled","LocalSenderCreated","setupE2EESender","LocalTrackPublished","publication","hasPacketTrailer","SetKey","updateCurrentKeyIndex","RatchetRequest","participantId","postRatchetRequest","encryptData","crypto","randomUUID","future","handleEncryptedData","iv","isPublisher","ReferenceError","enableMsg","remoteId","packetTrailerFeatures","handleReceiver","handleSender","publishOptions","frameMetadata","packetTrailer","transform","writableStream","readable","readableStream","receiverStreams","isReuse","senderStreams","FrameMetadataExtractor","metadataMap","activeSsrc","clear","evicted","dispose","FrameMetadataManager","extractors","workerPipelines","extractor","_participant","setupReceiver","teardownTrack","Disconnected","cleanup","hasE2EESetup","setupPassthroughReceiver","setupWorkerReceiver","newTrackId","existingTrackId","oldTrackId","terminate","BackOffStrategy","failedConnectionAttempts","backOffPromises","getInstance","addFailedConnectionAttempt","urlString","projectName","failureCount","pow","getBackOffPromise","resetFailedConnectionAttempts","resetAll","defaultId","DeviceManager","_previousDevices","previousDevices","getDevices","kind_1","_this","requestPermissions","userMediaPromiseMap","hasDeviceInUse","device","noLabel","isRelevant","permissionsToAcquire","normalizeDeviceId","groupId","defaultDevice","mediaDeviceKinds","U16_MAX_SIZE","U32_MAX_SIZE","WrapAroundUnsignedInt","u16","u32","maxSize","MAX_SAFE_INTEGER","clamp","updateFn","increment","decrement","getThenIncrement","previousValue","isBefore","DataTrackTimestamp","fromRtpTicks","rtpTicks","rtpRandom","randomValue","round","rateInHz","asTicks","wrappingAdd","DataTrackClock","epoch","previous","startingNow","startingAtTime","rtpStartingNow","rtpStartingAtTime","at","elapsedMs","durationTicks","durationInMsToTicks","durationMilliseconds","ticks","coerceToDataView","DataTrackHandleErrorReason","DataTrackHandleError","isReason","tooLarge","TooLarge","reserved","Reserved","DataTrackHandle","fromNumber","DataTrackHandleAllocator","DataTrackInfo","protocolInfo","pubHandle","usesE2ee","toProtobuf","GCM","QueueTaskStatus","AsyncQueue","pendingTasks","taskMutex","nextTaskIndex","run","taskInfo","enqueuedAt","WAITING","unlock","executedAt","RUNNING","COMPLETED","flush","snapshot","WebSocketStream","ws","protocols","binaryType","closeWithInfo","closeCode","opened","rejectHandler","onopen","ReadableStream","enqueue","WritableStream","write","extensions","closed","closePromise","res","CLOSED","closeEv","onclose","onabort","passThroughQueueSignals","SignalConnectionState","SignalClient","isDisconnected","DISCONNECTING","DISCONNECTED","isEstablishingConnection","CONNECTING","RECONNECTING","getNextRequestId","_requestId","useJSON","rtt","useV0SignalPath","resetCallbacks","onAnswer","onLeave","onLocalTrackPublished","onLocalTrackUnpublished","onNegotiateRequested","onOffer","onRemoteMuteChanged","onSubscribedQualityUpdate","onTokenRefresh","onTrickle","onClose","onMediaSectionsRequirement","Signal","requestQueue","queuedRequests","closingLock","connectionLock","url_1","token_1","opts_1","abortSignal_1","token","opts","abortSignal","publisherOffer","reconnect","clearPingInterval","reconnectReason","_this2","connectOptions","clientInfo","capabilities","sdk","JS","clientProtocol","getClientInfo","clientInfoCapabilities","URLSearchParams","autoSubscribe","deviceModel","browserVersion","adaptiveStream","connection","createConnectionParams","joinRequest","connectionSettings","participantSid","joinRequestBytes","requestBytes","compression","getWriter","getReader","_yield$reader$read","totalLength","acc","GZIP","wrappedBytes","bytesToBase64","binString","fromCodePoint","btoa","createJoinRequestConnectionParams","rtcUrl","validateUrl","rtcWsUrl","alreadyAborted","abortHandler","eventOrError","defaultMessage","AbortSignal","getAbortReasonAsString","streamWriter","sendLeave","cleanupAbortHandlers","wsTimeout","websocketTimeout","handleSignalConnected","firstMessage","redactedUrl","startClose","closeInfo","wasClean","CONNECTED","handleOnClose","handleConnectionError","handleWSError","signalReader","releaseLock","firstSignalResponse","validation","validateFirstMessage","isValid","pingTimeoutDuration","pingTimeout","pingIntervalDuration","pingInterval","interval","onJoined","shouldProcessFirstMessage","response","startReadingLoop","handleSignalResponse","signalLatency","_yield$signalReader$r","resp","_this3","updateState","sendOffer","offer","offerId","offerSdp","sendRequest","toProtoSessionDescription","sendAnswer","answer","answerSdp","sendIceCandidate","candidateInit","sendMuteTrack","sendAddTrack","sendUpdateLocalMetadata","metadata_1","name_1","_this4","requestId","sendUpdateTrackSettings","settings","sendUpdateSubscription","sub","sendSyncState","sync","sendUpdateVideoLayers","layers","sendUpdateSubscriptionPermissions","allParticipants","trackPermissions","sendSimulateScenario","scenario","sendPing","sendUpdateLocalAudioTrack","features","DISCONNECT","sendPublishDataTrackRequest","handle","sendUnPublishDataTrackRequest","sendUpdateDataSubscription","updates","message_1","_this5","fromQueue","canQueue","canPass","canPassThroughQueue","pingHandled","sd","fromProtoSessionDescription","midToTrackId","onParticipantUpdate","participants","onSpeakersChanged","speakers","onRoomUpdate","onConnectionQuality","onStreamStateUpdate","onSubscriptionPermissionUpdate","onSubscriptionError","lastPingTimestamp","resetPingTimeout","onRequestResponse","onLocalTrackSubscribed","onRoomMoved","onPublishDataTrackResponse","onUnPublishDataTrackResponse","onDataTrackSubscriberHandles","msgCase","setReconnected","onCloseCallback","clearPingTimeout","toUTCString","startPingInterval","isReconnect","fetch","errorMsg","statusText","rsd","DataPacketBuffer","_totalSize","getAll","popToSequence","sequence","alignBufferedAmount","bufferedAmount","TTLMap","ttl","_map","_lastCleanup","expiresAt","asValueMap","valueMap","hasRequiredGrammar","hasRequiredParser","hasRequiredWriter","hasRequiredLib","lib","parser","grammar","requireGrammar","grammar$1","reg","rate","subtype","sessionConfig","str","raddr","tcptype","generation","dir2","clksrcExt","mediaClockValue","rateNumerator","rateDenominator","requireParser","toIntIfInt","parseReg","needsBlank","keyLocation","rawName","attachProperties","validLine","session","rtp","fmtp","paramReducer","parseParams","parseFmtpConfig","parsePayloads","parseRemoteCandidates","candidates","parseImageAttributes","parseSimulcastStreamList","scid","paused","requireWriter","formatRegExp","formatStr","makeLine","defaultOuterOrder","defaultInnerOrder","payloads","outerOrder","innerOrder","libExports","requireLib","PCEvents","PCTransport","createPC","ddExtID","latestOfferId","latestAcknowledgedOfferId","pendingCandidates","restartingIce","renegotiate","trackBitrates","remoteStereoMids","remoteNackMids","negotiate","createAndSendOffer","pendingInitialOffer","onconnectionstatechange","oniceconnectionstatechange","onicegatheringstatechange","ondatachannel","onnegotiationneeded","onsignalingstatechange","onicecandidate","ontrack","offerLock","onIceCandidate","onicecandidateerror","onIceCandidateError","onIceConnectionStateChange","onSignalingStatechange","onConnectionStateChange","onDataChannel","onTrack","isICEConnected","remoteDescription","mungedSDP","_extractStereoAndNack","stereoMids","nackMids","sdpParsed","opusPayload","getMidString","rtcpFb","extractStereoAndNackAudioFromOffer","initialOffer","ensureIPAddrMatchVersion","setMungedSDP","trackbr","codecPayload","fmtpFound","attr","maxbr","createInitialOffer","iceRestart","currentSD","ensureAudioNackAndStereo","msid","ensureVideoDDExtensionForSVC","startBitrate","createAndSetAnswer","dataChannelDict","transceiverInit","addTransceiverOfKind","setTrackCodecBitrate","setConfiguration","rtcConfig","canRemoveTrack","getConnectionState","getICEConnectionState","getSignallingState","getLocalDescription","localDescription","getRemoteDescription","getConnectedAddress","selectedCandidatePairId","candidatePairs","selectedID","remoteCandidateId","munged","remote","originalSdp","mungedSdp","remoteSdp","maxID","isV6","toFixed","defaultVideoCodec","publishDefaults","audioPreset","dtx","red","forceStereo","simulcast","screenShareEncoding","stopMicTrackOnMute","videoCodec","backupCodec","preConnectBuffer","autoGainControl","echoCancellation","noiseSuppression","voiceIsolation","roomOptionDefaults","dynacast","stopLocalTrackOnUnpublish","reconnectPolicy","retryDelays","_retryDelays","nextRetryDelayInMs","retryCount","retryDelay","disconnectOnPageLeave","webAudioMix","singlePeerConnection","roomConnectOptionDefaults","maxRetries","peerConnectionTimeout","PCTransportState","PCTransportManager","needsPublisher","isPublisherConnectionRequired","needsSubscriber","isSubscriberConnectionRequired","_mode","previousState","connectionStates","requiredTransports","st","FAILED","CLOSING","NEW","onStateChange","publisher","subscriber","PCManager","SUBSCRIBER","PUBLISHER","onPublisherOffer","remoteOfferLock","requirePublisher","require","createAndSendPublisherOffer","setPublisherAnswer","triggerIceRestart","createSubscriberAnswerFromOffer","RTCSdpType","updateConfiguration","ensurePCTransportConnection","abortController","ensureTransportConnected","transport","checkpoint","cleanedUp","deadlineTimer","onAnswered","onAbort","addPublisherTransceiver","addPublisherTransceiverOfKind","getMidForReceiver","matchingTransceiver","getMaxPublisherMessageSize","addPublisherTrack","createPublisherDataChannel","transports","pcTransport_1","abortController_1","pcTransport","connectTimeout","isMediaRecorderAvailable","MediaRecorder","RecorderBase","LocalTrackRecorder","dataListener","streamController","onStop","byteStream","arrayBuffer","byteArray","LocalTrack","_sender","_constraints","hasPreConnectBuffer","localTrackRecorder","userProvidedTrack","manuallyStopped","pendingDeviceChange","_isUpstreamPaused","handleTrackMuteEvent","debouncedTrackMuteHandler","pauseUpstream","handleTrackUnmuteEvent","resumeUpstream","handleEnded","reacquireTrack","providedByUser","muteLock","pauseUpstreamLock","trackChangeLock","setMediaStreamTrack","getConstraints","dimensions","_this$_mediaStreamTra","isUpstreamPaused","isUserProvided","processedTrack","getSourceTrackSettings","newTrack","isUnmuting","processorElement","restart","localTrack","replaceTrack","waitForDimensions","started","dims","setDeviceId","restartTrack","getDeviceId","normalize","_this2$_mediaStreamTr","mute","setTrackMuted","unmute","userProvidedOrOptions","stopProcessor","internalStopProcessor","onSenderTrackSwapped","otherConstraints","propertyIsEnumerable","__rest","streamConstraints","Restarted","needsReAcquisition","UpstreamPaused","UpstreamResumed","setProcessor","processor_1","showProcessedStreamLocally","processorOptions","TrackProcessorUpdate","getProcessor","keepElement","remove","startPreConnectBuffer","timeslice","isTypeSupported","autoStopPreConnectBuffer","stopPreConnectBuffer","getPreConnectBuffer","getPreConnectBufferMimeType","LocalAudioTrack","enhancedNoiseCancellation","isKrispNoiseFilterEnabled","stopOnMute","monitorSender","getSenderStats","handleKrispNoiseFilterEnable","AudioTrackFeatureUpdate","TF_ENHANCED_NOISE_CANCELLATION","handleKrispNoiseFilterDisable","checkForSilence","setAudioContext","audioStats","packetsSent","roundTripTime","trackIsSilent","AudioSilenceDetected","presets169","presets43","presetsScreenShare","defaultSimulcastPresets169","defaultSimulcastPresets43","videoRids","computeVideoEncodings","isScreenShare","videoEncoding","useSimulcast","scalabilityMode","presets","aspect","abs","presetsForResolution","preset","determineAppropriateEncoding","sourceFramerate","sm","ScalabilityMode","spatial","bitratesRatio","requireScale","isSafariSvcApi","networkPriority","midPreset","sortPresets","screenShareSimulcastLayers","defaultSimulcastLayers","videoSimulcastLayers","lowPreset","encodingsFromPresets","computeTrackBackupEncodings","serverRequested","fromPreset","canSetPriority","topFramerate","notifyOnce","aEnc","bEnc","results","temporal","LocalVideoTrack","degradationPreference","setDegradationPreference","simulcastCodecs","isCpuConstrained","optimizeForPerformance","statsMap","qualityLimitationReason","CpuConstrained","totalBitrate","senderLock","isSimulcast","signalClient","e_1","_g","sc","e_1_1","e_2","e_2_1","items","vs","framesPerSecond","framesSent","qualityLimitationDurations","qualityLimitationResolutionChanges","retransmittedPacketsSent","targetBitrate","setPublishingQuality","maxQuality","qualities","LOW","HIGH","quality","setPublishingLayers","e_3","e_3_1","refreshSenderEncodings","lastEncodedDimensions","newEncodings","applyEncodingsToSender","backupEncodings","active","e_4","_h","e_4_1","preference","addSimulcastTrack","simulcastCodecInfo","setSimulcastTrackSender","subscribedCodecs","setPublishingCodecs","codecs_1","codecs_1_1","e_5","currentCodec","newCodecs","setPublishingLayersForSender","e_5_1","isSvc","prioritizePerformance","senderEncodings","isSVC","hasChanged","videoQualityForRid","subscribedQuality","maxFrameRate","MEDIUM","videoLayersFromEncodings","svc","bitrate","encodingSM","resRatio","scale","lossyDataChannel","reliableDataChannel","dataTrackDataChannel","leaveReconnect","PCState","DataChannelKind","RTCEngine","isClosed","_isClosed","isNewlyCreated","_isNewlyCreated","pendingReconnect","reconnectTimeout","fullReconnectOnNext","latestRemoteOfferId","subscriberPrimary","pcState","New","pendingTrackResolvers","reconnectAttempts","reconnectStart","attemptingReconnect","joinAttempts","maxJoinAttempts","shouldFailNext","shouldFailOnV1Path","reliableDataSequence","reliableMessageBuffer","reliableReceivedState","lossyDataStatCurrentBytes","lossyDataStatByterate","lossyDataDropCount","isWaitingForNetworkReconnect","bufferStatusLowClosingFuture","handleDataChannel","reliableDCSub","handleDataMessage","lossyDCSub","dataTrackDCSub","handleDataTrackMessage","dataProcessLock","Blob","dp","lastSeq","ActiveSpeakersUpdate","e2eeManager","decryptedData","encryptedValue","decryptedPacket","newDp","applyUserDataCompat","DataPacketReceived","encryptionType","handleDataError","channelKind","maxRetransmits","RTCErrorEvent","errorDetail","sctpCauseCode","handleDataChannelClose","pcManager","handleBufferedAmountLow","updateAndEmitDCBufferStatus","handleDisconnect","disconnectReason","disconnect","getNextRetryDelay","clearReconnectTimeout","TokenRefreshed","attemptReconnect","waitForRestarted","onRestarted","onDisconnected","RELIABLE","dataChannelForKind","isBufferStatusLow","dcBufferStatus","DCBufferStatusChanged","bufferedAmountLowThreshold","onRtpMapAvailable","rtpTypes","maybeCodec","handleBrowserOnLine","ok","client","RR_SIGNAL_DISCONNECTED","handleBrowserOffline","onLine","Engine","expSignalLatency","LOSSY","DATA_TRACK_LOSSY","StreamStateChanged","SignalRequestResponse","joinResponse","Joined","Closing","latestJoinResponse","roomID","participantID","signalOpts","setupSignalClientCallbacks","sendOfferWithJoin","offerProto","configure","applyInitialPublisherLayout","makeRTCConfiguration","fastPublish","registerOnLineListener","clientConfiguration","serverInfo","serverVersion","region","serverRegion","cleanupPeerConnections","deregisterOnLineListener","clearPendingReconnect","cleanupLossyDataStats","cleanupClient","dcCleanup","onbufferedamountlow","onclosing","lossyDC","reliableDC","dataTrackDC","lossyDataStatInterval","publicationTimeout","updateMuteStatus","dataSubscriberReadyState","getConnectedServerAddress","setRegionStrategy","strategy","regionStrategy","useSinglePeerConnection","TransportsCreated","publisherState","subscriberState","publisherConnectionPromise","shouldEmit","Reconnecting","RR_SUBSCRIBER_FAILED","RR_PUBLISHER_FAILED","isSignalSevered","isPCSevered","Offline","MediaTrackAdded","LocalTrackUnpublished","LocalTrackSubscribed","RemoteMute","RoomMoved","requirement","addMediaSections","numAudios","numVideos","UnPublishDataTrackResponse","leave","regions","ServerRegionsReported","RECONNECT","RESUME","serverResponse","e2eeEnabled","frameMetadataWorker","encodedInsertableStreams","continualGatheringPolicy","rtcIceServers","iceServer","rtcIceServer","credential","forceRelay","ENABLED","iceTransportPolicy","createDataChannels","ordered","threshold","createSender","createTransceiverRTCRtpSender","createRTCRtpSender","setupFrameMetadataSender","createSimulcastSender","simulcastTrack","createSimulcastTransceiverSender","hasMetadata","_sender$createEncoded","pipeTo","resumeConnection","DISABLED","restartConnection","recoverable","RR_UNKNOWN","regionUrl","Restarting","SignalRestarted","waitForPCReconnected","resetAttempts","nextRegionUrl","getNextUrl","Resuming","SignalResumed","lastMessageSeq","resendReliableMessagesForResume","Resumed","waitForPCInitialConnection","publishRpcAck","destinationIdentity","packet","destinationIdentities","sendDataPacket","ensurePublisherConnected","encryptablePacket","asEncryptablePacket","encryptedData","maxPublisherMessageSizeBytes","sendLossyBytes","waitForBufferStatusLow","bytes_1","bufferStatusLowBehavior","ensureDataTransportConnected","transportName","needNegotiation","targetChannel","endTime","verifyTransport","handleClosed","remoteTracks","localTracks","localDataTrackInfos","previousPublisherOffer","previousPublisherAnswer","previousSubscriberOffer","previousSubscriberAnswer","trackSids","trackSidsDisabled","isDesired","subscription","participantTracks","publishTracks","dataChannels","dataChannelsInfo","datachannelReceiveStates","seq","publisherSid","publishDataTracks","failNext","failNextV1Path","getInfo","getTrackIdForReceiver","newObj","oldObj","DEFAULT_MAX_AGE_MS","RegionUrlProvider","fetchRegionSettings","fetchLock","regionSettingsResponse","host","getCloudConfigUrl","headers","authorization","maxAge","cacheControl","extractMaxAgeFromRequestHeaders","maxAgeInMs","regionSettings","updatedAtInMs","scheduleRefetch","settingsTimeouts","newSettings","updateCachedRegionSettings","stopRefetch","scheduleCleanup","connectionTrackers","cleanupTimeout","currentTracker","connectionCount","cancelCleanup","notifyConnected","notifyDisconnected","attemptedRegions","updateToken","getServerUrl","getNextBestRegionUrl","cachedSettings","regionsLeft","attempted","nextRegion","setServerReportedRegions","BaseStreamReader","_info","validateBytesReceived","doneReceiving","totalByteSize","Incomplete","LengthExceeded","ByteStreamReader","handleChunkReceived","currentProgress","onProgress","withAbortSignal","readAll","iterator_1_1","iterator_1","TextStreamReader","totalChunkCount","receivedChunks","chunkIndex","previousChunkAtIndex","decoder","fatal","decodedResult","DecodeFailed","finalString","iterator_2_1","iterator_2","IncomingDataStreamManager","byteStreamControllers","textStreamControllers","byteStreamHandlers","textStreamHandlers","isConnected","bufferedPackets","setConnected","connected","flushBufferedPackets","packets","handleDataStreamPacket","registerTextStreamHandler","topic","HandlerAlreadyRegistered","unregisterTextStreamHandler","registerByteStreamHandler","unregisterByteStreamHandler","clearControllers","validateParticipantHasNoActiveDataStreams","textStreamsBeingSentByDisconnectingParticipant","sendingParticipantIdentity","byteStreamsBeingSentByDisconnectingParticipant","abnormalEndError","AbnormalEnd","handleStreamHeader","handleStreamChunk","handleStreamTrailer","streamHeader","contentHeader","streamHandlerCallback","AlreadyOpened","attachedStreamIds","fileBuffer","EncryptionTypeMismatch","textBuffer","BaseStreamWriter","defaultWriter","TextStreamWriter","ByteStreamWriter","OutgoingDataStreamManager","sendText","totalTextLength","fileIds","attachments","progresses","handleProgress","progress","totalProgress","streamText","totalSize","file","_sendFile","header","replyToStreamId","operationType","UPDATE","CREATE","chunkId","textByteChunk","encoded","splitUtf8","chunkPacket","trailerPacket","onEngineClose","sendFile","streamBytes","writeMutex","logLocal","subChunk","abortSignalAny","signals","unlisteners","unsubscribe","abortSignalTimeout","DataTrackDeserializeErrorReason","DataTrackSerializeErrorReason","DataTrackExtensionTag","DataTrackDeserializeError","tooShort","TooShort","headerOverrun","HeaderOverrun","missingExtWords","MissingExtWords","unsupportedVersion","UnsupportedVersion","invalidHandle","InvalidHandle","malformedExt","MalformedExt","DataTrackSerializeError","tooSmallForHeader","TooSmallForHeader","tooSmallForPayload","TooSmallForPayload","Serializable","lengthBytes","toBinaryLengthBytes","writtenBytes","toBinaryInto","DataTrackExtension","DataTrackUserTimestampExtension","U8_LENGTH_BYTES","dataView","byteIndex","setUint8","totalLengthBytes","UserTimestamp","DataTrackE2eeExtension","E2ee","DataTrackExtensions","userTimestamp","e2ee","getUint8","byteIndexForIv","DataTrackFrameInternal","lossyIntoFrame","TrackSymbol","DataTrackSymbol","RemoteDataTrack","manager","trackSymbol","typeSymbol","publisherIdentity","_this$manager$openSub2","openSubscriptionStream","bufferSize","setPipelineOptions","DataTrackPacketHeader","marker","trackHandle","frameNumber","extensionsMetrics","lengthWords","paddingLengthBytes","_this$extensionsMetri","extLengthBytes","extPaddingLengthBytes","SUPPORTED_VERSION","FrameMarker","Inter","Final","Start","Single","_this$extensionsMetri2","extensionsLengthBytes","extensionsLengthWords","extensionsPaddingLengthBytes","setUint16","rtpOrientedExtensionLengthWords","extensionsFlag","getUint16","rtpOrientedExtensionWords","extensionLengthBytes","extensionDataView","_DataTrackExtensions$2","DataTrackPacket","_DataTrackPacketHeade2","headerByteLength","log$3","DataTracks","DataTrackDepacketizerDropError","DataTrackDepacketizerDropReason","interrupted","newFrameNumber","Interrupted","unknownFrame","UnknownFrame","bufferFull","BufferFull","incomplete","receivedPackets","expectedPackets","DataTrackSubscribeErrorReason","DataTrackDepacketizer","partials","frameFromSingle","beginPartial","pushToPartial","peekOldestPartialFrameNumber","maxPartialFrames","oldestPartialFrameNumber","throwOnInterruption","startSequence","packetFrameNumber","matchingPartial","MAX_BUFFER_PACKETS","finalize","partialFrameNumber","endSequence","received","payloadLengthBytes","sequencePointer","payloadOffsetPointerBytes","partialPayload","payloadRemainingBytes","DataTrackSubscribeError","unpublished","Unpublished","disconnected","log$2","IncomingDataTrackPipeline","hasProvider","depacketizer","pipelineOptions","updateE2eeManager","setOptions","processPacket","depacketize","decrypted","decryptIfNeeded","IncomingDataTrackManager","descriptors","subscriptionHandles","pipeline","sfuSubscriptionComplete","detachSignal","streamControllers","unSubscribeRequest","currentDescriptor","subscribeRequest","CountQueuingStrategy","highWaterMark","waitForCompletionFuture","userProvidedSignal","timeoutSignal","combinedSignal","proxiedCompletionFuture","completionFuture","pendingRequestCount","previousDescriptorSubscription","querySubscribed","closeStreamControllers","subcriptionHandle","receiveSfuPublicationUpdates","publisherParticipantToSidsInUpdate","sidsInUpdate","handleTrackPublished","unpublishedSids","handleTrackUnpublished","queryPublications","receivedSfuSubscriberHandles","mapping","_ref1","_ref10","registerSubscriberHandle","assignedHandle","packetReceived","internalFrame","desiredSize","resendSubscriptionUpdates","_ref11","_ref12","handleRemoteParticipantDisconnected","remoteParticipantIdentity","DataTrackPacketizerError","DataTrackPacketizerReason","mtuTooShort","MtuTooShort","DataTrackPublishErrorReason","DataTrackPushFrameErrorReason","DataTrackOutgoingPipelineErrorReason","DataTrackPacketizer","mtuSizeBytes","clock","computeFrameMarker","packetCount","packetize","headerParams","headerSerializedLengthBytes","maxPayloadSizeBytes","indexBytes","packetHeader","packetPayloadLengthBytes","packetPayload","DataTrackPublishError","rawMessage","duplicateName","DuplicateName","invalidName","InvalidName","limitReached","LimitReached","unknown","DataTrackPushFrameError","trackUnpublished","TrackUnpublished","dropped","Dropped","DataTrackOutgoingPipelineError","packetizer","Packetizer","Encryption","LocalDataTrack","flushedFuture","isFlushed","handleManagerReset","handleManagerPacketsFlushedChange","withExplicitHandle","getDescriptor","publish","publishRequest","isPublished","publishState","tryPush","tryProcessAndSend","unpublish","unpublishRequest","DataTrackOutgoingPipeline","TRANSPORT_MTU_BYTES","processFrame","encryptedFrame","encryptIfNeeded","__asyncDelegator","encryptedResult","Descriptor","unpublishingFuture","OutgoingDataTrackManager","handleAllocator","inFlightPacketCounter","withDescriptors","handlePacketSendComplete","counter","existingDescriptor","queryPublished","receivedSfuPublishResponse","receivedSfuUnpublishResponse","sfuWillRepublishTracks","RpcError","truncateBytes","MAX_MESSAGE_BYTES","MAX_DATA_BYTES","fromProto","toProto","builtIn","ErrorCode","ErrorMessage","APPLICATION_ERROR","CONNECTION_TIMEOUT","RESPONSE_TIMEOUT","RECIPIENT_DISCONNECTED","RESPONSE_PAYLOAD_TOO_LARGE","SEND_FAILED","UNSUPPORTED_METHOD","RECIPIENT_NOT_FOUND","REQUEST_PAYLOAD_TOO_LARGE","UNSUPPORTED_SERVER","UNSUPPORTED_VERSION","RPC_REQUEST_DATA_STREAM_TOPIC","RPC_RESPONSE_DATA_STREAM_TOPIC","RpcRequestAttrs","maxBytes","low","encoder","RpcClientManager","outgoingDataStreamManager","getRemoteParticipantClientProtocol","getServerVersion","pendingAcks","pendingResponses","performRpc","_ref$responseTimeout","responseTimeout","responseTimeoutMs","remoteClientProtocol","effectiveTimeoutMs","maxRoundTripLatencyMs","responseTimeoutId","ackTimeoutId","publishRpcRequest","completionPromise","RPC_REQUEST_ID","RPC_REQUEST_METHOD","RPC_REQUEST_RESPONSE_TIMEOUT_MS","RPC_REQUEST_VERSION","handleIncomingDataStream","senderIdentity","associatedRequestId","handleIncomingRpcResponseFailure","handleIncomingRpcResponseSuccess","handleIncomingRpcAck","handleParticipantDisconnected","_ref5$","pendingIdentity","RpcServerManager","rpcHandlers","registerRpcMethod","unregisterRpcMethod","handleIncomingRpcRequest","callerIdentity","rpcRequest","publishRpcResponsePacket","responseError","publishRpcResponse","dataStreamAttrs","RemoteAudioTrack","audioOutput","webAudioPluginNodes","sinkId","setVolume","volume","gainNode","setTargetAtTime","_setVolume","elementVolume","getVolume","highestVolume","setSinkId","needsNewWebAudioConnection","connectWebAudio","disconnectWebAudio","setWebAudioPlugins","sourceNode","lastNode","destination","concealedSamples","concealmentEvents","silentConcealedSamples","silentConcealmentEvents","totalAudioEnergy","totalSamplesDuration","TrackPublication","metadataMuted","handleMuted","handleUnmuted","Publication","setTrack","isSubscribed","audioTrack","videoTrack","updateInfo","simulcasted","SubscriptionStatus","PermissionStatus","ConnectionQuality","LocalTrackPublication","ti","handleTrackEnded","handleCpuConstrained","getTrackFeatures","TF_AUTO_GAIN_CONTROL","TF_ECHO_CANCELLATION","TF_NOISE_SUPPRESSION","channelCount","TF_STEREO","TF_NO_DTX","createLocalTracks","attemptExactMatch","internalOptions","retryAudioOptions","retryVideoOptions","mediaPromise","trackConstraints","conOrBool","newDeviceId","mediaTrackToLocalTrack","Participant","isAgent","permissions","agent","AGENT","isActive","participantInfo","_kind","_attributes","STANDARD","audioLevel","isSpeaking","_connectionQuality","audioTrackPublications","videoTrackPublications","getTrackPublications","getTrackPublication","getTrackPublicationByName","waitUntilActive","activeFuture","connectionQuality","isCameraEnabled","isMicrophoneEnabled","isScreenShareEnabled","joinedAt","_setName","_setMetadata","_setAttributes","permission","setPermissions","md","changed","prevMetadata","ParticipantMetadataChanged","ParticipantNameChanged","oldValues","newValues","allKeys","diffAttributes","AttributesChanged","prevPermissions","canPublish","canSubscribe","canPublishData","recorder","canPublishSources","canSubscribeMetrics","ParticipantPermissionsChanged","setIsSpeaking","speaking","lastSpokeAt","IsSpeakingChanged","setConnectionQuality","prevQuality","EXCELLENT","Excellent","GOOD","Good","POOR","Poor","LOST","Lost","qualityFromProto","ConnectionQualityChanged","setDisconnected","addTrackPublication","TrackMuted","TrackUnmuted","LocalParticipant","roomOutgoingDataStreamManager","roomOutgoingDataTrackManager","rpcClientManager","rpcServerManager","pendingPublishing","pendingPublishPromises","participantTrackPermissions","allParticipantsAllowedToSubscribe","e2eeStateMutex","enabledPublishVideoCodecs","handleReconnecting","reconnectFuture","handleReconnected","updateTrackSubscriptionPermissions","handleClosing","signalConnectedFuture","activeAgentFuture","firstActiveAgent","handleSignalRequestResponse","targetRequest","pendingSignalRequests","OK","request","NOT_ALLOWED","DUPLICATE_NAME","INVALID_NAME","LIMIT_EXCEEDED","allParticipantsAllowed","perms","allTracks","allowAll","allowedTrackSids","trackPermissionToProto","onTrackUnmuted","onTrackMuted","onTrackUpstreamPaused","onTrackUpstreamResumed","onTrackFeatureUpdate","onTrackCpuConstrained","LocalTrackCpuConstrained","handleSubscribedQualityUpdate","roomOptions","newCodecs_1_1","newCodecs_1","publishAdditionalCodecForTrack","handleLocalTrackUnpublished","unpublishTrack","currentPermissions","query","onchange","activeDeviceMap","lastCameraError","cameraError","lastMicrophoneError","microphoneError","setMetadata","requestMetadataUpdate","setName","setAttributes","setCameraEnabled","setTrackEnabled","setMicrophoneEnabled","setScreenShareEnabled","setE2EEEnabled","republishAllTracks","republishPromise","pendingTrack","waitForPendingPublicationOfSource","createTracks","createScreenTracks","MediaDevicesError","publishPromises","publishTrack","unpublishPromises","screenAudioTrack","enableCameraAndMicrophone","mergedOptionsWithProcessors","audioCaptureDefaults","videoCaptureDefaults","AudioStreamAcquired","isSafari17Based","videoConstraints","selfBrowserSurface","surfaceSwitching","systemAudio","preferCurrentTab","screenCaptureToDisplayMediaStreamOptions","screenVideo","contentHint","screenAudio","publishOrRepublishTrack","waitForNextEngineRestart","timeoutMs","onClosing","options_1","isRepublish","hasRetriedAfterNegotiationError","defaultConstraints","existingPublication","deviceKind","isStereoInput","isStereo","supportedSafariVersion","isE2EESimulcastSupported","publishPromise","publicationTimedOut","waitUntilEngineConnected","hasPermissionsToPublish","_this$permissions","getTrackSourceFromProto","_j","_k","publishedTrack","getCapabilities","hasAV1","supportsAV1","hasVP9","supportsVP9","mime","audioFeatures","disableDtx","TF_PRECONNECT_BUFFER","normalizeRequestedFrameMetadataOptions","stereo","disableRed","backupCodecPolicy","defaultRes","getDefaultDegradationPreference","trackTransceiver","addTrackPromise","negotiateErr","rets","primaryCodecMime","updatedCodec","constrainedTrack","agentActiveTimeout","waitUntilActiveAgentPresent","sampleRate","stream_1_1","stream_1","canPublishFrameMetadata","fmOpts","PTF_USER_TIMESTAMP","PTF_FRAME_ID","getFrameMetadataFeatures","normalized","getFrameMetadataPublishOptions","stopOnUnpublish","getPublicationForTrack","pubLogContext","negotiationNeeded","trackSender","unpublishTracks","restartTracks","localPubs","publishData","data_1","reliable","dataPacketKind","userPacket","publishDtmf","digit","sendChatMessage","attachedFiles","editChatMessage","editText","originalMessage","editTimestamp","setTrackSubscriptionPermissions","setEnabledPublishCodecs","mutedOnServer","setActiveAgent","publishPromiseEntry","publishDataTrack","DeferrableMapAbortError","DeferrableMap","futures","toStringTag","getDeferred","existingFutures","RemoteTrackPublication","allowed","requestedDisabled","handleVisibilityChange","emitTrackUpdate","handleVideoDimensionsChange","videoDimensionsAdaptiveStream","subscribed","setSubscribed","prevStatus","subscriptionStatus","prevPermission","permissionStatus","emitSubscriptionUpdateIfChanged","emitPermissionUpdateIfChanged","Unsubscribed","Subscribed","Desired","Allowed","setEnabled","isManualOperationAllowed","setVideoQuality","requestedMaxQuality","requestedVideoDimensions","setVideoDimensions","setVideoFPS","videoQuality","prevTrack","setAllowed","setSubscriptionError","SubscriptionFailed","prevMetadataMuted","previousStatus","currentStatus","SubscriptionStatusChanged","previousPermissionStatus","SubscriptionPermissionChanged","minDimensions","maxQualityLayer","UpdateSettings","RemoteParticipant","fromParticipantInfo","pi","dataTracks","dti","remoteParticipantID","remoteParticipant","remoteDataTracks","remoteDataTrack","volumeMap","TrackSubscriptionPermissionChanged","TrackSubscriptionStatusChanged","previousTrack","TrackSubscriptionFailed","audioPublication","addSubscribedMediaTrack","triesLeft","getTrackPublicationBySid","validTracks","newTracks","existingTrackOfSource","oldTrack","sendUnpublish","setAudioOutput","addRemoteDataTrack","removeRemoteDataTrack","remoteDataTrackSid","Room","activeSpeakers","audioEnabled","isVideoPlaybackBlocked","bufferedEvents","isResuming","unlockDisconnect","disconnectLock","connectFuture","setAndEmitConnectionState","Connecting","regionUrlProvider","connectFn","attemptConnection","nextUrl","regionFetchError","recreateEngine","clearConnectionFutures","connectSignal","_yield$engine$join","CAP_PACKET_TRAILER","applyJoinResponse","enabledPublishCodecs","sifTrailer","handleParticipantUpdates","otherParticipants","handleRoomUpdate","maybeCreateEngine","createRegionStrategy","acquireAudioContext","connOptions","setupLocalParticipantEvents","resultingError","onPageLeave","registerConnectionReconcile","args_1","stopTracks","startAudio","audioId","dummyAudioEl","getElementById","append","handleAudioPlaybackStarted","handleAudioPlaybackFailed","startVideo","handleVideoPlaybackStarted","handleVideoPlaybackFailed","handleRestarting","clearConnectionReconcile","handleRestarted","outgoingDataTrackManager","incomingDataTrackManager","handleSignalRestarted","Reconnected","emitBufferedEvents","participantInfos","sidToIdentity","getOrCreateParticipant","mapped","dataTrack","handleActiveSpeakersUpdate","seenSids","speaker","getRemoteParticipantBySid","emitWhenConnected","ActiveSpeakersChanged","handleSpeakersChanged","speakerUpdates","lastSpeakers","handleStreamStateUpdate","streamStateUpdate","streamStates","newStreamState","TrackStreamStateChanged","handleSubscriptionPermissionUpdate","handleSubscriptionError","handleDataPacket","handleUserPacket","handleTranscription","handleSipDtmf","handleChatMessage","handleMetrics","handleDataStream","rpc","rpcResponse","DataReceived","SipDTMFReceived","_remoteParticipant","transcription","transcribedParticipantIdentity","segments","firstReceivedTimesMap","final","firstReceivedTime","lastReceivedTime","extractTranscriptionSegments","transcriptionReceivedTimes","TranscriptionReceived","chatMessage","extractChatMessage","metrics","MetricsReceived","incomingDataStreamManager","bufferedSegments","canPlaybackAudio","AudioPlaybackStatusChanged","VideoPlaybackStatusChanged","handleDeviceChange","selectDefaultDevices","MediaDevicesChanged","oldRoom","roomInfo","RoomMetadataChanged","activeRecording","RecordingStatusChanged","handleConnectionQualityUpdate","onLocalParticipantMetadataChanged","onLocalParticipantNameChanged","onLocalAttributesChanged","changedAttributes","ParticipantAttributesChanged","onLocalTrackMuted","onLocalTrackUnmuted","onTrackProcessorUpdate","onPublish","onLocalTrackRestarted","LocalAudioSilenceDetected","ActiveDeviceChanged","onLocalConnectionQualityChanged","onMediaDevicesError","onLocalParticipantPermissionsChanged","onLocalChatMessageSent","DataTrackPublished","DataTrackUnpublished","LocalDataTrackPublished","LocalDataTrackUnpublished","registerRpcDataStreamHandler","setupFrameMetadata","setupE2EE","switchActiveDevice","cleanupController","onDeviceChange","cleanupRegistry","roomRef","WeakRef","deref","register","e2eeOptions","frameMetadataManager","isRecording","getSid","numParticipants","numPublishers","onTrackAdded","SignalReconnecting","updateSubscriptions","subscribedSid","handleLocalTrackSubscribed","roomMoved","Moved","handleToSidMapping","subHandles","DataTrackPacketReceived","packetBytes","getLocalDevices","prepareConnection","simulateScenario","postAction","canPlaybackVideo","getActiveDevice","deviceId_1","success","shouldTriggerImmediateDeviceChange","deviceConstraint","prevDeviceId","oldEngine","reconnectedHandler","mediaTrackId","mediaStreamId","tracksInStream","unpackStreamId","findPublication","trackPublication","emitLocalTrackSubscribed","onPublished","shouldStopTracks","ParticipantDisconnected","availableDevices","availableDevice","previousDevice","kinds","targetSource","targetPublication","devicesOfKind","activeDevice","deviceInfo","newContextIsRunning","createParticipant","existingParticipant","ParticipantConnected","ParticipantActive","reader_1","consecutiveFailures","connectionReconcileInterval","numFailures","transportsConnectedOrConnecting","STATE_MISMATCH","_len2","_key2","simulateParticipants","useRealTracks","participantOptions","aspectRatios","emptyTimeout","maxParticipants","creationTime","turnPassword","enabledCodecs","camPub","audioPub","dummyVideo","_len3","_key3","minimizedArgs","mapArgs","CheckStatus","FinalizationRegistry","JOSEError","_Error$captureStackTr","captureStackTrace","claim","globalThis","Hr","It","Me","qr","E","O","ee","Q","$","Kr","ct","ne","Gr","throw","un","sent","trys","ops","Iterator","ge","be","ve","Qr","Jr","tt","errors","Ue","ke","initialTeardown","_parentage","_finalizers","Mt","_hasParent","_addParent","_removeParent","EMPTY","ln","Xr","Zr","dn","We","Re","gt","isStopped","ni","Pe","_next","_error","complete","_complete","ei","partialObserver","Le","bt","observable","Qe","_subscribe","lift","operator","ii","oi","_trySubscribe","Rt","pipe","ri","toPromise","W","si","F","ai","onFinalize","shouldUnsubscribe","ci","currentObservers","observers","thrownError","Dt","_throwIfClosed","_checkFinalizedStatuses","_innerSubscribe","asObservable","pn","_value","ui","li","schedule","$t","scheduler","work","recycleAsyncId","requestAsyncId","execute","_execute","actions","Nt","schedulerActionCtor","di","_active","yt","vi","hn","vn","mn","gn","bn","yn","wn","xn","gi","yi","Sn","wi","xi","Si","oe","Tn","En","Cn","Ai","Ti","Ci","Ei","Pi","Oi","Je","xt","$i","Fi","Ni","je","Xe","lt","zi","nt","Wt","Ji","Xi","defineProperties","Zi","getOwnPropertyDescriptors","jt","eo","to","Bt","ce","B","ro","N","Oe","An","co","po","AgentState","PublishOnBehalf","TranscriptionFinal","TranscriptionSegmentId","TranscribedTrackId","ho","U","zt","pe","we","xe","Dn","cameraTrack","microphoneTrack","Ls","Ze","Mo","Ro","$n","Do","Po","messageObservable","isSendingObservable","Ie","No","Fo","Yt","trackReferences","qt","Nn","ot","zo","Kt","qo","ea","Qi","findIndex","streamInfo","connector","resetOnError","resetOnComplete","resetOnRefCountZero","Ki","I.createContext","jn","sa","I.useContext","Vn","Go","Hn","la","Xo","I","J","G","i.forwardRef","htmlProps","screen","onConnected","onMediaDeviceFailure","onEncryptionError","i.useState","i.useRef","i.useEffect","i.useMemo","i.createElement","featureFlags","s.useState","s.useEffect","s.useMemo","He","additionalRoomEvents","updateOnlyOn","Yn","onlySubscribed","withPlaceholder","Jt","edition","Qn","ignoreLegacy","$o","chatMessages","isSending","sqrt","Xt","bands","loPass","hiPass","updateInterval","analyserOptions","ns","cloneTrack","smoothingTimeConstant","minDecibels","maxDecibels","streamTrack","mediaStreamSource","calculateVolume","getByteFrequencyData","sum","amplitude","me","Float32Array","getFloatFrequencyData","re","fe","nn","Gt","Tt","sn","rn","onTranscription","reduceRight","kt","receivedAtMediaTimestamp","receivedAt","Et","le","Ce","se","ie","agentTranscriptions","agentAttributes","cn","participantIdentities","textStreams","Lt","an","At","Y","ue","Se","e.useState","rt","e.useRef","trackObserver","e.useMemo","e.useEffect","elementProps","valueOf","Z","leading","trailing","e.forwardRef","trackRef","onSubscriptionStatusChanged","e.useImperativeHandle","e.createElement","ba","LayoutGroupContext","useConstant","useIsomorphicLayoutEffect","PresenceContext","addUniqueItem","formatErrorMessage","errorCode","invariant","NODE_ENV","MotionGlobalConfig","isNumericalString","isObject","isZeroValueString","combineFunctions","transformers","toFromDifference","SubscriptionManager","subscriptions","notify","numSubscriptions","getSize","secondsToMilliseconds","millisecondsToSeconds","milliseconds","velocityPerSecond","velocity","frameDuration","calcBezier","a1","a2","cubicBezier","mX1","mY1","mX2","mY2","getTForX","aX","lowerBound","upperBound","currentX","currentT","binarySubdivide","mirrorEasing","easing","reverseEasing","backOut","backIn","backInOut","anticipate","circIn","sin","acos","circOut","circInOut","easeIn","easeOut","easeInOut","isBezierDefinition","easingLookup","linear","easingDefinitionToFunction","stepsOrder","createRenderBatcher","scheduleNextBatch","allowKeepAlive","runNextFrame","useDefaultElapsed","delta","isProcessing","flagRunNextFrame","steps","thisFrame","nextFrame","flushNextFrame","toKeepAlive","latestFrameData","triggerCallback","keepAlive","immediate","frameData","prevFrame","createRenderStep","resolveKeyframes","preUpdate","preRender","postRender","processBatch","useManualTiming","cancelFrame","frameSteps","clearTime","newTime","checkStringStartsWith","isCSSVariableName","startsAsVariableToken","isCSSVariableToken","singleCssVariableRegex","containsCSSVariable","alpha","sanitize","floatRegex","singleColorRegex","isColorString","testProp","Boolean","isNullish","splitColor","aName","bName","cName","rgbUnit","clampRgbUnit","rgba","green","blue","alpha$1","hex","createUnitType","unit","degrees","percent","px","vh","vw","progressPercentage","hsla","hue","saturation","lightness","getAnimatableNone","colorRegex","NUMBER_TOKEN","COLOR_TOKEN","complexRegex","analyseComplexValue","originalValue","indexes","var","types","parsedValue","buildTransformer","numSections","convertToZero","splitBefore","complex","createTransformer","transformer","hueToRgb","mixImmediate","mixNumber","mixLinearColor","fromExpo","expo","colorTypes","asRGBA","model","hslaToRgba","mixColor","fromRGBA","toRGBA","blended","invisibleValues","mixNumber$1","getMixer","mixComplex","mixArray","mixObject","numValues","blendValue","origin","template","originStats","targetStats","mixVisibility","orderedOrigin","pointers","originIndex","originValue","matchOrder","mixer","frameloopDriver","passTimestamp","generateLinearEasing","points","numPoints","maxGeneratorDuration","calcGeneratorDuration","springDefaults","granular","calcAngularFreq","undampedFreq","dampingRatio","safeMin","durationKeys","physicsKeys","isSpringType","getSpringOptions","springOptions","mass","isResolvedFromDuration","visualDuration","bounce","derived","envelope","derivative","exponentialDecay","initialGuess","approximateRoot","findSpring","spring","optionsOrVisualDuration","keyframes","restSpeed","restDelta","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","resolveSpring","resolveVelocity","angularFreq","sinCoeff","cosCoeff","cos","dampedAngularFreq","freqForT","sinh","cosh","sinhCoeff","coshCoeff","calculatedDuration","currentVelocity","toTransition","applyToOptions","generatorOptions","createGenerator","ease","createGeneratorEasing","getGeneratorVelocity","resolveValue","prevT","inertia","power","timeConstant","bounceDamping","bounceStiffness","modifyTarget","nearestBoundary","calcDelta","calcLatest","applyFriction","latest","timeReachedBoundary","spring$1","checkCatchBoundary","hasUpdatedFrame","interpolate","isClamp","inputLength","isZeroDeltaRange","reverse","mixers","customMixer","mixerFactory","numMixers","easingFunction","createMixers","interpolator","progressInRange","defaultOffset","remaining","offsetProgress","fillOffset","keyframeValues","times","easingFunctions","isEasingArray","absoluteTimes","convertOffsetToTimes","mapTimeToKeyframe","isNotNull","getFinalKeyframe","repeatType","finalKeyframe","speed","resolvedKeyframes","transitionTypeMap","decay","tween","replaceTransitionType","WithPromise","updateFinished","finished","_finished","notifyFinished","onResolve","onReject","percentToProgress","JSAnimation","holdTime","playbackSpeed","delayState","motionValue","updatedAt","tick","teardown","initAnimation","repeatDelay","keyframes$1","generatorFactory","mixKeyframes","mirroredGenerator","resolvedDuration","totalDuration","updateTime","animationTime","onUpdate","timeWithoutDelay","isInDelayPhase","elapsed","frameGenerator","currentIteration","iterationProgress","isAnimationFinished","iterationDuration","driver","newSpeed","onPlay","onComplete","onCancel","stopDriver","sampleTime","attachTimeline","timeline","allowFlatten","radToDeg","rad","rotate","angle","atan2","rebaseAngle","matrix2dParsers","translateX","translateY","scaleX","scaleY","rotateZ","skewX","atan","skewY","skew","matrix3dParsers","translateZ","rotateX","rotateY","defaultTransformValue","parseValueFromTransform","matrix3dMatch","parsers","matrix2dMatch","valueParser","convertTransformToNumber","transformPropOrder","transformProps","isNumOrPxType","transformKeys","nonTranslationalTransformKeys","positionalValues","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","_bbox","bottom","toResolve","isScheduled","anyNeedsMeasurement","isForced","measureAllKeyframes","resolversToMeasure","needsMeasurement","elementsToMeasure","transformsToRestore","removedTransforms","visualElement","removeNonTranslationalTransform","measureInitialState","restore","measureEndState","suspendedScrollY","scrollTo","readAllKeyframes","readKeyframes","KeyframeResolver","unresolvedKeyframes","isAsync","scheduleResolve","valueAsRead","readValue","fillWildcards","setFinalKeyframe","renderEndStyles","isForcedComplete","setStyle","isCSSVar","supportsFlags","memoSupports","supportsFlag","memoized","supportsScrollTimeline","ScrollTimeline","supportsLinearEasing","animate","opacity","cubicBezierAsString","supportedWaapiEasing","mapEasingToNativeEasing","segmentEasing","startWaapiAnimation","valueName","keyframeOptions","iterations","isGenerator","NativeAnimation","finishedTime","manualStartTime","isPseudoElement","applyGeneratorOptions","onfinish","keyframe","updateMotionValue","commitStyles","effect","getComputedTiming","wasFinished","playbackRate","playState","newStartTime","rangeStart","rangeEnd","updateTiming","unsupportedEasingFunctions","replaceStringEasing","NativeAnimationExtended","sampleAnimation","setWithVelocity","isAnimatable","makeAnimationInstant","acceleratedValues","browserColorFunctions","colorProperties","supportsWaapi","Element","supportsBrowserAnimation","HTMLElement","transformTemplate","getProps","hasBrowserOnlyColors","AsyncMotionValueAnimation","_animation","stopTimeline","keyframeResolver","createdAt","optionsWithDefaults","KeyframeResolver$1","forced","onKeyframesResolved","isHandoff","resolvedAt","canAnimateValue","originKeyframe","targetKeyframe","isOriginAnimatable","isTargetAnimatable","hasKeyframesChanged","canAnimate","instantAnimations","resolvedOptions","useWaapi","pendingTimeline","_onReject","calcChildStagger","delayChildren","staggerChildren","staggerDirection","sortNodePosition","numChildren","maxStaggerDuration","splitCSSVariableRegex","getVariableValue","token1","token2","parseCSSVariable","resolved","getPropertyValue","trimmed","underDampedSpring","keyframesTransition","getDefaultTransition","valueKey","resolveTransition","parentTransition","inherit","rest","getValueTransition","valueTransition","orchestrationKeys","animateMotionValue","getVelocity","isTransitionDefined","shouldSkip","skipAnimations","shouldSkipAnimations","isSync","getValueState","resolveVariantFromProps","custom","variants","resolveVariant","positionalKeys","MotionValue","canTrackVelocity","updateAndNotify","setPrevFrameValue","setCurrent","change","dependents","dependent","dirty","hasAnimated","prevFrameValue","prevUpdatedAt","onChange","clearListeners","eventManagers","passiveEffect","stopPassiveEffect","jump","endAnimation","addDependent","removeDependent","getPrevious","startAnimation","animationStart","animationComplete","clearAnimation","animationCancel","isAnimating","isKeyframesTarget","setMotionValue","hasValue","addValue","resolveFinalValueInKeyframes","isMotionValue","addValueToWillChange","willChange","WillChange","newWillChange","camelToDash","optimizedAppearDataAttribute","getOptimisedAppearId","shouldBlockAnimation","protectedKeys","needsAnimating","shouldBlock","animateTarget","targetAndTransition","transitionOverride","transitionEnd","defaultTransition","reduceMotion","animations","animationTypeState","animationState","getState","latestValues","valueTarget","MotionHandoffAnimation","appearId","shouldReduceMotion","applyTransitionEnd","setTarget","animateVariant","variant","presenceContext","getAnimation","getChildAnimations","variantChildren","forwardDelay","animateChildren","when","testValueType","dimensionValueTypes","findDimensionValueType","isNone","maxDefaults","applyDefaultFilter","functionRegex","functions","mask","int","numberValueTypes","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","inset","insetBlock","insetBlockStart","insetBlockEnd","insetInline","insetInlineStart","insetInlineEnd","padding","paddingBlock","paddingBlockStart","paddingBlockEnd","paddingInline","paddingInlineStart","paddingInlineEnd","margin","marginTop","marginRight","marginBottom","marginLeft","marginBlock","marginBlockStart","marginBlockEnd","marginInline","marginInlineStart","marginInlineEnd","fontSize","backgroundPositionX","backgroundPositionY","scaleZ","distance","perspective","transformPerspective","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","defaultValueTypes","outlineColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","WebkitFilter","WebkitMask","getDefaultValueType","customTypes","defaultValueType","invalidTemplates","DOMKeyframesResolver","resolveNoneKeyframes","originType","targetType","noneKeyframeIndexes","animatableTemplate","noneIndex","makeNoneKeyframesAnimatable","measuredOrigin","measureViewportBox","measureKeyframe","finalKeyframeIndex","unsetTransformName","unsetTransformValue","resolveElements","elementOrSelector","selectorCache","getValueAsType","isHTMLElement","microtask","isDragging","isDragActive","setupGesture","gestureAbortController","hover","onHoverStart","eventOptions","hoverEndCallback","isPressed","deferredHoverEnd","endHover","onPointerLeave","onPointerUp","leaveEvent","enterEvent","onHoverEnd","isNodeOrChild","isPrimaryPointer","keyboardAccessibleElements","textInputElements","isPressing","filterEvents","firePointerEvent","PointerEvent","isValidPressEvent","claimedPointerDownEvents","press","targetOrSelector","onPressStart","targets","cancelEvents","startPress","startEvent","onPressEnd","onPointerEnd","endEvent","onPointerCancel","upEvent","useGlobalTarget","cancelEvent","focusEvent","handleKeydown","handleKeyup","enableKeyboardPress","isContentEditable","tabIndex","isSVGElement","resizeHandlers","observer","borderBoxAxis","svgAxis","htmlAxis","borderBoxSize","getBBox","getWidth","getHeight","notifyTarget","notifyAll","resizeElement","elementHandlers","windowCallbacks","windowResizeHandler","resizeWindow","resize","valueTypes","createBox","visualElementStore","isAnimationControls","isVariantLabel","variantPriorityOrder","variantProps","isControllingVariants","isVariantNode","prefersReducedMotion","hasReducedMotionListener","isBrowser","propEventHandlers","featureDefinitions","setFeatureDefinitions","definitions","VisualElement","scrapeMotionValuesFromProps","_props","_prevProps","_visualElement","reducedMotionConfig","blockInitialAnimation","visualState","valueSubscriptions","prevMotionValues","hasBeenMounted","propEventSubscriptions","notifyUpdate","triggerBuild","renderInstance","projection","renderScheduledAt","scheduleRender","baseTarget","initialValues","skipAnimationsConfig","manuallyAnimateOnMount","initialMotionValues","mount","removeFromVariantTree","addVariantChild","bindToMotionValue","motionMediaQuery","setReducedMotionPreferences","initPrefersReducedMotion","addChild","feature","enteringChildren","accelerate","valueIsTransform","onBindTransform","removeOnChange","latestValue","isTransformDirty","removeSyncCheck","MotionCheckAppearSync","sortInstanceNodePosition","updateFeatures","featureDefinition","Feature","FeatureConstructor","build","measureInstanceViewportBox","getStaticValue","setStaticValue","prevPresenceContext","existingValue","liveStyle","removeValue","updateMotionValuesFromProps","handleChildMotionValue","getVariant","getTransformPagePoint","transformPagePoint","getClosestVariantNode","closestVariantNode","removeValueFromRenderState","getBaseTargetFromProps","readValueFromInstance","setBaseTarget","getBaseTarget","valueFromInitial","scheduleRenderMicrotask","DOMVisualElement","vars","childSubscription","convertBoundingBoxToBox","isIdentityScale","hasScale","hasTransform","has2DTranslate","is2DTranslate","scalePoint","point","originPoint","applyPointDelta","translate","boxScale","applyAxisDelta","axis","applyBoxDelta","box","TREE_SCALE_SNAP_MIN","TREE_SCALE_SNAP_MAX","translateAxis","transformAxis","axisTranslate","axisScale","axisOrigin","resolveAxisTranslate","transformBox","sourceBox","resolveBox","transformPoint","topLeft","bottomRight","transformBoxPoints","getBoundingClientRect","translateAlias","numTransforms","buildHTMLStyles","transformOrigin","hasTransformOrigin","valueAsType","transformString","transformIsDefault","valueIsDefault","buildTransform","renderHTML","elementStyle","applyProjectionStyles","pixelsToPercent","pixels","correctBorderRadius","correct","correctBoxShadow","treeScale","projectionDelta","shadow","xScale","yScale","averageScale","scaleCorrectors","applyTo","boxShadow","isForcedMotionValue","layout","layoutId","prevStyle","HTMLVisualElement","isProjecting","readTransformValue","computedStyle","dashKeys","camelKeys","cssMotionPathProperties","buildSVGAttrs","attrX","attrY","attrScale","pathLength","pathSpacing","pathOffset","isSVGTag","attrs","spacing","useDashCase","buildSVGPath","camelCaseAttributes","scrapeMotionValuesFromProps$1","SVGVisualElement","defaultType","_styleProp","renderSVG","numVariantProps","getVariantContext","prop","shallowCompare","prevLength","reversePriorityOrder","numAnimationTypes","createAnimateFunction","resolvedDefinition","animateVisualElement","createAnimationState","createState","isInitialRender","wasReset","buildResolvedTypeValues","animateChanges","changedActiveType","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isInherited","prevProp","prevResolvedValues","variantDidChange","checkVariantsDidChange","shouldAnimateType","handledRemovedValues","definitionList","resolvedValues","markToAnimate","valueHasChanged","willAnimateViaParent","parentVariant","fallbackAnimation","initialTransition","fallbackTarget","shouldAnimate","setActive","setAnimateFunction","makeAnimator","createTypeState","whileInView","whileHover","whileTap","whileDrag","whileFocus","exit","copyAxisInto","originAxis","copyBoxInto","originBox","copyAxisDeltaInto","originDelta","calcLength","calcAxisDelta","calcBoxDelta","calcRelativeAxis","relative","anchor","anchorPoint","calcRelativeAxisPosition","calcRelativePosition","removePointDelta","removeAxisTransforms","transforms","scaleKey","originKey","sourceAxis","removeAxisDelta","xKeys","yKeys","removeBoxTransforms","isAxisDeltaZero","isDeltaZero","axisEquals","axisEqualsRounded","boxEqualsRounded","axisDeltaEquals","eachAxis","borderLabels","numBorders","asNumber","isPx","getRadius","radiusName","easeCrossfadeIn","compress","easeCrossfadeOut","addDomEvent","compareByDepth","FlatTree","isDirty","resolveMotionValue","NodeStack","lead","prevLead","promote","relegate","isPresent","preserveFollowOpacity","show","updateSnapshot","layoutDependency","prevDep","nextDep","resumeFrom","preserveOpacity","animationValues","isUpdating","isLayoutDirty","crossfade","hide","exitAnimationComplete","onExitComplete","resumingFrom","removeLeadSnapshot","globalProjectionState","hasAnimatedSinceResize","hasEverUpdated","transformAxes","resetDistortingTransform","sharedAnimationValues","cancelTreeOptimisedTransformAnimations","projectionNode","hasCheckedOptimisedAppear","MotionHasOptimisedAnimation","MotionCancelOptimisedAnimation","createProjectionNode","attachResizeListener","defaultParent","measureScroll","checkIsScrollRoot","resetTransform","animationId","animationCommitId","isTreeAnimating","isAnimationBlocked","isProjectionDirty","isSharedProjectionDirty","updateManuallyBlocked","updateBlockedByResize","isSVG","needsReset","shouldResetTransform","eventHandlers","hasTreeAnimated","layoutVersion","updateScheduled","scheduleUpdate","projectionUpdateScheduled","checkUpdateFailed","clearAllSnapshots","updateProjection","propagateDirtyNodes","resolveTargetDelta","calcProjection","cleanDirtyNodes","resolvedRelativeTargetAt","linkedParentVersion","hasProjected","animationProgress","sharedNodes","notifyListeners","subscriptionManager","hasListeners","cancelDelay","resizeUnblockUpdate","newInnerWidth","checkElapsed","finishAnimation","registerSharedNode","hasLayoutChanged","hasRelativeLayoutChanged","newLayout","isTreeAnimationBlocked","relativeTarget","layoutTransition","defaultLayoutTransition","onLayoutAnimationStart","onLayoutAnimationComplete","hasTargetChanged","targetLayout","hasOnlyRelativeTargetChanged","layoutRoot","currentAnimation","animationOptions","setAnimationOrigin","isLead","willUpdate","getStack","blockUpdate","unblockUpdate","isUpdateBlocked","startUpdate","resetSkewAndRotation","getTransformTemplate","shouldNotifyListeners","updateScroll","prevTransformTemplateValue","wasBlockedByResize","forceLayoutMeasure","clearMeasurements","clearIsLayoutDirty","ensureDraggedNodesSnapshotted","resetTransformStyle","updateLayout","notifyLayoutUpdate","didUpdate","clearSnapshot","removeLeadSnapshots","scheduleUpdateProjection","scheduleCheckAfterUnmount","measure","measuredBox","alwaysMeasureLayout","prevLayout","layoutCorrected","layoutBox","phase","layoutScroll","scroll","isRoot","wasRoot","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","removeTransform","pageBox","measurePageBox","removeElementScroll","roundAxis","checkNodeWasScrollRoot","boxWithoutScroll","applyTransform","transformOnly","withTransforms","boxWithoutTransform","setTargetDelta","targetDelta","forceRelativeParentToResolveTarget","relativeParent","forceRecalculation","getLead","isShared","attemptToResolveRelativeTarget","getClosestProjectingParent","removeRelativeTarget","layoutAnchor","createRelativeTarget","targetWithTransforms","relativeTargetOrigin","parentLayout","canSkip","pendingAnimation","prevTreeScaleX","prevTreeScaleY","treePath","isSharedTransition","treeLength","applyTreeDeltas","prevProjectionDelta","createProjectionDeltas","projectionDeltaWithTransform","snapshotLatestValues","mixedValues","relativeLayout","isSharedLayoutAnimation","isOnlyMember","shouldCrossfadeOpacity","hasOpacityCrossfade","prevRelativeTarget","mixTargetDelta","mixAxisDelta","mixAxis","follow","opacityExit","borderLabel","followRadius","leadRadius","mixValues","motionValue$1","animateSingleValue","completeAnimation","applyTransformsToTarget","shouldAnimatePositionOnly","animationType","xLength","yLength","initialPromotionConfig","shouldPreserveFollowOpacity","getPrevLead","hasDistortingTransform","resetValues","targetStyle","visibility","pointerEvents","valuesToRender","latestTransform","xTranslate","yTranslate","zTranslate","elementScaleX","elementScaleY","buildProjectionTransform","isCSSVariable","corrected","num","resetTree","measuredLayout","axisSnapshot","snapAxis","layoutDelta","visualDelta","parentSnapshot","relativeSnapshot","onBeforeLayoutMeasure","userAgentContains","roundPoint","maxDistance","DocumentProjectionNode","nodeGroup","dirtyAll","rootProjectionNode","HTMLProjectionNode","documentNode","MotionConfigContext","isStatic","reducedMotion","setRef","useComposedRefs","React.useCallback","hasCleanup","cleanups","composeRefs","PopChildMeasure","React.Component","childRef","parentWidth","parentHeight","sizeRef","PopChild","anchorX","anchorY","composedRef","motionPopId","sheet","insertRule","React.cloneElement","PresenceChild","presenceAffectsLayout","presenceChildren","newChildrenMap","isReusedContext","childId","isComplete","React.useEffect","usePresence","safeToRemove","getChildKey","onlyElements","filtered","AnimatePresence","propagate","isParentPresent","presentChildren","presentKeys","pendingPresentChildren","exitComplete","exitingComponents","diffedChildren","setDiffedChildren","renderedChildren","setRenderedChildren","exitingChildren","forceRender","isEveryExitComplete","isExitComplete","DeprecatedLayoutGroupContext","useForceUpdate","useIsMounted","forcedRenderCount","setForcedRenderCount","shouldInheritGroup","LayoutGroup","layoutGroupContext","deprecatedLayoutGroupContext","upstreamId","shouldInheritId","group","memoizedContext","LazyContext","strict","featureProps","drag","tap","pan","inView","isInitialized","getInitializedFeatureDefinitions","initialFeatureDefinitions","initFeatureDefinitions","validMotionProps","isValidMotionProp","shouldForward","loadExternalIsValidProp","isValidProp","MotionConfig","parentConfig","MotionContext","useCreateMotionContext","getCurrentTreeVariants","variantLabelsAsDependency","createHtmlRenderState","copyRawValuesOnly","useStyle","useInitialMotionValues","useHTMLProps","dragListener","draggable","userSelect","WebkitUserSelect","WebkitTouchCallout","touchAction","onTap","onTapStart","createSvgRenderState","useSVGProps","_isStatic","visualProps","rawStyles","lowercaseSVGElements","isSVGComponent","useRender","forwardMotionProps","filteredProps","isDom","filterProps","makeLatestValues","scrapeMotionValues","motionValues","isControllingVariants$1","isVariantNode$1","isInitialAnimationBlocked","variantToSet","makeUseVisualState","make","createRenderState","makeState","useHTMLVisualState","scrapeHTMLMotionValuesFromProps","useSVGVisualState","motionComponentSymbol","useMotionRef","externalRef","externalRefContainer","onMount","SwitchLayoutGroupContext","isRefObject","useVisualElement","createVisualElement","ProjectionNodeConstructor","lazyContext","motionConfig","visualElementRef","hasMountedOnce","renderer","initialLayoutGroupConfig","dragConstraints","layoutCrossfade","getClosestProjectingNode","optimisedAppearId","wantsHandoff","MotionHandoffIsComplete","MotionIsMounted","MotionHandoffMarkAsComplete","allowProjection","createMotionComponent","preloadedFeatures","loadFeatures","useVisualState","MotionDOMComponent","MeasureLayout","configAndProps","useLayoutId","layoutProjection","combined","ProjectionNode","getProjectionFunctionality","ForwardRefMotionComponent","layoutGroupId","createMotionProxy","Proxy","componentCache","_target","createDomVisualElement","updateAnimationControlsSubscription","unmountControls","prevAnimate","prevIsPresent","exitAnimation","extractEventInfo","addPointerEvent","addPointerInfo","getContextWindow","overflowStyles","PanSession","handlers","contextWindow","dragSnapToOrigin","distanceThreshold","lastMoveEvent","lastMoveEventInfo","lastRawMoveEventInfo","scrollPositions","removeScrollListeners","onElementScroll","handleScroll","onWindowScroll","updatePoint","getPanInfo","history","isPanStarted","isDistancePastThreshold","xDelta","yDelta","distance2D","onStart","onMove","handlePointerMove","handlePointerUp","onEnd","onSessionEnd","resumeAnimation","panInfo","initialInfo","onSessionStart","removeListeners","startScrollTracking","overflowX","overflowY","scrollX","scrollY","isWindow","updateHandlers","subtractPoint","lastDevicePoint","startDevicePoint","timeDelta","timestampedPoint","lastPoint","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","defaultElastic","resolveAxisElastic","dragElastic","minLabel","maxLabel","resolvePointElastic","elementDragControls","VisualElementDragControls","openDragLock","currentDirection","hasMutatedConstraints","elastic","latestPointerEvent","latestPanInfo","originEvent","snapToCursor","panSession","stopAnimation","dragPropagation","onDragStart","resolveConstraints","getAxisMotionValue","measuredAxis","dragDirectionLock","onDirectionLock","onDrag","lockThreshold","getCurrentDirection","updateAxis","snap","finalEvent","finalPanInfo","onDragEnd","endPanSession","_point","shouldDrag","axisValue","prevConstraints","resolveRefConstraints","calcRelativeConstraints","resolveDragElastic","relativeConstraints","rebaseAxisConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","viewportBox","measuredConstraints","calcViewportConstraints","userConstraints","convertBoxToBoundingBox","dragMomentum","dragTransition","onDragTransitionEnd","momentumAnimations","startAxisValueAnimation","dragKey","externalMotionValue","scalePositionWithinConstraints","boxProgress","sourceLength","targetLength","calcOrigin","addListeners","stopPointerListener","isClickingTextInputChild","isElementTextInput","stopResizeObservers","measureDragConstraints","onResize","stopElement","skipFirstCall","stopContainer","startResizeObservers","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","isFirst","asyncHandler","hasTakenAnySnapshot","MeasureLayoutWithContext","layoutGroup","switchLayoutGroup","promoteContext","deregister","removePointerDownListener","onPointerDown","pointerDownEvent","createPanHandlers","onPanSessionStart","onPanStart","onPan","onPanEnd","removeGroupControls","controls","dragControls","prevDragControls","handleHoverEvent","lifecycle","handlePressEvent","HTMLButtonElement","observerCallbacks","fireObserverCallback","fireAllObserverCallbacks","observeIntersection","rootInteresectionObserver","lookupRoot","rootObservers","initIntersectionObserver","thresholdNames","gestureAnimations","hasEnteredView","isInView","startObserver","stopObserver","viewport","amount","onViewportEnter","onViewportLeave","prevViewport","hasViewportOptionChanged","globalTapTarget","_element","onFocus","isFocusVisible","onBlur","motion","LOGOS","happy","black","white","sleepy","selectChatbotLogo","mood","hour","getHours","toLinear","variantFromPrimaryColor","asset","ChatHeader","subheader","logoUrl","isHealthy","titleId","compact","labels","resolvedLogo","alt","closeAriaLabel","strokeLinecap","strokeLinejoin","UL_LINE","OL_LINE","indentOf","whitespace","escapeHtml","escapeAttr","inlineMarkdown","_match","linkText","safeUrl","renderBlock","block","groupIndent","indent","html","out","renderList","renderMarkdown","blocks","listContinuesAfter","trimEnd","ulMatch","olMatch","parseBlocks","MarkdownBody","markdown","ChatSurface","messages","isAgentThinking","onSend","endedNotice","startNewLabel","onStartNew","renderMessage","beforeInput","hideInput","hasEnded","showComposer","inputValue","setInputValue","messagesEndRef","inputRef","scrollIntoView","behavior","handleSend","blur","handleKeyDown","sendDisabled","empty","ts","toLocaleTimeString","minute","defaultMessageNode","rendered","thinking","enterKeyHint","scrollHeight","onKeyDown","placeholder","rows","normalizeForCompare","LiveKitChatBridge","beginMessage","pendingUserMessages","seedMessages","onMessagesChange","extraMessages","useChat","useLocalParticipant","transcriptions","useTranscriptions","useConnectionState","transcriptionTimestampsRef","sentRef","messagesToSend","user","pendingTextsRemaining","normalizedBegin","beginEchoConsumed","stamps","lastSender","PreConnectChatPane","onPendingMessage","FrozenChatPane","ModalHeader","OverviewScreen","overview","onStartChat","onQuickStart","heading","defaultAssistantName","startChatLabel","start_chat_label","defaultStartChatLabel","rootStyle","quick_starts","quickStartHeading","quickStart","procedure_id","bookmarks","bookmarksHeading","bookmark","icon","VerbuMark","xmlns","clipRule","fillRule","PoweredByFooter","footer","ariaLabel","poweredBy","StarRating","hoverValue","setHoverValue","displayValue","onMouseLeave","star","onMouseEnter","StarIcon","filled","RatingScreen","onSubmitRating","onSubmitFeedback","selectedMode","onDismiss","rating","setRating","setFeedback","isSubmitting","setIsSubmitting","ratingTitle","titleChat","titleCall","finishAfterSubmit","handleRatingChange","newRating","noThanks","thankYou","submit","candidateSelectors","candidateSelector","NoElement","msMatchesSelector","webkitMatchesSelector","_element$getRootNode","_isInert","lookUp","_node$getAttribute","inertAtt","closest","getCandidates","includeContainer","_getCandidatesIteratively","elementsToCheck","assigned","assignedElements","nestedCandidates","flatten","scopeParent","shadowRoot","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","hasTabIndex","getTabIndex","_node$getAttribute2","attValue","sortOrderedTabbables","documentOrder","isInput","isNonTabbableRadio","isRadio","radioSet","radioScope","queryRadios","CSS","escape","getCheckedRadio","isTabbableRadio","isZeroArea","_node$getBoundingClie","displayCheck","checkVisibility","checkOpacity","opacityProperty","contentVisibilityAuto","visibilityProperty","checkVisibilityCSS","nodeUnderDetails","originalNode","rootNode","assignedSlot","_nodeRoot","_nodeRootHost","_nodeRootHost$ownerDo","_node$ownerDocument","nodeRoot","nodeRootHost","attached","_nodeRoot2","_nodeRootHost2","_nodeRootHost2$ownerD","isNodeAttached","getClientRects","isNodeMatchingSelectorFocusable","isHiddenInput","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isShadowRootTabbable","shadowHostNode","_sortByOrder","regularTabbables","orderedTabbables","isScope","candidateTabindex","getSortOrderTabIndex","sortable","tabbable","focusable","isTabbable","focusableCandidateSelector","isFocusable","asyncGeneratorStep","_asyncToGenerator","_throw","_createForOfIteratorHelper","_objectSpread2","_regenerator","Generator","_regeneratorDefine","GeneratorFunction","GeneratorFunctionPrototype","_invoke","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","activeFocusTraps","getActiveTrap","trapStack","activateTrap","trap","pauseTrap","trapIndex","deactivateTrap","unpauseTrap","activeTrap","_setPausedState","_isManuallyPaused","isTabEvent","isKeyForward","isKeyBackward","valueOrHandler","getActualTarget","composedPath","internalTrapStack","userOptions","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","isolateSubtrees","containers","containerGroups","tabbableGroups","adjacentElements","alreadySilent","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","manuallyPaused","delayInitialFocusTimer","recentNavEvent","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","getNodeForOption","_ref2$hasFallback","hasFallback","_ref2$params","optionValue","getInitialFocusNode","tabbableOptions","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","focusableNodes","lastTabbableNode","firstDomTabbableNode","lastDomTabbableNode","posTabIndexesFound","nextTabbableNode","forward","nodeIdx","_getActiveElement","_tryFocus","preventScroll","select","isSelectableInput","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref3$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_destinationGroupIndex","_destinationGroup","checkPointerDown","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","checkFocusIn","targetContained","Document","stopImmediatePropagation","navAcrossContainers","mruContainerIdx","mruTabIdx","checkTabKey","checkKeyNav","checkEscapeKey","isEscapeEvent","checkClick","mutationObserver","MutationObserver","mutations","mutation","removedNodes","updateObservedNodes","subtree","childList","activate","activateOptions","_preexistingTrap$_set","onActivate","onPostActivate","checkCanFocusTrap","preexistingTrap","revertState","_setSubtreeIsolation","finishActivation","_callee","_preexistingTrap$_set2","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","pauseOptions","unpause","unpauseOptions","updateContainerElements","containerElements","elementsAsArray","_step","containerAncestors","_iterator","insideShadowRoot","ShadowRoot","siblings","_step2","_iterator2","collectAdjacentElements","onPause","onPostPause","onUnpause","onPostUnpause","finishUnpause","_callee2","_context2","_el$getAttribute","ariaHidden","inert","_typeof","_exec$","_exec","_createClass","_defineProperties","_callSuper","_getPrototypeOf","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","_setPrototypeOf","createFocusTrap","require$$2","reactVerMajor","FocusTrap","_React$Component","_classCallCheck","_this$internalOptions","originalOptions","_this$getDocument","getDocument","handleDeactivate","handlePostDeactivate","handleClickOutsideDeactivates","focusTrapOptions","outsideClick","focusTrapElements","updatePreviousElement","_inherits","previouslyFocusedElement","currentDocument","focusTrap","allowDeactivation","returnFocusNode","canReturnFocus","_this2$internalOption","_createFocusTrap","setupFocusTrap","hasActivated","hasDeactivated","hasPaused","hasUnpaused","focusTrapReactModule","Stage","sizing","HTMLTextAreaElement","classList","initialFocus","fallbackFocus","div","CONTENT_FADE","Trigger","pillLogo","showNotification","resolvedPrimary","fg","getContrastTextColor","triggerLogo","floatingButton","span","GRID_SIZE","buildDots","dots","dx","dy","dist","RADIUS","norm","AgentGridVisualizer","volumeBands","useMultibandTrackVolume","setTick","useAnimationTick","containerStyle","gridTemplateColumns","gridTemplateRows","gap","dot","isHighlighted","amp","halfHeight","isSpeakingHighlight","isThinkingHighlight","totalSteps","targetAngle","isConnectingHighlight","isListeningHighlight","isCellHighlighted","transitionMs","ANIM_INTERVAL_MS","transitionDuration","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__pow","__defNormalProp","__spreadValues","__async","__this","__arguments","RSLOG","LinearFilter","isPowerOf2","floorPowerOfTwo","Texture","gl","isLoaded","isVideo","flipY","_webglTexture","updateTexture","texture","internalFormat","RGBA","srcFormat","srcType","UNSIGNED_BYTE","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_FLIP_Y_WEBGL","texImage2D","setupVideo","playing","timeupdate","checkReady","videoWidth","videoHeight","makePowerOfTwo","image","HTMLImageElement","HTMLCanvasElement","ImageBitmap","pow2canvas","drawImage","load","textureArgs","wrapS","wrapT","minFilter","magFilter","isImage","pixel","createTexture","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","image2","Image","loadImage","isPowerOfTwoImage","textureNeedsPowerOfTwo","isPowerOfTwo","textureNeedsGenerateMipmaps","generateMipmap","TEXTURE_MAG_FILTER","PRECISIONS","BASIC_VS","UNIFORM_TIME","UNIFORM_TIMEDELTA","UNIFORM_DATE","UNIFORM_FRAME","UNIFORM_MOUSE","UNIFORM_RESOLUTION","UNIFORM_CHANNELRESOLUTION","UNIFORM_DEVICEORIENTATION","latestPointerClientCoords","lerpVal","v0","Shader","initWebGL","fs","clearColor","clearDepth","DEPTH_TEST","depthFunc","LEQUAL","processCustomUniforms","processTextures","shaders","preProcessShaders","initShaders","initBuffers","drawScene","addEventListeners","setupChannelRes","uniforms","iChannelResolution","contextAttributes","squareVerticesBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","iMouse","isNeeded","mouseMove","mouseUp","iDeviceOrientation","onDeviceOrientationChange","removeEventListeners","beta","gamma","orientation","clientY2","mouseX","canvasPosition","mouseY","mousedown","lastMouseArr","lerp","realToCSSPixels","displayWidth","displayHeight","iResolution","shaderProgram","rUniform","getUniformLocation","uniform2fv","drawingBufferWidth","drawingBufferHeight","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","vertexAttribPointer","vertexPositionAttribute","setUniforms","drawArrays","TRIANGLE_STRIP","animFrameId","createShader","shaderCodeAsText","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","onWarning","compilationLog","getShaderInfoLog","deleteShader","fragmentShader","FRAGMENT_SHADER","vertexShader","VERTEX_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","useProgram","getAttribLocation","enableVertexAttribArray","getProgramInfoLog","uniform","glslType","uniformTypeToGLSLType","tempObject","isMatrixType","arrayLength","numberOfMatrices","arraySize","isVectorListType","textures","onDoneLoadingTextures","texturePromisesArr","texturesArr","precision","dprString","isValidPrecision","precisionString","fsString","indexOfPrecisionString","currentString","lastTime","_a2","_b2","currentUniform","customUniformLocation","uniform1f","uniform2f","uniform3f","uniform4f","uniform1i","uniform2i","uniform3i","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","processUniform","mouseUniform","channelResUniform","deviceOrientationUniform","iTime","timeUniform","iTimeDelta","timeDeltaUniform","iDate","getMonth","day","getDate","year","getFullYear","getMinutes","getSeconds","getMilliseconds","dateUniform","iFrame","iChannel","activeTexture","registerCanvas","currentStyle","glCanvas","loseContext","deleteProgram","deleteTexture","VoicePane","isConnecting","onHangup","stateLabel","modal","connecting","voiceState","agentState","VoicePaneShell","ConnectedVoicePane","useVoiceAssistant","livekitTrack","safeAudioTrack","listening","initializing","labelForAgentState","endCall","idleNoop","onWarn","DEFAULT_OPTIONS","maxAttempts","initialDelayMs","maxDelayMs","backoffMultiplier","defaultIsRetryable","calculateDelay","attempt","exponentialDelay","cappedDelay","fetchWithRetry","retryOptions","onRetry","isRetryable","lastError","delayMs","withRetry","errorBody","resolveMode","setting","explicit","ConnectionMonitor","onReconnecting","onReconnected","prevStateRef","Widget","onRef","useLocale","useViewport","widgetConfig","setWidgetConfig","configError","setConfigError","isOpen","isReconnecting","currentAgentId","showRating","isEnding","endReason","setSession","showOverview","setShowOverview","setRetryCount","setPendingUserMessages","entryProcedurePinned","setEntryProcedurePinned","setSeedMessages","sessionDataForRating","setSessionDataForRating","liveTranscriptRef","frozenTranscript","setFrozenTranscript","ratingDismissed","setRatingDismissed","retryTimeoutRef","endTransitionTimeoutRef","agentOverrideRef","isSessionInProgressRef","containerRef","lastFocusedTriggerRef","headerId","locked","scrollPositionRef","originalStylesRef","scrollbarWidth","useBodyScrollLock","uiConfig","mergeUIConfig","agentIds","ids","defaultAgentId","interactionMode","apiUrl","widgetId","fetchConfig","startSessionWithAgent","agentId","sessionMode","entryProcedureId","resolvedAgentId","visitorId","page","referrer","nextDelayMs","sessionData","handleOpen","resetWidget","finalizeEnd","askForRating","canShowRating","isChat","roomName","handleEndCall","handleStartChatFromOverview","procedureId","entryProcedureLabel","procedureLabel","promptText","prompt","handleClose","handleDisconnected","onTimeout","timerRef","onTimeoutRef","pingRef","useIdleTimeout","handleSubmitRating","handleSubmitFeedback","startWithAgent","startChat","openChat","startVoiceCall","getAgentIds","getDefaultAgentId","getCurrentMode","getCurrentAgentId","closedPositionStyles","openPositionStyles","defaultBranding","primary_color","logo_url","theme","branding","themeAttribute","isVoice","subheaderText","triggerVariant","displayStyle","showPoweredByFooter","errorWithRetries","headerStatus","ending","chatLabels","renderChat","startNew","msgs","renderBody","tryAgain","renderShell","stage","LiveKitRoom","wsUrl","RoomAudioRenderer","trigger","ctaLabel","showPillNotification","wrapperStyle","currentConfig","widgetRef","finalConfig","showLanguageSelector","getConfig","VoiceWidget","_loaded","existingWidget","_q","command","processQueue","currentScript","autoInit"],"mappings":"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CAskC,EAAa/hB,oBAGjBqnB,IAAoB5pC,GACf,OAAS4pC,EACN,OAASjxC,EAAQiP,YACfjP,EAAUA,EAAQiP,WACZL,WAAWm8B,YAAY/qC,GAC/BixC,EAAgBv0C,QACpB,OAAS2K,EACLsqC,GACEX,EACArF,EAAa37C,KACb27C,EAAa18B,WAEf2iC,GACEZ,EACA3pC,EACAskC,EAAa/hB,gBAEnB,OAASviB,GACT,OAASskC,EAAa18B,WACtB49B,GACElB,EACAA,EAAa/hB,cACb5pB,EAAQ4pB,cAExB,CACM,MACF,KAAK,GACH8mB,GAAmC9kC,EAAM+/B,GACzCoF,GAA4BpF,GACpB,IAARtkC,IACGinC,IACC,OAAStuC,GACTusC,GAAgBvsC,EAASA,EAAQoH,SACrC,OAASpH,GACC,EAARqH,GACAwlC,GACElB,EACAA,EAAa/hB,cACb5pB,EAAQ4pB,eAEZ,MACF,KAAK,EAOH,GANA8mB,GAAmC9kC,EAAM+/B,GACzCoF,GAA4BpF,GACpB,IAARtkC,IACGinC,IACC,OAAStuC,GACTusC,GAAgBvsC,EAASA,EAAQoH,SACZ,GAArBukC,EAAatkC,MAAY,CAC3B2pC,EAAgBrF,EAAa18B,UAC7B,IACEiH,GAAe86B,EAAe,GACxC,OAAiBh7C,GACP61C,GAAwBF,EAAcA,EAAavkC,OAAQpR,EACrE,CACA,CACc,EAARqR,GACE,MAAQskC,EAAa18B,WAErB49B,GACElB,EAFAqF,EAAgBrF,EAAa/hB,cAI7B,OAAS5pB,EAAUA,EAAQ4pB,cAAgBonB,GAEvC,KAAR3pC,IAAiBknC,IAAiB,GAClC,MACF,KAAK,EAGH,GAFAmC,GAAmC9kC,EAAM+/B,GACzCoF,GAA4BpF,GAChB,EAARtkC,EAAW,CACb,GAAI,OAASskC,EAAa18B,UACxB,MAAMlW,MAAMqK,EAAuB,MACrCiE,EAAQskC,EAAa/hB,cACrB5pB,EAAU2rC,EAAa18B,UACvB,IACEjP,EAAQsW,UAAYjP,CAC9B,OAAiBrR,GACP61C,GAAwBF,EAAcA,EAAavkC,OAAQpR,EACrE,CACA,CACM,MACF,KAAK,EAOH,GANA67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cAAczI,SACzBgB,IACd2rC,EAAanb,WAAY,MAAQxwB,GAAWywB,GAAazwB,GAC9D,CACA,SAAS8yC,GACPlnC,EACAglC,EACAmC,EACAC,GAEA,GAA+B,MAA3BpC,EAAY/mB,aACd,IAAK+mB,EAAcA,EAAYj0C,MAAO,OAASi0C,GAC7CqC,GACErnC,EACAglC,EACAmC,EACAC,GAECpC,EAAcA,EAAY/oC,OACnC,CACA,SAASorC,GACPrE,EACAjD,EACAoH,EACAC,GAEA,IAAI3rC,EAAQskC,EAAatkC,MACzB,OAAQskC,EAAarkC,KACnB,KAAK,EACL,KAAK,GACL,KAAK,GACHwrC,GACElE,EACAjD,EACAoH,EACAC,GAEM,KAAR3rC,GAAgBqkC,GAA0B,EAAGC,GAC7C,MACF,KAAK,EAuDL,KAAK,GAiDL,QACEmH,GACElE,EACAjD,EACAoH,EACAC,SArGJ,KAAK,EACHF,GACElE,EACAjD,EACAoH,EACAC,GAEM,KAAR3rC,IACIunC,EAAe,KACjB,OAASjD,EAAaxkC,YACnBynC,EAAejD,EAAaxkC,UAAUM,cAAczI,QACtD2sC,EAAeA,EAAalkC,cAAczI,SAC1B4vC,IACdjD,EAAanb,WACd,MAAQoe,GAAgBne,GAAame,KACzC,MACF,KAAK,GACH,GAAY,KAARvnC,EAAc,CAChByrC,GACElE,EACAjD,EACAoH,EACAC,GAEFpE,EAAejD,EAAa18B,UAC5B,IACE,IAAIikC,EAAyBvH,EAAa/hB,cACxCz3B,EAAK+gD,EAAuB/gD,GAC5BghD,EAAeD,EAAuBC,aACxC,mBAAsBA,GACpBA,EACEhhD,EACA,OAASw5C,EAAaxkC,UAAY,QAAU,SAC5CynC,EAAawE,uBACb,EAEd,OAAiBp9C,GACP61C,GAAwBF,EAAcA,EAAavkC,OAAQpR,EACrE,CACA,MACQ88C,GACElE,EACAjD,EACAoH,EACAC,GAEJ,MASF,KAAK,GACH,MACF,KAAK,GACHE,EAAyBvH,EAAa18B,UACtC9c,EAAKw5C,EAAaxkC,UAClB,OAASwkC,EAAalkC,cACmB,EAArCyrC,EAAuBjqB,YACrB6pB,GACElE,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,308,309,310,315]}