{"version":3,"file":"static/components/6085-4aa9118c7d9439da.js?cv=7","sources":["webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/metrics/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/metrics/utils.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/request.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/browsertracing.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/router.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/backgroundtab.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/common/fetch.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/polyfills/interactionCountPolyfill.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/instrument.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/bindReporter.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/getActivationStart.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/initMetric.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/generateUniqueID.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/observe.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getINP.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getLCP.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/onTTFB.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getCLS.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getFID.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/types.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/getNavigationEntry.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/getVisibilityWatcher.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/onHidden.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/@sentry-internal/tracing/esm/common/debug-build.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/normalize.css/normalize.css","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/css-loader/dist/runtime/getUrl.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/history/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/react-select/dist/react-select.esm.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/react-use/esm/useUpdate.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/react-use/esm/useTimeout.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/node_modules/react-use/esm/useTimeoutFn.js"],"sourcesContent":["import { getActiveTransaction, spanToJSON, setMeasurement, getClient, Span, createSpanEnvelope, hasTracingEnabled, isValidSampleRate } from '@sentry/core';\nimport { browserPerformanceTimeOrigin, htmlTreeAsString, getComponentName, logger, parseUrl } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../../common/debug-build.js';\nimport { addPerformanceInstrumentationHandler, addClsInstrumentationHandler, addLcpInstrumentationHandler, addFidInstrumentationHandler, addTtfbInstrumentationHandler, addInpInstrumentationHandler } from '../instrument.js';\nimport { WINDOW } from '../types.js';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher.js';\nimport { _startChild, isMeasurementValue } from './utils.js';\nimport { getNavigationEntry } from '../web-vitals/lib/getNavigationEntry.js';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n  return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI() {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals() {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCallback = _trackFID();\n    const clsCallback = _trackCLS();\n    const lcpCallback = _trackLCP();\n    const ttfbCallback = _trackTtfb();\n\n    return () => {\n      fidCallback();\n      clsCallback();\n      lcpCallback();\n      ttfbCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction() ;\n      if (!transaction) {\n        return;\n      }\n      const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.startChild({\n        description: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: startTime,\n        endTimestamp: startTime + duration,\n      });\n    }\n  });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction() ;\n      if (!transaction) {\n        return;\n      }\n\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        const span = {\n          description: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          origin: 'auto.ui.browser.metrics',\n          startTimestamp: startTime,\n          endTimestamp: startTime + duration,\n        };\n\n        const componentName = getComponentName(entry.target);\n        if (componentName) {\n          span.attributes = { 'ui.component_name': componentName };\n        }\n\n        // eslint-disable-next-line deprecation/deprecation\n        transaction.startChild(span);\n      }\n    }\n  });\n}\n\n/**\n * Start tracking INP webvital events.\n */\nfunction startTrackingINP(\n  interactionIdtoRouteNameMapping,\n  interactionsSampleRate,\n) {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    const inpCallback = _trackINP(interactionIdtoRouteNameMapping, interactionsSampleRate);\n\n    return () => {\n      inpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS() {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry ;\n  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry ;\n  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin );\n    const startTime = msToSec(entry.startTime);\n    DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\nfunction _trackTtfb() {\n  return addTtfbInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n    _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n  });\n}\n\nconst INP_ENTRY_MAP = {\n  click: 'click',\n  pointerdown: 'click',\n  pointerup: 'click',\n  mousedown: 'click',\n  mouseup: 'click',\n  touchstart: 'click',\n  touchend: 'click',\n  mouseover: 'hover',\n  mouseout: 'hover',\n  mouseenter: 'hover',\n  mouseleave: 'hover',\n  pointerover: 'hover',\n  pointerout: 'hover',\n  pointerenter: 'hover',\n  pointerleave: 'hover',\n  dragstart: 'drag',\n  dragend: 'drag',\n  drag: 'drag',\n  dragenter: 'drag',\n  dragleave: 'drag',\n  dragover: 'drag',\n  drop: 'drag',\n  keydown: 'press',\n  keyup: 'press',\n  keypress: 'press',\n  input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP(\n  interactionIdToRouteNameMapping,\n  interactionsSampleRate,\n) {\n  return addInpInstrumentationHandler(({ metric }) => {\n    if (metric.value === undefined) {\n      return;\n    }\n    const entry = metric.entries.find(\n      entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name] !== undefined,\n    );\n    const client = getClient();\n    if (!entry || !client) {\n      return;\n    }\n    const interactionType = INP_ENTRY_MAP[entry.name];\n    const options = client.getOptions();\n    /** Build the INP span, create an envelope from the span, and then send the envelope */\n    const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n    const duration = msToSec(metric.value);\n    const interaction =\n      entry.interactionId !== undefined ? interactionIdToRouteNameMapping[entry.interactionId] : undefined;\n    if (interaction === undefined) {\n      return;\n    }\n    const { routeName, parentContext, activeTransaction, user, replayId } = interaction;\n    const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n    // eslint-disable-next-line deprecation/deprecation\n    const profileId = activeTransaction !== undefined ? activeTransaction.getProfileId() : undefined;\n    const span = new Span({\n      startTimestamp: startTime,\n      endTimestamp: startTime + duration,\n      op: `ui.interaction.${interactionType}`,\n      name: htmlTreeAsString(entry.target),\n      attributes: {\n        release: options.release,\n        environment: options.environment,\n        transaction: routeName,\n        ...(userDisplay !== undefined && userDisplay !== '' ? { user: userDisplay } : {}),\n        ...(profileId !== undefined ? { profile_id: profileId } : {}),\n        ...(replayId !== undefined ? { replay_id: replayId } : {}),\n      },\n      exclusiveTime: metric.value,\n      measurements: {\n        inp: { value: metric.value, unit: 'millisecond' },\n      },\n    });\n\n    /** Check to see if the span should be sampled */\n    const sampleRate = getSampleRate(parentContext, options, interactionsSampleRate);\n\n    if (!sampleRate) {\n      return;\n    }\n\n    if (Math.random() < (sampleRate )) {\n      const envelope = span ? createSpanEnvelope([span], client.getDsn()) : undefined;\n      const transport = client && client.getTransport();\n      if (transport && envelope) {\n        transport.send(envelope).then(null, reason => {\n          DEBUG_BUILD && logger.error('Error while sending interaction:', reason);\n        });\n      }\n      return;\n    }\n  });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(transaction) {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n  const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n  const performanceEntries = performance.getEntries();\n\n  const { op, start_timestamp: transactionStartTime } = spanToJSON(transaction);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  performanceEntries.slice(_performanceCursor).forEach((entry) => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(entry.duration);\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (transaction.op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(transaction, entry, timeOrigin);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        _addResourceSpans(transaction, entry, entry.name , startTime, duration, timeOrigin);\n        break;\n      }\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(transaction);\n\n  // Measurements are only available for pageload transactions\n  if (op === 'pageload') {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      if (!_measurements[name] || !transactionStartTime || timeOrigin >= transactionStartTime) {\n        return;\n      }\n      // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n      // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n      // to be adjusted to be relative to transaction.startTimestamp.\n      const oldValue = _measurements[name].value;\n      const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n      // normalizedValue should be in milliseconds\n      const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n      _measurements[name].value = normalizedValue;\n    });\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      _startChild(transaction, {\n        description: 'first input delay',\n        endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n        op: 'ui.action',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: fidMark.value,\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If FCP is not recorded we should not record the cls value\n    // according to the new definition of CLS.\n    if (!('fcp' in _measurements)) {\n      delete _measurements.cls;\n    }\n\n    Object.keys(_measurements).forEach(measurementName => {\n      setMeasurement(measurementName, _measurements[measurementName].value, _measurements[measurementName].unit);\n    });\n\n    _tagMetricInfo(transaction);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/** Create measure related spans */\nfunction _addMeasureSpans(\n  transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry,\n  startTime,\n  duration,\n  timeOrigin,\n) {\n  const measureStartTimestamp = timeOrigin + startTime;\n  const measureEndTimestamp = measureStartTimestamp + duration;\n\n  _startChild(transaction, {\n    description: entry.name ,\n    endTimestamp: measureEndTimestamp,\n    op: entry.entryType ,\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp: measureStartTimestamp,\n  });\n\n  return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction, entry, timeOrigin) {\n  ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n    _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n  _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n  _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n  _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry,\n  event,\n  timeOrigin,\n  description,\n  eventEnd,\n) {\n  const end = eventEnd ? (entry[eventEnd] ) : (entry[`${event}End`] );\n  const start = entry[`${event}Start`] ;\n  if (!start || !end) {\n    return;\n  }\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: description || event,\n    startTimestamp: timeOrigin + msToSec(start),\n    endTimestamp: timeOrigin + msToSec(end),\n  });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction, entry, timeOrigin) {\n  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire transaction if it contained faulty spans.\n    _startChild(transaction, {\n      op: 'browser',\n      origin: 'auto.browser.browser.metrics',\n      description: 'request',\n      startTimestamp: timeOrigin + msToSec(entry.requestStart ),\n      endTimestamp: timeOrigin + msToSec(entry.responseEnd ),\n    });\n\n    _startChild(transaction, {\n      op: 'browser',\n      origin: 'auto.browser.browser.metrics',\n      description: 'response',\n      startTimestamp: timeOrigin + msToSec(entry.responseStart ),\n      endTimestamp: timeOrigin + msToSec(entry.responseEnd ),\n    });\n  }\n}\n\n/** Create resource-related spans */\nfunction _addResourceSpans(\n  transaction,\n  entry,\n  resourceUrl,\n  startTime,\n  duration,\n  timeOrigin,\n) {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  const parsedUrl = parseUrl(resourceUrl);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data = {};\n  setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  if ('renderBlockingStatus' in entry) {\n    data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n  if (parsedUrl.protocol) {\n    data['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    data['server.address'] = parsedUrl.host;\n  }\n\n  data['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  _startChild(transaction, {\n    description: resourceUrl.replace(WINDOW.location.origin, ''),\n    endTimestamp,\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp,\n    data,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction) {\n  const navigator = WINDOW.navigator ;\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction) {\n  if (_lcpEntry) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry && _clsEntry.sources) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n    _clsEntry.sources.forEach((source, index) =>\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  data,\n  entry,\n  key,\n  dataKey,\n) {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    data[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements) {\n  const navEntry = getNavigationEntry();\n  if (!navEntry) {\n    return;\n  }\n\n  const { responseStart, requestStart } = navEntry;\n\n  if (requestStart <= responseStart) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n    _measurements['ttfb.requestTime'] = {\n      value: responseStart - requestStart,\n      unit: 'millisecond',\n    };\n  }\n}\n\n/** Taken from @sentry/core sampling.ts */\nfunction getSampleRate(\n  transactionContext,\n  options,\n  interactionsSampleRate,\n) {\n  if (!hasTracingEnabled(options)) {\n    return false;\n  }\n  let sampleRate;\n  if (transactionContext !== undefined && typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler({\n      transactionContext,\n      name: transactionContext.name,\n      parentSampled: transactionContext.parentSampled,\n      attributes: {\n        // eslint-disable-next-line deprecation/deprecation\n        ...transactionContext.data,\n        ...transactionContext.attributes,\n      },\n      location: WINDOW.location,\n    });\n  } else if (transactionContext !== undefined && transactionContext.sampled !== undefined) {\n    sampleRate = transactionContext.sampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n  } else {\n    sampleRate = 1;\n  }\n  if (!isValidSampleRate(sampleRate)) {\n    DEBUG_BUILD && logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.');\n    return false;\n  }\n  if (sampleRate === true) {\n    return interactionsSampleRate;\n  } else if (sampleRate === false) {\n    return 0;\n  }\n  return sampleRate * interactionsSampleRate;\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingINP, startTrackingInteractions, startTrackingLongTasks, startTrackingWebVitals };\n//# sourceMappingURL=index.js.map\n","/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n *\n * Note: this will not be possible anymore in v8,\n * unless we do some special handling for browser here...\n */\nfunction _startChild(transaction, { startTimestamp, ...ctx }) {\n  // eslint-disable-next-line deprecation/deprecation\n  if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.startTimestamp = startTimestamp;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return transaction.startChild({\n    startTimestamp,\n    ...ctx,\n  });\n}\n\nexport { _startChild, isMeasurementValue };\n//# sourceMappingURL=utils.js.map\n","import { spanToJSON, hasTracingEnabled, setHttpStatus, getCurrentScope, getIsolationScope, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getClient, spanToTraceHeader, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport { addFetchInstrumentationHandler, parseUrl, addXhrInstrumentationHandler, SENTRY_XHR_DATA_KEY, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, BAGGAGE_HEADER_NAME, browserPerformanceTimeOrigin, stringMatchesSomePattern } from '@sentry/utils';\nimport { instrumentFetchRequest } from '../common/fetch.js';\nimport { addPerformanceInstrumentationHandler } from './instrument.js';\nimport { WINDOW } from './types.js';\n\n/* eslint-disable max-lines */\n\nconst DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\n\nconst defaultRequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  // TODO (v8): Remove this property\n  tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n  tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nfunction instrumentOutgoingRequests(_options) {\n  const {\n    traceFetch,\n    traceXHR,\n    // eslint-disable-next-line deprecation/deprecation\n    tracePropagationTargets,\n    // eslint-disable-next-line deprecation/deprecation\n    tracingOrigins,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n  } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n  // TODO(v8) Remove tracingOrigins here\n  // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n  // and we don't want to break the API. We can remove it in v8.\n  const shouldAttachHeadersWithTargets = (url) =>\n    shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n  const spans = {};\n\n  if (traceFetch) {\n    addFetchInstrumentationHandler(handlerData => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      // We cannot use `window.location` in the generic fetch instrumentation,\n      // but we need it for reliable `server.address` attribute.\n      // so we extend this in here\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n        createdSpan.setAttributes({\n          'http.url': fullUrl,\n          'server.address': host,\n        });\n      }\n\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addXhrInstrumentationHandler(handlerData => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry ).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n  const { url } = spanToJSON(span).data || {};\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setAttribute(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/');\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1];\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\nfunction getAbsoluteTime(time = 0) {\n  return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nfunction shouldAttachHeaders(url, tracePropagationTargets) {\n  return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nfunction xhrCallback(\n  handlerData,\n  shouldCreateSpan,\n  shouldAttachHeaders,\n  spans,\n) {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!hasTracingEnabled() || !xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span && sentryXhrData.status_code !== undefined) {\n      setHttpStatus(span, sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const isolationScope = getIsolationScope();\n\n  const fullUrl = getFullURL(sentryXhrData.url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n        onlyIfParent: true,\n        attributes: {\n          type: 'xhr',\n          'http.method': sentryXhrData.method,\n          'http.url': fullUrl,\n          url: sentryXhrData.url,\n          'server.address': host,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n        },\n        op: 'http.client',\n      })\n    : undefined;\n\n  if (span) {\n    xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n    spans[xhr.__sentry_xhr_span_id__] = span;\n  }\n\n  const client = getClient();\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n    const { traceId, spanId, sampled, dsc } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n    const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n      dsc ||\n        (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n    );\n\n    setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n  }\n\n  return span;\n}\n\nfunction setHeaderOnXhr(\n  xhr,\n  sentryTraceHeader,\n  sentryBaggageHeader,\n) {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n\nfunction getFullURL(url) {\n  try {\n    // By adding a base URL to new URL(), this will also work for relative urls\n    // If `url` is a full URL, the base URL is ignored anyhow\n    const parsed = new URL(url, WINDOW.location.origin);\n    return parsed.href;\n  } catch (e) {\n    return undefined;\n  }\n}\n\nexport { DEFAULT_TRACE_PROPAGATION_TARGETS, defaultRequestInstrumentationOptions, extractNetworkProtocol, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { TRACING_DEFAULTS, addTracingExtensions, startIdleTransaction, getActiveTransaction, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getClient, getCurrentScope } from '@sentry/core';\nimport { logger, propagationContextFromHeaders, getDomElement } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { addPerformanceInstrumentationHandler } from './instrument.js';\nimport { startTrackingWebVitals, startTrackingINP, startTrackingLongTasks, startTrackingInteractions, addPerformanceEntries } from './metrics/index.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\nimport { instrumentRoutingWithDefaults } from './router.js';\nimport { WINDOW } from './types.js';\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n  ...TRACING_DEFAULTS,\n  markBackgroundTransactions: true,\n  routingInstrumentation: instrumentRoutingWithDefaults,\n  startTransactionOnLocationChange: true,\n  startTransactionOnPageLoad: true,\n  enableLongTask: true,\n  enableInp: false,\n  interactionsSampleRate: 1,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/** We store up to 10 interaction candidates max to cap memory usage. This is the same cap as getINP from web-vitals */\nconst MAX_INTERACTIONS = 10;\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n *\n * @deprecated Use `browserTracingIntegration()` instead.\n */\nclass BrowserTracing  {\n  // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n  // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n  // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n  // integrations.\n\n  /** Browser Tracing integration options */\n\n  /**\n   * @inheritDoc\n   */\n\n  // eslint-disable-next-line deprecation/deprecation\n\n   constructor(_options) {\n    this.name = BROWSER_TRACING_INTEGRATION_ID;\n    this._hasSetTracePropagationTargets = false;\n\n    addTracingExtensions();\n\n    if (DEBUG_BUILD) {\n      this._hasSetTracePropagationTargets = !!(\n        _options &&\n        // eslint-disable-next-line deprecation/deprecation\n        (_options.tracePropagationTargets || _options.tracingOrigins)\n      );\n    }\n\n    this.options = {\n      ...DEFAULT_BROWSER_TRACING_OPTIONS,\n      ..._options,\n    };\n\n    // Special case: enableLongTask can be set in _experiments\n    // TODO (v8): Remove this in v8\n    if (this.options._experiments.enableLongTask !== undefined) {\n      this.options.enableLongTask = this.options._experiments.enableLongTask;\n    }\n\n    // TODO (v8): remove this block after tracingOrigins is removed\n    // Set tracePropagationTargets to tracingOrigins if specified by the user\n    // In case both are specified, tracePropagationTargets takes precedence\n    // eslint-disable-next-line deprecation/deprecation\n    if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.options.tracePropagationTargets = _options.tracingOrigins;\n    }\n\n    this._collectWebVitals = startTrackingWebVitals();\n    /** Stores a mapping of interactionIds from PerformanceEventTimings to the origin interaction path */\n    this._interactionIdToRouteNameMapping = {};\n\n    if (this.options.enableInp) {\n      startTrackingINP(this._interactionIdToRouteNameMapping, this.options.interactionsSampleRate);\n    }\n    if (this.options.enableLongTask) {\n      startTrackingLongTasks();\n    }\n    if (this.options._experiments.enableInteractions) {\n      startTrackingInteractions();\n    }\n\n    this._latestRoute = {\n      name: undefined,\n      context: undefined,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\n   setupOnce(_, getCurrentHub) {\n    this._getCurrentHub = getCurrentHub;\n    const hub = getCurrentHub();\n    // eslint-disable-next-line deprecation/deprecation\n    const client = hub.getClient();\n    const clientOptions = client && client.getOptions();\n\n    const {\n      routingInstrumentation: instrumentRouting,\n      startTransactionOnLocationChange,\n      startTransactionOnPageLoad,\n      markBackgroundTransactions,\n      traceFetch,\n      traceXHR,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n      _experiments,\n    } = this.options;\n\n    const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n    // There are three ways to configure tracePropagationTargets:\n    // 1. via top level client option `tracePropagationTargets`\n    // 2. via BrowserTracing option `tracePropagationTargets`\n    // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n    //\n    // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n    // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n    // This is done as it minimizes bundle size (we don't have to have undefined checks).\n    //\n    // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n    // eslint-disable-next-line deprecation/deprecation\n    const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n    if (DEBUG_BUILD && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n      logger.warn(\n        '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n      );\n    }\n\n    instrumentRouting(\n      (context) => {\n        const transaction = this._createRouteTransaction(context);\n\n        this.options._experiments.onStartRouteTransaction &&\n          this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n        return transaction;\n      },\n      startTransactionOnPageLoad,\n      startTransactionOnLocationChange,\n    );\n\n    if (markBackgroundTransactions) {\n      registerBackgroundTabDetection();\n    }\n\n    if (_experiments.enableInteractions) {\n      this._registerInteractionListener();\n    }\n\n    if (this.options.enableInp) {\n      this._registerInpInteractionListener();\n    }\n\n    instrumentOutgoingRequests({\n      traceFetch,\n      traceXHR,\n      tracePropagationTargets,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n    });\n  }\n\n  /** Create routing idle transaction. */\n   _createRouteTransaction(context) {\n    if (!this._getCurrentHub) {\n      DEBUG_BUILD &&\n        logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n      return undefined;\n    }\n\n    const hub = this._getCurrentHub();\n\n    const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n    const isPageloadTransaction = context.op === 'pageload';\n\n    let expandedContext;\n    if (isPageloadTransaction) {\n      const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n      const baggage = isPageloadTransaction ? getMetaContent('baggage') : undefined;\n      const { traceId, dsc, parentSpanId, sampled } = propagationContextFromHeaders(sentryTrace, baggage);\n      expandedContext = {\n        traceId,\n        parentSpanId,\n        parentSampled: sampled,\n        ...context,\n        metadata: {\n          // eslint-disable-next-line deprecation/deprecation\n          ...context.metadata,\n          dynamicSamplingContext: dsc,\n        },\n        trimEnd: true,\n      };\n    } else {\n      expandedContext = {\n        trimEnd: true,\n        ...context,\n      };\n    }\n\n    const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n    // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n    // from being sent to Sentry).\n    const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n    // If `beforeNavigate` set a custom name, record that fact\n    // eslint-disable-next-line deprecation/deprecation\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? // eslint-disable-next-line deprecation/deprecation\n          { ...finalContext.metadata, source: 'custom' }\n        : // eslint-disable-next-line deprecation/deprecation\n          finalContext.metadata;\n\n    this._latestRoute.name = finalContext.name;\n    this._latestRoute.context = finalContext;\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (finalContext.sampled === false) {\n      DEBUG_BUILD && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n    }\n\n    DEBUG_BUILD && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n    const { location } = WINDOW;\n\n    const idleTransaction = startIdleTransaction(\n      hub,\n      finalContext,\n      idleTimeout,\n      finalTimeout,\n      true,\n      { location }, // for use in the tracesSampler\n      heartbeatInterval,\n      isPageloadTransaction, // should wait for finish signal if it's a pageload transaction\n    );\n\n    if (isPageloadTransaction) {\n      if (WINDOW.document) {\n        WINDOW.document.addEventListener('readystatechange', () => {\n          if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n            idleTransaction.sendAutoFinishSignal();\n          }\n        });\n\n        if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n          idleTransaction.sendAutoFinishSignal();\n        }\n      }\n    }\n\n    idleTransaction.registerBeforeFinishCallback(transaction => {\n      this._collectWebVitals();\n      addPerformanceEntries(transaction);\n    });\n\n    return idleTransaction ;\n  }\n\n  /** Start listener for interaction transactions */\n   _registerInteractionListener() {\n    let inflightInteractionTransaction;\n    const registerInteractionTransaction = () => {\n      const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n      const op = 'ui.action.click';\n\n      // eslint-disable-next-line deprecation/deprecation\n      const currentTransaction = getActiveTransaction();\n      if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n        DEBUG_BUILD &&\n          logger.warn(\n            `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n          );\n        return undefined;\n      }\n\n      if (inflightInteractionTransaction) {\n        inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n        inflightInteractionTransaction.end();\n        inflightInteractionTransaction = undefined;\n      }\n\n      if (!this._getCurrentHub) {\n        DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n        return undefined;\n      }\n\n      if (!this._latestRoute.name) {\n        DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n        return undefined;\n      }\n\n      const hub = this._getCurrentHub();\n      const { location } = WINDOW;\n\n      const context = {\n        name: this._latestRoute.name,\n        op,\n        trimEnd: true,\n        data: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context\n            ? getSource(this._latestRoute.context)\n            : 'url',\n        },\n      };\n\n      inflightInteractionTransaction = startIdleTransaction(\n        hub,\n        context,\n        idleTimeout,\n        finalTimeout,\n        true,\n        { location }, // for use in the tracesSampler\n        heartbeatInterval,\n      );\n    };\n\n    ['click'].forEach(type => {\n      if (WINDOW.document) {\n        addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n      }\n    });\n  }\n\n  /** Creates a listener on interaction entries, and maps interactionIds to the origin path of the interaction */\n   _registerInpInteractionListener() {\n    const handleEntries = ({ entries }) => {\n      const client = getClient();\n      // We need to get the replay, user, and activeTransaction from the current scope\n      // so that we can associate replay id, profile id, and a user display to the span\n      const replay =\n        client !== undefined && client.getIntegrationByName !== undefined\n          ? (client.getIntegrationByName('Replay') )\n          : undefined;\n      const replayId = replay !== undefined ? replay.getReplayId() : undefined;\n      // eslint-disable-next-line deprecation/deprecation\n      const activeTransaction = getActiveTransaction();\n      const currentScope = getCurrentScope();\n      const user = currentScope !== undefined ? currentScope.getUser() : undefined;\n      entries.forEach(entry => {\n        if (isPerformanceEventTiming(entry)) {\n          const interactionId = entry.interactionId;\n          if (interactionId === undefined) {\n            return;\n          }\n          const existingInteraction = this._interactionIdToRouteNameMapping[interactionId];\n          const duration = entry.duration;\n          const startTime = entry.startTime;\n          const keys = Object.keys(this._interactionIdToRouteNameMapping);\n          const minInteractionId =\n            keys.length > 0\n              ? keys.reduce((a, b) => {\n                  return this._interactionIdToRouteNameMapping[a].duration <\n                    this._interactionIdToRouteNameMapping[b].duration\n                    ? a\n                    : b;\n                })\n              : undefined;\n          // For a first input event to be considered, we must check that an interaction event does not already exist with the same duration and start time.\n          // This is also checked in the web-vitals library.\n          if (entry.entryType === 'first-input') {\n            const matchingEntry = keys\n              .map(key => this._interactionIdToRouteNameMapping[key])\n              .some(interaction => {\n                return interaction.duration === duration && interaction.startTime === startTime;\n              });\n            if (matchingEntry) {\n              return;\n            }\n          }\n          // Interactions with an id of 0 and are not first-input are not valid.\n          if (!interactionId) {\n            return;\n          }\n          // If the interaction already exists, we want to use the duration of the longest entry, since that is what the INP metric uses.\n          if (existingInteraction) {\n            existingInteraction.duration = Math.max(existingInteraction.duration, duration);\n          } else if (\n            keys.length < MAX_INTERACTIONS ||\n            minInteractionId === undefined ||\n            duration > this._interactionIdToRouteNameMapping[minInteractionId].duration\n          ) {\n            // If the interaction does not exist, we want to add it to the mapping if there is space, or if the duration is longer than the shortest entry.\n            const routeName = this._latestRoute.name;\n            const parentContext = this._latestRoute.context;\n            if (routeName && parentContext) {\n              if (minInteractionId && Object.keys(this._interactionIdToRouteNameMapping).length >= MAX_INTERACTIONS) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete this._interactionIdToRouteNameMapping[minInteractionId];\n              }\n              this._interactionIdToRouteNameMapping[interactionId] = {\n                routeName,\n                duration,\n                parentContext,\n                user,\n                activeTransaction,\n                replayId,\n                startTime,\n              };\n            }\n          }\n        }\n      });\n    };\n    addPerformanceInstrumentationHandler('event', handleEntries);\n    addPerformanceInstrumentationHandler('first-input', handleEntries);\n  }\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n  // Can't specify generic to `getDomElement` because tracing can be used\n  // in a variety of environments, have to disable `no-unsafe-member-access`\n  // as a result.\n  const metaTag = getDomElement(`meta[name=${metaName}]`);\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\nfunction getSource(context) {\n  const sourceFromAttributes = context.attributes && context.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromMetadata = context.metadata && context.metadata.source;\n\n  return sourceFromAttributes || sourceFromData || sourceFromMetadata;\n}\n\nfunction isPerformanceEventTiming(entry) {\n  return 'duration' in entry;\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, BrowserTracing, getMetaContent };\n//# sourceMappingURL=browsertracing.js.map\n","import { logger, browserPerformanceTimeOrigin, addHistoryInstrumentationHandler } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nfunction instrumentRoutingWithDefaults(\n  customStartTransaction,\n  startTransactionOnPageLoad = true,\n  startTransactionOnLocationChange = true,\n) {\n  if (!WINDOW || !WINDOW.location) {\n    DEBUG_BUILD && logger.warn('Could not initialize routing instrumentation due to invalid location');\n    return;\n  }\n\n  let startingUrl = WINDOW.location.href;\n\n  let activeTransaction;\n  if (startTransactionOnPageLoad) {\n    activeTransaction = customStartTransaction({\n      name: WINDOW.location.pathname,\n      // pageload should always start at timeOrigin (and needs to be in s, not ms)\n      startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n      op: 'pageload',\n      origin: 'auto.pageload.browser',\n      metadata: { source: 'url' },\n    });\n  }\n\n  if (startTransactionOnLocationChange) {\n    addHistoryInstrumentationHandler(({ to, from }) => {\n      /**\n       * This early return is there to account for some cases where a navigation transaction starts right after\n       * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n       * create an uneccessary navigation transaction.\n       *\n       * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n       * only be caused in certain development environments where the usage of a hot module reloader is causing\n       * errors.\n       */\n      if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n        startingUrl = undefined;\n        return;\n      }\n\n      if (from !== to) {\n        startingUrl = undefined;\n        if (activeTransaction) {\n          DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n          // If there's an open transaction on the scope, we need to finish it before creating an new one.\n          activeTransaction.end();\n        }\n        activeTransaction = customStartTransaction({\n          name: WINDOW.location.pathname,\n          op: 'navigation',\n          origin: 'auto.navigation.browser',\n          metadata: { source: 'url' },\n        });\n      }\n    });\n  }\n}\n\nexport { instrumentRoutingWithDefaults };\n//# sourceMappingURL=router.js.map\n","import { getActiveTransaction, spanToJSON } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n  if (WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      // eslint-disable-next-line deprecation/deprecation\n      const activeTransaction = getActiveTransaction() ;\n      if (WINDOW.document.hidden && activeTransaction) {\n        const statusType = 'cancelled';\n\n        const { op, status } = spanToJSON(activeTransaction);\n\n        DEBUG_BUILD &&\n          logger.log(`[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${op}`);\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!status) {\n          activeTransaction.setStatus(statusType);\n        }\n        // TODO: Can we rewrite this to an attribute?\n        // eslint-disable-next-line deprecation/deprecation\n        activeTransaction.setTag('visibilitychange', 'document.hidden');\n        activeTransaction.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { hasTracingEnabled, getCurrentScope, getClient, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getIsolationScope, spanToTraceHeader, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient, setHttpStatus } from '@sentry/core';\nimport { parseUrl, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, isInstanceOf, BAGGAGE_HEADER_NAME } from '@sentry/utils';\n\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n  handlerData,\n  shouldCreateSpan,\n  shouldAttachHeaders,\n  spans,\n  spanOrigin = 'auto.http.browser',\n) {\n  if (!hasTracingEnabled() || !handlerData.fetchData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      endSpan(span, handlerData);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  const { method, url } = handlerData.fetchData;\n\n  const fullUrl = getFullURL(url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        name: `${method} ${url}`,\n        onlyIfParent: true,\n        attributes: {\n          url,\n          type: 'fetch',\n          'http.method': method,\n          'http.url': fullUrl,\n          'server.address': host,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n        },\n        op: 'http.client',\n      })\n    : undefined;\n\n  if (span) {\n    handlerData.fetchData.__span = span.spanContext().spanId;\n    spans[span.spanContext().spanId] = span;\n  }\n\n  if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n    const request = handlerData.args[0];\n\n    // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n    handlerData.args[1] = handlerData.args[1] || {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const options = handlerData.args[1];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n    options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nfunction addTracingHeadersToFetchRequest(\n  request, // unknown is actually type Request but we can't export DOM types from this package,\n  client,\n  scope,\n  options\n\n,\n  requestSpan,\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  const span = requestSpan || scope.getSpan();\n\n  const isolationScope = getIsolationScope();\n\n  const { traceId, spanId, sampled, dsc } = {\n    ...isolationScope.getPropagationContext(),\n    ...scope.getPropagationContext(),\n  };\n\n  const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n    dsc ||\n      (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n  );\n\n  const headers =\n    options.headers ||\n    (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request ).headers : undefined);\n\n  if (!headers) {\n    return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n  } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n    const newHeaders = new Headers(headers );\n\n    newHeaders.append('sentry-trace', sentryTraceHeader);\n\n    if (sentryBaggageHeader) {\n      // If the same header is appended multiple times the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n\n    return newHeaders ;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n    if (sentryBaggageHeader) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n    }\n\n    return newHeaders ;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    const newBaggageHeaders = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders.push(...existingBaggageHeader);\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(existingBaggageHeader);\n    }\n\n    if (sentryBaggageHeader) {\n      newBaggageHeaders.push(sentryBaggageHeader);\n    }\n\n    return {\n      ...(headers ),\n      'sentry-trace': sentryTraceHeader,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\nfunction getFullURL(url) {\n  try {\n    const parsed = new URL(url);\n    return parsed.href;\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction endSpan(span, handlerData) {\n  if (handlerData.response) {\n    setHttpStatus(span, handlerData.response.status);\n\n    const contentLength =\n      handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute('http.response_content_length', contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus('internal_error');\n  }\n  span.end();\n}\n\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","import { observe } from '../observe.js';\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries) => {\n  (entries ).forEach(e => {\n    if (e.interactionId) {\n      minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n      maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n      interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n    }\n  });\n};\n\nlet po;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nconst getInteractionCount = () => {\n  return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nconst initInteractionCountPolyfill = () => {\n  if ('interactionCount' in performance || po) return;\n\n  po = observe('event', updateEstimate, {\n    type: 'event',\n    buffered: true,\n    durationThreshold: 0,\n  } );\n};\n\nexport { getInteractionCount, initInteractionCountPolyfill };\n//# sourceMappingURL=interactionCountPolyfill.js.map\n","import { logger, getFunctionName } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { onCLS } from './web-vitals/getCLS.js';\nimport { onFID } from './web-vitals/getFID.js';\nimport { onINP } from './web-vitals/getINP.js';\nimport { onLCP } from './web-vitals/getLCP.js';\nimport { observe } from './web-vitals/lib/observe.js';\nimport { onTTFB } from './web-vitals/onTTFB.js';\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nfunction addClsInstrumentationHandler(\n  callback,\n  stopOnCallback = false,\n) {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nfunction addLcpInstrumentationHandler(\n  callback,\n  stopOnCallback = false,\n) {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nfunction addTtfbInstrumentationHandler(callback) {\n  return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addInpInstrumentationHandler(\n  callback,\n) {\n  return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n  type,\n  callback,\n) {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers || !typeHandlers.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls() {\n  return onCLS(\n    metric => {\n      triggerHandlers('cls', {\n        metric,\n      });\n      _previousCls = metric;\n    },\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentFid() {\n  return onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp() {\n  return onLCP(metric => {\n    triggerHandlers('lcp', {\n      metric,\n    });\n    _previousLcp = metric;\n  });\n}\n\nfunction instrumentTtfb() {\n  return onTTFB(metric => {\n    triggerHandlers('ttfb', {\n      metric,\n    });\n    _previousTtfb = metric;\n  });\n}\n\nfunction instrumentInp() {\n  return onINP(metric => {\n    triggerHandlers('inp', {\n      metric,\n    });\n    _previousInp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type,\n  callback,\n  instrumentFn,\n  previousValue,\n  stopOnCallback = false,\n) {\n  addHandler(type, callback);\n\n  let stopListening;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type) {\n  const options = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type,\n  callback,\n  stopListening,\n) {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n\nexport { addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler, addTtfbInstrumentationHandler };\n//# sourceMappingURL=instrument.js.map\n","const bindReporter = (\n  callback,\n  metric,\n  reportAllChanges,\n) => {\n  let prevValue;\n  let delta;\n  return (forceReport) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","import { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2022 Google LLC\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 *     https://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\nconst getActivationStart = () => {\n  const navEntry = getNavigationEntry();\n  return (navEntry && navEntry.activationStart) || 0;\n};\n\nexport { getActivationStart };\n//# sourceMappingURL=getActivationStart.js.map\n","import { WINDOW } from '../../types.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\nconst initMetric = (name, value) => {\n  const navEntry = getNavigationEntry();\n  let navigationType = 'navigate';\n\n  if (navEntry) {\n    if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else {\n      navigationType = navEntry.type.replace(/_/g, '-') ;\n    }\n  }\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good', // Will be updated if the value changes.\n    delta: 0,\n    entries: [],\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/*\n * Copyright 2020 Google LLC\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 *     https://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\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n  return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n  type,\n  callback,\n  opts,\n) => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        callback(list.getEntries() );\n      });\n      po.observe({\n        type,\n        buffered: true,\n        ...opts,\n      } );\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { initInteractionCountPolyfill, getInteractionCount } from './lib/polyfills/interactionCountPolyfill.js';\n\n/*\n * Copyright 2022 Google LLC\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 *     https://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\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n  return getInteractionCount();\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry) => {\n  // The least-long of the 10 longest interactions.\n  const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const existingInteraction = longestInteractionMap[entry.interactionId];\n\n  // Only process the entry if it's possibly one of the ten longest,\n  // or if it's part of an existing interaction.\n  if (\n    existingInteraction ||\n    longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n    entry.duration > minLongestInteraction.latency\n  ) {\n    // If the interaction already exists, update it. Otherwise create one.\n    if (existingInteraction) {\n      existingInteraction.entries.push(entry);\n      existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n    } else {\n      const interaction = {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        id: entry.interactionId,\n        latency: entry.duration,\n        entries: [entry],\n      };\n      longestInteractionMap[interaction.id] = interaction;\n      longestInteractionList.push(interaction);\n    }\n\n    // Sort the entries by latency (descending) and keep only the top ten.\n    longestInteractionList.sort((a, b) => b.latency - a.latency);\n    longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete longestInteractionMap[i.id];\n    });\n  }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = () => {\n  const candidateInteractionIndex = Math.min(\n    longestInteractionList.length - 1,\n    Math.floor(getInteractionCountForNavigation() / 50),\n  );\n\n  return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/responsiveness/) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/inp/#what-is-a-good-inp-score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onINP = (onReport, opts) => {\n  // Set defaults\n  // eslint-disable-next-line no-param-reassign\n  opts = opts || {};\n\n  // https://web.dev/inp/#what's-a-%22good%22-inp-value\n  // const thresholds = [200, 500];\n\n  // TODO(philipwalton): remove once the polyfill is no longer needed.\n  initInteractionCountPolyfill();\n\n  const metric = initMetric('INP');\n  // eslint-disable-next-line prefer-const\n  let report;\n\n  const handleEntries = (entries) => {\n    entries.forEach(entry => {\n      if (entry.interactionId) {\n        processEntry(entry);\n      }\n\n      // Entries of type `first-input` don't currently have an `interactionId`,\n      // so to consider them in INP we have to first check that an existing\n      // entry doesn't match the `duration` and `startTime`.\n      // Note that this logic assumes that `event` entries are dispatched\n      // before `first-input` entries. This is true in Chrome but it is not\n      // true in Firefox; however, Firefox doesn't support interactionId, so\n      // it's not an issue at the moment.\n      // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n      if (entry.entryType === 'first-input') {\n        const noMatchingEntry = !longestInteractionList.some(interaction => {\n          return interaction.entries.some(prevEntry => {\n            return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n          });\n        });\n        if (noMatchingEntry) {\n          processEntry(entry);\n        }\n      }\n    });\n\n    const inp = estimateP98LongestInteraction();\n\n    if (inp && inp.latency !== metric.value) {\n      metric.value = inp.latency;\n      metric.entries = inp.entries;\n      report();\n    }\n  };\n\n  const po = observe('event', handleEntries, {\n    // Event Timing entries have their durations rounded to the nearest 8ms,\n    // so a duration of 40ms would be any event that spans 2.5 or more frames\n    // at 60Hz. This threshold is chosen to strike a balance between usefulness\n    // and performance. Running this callback for any interaction that spans\n    // just one or two frames is likely not worth the insight that could be\n    // gained.\n    durationThreshold: opts.durationThreshold || 40,\n  } );\n\n  report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n  if (po) {\n    // Also observe entries of type `first-input`. This is useful in cases\n    // where the first interaction is less than the `durationThreshold`.\n    po.observe({ type: 'first-input', buffered: true });\n\n    onHidden(() => {\n      handleEntries(po.takeRecords() );\n\n      // If the interaction count shows that there were interactions but\n      // none were captured by the PerformanceObserver, report a latency of 0.\n      if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n        metric.value = 0;\n        metric.entries = [];\n      }\n\n      report(true);\n    });\n  }\n};\n\nexport { onINP };\n//# sourceMappingURL=getINP.js.map\n","import { WINDOW } from '../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\nconst reportedMetricIDs = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nconst onLCP = (onReport) => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('LCP');\n  let report;\n\n  const handleEntries = (entries) => {\n    const lastEntry = entries[entries.length - 1] ;\n    if (lastEntry) {\n      // The startTime attribute returns the value of the renderTime if it is\n      // not 0, and the value of the loadTime otherwise. The activationStart\n      // reference is used because LCP should be relative to page activation\n      // rather than navigation start if the page was prerendered.\n      const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n      // Only report if the page wasn't hidden prior to LCP.\n      if (value < visibilityWatcher.firstHiddenTime) {\n        metric.value = value;\n        metric.entries = [lastEntry];\n        report();\n      }\n    }\n  };\n\n  const po = observe('largest-contentful-paint', handleEntries);\n\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = () => {\n      if (!reportedMetricIDs[metric.id]) {\n        handleEntries(po.takeRecords() );\n        po.disconnect();\n        reportedMetricIDs[metric.id] = true;\n        report(true);\n      }\n    };\n\n    // Stop listening after input. Note: while scrolling is an input that\n    // stop LCP observation, it's unreliable since it can be programmatically\n    // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n    ['keydown', 'click'].forEach(type => {\n      if (WINDOW.document) {\n        addEventListener(type, stopListening, { once: true, capture: true });\n      }\n    });\n\n    onHidden(stopListening, true);\n\n    return stopListening;\n  }\n\n  return;\n};\n\nexport { onLCP };\n//# sourceMappingURL=getLCP.js.map\n","import { WINDOW } from '../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { initMetric } from './lib/initMetric.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  if (WINDOW.document.prerendering) {\n    addEventListener('prerenderingchange', () => whenReady(callback), true);\n  } else if (WINDOW.document.readyState !== 'complete') {\n    addEventListener('load', () => whenReady(callback), true);\n  } else {\n    // Queue a task so the callback runs after `loadEventEnd`.\n    setTimeout(callback, 0);\n  }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/time-to-first-byte/) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nconst onTTFB = (onReport, opts) => {\n  // Set defaults\n  // eslint-disable-next-line no-param-reassign\n  opts = opts || {};\n\n  // https://web.dev/ttfb/#what-is-a-good-ttfb-score\n  // const thresholds = [800, 1800];\n\n  const metric = initMetric('TTFB');\n  const report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n  whenReady(() => {\n    const navEntry = getNavigationEntry() ;\n\n    if (navEntry) {\n      // The activationStart reference is used because TTFB should be\n      // relative to page activation rather than navigation start if the\n      // page was prerendered. But in cases where `activationStart` occurs\n      // after the first byte is received, this time should be clamped at 0.\n      metric.value = Math.max(navEntry.responseStart - getActivationStart(), 0);\n\n      // In some cases the value reported is negative or is larger\n      // than the current page time. Ignore these cases:\n      // https://github.com/GoogleChrome/web-vitals/issues/137\n      // https://github.com/GoogleChrome/web-vitals/issues/162\n      if (metric.value < 0 || metric.value > performance.now()) return;\n\n      metric.entries = [navEntry];\n\n      report(true);\n    }\n  });\n};\n\nexport { onTTFB };\n//# sourceMappingURL=onTTFB.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (\n  onReport,\n  options = {},\n) => {\n  const metric = initMetric('CLS', 0);\n  let report;\n\n  let sessionValue = 0;\n  let sessionEntries = [];\n\n  // const handleEntries = (entries: Metric['entries']) => {\n  const handleEntries = (entries) => {\n    entries.forEach(entry => {\n      // Only count layout shifts without recent user input.\n      if (!entry.hadRecentInput) {\n        const firstSessionEntry = sessionEntries[0];\n        const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n        // If the entry occurred less than 1 second after the previous entry and\n        // less than 5 seconds after the first entry in the session, include the\n        // entry in the current session. Otherwise, start a new session.\n        if (\n          sessionValue &&\n          sessionEntries.length !== 0 &&\n          entry.startTime - lastSessionEntry.startTime < 1000 &&\n          entry.startTime - firstSessionEntry.startTime < 5000\n        ) {\n          sessionValue += entry.value;\n          sessionEntries.push(entry);\n        } else {\n          sessionValue = entry.value;\n          sessionEntries = [entry];\n        }\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (sessionValue > metric.value) {\n          metric.value = sessionValue;\n          metric.entries = sessionEntries;\n          if (report) {\n            report();\n          }\n        }\n      }\n    });\n  };\n\n  const po = observe('layout-shift', handleEntries);\n  if (po) {\n    report = bindReporter(onReport, metric, options.reportAllChanges);\n\n    const stopListening = () => {\n      handleEntries(po.takeRecords() );\n      report(true);\n    };\n\n    onHidden(stopListening);\n\n    return stopListening;\n  }\n\n  return;\n};\n\nexport { onCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport) => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('FID');\n  // eslint-disable-next-line prefer-const\n  let report;\n\n  const handleEntry = (entry) => {\n    // Only report if the page wasn't hidden prior to the first input.\n    if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n      metric.value = entry.processingStart - entry.startTime;\n      metric.entries.push(entry);\n      report(true);\n    }\n  };\n\n  const handleEntries = (entries) => {\n    (entries ).forEach(handleEntry);\n  };\n\n  const po = observe('first-input', handleEntries);\n  report = bindReporter(onReport, metric);\n\n  if (po) {\n    onHidden(() => {\n      handleEntries(po.takeRecords() );\n      po.disconnect();\n    }, true);\n  }\n};\n\nexport { onFID };\n//# sourceMappingURL=getFID.js.map\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ\n\n;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","import { WINDOW } from '../../types.js';\n\n/*\n * Copyright 2022 Google LLC\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 *     https://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\nconst getNavigationEntryFromPerformanceTiming = () => {\n  // eslint-disable-next-line deprecation/deprecation\n  const timing = WINDOW.performance.timing;\n  // eslint-disable-next-line deprecation/deprecation\n  const type = WINDOW.performance.navigation.type;\n\n  const navigationEntry = {\n    entryType: 'navigation',\n    startTime: 0,\n    type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n  };\n\n  for (const key in timing) {\n    if (key !== 'navigationStart' && key !== 'toJSON') {\n      // eslint-disable-next-line deprecation/deprecation\n      navigationEntry[key] = Math.max((timing[key ] ) - timing.navigationStart, 0);\n    }\n  }\n  return navigationEntry ;\n};\n\nconst getNavigationEntry = () => {\n  if (WINDOW.__WEB_VITALS_POLYFILL__) {\n    return (\n      WINDOW.performance &&\n      ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n        getNavigationEntryFromPerformanceTiming())\n    );\n  } else {\n    return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n  }\n};\n\nexport { getNavigationEntry };\n//# sourceMappingURL=getNavigationEntry.js.map\n","import { WINDOW } from '../../types.js';\nimport { onHidden } from './onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n  // If the document is hidden and not prerendering, assume it was always\n  // hidden and the page was loaded in the background.\n  if (WINDOW.document && WINDOW.document.visibilityState) {\n    firstHiddenTime = WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n  }\n};\n\nconst trackChanges = () => {\n  // Update the time if/when the document becomes hidden.\n  onHidden(({ timeStamp }) => {\n    firstHiddenTime = timeStamp;\n  }, true);\n};\n\nconst getVisibilityWatcher = (\n\n) => {\n  if (firstHiddenTime < 0) {\n    // If the document is hidden when this code runs, assume it was hidden\n    // since navigation start. This isn't a perfect heuristic, but it's the\n    // best we can do until an API is available to support querying past\n    // visibilityState.\n    initHiddenTime();\n    trackChanges();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { WINDOW } from '../../types.js';\n\n/*\n * Copyright 2020 Google LLC\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 *     https://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\nconst onHidden = (cb, once) => {\n  const onHiddenOrPageHide = (event) => {\n    if (event.type === 'pagehide' || WINDOW.document.visibilityState === 'hidden') {\n      cb(event);\n      if (once) {\n        removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n        removeEventListener('pagehide', onHiddenOrPageHide, true);\n      }\n    }\n  };\n\n  if (WINDOW.document) {\n    addEventListener('visibilitychange', onHiddenOrPageHide, true);\n    // Some browsers have buggy implementations of visibilitychange,\n    // so we use pagehide in addition, just to be safe.\n    addEventListener('pagehide', onHiddenOrPageHide, true);\n  }\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Render the \\`main\\` element consistently in IE.\n */\n\nmain {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on \\`h1\\` elements within \\`section\\` and\n * \\`article\\` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd \\`em\\` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd \\`em\\` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent \\`sub\\` and \\`sup\\` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n  border-style: none;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from \\`fieldset\\` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    \\`fieldset\\` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to \\`inherit\\` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Misc\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n  display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n  display: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/normalize.css/normalize.css\"],\"names\":[],\"mappings\":\"AAAA,2EAA2E;;AAE3E;+EAC+E;;AAE/E;;;EAGE;;AAEF;EACE,iBAAiB,EAAE,MAAM;EACzB,8BAA8B,EAAE,MAAM;AACxC;;AAEA;+EAC+E;;AAE/E;;EAEE;;AAEF;EACE,SAAS;AACX;;AAEA;;EAEE;;AAEF;EACE,cAAc;AAChB;;AAEA;;;EAGE;;AAEF;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;+EAC+E;;AAE/E;;;EAGE;;AAEF;EACE,uBAAuB,EAAE,MAAM;EAC/B,SAAS,EAAE,MAAM;EACjB,iBAAiB,EAAE,MAAM;AAC3B;;AAEA;;;EAGE;;AAEF;EACE,iCAAiC,EAAE,MAAM;EACzC,cAAc,EAAE,MAAM;AACxB;;AAEA;+EAC+E;;AAE/E;;EAEE;;AAEF;EACE,6BAA6B;AAC/B;;AAEA;;;EAGE;;AAEF;EACE,mBAAmB,EAAE,MAAM;EAC3B,0BAA0B,EAAE,MAAM;EAClC,iCAAiC,EAAE,MAAM;AAC3C;;AAEA;;EAEE;;AAEF;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE;;AAEF;;;EAGE,iCAAiC,EAAE,MAAM;EACzC,cAAc,EAAE,MAAM;AACxB;;AAEA;;EAEE;;AAEF;EACE,cAAc;AAChB;;AAEA;;;EAGE;;AAEF;;EAEE,cAAc;EACd,cAAc;EACd,kBAAkB;EAClB,wBAAwB;AAC1B;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,WAAW;AACb;;AAEA;+EAC+E;;AAE/E;;EAEE;;AAEF;EACE,kBAAkB;AACpB;;AAEA;+EAC+E;;AAE/E;;;EAGE;;AAEF;;;;;EAKE,oBAAoB,EAAE,MAAM;EAC5B,eAAe,EAAE,MAAM;EACvB,iBAAiB,EAAE,MAAM;EACzB,SAAS,EAAE,MAAM;AACnB;;AAEA;;;EAGE;;AAEF;QACQ,MAAM;EACZ,iBAAiB;AACnB;;AAEA;;;EAGE;;AAEF;SACS,MAAM;EACb,oBAAoB;AACtB;;AAEA;;EAEE;;AAEF;;;;EAIE,0BAA0B;AAC5B;;AAEA;;EAEE;;AAEF;;;;EAIE,kBAAkB;EAClB,UAAU;AACZ;;AAEA;;EAEE;;AAEF;;;;EAIE,8BAA8B;AAChC;;AAEA;;EAEE;;AAEF;EACE,8BAA8B;AAChC;;AAEA;;;;;EAKE;;AAEF;EACE,sBAAsB,EAAE,MAAM;EAC9B,cAAc,EAAE,MAAM;EACtB,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,UAAU,EAAE,MAAM;EAClB,mBAAmB,EAAE,MAAM;AAC7B;;AAEA;;EAEE;;AAEF;EACE,wBAAwB;AAC1B;;AAEA;;EAEE;;AAEF;EACE,cAAc;AAChB;;AAEA;;;EAGE;;AAEF;;EAEE,sBAAsB,EAAE,MAAM;EAC9B,UAAU,EAAE,MAAM;AACpB;;AAEA;;EAEE;;AAEF;;EAEE,YAAY;AACd;;AAEA;;;EAGE;;AAEF;EACE,6BAA6B,EAAE,MAAM;EACrC,oBAAoB,EAAE,MAAM;AAC9B;;AAEA;;EAEE;;AAEF;EACE,wBAAwB;AAC1B;;AAEA;;;EAGE;;AAEF;EACE,0BAA0B,EAAE,MAAM;EAClC,aAAa,EAAE,MAAM;AACvB;;AAEA;+EAC+E;;AAE/E;;EAEE;;AAEF;EACE,cAAc;AAChB;;AAEA;;EAEE;;AAEF;EACE,kBAAkB;AACpB;;AAEA;+EAC+E;;AAE/E;;EAEE;;AAEF;EACE,aAAa;AACf;;AAEA;;EAEE;;AAEF;EACE,aAAa;AACf\",\"sourcesContent\":[\"/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\\n\\n/* Document\\n   ========================================================================== */\\n\\n/**\\n * 1. Correct the line height in all browsers.\\n * 2. Prevent adjustments of font size after orientation changes in iOS.\\n */\\n\\nhtml {\\n  line-height: 1.15; /* 1 */\\n  -webkit-text-size-adjust: 100%; /* 2 */\\n}\\n\\n/* Sections\\n   ========================================================================== */\\n\\n/**\\n * Remove the margin in all browsers.\\n */\\n\\nbody {\\n  margin: 0;\\n}\\n\\n/**\\n * Render the `main` element consistently in IE.\\n */\\n\\nmain {\\n  display: block;\\n}\\n\\n/**\\n * Correct the font size and margin on `h1` elements within `section` and\\n * `article` contexts in Chrome, Firefox, and Safari.\\n */\\n\\nh1 {\\n  font-size: 2em;\\n  margin: 0.67em 0;\\n}\\n\\n/* Grouping content\\n   ========================================================================== */\\n\\n/**\\n * 1. Add the correct box sizing in Firefox.\\n * 2. Show the overflow in Edge and IE.\\n */\\n\\nhr {\\n  box-sizing: content-box; /* 1 */\\n  height: 0; /* 1 */\\n  overflow: visible; /* 2 */\\n}\\n\\n/**\\n * 1. Correct the inheritance and scaling of font size in all browsers.\\n * 2. Correct the odd `em` font sizing in all browsers.\\n */\\n\\npre {\\n  font-family: monospace, monospace; /* 1 */\\n  font-size: 1em; /* 2 */\\n}\\n\\n/* Text-level semantics\\n   ========================================================================== */\\n\\n/**\\n * Remove the gray background on active links in IE 10.\\n */\\n\\na {\\n  background-color: transparent;\\n}\\n\\n/**\\n * 1. Remove the bottom border in Chrome 57-\\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\\n */\\n\\nabbr[title] {\\n  border-bottom: none; /* 1 */\\n  text-decoration: underline; /* 2 */\\n  text-decoration: underline dotted; /* 2 */\\n}\\n\\n/**\\n * Add the correct font weight in Chrome, Edge, and Safari.\\n */\\n\\nb,\\nstrong {\\n  font-weight: bolder;\\n}\\n\\n/**\\n * 1. Correct the inheritance and scaling of font size in all browsers.\\n * 2. Correct the odd `em` font sizing in all browsers.\\n */\\n\\ncode,\\nkbd,\\nsamp {\\n  font-family: monospace, monospace; /* 1 */\\n  font-size: 1em; /* 2 */\\n}\\n\\n/**\\n * Add the correct font size in all browsers.\\n */\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n/**\\n * Prevent `sub` and `sup` elements from affecting the line height in\\n * all browsers.\\n */\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\n/* Embedded content\\n   ========================================================================== */\\n\\n/**\\n * Remove the border on images inside links in IE 10.\\n */\\n\\nimg {\\n  border-style: none;\\n}\\n\\n/* Forms\\n   ========================================================================== */\\n\\n/**\\n * 1. Change the font styles in all browsers.\\n * 2. Remove the margin in Firefox and Safari.\\n */\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n  font-family: inherit; /* 1 */\\n  font-size: 100%; /* 1 */\\n  line-height: 1.15; /* 1 */\\n  margin: 0; /* 2 */\\n}\\n\\n/**\\n * Show the overflow in IE.\\n * 1. Show the overflow in Edge.\\n */\\n\\nbutton,\\ninput { /* 1 */\\n  overflow: visible;\\n}\\n\\n/**\\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\\n * 1. Remove the inheritance of text transform in Firefox.\\n */\\n\\nbutton,\\nselect { /* 1 */\\n  text-transform: none;\\n}\\n\\n/**\\n * Correct the inability to style clickable types in iOS and Safari.\\n */\\n\\nbutton,\\n[type=\\\"button\\\"],\\n[type=\\\"reset\\\"],\\n[type=\\\"submit\\\"] {\\n  -webkit-appearance: button;\\n}\\n\\n/**\\n * Remove the inner border and padding in Firefox.\\n */\\n\\nbutton::-moz-focus-inner,\\n[type=\\\"button\\\"]::-moz-focus-inner,\\n[type=\\\"reset\\\"]::-moz-focus-inner,\\n[type=\\\"submit\\\"]::-moz-focus-inner {\\n  border-style: none;\\n  padding: 0;\\n}\\n\\n/**\\n * Restore the focus styles unset by the previous rule.\\n */\\n\\nbutton:-moz-focusring,\\n[type=\\\"button\\\"]:-moz-focusring,\\n[type=\\\"reset\\\"]:-moz-focusring,\\n[type=\\\"submit\\\"]:-moz-focusring {\\n  outline: 1px dotted ButtonText;\\n}\\n\\n/**\\n * Correct the padding in Firefox.\\n */\\n\\nfieldset {\\n  padding: 0.35em 0.75em 0.625em;\\n}\\n\\n/**\\n * 1. Correct the text wrapping in Edge and IE.\\n * 2. Correct the color inheritance from `fieldset` elements in IE.\\n * 3. Remove the padding so developers are not caught out when they zero out\\n *    `fieldset` elements in all browsers.\\n */\\n\\nlegend {\\n  box-sizing: border-box; /* 1 */\\n  color: inherit; /* 2 */\\n  display: table; /* 1 */\\n  max-width: 100%; /* 1 */\\n  padding: 0; /* 3 */\\n  white-space: normal; /* 1 */\\n}\\n\\n/**\\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\\n */\\n\\nprogress {\\n  vertical-align: baseline;\\n}\\n\\n/**\\n * Remove the default vertical scrollbar in IE 10+.\\n */\\n\\ntextarea {\\n  overflow: auto;\\n}\\n\\n/**\\n * 1. Add the correct box sizing in IE 10.\\n * 2. Remove the padding in IE 10.\\n */\\n\\n[type=\\\"checkbox\\\"],\\n[type=\\\"radio\\\"] {\\n  box-sizing: border-box; /* 1 */\\n  padding: 0; /* 2 */\\n}\\n\\n/**\\n * Correct the cursor style of increment and decrement buttons in Chrome.\\n */\\n\\n[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n[type=\\\"number\\\"]::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n/**\\n * 1. Correct the odd appearance in Chrome and Safari.\\n * 2. Correct the outline style in Safari.\\n */\\n\\n[type=\\\"search\\\"] {\\n  -webkit-appearance: textfield; /* 1 */\\n  outline-offset: -2px; /* 2 */\\n}\\n\\n/**\\n * Remove the inner padding in Chrome and Safari on macOS.\\n */\\n\\n[type=\\\"search\\\"]::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n/**\\n * 1. Correct the inability to style clickable types in iOS and Safari.\\n * 2. Change font properties to `inherit` in Safari.\\n */\\n\\n::-webkit-file-upload-button {\\n  -webkit-appearance: button; /* 1 */\\n  font: inherit; /* 2 */\\n}\\n\\n/* Interactive\\n   ========================================================================== */\\n\\n/*\\n * Add the correct display in Edge, IE 10+, and Firefox.\\n */\\n\\ndetails {\\n  display: block;\\n}\\n\\n/*\\n * Add the correct display in all browsers.\\n */\\n\\nsummary {\\n  display: list-item;\\n}\\n\\n/* Misc\\n   ========================================================================== */\\n\\n/**\\n * Add the correct display in IE 10+.\\n */\\n\\ntemplate {\\n  display: none;\\n}\\n\\n/**\\n * Add the correct display in IE 10.\\n */\\n\\n[hidden] {\\n  display: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n  if (!options) {\n    options = {};\n  }\n  if (!url) {\n    return url;\n  }\n  url = String(url.__esModule ? url.default : url);\n\n  // If url is already wrapped in quotes, remove them\n  if (/^['\"].*['\"]$/.test(url)) {\n    url = url.slice(1, -1);\n  }\n  if (options.hash) {\n    url += options.hash;\n  }\n\n  // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n  if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n    return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n  }\n  return url;\n};","import _extends from '@babel/runtime/helpers/esm/extends';\n\n/**\r\n * Actions represent the type of change to a location value.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#action\r\n */\nvar Action;\n\n(function (Action) {\n  /**\r\n   * A POP indicates a change to an arbitrary index in the history stack, such\r\n   * as a back or forward navigation. It does not describe the direction of the\r\n   * navigation, only that the current index changed.\r\n   *\r\n   * Note: This is the default action for newly created history objects.\r\n   */\n  Action[\"Pop\"] = \"POP\";\n  /**\r\n   * A PUSH indicates a new entry being added to the history stack, such as when\r\n   * a link is clicked and a new page loads. When this happens, all subsequent\r\n   * entries in the stack are lost.\r\n   */\n\n  Action[\"Push\"] = \"PUSH\";\n  /**\r\n   * A REPLACE indicates the entry at the current index in the history stack\r\n   * being replaced by a new one.\r\n   */\n\n  Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\n\nvar readOnly = process.env.NODE_ENV !== \"production\" ? function (obj) {\n  return Object.freeze(obj);\n} : function (obj) {\n  return obj;\n};\n\nfunction warning(cond, message) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== 'undefined') console.warn(message);\n\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message); // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\n\nvar BeforeUnloadEventType = 'beforeunload';\nvar HashChangeEventType = 'hashchange';\nvar PopStateEventType = 'popstate';\n/**\r\n * Browser history stores the location in regular URLs. This is the standard for\r\n * most web apps, but it requires some configuration on the server to ensure you\r\n * serve the same app at multiple URLs.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\r\n */\n\nfunction createBrowserHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$window = _options.window,\n      window = _options$window === void 0 ? document.defaultView : _options$window;\n  var globalHistory = window.history;\n\n  function getIndexAndLocation() {\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var state = globalHistory.state || {};\n    return [state.idx, readOnly({\n      pathname: pathname,\n      search: search,\n      hash: hash,\n      state: state.usr || null,\n      key: state.key || 'default'\n    })];\n  }\n\n  var blockedPopTx = null;\n\n  function handlePop() {\n    if (blockedPopTx) {\n      blockers.call(blockedPopTx);\n      blockedPopTx = null;\n    } else {\n      var nextAction = Action.Pop;\n\n      var _getIndexAndLocation = getIndexAndLocation(),\n          nextIndex = _getIndexAndLocation[0],\n          nextLocation = _getIndexAndLocation[1];\n\n      if (blockers.length) {\n        if (nextIndex != null) {\n          var delta = index - nextIndex;\n\n          if (delta) {\n            // Revert the POP\n            blockedPopTx = {\n              action: nextAction,\n              location: nextLocation,\n              retry: function retry() {\n                go(delta * -1);\n              }\n            };\n            go(delta);\n          }\n        } else {\n          // Trying to POP to a location with no index. We did not create\n          // this location, so we can't effectively block the navigation.\n          process.env.NODE_ENV !== \"production\" ? warning(false, // TODO: Write up a doc that explains our blocking strategy in\n          // detail and link to it here so people can understand better what\n          // is going on and how to avoid it.\n          \"You are trying to block a POP navigation to a location that was not \" + \"created by the history library. The block will fail silently in \" + \"production, but in general you should do all navigation with the \" + \"history library (instead of using window.history.pushState directly) \" + \"to avoid this situation.\") : void 0;\n        }\n      } else {\n        applyTx(nextAction);\n      }\n    }\n  }\n\n  window.addEventListener(PopStateEventType, handlePop);\n  var action = Action.Pop;\n\n  var _getIndexAndLocation2 = getIndexAndLocation(),\n      index = _getIndexAndLocation2[0],\n      location = _getIndexAndLocation2[1];\n\n  var listeners = createEvents();\n  var blockers = createEvents();\n\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), '');\n  }\n\n  function createHref(to) {\n    return typeof to === 'string' ? to : createPath(to);\n  } // state defaults to `null` because `window.history.state` does\n\n\n  function getNextLocation(to, state) {\n    if (state === void 0) {\n      state = null;\n    }\n\n    return readOnly(_extends({\n      pathname: location.pathname,\n      hash: '',\n      search: ''\n    }, typeof to === 'string' ? parsePath(to) : to, {\n      state: state,\n      key: createKey()\n    }));\n  }\n\n  function getHistoryStateAndUrl(nextLocation, index) {\n    return [{\n      usr: nextLocation.state,\n      key: nextLocation.key,\n      idx: index\n    }, createHref(nextLocation)];\n  }\n\n  function allowTx(action, location, retry) {\n    return !blockers.length || (blockers.call({\n      action: action,\n      location: location,\n      retry: retry\n    }), false);\n  }\n\n  function applyTx(nextAction) {\n    action = nextAction;\n\n    var _getIndexAndLocation3 = getIndexAndLocation();\n\n    index = _getIndexAndLocation3[0];\n    location = _getIndexAndLocation3[1];\n    listeners.call({\n      action: action,\n      location: location\n    });\n  }\n\n  function push(to, state) {\n    var nextAction = Action.Push;\n    var nextLocation = getNextLocation(to, state);\n\n    function retry() {\n      push(to, state);\n    }\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      var _getHistoryStateAndUr = getHistoryStateAndUrl(nextLocation, index + 1),\n          historyState = _getHistoryStateAndUr[0],\n          url = _getHistoryStateAndUr[1]; // TODO: Support forced reloading\n      // try...catch because iOS limits us to 100 pushState calls :/\n\n\n      try {\n        globalHistory.pushState(historyState, '', url);\n      } catch (error) {\n        // They are going to lose state here, but there is no real\n        // way to warn them about it since the page will refresh...\n        window.location.assign(url);\n      }\n\n      applyTx(nextAction);\n    }\n  }\n\n  function replace(to, state) {\n    var nextAction = Action.Replace;\n    var nextLocation = getNextLocation(to, state);\n\n    function retry() {\n      replace(to, state);\n    }\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      var _getHistoryStateAndUr2 = getHistoryStateAndUrl(nextLocation, index),\n          historyState = _getHistoryStateAndUr2[0],\n          url = _getHistoryStateAndUr2[1]; // TODO: Support forced reloading\n\n\n      globalHistory.replaceState(historyState, '', url);\n      applyTx(nextAction);\n    }\n  }\n\n  function go(delta) {\n    globalHistory.go(delta);\n  }\n\n  var history = {\n    get action() {\n      return action;\n    },\n\n    get location() {\n      return location;\n    },\n\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    back: function back() {\n      go(-1);\n    },\n    forward: function forward() {\n      go(1);\n    },\n    listen: function listen(listener) {\n      return listeners.push(listener);\n    },\n    block: function block(blocker) {\n      var unblock = blockers.push(blocker);\n\n      if (blockers.length === 1) {\n        window.addEventListener(BeforeUnloadEventType, promptBeforeUnload);\n      }\n\n      return function () {\n        unblock(); // Remove the beforeunload listener so the document may\n        // still be salvageable in the pagehide event.\n        // See https://html.spec.whatwg.org/#unloading-documents\n\n        if (!blockers.length) {\n          window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload);\n        }\n      };\n    }\n  };\n  return history;\n}\n/**\r\n * Hash history stores the location in window.location.hash. This makes it ideal\r\n * for situations where you don't want to send the location to the server for\r\n * some reason, either because you do cannot configure it or the URL space is\r\n * reserved for something else.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\r\n */\n\nfunction createHashHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options2 = options,\n      _options2$window = _options2.window,\n      window = _options2$window === void 0 ? document.defaultView : _options2$window;\n  var globalHistory = window.history;\n\n  function getIndexAndLocation() {\n    var _parsePath = parsePath(window.location.hash.substr(1)),\n        _parsePath$pathname = _parsePath.pathname,\n        pathname = _parsePath$pathname === void 0 ? '/' : _parsePath$pathname,\n        _parsePath$search = _parsePath.search,\n        search = _parsePath$search === void 0 ? '' : _parsePath$search,\n        _parsePath$hash = _parsePath.hash,\n        hash = _parsePath$hash === void 0 ? '' : _parsePath$hash;\n\n    var state = globalHistory.state || {};\n    return [state.idx, readOnly({\n      pathname: pathname,\n      search: search,\n      hash: hash,\n      state: state.usr || null,\n      key: state.key || 'default'\n    })];\n  }\n\n  var blockedPopTx = null;\n\n  function handlePop() {\n    if (blockedPopTx) {\n      blockers.call(blockedPopTx);\n      blockedPopTx = null;\n    } else {\n      var nextAction = Action.Pop;\n\n      var _getIndexAndLocation4 = getIndexAndLocation(),\n          nextIndex = _getIndexAndLocation4[0],\n          nextLocation = _getIndexAndLocation4[1];\n\n      if (blockers.length) {\n        if (nextIndex != null) {\n          var delta = index - nextIndex;\n\n          if (delta) {\n            // Revert the POP\n            blockedPopTx = {\n              action: nextAction,\n              location: nextLocation,\n              retry: function retry() {\n                go(delta * -1);\n              }\n            };\n            go(delta);\n          }\n        } else {\n          // Trying to POP to a location with no index. We did not create\n          // this location, so we can't effectively block the navigation.\n          process.env.NODE_ENV !== \"production\" ? warning(false, // TODO: Write up a doc that explains our blocking strategy in\n          // detail and link to it here so people can understand better\n          // what is going on and how to avoid it.\n          \"You are trying to block a POP navigation to a location that was not \" + \"created by the history library. The block will fail silently in \" + \"production, but in general you should do all navigation with the \" + \"history library (instead of using window.history.pushState directly) \" + \"to avoid this situation.\") : void 0;\n        }\n      } else {\n        applyTx(nextAction);\n      }\n    }\n  }\n\n  window.addEventListener(PopStateEventType, handlePop); // popstate does not fire on hashchange in IE 11 and old (trident) Edge\n  // https://developer.mozilla.org/de/docs/Web/API/Window/popstate_event\n\n  window.addEventListener(HashChangeEventType, function () {\n    var _getIndexAndLocation5 = getIndexAndLocation(),\n        nextLocation = _getIndexAndLocation5[1]; // Ignore extraneous hashchange events.\n\n\n    if (createPath(nextLocation) !== createPath(location)) {\n      handlePop();\n    }\n  });\n  var action = Action.Pop;\n\n  var _getIndexAndLocation6 = getIndexAndLocation(),\n      index = _getIndexAndLocation6[0],\n      location = _getIndexAndLocation6[1];\n\n  var listeners = createEvents();\n  var blockers = createEvents();\n\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), '');\n  }\n\n  function getBaseHref() {\n    var base = document.querySelector('base');\n    var href = '';\n\n    if (base && base.getAttribute('href')) {\n      var url = window.location.href;\n      var hashIndex = url.indexOf('#');\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n\n    return href;\n  }\n\n  function createHref(to) {\n    return getBaseHref() + '#' + (typeof to === 'string' ? to : createPath(to));\n  }\n\n  function getNextLocation(to, state) {\n    if (state === void 0) {\n      state = null;\n    }\n\n    return readOnly(_extends({\n      pathname: location.pathname,\n      hash: '',\n      search: ''\n    }, typeof to === 'string' ? parsePath(to) : to, {\n      state: state,\n      key: createKey()\n    }));\n  }\n\n  function getHistoryStateAndUrl(nextLocation, index) {\n    return [{\n      usr: nextLocation.state,\n      key: nextLocation.key,\n      idx: index\n    }, createHref(nextLocation)];\n  }\n\n  function allowTx(action, location, retry) {\n    return !blockers.length || (blockers.call({\n      action: action,\n      location: location,\n      retry: retry\n    }), false);\n  }\n\n  function applyTx(nextAction) {\n    action = nextAction;\n\n    var _getIndexAndLocation7 = getIndexAndLocation();\n\n    index = _getIndexAndLocation7[0];\n    location = _getIndexAndLocation7[1];\n    listeners.call({\n      action: action,\n      location: location\n    });\n  }\n\n  function push(to, state) {\n    var nextAction = Action.Push;\n    var nextLocation = getNextLocation(to, state);\n\n    function retry() {\n      push(to, state);\n    }\n\n    process.env.NODE_ENV !== \"production\" ? warning(nextLocation.pathname.charAt(0) === '/', \"Relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\") : void 0;\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      var _getHistoryStateAndUr3 = getHistoryStateAndUrl(nextLocation, index + 1),\n          historyState = _getHistoryStateAndUr3[0],\n          url = _getHistoryStateAndUr3[1]; // TODO: Support forced reloading\n      // try...catch because iOS limits us to 100 pushState calls :/\n\n\n      try {\n        globalHistory.pushState(historyState, '', url);\n      } catch (error) {\n        // They are going to lose state here, but there is no real\n        // way to warn them about it since the page will refresh...\n        window.location.assign(url);\n      }\n\n      applyTx(nextAction);\n    }\n  }\n\n  function replace(to, state) {\n    var nextAction = Action.Replace;\n    var nextLocation = getNextLocation(to, state);\n\n    function retry() {\n      replace(to, state);\n    }\n\n    process.env.NODE_ENV !== \"production\" ? warning(nextLocation.pathname.charAt(0) === '/', \"Relative pathnames are not supported in hash history.replace(\" + JSON.stringify(to) + \")\") : void 0;\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      var _getHistoryStateAndUr4 = getHistoryStateAndUrl(nextLocation, index),\n          historyState = _getHistoryStateAndUr4[0],\n          url = _getHistoryStateAndUr4[1]; // TODO: Support forced reloading\n\n\n      globalHistory.replaceState(historyState, '', url);\n      applyTx(nextAction);\n    }\n  }\n\n  function go(delta) {\n    globalHistory.go(delta);\n  }\n\n  var history = {\n    get action() {\n      return action;\n    },\n\n    get location() {\n      return location;\n    },\n\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    back: function back() {\n      go(-1);\n    },\n    forward: function forward() {\n      go(1);\n    },\n    listen: function listen(listener) {\n      return listeners.push(listener);\n    },\n    block: function block(blocker) {\n      var unblock = blockers.push(blocker);\n\n      if (blockers.length === 1) {\n        window.addEventListener(BeforeUnloadEventType, promptBeforeUnload);\n      }\n\n      return function () {\n        unblock(); // Remove the beforeunload listener so the document may\n        // still be salvageable in the pagehide event.\n        // See https://html.spec.whatwg.org/#unloading-documents\n\n        if (!blockers.length) {\n          window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload);\n        }\n      };\n    }\n  };\n  return history;\n}\n/**\r\n * Memory history stores the current location in memory. It is designed for use\r\n * in stateful non-browser environments like tests and React Native.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#creatememoryhistory\r\n */\n\nfunction createMemoryHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options3 = options,\n      _options3$initialEntr = _options3.initialEntries,\n      initialEntries = _options3$initialEntr === void 0 ? ['/'] : _options3$initialEntr,\n      initialIndex = _options3.initialIndex;\n  var entries = initialEntries.map(function (entry) {\n    var location = readOnly(_extends({\n      pathname: '/',\n      search: '',\n      hash: '',\n      state: null,\n      key: createKey()\n    }, typeof entry === 'string' ? parsePath(entry) : entry));\n    process.env.NODE_ENV !== \"production\" ? warning(location.pathname.charAt(0) === '/', \"Relative pathnames are not supported in createMemoryHistory({ initialEntries }) (invalid entry: \" + JSON.stringify(entry) + \")\") : void 0;\n    return location;\n  });\n  var index = clamp(initialIndex == null ? entries.length - 1 : initialIndex, 0, entries.length - 1);\n  var action = Action.Pop;\n  var location = entries[index];\n  var listeners = createEvents();\n  var blockers = createEvents();\n\n  function createHref(to) {\n    return typeof to === 'string' ? to : createPath(to);\n  }\n\n  function getNextLocation(to, state) {\n    if (state === void 0) {\n      state = null;\n    }\n\n    return readOnly(_extends({\n      pathname: location.pathname,\n      search: '',\n      hash: ''\n    }, typeof to === 'string' ? parsePath(to) : to, {\n      state: state,\n      key: createKey()\n    }));\n  }\n\n  function allowTx(action, location, retry) {\n    return !blockers.length || (blockers.call({\n      action: action,\n      location: location,\n      retry: retry\n    }), false);\n  }\n\n  function applyTx(nextAction, nextLocation) {\n    action = nextAction;\n    location = nextLocation;\n    listeners.call({\n      action: action,\n      location: location\n    });\n  }\n\n  function push(to, state) {\n    var nextAction = Action.Push;\n    var nextLocation = getNextLocation(to, state);\n\n    function retry() {\n      push(to, state);\n    }\n\n    process.env.NODE_ENV !== \"production\" ? warning(location.pathname.charAt(0) === '/', \"Relative pathnames are not supported in memory history.push(\" + JSON.stringify(to) + \")\") : void 0;\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      applyTx(nextAction, nextLocation);\n    }\n  }\n\n  function replace(to, state) {\n    var nextAction = Action.Replace;\n    var nextLocation = getNextLocation(to, state);\n\n    function retry() {\n      replace(to, state);\n    }\n\n    process.env.NODE_ENV !== \"production\" ? warning(location.pathname.charAt(0) === '/', \"Relative pathnames are not supported in memory history.replace(\" + JSON.stringify(to) + \")\") : void 0;\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      entries[index] = nextLocation;\n      applyTx(nextAction, nextLocation);\n    }\n  }\n\n  function go(delta) {\n    var nextIndex = clamp(index + delta, 0, entries.length - 1);\n    var nextAction = Action.Pop;\n    var nextLocation = entries[nextIndex];\n\n    function retry() {\n      go(delta);\n    }\n\n    if (allowTx(nextAction, nextLocation, retry)) {\n      index = nextIndex;\n      applyTx(nextAction, nextLocation);\n    }\n  }\n\n  var history = {\n    get index() {\n      return index;\n    },\n\n    get action() {\n      return action;\n    },\n\n    get location() {\n      return location;\n    },\n\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    back: function back() {\n      go(-1);\n    },\n    forward: function forward() {\n      go(1);\n    },\n    listen: function listen(listener) {\n      return listeners.push(listener);\n    },\n    block: function block(blocker) {\n      return blockers.push(blocker);\n    }\n  };\n  return history;\n} ////////////////////////////////////////////////////////////////////////////////\n// UTILS\n////////////////////////////////////////////////////////////////////////////////\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n\nfunction promptBeforeUnload(event) {\n  // Cancel the event.\n  event.preventDefault(); // Chrome (and legacy IE) requires returnValue to be set.\n\n  event.returnValue = '';\n}\n\nfunction createEvents() {\n  var handlers = [];\n  return {\n    get length() {\n      return handlers.length;\n    },\n\n    push: function push(fn) {\n      handlers.push(fn);\n      return function () {\n        handlers = handlers.filter(function (handler) {\n          return handler !== fn;\n        });\n      };\n    },\n    call: function call(arg) {\n      handlers.forEach(function (fn) {\n        return fn && fn(arg);\n      });\n    }\n  };\n}\n\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n/**\r\n * Creates a string URL path from the given pathname, search, and hash components.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createpath\r\n */\n\n\nfunction createPath(_ref) {\n  var _ref$pathname = _ref.pathname,\n      pathname = _ref$pathname === void 0 ? '/' : _ref$pathname,\n      _ref$search = _ref.search,\n      search = _ref$search === void 0 ? '' : _ref$search,\n      _ref$hash = _ref.hash,\n      hash = _ref$hash === void 0 ? '' : _ref$hash;\n  if (search && search !== '?') pathname += search.charAt(0) === '?' ? search : '?' + search;\n  if (hash && hash !== '#') pathname += hash.charAt(0) === '#' ? hash : '#' + hash;\n  return pathname;\n}\n/**\r\n * Parses a string URL path into its separate pathname, search, and hash components.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#parsepath\r\n */\n\nfunction parsePath(path) {\n  var parsedPath = {};\n\n  if (path) {\n    var hashIndex = path.indexOf('#');\n\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n\n    var searchIndex = path.indexOf('?');\n\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n\n  return parsedPath;\n}\n\nexport { Action, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, parsePath };\n//# sourceMappingURL=index.js.map\n","import { u as useStateManager } from './useStateManager-7e1e8489.esm.js';\nexport { u as useStateManager } from './useStateManager-7e1e8489.esm.js';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, useMemo } from 'react';\nimport { S as Select } from './Select-ef7c0426.esm.js';\nexport { c as createFilter, d as defaultTheme, m as mergeStyles } from './Select-ef7c0426.esm.js';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nexport { c as components } from './index-641ee5b8.esm.js';\nimport '@babel/runtime/helpers/objectSpread2';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/createSuper';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport 'memoize-one';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@floating-ui/dom';\nimport 'use-isomorphic-layout-effect';\n\nvar StateManagedSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n  var baseSelectProps = useStateManager(props);\n  return /*#__PURE__*/React.createElement(Select, _extends({\n    ref: ref\n  }, baseSelectProps));\n});\nvar StateManagedSelect$1 = StateManagedSelect;\n\nvar NonceProvider = (function (_ref) {\n  var nonce = _ref.nonce,\n    children = _ref.children,\n    cacheKey = _ref.cacheKey;\n  var emotionCache = useMemo(function () {\n    return createCache({\n      key: cacheKey,\n      nonce: nonce\n    });\n  }, [cacheKey, nonce]);\n  return /*#__PURE__*/React.createElement(CacheProvider, {\n    value: emotionCache\n  }, children);\n});\n\nexport { NonceProvider, StateManagedSelect$1 as default };\n","import { useReducer } from 'react';\nvar updateReducer = function (num) { return (num + 1) % 1000000; };\nexport default function useUpdate() {\n    var _a = useReducer(updateReducer, 0), update = _a[1];\n    return update;\n}\n","import useTimeoutFn from './useTimeoutFn';\nimport useUpdate from './useUpdate';\nexport default function useTimeout(ms) {\n    if (ms === void 0) { ms = 0; }\n    var update = useUpdate();\n    return useTimeoutFn(update, ms);\n}\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useTimeoutFn(fn, ms) {\n    if (ms === void 0) { ms = 0; }\n    var ready = useRef(false);\n    var timeout = useRef();\n    var callback = useRef(fn);\n    var isReady = useCallback(function () { return ready.current; }, []);\n    var set = useCallback(function () {\n        ready.current = false;\n        timeout.current && clearTimeout(timeout.current);\n        timeout.current = setTimeout(function () {\n            ready.current = true;\n            callback.current();\n        }, ms);\n    }, [ms]);\n    var clear = useCallback(function () {\n        ready.current = null;\n        timeout.current && clearTimeout(timeout.current);\n    }, []);\n    // update ref when function changes\n    useEffect(function () {\n        callback.current = fn;\n    }, [fn]);\n    // set on mount, clear on unmount\n    useEffect(function () {\n        set();\n        return clear;\n    }, [ms]);\n    return [isReady, clear, set];\n}\n"],"names":["isFinite","s","isNaN","Number","setTimeout","performance","URL","e","t","i","Math","parseInt","h","Request","Headers","Array","o","String","r","Object","addEventListener","n","Date","PerformanceObserver","removeEventListener","__SENTRY_DEBUG__","document","u","clearTimeout"],"mappings":"4FA2BI,EACA,E,kPCzBJ,SAAS,EAAmB,CAAK,EAC/B,MAAO,AAAiB,UAAjB,OAAO,GAAsBA,SAAS,EAC/C,CAUA,SAAS,EAAY,CAAW,CAAE,CAAE,gBAAc,CAAE,GAAG,EAAK,EAQ1D,OANI,GAAkB,EAAY,cAAc,CAAG,GAEjD,GAAY,cAAc,CAAG,CAAa,EAIrC,EAAY,UAAU,CAAC,CAC5B,iBACA,GAAG,CAAG,AACR,EACF,C,eDZA,SAAS,EAAQ,CAAI,EACnB,OAAO,EAAO,GAChB,CAEA,SAAS,IAEP,OAAO,GAAM,EAAI,oBAAuB,EAAI,eAAkB,AAChE,CAEA,IAAI,EAAqB,EAErB,EAAgB,CAAC,EA0Kf,EAAgB,CACpB,MAAO,QACP,YAAa,QACb,UAAW,QACX,UAAW,QACX,QAAS,QACT,WAAY,QACZ,SAAU,QACV,UAAW,QACX,SAAU,QACV,WAAY,QACZ,WAAY,QACZ,YAAa,QACb,WAAY,QACZ,aAAc,QACd,aAAc,QACd,UAAW,OACX,QAAS,OACT,KAAM,OACN,UAAW,OACX,UAAW,OACX,SAAU,OACV,KAAM,OACN,QAAS,QACT,MAAO,QACP,SAAU,QACV,MAAO,OACT,EAgOA,SAAS,EACP,CAAW,CAEX,CAAK,CACL,CAAK,CACL,CAAU,CACV,CAAW,CACX,CAAQ,EAER,IAAM,EAAM,EAAY,CAAK,CAAC,EAAS,CAAM,CAAK,CAAC,CAAC,EAAE,EAAM,GAAG,CAAC,CAAC,CAC3DC,EAAQ,CAAK,CAAC,CAAC,EAAE,EAAM,KAAK,CAAC,CAAC,CAC/BA,GAAU,GAGf,EAAY,EAAa,CACvB,GAAI,UACJ,OAAQ,+BACR,YAAa,GAAe,EAC5B,eAAgB,EAAa,EAAQA,GACrC,aAAc,EAAa,EAAQ,EACrC,EACF,CAiKA,SAAS,EACP,CAAI,CACJ,CAAK,CACL,CAAG,CACH,CAAO,EAEP,IAAM,EAAW,CAAK,CAAC,EAAI,AACvB,AAAY,OAAZ,GAAoB,EAnnBD,YAonBrB,EAAI,CAAC,EAAQ,CAAG,CAAO,CAE3B,C,sGEvnBA,IAAM,EAAoC,CAAC,YAAa,YAAY,CAI9D,EAAuC,CAC3C,WAAY,GACZ,SAAU,GACV,kBAAmB,GAEnB,eAAgB,EAChB,wBAAyB,CAC3B,EA4EA,SAAS,EAAe,CAAI,EAC1B,GAAM,CAAE,KAAG,CAAE,CAAG,SAAW,GAAM,IAAI,EAAI,CAAC,EAE1C,GAAI,CAAC,GAAO,AAAe,UAAf,OAAO,EACjB,OAGF,IAAM,EAAU,SAAqC,WAAY,CAAC,CAAE,SAAO,CAAE,IAC3E,EAAQ,OAAO,CAAC,IACV,AAtBc,aAApB,AAsBkC,EAtB5B,SAAS,EACf,kBAqBkC,GApBlC,AAAoC,UAApC,OAAO,AAoB2B,EApBlB,eAAe,EAC9B,CAAwB,UAAxB,AAmBiC,EAnB3B,aAAa,EAAgB,AAAwB,mBAAxB,AAmBF,EAnBQ,aAAa,AAAoB,GAmB/B,EAAM,IAAI,CAAC,QAAQ,CAAC,KAE5D,AADiB,AA6CzB,UAAuC,CAAc,EACnD,GAAM,CAAE,MAAI,CAAE,SAAO,CAAE,CAAG,AA9B5B,SAAgC,CAAe,EAC7C,IAAI,EAAO,UACP,EAAU,UACV,EAAQ,GACZ,IAAK,IAAM,KAAQ,EAAiB,CAElC,GAAI,AAAS,MAAT,EAAc,CAChB,CAAC,EAAM,EAAQ,CAAG,EAAgB,KAAK,CAAC,KACxC,KACF,CAEA,GAAI,CAACC,MAAMC,OAAO,IAAQ,CACxB,EAAO,AAAU,MAAV,EAAgB,OAAS,EAChC,EAAU,EAAgB,KAAK,CAAC,EAAM,CAAC,EAAE,CACzC,KACF,CACA,GAAS,CACX,CAKA,OAJI,IAAU,GAEZ,GAAO,CAAI,EAEN,CAAE,OAAM,SAAQ,CACzB,EAOmD,EAAe,eAAe,EAEzE,EAAiB,EAAE,OAIzB,CAFA,EAAe,IAAI,CAAC,CAAC,2BAA4B,EAAQ,CAAE,CAAC,wBAAyB,EAAK,EAErF,IAA4B,EAG1B,IACF,EACH,CAAC,8BAA+B,EAAgB,EAAe,aAAa,EAAE,CAC9E,CAAC,2BAA4B,EAAgB,EAAe,UAAU,EAAE,CACxE,CAAC,mCAAoC,EAAgB,EAAe,iBAAiB,EAAE,CACvF,CAAC,iCAAkC,EAAgB,EAAe,eAAe,EAAE,CACnF,CAAC,6BAA8B,EAAgB,EAAe,YAAY,EAAE,CAC5E,CAAC,uCAAwC,EAAgB,EAAe,qBAAqB,EAAE,CAC/F,CAAC,8BAA+B,EAAgB,EAAe,UAAU,EAAE,CAC3E,CAAC,6BAA8B,EAAgB,EAAe,YAAY,EAAE,CAC5E,CAAC,8BAA+B,EAAgB,EAAe,aAAa,EAAE,CAC9E,CAAC,4BAA6B,EAAgB,EAAe,WAAW,EAAE,CAC3E,CAdQ,CAeX,GApEuD,GACtC,OAAO,CAAC,GAAQ,EAAK,YAAY,IAAI,IAG9CC,WAAW,GAEf,EACF,EACF,CAiCA,SAAS,EAAgB,EAAO,CAAC,EAC/B,MAAO,AAAC,CAAC,KAA4B,EAAIC,YAAY,UAAU,AAAD,EAAK,CAAG,EAAK,GAC7E,CA6IA,SAAS,EAAW,CAAG,EACrB,GAAI,CAIF,OAAO,AADQ,IAAIC,IAAI,EAAK,mBAAsB,EACpC,IAAI,AACpB,CAAE,MAAOC,EAAG,CACV,MACF,CACF,C,eC5RA,IAAM,EAAkC,CACtC,GAAG,IAAgB,CACnB,2BAA4B,GAC5B,uBCVF,SACE,CAAsB,CACtB,EAA6B,EAAI,CACjC,EAAmC,EAAI,MASnC,EAPJ,GAAI,CAAC,GAAM,EAAI,CAAC,YAAe,CAAE,CAC/B,GAAW,EAAI,SAAW,CAAC,wEAC3B,MACF,CAEA,IAAI,EAAc,iBAAoB,AAGlC,IACF,GAAoB,EAAuB,CACzC,KAAM,qBAAwB,CAE9B,eAAgB,IAA4B,CAAG,IAA4B,CAAG,IAAO,OACrF,GAAI,WACJ,OAAQ,wBACR,SAAU,CAAE,OAAQ,KAAM,CAC5B,EAAC,EAGC,GACF,QAAiC,CAAC,CAAEC,GAAAA,CAAE,CAAE,MAAI,CAAE,IAU5C,GAAI,AAAS,SAAT,GAAsB,GAAe,AAA4B,KAA5B,EAAY,OAAO,CAACA,GAAY,CACvE,EAAc,OACd,MACF,CAEI,IAASA,IACX,EAAc,OACV,IACF,GAAW,EAAI,QAAU,CAAC,CAAC,iDAAiD,EAAE,EAAkB,EAAE,CAAC,CAAC,EAEpG,EAAkB,GAAG,IAEvB,EAAoB,EAAuB,CACzC,KAAM,qBAAwB,CAC9B,GAAI,aACJ,OAAQ,0BACR,SAAU,CAAE,OAAQ,KAAM,CAC5B,GAEJ,EAEJ,ED7CE,iCAAkC,GAClC,2BAA4B,GAC5B,eAAgB,GAChB,UAAW,GACX,uBAAwB,EACxB,aAAc,CAAC,EACf,GAAG,CAAoC,AACzC,CAcA,OAAM,EAcH,YAAY,CAAQ,CAAE,CACrB,IAAI,CAAC,IAAI,CA5C0B,iBA6CnC,IAAI,CAAC,8BAA8B,CAAG,GAEtC,UAEI,GAAW,EACb,KAAI,CAAC,8BAA8B,CAAG,CAAC,CACrC,IAEC,GAAS,uBAAuB,EAAI,EAAS,cAAc,AAAD,CAAC,CAC9D,EAGF,IAAI,CAAC,OAAO,CAAG,CACb,GAAG,CAA+B,CAClC,GAAG,CAAQ,AACb,EAII,AAA6C,SAA7C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAC1C,KAAI,CAAC,OAAO,CAAC,cAAc,CAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,AAAD,EAOnE,GAAY,CAAC,EAAS,uBAAuB,EAAI,EAAS,cAAc,EAE1E,KAAI,CAAC,OAAO,CAAC,uBAAuB,CAAG,EAAS,cAAc,AAAD,EAG/D,IAAI,CAAC,iBAAiB,CAAG,AHnD7B,WACE,IAAM,EAAc,IACpB,GAAI,GAAe,IAA4B,CAAE,CAE3C,EAAY,IAAI,EAClB,oBAAuB,CAAC,uBAE1B,IAAM,EA+HD,SAA6B,CAAC,CAAE,QAAM,CAAE,IAC7C,IAAM,EAAQ,EAAO,OAAO,CAAC,EAAO,OAAO,CAAC,MAAM,CAAG,EAAE,CACvD,GAAI,CAAC,EACH,OAGF,IAAM,EAAa,EAAQ,IAA4B,EACjD,EAAY,EAAQ,EAAM,SAAS,CACzC,IAAW,EAAI,QAAU,CAAC,6BAC1B,EAAc,GAAM,CAAG,CAAE,MAAO,EAAO,KAAK,CAAE,KAAM,aAAc,EAClE,CAAa,CAAC,WAAW,CAAG,CAAE,MAAO,EAAa,EAAW,KAAM,QAAS,CAC9E,GAzIQ,EAkGD,SAA6B,CAAC,CAAE,QAAM,CAAE,IAC7C,IAAM,EAAQ,EAAO,OAAO,CAAC,EAAO,OAAO,CAAC,MAAM,CAAG,EAAE,CAClD,IAIL,GAAW,EAAI,QAAU,CAAC,6BAC1B,EAAc,GAAM,CAAG,CAAE,MAAO,EAAO,KAAK,CAAE,KAAM,EAAG,EACvD,EAAY,EACd,EAAG,IA1GK,EA+GD,SAA6B,CAAC,CAAE,QAAM,CAAE,IAC7C,IAAM,EAAQ,EAAO,OAAO,CAAC,EAAO,OAAO,CAAC,MAAM,CAAG,EAAE,CAClD,IAIL,GAAW,EAAI,QAAU,CAAC,6BAC1B,EAAc,GAAM,CAAG,CAAE,MAAO,EAAO,KAAK,CAAE,KAAM,aAAc,EAClE,EAAY,EACd,EAAG,IAvHK,EA2ID,SAA8B,CAAC,CAAE,QAAM,CAAE,IAChC,EAAO,OAAO,CAAC,EAAO,OAAO,CAAC,MAAM,CAAG,EAAE,GAKvD,GAAW,EAAI,QAAU,CAAC,8BAC1B,EAAc,IAAO,CAAG,CAAE,MAAO,EAAO,KAAK,CAAE,KAAM,aAAc,EACrE,GAjJE,MAAO,KACL,IACA,IACA,IACA,GACF,CACF,CAEA,MAAO,IAAM,MACf,IGgCI,IAAI,CAAC,gCAAgC,CAAG,CAAC,EAErC,IAAI,CAAC,OAAO,CAAC,SAAS,EACxB,AHgCN,SACE,CAA+B,CAC/B,CAAsB,EAGtB,GAAI,AADgB,KACD,IAA4B,CAAE,KAkGjD,EACA,EAlGE,IAAMC,GAiGR,EAjGgC,EAkGhC,EAlGiE,EAoG1D,SAA6B,CAAC,CAAE,QAAM,CAAE,QAmb/CD,EACA,EACA,MAKI,EAzbF,GAAI,AAAiB,SAAjB,EAAO,KAAK,CACd,OAEF,IAAM,EAAQ,EAAO,OAAO,CAAC,IAAI,CAC/B,GAAS,EAAM,QAAQ,GAAK,EAAO,KAAK,EAAI,AAA8B,SAA9B,CAAa,CAAC,EAAM,IAAI,CAAC,EAEjE,EAAS,WACf,GAAI,CAAC,GAAS,CAAC,EACb,OAEF,IAAM,EAAkB,CAAa,CAAC,EAAM,IAAI,CAAC,CAC3C,EAAU,EAAO,UAAU,GAE3B,EAAY,EAAQ,AAAC,IAA4B,CAAK,EAAM,SAAS,EACrE,EAAW,EAAQ,EAAO,KAAK,EAC/B,EACJ,AAAwB,SAAxB,EAAM,aAAa,CAAiB,CAA+B,CAAC,EAAM,aAAa,CAAC,CAAG,OAC7F,GAAI,AAAgB,SAAhB,EACF,OAEF,GAAM,CAAE,WAAS,CAAE,eAAa,CAAE,mBAAiB,CAAE,MAAI,CAAE,UAAQ,CAAE,CAAG,EAClE,EAAc,AAAS,SAAT,EAAqB,EAAK,KAAK,EAAI,EAAK,EAAE,EAAI,EAAK,UAAU,CAAG,OAE9E,EAAY,AAAsB,SAAtB,EAAkC,EAAkB,YAAY,GAAK,OACjF,EAAO,IAAI,GAAI,CAAC,CACpB,eAAgB,EAChB,aAAc,EAAY,EAC1B,GAAI,CAAC,eAAe,EAAE,EAAgB,CAAC,CACvC,KAAM,SAAiB,EAAM,MAAM,EACnC,WAAY,CACV,QAAS,EAAQ,OAAO,CACxB,YAAa,EAAQ,WAAW,CAChC,YAAa,EACb,GAAI,AAAgB,SAAhB,GAA6B,AAAgB,KAAhB,EAAqB,CAAE,KAAM,CAAY,EAAI,CAAC,CAAC,CAChF,GAAI,AAAc,SAAd,EAA0B,CAAE,WAAY,CAAU,EAAI,CAAC,CAAC,CAC5D,GAAI,AAAa,SAAb,EAAyB,CAAE,UAAW,CAAS,EAAI,CAAC,CAAC,AAC3D,EACA,cAAe,EAAO,KAAK,CAC3B,aAAc,CACZ,IAAK,CAAE,MAAO,EAAO,KAAK,CAAE,KAAM,aAAc,CAClD,CACF,GAGM,GAsYRA,EAtYmC,EAuYnC,EAvYkD,EAwYlD,EAxY2D,EA0Y3D,CAAI,CAAC,QAAkB,MAKrB,EADEA,AAAuB,SAAvBA,GAAoC,AAAiC,YAAjC,OAAO,EAAQ,aAAa,CACrD,EAAQ,aAAa,CAAC,CACjCA,mBAAAA,EACA,KAAMA,EAAmB,IAAI,CAC7B,cAAeA,EAAmB,aAAa,CAC/C,WAAY,CAEV,GAAGA,EAAmB,IAAI,CAC1B,GAAGA,EAAmB,UAAU,AAClC,EACA,SAAU,YAAe,AAC3B,GACSA,AAAuB,SAAvBA,GAAoCA,AAA+B,SAA/BA,EAAmB,OAAO,CAC1DA,EAAmB,OAAO,CAC9B,AAAoC,SAA7B,EAAQ,gBAAgB,CAC3B,EAAQ,gBAAgB,CAExB,EAEV,QAAkB,IAInB,AAAe,KAAf,EACK,EACE,AAAe,KAAf,EACF,EAEF,EAAa,GARlB,GAAW,EAAI,SAAW,CAAC,yEACpB,MAjaP,GAAK,GAIDE,KAAK,MAAM,GAAM,EAAc,CACjC,IAAMH,EAAW,EAAO,QAAmB,CAAC,EAAK,CAAE,EAAO,MAAM,IAAM,OAChEC,EAAY,GAAU,EAAO,YAAY,EAC3CA,CAAAA,GAAaD,GACfC,EAAU,IAAI,CAACD,GAAU,IAAI,CAAC,KAAM,IAClC,GAAW,EAAI,UAAY,CAAC,mCAAoC,EAClE,GAEF,MACF,CACF,GA/JS,MACLE,GACF,CACF,CAGF,EG9CuB,IAAI,CAAC,gCAAgC,CAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAEzF,IAAI,CAAC,OAAO,CAAC,cAAc,EH/BjC,SAAqC,WAAY,CAAC,CAAEF,QAAAA,CAAO,CAAE,IAC3D,IAAK,IAAM,KAASA,EAAS,CAE3B,IAAM,EAAc,UACpB,GAAI,CAAC,EACH,OAEF,IAAM,EAAY,EAAQ,AAAC,IAA4B,CAAK,EAAM,SAAS,EACrE,EAAW,EAAQ,EAAM,QAAQ,EAGvC,EAAY,UAAU,CAAC,CACrB,YAAa,yBACb,GAAI,eACJ,OAAQ,0BACR,eAAgB,EAChB,aAAc,EAAY,CAC5B,EACF,CACF,GGeM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,EHRlD,SAAqC,QAAS,CAAC,CAAEA,QAAAA,CAAO,CAAE,IACxD,IAAK,IAAM,KAASA,EAAS,CAE3B,IAAM,EAAc,UACpB,GAAI,CAAC,EACH,OAGF,GAAI,AAAe,UAAf,EAAM,IAAI,CAAc,CAC1B,IAAM,EAAY,EAAQ,AAAC,IAA4B,CAAK,EAAM,SAAS,EACrE,EAAW,EAAQ,EAAM,QAAQ,EAEjC,EAAO,CACX,YAAa,SAAiB,EAAM,MAAM,EAC1C,GAAI,CAAC,eAAe,EAAE,EAAM,IAAI,CAAC,CAAC,CAClC,OAAQ,0BACR,eAAgB,EAChB,aAAc,EAAY,CAC5B,EAEM,EAAgB,SAAiB,EAAM,MAAM,CAC/C,IACF,GAAK,UAAU,CAAG,CAAE,oBAAqB,CAAc,GAIzD,EAAY,UAAU,CAAC,EACzB,CACF,CACF,GGjBE,IAAI,CAAC,YAAY,CAAG,CAClB,KAAM,OACN,QAAS,MACX,CACF,CAMC,UAAU,CAAC,CAAE,CAAa,CAAE,CAC3B,IAAI,CAAC,cAAc,CAAG,EAGtB,IAAM,EAAS,AAFH,IAEO,SAAS,GACtB,EAAgB,GAAU,EAAO,UAAU,GAE3C,CACJ,uBAAwBE,CAAiB,CACzC,kCAAgC,CAChC,4BAA0B,CAC1B,4BAA0B,CAC1B,YAAU,CACV,UAAQ,CACR,4BAA0B,CAC1B,mBAAiB,CACjB,cAAY,CACb,CAAG,IAAI,CAAC,OAAO,CAEV,EAAuC,GAAiB,EAAc,uBAAuB,CAY7F,EAA0B,GAAwC,IAAI,CAAC,OAAO,CAAC,uBAAuB,AACxG,IAAW,EAAI,IAAI,CAAC,8BAA8B,EAAI,GACxD,SAAW,CACT,0KAIJA,EACE,AAAC,IACC,IAAM,EAAc,IAAI,CAAC,uBAAuB,CAAC,GAKjD,OAHA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,uBAAuB,EAC/C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,EAAa,EAAS,GAEnE,CACT,EACA,EACA,GAGE,IExJF,YAAe,CACjB,6BAAgC,CAAC,mBAAoB,KAEnD,IAAM,EAAoB,UAC1B,GAAI,mBAAsB,EAAI,EAAmB,CAC/C,IAAM,EAAa,YAEb,CAAE,IAAE,CAAE,QAAM,CAAE,CAAG,SAAW,EAElC,IAAW,EACT,QAAU,CAAC,CAAC,uBAAuB,EAAE,EAAW,2CAA2C,EAAE,EAAG,CAAC,EAG/F,AAAC,GACH,EAAkB,SAAS,CAAC,GAI9B,EAAkB,MAAM,CAAC,mBAAoB,mBAC7C,EAAkB,GAAG,EACvB,CACF,GAEA,GAAW,EAAI,SAAW,CAAC,uFFqIvB,EAAa,kBAAkB,EACjC,IAAI,CAAC,4BAA4B,GAG/B,IAAI,CAAC,OAAO,CAAC,SAAS,EACxB,IAAI,CAAC,+BAA+B,GAGtC,ADxJJ,SAAoC,CAAQ,EAC1C,GAAM,CACJD,WAAAA,CAAU,CACV,UAAQ,CAER,yBAAuB,CAEvB,gBAAc,CACd,4BAA0B,CAC1B,mBAAiB,CAClB,CAAG,CACF,WAAY,EAAqC,UAAU,CAC3D,SAAU,EAAqC,QAAQ,CACvD,GAAG,CAAQ,AACb,EAEMP,EACJ,AAAsC,YAAtC,OAAO,EAA4C,EAA6B,AAAC,GAAM,GAKnF,EAAiC,AAAC,QAwIb,EAAK,SAAL,EAvIL,EAuIU,EAvIL,GAA2B,EAwI/C,SAAyB,EAAK,GAA2B,IAtI1D,EAAQ,CAAC,CAEXO,CAAAA,GACF,QAA+B,IAC7B,IAAM,EAAc,AI3C1B,SACE,CAAW,CACX,CAAgB,CAChB,CAAmB,CACnB,CAAK,CACL,EAAa,mBAAmB,EAEhC,GAAI,CAAC,WAAuB,CAAC,EAAY,SAAS,CAChD,OAGF,IAAM,EAAyB,EAAiB,EAAY,SAAS,CAAC,GAAG,EAEzE,GAAI,EAAY,YAAY,EAAI,EAAwB,CACtD,IAAM,EAAS,EAAY,SAAS,CAAC,MAAM,CAC3C,GAAI,CAAC,EAAQ,OAEb,IAAM,EAAO,CAAK,CAAC,EAAO,CACtB,IACF,AA4IN,SAAiB,CAAI,CAAE,CAAW,EAChC,GAAI,EAAY,QAAQ,CAAE,CACxB,SAAc,EAAM,EAAY,QAAQ,CAAC,MAAM,EAE/C,IAAM,EACJ,EAAY,QAAQ,EAAI,EAAY,QAAQ,CAAC,OAAO,EAAI,EAAY,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAE3F,GAAI,EAAe,CACjB,IAAM,EAAmBG,SAAS,EAC9B,GAAmB,GACrB,EAAK,YAAY,CAAC,+BAAgC,EAEtD,CACF,MAAW,EAAY,KAAK,EAC1B,EAAK,SAAS,CAAC,kBAEjB,EAAK,GAAG,EACV,EA7Jc,EAAM,GAEd,OAAO,CAAK,CAAC,EAAO,EAEtB,MACF,CAEA,IAAM,EAAQ,WACR,EAAS,WAET,CAAE,QAAM,CAAE,KAAG,CAAE,CAAG,EAAY,SAAS,CAEvC,EAAU,AAuHlB,SAAoB,CAAG,EACrB,GAAI,CAEF,OAAO,AADQ,IAAIL,IAAI,GACT,IAAI,AACpB,CAAE,MAAOC,EAAG,CACV,MACF,CACF,EA9H6B,GACrBK,EAAO,EAAU,SAAS,GAAS,IAAI,CAAG,OAE1C,EAAO,EACT,SAAkB,CAChB,KAAM,CAAC,EAAE,EAAO,CAAC,EAAE,EAAI,CAAC,CACxB,aAAc,GACd,WAAY,CACV,MACA,KAAM,QACN,cAAe,EACf,WAAY,EACZ,iBAAkBA,EAClB,CAAC,IAAgC,CAAC,CAAE,CACtC,EACA,GAAI,aACN,GACA,OAOJ,GALI,IACF,EAAY,SAAS,CAAC,MAAM,CAAG,EAAK,WAAW,GAAG,MAAM,CACxD,CAAK,CAAC,EAAK,WAAW,GAAG,MAAM,CAAC,CAAG,GAGjC,EAAoB,EAAY,SAAS,CAAC,GAAG,GAAK,EAAQ,CAC5D,IAAM,EAAU,EAAY,IAAI,CAAC,EAAE,AAGnC,GAAY,IAAI,CAAC,EAAE,CAAG,EAAY,IAAI,CAAC,EAAE,EAAI,CAAC,EAG9C,IAAM,EAAU,EAAY,IAAI,CAAC,EAAE,AAGnC,GAAQ,OAAO,CAAG,AAStB,SACE,CAAO,CACP,CAAM,CACN,CAAK,CACL,CAAO,CAGP,CAAW,EAGX,IAAM,EAAO,GAAe,EAAM,OAAO,GAInC,CAAE,SAAO,CAAEX,OAAAA,CAAM,CAAE,SAAO,CAAE,KAAG,CAAE,CAAG,CACxC,GAAG,AAHkB,WAGH,qBAAqB,EAAE,CACzC,GAAG,EAAM,qBAAqB,EAAE,AAClC,EAEM,EAAoB,EAAO,SAAkB,GAAQ,SAA0B,EAASA,EAAQ,GAEhG,EAAsB,SAC1B,GACG,GAAO,QAAkC,GAAQ,QAAoC,EAAS,EAAQ,EAAK,GAG1G,EACJ,EAAQ,OAAO,EACd,CAAmB,IAAnB,OAAOY,SAA2B,SAAa,EAASA,SAAW,AAAC,EAAU,OAAO,CAAG,MAAQ,EAEnG,GAAI,CAAC,EACH,MAAO,CAAE,eAAgB,EAAmB,QAAS,CAAoB,EACpE,GAAI,AAAmB,IAAnB,OAAOC,SAA2B,SAAa,EAASA,SAAU,CAC3E,IAAM,EAAa,IAAIA,QAAQ,GAU/B,OARA,EAAW,MAAM,CAAC,eAAgB,GAE9B,GAGF,EAAW,MAAM,CAAC,IAAmB,CAAE,GAGlC,CACT,CAAO,GAAIC,MAAM,OAAO,CAAC,GAAU,CACjC,IAAM,EAAa,IAAI,EAAS,CAAC,eAAgB,EAAkB,CAAC,CAQpE,OANI,GAGF,EAAW,IAAI,CAAC,CAAC,IAAmB,CAAE,EAAoB,EAGrD,CACT,CAAO,CACL,IAAMR,EAAwB,YAAa,EAAU,EAAQ,OAAO,CAAG,OACjE,EAAoB,EAAE,CAY5B,OAVIQ,MAAM,OAAO,CAACR,GAChB,EAAkB,IAAI,IAAIA,GACjBA,GACT,EAAkB,IAAI,CAACA,GAGrB,GACF,EAAkB,IAAI,CAAC,GAGlB,CACL,GAAI,CAAO,CACX,eAAgB,EAChB,QAAS,EAAkB,MAAM,CAAG,EAAI,EAAkB,IAAI,CAAC,KAAO,MACxE,CACF,CACF,EAnFsD,EAAS,EAAQ,EAAO,EAAS,EACrF,CAEA,OAAO,CACT,EJ1BiD,EAAaN,EAAkB,EAAgC,GAI1G,GAAI,EAAa,CACf,IAAM,EAAU,EAAW,EAAY,SAAS,CAAC,GAAG,EAC9C,EAAO,EAAU,SAAS,GAAS,IAAI,CAAG,OAChD,EAAY,aAAa,CAAC,CACxB,WAAY,EACZ,iBAAkB,CACpB,EACF,CAEI,GAAqB,GACvB,EAAe,EAEnB,GAGE,GACF,SAA6B,IAC3B,IAAM,EAAc,AAsH1B,SACE,CAAW,CACX,CAAgB,CAChB,CAAmB,CACnB,CAAK,EAEL,IAAM,EAAM,EAAY,GAAG,CACrB,EAAgB,GAAO,CAAG,CAAC,IAAmB,CAAC,CAErD,GAAI,CAAC,WAAuB,CAAC,GAAO,EAAI,sBAAsB,EAAI,CAAC,EACjE,OAGF,IAAM,EAAyB,EAAiB,EAAc,GAAG,EAGjE,GAAI,EAAY,YAAY,EAAI,EAAwB,CACtD,IAAM,EAAS,EAAI,sBAAsB,CACzC,GAAI,CAAC,EAAQ,OAEb,IAAM,EAAO,CAAK,CAAC,EAAO,CACtB,GAAQ,AAA8B,SAA9B,EAAc,WAAW,GACnC,SAAc,EAAM,EAAc,WAAW,EAC7C,EAAK,GAAG,GAGR,OAAO,CAAK,CAAC,EAAO,EAEtB,MACF,CAEA,IAAMA,EAAQ,WACR,EAAiB,WAEjB,EAAU,EAAW,EAAc,GAAG,EACtC,EAAO,EAAU,SAAS,GAAS,IAAI,CAAG,OAE1C,EAAO,EACT,SAAkB,CAChB,KAAM,CAAC,EAAE,EAAc,MAAM,CAAC,CAAC,EAAE,EAAc,GAAG,CAAC,CAAC,CACpD,aAAc,GACd,WAAY,CACV,KAAM,MACN,cAAe,EAAc,MAAM,CACnC,WAAY,EACZ,IAAK,EAAc,GAAG,CACtB,iBAAkB,EAClB,CAAC,IAAgC,CAAC,CAAE,mBACtC,EACA,GAAI,aACN,GACA,OAEA,IACF,EAAI,sBAAsB,CAAG,EAAK,WAAW,GAAG,MAAM,CACtD,CAAK,CAAC,EAAI,sBAAsB,CAAC,CAAG,GAGtC,IAAM,EAAS,WAEf,GAAI,EAAI,gBAAgB,EAAI,EAAoB,EAAc,GAAG,GAAK,EAAQ,CAC5E,GAAM,CAAE,SAAO,CAAE,QAAM,CAAE,SAAO,CAAE,KAAG,CAAE,CAAG,CACxC,GAAG,EAAe,qBAAqB,EAAE,CACzC,GAAGA,EAAM,qBAAqB,EAAE,AAClC,EAEM,EAAoB,EAAO,SAAkB,GAAQ,SAA0B,EAAS,EAAQ,OAcxG,EAPiB,EAQjB,EARsB,EAStB,EAd8B,SAC1B,GACG,GAAO,QAAkC,GAAQ,QAAoC,EAAS,EAAQA,EAAK,GAclH,GAAI,CAEF,EAAI,gBAAgB,CAAC,eAAgB,GACjC,GAKF,EAAI,gBAAgB,CAAC,IAAmB,CAAE,EAE9C,CAAE,MAAO,EAAG,CAEZ,CAtBA,CAEA,OAAO,CACT,EAnMsC,EAAaA,EAAkB,EAAgC,EAC3F,IAAqB,GACvB,EAAe,EAEnB,EAEJ,ECgG+B,CACzB,aACA,WACA,0BACA,6BACA,mBACF,EACF,CAGC,wBAAwB,CAAO,CAAE,KAa5B,EAZJ,GAAI,CAAC,IAAI,CAAC,cAAc,CAAE,CACxB,GAAW,EACT,SAAW,CAAC,CAAC,yBAAyB,EAAE,EAAQ,EAAE,CAAC,+CAA+C,CAAC,EACrG,MACF,CAEA,IAAM,EAAM,IAAI,CAAC,cAAc,GAEzB,CAAE,gBAAc,CAAE,aAAW,CAAE,cAAY,CAAE,mBAAiB,CAAE,CAAG,IAAI,CAAC,OAAO,CAE/E,EAAwB,AAAe,aAAf,EAAQ,EAAE,CAGxC,GAAI,EAAuB,CACzB,IAAM,EAAc,EAAwB,EAAe,gBAAkB,GACvE,EAAU,EAAwB,EAAe,WAAa,OAC9D,CAAE,SAAO,CAAE,KAAG,CAAE,cAAY,CAAEA,QAAAA,CAAO,CAAE,CAAG,SAA8B,EAAa,GAC3F,EAAkB,CAChB,UACA,eACA,cAAeA,EACf,GAAG,CAAO,CACV,SAAU,CAER,GAAG,EAAQ,QAAQ,CACnB,uBAAwB,CAC1B,EACA,QAAS,EACX,CACF,MACE,EAAkB,CAChB,QAAS,GACT,GAAG,CAAO,AACZ,EAGF,IAAM,EAAkB,AAA0B,YAA1B,OAAO,EAAgC,EAAe,GAAmB,EAI3F,EAAe,AAAoB,SAApB,EAAgC,CAAE,GAAG,CAAe,CAAE,QAAS,EAAM,EAAI,CAI9F,GAAa,QAAQ,CACnB,EAAa,IAAI,GAAK,EAAgB,IAAI,CAEtC,CAAE,GAAG,EAAa,QAAQ,CAAE,OAAQ,QAAS,EAE7C,EAAa,QAAQ,CAE3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAG,EAAa,IAAI,CAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAG,EAGxB,AAAyB,KAAzB,EAAa,OAAO,EACtB,GAAW,EAAI,QAAU,CAAC,CAAC,wBAAwB,EAAE,EAAa,EAAE,CAAC,uCAAuC,CAAC,EAG/G,GAAW,EAAI,QAAU,CAAC,CAAC,mBAAmB,EAAE,EAAa,EAAE,CAAC,qBAAqB,CAAC,EAEtF,GAAM,CAAE,UAAQ,CAAE,CAAG,GAAM,CAErB,EAAkB,QACtB,EACA,EACA,EACA,EACA,GACA,CAAE,UAAS,EACX,EACA,GAsBF,OAnBI,GACE,YAAe,GACjB,6BAAgC,CAAC,mBAAoB,KAC/C,CAAC,cAAe,WAAW,CAAC,QAAQ,CAAC,uBAA0B,GACjE,EAAgB,oBAAoB,EAExC,GAEI,CAAC,cAAe,WAAW,CAAC,QAAQ,CAAC,uBAA0B,GACjE,EAAgB,oBAAoB,IAK1C,EAAgB,4BAA4B,CAAC,IAC3C,IAAI,CAAC,iBAAiB,GACtB,AHoBN,SAA+B,CAAW,EACxC,IAAM,EAAc,IACpB,GAAI,CAAC,GAAe,CAAC,0BAA6B,EAAI,CAAC,IAA4B,CAEjF,MAGF,IAAW,EAAI,QAAU,CAAC,4DAC1B,IAAM,EAAa,EAAQ,IAA4B,EAEjD,EAAqB,EAAY,UAAU,GAE3C,CAAEe,GAAAA,CAAE,CAAE,gBAAiB,CAAoB,CAAE,CAAG,SAAW,GAkDjE,GA/CA,EAAmB,KAAK,CAAC,GAAoB,OAAO,CAAC,AAAC,QA8H3B,EAAa,EAAO,EAoC5B,EAAa,EAAO,EA3DvC,EAEA,EACA,EACA,EA1GE,IAAM,EAAY,EAAQ,EAAM,SAAS,EACnC,EAAW,EAAQ,EAAM,QAAQ,EAGvC,GAAI,AAAmB,eAAnB,EAAY,EAAE,GAAqB,IAAwB,GAAa,EAAY,CAAmB,EAI3G,OAAQ,EAAM,SAAS,EACrB,IAAK,aAoHkB,EAnHD,EAmHc,EAnHD,EAmHQ,EAnHD,EAoH9C,CAAC,cAAe,WAAY,wBAAyB,YAAa,UAAU,CAAC,OAAO,CAACT,IACnF,EAAgC,EAAa,EAAOA,EAAO,EAC7D,GACA,EAAgC,EAAa,EAAO,mBAAoB,EAAY,UAAW,cAC/F,EAAgC,EAAa,EAAO,QAAS,EAAY,QAAS,qBAClF,EAAgC,EAAa,EAAO,eAAgB,EAAY,OA8B7D,EA7BP,EA6BoB,EA7BP,EA6Bc,EA7BP,EA8B5B,EAAM,WAAW,GAKnB,EAAY,EAAa,CACvB,GAAI,UACJ,OAAQ,+BACR,YAAa,UACb,eAAgB,EAAa,EAAQ,EAAM,YAAY,EACvD,aAAc,EAAa,EAAQ,EAAM,WAAW,CACtD,GAEA,EAAY,EAAa,CACvB,GAAI,UACJ,OAAQ,+BACR,YAAa,WACb,eAAgB,EAAa,EAAQ,EAAM,aAAa,EACxD,aAAc,EAAa,EAAQ,EAAM,WAAW,CACtD,IA1KI,KAEF,KAAK,OACL,IAAK,QACL,IAAK,UAAW,KA8Fd,EAPN,EAtFuB,EAwFvB,EAxFoC,EAyFpC,EAzF2C,EA0F3C,EA1FsD,EA6FhD,EAAwB,AA7FkC,EA6FrB,EAG3C,EAAY,EAAa,CACvB,YAAa,EAAM,IAAI,CACvB,aAJ0B,EAAwB,EAKlD,GAAI,EAAM,SAAS,CACnB,OAAQ,gCACR,eAAgB,CAClB,GAnGM,IAAM,EAAc,UAEd,EAAe,EAAM,SAAS,CAAG,EAAY,eAAe,AAE/C,iBAAf,EAAM,IAAI,EAAsB,IAClC,GAAW,EAAI,QAAU,CAAC,4BAC1B,EAAc,EAAK,CAAG,CAAE,MAAO,EAAM,SAAS,CAAE,KAAM,aAAc,GAEnD,2BAAf,EAAM,IAAI,EAAiC,IAC7C,GAAW,EAAI,QAAU,CAAC,6BAC1B,EAAc,GAAM,CAAG,CAAE,MAAO,EAAM,SAAS,CAAE,KAAM,aAAc,GAEvE,KACF,CACA,IAAK,YACH,AAwJR,SACE,CAAW,CACX,CAAK,CACL,CAAW,CACX,CAAS,CACT,CAAQ,CACR,CAAU,EAIV,GAAI,AAAwB,mBAAxB,EAAM,aAAa,EAAyB,AAAwB,UAAxB,EAAM,aAAa,CACjE,OAGF,IAAM,EAAY,SAAS,GAGrB,EAAO,CAAC,EACd,EAAyB,EAAM,EAAO,eAAgB,+BACtD,EAAyB,EAAM,EAAO,kBAAmB,gCACzD,EAAyB,EAAM,EAAO,kBAAmB,wCAErD,yBAA0B,GAC5B,EAAI,CAAC,kCAAkC,CAAG,EAAM,oBAAoB,AAAD,EAEjE,EAAU,QAAQ,EACpB,EAAI,CAAC,aAAa,CAAG,EAAU,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,EAAC,EAGrD,EAAU,IAAI,EAChB,EAAI,CAAC,iBAAiB,CAAG,EAAU,IAAI,AAAD,EAGxC,CAAI,CAAC,kBAAkB,CAAG,EAAY,QAAQ,CAAC,mBAAsB,EAErE,IAAM,EAAiB,EAAa,EAGpC,EAAY,EAAa,CACvB,YAAa,EAAY,OAAO,CAAC,mBAAsB,CAAE,IACzD,aAJmB,EAAiB,EAKpC,GAAI,EAAM,aAAa,CAAG,CAAC,SAAS,EAAE,EAAM,aAAa,CAAC,CAAC,CAAG,iBAC9D,OAAQ,gCACR,iBACA,MACF,EACF,EAtM0B,EAAa,EAAO,EAAM,IAAI,CAAG,EAAW,EAAU,EAI5E,CACF,GAEA,EAAqBG,KAAK,GAAG,CAAC,EAAmB,MAAM,CAAG,EAAG,GAE7D,AAkMF,SAAyB,CAAW,EAClC,IAAM,EAAY,aAAgB,CAClC,GAAI,CAAC,EACH,OAIF,IAAM,EAAa,EAAU,UAAU,CACnC,IACE,EAAW,aAAa,EAG1B,EAAY,MAAM,CAAC,0BAA2B,EAAW,aAAa,EAGpE,EAAW,IAAI,EAGjB,EAAY,MAAM,CAAC,iBAAkB,EAAW,IAAI,EAGlD,EAAmB,EAAW,GAAG,GACnC,EAAa,CAAC,iBAAiB,CAAG,CAAE,MAAO,EAAW,GAAG,CAAE,KAAM,aAAc,IAI/E,EAAmB,EAAU,YAAY,GAG3C,EAAY,MAAM,CAAC,eAAgB,CAAC,EAAE,EAAU,YAAY,CAAC,GAAG,CAAC,EAG/D,EAAmB,EAAU,mBAAmB,GAGlD,EAAY,MAAM,CAAC,sBAAuBO,OAAO,EAAU,mBAAmB,EAElF,EAvOkB,GAGZD,AAAO,aAAPA,EAAmB,KAuOD,EAtOpB,AAgSJ,UAA2C,CAAa,EACtD,IAAM,EAAW,UACjB,GAAI,CAAC,EACH,OAGF,GAAM,CAAE,eAAa,CAAEE,aAAAA,CAAY,CAAE,CAAG,EAEpCA,GAAgB,IAClB,GAAW,EAAI,QAAU,CAAC,2CAC1B,CAAa,CAAC,mBAAmB,CAAG,CAClC,MAAO,EAAgBA,EACvB,KAAM,aACR,EAEJ,GA/SsC,GAElC,CAAC,MAAO,KAAM,MAAM,CAAC,OAAO,CAAC,IAC3B,GAAI,CAAC,CAAa,CAAC,EAAK,EAAI,CAAC,GAAwB,GAAc,EACjE,OAKF,IAAM,EAAW,CAAa,CAAC,EAAK,CAAC,KAAK,CAIpC,EAAkBR,KAAK,GAAG,CAAC,AAAC,CAHL,EAAa,EAAQ,GAGO,CAAmB,EAAK,KAC3E,EAAQ,EAAkB,CAEhC,IAAW,EAAI,QAAU,CAAC,CAAC,0BAA0B,EAAE,EAAK,MAAM,EAAE,EAAS,IAAI,EAAE,EAAgB,EAAE,EAAE,EAAM,CAAC,CAAC,EAC/G,CAAa,CAAC,EAAK,CAAC,KAAK,CAAG,CAC9B,GAEA,IAAM,EAAU,CAAa,CAAC,WAAW,CACrC,GAAW,EAAc,GAAM,GAEjC,EAAY,EAAa,CACvB,YAAa,oBACb,aAAc,EAAQ,KAAK,CAAG,EAAQ,EAAc,GAAM,CAAC,KAAK,EAChE,GAAI,YACJ,OAAQ,0BACR,eAAgB,EAAQ,KAAK,AAC/B,GAGA,OAAO,CAAa,CAAC,WAAW,EAK9B,AAAE,QAAS,GACb,OAAO,EAAc,GAAG,CAG1BS,OAAO,IAAI,CAAC,GAAe,OAAO,CAAC,IACjC,QAAe,EAAiB,CAAa,CAAC,EAAgB,CAAC,KAAK,CAAE,CAAa,CAAC,EAAgB,CAAC,IAAI,CAC3G,GA2LoB,EAzLL,EA0Lb,IACF,GAAW,EAAI,QAAU,CAAC,kCAItB,EAAU,OAAO,EAGnB,EAAY,MAAM,CAAC,cAAe,SAAiB,EAAU,OAAO,GAGlE,EAAU,EAAE,EAGd,EAAY,MAAM,CAAC,SAAU,EAAU,EAAE,EAGvC,EAAU,GAAG,EAIf,EAAY,MAAM,CAAC,UAAW,EAAU,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,EAAG,MAK9D,EAAY,MAAM,CAAC,WAAY,EAAU,IAAI,GAI3C,GAAa,EAAU,OAAO,GAChC,GAAW,EAAI,QAAU,CAAC,kCAC1B,EAAU,OAAO,CAAC,OAAO,CAAC,CAAC,EAAQ,IAGjC,EAAY,MAAM,CAAC,CAAC,WAAW,EAAE,EAAQ,EAAE,CAAC,CAAE,SAAiB,EAAO,IAAI,IA5N9E,CAEA,EAAY,OACZ,EAAY,OACZ,EAAgB,CAAC,CACnB,EGtI4B,EACxB,GAEO,CACT,CAGC,8BAA+B,CAE9B,IADI,EACE,EAAiC,SA6JxB,EA5Jb,IA6JE,EAEA,EAEA,EAjKI,CAAE,aAAW,CAAE,cAAY,CAAE,mBAAiB,CAAE,CAAG,IAAI,CAAC,OAAO,CAC/D,EAAK,kBAGL,EAAqB,UAC3B,GAAI,GAAsB,EAAmB,EAAE,EAAI,CAAC,aAAc,WAAW,CAAC,QAAQ,CAAC,EAAmB,EAAE,EAAG,CAC7G,GAAW,EACT,SAAW,CACT,CAAC,yBAAyB,EAAE,EAAG,yEAAyE,CAAC,EAE7G,MACF,CAQA,GANI,IACF,EAA+B,eAAe,CAAC,0BAC/C,EAA+B,GAAG,GAClC,EAAiC,QAG/B,CAAC,IAAI,CAAC,cAAc,CAAE,CACxB,GAAW,EAAI,SAAW,CAAC,CAAC,yBAAyB,EAAE,EAAG,+CAA+C,CAAC,EAC1G,MACF,CAEA,GAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAE,CAC3B,GAAW,EAAI,SAAW,CAAC,CAAC,yBAAyB,EAAE,EAAG,iDAAiD,CAAC,EAC5G,MACF,CAEA,IAAM,EAAM,IAAI,CAAC,cAAc,GACzB,CAAE,UAAQ,CAAE,CAAG,GAAM,CAErB,EAAU,CACd,KAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAC5B,KACA,QAAS,GACT,KAAM,CACJ,CAAC,IAAgC,CAAC,CAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAwH/D,EAAuB,CADZ,EAtHK,IAAI,CAAC,YAAY,CAAC,OAAO,EAuHV,UAAU,EAAI,EAAQ,UAAU,CAAC,IAAgC,CAAC,CAEjG,EAAiB,EAAQ,IAAI,EAAI,EAAQ,IAAI,CAAC,IAAgC,CAAC,CAE/E,EAAqB,EAAQ,QAAQ,EAAI,EAAQ,QAAQ,CAAC,MAAM,CAE/D,GAAwB,GAAkB,GA5HrC,KACN,CACF,EAEA,EAAiC,QAC/B,EACA,EACA,EACA,EACA,GACA,CAAE,UAAS,EACX,EAEJ,EAEA,CAAC,QAAQ,CAAC,OAAO,CAAC,IACZ,YAAe,EACjBC,iBAAiB,EAAM,EAAgC,CAAE,KAAM,GAAO,QAAS,EAAK,EAExF,EACF,CAGC,iCAAkC,CACjC,IAAM,EAAgB,CAAC,CAAEb,QAAAA,CAAO,CAAE,IAChC,IAAM,EAAS,WAGT,EACJ,AAAW,SAAX,GAAwB,AAAgC,SAAhC,EAAO,oBAAoB,CAC9C,EAAO,oBAAoB,CAAC,UAC7B,OACAW,EAAW,AAAW,SAAX,EAAuB,EAAO,WAAW,GAAK,OAEzD,EAAoB,UACpB,EAAe,WACf,EAAO,AAAiB,SAAjB,EAA6B,EAAa,OAAO,GAAK,OACnEX,EAAQ,OAAO,CAACA,IACd,GA0FC,aA1F4BA,EAAQ,CACnC,IAAM,EAAgBA,EAAM,aAAa,CACzC,GAAI,AAAkB,SAAlB,EACF,OAEF,IAAM,EAAsB,IAAI,CAAC,gCAAgC,CAAC,EAAc,CAC1E,EAAWA,EAAM,QAAQ,CACzBN,EAAYM,EAAM,SAAS,CAC3B,EAAOY,OAAO,IAAI,CAAC,IAAI,CAAC,gCAAgC,EACxD,EACJ,EAAK,MAAM,CAAG,EACV,EAAK,MAAM,CAAC,CAAC,EAAG,IACP,IAAI,CAAC,gCAAgC,CAAC,EAAE,CAAC,QAAQ,CACtD,IAAI,CAAC,gCAAgC,CAAC,EAAE,CAAC,QAAQ,CAC/C,EACA,GAEN,OAGN,IAAIZ,CAAAA,AAAoB,gBAApBA,EAAM,SAAS,EACK,EACnB,GAAG,CAAC,GAAO,IAAI,CAAC,gCAAgC,CAAC,EAAI,EACrD,IAAI,CAAC,GACG,EAAY,QAAQ,GAAK,GAAY,EAAY,SAAS,GAAKN,EAJxC,GAW/B,EAIL,IAAI,EACF,EAAoB,QAAQ,CAAGS,KAAK,GAAG,CAAC,EAAoB,QAAQ,CAAE,QACjE,GACL,EAAK,MAAM,CApXE,IAqXb,AAAqB,SAArB,GACA,EAAW,IAAI,CAAC,gCAAgC,CAAC,EAAiB,CAAC,QAAQ,CAC3E,CAEA,IAAM,EAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAClC,EAAgB,IAAI,CAAC,YAAY,CAAC,OAAO,CAC3C,GAAa,IACX,GAAoBS,OAAO,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE,MAAM,EA5XtE,IA8XT,OAAO,IAAI,CAAC,gCAAgC,CAAC,EAAiB,CAEhE,IAAI,CAAC,gCAAgC,CAAC,EAAc,CAAG,CACrD,YACA,WACA,gBACA,OACA,oBACAD,SAAAA,EACAjB,UAAAA,CACF,EAEJ,EACF,CACF,EACF,EACA,SAAqC,QAAS,GAC9C,SAAqC,cAAe,EACtD,CACF,CAGA,SAAS,EAAe,CAAQ,EAI9B,IAAM,EAAU,SAAc,CAAC,UAAU,EAAE,EAAS,CAAC,CAAC,EAEtD,OAAO,EAAU,EAAQ,YAAY,CAAC,WAAa,MACrD,C,mBItaI,ECLA,EACA,EACA,EACA,EACA,E,oGChBJ,IAAM,EAAe,CACnB,EACA,EACA,KAEA,IAAI,EACA,EACJ,OAAO,AAAC,IACF,EAAO,KAAK,EAAI,GACd,IAAe,CAAe,GAO5B,CANJ,GAAQ,EAAO,KAAK,CAAI,IAAa,EAAC,GAMzB,AAAc,SAAd,CAAsB,IACjC,EAAY,EAAO,KAAK,CACxB,EAAO,KAAK,CAAG,EACf,EAAS,GAIjB,CACF,E,0BCNA,IAAM,EAAqB,KACzB,IAAM,EAAW,UACjB,OAAO,AAAC,GAAY,EAAS,eAAe,EAAK,CACnD,ECAM,EAAa,CAAC,EAAM,KACxB,IAAMoB,EAAW,UACb,EAAiB,WAUrB,OARIA,IAEA,EADE,AAAC,YAAe,EAAI,yBAA4B,EAAK,IAAuB,EAC7D,YAEAA,EAAS,IAAI,CAAC,OAAO,CAAC,KAAM,MAI1C,CACL,OACA,MAAO,AAAiB,SAAV,EAAwB,GAAK,EAC3C,OAAQ,OACR,MAAO,EACP,QAAS,EAAE,CACX,GCjBK,CAAC,GAAG,EAAEC,KAAK,GAAG,GAAG,CAAC,EAAEZ,KAAK,KAAK,CAACA,KAAK,MAAM,GAAM,MAAO,IAAM,KAAK,CAAC,CDkBxE,gBACF,CACF,EElCM,EAAU,CACd,EACA,EACA,KAEA,GAAI,CACF,GAAIa,oBAAoB,mBAAmB,CAAC,QAAQ,CAAC,GAAO,CAC1D,IAAM,EAAK,IAAIA,oBAAoB,IACjC,EAAS,EAAK,UAAU,GAC1B,GAMA,OALA,EAAG,OAAO,CAAC,CACT,OACA,SAAU,GACV,GAAG,CAAI,AACT,GACO,CACT,CACF,CAAE,MAAOhB,EAAG,CAEZ,CAEF,E,0BN3BA,IAAI,EAA2B,EAC3B,EAAwB,GAAQ,CAChC,EAAwB,EAEtB,EAAiB,AAACA,IACtB,AAACA,EAAU,OAAO,CAACA,IACbA,EAAE,aAAa,GACjB,EAAwBG,KAAK,GAAG,CAAC,EAAuBH,EAAE,aAAa,EAGvE,EAA2B,AAF3B,GAAwBG,KAAK,GAAG,CAAC,EAAuBH,EAAE,aAAa,GAEpB,AAAC,GAAwB,CAAoB,EAAK,EAAI,EAAI,EAEjH,EACF,EOWM,EAAmC,IPFhC,EAAK,EAA2BF,YAAY,gBAAgB,EAAI,EOYnE,EAAyB,EAAE,CAI3B,EAAwB,CAAC,EAQzB,EAAe,AAACE,IAEpB,IAAM,EAAwB,CAAsB,CAAC,EAAuB,MAAM,CAAG,EAAE,CAGjF,EAAsB,CAAqB,CAACA,EAAM,aAAa,CAAC,CAItE,GACE,GACA,EAAuB,MAAM,CA3BI,IA4BjCA,EAAM,QAAQ,CAAG,EAAsB,OAAO,CAC9C,CAEA,GAAI,EACF,EAAoB,OAAO,CAAC,IAAI,CAACA,GACjC,EAAoB,OAAO,CAAGG,KAAK,GAAG,CAAC,EAAoB,OAAO,CAAEH,EAAM,QAAQ,MAC7E,CACL,IAAM,EAAc,CAElB,GAAIA,EAAM,aAAa,CACvB,QAASA,EAAM,QAAQ,CACvB,QAAS,CAACA,EAAM,AAClB,CACA,EAAqB,CAAC,EAAY,EAAE,CAAC,CAAG,EACxC,EAAuB,IAAI,CAAC,EAC9B,CAGA,EAAuB,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,OAAO,CAAG,EAAE,OAAO,EAC3D,EAAuB,MAAM,CA/CI,IA+C2B,OAAO,CAAC,IAElE,OAAO,CAAqB,CAAC,EAAE,EAAE,CAAC,AACpC,EACF,CACF,EC5DM,EAAoB,CAAC,ECErB,EAAY,AAAC,IACZ,YAAe,GAIhB,yBAA4B,CAC9Ba,iBAAiB,qBAAsB,IAAM,EAAU,GAAW,IACzD,AAA+B,aAA/B,uBAA0B,CACnCA,iBAAiB,OAAQ,IAAM,EAAU,GAAW,IAGpDhB,WAAW,EAAU,GAEzB,ER9BM,EAAW,CAAC,EACZ,EAAe,CAAC,EAetB,SAAS,EACP,CAAQ,CACR,EAAiB,EAAK,EAEtB,OAAO,EAAkB,MAAO,EAAU,EAAe,EAAc,EACzE,CASA,SAAS,EACP,CAAQ,CACR,EAAiB,EAAK,EAEtB,OAAO,EAAkB,MAAO,EAAU,EAAe,EAAc,EACzE,CAKA,SAAS,EAA8B,CAAQ,EAC7C,OAAO,EAAkB,OAAQ,EAAU,EAAgB,EAC7D,CAMA,SAAS,EAA6B,CAAQ,EAC5C,OAAO,EAAkB,MAAO,EAAU,EAAe,EAC3D,CAMA,SAAS,EACP,CAAQ,EAER,OAAO,EAAkB,MAAO,EAAU,EAAe,EAC3D,CAOA,SAAS,EACP,CAAI,CACJ,CAAQ,MAwG6B,MAC/B,EAhGN,OAPA,EAAW,EAAM,GAEZ,CAAY,CAAC,EAAK,GAqGjB,EAAU,CAAC,EAGb,AAAS,WAJwB,EAnGL,IAwG9B,GAAQ,iBAAiB,CAAG,GAG9B,EACE,EACAG,IACE,EAAgB,EAAM,CAAEA,QAAAA,CAAQ,EAClC,EACA,GA/GA,CAAY,CAAC,EAAK,CAAG,IAGhB,EAAmB,EAAM,EAClC,CAGA,SAAS,EAAgB,CAAI,CAAE,CAAI,EACjC,IAAM,EAAe,CAAQ,CAAC,EAAK,CAEnC,GAAI,AAAC,GAAiB,EAAa,MAAM,CAIzC,IAAK,IAAM,KAAW,EACpB,GAAI,CACF,EAAQ,EACV,CAAE,MAAO,EAAG,CACV,GAAW,EACT,UAAY,CACV,CAAC;AAAiD,MAAM,EAAE;AAAO,MAAM,EAAE,SAAgB;AAAW,MAAM,CAAC,CAC3G,EAEN,CAEJ,CAEA,SAAS,IACP,MAAO,AStEK,EACZ,EACA,EAAU,CAAC,CAAC,IAEZ,IACI,EADE,EAAS,EAAW,MAAO,GAG7B,EAAe,EACf,EAAiB,EAAE,CAGjB,EAAgB,AAACA,IACrBA,EAAQ,OAAO,CAACA,IAEd,GAAI,CAACA,EAAM,cAAc,CAAE,CACzB,IAAM,EAAoB,CAAc,CAAC,EAAE,CACrC,EAAmB,CAAc,CAAC,EAAe,MAAM,CAAG,EAAE,AAMhE,IACA,AAA0B,IAA1B,EAAe,MAAM,EACrBA,EAAM,SAAS,CAAG,EAAiB,SAAS,CAAG,KAC/CA,EAAM,SAAS,CAAG,EAAkB,SAAS,CAAG,KAEhD,GAAgBA,EAAM,KAAK,CAC3B,EAAe,IAAI,CAACA,KAEpB,EAAeA,EAAM,KAAK,CAC1B,EAAiB,CAACA,EAAM,EAKtB,EAAe,EAAO,KAAK,GAC7B,EAAO,KAAK,CAAG,EACf,EAAO,OAAO,CAAG,EACb,GACF,IAGN,CACF,EACF,EAEM,EAAK,EAAQ,eAAgB,GACnC,GAAI,EAAI,CACN,EAAS,EAAa,EAAU,EAAQ,EAAQ,gBAAgB,EAEhE,IAAM,EAAgB,KACpB,EAAc,EAAG,WAAW,IAC5B,EAAO,GACT,EAIA,MAFA,QAAS,GAEF,CACT,CAGF,GTSI,IACE,EAAgB,MAAO,CACrB,QACF,GACA,EAAe,CACjB,EACA,CAAE,iBAAkB,EAAK,EAE7B,CAEA,SAAS,QU5FM,MAIT,EAHE,EACA,EAIA,EASA,EAIA,EV0EN,OU7Fa,EV6FA,IACX,EAAgB,MAAO,CACrB,QACF,GACA,EAAe,CACjB,EUjGM,EAAoB,UACpB,EAAS,EAAW,OAIpB,EAAc,AAACA,IAEfA,EAAM,SAAS,CAAG,EAAkB,eAAe,GACrD,EAAO,KAAK,CAAGA,EAAM,eAAe,CAAGA,EAAM,SAAS,CACtD,EAAO,OAAO,CAAC,IAAI,CAACA,GACpB,EAAO,IAEX,EAMM,EAAK,EAAQ,cAJb,EAAgB,AAACA,IACrB,AAACA,EAAU,OAAO,CAAC,EACrB,QAGA,EAAS,EAAa,EAAU,GAE5B,GACF,QAAS,KACP,EAAc,EAAG,WAAW,IAC5B,EAAG,UAAU,EACf,EAAG,IVyEP,CAEA,SAAS,IACP,MAAO,AOrGK,CAAC,IACb,IAEI,EAFE,EAAoB,UACpB,EAAS,EAAW,OAGpB,EAAgB,AAACA,IACrB,IAAM,EAAYA,CAAO,CAACA,EAAQ,MAAM,CAAG,EAAE,CAC7C,GAAI,EAAW,CAKb,IAAM,EAAQG,KAAK,GAAG,CAAC,EAAU,SAAS,CAAG,IAAsB,GAG/D,EAAQ,EAAkB,eAAe,GAC3C,EAAO,KAAK,CAAG,EACf,EAAO,OAAO,CAAG,CAAC,EAAU,CAC5B,IAEJ,CACF,EAEM,EAAK,EAAQ,2BAA4B,GAE/C,GAAI,EAAI,CACN,EAAS,EAAa,EAAU,GAEhC,IAAM,EAAgB,KACf,CAAiB,CAAC,EAAO,EAAE,CAAC,GAC/B,EAAc,EAAG,WAAW,IAC5B,EAAG,UAAU,GACb,CAAiB,CAAC,EAAO,EAAE,CAAC,CAAG,GAC/B,EAAO,IAEX,EAaA,MARA,CAAC,UAAW,QAAQ,CAAC,OAAO,CAAC,IACvB,YAAe,EACjBU,iBAAiB,EAAM,EAAe,CAAE,KAAM,GAAM,QAAS,EAAK,EAEtE,GAEA,QAAS,EAAe,IAEjB,CACT,CAGF,GPiDe,IACX,EAAgB,MAAO,CACrB,QACF,GACA,EAAe,CACjB,EACF,CAEA,SAAS,QQrFiB,MAQlB,EACA,ER6EN,OQnFA,EAAO,GAAQ,CAAC,EAMV,EAAS,ER6ED,IACZ,EAAgB,OAAQ,CACtB,QACF,GACA,EAAgB,CAClB,EQnFM,EAAS,EAAW,QACoB,EAAK,gBAAgB,OAEnE,EAAU,KACR,IAAM,EAAW,UAEjB,GAAI,EAAU,CAWZ,GANA,EAAO,KAAK,CAAGV,KAAK,GAAG,CAAC,EAAS,aAAa,CAAG,IAAsB,GAMnE,EAAO,KAAK,CAAG,GAAK,EAAO,KAAK,CAAGL,YAAY,GAAG,GAAI,MAE1D,GAAO,OAAO,CAAG,CAAC,EAAS,CAE3B,EAAO,GACT,CACF,ER6DF,CAEA,SAAS,QMxBM,EAAU,MAanB,EAFE,EAIA,EAmCA,ENzBN,OMzBa,ENyBA,IACX,EAAgB,MAAO,CACrB,QACF,GACA,EAAe,CACjB,EM3BA,EAAO,GAAQ,CAAC,EPlGZ,qBAAsBA,aAAe,GAEzC,GAAK,EAAQ,QAAS,EAAgB,CACpC,KAAM,QACN,SAAU,GACV,kBAAmB,CACrB,EAAE,EOoGI,EAAS,EAAW,OAuCpB,EAAK,EAAQ,QAnCb,EAAgB,AAACE,QAlDjB,EAmDJA,EAAQ,OAAO,CAACA,IACVA,EAAM,aAAa,EACrB,EAAaA,GAWS,gBAApBA,EAAM,SAAS,EAMb,CALqB,EAAuB,IAAI,CAAC,GAC5C,EAAY,OAAO,CAAC,IAAI,CAAC,GACvBA,EAAM,QAAQ,GAAK,EAAU,QAAQ,EAAIA,EAAM,SAAS,GAAK,EAAU,SAAS,IAIzF,EAAaA,EADG,CAItB,GAEA,IAAM,GA5EF,EAA4BG,KAAK,GAAG,CACxC,EAAuB,MAAM,CAAG,EAChCA,KAAK,KAAK,CAAC,IAAqC,KAG3C,CAAsB,CAAC,EAA0B,EAyElD,GAAO,EAAI,OAAO,GAAK,EAAO,KAAK,GACrC,EAAO,KAAK,CAAG,EAAI,OAAO,CAC1B,EAAO,OAAO,CAAG,EAAI,OAAO,CAC5B,IAEJ,EAE2C,CAOzC,kBAAmB,EAAK,iBAAiB,EAAI,EAC/C,QAEA,EAAS,EAAa,EAAU,EAAQ,EAAK,gBAAgB,EAEzD,IAGF,EAAG,OAAO,CAAC,CAAE,KAAM,cAAe,SAAU,EAAK,GAEjD,QAAS,KACP,EAAc,EAAG,WAAW,IAIxB,EAAO,KAAK,CAAG,GAAK,IAAqC,IAC3D,EAAO,KAAK,CAAG,EACf,EAAO,OAAO,CAAG,EAAE,EAGrB,EAAO,GACT,IN/CJ,CAEA,SAAS,EACP,CAAI,CACJ,CAAQ,CACR,CAAY,CACZ,CAAa,CACb,EAAiB,EAAK,MAIlB,EAWJ,OAbA,EAAW,EAAM,GAIZ,CAAY,CAAC,EAAK,GACrB,EAAgB,IAChB,CAAY,CAAC,EAAK,CAAG,IAGnB,GACF,EAAS,CAAE,OAAQ,CAAc,GAG5B,EAAmB,EAAM,EAAU,EAAiB,EAAgB,OAC7E,CAmBA,SAAS,EAAW,CAAI,CAAE,CAAO,EAC/B,CAAQ,CAAC,EAAK,CAAG,CAAQ,CAAC,EAAK,EAAI,EAAE,CACrC,AAAC,CAAQ,CAAC,EAAK,CAAG,IAAI,CAAC,EACzB,CAGA,SAAS,EACP,CAAI,CACJ,CAAQ,CACR,CAAa,EAEb,MAAO,KACD,GACF,IAGF,IAAM,EAAe,CAAQ,CAAC,EAAK,CAEnC,GAAI,CAAC,EACH,OAGF,IAAMD,EAAQ,EAAa,OAAO,CAAC,EAC/BA,AAAU,MAAVA,GACF,EAAa,MAAM,CAACA,EAAO,EAE/B,CACF,C,eWhOA,IAAM,EAAS,A,SAAA,EAAU,C,yDCqCE,IACzB,AAAI,2BAA8B,CAE9B,eAAkB,EACjB,CAACJ,YAAY,gBAAgB,EAAIA,YAAY,gBAAgB,CAAC,aAAa,CAAC,EAAE,EAC7E,AA1BwC,MAE9C,IAAM,EAAS,sBAAyB,CAElCG,EAAO,+BAAkC,CAEzCa,EAAkB,CACtB,UAAW,aACX,UAAW,EACX,KAAMb,AAAQ,GAARA,EAAY,eAAiBA,AAAS,IAATA,EAAa,SAAW,UAC7D,EAEA,IAAK,IAAM,KAAO,EACZ,AAAQ,oBAAR,GAA6B,AAAQ,WAAR,GAE/Ba,CAAAA,CAAe,CAAC,EAAI,CAAGX,KAAK,GAAG,CAAC,AAAC,CAAM,CAAC,EAAK,CAAK,EAAO,eAAe,CAAE,EAAC,EAG/E,OAAOW,CACT,IAOgD,EAGrC,eAAkB,EAAIhB,YAAY,gBAAgB,EAAIA,YAAY,gBAAgB,CAAC,aAAa,CAAC,EAAE,A,2CC5B9G,IAAI,EAAkB,G,YAiBO,KAGvB,EAAkB,IAflB,YAAe,EAAI,4BAA+B,EACpD,GAAkB,AAAoC,WAApC,4BAA+B,EAAkB,yBAA4B,CAAO,GAAQ,CAAZ,CAAW,EAM/G,QAAS,CAAC,CAAE,WAAS,CAAE,IACrB,EAAkB,CACpB,EAAG,KAcI,CACL,IAAI,iBAAkB,CACpB,OAAO,CACT,CACF,E,4CCjCe,CAAC,EAAI,KACpB,IAAM,EAAqB,AAAC,IACtB,CAAe,aAAf,EAAM,IAAI,EAAmB,AAAoC,WAApC,4BAA+B,AAAY,IAC1E,EAAG,GACC,IACFmB,oBAAoB,mBAAoB,EAAoB,IAC5DA,oBAAoB,WAAY,EAAoB,KAG1D,CAEI,aAAe,GACjBJ,iBAAiB,mBAAoB,EAAoB,IAGzDA,iBAAiB,WAAY,EAAoB,IAErD,C,iBC9BA,IAAM,EAAe,AAA4B,IAA5B,OAAOK,kBAAoCA,iB,gECF5D,EAA0B,C,UAA4B,KAE1D,EAAwB,IAAI,CAAC,CAAC,EAAO,EAAE,CAAE,CAAC;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC,CAAE,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,0DAA0D,CAAC,MAAQ,EAAE,CA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"}